一直听说那部获得奥斯卡最佳纪录片奖的An Inconvenient Truth很不错。据说戈尔实际上就是凭借这部片子获得诺贝尔和平奖的。今晚回家,发现中央电视台在播放这部片子,看过以后,果然很受震动。郑重推荐。这里是第一部分,我认为片子的开头和结尾是最出色的地方。
BTW:有意思的是,刚刚发现老白也在他的BLOG上提到了这部纪录片,他也是昨晚从中央台的数字频道看到的。
一直听说那部获得奥斯卡最佳纪录片奖的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昨天整理完毕,清理实验性或过时的算法,例如原有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是对元首指定继任者的尊称,他未必与元首有血缘关系,不过经常被元首收为养子。
《偷书贼》的描述方式很特殊,整本书是由很多场景的记忆的碎片拼起来的,对我这种前后乱序乱翻的读法来说正合适。讲了个好故事,只是有些悲惨压抑,不忍卒读。
|
这一回,我要带走的是一个年轻人的生命,他二十四岁,战斗机坠毁的场面非常壮观。冒烟的发动机还在轰鸣。 飞机在地上划出三条深深的痕迹。两个机翼脱离了机身,成了碎片。它不再是可以飞行的金属小鸟了。 麻烦的是,有时我会去的太早。我匆匆赶到,那人却出乎意料的多活了一阵。 过了一会儿,飞机烧得差不多了,烟雾少了。一个男孩子喘着粗气跑过来,手里拎着一个箱子。男孩颤抖着靠近机舱,想看看飞行员是否还活着,从医学定义来看,他还没完全死。半分钟后,偷书贼赶来了。几年了,可我还是认出了她。她也气喘吁吁。 男孩从箱子里翻出一只泰迪熊,把手伸进破碎的挡风玻璃,把小熊放到飞行员怀里。微笑的小熊躺在了飞行员的肢体和血泊里。 几分钟后,我打算去碰碰运气。时间刚刚好。我进入机舱,解救出他的灵魂,轻轻的将其带走。 剩下他的尸体,渐渐散开的烟味,以及那只微笑的泰迪熊。 |
三月份大部分时间在写材料和开会。甚至出现了一个meeting week,周一到周五全都用来赶场参加各种会,最夸张的一天开了三个会,一直弄到将近23:00才散,差点没赶上5号轻轨末班。
上周终于着手2.1新版设计。鉴于大伙儿元气大伤,取消了setup会议,单独找每个人面对面交流再汇总Todo List。
周三下午,把电脑和投影仪搬到会议室里,直接对着代码展开第一个模块的设计。双人编程,正确说,应该是四人编程,推敲所有细节,甚至明 确参数命名。一开始当然有点痛苦,各人都没有特别细致的思路,更别提大家的一致。不过几个回合重构下来,最终一版的空模块(只定义了接口和架构)编译通 过,每个人都很开心,团队的信心和士气提高了不少。这不仅因为完成了第一个里程碑,还因为统一明确了设计原则和质量底线,后续设计工作照方抓药就可以了。 磨刀不误砍柴工,设计阶段精耕细作从来都不会白费。
上周的另一件事是继续调试2.0老版本。多谢chh支援,困扰两个多月的BUG总算有些眉目:第一组实验中,碰到一个变态的蛋白,修饰 位点组合爆炸,出现九千多万种可能性,把递归程序撑爆了;第二组实验中,为压力测试调大了参数,有个地方的vector容器装不下。把两个地方剪枝条件加 强就解决了。折腾这么久,真算职业生涯的奇耻大辱。搞到最后老板都不好意思问了;反而是老妈每晚的餐桌上都关心进展;去参加文献club,生物学家也问 “你的BUG怎么样了”。
另一方面,由此看来,老版pFind的潜力也就仅限于此了,稍微上点数据量就开始这里那里到处漏水。这也正是彻底重新设计架构,开发2.1版的主要原因。
我预计新版的C++代码可以从18万行降到10万行左右,速度提高一倍以上,而海量数据的处理上限,可以有不止一个数量级的提升。当然新版的一个重要变化是实现跨平台,为将接下来的分布式集群版打基础。
上次买了几本古希腊罗马史书,看完了一小半。不是专业人士,观点未必准确。
对比起来,在古希腊罗马,很多学识很高的贵族拥有担任将军或执政官的经历,由将领本人撰写战争史也是一种传统;而在中国古代,史官很少亲临战场,更别提作为主帅指挥战争了。因此我们的史书,例如同时代的《史记》,对军事行动的描述就往往比较粗略和肤浅;而色诺芬的《长征记》和凯撒的《内战记》简直就是经典的兵法教材:由著名统帅亲自带入重大战例现场,描述当时收到的各种战场信息,解释作判断的原因,并给出战争的后续发展作为验证。
收获?哦,这个,我是拿来散心的。
因为周围的太多人看过并推荐,包括Boss H和JW。今天和老妈逛第三极,买了冯仑的《野蛮生长》,回来一口气看完,的确很有阅读乐趣。