摘要: 本文主要用python實現了對網站的模擬登錄。通過自己構造post數據來用Python實現登錄過程。當你要模擬登錄一個網站時,首先要搞清楚網站的登錄處理細節(jié)(發(fā)了什么樣的數據,給誰發(fā)等...)。我是通過HTTPfox來抓取http數據包來分析該網站的登錄流程。同時,我們還要分析抓到的post包的數據結構和header,要根據提交的數據結構和heander來構造自己的post數據和header。分析... 閱讀全文
作為一名IT菜鳥,用PE維護系統(tǒng)已經滿足不了我的需求,把windows裝進U盤又太俗,只能把目光轉向Linux了。 大致從網上搜索了一下教程,盡是些N年前老掉牙的教程。別的不說,那個麻煩勁就讓人吐了。 時代在發(fā)展,科技在進步,其實簡單的方法早就有了,雖然網上也有一些,但是并不全面,造成很多問題。現在,本小菜把它總結出來。
準備工作:
| Unetbootin:Linux系統(tǒng)寫入U盤工具。 | BOOTICE:引導設置工具。 | 你自己的Linux系統(tǒng)ISO鏡像。 | 把U盤格式化成FAT32格式,對著U盤點右鍵--格式化即可,不需要什么工具。
第一步,使用unetbootin向U盤寫入Linux系統(tǒng)ISO鏡像。
雙擊啟動Unetbootin,看到如下界面。 ![]() 選好后點確定。出現如下界面,大約30秒就能完成。 完成以上步驟,就把Linux系統(tǒng)寫入U盤了。
一個創(chuàng)業(yè)公司,本身就在成長中,員工也是一起成長,特別在國內現在的創(chuàng)業(yè)潮里更是年輕人占了大多數。在這樣的背景下,除非是專業(yè)程度非常高的職位,否則評價一個人是否合適其實更多的是看他愿不愿意把這份工作做好,解決了本身意愿的問題就要看公司是否在讓他做好這份工作上給予了足夠的指導。我個人來講不愿意放棄任何一個愿意投入到創(chuàng)業(yè)中來的員工,畢竟能力是可以培養(yǎng)的。
去年我招來一個員工,我看重的是她想做點事的態(tài)度,就像韋爾奇說的有些人你能感覺到他想做點什么。她的優(yōu)點是敢想敢說敢做,由于太有主見,在培訓期間她的部門負責人與負責直接帶她的同事都認為與她難以溝通,后來由于人手不夠她匆忙上崗,結果自然是一團糟糕。沒過多久,部門負責人因為家庭原因離職了,在給我的郵件中提醒我此人不合適這個工作。由于他在這方面經驗豐富,于是我就對自己當時的判斷產生了懷疑。但是我問了自己幾個問題,我們是否已經做的足夠多去培養(yǎng)這個人?對于提升這個部門內員工的工作能力我們是否已經沒有更多更好的辦法了?她表現很積極是否只是缺乏足夠的引導? 我沒有選擇直接下結論她是否適合這個工作,而是帶著這些問題接手了這個部門。結果是她現在不僅完全勝任了她的工作,更主動去做了很多嘗試把工作做的更好,這也是我在招她進來的時候就希望看到的,她沒讓我失望。 這也引發(fā)了我對創(chuàng)業(yè)公司如何判斷一個人是否適合該工作的思考,結論就是開頭所說的。我想這也是這個問題的核心。跟員工溝通表明你對他工作的期望,看他的態(tài)度是否愿意去達成這個期望。試圖去了解除了熱情以外是什么問題阻礙了他去達成。然后一起去解決這個問題。如果解決不了,那他自己也會想離開的。 今天一些小事,不詳談。通常我認為大道理自己都懂, 只是往往不能按著對的道理去做。 原因重點在性格,其實也就是習慣,遇事的第一反應。常拎拎自己不靈光的腦袋,如下:
問題如下:
Xml代碼
問題原因: struts2攔截器把forward這個請求攔截了。
解決方法: 修改web.xml文件 Xml代碼
一、歐氏距離二維的公式ρ = sqrt( (x1-x2)^2+(y1-y2)^2 ) 三維的公式ρ = sqrt( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 ) n維空間的公式n維歐氏空間是一個點集,它的每個點 X 可以表示為 (x[1],x[2],…,x[n]) ,其中 x[i](i = 1,2,…,n) 是實數,稱為 X 的第i個坐標,兩個點 A = (a[1],a[2],…,a[n]) 和 B = (b[1],b[2],…,b[n]) 之間的距離 ρ(A,B) 定義為下面的公式。 ρ(A,B) =sqrt [ ∑( a[i] - b[i] )^2 ] (i = 1,2,…,n) 二、K均值算法 k均值(k-means)是聚類算法的一種,聚類分析是根據在數據中發(fā)現的描述對象及其關系的信息,將數據對象分組。其目標是,組內的對象相互之間是相似的,而不同組中的對象是不同的。組內的相似性越大,組間差別越大,聚類就越好。 舉個例子,在二維平面上有幾百個點,在笛卡兒坐標系中有(x,y)坐標,把它們點到紙上,問題是如何把它們分成不同組,每個組里點彼此之前都比較相近,而離其它組的成員又比較遠。下面介紹的k均值就能干這種事。
基本k均值基本k均值思想很簡單,首先,選擇k個初始質心,其中k是用戶指定的參數,即所期望的簇的個數。每個點被指派到最近的質心,而指派到一個質心的點集為一個簇。然后根據指派到簇的點,更新每個簇的質心。重復指派和更新步驟,直到簇不發(fā)生變化,或等價的,直到質心不發(fā)生變化。
三、特征提取
1、第一步,參照網上曾經有人的做法: 為簡單起見,我們使用了最簡單的圖像特征——黑色像素在圖像中的分布來進行訓練和測試。首先,我們把圖像規(guī)范化為 32*32 像素的圖片,然后按 2*2 分切成 16*16 共 256 個子區(qū)域,然后統(tǒng)計這 4 個像素中黑色像素的個數,組成 256 維的特征矢量,如下是數字 2 的一個特征矢量: 核心代碼為: Vb.net代碼
2、在第一步的特征基礎上進一步加工,加上位置信息,以位置做為權重,調整第一步的特征矢量,核心代碼為:
Vb.net代碼
3、第三步計算每個數字的K均值,核心代碼為:
Vb.net代碼
最后,進行待識別數字的特征值,然后進行歐氏距離對比 Vb.net代碼
實驗表明,算法有一定的識別率,進一步提高需要改進算法,對于仿宋的識別率最高,達90%,黑體、楷體等識別率也可以,手寫數字,只要書寫較規(guī)范,然后寫的位置適當,在方框較中間,識別率較高
電價要漲,這是無疑的。無聊之極,我說說有什么好辦法節(jié)約電能。方法可能比較扯淡。。。
首先,盡量不需要臺式機地方盡量使用筆記本電腦。N多年前臺式電腦都是300瓦功率的電源,現在聽別人說湊機沒有500瓦根本電力供應不足。 其實就連省電的蘋果,Imac 功耗也有200瓦,反過來一個筆記本電腦只有50瓦,至于baidu有本本只有10瓦我們就不說了。 這還只是使用電源,類似MBP 這種光電池可以供7個小時的怪物還不算在內。 這樣使用本本能節(jié)電,而且可以大幅度節(jié)電。
其實節(jié)電的替代品并不是100% 優(yōu)秀的。 比如節(jié)能燈就不能頻繁開關。同樣一個本本代替臺式機就有很多問題: 1、性能 本本的性能根本比不上同配置的臺式機,特別是中高端。對于追求性能的朋友不是個好主意。 2、散熱 HP官方網站直接說了:不要用本本代替臺式機。 3、配件昂貴,維修昂貴。 MBP很好,如果你不小心一杯水。。。對不起,你損失慘重,支付昂貴的主板維修費用不如買臺新的。 臺式機主板壞了,一手市場買不到大不了掏TB或者去二手市場。應該不超千元可以搞定。
其次,如果只是上上網,聊聊QQ,不如用手機或者平板電腦代替本本,這樣功耗又減少很多很多。 平板電腦充電5小時能用8-10小時,功耗就是那5小時。ipad的電池大約25瓦時,能堅持10小時,那每小時耗電大約2.5瓦。
終極招數: 無聊一下,介紹下我們學校絕招。 我上大學的時候,每個宿舍每人給3噸水,5度電,這是免費給的。不過學校有規(guī)定說如果哪個宿舍能按額度不超的話,獎勵50元。 也就是說4個人的宿舍,如果每月用水用電不超過12噸水,20度電,就給50元。 不少宿舍成功獲得50元獎勵。 怎么做? 3噸水也許夠用了,5度電怎么都不夠。
其實方法很簡單,盡量不要在宿舍里面玩。下課什么沖去圖書館、或者自習室。yunnan university 自習室又非常多,還有插座給插本本。這就是本本優(yōu)勢。 反正你不去,耗資上億元的圖書館也不會少開一盞燈,不用白不用。 最后大家商量好,幾點回宿舍,用電也不超過1小時。燈泡用節(jié)能燈的話5度電足夠你們用了。
所有的Form表單提交會先檢查session的情況,使用一個單獨的同步請求,session過期返回expired,否則返回alive,前端JS判斷如果過期打開新窗口登錄。
jQuery(function($) {
// action listener for form commit $("form").unbind("submit").submit(checkSession); $(document).ajaxComplete(function() { $("form").unbind("submit").submit(checkSession); }); }); function checkSession(event) { var checkSession; jQuery.ajax({ url : sessionCheckServletPath, data : { checkSession : true }, async : false, complete: function (xhr, textStatus) { checkSession = xhr.getResponseHeader("sessionStatus"); } }); if ("expired" == checkSession) { window.open(ssoLoginUrl, "loginWindow"); return false; } return true; }
在用iframe的時候,用一些場景,比如先將iframe中的頁面切換之后,才能進行一些操作,這些操作是針對切換后頁面的,這個時候就比較惡心了,因為iframe切換頁面的時刻,是在當前頁面中的所有js執(zhí)行完之后,瀏覽器才根據新的地址location進行請求新切換的頁面,所以導致出現錯誤。
示例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>無標題文檔</title> <script type="text/javascript"> function test() { alert('11'); i1.location="3.html"; alert('22'); alert('33'); } </script> </head> <body> <iframe id="i1" name="i1" src="2.html" height="400" width="400" ></iframe> <input type="button" value="切換" onclick="test()" /> </body> </html> 上面js過程,等到彈出33之后,i1這個iframe才進行請求到3.html。 ;(function($){
/** * 依賴jquery-1.4.2 * 依賴jquery.json-2.2,參考http://code.google.com/p/jquery-json/ * 用于將form序列化成json串,并且可以反序列化添充回來 * 作者:段旭光 2010-08-08 */ $.fn.serializeObjectToJson = function() { /** * 此方法代碼參考:http://css-tricks.com/snippets/jquery/serialize-form-to-json/ */ var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; // return $.toJSON(o); }; /** * 按json格式添充現有form,基中json的key對應form內的元素name * 支持input、radio、select、textarea單值或多值 * 參數json為json對象 */ $.fn.unSerializeObjectFromJson = function(json) { if(!json) return; var values=eval('('+json+')'); var form=this; /** * 得到現有form表單的內容,如果表單有默認值則全部清空,主要針對單值表單項,如:checkbox、radio,因為這些項如果不選中會不被序列化記錄暫存,所以 * 在反序列化時,無法處理可能存在默認值的這些表單項,所以這里做一下特殊處理 */ var defaultFormJsonValues=form.serializeObjectToJson(); $.each(defaultFormJsonValues, function(key, value){ var object=form.find("*[name='"+key+"']"); if(object.length==1){ if(object.attr("type").toLowerCase()=='radio' || object.attr("type").toLowerCase()=='checkbox'){ object.attr("checked",false); } } }); //加載需要添充的表單內容 $.each(values, function(key,value){ var object=form.find("*[name='"+key+"']");//得到form內指定name的控件 if(object.length==1){ if(object.attr("type").toLowerCase()=='radio' || object.attr("type").toLowerCase()=='checkbox'){ if(object.val()==value){ object.attr("checked",true); } return true; }else{ object.val(value); } }else if(object.length>1){ object.each(function(i){ if(object.attr("type").toLowerCase()=='radio' || object.attr("type").toLowerCase()=='checkbox'){ if($.inArray($(this).val(),value)!=-1){ $(this).attr("checked",true); }else{ $(this).attr("checked",false); } }else{ $(this).val(value[i]); } }); } }); }; /** * 得到當前年的第一天 */ $.getCurrentYearFirstDay=function(format){ var date=new Date(); var fDate=new Date(date.getFullYear(),0,1,0,0,0,0); return $.getFormateDate(format,fDate); }; /** * 得到當前年的最后一天 */ $.getCurrentYearLastDay=function(format){ var date=new Date(); var fDate=new Date(date.getFullYear(),11,31,23,59,59,999); return $.getFormateDate(format,fDate); }; /** * 得到當前月的第一天 */ $.getCurrentMonthFirstDay=function(format){ var date=new Date(); var fDate=new Date(date.getFullYear(),date.getMonth(),1,0,0,0,0); return $.getFormateDate(format,fDate); }; /** * 得到當前月的最后一天 */ $.getCurrentMonthLastDay=function(format){ var date=new Date(); var fDate=new Date(date.getFullYear(),date.getMonth()+1,0,23,59,59,999); return $.getFormateDate(format,fDate); }; /** * 格式化日期 */ $.getFormateDate = function(fmt,date){ if(!date) date=new Date(); var o={ "M+" : date.getMonth()+1, //月份 "d+" : date.getDate(), //日 "h+" : date.getHours()%12 == 0 ? 12 : date.getHours()%12, //小時 "H+" : date.getHours(), //小時 "m+" : date.getMinutes(), //分 "s+" : date.getSeconds(), //秒 "q+" : Math.floor((date.getMonth()+3)/3), //季度 "S" : date.getMilliseconds() //毫秒 }; var week={ "0" : "\u65e5", "1" : "\u4e00", "2" : "\u4e8c", "3" : "\u4e09", "4" : "\u56db", "5" : "\u4e94", "6" : "\u516d" }; if(/(y+)/.test(fmt)){ fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length)); } if(/(E+)/.test(fmt)){ fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[date.getDay()+""]); } for(var k in o){ if(new RegExp("("+ k +")").test(fmt)){ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); } } return fmt; }; })(jQuery); |