沙扬娜拉,MMIE

年终总结要拖一下,这差不多是每年的惯例。

去年可能是我这两三年来最不用功的一年,却似乎是我收获最多的一年。为此我很感谢我身边的人,既然我都不怎么用功,那我收获的的肯定都是从慷慨的他们那里得到的。

先看一下去年写的计划(MMIE)好了。

1. 给自己买了5本非技术的书,要认认真真读完。

  • 发现非技术的看起来还是很快的,去年一共看了7本,嫌疑人X的献身,1988,三重门,放学后,民主的细节,侦探伽里略,青春,黑客与画家。技术的看的不多,但还算看的仔细。

2. 计划以后每年去一到两个地方旅游,看时间吧,今年暂定春节去厦门看看。

  • 春天去了次厦门,真是愉快的体验,好习惯,要保持!

3. 既然当了QA了,就要做好。从Perl帝手里接过来的事情一定不能干砸了,好好学学automation test。

  • 今年一年都在做QA automation,做了些不同的尝试,也收获了一些经验。其实这个东西还是蛮有意思的,因为
    1. 东西是做给ITer们用的,做起来比较自由,可以做的有意思。
    2. 光有测试工具还不行,怎么让测试工具配合软件开发的测试流程是个值得一直思考的问题。测试工具既要减轻QA的重复劳动又要能引导测试过程的规范。
    3. 一直要思考计算机程序的本质之一:怎样最大限度的减少人的重复劳动。

4. 用动态编程语言(Perl, Python神马的)写一个有意思的东东。

  • 2010年下半年曾经学了一个星期的python,写了一个小东西,可惜因为项目放弃了使用python从此搁下了。今年算有了点决定权,2011下半年又拿起django框架的教程,花了两个星期写了个网页的骨架,不过因为不会前端难看到不好意思拿出来演示。今年吧,抽点时间美化一下。

5. 找一个C/C++开发的产品,读懂代码。

  • 这个算是失败了,读了一点memcached和innodb的代码,但是没有读完。

6. 要抓机会锻炼*nix environment programming,各读一本OO和设计的书。

  • 没完成吧,今年继续。

7. 不要再装逼,至少要学着由内而外的装。

  • 哈哈,这个就留给朋友们评说吧。

8. 经常让自己看看上面这些都做了没。

  • 从更新blog的速度就可以看出这条失败的可以

================ 我是2011和2012的分割线 =================

去年还有一些其他很值得纪录的事情。

去年,就在我生日前一天,那个MMIE里的可爱姑娘终于答应我问了一年多的请求!虽然我们有90%的日子都是分隔两地,但她带给我的快乐一直充满着我的生活。今年我再许一个愿望, 希望她能早点来杭州(^_^)

下半年美国客户来公司交流时给我颁发了一个刻着Rock Star的iPod touch。接着Boss又推荐我参加公司优秀员工评选,也终于在公司年会上得到了优秀员工奖。这些让我觉得过去一年自己并没有虚度。

另外,去年在豆瓣上一共纪录了124部电影为看过,一部分是以前看过的旧电影,但今年看的电影还是占了所有电影总数的三分之一。豆瓣fm推出以后,一共听了15601首歌,接触的音乐风格比我之前这20多年加起来都多。于是我打算恬不知耻的追认2011为我的文艺年哈哈。

今年的目标还没什么头绪。一是因为最近略忙没什么时间可以好好想想,二是有些事情真的在我能力以外。比如,今年爸妈都很辛苦,一直为家庭操劳,希望今年爸妈不再需要负担这么多事情,奶奶的病情也能够转好。

先写这么多吧。最近状态不是很对,所以才拖了这么久。

, ,

1 Comment

作为一个命令行偏执狂…

好久没有更新博客了,这次更新的原因是上次贴的Perl脚本查Google字典因为Google关闭字典服务的关系已经不能再用了。

前段时间接触了一个新东西叫XPath,名字听起来挺酷的,于是拿来又折腾了一个脚本出来。这次查的是有道辞典,没有Google的好用,但因为Google字典已经不再提供服务,目前能找到的Google字典服务都是通过Unofficial API实现的,也不知道能用多久,就先这么凑合着用吧。

上图
youdao_dict

这次脚本代码还是主要分两部分,一部分是通过LWP::UserAgent抓网页内容,一部分是用HTML::TreeBuilder::XPath分析网页内容提取需要的数据。

  • XPath其实是一门用来在XML文档中查找信息的语言,比较简单的说就是他能用一个路径表达式定位到一个XML文档里面的某个(或某几个)标签。因为XHTML借鉴了XML的结构,所以我们也可以用XPath来定位XHTML网页中的某个特定标签(XPath几乎总是能定位到一个正常网页中的特定标签的)。
  • 在原来使用的网页解析模块HTML::TokenParser中,所有网页标签都按出现顺序排列,并且标签之间都是并列的关系。但是没有一个Browser DEV tool会用这种结构给开发者展示网页源代码,即便我们写代码时也不会这样写。所以这样并列的结构其实对开发者来说是不直观的,也使得编码复杂了很多。
  • 而在XPath的世界里,网页的结构是树型的,每个标签都是这棵树上的结点或叶子,开发者会发现很容易就能找出一个路径通往我们想要的那个标签。不过如果你有Firebug和FireFinder这两个网页开发辅助插件,你会发现用起XPath来更加得心应手。

直接对比下面一个脚本和上一个脚本中网页分析部分的代码,你就能直观的感受到上面提到这两种方法的差别。XPath的详细介绍和语法,请猛击W3school Read the rest of this entry »

, , ,

5 Comments

比赛的意义

今天是2011 World Finals ACM/ICPC的比赛日,晚上10点开始看比赛的直播,看着每个学校的队伍的排名交错的攀升,看到HDU-Knuth的两题AC,两题WA,突然脑海闪回过自己的大二暑假,背上出了点汗,手臂上起了鸡皮疙瘩。

杭电进World Finals已经不是第一次,但是今年退役后看比赛跟去年在役看比赛是两种心情。在役时似乎更多的是不甘心和一些小嫉妒,因为我显然WF无望。之前自然也知道想进World Finals很难很难,但还是难免偶尔会狂妄的暗暗把这当作自己的目标。现在的我,对自己宽容了,内心平静了,但有时候也怀疑自己是不是失去了激情和进取心。

记得以前北大的CICI姐姐写过一篇日志,大致是说她在World Finals看到一个非洲的大学的队伍,只AC两题,却在赛后激动的跟领队拥抱欢呼。虽然她一个人也可以做出两题,但是她却没有那些人的快乐。

想到这里,我释然了,ACM/ICPC竞赛可以给我的,我都已经得到了。

, , ,

1 Comment

SVN导入外部项目到本项目版本库

原文链接

为什么需要导入外部项目到本项目版本库

在项目开发的过程中我们很可能会遇到这种情况:我们手头开发的项目可能要用到其他项目的内容。

最容易想到的办法是从其他项目的版本库里取出那部分内容,拷贝并添加到本项目的版本库中。但如果我们要令其他项目那过来的那部分内容保持最新,就是一个非常繁琐的工作了。

有没有高效的办法

如果本项目的版本库自动取得被引用的外部项目的更新,例如每次”svn update”或者”svn checkout”都可以去外部项目的版本库取得最新的内容,那实在是非常方便。我们可以通过Subversion的外部定义功能来实现这个目的。外部定义是一组本地文件路径和URL的映射,使svn可以取得外部版本库的文件到本地路径。

主要要用到以下几个svn指令
svn propset  svn:externals PROJECT_NAME
svn propedit svn:externals PROJECT_NAME
svn propget  svn:externals PROJECT_NAME

前两个指令都可以用来设置对应PROJECT_NAME的svn:externals属性,一般推荐用第二个。svn:externals的属性列表指定项目中模块的相对路径,版本信息和对应的URL。

例如:

third-party/foo         svn://example.com/repos/foo
third-party/bar -r 1234 svn://example.com/repos/bar

Subversion 1.5及以上的版本也支持以下的格式:

        http://example.com/foo third-party/foo
-r 1234 http://example.com/bar third-party/bar

第三个指令则可以查询项目的外部定义的属性列表。

, ,

No Comments

Perl脚本查Google字典

这个Perl脚本其实并不能算我的原创,是师傅Perl帝拿出来分享的。本来拿的是iciba的翻译,我另外改了一个上Google字典拿翻译的版本。

要修改的原因:
1. Google字典的英中字典,有双语解释;
2. Google字典的例句和相关短语这些资源要丰富的多,可以帮助理解单词使用的语境,写英文材料时非常有用;
3. 我习惯用Google字典,我一个G粉。

先上截图
gdict

为什么要用一个脚本查单词?对于命令行控来说,离开当前工作终端,开个网页查单词是很痛苦的事情,他们甚至根本不想让手离开主键盘区!有这样的一个脚本,然后扔进/user/bin/,就不用大费周章的移动手臂了。

这个脚本用LWP::UserAgent抓取网页,HTML::TokeParser解析网页,获取单词的翻译。

脚本实现了一个抓取和解析google字典的类,整体的逻辑在en2chs函数中:
1. 生成网址
2. 用LWP取得结果网页
3. 解析网页

_parse_html找到翻译信息所在的代码块——一个id叫“pr-root”的标签,然后主要的体力活就全都扔给_get_close_mean啦。

要通过html标签来定位自己想要的内容,还真是个蛮累人的事情。但是Chrome的Deveploper Tools让事情简单了很多,实在是让人心神舒畅啊。

来看代码吧 Read the rest of this entry »

, , ,

7 Comments