Category Archives: 打工日记

pFind Studio 2.4开始下载了!

  半夜1:30时xs发来新版pBuild。凌晨6:00时kzh和hchi哥发来新版pLabel。又经过今天反复折腾,晚上22:00,伟大的fan博庄严宣布:pFind Studio最后一个已知Bug测试通过。热泪盈眶中。

  欢迎大家到pFind官方网站注册并下载软件

  这两天像炼狱。前天sun老大在首都机场T3起飞前还在测试。昆明转机时,俺还一个电话接一个电话。到了丽江古城,对旅馆外的风土人情毫无感觉,一头扎进房间打开笔记本,开始上网打电话……发了N多骂娘邮件,今天中午一度有点怀疑人生。多亏hfchen、fan博、hchi、kzh、xs诸位夜以继日,日以继夜的长工最终把事情做成了。

  zhw说:第一次见面就说在对付bug,没想到了丽江这么山清水秀的地方,还是躲在黑屋里改bug。

  明早大家一定要去听Boss H精彩的大会报告呀。英文标题很煽情:pFind made in China: past, present and future.另外sun老大也是报告专家之一。

头晕和踢踏舞

  最近我把pFind搜索引擎的并行版逐步由传统“单Master/多Slave”模式向多Master的机制重构,Master的模式很接近 MapReduce。这是为了提高千核CPU并行下的I/O效率。两周前又着手准备pFind Studio 2.4的发布。累坏了。上周六开始偏头痛,周一凌晨甚至从梦里疼醒过来,早上10点才爬起来。这几天脑袋一直晕晕的。硬扛。

  经过周扒皮对长工们的剥削,pFind Studio 2.4的Bug逐渐消失。明天Release Candidate版,最后征集意见。

  从昨天开始抓住瓶子双人编程,在集群跟同步异步消息反复纠结。今天下午结果终于对齐了。神清气爽,头也不晕了。晚上回来还停不下来,继续敲键盘重构代码。

  (原来MPI也提供像MPI_Reduce这样的机制,和Hadoop比起来编程细节繁琐些,运行效率还不错,就是老土一点。)

  最近一两年和人打交道比机器多,从Code里体会到的乐趣也没有高中时代写游戏、大学时代hack美女上网密码那么high了。不过我还是喜欢编程,还是为“软件工程师”的称号而骄傲。巴菲特说,只给那些每天跳着踢踏舞去上班的人投资。愿老天保佑俺们和俺们喜欢的工作吧。

这帮悲剧的RCM编辑

  刚收到RCM邮件,让我们确认最后排版proofs。这帮悲剧的编辑,又一次弄错,把别人的文章发给我了。俺发邮件过去问,回答说搞错了。总说有些中国科学家不靠谱,看来欧美的也未必能做到100%严谨。

  这论文历程就是一部高潮迭起的悲喜剧呀。像《岁月神偷》里说的,一步难,一步佳。反正,不到最后平平安安公开发表,俺是睡不踏实了。

笨功夫和气场

  这几天都是很晚回家。加班很累。随便敲几句不知所云的。

  推进每日构建(Daily Build)和持续集成(Continuous Integration),每天搞一点:建立Trace机制、替代ACE库、升级GCC、剥离SVN版本分支、实现自动check out/make/make install脚本、调研Unit Test框架、选定集成测试数据集……

  人人都很忙,都有关键的deadline。你再逼大伙儿去执行看似傻乎乎的没有即时回报的软件工程,肯定有压力。只要自己动摇,事情就搞不成。

  《道德经》说“以正治国,以奇用兵,以无事取天下”。所谓不可替代的核心竞争优势,大多是笨功夫积累出来的平台效应。没什么秘笈,较真而已。肯不肯躬身入局挺膺负责,死磕出一个好软件产品?想清楚了,心态放平和慢慢来,自会逐渐形成与众不同的气场。

pFind并行版论文接收了!

  终于收到编辑的邮件:

  It is a pleasure to accept your manuscript entitled “An efficient parallelization of phosphorylated peptide and protein identification” in its current form for publication in Rapid Communications in Mass Spectrometry.

  从08年10月开始编写pFind集群版,到如今论文发表,好长好累的一段路。这是我从最低潮逐渐挣扎出来的一年半。所以,尽管同样是反复修改30稿,同样是RCMS英文期刊,这次比07年那篇论文,份量重了好多。如今扛过来了,自信暴涨。编辑邮件说:“thanks for your patience
as we worked to improve the manuscript”;不太轻易表扬人的BOSS H邮件说:“值得钦佩。我欣赏目标高远之人”。尽管人家是客气,我照单全收,哈。

  乌龟在兔子后面慢慢爬,感谢不离不弃的后援团。头一个就是老娘。向粉丝们报告一下老太太近况:1月1日飞去海南玩,上个月去上海看京剧(上火车当天上午,去UME看了IMAX《阿凡达》),本月在玩WII游戏,去钱柜唱K,参观城市雕塑展,到798看小剧场电影,最近忙着组织朋友去欧洲旅行(本来打算去非洲看动物大迁移,被胆小的儿子苦劝阻止),还刚去了中关村逛,准备买台新电脑(屋子里已经4台了)接到液晶电视上看高清Big Bang……

CUDA、婚礼和历史

  三月份很忙,又都是些琐碎应急的事,没太多可记。前几天参加了中科院超级计算中心的《基于GPU的并行计算及CUDA编程》培训。技术上的总结,稍后专门写BLOG。

  没空逛书店。翻出一直束之高阁的《一六四零年英国革命史》《书趣》开始读。有一晚特别疲惫紧张,失眠,到书架上找,发现买回来一直没动过的《书趣》,塑料薄膜还没剥掉呢。翻开第一篇《书的婚事》,陷进去读完,然后轻松地睡着了。下面这段,每次读都要笑出声来:

  乔治终于顺从了,但与其说是思想上接受,不如说是照顾婚姻的和谐。然而,一个要命的时刻来临了:他正在把我的莎士比亚转到另一个书架时,我喊了一声: “别忘了按年代放!”
  他倒吸一口气:“你的意思是要每个作家内部也按年代摆放吗?可没人能肯定莎士比亚写剧本的时间!”
  我吼道: “他写《罗密欧与朱丽叶》比写《暴风雨》的时间早,我要把这些也在书架上表现出来。”
  乔治后来说,他很少郑重考虑离婚,这就是其中的一次。

  一直想买本顾准的《希腊城邦制度》原版收藏,到处找不到。zhw同学说,这种绝版书淘宝上一定有,热心帮我搜索下订单。昨天书到了,果然是社会科学出版社1982年3月的版本,当年定价0.67元,年头久纸张微微发黄,但品相整洁。感谢政府,感谢党,感谢zhw,感谢淘宝,感谢伟大的长尾理论。

  最早读这本书是初中时代。从老妈书架偷出来,提心吊胆地看了一段。当时只是感到内容很清新。现在重读感触更深。在1975年最黑暗的时代,还能做如此冷静、独立而深入的研读和思考,真是我辈的圭臬。有些话现在看还是很讽刺,例如几千年前亚里士多德的《政治学》对僭主的描述:

  少数人统驭全邦所有与之同等或比他更有才德的人民,施政专以私利为尚,对人民的公益毫不顾惜,而且也没有任何人或机构可以限制权力……永不录用有自尊心和独立意志的人。

  顾准难以接受亚里士多德的判断:“东方蛮族比希腊民族更富奴性,所以他们常常忍受专制而不敢起来抗争”。他进行了客观思考:

  春秋战国时代,正当我国历史转变的关头,但是从殷商到西周、东周长期“神授君权”的传统,已经决定了唯有绝对专制主义才能完成中国的统一,才能继承发扬并传布中国文明,虽然这种专制主义使中国长期处于停滞不前,进展有限的状态之中,但这是历史,历史是没有什么可以后悔的。

论文最终稿submit了!

  刚登录到RCM网站提交了论文的第二次Revision。最终是第29稿,截图纪念。等编辑的最终决定。始终紧绷着,把身体搞垮了。瓶子也在纠结中挣扎。到今天算是告一段落,熬过去了。晚上吃西湖醋鱼,心情不错。回来路上突然有强烈的疲惫感,的确该放松放松了。

  又回来补:原本周末有些私人安排,没想到明天还得面试人。哇哇哭。

  明白三十岁是啥情况了:不会被轻易忽略,也不会被轻易优待,你就是主力、主流、主干……拥有儿童时代梦想的所谓“成人”的自由、地位和资源,但不再拥有借口。

pFind引擎内核建立Trace机制

  必须上来写点,否则对不起订阅BLOG的读者了。

  这周我们封闭开发,重构pFind引擎内核引入Trace机制。我预研了Log4cppACE_TRACE的源码,还是决定自己动手实现底层机制,更贴近pFind系统的实际要求。

  像pFind这样的复杂系统,不免有大量输出信息,有些是给用户看的,有些是程序员调试时用来追踪进度和现场情况的。传统做法,调试信息会被用宏开关控制,产品发布时被关掉,以免输出过于庞杂导致用户体验变差,但这又会增大事故现场诊断Bug的困难。要调和这对矛盾,就需要灵活的Trace机制,通过设 置参数实时控制输出,例如范围(指定的算法模块、线程或集群节点)、级别(过滤或保留debug信息)和目标(命令行输出或写入日志文件)。

  这种基础设施涉及到整个系统,大部分模块都需要重构,工作量不小。在Win32下开发调试比较顺利,移植到曙光大机的64位Suse Linux时,出现了一些动态链接问题,调整了模块划分。(为了解决这个问题,去查阅俞甲子、石凡和潘爱民的《程序员的自我修养——链接、装载与库》,的确是好书。)

程序员的自我修养

  遇到了Gcc 3.4.5的这个Bug,编译STL总会出现大量Warning。从GNU Bugzilla上的讨论来看,Gcc 3.*系列的维护已经停止了,推荐升级到4.*系列。一直想升级pFind的默认编译器,但之前尝试时,ACE在Gcc 4.4(MinGW)下无法正常编译(刚刚搜索,貌似今年1月份刚刚有人把这个Bug解决掉了)。像陈硕这篇BLOG说的,ACE很值得学习借鉴,但代码臃肿,有很多使用问题。

  在重构后期,大家已经开始利用Trace本身进行调试。“吃自己的狗食”是个好现象。

  建立Trace机制、升级Gcc消除Warning,都是为单元测试(Unit Test)和持续集成(Continuous Integration)做准备。自动化测试是我今年的重点目标。衡量一个团队有多精锐,不在于统计技术牛人的个数,而要看它是否拥有超出平均水平的制度 平台。我发现凡是不用版本管理(SVN、CVS或VSS均可)的软件开发组都很烂,甭管团队里有多少能工巧匠。前瞻研究实验室年度汇报,听到浩哥讲Godson-T的开发,他们就构建了很强大的自动化测试平台,让人不服不行。

  还在考虑为pFind引擎构建“黑盒子”机制,把一段时间内的系统实时状态都记录下来,用以重现事故现场。云风做过类似的设计。不过这样一来,如何保证运行效率就成了关键问题。

  这周很累,但有成就感。接下来折腾RCMS论文,19日deadline。大家的批改纷纷返回,多谢,汇总中。

拿着马桶搋子的疯狂兔子

  没按承诺写BLOG总结新人工程的培训经验,忏悔,稍等几天。

  论文Revision终于收到邮件,继续Major Revision,编辑和评审人都说俺英语烂,开始第23稿。

  我和hchi都没顾上申请专利,他要赶在去美国做报告之前,而我要赶在论文正式发表之前。

  昨天早上家里马桶堵了,杀到建材市场买到高科技的真空搋子,搞定,然后奔到单位上班。

  像WII里拿着马桶搋子的雷曼兔子(Rayman Raving Rabbids),疯狂忙碌中。

开始工作了

  今天来单位上班。同事和研究生们大多还没回来,所以办公室显得很清静。踏下心来处理一些琐事,收心,找状态。午饭之前上来记录几笔。

  1. RCMS论文的Revision,昨天有动静,网站状态目前是Evaluating Recommendation。估计下周一收到结果。纠结。不过折腾了这么久,也有点麻木了。
  2. 接下来,我和瓶子开始在千核集群上实现更大规模的并行。还要试验GPU加速。
  3. 马上会访问很多家合作伙伴,给生物学家安装最新版的pFind Studio。
  4. 上半年,会发起一次封闭开发,建立自动化编译和测试的环境,最终实现pFind和pBuild内核的Daily Build。目前我们软件工程的重点目标,就是实践“持续集成”这一条。
  5. 本科教育缺乏工程实践,即使是ACM竞赛金银奖的王牌选手,面对真正产品级的编码要求,也显得稚嫩。因此培训新人成为重要课题。大家鼓励我分享经验。计划2月底写点。昭告天下,断自己后路。

  平心静气,开始干活了。

  BTW 1:纽约时报刚发的这篇新闻忒雷人。

  BTW 2:昨天看电视,韩乔生和英达搭档解说冬奥会冰球比赛,太好玩了。