张慧的博客

张慧的博客

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

#

     摘要: 本文主要用python实现了对网站的模拟登录。通过自己构造post数据来用Python实现登录过程。当你要模拟登录一个网站时,首先要搞清楚网站的登录处理细节(发了什么样的数据,给谁发等...)。我是通过HTTPfox来抓取http数据包来分析该网站的登录流程。同时,我们还要分析抓到的post包的数据结构和header,要根据提交的数据结构和heander来构造自己的post数据和header。分析...  阅读全文
posted @ 2012-08-01 21:42 张慧 阅读(61038) | 评论 (11)编辑 收藏

作为一名IT菜鸟,用PE维护系统已经满足不了我的需求,把windows装进U盘又太俗,只能把目光转向Linux了。

         大致从网上搜索了一下教程,尽是些N年前老掉牙的教程。别的不说,那个麻烦劲就让人吐了。

         时代在发展,科技在进步,其实简单的方法早就有了,虽然网上也有一些,但是并不全面,造成很多问题。现在,本小菜把它总结出来。

 

         准备工作:

 

        |  Unetbootin:Linux系统写入U盘工具。

        |  BOOTICE:引导设置工具。

        |  你自己的Linux系统ISO镜像。

        |  把U盘格式化成FAT32格式,对着U盘点右键--格式化即可,不需要什么工具。

        

         第一步,使用unetbootin向U盘写入Linux系统ISO镜像。

 

        双击启动Unetbootin,看到如下界面。




        选好后点确定。出现如下界面,大约30秒就能完成。


        完成以上步骤,就把Linux系统写入U盘了。

posted @ 2012-07-26 22:25 张慧 阅读(842) | 评论 (1)编辑 收藏

一个创业公司,本身就在成长中,员工也是一起成长,特别在国内现在的创业潮里更是年轻人占了大多数。在这样的背景下,除非是专业程度非常高的职位,否则评价一个人是否合适其实更多的是看他愿不愿意把这份工作做好,解决了本身意愿的问题就要看公司是否在让他做好这份工作上给予了足够的指导。我个人来讲不愿意放弃任何一个愿意投入到创业中来的员工,毕竟能力是可以培养的。
去年我招来一个员工,我看重的是她想做点事的态度,就像韦尔奇说的有些人你能感觉到他想做点什么。她的优点是敢想敢说敢做,由于太有主见,在培训期间她的部门负责人与负责直接带她的同事都认为与她难以沟通,后来由于人手不够她匆忙上岗,结果自然是一团糟糕。没过多久,部门负责人因为家庭原因离职了,在给我的邮件中提醒我此人不合适这个工作。由于他在这方面经验丰富,于是我就对自己当时的判断产生了怀疑。但是我问了自己几个问题,我们是否已经做的足够多去培养这个人?对于提升这个部门内员工的工作能力我们是否已经没有更多更好的办法了?她表现很积极是否只是缺乏足够的引导?
我没有选择直接下结论她是否适合这个工作,而是带着这些问题接手了这个部门。结果是她现在不仅完全胜任了她的工作,更主动去做了很多尝试把工作做的更好,这也是我在招她进来的时候就希望看到的,她没让我失望。
这也引发了我对创业公司如何判断一个人是否适合该工作的思考,结论就是开头所说的。我想这也是这个问题的核心。跟员工沟通表明你对他工作的期望,看他的态度是否愿意去达成这个期望。试图去了解除了热情以外是什么问题阻碍了他去达成。然后一起去解决这个问题。如果解决不了,那他自己也会想离开的。 
posted @ 2012-07-26 22:24 张慧 阅读(889) | 评论 (0)编辑 收藏

今天一些小事,不详谈。

通常我认为大道理自己都懂, 只是往往不能按着对的道理去做。 原因重点在性格,其实也就是习惯,遇事的第一反应。

常拎拎自己不灵光的脑袋,如下:

  • 工作上的

想清楚了再说话

换位思考

不要轻易下结论

 

  • 个人的

相信该相信的人   偶尔抽风别抽大发了

 

  • 其他

要有耐心  要讲究方法 不要让自己的坏情绪影响到他人

可以做的每件事都很重要 要认真      想到的 就去做

 

 

任何事情的发生都有原因和结果,但一切均有利于我,因为一切都是为了最好的做准备。

posted @ 2012-07-26 22:24 张慧 阅读(674) | 评论 (0)编辑 收藏

问题如下:

 

Xml代码  收藏代码
  1. index.jsp页面:  
  2.   <jsp:forward page="show.action"></jsp:forward>  
  3.   
  4. 在struts.xml配置如下:  
  5.   <package name="struts2" extends="struts-dafult">  
  6.   <action name="show" class="action.ShowAction">  
  7.     <result name="showinfo">/showinfo.jsp</result>  
  8.   </action>  
  9.   </package>  
  10. 在运行时出现404错误(找不到 show.action )  

 

问题原因:

struts2拦截器把forward这个请求拦截了。

 

解决方法:

修改web.xml文件

Xml代码  收藏代码
  1.  <filter>  
  2.     <filter-name>struts2</filter-name>  
  3.     <filter-class>  
  4.         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
  5.     </filter-class>  
  6.   </filter>  
  7.   <filter-mapping>      
  8.     <filter-name>struts2</filter-name>  
  9.     <url-pattern>/*</url-pattern>  
  10.   </filter-mapping>  
  11.   
  12. 修改为:  
  13.   <filter>  
  14.     <filter-name>struts2</filter-name>  
  15.     <filter-class>  
  16.         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
  17.     </filter-class>  
  18.   </filter>  
  19.   <filter-mapping>      
  20.     <filter-name>struts2</filter-name>  
  21.     <url-pattern>/*</url-pattern>  
  22.     <dispatcher>REQUEST</dispatcher>  
  23.     <dispatcher>FORWARD</dispatcher>  
  24.   </filter-mapping>  
posted @ 2012-07-21 22:14 张慧 阅读(4267) | 评论 (0)编辑 收藏

 一、欧氏距离

二维的公式

  ρ = 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)是聚类算法的一种,聚类分析是根据在数据中发现的描述对象及其关系的信息,将数据对象分组。其目标是,组内的对象相互之间是相似的,而不同组中的对象是不同的。组内的相似性越大,组间差别越大,聚类就越好。

举个例子,在二维平面上有几百个点,在笛卡儿坐标系中有(x,y)坐标,把它们点到纸上,问题是如何把它们分成不同组,每个组里点彼此之前都比较相近,而离其它组的成员又比较远。下面介绍的k均值就能干这种事。

 

基本k均值

基本k均值思想很简单,首先,选择k个初始质心,其中k是用户指定的参数,即所期望的簇的个数。每个点被指派到最近的质心,而指派到一个质心的点集为一个簇。然后根据指派到簇的点,更新每个簇的质心。重复指派和更新步骤,直到簇不发生变化,或等价的,直到质心不发生变化。

 

三、特征提取

 

1、第一步,参照网上曾经有人的做法:

为简单起见,我们使用了最简单的图像特征——黑色像素在图像中的分布来进行训练和测试。首先,我们把图像规范化为 32*32 像素的图片,然后按 2*2 分切成 16*16 共 256 个子区域,然后统计这 4 个像素中黑色像素的个数,组成 256 维的特征矢量,如下是数字 2 的一个特征矢量:
0 0 4 4 4 2 0 0 0 0 0 0 0 0 2 4 0 0 4 4 4 2 0 0 0 0 0 0 0 0 2 4 2 2 4 4 2 1 0 0 0 0 0 0 1 2 3 4 4 4 4 4 0 0 0 0 0 0 0 0 2 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 4 4 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 2 4 4 4 2 2 2 2 4 3 2 2 2 2 2 0 2 4 4 4 0 0 0 0 4 2 0 0 0 0 0 0 2 4 4 4 0 0 0 0 4 2 0 0 0 0 0 0 2 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4 4
相应地,因为我们只需要识别 0~9 共 10 个数字,所以创建一个 10 维的矢量作为结果,数字相应的维置为 1 值,其它值为 0。数字 2 的结果如下:0 0 1 0 0 0 0 0 0 0

核心代码为:

Vb.net代码  收藏代码
  1. For m_i As Integer = 1 To 16  
  2.      myinitwidth = myendwidth  
  3.      myendwidth += jiange  
  4.      For myi As Integer = myinitwidth To myendwidth  
  5.          For myj As Integer = myinitheight To myendheight  
  6.              mycolor = myybcominfo.mybitmap.GetPixel(myi, myj)  
  7.              If mycolor.B = 0 And mycolor.R = 255 And mycolor.G = 0 Then  
  8.                  While (Not Monitor.TryEnter(mymonitorobj))  
  9.                      Thread.Sleep(1)  
  10.                  End While  
  11.                  myjgtz(mycount) += 1  
  12.                  Monitor.Exit(mymonitorobj)  
  13.                  Thread.Sleep(1)  
  14.              End If  
  15.          Next  
  16.      Next  
  17.      mycount += 1  
  18.      myendwidth += 1  
  19.  Next  

 

2、在第一步的特征基础上进一步加工,加上位置信息,以位置做为权重,调整第一步的特征矢量,核心代码为:

 

 

Vb.net代码  收藏代码
  1. For mi As Integer = 0 To 15  
  2.     If myjgtz(mi) > 0 Then  
  3.         pictz(myii, myjj, m_j) += mi * myjgtz(mi)  
  4.     End If  
  5.     myjgtz(mi) = 0  
  6. Next  

 

3、第三步计算每个数字的K均值,核心代码为:

   

Vb.net代码  收藏代码
  1. '计算K均值  
  2.        Dim mmsum As Double = 0  
  3.        For myii As Integer = 0 To 9  
  4.            mystr &= vbCrLf & myii & "的样本均值是:" & vbCrLf  
  5.            For myk As Integer = 0 To 15  
  6.                mmsum = 0  
  7.                For myjj As Integer = 0 To 9  
  8.                    mmsum += pictz(myii, myjj, myk)  
  9.                    ProgressBar1.Value = count  
  10.                    count += 1  
  11.                Next  
  12.                mmsum /= 10  
  13.                ktz(myii, myk) = mmsum  
  14.                mystr &= ktz(myii, myk) & ","  
  15.            Next  
  16.            mystr &= vbCrLf  
  17.        Next  

 

最后,进行待识别数字的特征值,然后进行欧氏距离对比

Vb.net代码  收藏代码
  1. Dim jqtz(16) As Integer  
  2.                 '欧氏距离   
  3.         Dim mys(10) As Integer  
  4.         Dim temp As Integer = 1000000000  
  5.         Dim jgnum As Integer = -1  
  6.         For m_iii As Integer = 0 To 9  
  7.             mys(m_iii) = 0  
  8.             For m_jjj As Integer = 0 To 15  
  9.                 mys(m_iii) += Pow(ktz(m_iii, m_jjj) - jqtz(m_jjj), 2)  
  10.             Next  
  11.             If mys(m_iii) < temp Then  
  12.                 temp = mys(m_iii)  
  13.                 jgnum = m_iii  
  14.             End If  
  15.         Next  
  16.         jg.Text = ""  
  17.         For m_iii = 0 To 9  
  18.             jg.Text &= m_iii & ":" & mys(m_iii) & vbCrLf  
  19.         Next  
  20.         jg.Text &= "结果是:" & jgnum  

实验表明,算法有一定的识别率,进一步提高需要改进算法,对于仿宋的识别率最高,达90%,黑体、楷体等识别率也可以,手写数字,只要书写较规范,然后写的位置适当,在方框较中间,识别率较高



 

 

 

 

 

 

posted @ 2012-07-21 22:13 张慧 阅读(1249) | 评论 (0)编辑 收藏

  电价要涨,这是无疑的。无聊之极,我说说有什么好办法节约电能。方法可能比较扯淡。。。

 

  首先,尽量不需要台式机地方尽量使用笔记本电脑。N多年前台式电脑都是300瓦功率的电源,现在听别人说凑机没有500瓦根本电力供应不足。

  其实就连省电的苹果,Imac 功耗也有200瓦,反过来一个笔记本电脑只有50瓦,至于baidu有本本只有10瓦我们就不说了。

  这还只是使用电源,类似MBP 这种光电池可以供7个小时的怪物还不算在内。

  这样使用本本能节电,而且可以大幅度节电。

 

  其实节电的替代品并不是100% 优秀的。

  比如节能灯就不能频繁开关。同样一个本本代替台式机就有很多问题:

  1、性能

  本本的性能根本比不上同配置的台式机,特别是中高端。对于追求性能的朋友不是个好主意。

  2、散热

  HP官方网站直接说了:不要用本本代替台式机。

  3、配件昂贵,维修昂贵。

  MBP很好,如果你不小心一杯水。。。对不起,你损失惨重,支付昂贵的主板维修费用不如买台新的。

  台式机主板坏了,一手市场买不到大不了掏TB或者去二手市场。应该不超千元可以搞定。

 

  其次,如果只是上上网,聊聊QQ,不如用手机或者平板电脑代替本本,这样功耗又减少很多很多。

  平板电脑充电5小时能用8-10小时,功耗就是那5小时。ipad的电池大约25瓦时,能坚持10小时,那每小时耗电大约2.5瓦。

 

  终极招数: 无聊一下,介绍下我们学校绝招。

  我上大学的时候,每个宿舍每人给3吨水,5度电,这是免费给的。不过学校有规定说如果哪个宿舍能按额度不超的话,奖励50元。

  也就是说4个人的宿舍,如果每月用水用电不超过12吨水,20度电,就给50元。

  不少宿舍成功获得50元奖励。

  怎么做?

  3吨水也许够用了,5度电怎么都不够。

 

  其实方法很简单,尽量不要在宿舍里面玩。下课什么冲去图书馆、或者自习室。yunnan university 自习室又非常多,还有插座给插本本。这就是本本优势。

  反正你不去,耗资上亿元的图书馆也不会少开一盏灯,不用白不用。

  最后大家商量好,几点回宿舍,用电也不超过1小时。灯泡用节能灯的话5度电足够你们用了。

posted @ 2012-07-21 22:13 张慧 阅读(861) | 评论 (0)编辑 收藏

所有的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;
}
posted @ 2012-07-18 21:23 张慧 阅读(1550) | 评论 (0)编辑 收藏

在用iframe的时候,用一些场景,比如先将iframe中的页面切换之后,才能进行一些操作,这些操作是针对切换后页面的,这个时候就比较恶心了,因为iframe切换页面的时刻,是在当前页面中的所有js执行完之后,浏览器才根据新的地址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。  
posted @ 2012-07-18 21:22 张慧 阅读(1410) | 评论 (0)编辑 收藏

;(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);
posted @ 2012-07-18 21:21 张慧 阅读(5675) | 评论 (3)编辑 收藏

仅列出标题
共5页: 上一页 1 2 3 4 5 下一页