Monthly Archives: April 2011

《The Stuff of Life》中文版即将出版

  《The Stuff of Life》中文版(名为《漫画生命史话》)正在印刷,即将出版。有兴趣的朋友们可以给我捧捧场。

  09年秋天,刘未鹏(pongba) 刚到北京,TopLanguage组织了几次聚会(在那几次聚会的过程中,目睹了尚在豆瓣的张教主辞职去了美空,没多久又出来创业;还和Tinyfool一起去吃韩国烤肉)。其中一次就在图灵出版社里,我和hchi哥去参加。我无意中翻到了《The Stuff of Life》的英文原版,发现这是一本很有趣的科普漫画,与高中时代令人生畏的生物课完全不同。图灵编辑们说,唤起兴趣大于灌输知识,国内市场这种好书太少了。无知者无畏,我就接下了翻译任务。

  诚恳而言,作为非生物科班出身的我,翻译书中的生物学专业内容遇到不少困难,初稿很不令人满意。多亏图灵编辑们没放弃,又找到了火力支援,重新进行翻译和整理,本书才有机会和中国读者们见面。

  由于水平有限,译稿有诸多遗憾之处,无法100%把英文版里俏皮轻松的风格呈现出来,这些不足的责任都归于我。欢迎大家给出意见建议,我会在这个BLOG上长期维护一个勘误表。

列书单.2011.4.25

  老妈飞到欧洲去旅游,我最近也很忙,似乎没有多少有趣的内容可供BLOG上分享。工作上进展倒是很大,稍后再接着上次的话题继续写写“哪吒”和生物云计算。这次先列一下最近的书、CD和电影。最近没空逛书店,都是在网上买的。

  最近在看史蒂夫·克鲁克的《Don’t Make Me Think》科学松鼠会的《冷浪漫》尤塔·鲍尔《幸福》斯蒂格·拉森的《玩火的女孩》
  

  买了周杰伦的《魔杰座》孙燕姿的《是时候》两张CD,开车的时候换换口味。所谓OUT了,就是在KTV里,年轻人合唱《忐忑》,你却跟不上;而你正念念叨叨唱周杰伦的时候,“怎么这么多老周的歌?”。哇哇哭。

  电影,主要看了《里约大冒险》《单身男女》

生物数据处理和分布式并行计算

  写一点我对生物信息云计算的粗浅认识。首先,所谓云计算是一个商业模式的概念,其内涵里Saas占很大比重,网络服务代替软件产品。另一方面,技术角度的个人观点,一个Web服务的后台涉及到了大规模分布式并行的基础设施,才有资格被称为“云计算”(当然,这一定义有争议)。这篇Blog先写技术观点,后面再加关于用户和服务的讨论。

  技术上,大规模分布式并行计算被分为计算密集型和数据密集型两类。

  很多物理、地质和气象等领域的科学计算都是典型的计算密集型问题,CPU是瓶颈,涉及到外存I/O量相对不高。对这类问题的解决思路就是传统的“数据找CPU”。具体一点说,目前编程实现的工业标准是MPI,利用MPI提供的Master/Slave模式启动和调度集群上各个节点上的进程,数据传输共享常利用NFS,底层可以用硬件手段提高数据I/O性能。像Fold@home这一类志愿计算项目,往往本质上也是计算密集型的,当然软件架构有所不同。

  而Web领域的计算问题,例如搜索引擎的信息检索,主要是数据密集型问题(或者也称为IO密集型问题),这种情况下,CPU不再稀缺,海量数据的内外存交换的性能成了的焦点。对此MapReduce模式给出了很有效的解决思路,也就是所谓“CPU找数据”。具体来说,Hadoop是目前最热门的主流框架,先对查询对象进行索引,通过分布式文件系统备份到集群各处,再调度相对轻量的进程,分阶段执行查找和归并操作。

  那么有没有这样的需求:输入输出的数据很海量,其处理过程的算法复杂性又很高,很占CPU。有的,例如现代天文学需要对成T甚至成P的哈勃望远镜图片进行搜索过滤……面对这一类的问题,MapReduce模型就不一定适用,其瓶颈出现在海量数据的传输性能上(Web搜索模型里,尽管是数据密集型应用,但被检索的关键词和输出结果是相对很小的,而在很多科学应用里,往集群提交的待查询本身就是海量数据)。Secter/Sphere在其论文和技术报告里总结,它对Hadoop有明显性能优势的原因之一,就是专门开发的底层传输协议UDT比后者使用的通用TCP/IP要高效。

  对Hadoop这个特定产品来说,由于它是Java实现的,相对于C/C++有性能劣势,这个短板对CPU耗费型的应用来说很要命(这也是Secter/Sphere快的另一个原因)。有很多解决方案,例如Yahoo!开发了MPI on Hadoop,用MPI具体负责干活,Hadoop包裹在上层负责宏观调度和容错;而百度实现了Hadoop C++ Extension,把Hadoop里面的关键瓶颈部件都换成了C++的;前不久刚刚发布的Hadoop下一个版本的Roadmap里,也宣布要进行彻底重构,重点解决性能问题。

  生物信息领域,无论是基因测序还是质谱鉴定蛋白,产生出来的数据量巨大,其处理运算又吃CPU。对现有的分布式计算模型是个挑战。其实分布式计算领域,从来都是应用拖着技术走的。例如是物理学家发明了集群运算,是信息检索工业逼出了MapReduce模式。所以,生物领域的挑战也许可以反过来给计算领域一个发展的机会。

关于志愿计算

  3月份,尤其是最后两周,开发‘哪吒’进度压力很大,每天回到家脑袋都木木的。关于上次提到的Mozilla Drumbeat大会,那天有个小花絮:23日和zf双人编程一整天,晚饭都没吃就听workshop,晚上10点钟才筋疲力竭地开车回家。因为疲惫所以车速放得很慢。恰好四环上发生了严重的十几辆车的追尾事故,我却因为开得慢,幸运地躲过去了。

  所以就一直没有在BLOG写,时间一拉长,印象就淡了,现在好像写不出有趣的文字了。不好意思。科学松鼠会刚发表了一篇《志愿计算:足不出户,窥探星辰》,值得推荐,大家不妨看看。

  我个人而言,感觉David Anderson 、Carl Christensen和Elizabeth Cochran的QCN项目(通过大量志愿者的笔记本收集地震波信号)最有趣。尽管普通笔记本电脑安装的廉价震动传感器比不上专业的地震仪器,而且数据里会有日常使用的噪音,但是架不住志愿者数量众多,通过合适的统计工具,就能得到很多有意义的工作成果。23日在北京workshop,他们只给出年初新西兰大地震的数据和分析成果。上网跟进搜索了一下,稍后在台北的Asia@Home workshop里就给出了这次日本地震的数据。

  很多人对报告当天最后一个提问者不满:那个人长篇大论提了很多未必高明的空泛观点,要求在研究成果中占有股份,还建议研究者们把帮助他们的志愿者电脑上的个人隐私信息卖给Google赚钱。且不说Google到底需不需要,会不会买,感觉这个年轻人对商业、法律、科研、公益似乎都缺乏常识,完全丧失了好奇心和想象力。这又让人联想起《非诚勿扰》里那位美国博士安田的事

敬畏自己的代码

  我一向对zf非常赞赏。zf在5年前刚来组里,不夸张地说,编程能力很弱。我记得是我告诉他应该用delete[]删除数组,而delete会导致内存泄漏。但是现在,同样不夸张地说,他写的每一行代码都是精品。BOSS H以前说:“joyfire的意思,好像如果zf愿意加入他的团队,他就有胆子去月球”,没错,我就是这个意思。

  为什么?简单统计了一下,zf总共提交了17万行代码(当然,我统计的方式很简陋,有很多代码在不同版本重复提交,也有很多是临时性脚本,和一线实战的工业级产品不同),他的pParse(包括此前的pCompare)大概进行了39个版本的迭代重构和不断改进。组里有很多编程天才,在SVN提交代码是爆炸式的(例如我经常惊叹,hchi哥能在一下午敲出我一周的满载工作量)。但zf是独特的,他在SVN里提交代码量统计,永远是一条平稳的直线,每天,每周,每个月……这家伙最让人感到恐惧的,就是近乎机械的执行能力。

  这不仅仅体现在他的代码上。我记得BOSS H有一次说他“过于内向,不敢发问,不善交流,会制约自己的发展”。那以后,我注意到,每次报告,无论规模场合和内容,zf必会举手向报告者提几个问题,一开始显得很勉强,时间长了,性格居然都变了。现在这家伙去全是老外的万圣节聚会上扮演凯撒大帝,谁敢再说他的内向障碍发展?BOSS H说,最早是在走廊上捡到个面试其他导师失败的彷徨考生,这么多年下来,zf教育了他这个导师。

  能进我们组的新生,很多都得过ACM或者各种比赛的金、银、铜、铁奖。但并不一定实现过真正实用的大系统,达到合格软件工程师的标准。前两天发邮件给全组,以zf为例子,建议大家踏实一点,敬畏自己的代码,最终有本事在pFind代码里,留下自己的长久印记。