• 以后所有的技术博客都会记录在 百度博客 上记录

    这个博客不再更新

  • def f(n, x):
       n
    = 2
       x
    .append(4)
       print 'In f():', n, x

    def main():
       n
    = 1
       x
    = [0,1,2,3]
       print 'Before:', n, x
       f
    (n, x)
       print 'After: ', n, x

    main
    ()

    Output:

    Before: 1 [0, 1, 2, 3]
    In f(): 2 [0, 1, 2, 3, 4]
    After: 1 [0, 1, 2, 3, 4]
    Why this happend?
    Function parameters are names. When you call a function Python binds these parameters to whatever objects you pass (via names in a caller scope).

    Objects can be mutable (like lists) or immutable (like integers, strings in Python). Mutable object you can change. You can't change a name, you just can bind it to another object.
    Looking another example:
    def test(a,b=[]):
    print id(a),id(b)
    a = 2
    print id(a)
    b.append(a)
    return b
    print test(1)
    print test(2)
    Output:
    
    10811536 16430904
    10811524
    [2]
    10811512 16430904
    10811524
    [2, 2]
    So name bind object ,if object can't change,thus name can't change.And fuction parameter are names.
    
    refering:
    
    http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables
    http://docs.python.org/reference/executionmodel.html#naming-and-binding
    这就是为什么在python中有的参数能变,有的不能变
  •  

          在Windows上通过GYP来构建V8工程的时候遇到了一些问题。记下来,备份一下
    最新的代码是由GYP来构建,以前的是用Scons来构建。
    官网上有一篇文章介绍:http://code.google.com/p/v8/wiki/BuildingWithGYP

    1.下载v8源代码,
          使用SVN:http://v8.googlecode.com/svn/trunk

    2.安装GYP
          在下载下来的V8源代码的目录下执行:svn co http://gyp.googlecode.com/svn/trunk build/gyp (要保证SVN路径加入到path环境变量下)或者在V8的源代码下面的build/gyp目录下checkout

    3.安装cygwin 与 pthon (建议使用Chromium项目里面使用的版本)
    svn co http://src.chromium.org/svn/trunk/deps/third_party/cygwin@66844 third_party/cygwin
    svn co http://src.chromium.org/svn/trunk/tools/third_party/python_26@89111 third_party/python_26

    4. 运行
    用python 运行 build/gyp_v8 生成 all.sln. 使用vs2008打开

    5. Run hello world
    http://code.google.com/apis/v8/get_started.html  里面有hello world 实例。注意下面几点:
    • 把上面编译好的lib加入到附加依赖项中:v8_base.lib、preparser_lib.lib、v8_nosnapshot.lib、v8_snapshot.lib
    • 依赖中加上winmm.lib、ws2_32.lib,相当于#pragma comment(lib,"ws2_32.lib")
    • 把v8.h拷贝到项目中来

    关于它的编译教程:

     

  • 要在以前的SSH中代码中支持https,在网上都会提到struts2-ssl-plugin这个插件,有很多相关的文章介绍,大同小异,这里只说几个关键点:

    1.升级Struts2,我用的时候必须struts必须是2.1.18版本以上(包括2.1.18),主要是替换两个包,一个是struts2-core-2.x.xx.jar,一个是xwork-core-2.x.xx.jar,替换这两个包。必要时要删除struts2-codebehind-plugin-2.x.xx.jar这几个插件包,不然会报错

    2.加入struts2-ssl-plugin.jar这个包,并在struts加入相应的代码,可以参考这儿

    3.配置服务器,我用的是tomcat,配置服务器支持https,可以参考这儿,其中的密码可以自已设置,只要最后在改server.xml的时候用对就行了。

    配置好后,发现一个问题,就是https的包会extends="ssl-default",ssl-default继承struts-default ,这让json-default情何以堪啊。暂时还没有发现比较好的解决方法。

  • 在编写chm的时候需要把自已的编写的htm中出现的一个单词替换成别外一个单词。搜了一下批处理的操作,Google的代码大多都有一些瑕疵,后来自已整理了一下,基本可以满足我的要求。做个记号,方便查找

    代码:

    ::替换文件夹下的字符串,包括子文件,把该文件放在需要处理的文件夹下即可

    ::注意,此操作会删去空行,如果空行不能删除,则不推荐使用

    ::使用的时候请注意修改变量



    @echo off

    ::把需要搜索的文件赋值给变量pathName

    set fileName=*.htm


    ::把将被替换的字符串赋值给good

    set source=good


    ::把替换字符串赋值给false

    set replace=false

    setlocal enabledelayedexpansion

    for /f "delims=" %%a in ('dir /s /b %fileName%'do (

    ren "%%a" "%%~nxa_"

    for /f "delims=" %%b in ('type "%%a_"'do (

    set "t=%%b"

    set "t=!t:%source%=%replace%!"

    set bb=!t: =!

    if "!bb!" neq "" echo !t!>>%%a

    )



    del /q /s /f "*_"

    pause

     

     

    这里面可以把good替换成bad,但是有两个问题

    1.它把空格给删了,如果不要那一行的话,就会出现echo处于打开状态,没有找到更好的

    2.对有“!”感叹号的语句不能很好的处理,也没有发现好的解决方案

     

    由于这份代码满足了我的要求,所以就没有再深入研究,感觉批处理处理字符串还是有很大的问题,如果有时间的话,写一个python脚本。

     

    后来发现了作为程序员的一个通用毛病,遇到这样的问题喜欢找脚本,却不懂得找现有的工具,有些工具就把这些问题处理得很好。当然程序有自已的不通用的问题,但是解决问题就是好东西。这里推荐一个:文本替换专家。有绿色版本的,我觉得很好用。

    编写chm用的是winchm,感觉这个软件还是比较傻瓜式的,很容易上手,并且有自已的命令行模式,我很喜欢。

     

  • 今天无意中发现VS中有一个很好的功能-Build Events

    设想一下这个场景:程序运行的时候必须要依赖某个文件,但是这个文件逻辑又不属于程序里面,在程序里面创建不合适。或者需要在程序编译的时间设置删除一些log信息,这个时候Build Events就很有用了

    一共有三个选项(VS2005):

    1.Pre-Build Event 这个是在编译的时候运行

    2.Pre-Link Event 这个是在程序编译链接的时候运行

    3.Post-Build Event 这个是在程序编译链接成功完后运行

    比如可以在Pre-Build Event 里面加上批处理,Copy,创建一些文件。

    里面当然都是用的Dos命令,批处理。再加上程序内置的宏变量就OK了。

  • 在此分享一下我的对好代码的观点: 

    • 良好的注释规范,对每个函数都说明函数作用,参数含义  
    • 并且在关键代码调用的时候说明为什么要这么做 
    • 关键代码必须写注释(例如以前写算法时候写的一行代码: b[0]=(b[0]^(i<<1)^i^(i>>1))&(p-1),当时没有写注释,现在想理解它不花上几十分钟是不可能的)  
    • 编码必须遵守特定的命名规则, 编码规范
     
    • 代码在很长一段时间是给自已读或者给其它人读的,所以要注意易读性,条理很清楚  
    • 函数不能太长,超过50行的函数很难看  
    • 一个文件的函数也能太多,我觉得一个文件的代码不能超过500行,超过了就说明代码很难懂  
    • 另外嵌套循环最好不要超过三个,否则很难懂  
    • 一行代码不要有太多的逻辑(ff[i]=tmp%factor[i]==0 ? ff[tmp]*factor[i]:ff[tmp]*(factor[i]-1); 
      现在看来很想打人
     
    结构清楚:

    • 代码分层,从大的方面来说,每个工程只负责哪个模块,每个文件夹只负责某个方面的逻辑,每个类只负责与它相关的逻辑,从小的来说就是每个方法只有一个功能。另外不要有重复的代码。 
    • 耦合度低,扩展性好 
    • 满足需求功能,不要写于功能无关的代码。不能因为某个功能很炫,但是与需求或者以后的扩展没有关系就加进来。(以前自已写小程序写着写着已经忘了原来写代码的目的是什么了) 
    • 功能函数的时候要有对应的测试代码,有的代码不能很好写测试,这个时候就要反思了是不是设计的问题(现在体会很深,有时为了一个单元测试而抓狂)

     

  •  

      不知道怎么开始写这篇文章,就跟我不知道什么时候喜欢上它一样。


     

    我承认我不是一个一见钟情的人,似乎也不相信一见钟情,总是希望事情就这么顺其自然就好了。看球看得比较晚,最早的记忆应该是04年国足冲世界杯,当时跟着一大堆球迷在武中里面的小卖部里面看中国打香港那场比赛,比赛过后很多人都在那里讨论,一直在叹气。当时知道中国队进不了世界杯了,但是感叹不深,可能受家人的影响,小时候一直嘲笑哥哥怎么喜欢看足球,一个踢了九十分钟可能都不会进球的比赛。不过听到一句感叹就是:又要等四年!四年,四年过后我可能都快大学毕业了,是什么让他们愿意等半年,我不知道,我也不愿意知道。


     

    后来班上一些同学每到周一、三、五都有人去买体坛周报,开始看一些相关的报道,知道了五大联赛,知道了皇马的银河战舰 ,知道了老弗爷的曼联。那个时候纯粹是为了看球而看球,看球就是看热闹,没有什么牵挂。


     

    关注多了,就看一些球,高中主要是看国足,国青,还有家乡球队——武汉黄鹤楼。高中也留下了一些美好的回忆:国青队在05年的世青赛上杀得风生水起,小组赛三战三胜,进九球,还是由不同的九个人打进的,而来自曼联的董方卓还只能坐在替补席上,最后16强跟德国在家看得现场直播,当时是黄健翔解说的,当时我觉得解说得真好,踢得也好,最后虽然输了,但是我看到了希望,从中喜欢上了国青队,可惜天朝把克劳琛给解聘了,从此国青不再风光。还有武汉队,05年在中超见神杀神,豪取七连胜,只可惜猪协又把教练裴思才给调到女足去了,最后落个两败俱伤,武汉雄姿不在,而女足也继续走着下坡路线……


     

    高中总体来说看球是幸福的,没有什么牵挂,看球也得到了不少乐趣。


     

    06年高考遇上德国世界杯,自已却不知道去知道谁,当时只知道那一年意大利挺厉害的,一年没有输过球,所以就支持它,但是却没有喜欢上,记得当时看球的时候经常睡着,主要的原因就是不了解他们,或者没有动力去看。记得决赛的时候我跟江舟那天晚上刚到广州在宾馆里面说是要看,但是电视一直开着,我们两个却都睡着了。


     

    大一来到了这个陌生的城市,由于室友都不喜欢看足球,班上似乎也找不到一起看球的人,也只是偶尔买下报纸看下。大二后买了电脑,看比赛渐渐多了,由于英超开球比较早,所以看英超的比赛渐渐多了,那几年基本上都是曼联与车子争冠军。


     

    说起来搞笑,我没有喜欢上沉稳的曼联也喜欢上霸气外露的车子(魔力鸟一直是我喜欢的教练)却单单喜欢上了曼联的死对头——Liverpool,一个默西河畔都市郡的一个港口城市。那里没有我喜欢的教练,也没有我喜欢的球员——卡卡,但是看了几场比赛就决定了做它的球迷。


     

    很多年过后,别人会问我:你为什么喜欢Liverpool,是啊,我为什么喜欢这支队,一个21年都没有染指过联赛冠军的球队,一个落寞的王朝,一个留不住球星的球队。只能说这个世界真的是靠缘分。有缘有分的人才可能在一起。


     

    心中有牵挂看球就是好,虽然我没有见过欧文的年少成名,也没有看到包子的惭惭成长为一个中场巨星,甚至没有看到它的“伊斯坦布尔奇迹夜”,连06年足总杯大逆转都错过了……但是我有幸见到托雷斯在利物浦的成长,也看到了利物浦世界级豪华中场的三叉戟的雄风,看到过客站车子欧冠的荡气回肠的44,更是在一周内兵不血刃的屠杀了皇马震惊世界足坛,那几年,在法拉的带领下,我们似乎找到了昔日的雄风,可惜奖杯还是离我们那么远,0809年中期的一系列平局又让我们的死对头抢走离我们最近的一次英超冠军,记得当时那么痛,比较任何时候看球都痛。


     

    越关注它,就越喜欢它,去了解它的历史,了解得越多,就越喜欢。了解球队会辉煌的历史,球队文化精神,了解KOP,了解YNWA。我想喜欢利物浦就想我期待的爱情一样,开始的时候是由于偶然的一个契机互相认识,起初不在意,惭惭地去了解她,了解她的现在,了解得越多,然后心随着她而动,她开心我也开心,她不开心,我更不开心。这个时候就去了解她的过去,了解得越多,越喜欢,恭喜你了,这个时候你喜欢上了她了。可惜到现在还是孤家寡人一个,哈哈。


     

    从龙哥走后,球队开始大不如以前,开始走下坡路,双子星经常受伤,小马哥也远走巴萨,从欧冠到欧盟再到降级区,我想没有一个KOP的心在滴血,这还是我们的球队吗?每次看到霍奇森那苍白无力的解释,心痛,这还是Liverpool吗,Liverpool的精神在哪儿,在联赛杯抽到曼联说我们倒霉吗,我们是利物浦,我们是利物浦!我们是有着百年的历史的利物浦,我们是曾经傲视欧洲的利物浦,我们是大不列颠之王的利物浦。霍奇森估计是历史上最差教练之一。


     

    还好我们有国王,国王回归,加上两个吝啬的老板换成了精明的亨利,利物浦走上了复苏之路,虽然金童远走车子,包子雄风不在,但是我们在龅牙苏、卡罗尔这批青年才俊的带领下定会走向伟大的复兴之路。相信国王,相信Liverpool


     

    巴萨经常挂在嘴上的一句名言是:我们不仅仅只有足球。Liverpool何尝不是,喜欢利物浦不是因为几场比赛,也不是因为某个球星,而是它的底蕴,一日Kop,终身Kop!我们经过过兴旺与衰落,荣耀与落魄,我们经过过希尔斯堡惨案,我们经过海瑟尔的鲜血淋漓,我们更是经历过在二级联赛打拼的岁月。无论是兴盛还是衰落红军永远是红军,科克比的孩子们也会在KOP的助威中,在香克利佩斯得中的注视中捍卫红军的尊严。我们离开冠军还有这么多,曼联呢?天朝五台曾经说过:让一个人爱上利物浦很简单,只要在比赛开始前带他到Anfield球场,指着球场的一角说,听,那是KOP在歌唱……


     

    当风雨来临,我们昂首前行,因为我们来自利物浦,在寒冷的黑夜里,在凄苦的风雨中,也许会梦想破灭,只要你心中还有不曾熄灭的希望之火,终将看到那片金色的天空,只要记住,你永远不会独行! 


     

    上个赛季,利物浦很长一段时间在降级区,室友小黄就经常说换个队吧,不要吊死在一颗树上。对于他来说,他喜欢巴萨很简单,因为那里有Messi,我问他假如Messi不在了,你还会喜欢巴萨吗,他说很可能不,我摇摇头坚定的说我永远是KOP,即使它真的降级了。别人笑着说以后超哥的女朋友肯定会很幸福。哈哈,希望如此吧。