Monthly Archives: October 2008

《寻羊冒险记》和C++0x

  这两天和瓶子哥进行双人编程,对pFind内核进行新一轮的重构迭代。好久没有经历这么高强度的编程了。今晚10点回来的地铁里,脑袋都木了,发呆,差点儿坐过站。

  今天的todo list里规定必须写blog,所以就打开Firefox,登录上来开始敲字。但说实在的,累,脑袋里没找到特别鲜明的主题,罗列点杂七杂八的流水帐。不好意思:)

  前天到清华参加AKA的linux kernel会议路上,顺便到光合作用买了村上春树的《寻羊冒险记》卡特琳娜·哈克的《空房间》。非常喜欢《寻羊冒险记》,觉得比《挪威的森林》更好玩。

    

  Herb Sutter刚刚在他的BLOG上给出了C++0x的最新进展。像6月Sophia Antipolis会议预计的一样,C++委员会在San Francisco会议上投票通过了草案,正式进入ISO标准公示阶段,点击这里下载C++0x草案文本。另外,Herb Sutter结束了长达10年的C++委员会的主席任期,由P. J. Plauger接任。

AKA Linux内核开发者大会和pFind Team

  刚刚参加了AKA的Linux kernel开发者大会,主要关心的是多核并行和oprofile性能分析。近期pFind内核优化开始深入,需要用些更专业的优化技巧了。

  我在会上提了个问题:未来一段时间,多核和集群的性能瓶颈或编程难点在哪里?主讲人崔岩认为传统的系统总线在众核体系下已成为瓶颈。章峰老大补充说,他认为NUMA体系结构是方向。这种体系结构可以看作是多核和集群的混血杂交。按照Intel的Roadmap,到2013年家用电脑的CPU大约为256核。到时传统软硬件架构都要经受重大挑战。

  顺便也听了其他讲座。重温内核领域的很多技术,感觉好像见到老朋友。一个小细节是,讲座幻灯用是一台装了ubuntu的龙芯笔记本。

  回忆起大三时代,每周跑去听AKA的Linux系列技术讲座。有一讲的内容是阅读Linux kernel2.4的内存page管理部分,是在中关村附近一栋小破楼里讲的。当时四环没通,花了好多功夫摸过来。这次讲座激起了我阅读Linux内核的兴趣,可以说是“joyfire Linux笔记”的缘起吧。后来才知道这栋小楼就是计算所的老北楼。

  顺便贴一张俺们pFind帮派的全家福。在计算所新楼的11层拍的。

《史记》里的巴菲特

  昨晚睡得很早,半夜醒来,饿了,煮面吃,等在炉子边上时,翻《史记》。

  秦末汉初时有两个韩信,都是刘邦的开国功臣,一起被封为异姓王,都没什么好下场:名气更响的大将军韩信,深受猜忌,成也萧何败也萧何,死在吕后手里;另一个韩信垫在北方当炮灰,逼急了只好投降匈奴,但人家骑兵袭扰长城以内时,反过来又用他打头阵,“亡匿山谷闲,旦暮乞贷蛮夷”,真是毫无前途,最终兵败身死。

  《白起王翦列传》,印象深刻的不仅仅是秦国众多善战的名将。国家机器的令行禁止赏罚分明,才是军队如狼似虎的原因。像白起这种人,从基层军官开始,能依靠一次次战争中的功劳,逐渐上升到位列三公的地位;而同时代的其他六国,主角都是平原、孟尝、信陵、春申这样的家伙,出生名门财大气粗,养着三千门客,把自己的名声看得比什么都重要。有时候会想,如果秦朝不那么短命,走法家的不论亲疏、依法治国路线,而不是儒家的人际关系、纲常伦理路线,历史会怎样?另外,以前提过,中国的史书对战争的描述都很肤浅

  《南越列传》和《朝鲜列传》名气似乎一直不大,其实很好看。尤其是秦朝的南方军队封闭所有北上道路,自立国家,拒绝回救咸阳那一段。据说清朝嘉庆时就是因为《史记》里的掌故,所以拒绝以此赐国名,而改赐“越南”,以防后世有变,利用历史纠缠染指我们的“桂林、南海、象郡”。

  以前没看过《货殖列传》,大概是世上最早倡导自由主义市场经济的论文吧,写得实在太经典了。里面那个大富豪白圭,简直就是那个时代的巴菲特。巴菲特说:“在别人贪婪的时候恐惧,在别人恐惧的时候贪婪”,而白圭的投资哲学是:“人弃我取,人取我与”,连日常生活习惯都很像,“薄饮食,忍嗜欲,节衣服”,但是一旦决定逢低吸纳,“趋时若猛兽挚鸟之发”。

  白圭,周人也。当魏文侯时,李克务尽地力,而白圭乐观时变,故人弃我取,人取我与。夫岁孰取谷,予之丝漆;茧出取帛絮,予之食。太阴在卯,穰;明岁衰恶。至午,旱;明岁美。至酉,穰;明岁衰恶。至子,大旱;明岁美,有水。至卯,积著率岁倍。欲长钱,取下谷;长石斗,取上种。能薄饮食,忍嗜欲,节衣服,与用事僮仆同苦乐,趋时若猛兽挚鸟之发。故曰:“吾治生产,犹伊尹、吕尚之谋,孙吴用兵,商鞅行法是也。是故其智不足与权变,勇不足以决断,仁不能以取予,彊不能有所守,虽欲学吾术,终不告之矣。”盖天下言治生祖白圭。白圭其有所试矣,能试有所长,非苟而已也。

软件中的隐喻(Metaphors)

  引子:老妈从深圳带来的《代码大全》,一直没看,不喜欢太厚的书(更喜欢作者早期的《Software Project Survival Guide》小册子,微软开发三部曲还是我大一第一学期花5块钱从地摊上淘来的)。今晚又犯病睡不着,索性听着音乐,找出来翻。的确把软件开发的事情都说完了。看到“隐喻”这一章有所感,上来敲点东西。

    

  隐喻(Metaphors)是XP编程的12个实践里很重要的一个,但是一直不像双人编程(Pair Programming)、重构(Refactoring)和持续集成(Continuous Integration)那么广为人知。

  其实这个概念是软件开发里最常见的现象和思维方式。《代码大全》里这样举例:

  计算机科学领域中有着所有学科中最为丰富多彩的语言。你走进一间安全严密、温度精确控制在20℃的房间,并在里面发现了virus(病毒)、Trojan horse(木马)、worm(蠕虫)、bug(臭虫)、bomb(逻辑炸弹)、crash(崩溃)、flame(口水战)、twisted sex changer(双绞线转换头)、fatal error(致命错误)……在其他领域里,你能遇得到这些吗?

  软件是一种看不见摸不着的抽象产品。因此我们不得不大量借用实体世界里的概念进行类比。例如在软件工程领域,随处可见各种建筑学的隐喻:architecture、scaffolding、construction;另一种常见的隐喻,是把软件项目当作生命体:incremental、iterative、adaptive和evolutionary。

  我们组内其实也在使用自己的隐喻体系。比如用“发车”和“跳”来形容pFind引擎的两种不同的搜索流程。

  其实,区分老手还是菜鸟很重要的标准,就是看他了解多少“行业黑话”。最初我在组内汇报到处写“bug”和“crash”这些词时,BOSS H很紧张、困惑,甚至有些愤怒。后来他就习惯了,明白这是工程开发中令人不快、但不可缺少的主题:某种意义下,编程的主要内容就是在有限成本条件下,尽可能有效地大量试错(胡思乱想:似乎创业也同样)。

  XP之所以强调重视隐喻,就是希望项目内建立统一清晰的概念词汇表。当提到某个词汇,在所有人脑子里都代表同样的逻辑概念。很多青涩的项目经理以为这种统一是理所当然的,他们错了。大量误会都源于鸡同鸭讲。

  对于我们生物信息这样的交叉学科,隐喻更是特别重要。生化学者和程序员简直就像不同的星球上的文明,需要很长时间才能彻底理解对方的意思。一个真实的例子:关于buffer这个词,在程序员世界里是一块预先申请好的内存区域,而对于生化领域来说,这表示做实验的缓冲溶液,我是在前线陪着生物学家杀老鼠做实验,花了三天时间才弄明白他嘴里的buffer不是我心里的buffer。有时不同的词汇又代表相同的意思,例如,生物学家喜欢说“高通量”,经过一段时间以后,我才能确认这就是计算机领域的“高吞吐”的绝对同义词。

  类似的,从事金融软件开发的哥们嘴里充斥着“期货”、“杠杆”、“抵押”、“融资融券”这种神秘密码。

  为了交流和思考,你必须把面对的专业领域里的术语迷宫搞清楚。对于传统行业,这种事也许只需要经历一次。对程序员来说,每个软件项目都是全新的思想历险,所以你要随时准备更新自己的隐喻词典。

  很多生物专业出身的学者学习能力都很强。他们要完成自己的研究,就必须对截然不同的众多领域都有所了解:从培养植物动物微生物,到临床小分子药物代谢,到遗传学和环境学,到化学试剂和各种分子式,到物理和精密机械领域的各种泵、质谱、磁场、超导题的原理,最后到Perl语言写软件处理大量信息……这就导致他们视野很宽,思维方式很全面。最关键的是,人不可能天生就是通才,出色的生物学者大多都善于跨领域交流和学习

  BTW 1:前面BLOG提过,程序员大都很着迷电影Matrix。因为这部电影把软件领域的隐喻反过来又映射到实体世界。电影名字本身就是一个很精彩的隐喻,Matrix在数学领域是“矩阵”的意思,在虚拟现实领域大量应用矩阵运算,比如《精品飞车》里的光影效果;而Matrix的另外一个意思是子宫,暗示电影里所有的人类都被放在那个黏糊糊的囊里养殖起来,以为自己生活在21世纪的地球,其实被接入了一个巨大的在线游戏,终其一生处在一个梦境,而Architect,那个机器,那个高等存在,控制着我们,随时以上帝的形象改变我们的命运,甚至kill掉我们的process(进程)。

  BTW 2:如果一个人开始仅仅守着自己的一亩三分地,不敢尝试未知领域,没勇气让Metaphors和外界进行碰撞的那一天,大概也就是他衰老的开始吧。

论文的Comment和程序员的艺术细胞

  今天下午轮到我做Paper Reading,讲了Journal of Parallel and Distributed Computing的这篇与生物信息有关的论文这期是bioinformatics专刊,还有更多其他的生物信息领域的分布式并行计算的论文)。我提到对这篇论文的两个质疑,cliu建议不妨写个Comment。的确,这样显得俺们中国人民不那么好糊弄。前两天北邮牛人还在大战Science灌水文章

  晚上难得按时下班,跑到五道口去泡光合作用,买到一本陈丹青的《纽约琐记》,还有这一期的《读书》杂志。

  

  缺少艺术细胞。制作网页、软件界面和PPT时,只会从别人帮忙配好的色系里选一套,这些颜色搭配对我而言只是神秘的RGB整数序列,敲进代码里就好了,如果你让我自己选择,那就像上刑了;音乐方面也是,本科时跟着wch哥学吉他,尽管会了《爱的罗曼斯》和《绿袖子》,可死活搞不定最基本的事:调琴弦,因为耳朵无论如何分不清音调。

  国内程序员和算法研究者大多都缺乏这种能力。周围很多朋友,包括组内的大多数人,PPT的字体颜色搭配和软件界面安排,实在难看。还算靠谱的,大概就剩下秀哥了,他作的pFind系列启动界面,很好很强大,受到广泛好评。

  梦想捡到一个艺术系美女,看画展听音乐会。给俺培训培训基础的鉴赏能力

  补:吃完晚饭,一大家子人抢WII。老妈的马里奥赛车已经接近专家级;而我的网球却沦落到人见人灭的地步了

joyfire.net临时指向博客这里

  陆续有人注意到,我的joyfire.net,也就是“joyfire linux笔记”的网站的域名解析,指向了博客这里。

  这是个临时措施,有技术原因也有非技术原因。不过最近单位工作有些忙,可能要稍后解决,抱歉。

  BTW:在凤凰网看到访谈达贝妮,想起我这里以前似乎还贴过她的照片呢,回来google,在这里

列书单.2008.10.5

  从上海回来之前,买到了村上春树《海边的卡夫卡》在火车上看。今天在中关村图书大厦买到了觊觎已久的《代码之美》

  

  《代码之美》文笔相当精彩。

  比如Google的架构师Jeffrey Dean和Sanjay Ghemawai的那篇,我很喜欢上来就单刀直入的写法:

  假设你有200亿个文档,想要统计出每个单词在所有文档中出现的总次数。假设每个文档的平均大小是20KB,那么一台机器读完400TB的数据需要四个月左右。假设我们愿意等待的时间足够长,机器内存足够大,那么相关实现代码十分简单,如下……

  Arun Mehta的那篇《当你与世界的联系只有一个按钮时》的开头,也同样吸引人:

  “Stephen Hawking(斯蒂芬·霍金)教授只能按一个按钮”,在给我们的需求说明书中,只有这句话。

  Hawking教授是杰出的理论物理学家,但他不幸患有ALS……只能通过Equalizer用一个按钮来写字和说话,Equalizer使用了一台外置的盒子进行从文本到发音的转换,现在这种盒子已停产,Equalizer的源代码也丢失了。

  为了在老化的硬件发生故障的时候,还能与外界保持交流,他联系了一些软件公司,希望能编写某种软件,使那些有着高度运动神经残疾的人能通过这种软件访问电脑。我们很高兴地接受了这个挑战。我们把产品称作eLocutor,并决定让它开源,这样Equalizer的历史就不会重演了……

  八卦38个作者的个人资料。除了两篇bioinformatics主题文章的作者以外,Travis E.Oliphant(NumPy多维迭代器)和Andrew Patzer(REST方式集成Web服务)也从事生物信息领域的工作。

Apple是个Great的公司吗?

  无论是从工业设计能力,还是从市场营销能力的角度来说,Apple当然是个好公司。

  这两年每次传出关于乔布斯健康问题的新闻,无论真假,都会惹得Apple股价上窜下跳。Forbes杂志甚至半开玩笑估算,根据最近心脏病假新闻事件的数字,乔布斯的生命对Apple公司而言值180亿美元,“超过了奋进号航天飞机、通用汽车、或三百吨黄金的价钱”。

  华尔街的反应增加了乔布斯的传奇性,是对他个人的认可。但对Apple公司来说,这未必是什么好事。如果我是投资人,把钱赌进去之前一定会三思。天才也有生病、衰老和死亡的那一天,何况还有更多江郎才尽毁掉一世英名的前车之鉴。

  BTW:

  跑到Google 2001去体会时光倒流。搜索了一下“蓝色宝石”,感慨。当时大多数URL现在都不可用了,过期的速度比想象快多了。

  记得就是在2001年,是ddcat突然冲过来,兴奋地推荐Google,觉得这个名字好怪。

  再早一些,作为清华创业大赛的参赛者,应邀去上地参观一家刚开张的小公司。当时并没有留下什么特别印象,只记得这家公司的名字源于辛弃疾的《青玉案·元夕》:“众里寻他千百度,蓦然回首,那人却在,灯火阑珊处”。

老妈和老舅

  向各位粉丝报道一下偶像的动态:玩Google Reader。偷瞄了她的笔记本屏幕,订阅了张五常的blog科学松鼠会、还有豆瓣“在北京听京剧”小组,老太太还在寻找摄影主题的博客RSS种子;给客厅的液晶大电视安装VGA线,通过42寸大屏幕玩电脑,昨晚她接上笔记本上网,搜索视频网站,开始看《六人行》;玩WII;加紧练习摄影,香港带来的长短镜头都上阵了,准备10月份去酒泉发射中心附近的戈壁滩和胡杨林玩耍。

  最近老妈很高兴,因为舅舅来北京了。老舅是老一代硬件工程师,退休后自娱自乐,开发出一套“电子把脉”系统:机器手给患者把脉,通过综合了老中医经验的专家系统诊断脉象,再开出参考药方。(别想歪主意了,老舅已经申请了发明专利,哈)。正在进行2.0升级研发:环境从98变为XP,机器手的硬件接口由老式打印机串口改为USB。俺是硬件大白菜,只能在软件架构上提建议:USB通讯模块用VC实现,搞成DLL或COM即可,遗留的VB代码不必彻底废弃。七十岁的老爷子都在学C++写程序,小孩子还叫什么苦。都是心魔作祟,梁宁的BLOG说,不入定