Monthly Archives: April 2008

验收通过

  憋了好久,今天出来吓人。刚刚抄送全组一封邮件:

各位:

  pFind 2.1 Alpha 1版刚刚通过验收,代码上传至SVN。测试性能大大高于计划指标,我们在短短4周内创造了奇迹:

  • 彻底重写内核引擎,15个模块,近三万行C++代码,开发中规范执行code review或pair programming;
  • 完整实现了两种不同的鉴定流程,其中流程2与pFind 2.0的鉴定结果进行了仔细对齐验证;
  • 在shark服务器上,对等条件下,鉴定速度是pFind 2.0的3~5倍,接近Mascot;
  • 流程1和流程2均初步实现多线程,4核机器上4线程比单线程方式加速比接近2.85;
  • 创建索引速度有了接近百倍的提高,大大超出SEQUEST建索引的速度;
  • 已测试的索引规模,达到pFind 2.0容量上限的10倍,也超出SEQUEST索引规模上限;
  • 移植到Linux下,为将来和曙光、龙芯的合作打下基础。

  感谢hchi、leo和llq的努力和热情。这是一次接近完美的开发经历。祝大家假期愉快。

joyfire  2008.4.30        

  从上午的述职报告开始就不断有人问,哪些招数带来了如此明显的性能改进?其实都是纯粹的工程手段,而算法流程方面并没有应用激进的创新思路,基本沿用了pFind 2.0里的成熟方案。

MYSQL和鲨鱼

   MYSQL被SUN收购,以及在此之前JBoss被Redhat收购,这段时间太忙没顾上点评。不过,两年前俺已经写了这篇足够好玩的BLOG,评价企业级软件市场的春秋争霸。

  提起这篇BLOG,俺又在考虑用孔子的学生们来命名pFind 2.1的各个模块,比如冒冒失失的“子路”和善于周旋的“子贡”。若有漫画高手帮忙创作几幅卡通肖像,就更有意思了。

  hp已经给两台服务器起好名字了,一台叫Donkey,一台叫Shark。都是兄弟们喜欢的动画电影角色。

>

pFind 2.0历程

  前两天做了一次报告,总结pFind 2.0。花了很大功夫准备Google Docs幻灯,熬到凌晨3:00。

  05年下半年,接手生物信息组工作,顶住干扰静下心着手工作。这一年的最后一天,首次跑通流程

  06年1月,对算法模块展开大规模测试,这只是之后漫长的重构、测试、再重构、再测试循环的序幕。(小插曲:BLOG里提到的那个缺根弦的家伙,是在纠缠我当时的女友,之后居然等在我加班回去的路上,拿电棍袭击我,反而被我打倒在地……现在想想,俺真是什么人生体验都没错过)测试结束时给全组发邮件,希望建立直接透明的工程氛围。

  06年2月,着手M2版。虽然有心理准备,但之后事实证明,“第二赛季”还是比预想的要困难得多。

  06年4月,搜索引擎核心完成最初调试,界面也很快做出来了,那时以为Alpha阶段能很快结束。接下来几个月,陷入反复修改和测试。除了各种BUG,涉及更多的是科研问题。亲身体验了“小数点后五位数据不精确导致性能大大降低”这种传说中的科学故事。那时pFind的鉴定效果着实好不到哪儿去

  06年12月pFind 2.0论文投稿,这十几页纸,真把这辈子的英语都写完了,最终发表在RCMS时,已经修改过32稿。

  07年1月开始Beta测试,我扮演工兵。从用户那里回来,马上力排众议安排pBuild开发。在一线眼巴巴“护送”软件运行是件滴汗的事,但过后增加底气。现场值班逐渐成了日常工作。原来Mascot并非遥不可及,许下一个愿望

  07年8月,为解决系统在修饰问题上的缺陷,不得不展开大规模重构,但遇到挫折。不过现在看来,这是一笔财富,理清了思路。

  07年9月,有机会投入生物一线的实际科研,这时候的pFind 2.0还不完善,遇到很多麻烦。差点迈不过这道坎,但最终fy大侠带领我们创造了奇迹。之后几个月,继续推进。这是一段激情时光通过不断努力,再次重构后的系统性能获得成倍提高

  08年1月,滑单板时摔断了胳膊,打着石膏坚持去上海出差推广pFind。 南方雪灾,差点留在上海过年。到春节为止,组里申请了11项软件著作权。专利方面,获得第1项专利授权,还有4项等待授权,今年还有3项打算申请。商标也 在申请中,去年10月在人类蛋白质组会议以后,我们的域名遭到恶意抢注,经过戏剧性的争夺,我幸运地抢回了pfind.net这个重要URL。

  08年4月,pFind 2.0 final Relese,同时pFind 2.1展开,还有3天,29日下午6:00,就是2.1 Alpha1版的deadline。计划8月8日推出“奥运献礼版”。

  pFind 2.0历经3年终于完满,但可能没多久就会被更出色的2.1所取代。心情有些复杂。感谢所有的同事和朋友。

An Inconvenient Truth值得推荐

  一直听说那部获得奥斯卡最佳纪录片奖的An Inconvenient Truth很不错。据说戈尔实际上就是凭借这部片子获得诺贝尔和平奖的。今晚回家,发现中央电视台在播放这部片子,看过以后,果然很受震动。郑重推荐。这里是第一部分,我认为片子的开头和结尾是最出色的地方。

  BTW:有意思的是,刚刚发现老白也在他的BLOG上提到了这部纪录片,他也是昨晚从中央台的数字频道看到的。

严谨和乐天

  只要和fy搭档干活,俺心里就有底,传说中的英雄总能在关键时刻准时出现,拯救万民于水火之中

  不过两个人性格差好远。fy是个严谨过头的家伙;而我大大咧咧,过于乐天派。这次分领M版和C版,这种差别大伙都看出来了:

  每次milestone,fy的总结都是“基本完成”;而我,恨不得在前一天晚上就把第二天的进度从todo list里划掉;

  M版攻城掠地一日千里,Boss H发邮件祝贺,fy却愁眉苦脸Re回来:“没啥可贺的,真正的测试还没做,流程可不可行、有没有隐藏的bug,还是未知数……”;再看俺这边,尽管C版已经比计划慢了4天,还在邮件里自吹自擂呢:“在坚决不降低工程标准的前提下,俺们定能赶在deadline搞出一件恐怖的终极武器,以便证明哥几个就是传说中的天才程序员团队”。

pFind 2.0最后定版

  pFind 2.0昨天整理完毕,清理实验性或过时的算法,例如原有8个搜索流程只保留了最新的“发车模式3”。调整界面隐藏尽可能多的选项,以减少参数配置的出错机率。一口气删掉了5万多行代码。下周一pFind 2.0 final release,成为历史坐标。

  这是四月初,我请全组到新家吃饭。Boss H在网上订的黑森林蛋糕,据说有四百多块钱。

  最近一段,pFind 2.1开发进入关键战役,今天是第三个milestone,预计下午2点开始第一次集成测试。

  按组里惯例,C++和Matlab版同时展开。fy大侠带M团队,我带C团队。C版只实现最成熟的技术路线,保证工程质量,关注速度和吞吐上限;而M版还要验证一些相对激进的思路,昨天一问,M版也在不断重构架构优化速度,代码质量很高。很期待两个版本的PK。以前各个软件C、M两个版本最后“对答案”时,或者异曲同工,或者不约而同,相互印证借鉴,很有乐趣。

  周四要在全组讲pFind技术报告。为表示对一线开发者的尊重,除了简单提一下系统设计编码原则,我本人不会多讲,而打算让各个模块的作者亲自演示:先后实现了哪几种不同方法,跑了哪些数据和参数,在精度和速度上有多少进步……在所有人面前汇报自己创造的成果,体验成就感,鼓舞士气。

  从本科大一假期到软件公司打工开始,我总是天经地义的开发主力。这次pFind 2.1却只扮演项目经理角色,不负责模块的具体编程实现。精力都放在接口设计、代码审核、双人编程培训、进度监控和文档上。心情有些复杂:不挽起袖子敲代码,就没有那种“百万军中取上将首级”的快感了。

数学家和生物学家

  刘未鹏今天的BLOG里,讲了一个关于思维方式的幽默段子。看得我在屏幕前笑起来:

  有一位数学家失业了,去当消防员。经过了一些培训之后,正式上任之前,训练的人考他:如果房子失火了怎么办?数学家答出了所有的正确步骤。训练人又问他:如果房子没失火呢?数学家答:那我就把房子点燃,这样我就把它归约为了一个已知问题。

  笑还没收住,又收到fy今天从生物实验室那里交流回来发的邮件,他也听到一个异曲同工的段子:

  一个生物学家用蚂蚱做实验,喊一声“跳”,蚂蚱果然跳了一下,生物学家把蚂蚱的腿切掉,再喊“跳”,蚂蚱却不跳了,于是生物学家发了一篇论文,题目是《蚂蚱的耳朵长在腿上》。

昵称征集

  今天在家又养了一天病。正事不能干,躺在那里就想些无关紧要的点子。比如给新版本的pFind2.1各个模块起名字。

  不少科研团队都喜欢给产品和工作设备起昵称。微软Windows各版本的昵称都是加拿大滑雪胜地附近的景物;豆瓣用《指环王》里的角色命名服务器;我到过的一个生物学实验室里,每一台显微镜都用诺贝尔奖得主的名字来命名。

  pFind2.0时代,我就想用NEO来命名蛋白鉴定引擎。但是,当时刚好在反向工程分析Mascot(pFind的头号竞争对手),脚本代码的注释里有不少程序员相互的玩笑和批注,发现他们居然已经抢走了这个好名字。我猜对方的研发人员里一定有不少MATRIX迷,这下知道他们为什么给自己的公司起这种名字了

  又考虑GATTACA。这部科幻电影对生命科学家的影响,就像MATRIX给程序员的震撼一样。主题上符合俺们pFind的生物信息功能。GATTACA这个名字是一种暗喻:它同时就是一段DNA碱基序列片段(人类基因组计划完成以后,网上也有好事者在人的基因库里做过blast)。

  也想过用Made in China的东西。比如传统神话里的“孙悟空”就很酷,或者到中国科幻作家的作品里寻找灵感,例如刘慈欣的“三体”。不过已经有互联网公司用“孙悟空”来命名自己的搜索引擎了;后者又显得不吉利:不可解的十八阶积分方程,不可预测的动态体系,感觉好像BUG总也调不完一样。

  除肽鉴定引擎以外,pFind系统的其他模块都等着起名字。按以前的想法,它们也都是MATRIX里的角色:数据索引模块命名为“ORACLE”(那个先知老太太,她实际是一个拥有高级权限的内核进程,负责索引和检测MATRIX系统里的异常变量,协助系统升级);日志和异常抛出处理部分叫 “SUBWAY STATION“(NEO昏迷后,throw exception的地方,里头是个死循环,等待系统catch);授权和注册码部分叫“MR KEY”(中国匠人,其实就是盗版软件里常见的注册码生成器);肽到蛋白归并模块叫“ZION”(清醒人类的总部,所有飞船的基地,虽然,最后NEO发现,所谓真实世界,只不过是另一层Virtual machine,又一个MATRIX)……一旦引擎的昵称换了,它周围的模块都要跟着重命名。例如鉴定引擎叫孙悟空,其他模块就应该叫八戒、沙僧、白骨精什么的。

  征求意见中,欢迎贡献灵感。大伙儿也可以秀一秀自己系统的昵称。

  BTW:欧美科幻小说与理工研发领域的联系源远流长。科学家和工程师们都很喜欢借用科幻小说里的人和物。比如美军第一艘核动力潜水艇,就用凡尔纳小说《海底两万里》里的海底机器来命名。美国冷战高潮时期的太空军备竞赛计划,借用了电影《星球大战》的名字。反过来,小说家和电影人对科学的理解也非常到位。比如斯皮尔伯格的《AI》中,对人工智能、感情和灵魂的探讨。反观国内,影视编导往往把科学表达成了现代巫术,长生不老药和阿拉丁神灯的新版本。

《塔西佗编年史》和《偷书贼》

  在光合作用买了《塔西佗编年史》《偷书贼》

  

  《塔西佗编年史》读起来感觉不如《塔西佗历史》有趣,大概因为后者描述的是暴君尼禄死后一年内遍及整个帝国版图的宏大内战:四个枭雄轮番登场,相互攻伐,罗马政权频繁易手,众多人物事件集中涌现;而前者记录的是此前四个元首统治的时代,是帝国逐步崩坏的漫长的堕落过程,里面有太多腐败、阴谋、放荡和残暴。

  提到古罗马帝国的元首(imperator)和凯撒(caesar),很多书里中文翻译为皇帝和太子,其实它们和中国古代皇权概念是不同的。imperator名义上仍然是元老院选举出的领袖(特定条件下民众或军团也可以拥立),是披着共和外衣的独裁者,有时会由多人分享这个称号;对应的,caesar是对元首指定继任者的尊称,他未必与元首有血缘关系,不过经常被元首收为养子。

  《偷书贼》的描述方式很特殊,整本书是由很多场景的记忆的碎片拼起来的,对我这种前后乱序乱翻的读法来说正合适。讲了个好故事,只是有些悲惨压抑,不忍卒读。

  

  这一回,我要带走的是一个年轻人的生命,他二十四岁,战斗机坠毁的场面非常壮观。冒烟的发动机还在轰鸣。

  飞机在地上划出三条深深的痕迹。两个机翼脱离了机身,成了碎片。它不再是可以飞行的金属小鸟了。

  麻烦的是,有时我会去的太早。我匆匆赶到,那人却出乎意料的多活了一阵。

  过了一会儿,飞机烧得差不多了,烟雾少了。一个男孩子喘着粗气跑过来,手里拎着一个箱子。男孩颤抖着靠近机舱,想看看飞行员是否还活着,从医学定义来看,他还没完全死。半分钟后,偷书贼赶来了。几年了,可我还是认出了她。她也气喘吁吁。

  男孩从箱子里翻出一只泰迪熊,把手伸进破碎的挡风玻璃,把小熊放到飞行员怀里。微笑的小熊躺在了飞行员的肢体和血泊里。

  几分钟后,我打算去碰碰运气。时间刚刚好。我进入机舱,解救出他的灵魂,轻轻的将其带走。

  剩下他的尸体,渐渐散开的烟味,以及那只微笑的泰迪熊。

火炬

  单从新闻摄影角度来看,这是一张特别有质感的新闻图片。

  画面中的每个人:两个警察、女护卫者、记者、暴力分子、护卫车内的其他火炬手,分别作出各种不同的紧张激烈的表情和动作。而处于漩涡中心的独腿女孩和盲人青年,却保持着雕塑般的静态。火炬手冷冷的神态和坚定的姿势很容易打动读者。

  以后若干年,可能我们都会把这张照片当作这次事件的象征。这是新闻摄影记者一辈子梦寐以求的作品。

  说完客观的,就要说主观情绪了。我对政治没兴趣,不过这一次,他们真的惹火我这个小老百姓了。作为一个普通北京市民,向上海美女致敬。