Author Archives: wangleheng

编译加速、分布式版本管理和IE7漏洞

  pFind代码慢慢变得庞大,每次make clean再make all,等待越来越漫长:喝咖啡、收邮件、伸懒腰、作体操、聊八卦……因此这两天在考虑引入distcc和ccache。

  总踅摸着用python写个make的替代品,今天刚刚接触到scons。不好意思,穿越了。

  一查Google Reader的starred items,发现很早就标过一篇BLOG,解释distcc、ccache和scons如何联用的。

  所以一线体会很重要,没有切身接触到实际问题,对技术方案就不会那么敏感。

  另一个例子:Eclipse CDT的团队负责人Doug Schaefer的BLOG上刚刚发了一篇Time for Distributed Source Control is Now

  好几年前Linus就在谈论内核代码如何利用Git进行分布式版本管理(Google Tech Talk视频)。但我们这里SVN用得还行,相安无事,感觉离那些太空武器还很遥远。然而最近一段时间,团队越来越大,逐渐分成几个方向,出现异地开发(比如到生物学家这里常驻),问题就多起来。

  回头再查,云风的BLOG早把我们面临的问题总结出来了

  若干年前我们淘汰了加锁的协作编码方式,到今天是时候再做一些改变了。或许,分布式的版本控制工具才是未来的发展方向。我想总有一天,CVS/SVN 这类集中式版本控制工具会被淘汰掉的。

  说说我的困扰吧,可能很多开发小组也遇到过。

  1. 我们禁止提交不能编译通过的代码,尽量不提交不能测试通过的代码。结果,对于很复杂的模块,有人几乎一个月都没提交过一次。他总是觉得程序还不太成熟,但几经修改的代码其实从来没有作版本控制。

  2. 有些模块由两个人合作编写,关系非常紧凑。有时候需要在两人之间交换一些代码,为了方便,大家通过代码仓库中转,结果在仓库中留下许多未完成的版本。

  3. 代码被用笔记本带回家,结果在家完成的部分无处可以提交。(为了安全,我们的代码仓库不能从外网访问)

  4. 某人写了一个模块,总是有 bug 没有修改完,而不敢提交。这个时候,另一个人希望协助他找问题,却没有合适的途径 share 那段完成了一半的模块。跑过去 XP 一下么?天哪,为什么我们这里每个人用的编辑器都不一样,还都爱用些特别个性的配色方案呢?

  当然也不是100%同意他的观点。比如第4条,对于我们来说,双人编程和Code Review是很频繁的。

  说到穿越、火星、反应慢,最近还有件事。

  一直患有打补丁强迫症,以前都第一时间升级Windows补丁。可是这次的IE7严重漏洞,直到昨天正在跑实验的机器被Windows Update强制重启后才注意到(微软太霸道,跑了两天的实验又得重新来过)。用惯Ubuntu以后就很少启动Windows,就算启动,一般也用Firefox浏览器。

  搜索了一下,Yahoo上有一篇:Chinese Team Mistakenly Released Unpatched IE7 Exploit。找到文中所提的中国的KnownSec team的BLOG,他们是这么解释的:

  鉴于此漏洞的危险性,作为微软的安全服务提供商,我们已第一时间发布公告,并提交给美国微软相关部门,这里不再公布具体细节。

  KnownSec team于近期捕获利用IE7一个内存越界的漏洞进行攻击的恶意代码。此漏洞于11月在小范围内泄露,于12月9日前后才完全出售流通,有人制出网马生成器,相信会在短期内十分流行。

  由于最初捕获时,在网络上发现了网马及代码帖子,误以为是已修补的漏洞,不是0DAY,便在内部共享粘贴,导致代码散布。这是我们的失误:(

不是天才,就是笨蛋

  非常认同Steve Paul Jobs的“天才——笨蛋”论

  招人,最重要的就是识别笨蛋,请神容易送神难。这里说的“笨蛋”,衡量标准不仅仅包含智力因素和专业素养,还有工作热情和情商。

  反过来,如果真是天才,就不必太担心简历和职位要求之间的overlap:技术研发不像传达室门卫,本来就会时时刻刻面临新挑战,必须不断调整,关键在于有效学习;另一方面,不同观点进行碰撞是创新的必要条件,团队成员的思维方式最好不要完全重合。

  很多诺奖获得者都是跨领域的非正规军。但这种人都很聪明,就算开饭馆也会赚得多些。(补,查了一下,发现巴菲特这么评价Big G:“If Bill had started a hot-dog stand he would have become the hot-dog king of the world. He will win in any game”)

  如何确保成功?谁都不知道,其实有很多运气因素。也许比较靠谱的办法就是借势,混进一个充满天才的圈子。混进去了,想不被踹出来,还得训练自己的竞争优势,对团队贡献独特价值,拥有不可替代性。说白了,把自己也磨练成天才,这才有点戏。最好再有点个人魅力,像舜一样“一年而所居成聚,二年成邑,三所成都”,吸引天才们跟着你混,那你就“不再是妖,是人妖”

  幻想完毕,回到现实。伍六一说:“做尖子,哪有那么容易”。慢慢煎熬吧小伙儿。

BTW:昨天晚饭去吃苏州羊肉面;23点下班,夜宵是枫林路上传说中全上海最好的麻辣烫。解馋。

中场休息

  动态分配策略一上线,就顺利超出了预想标准。回想一下从10月底到现在,从一点都没摸过的菜鸟,调通第一个hello world,到一个版本一个版本迭代,逐渐把pFind集群加速比提上来。小马过河,既没有想象中那么容易,也没有想象中那么难。

  松口气,然后就感到很累,像身体里某个开关被突然切断一样。

  今天早上喉咙肿了。索性偷懒,让瓶子哥自己去实验室,自己接着闷头大睡。间或收到瓶子哥的短消息,告知后续实验结果,我发了个“太好了,这样数据就全面了”,接着昏睡。13点,喉咙消肿了,才起来出去吃饭,脑袋还是犯迷糊。一整天下来,只是回复了几封email,给笔记本的ubuntu升级了操作系统内核补丁,听了点儿技术报告,没干什么正事。

  从北京临走时,买了一本村上春树的《舞!舞!舞!》。昨天终于从行李里找出来开始看。刚看到一半,爱死这本小说了。越来越觉得《挪威森林》在村上的书里,并不是最有趣的。

  原本没想买这本。11月初“光合作用”打电话通知雷蒙德·钱德勒的《漫长的告别》到货了。当时pFind 2.2正在紧要关头,把这事扔在一边,拖了一星期再去,又卖完了。郁闷。因为是《寻羊历险记》的后传,所以选了《舞!舞!舞!》。

  过两天找机会去一次上海书城。

  这只是中场休息,到年底还有不到3周,还有事情想做。明天重新披挂,按村上春树的说法,继续“与现实生活短兵相接”。

谁是技术先锋?

  世界经济论坛刚刚评选出“TECH PIONEERS OF 2009”。上榜的都是信息、生物和能源领域取得杰出成就的创业团队。Business Week就此发表了Special Report。其中开头的一篇Tech Leaders of Tomorrow这样说:

  Industry observers believe that many of those innovations also will end
up being embraced by the developed world, so the next Google—or the
next PayPal—could come from India or China.

  文中举的例子是Nivio,由一位25岁的印度裔工程师创立的软件公司。

  34支入选团队里有一个公司来自中国四川。Business Week特别发表了一篇报道,介绍qifang.com,一个为大学生提供小额贷款招标的在线服务站点。创始人之一陈国权,35岁,毕业于Yale。

  在技术创新方面,中印的确正展开竞争激烈。我们GDP多一倍,但不少领域的顶级学术论文、专利、创业团队都相对逊色。

  30周年了。每一代都有自己的历史任务。至于你我,就负责颠覆不善创新的呆头鸟形象。

Python 3.0 final release和找工作

  之前跟进了这么久,Python 3.0 final release总算发布了

  我和瓶子哥原以为赶不上milestone了,没想到今晚22点时,测试脚本终于报告diff两个调试结果文件完全相同。松口气。瓶子歌昨天就带病工作,一直没精神。我也状态一般,纯粹就是坚持。

  今晚请朋友们去徐家汇吃诸葛烤鱼。感觉还不错,不过觉得把如此多的菜前面加上刘关张赵的名字,实在有点傻乎乎。

  回宾馆喝酒聊天,说到应届生就业,年景不好,有压力。其实,第一份工作既重要又不重要。

  先说为什么不重要。也许你被Google拒了,而隔壁那个怎么看怎么比你差劲的小子却进去了。那就承认自己比人家笨或运气差。找个合适的地方踏实积累,两年后就会苦恼选择太多,无所适从。事业是长跑,晚两年而已。

  为何又重要呢?应该注意的不是公司名气、个人光鲜和钱多钱少,而是有没有遇到好团队好项目,有没有成长空间。就怕13个员工,除你外12个都是老板亲戚(别笑,我真有朋友遇到这种事,即使如此,他得到自己想要的,很快跳槽,现在照样混得不错)。当人贩子时,发现很多应聘者遗漏了关键问题:“招我来具体负责什么?和谁合作?将面对什么独特挑战?”。即使是好公司也总有毁人的烂项目,而小企业却有可能提供成长平台。

  感谢我自己第一份全职工作的雇主。那是家小软件公司,呆的时间不长,经历了挫折和成长。辞职后问老板(比我大不了几岁的自主创业的博士)有什么建议,他对我的缺点提出了坦率的忠告,让人受益匪浅。

大嘴

  好长时间没更新BLOG,总觉得有愧疚感。今天补上。

  每次到上海来最开心的事,就是能吃到各种美食,比如西餐牛排,再比如吴江路的小杨生煎包。

  前天去朋友屋子里聚餐,大闸蟹个个肥美还不太贵,吃法也很正宗:加蟹醋加姜加糖……作为北方人,以前对付螃蟹腿总是很笨拙,这次彻底学会了。俺们从北京带来的烤鸭也大受欢迎。肚子溜圆站不起来。

  很喜欢上海本地品牌的啤酒,比青岛和燕京都清爽些。上周和瓶子哥每天调程序到很晚,回到宾馆依然精神紧张。一边喝啤酒一边讨论下一步工作,就能放松下来。

  今天又有美女过生日,吃到精致的蛋糕。

  接下来几个周末,计划去扫荡奶酪、烧鹅和烤鱼。

  还别喊辛苦,这几天,上海这边的老板回家和我们一样晚。她这么认为:“别太笨,训练自己做什么事都能达到中上,然后挑个喜欢的方向努力,取得几次小胜利,有了成就感,就可以把激情保持下去。”

昵称

  又要起名字了,按组里惯例,昵称都源于动画片

  前两天我们用淘汰的老旧电脑攒了个山寨版集群,用于分布式搜索引擎的调试,瓶子哥起名叫Monsters,真吓人。

  争论最激烈的是pFind 2.2内核,有人推荐WALL.E,有人认为它的女朋友EVA更酷,还有人喜欢圆乎乎的功夫熊猫ABAO。投票表决中。

  好像没在BLOG上提过pFind 2.1内核的昵称。hchi哥是2.1的第一贡献者,他给2.1命名叫DORAEMON。

  现在在上海,刚下火车就开始调试代码。中午又跑去吃牛排。一向喜欢坐火车,有规律的铁轨声让人心境平和。瓶子哥说,那是因为没有屏幕和鼠标键盘。年底还有6周,努力把能搞定的事都按时收摊。

大机器、游戏和艾滋病

  说说最近的新闻。

  曙光5000A即将运往上海超算中心正式安装。上个月,这个大家伙在地下车库里进行最后测试,整栋大楼都停止供暖,以集中电力支持它的运行,组里好几个都感冒了。电老虎,每天的电费上万。

  今年的全球巨型计算机排名刚刚出炉,曙光5000A的运算能力位列第10。《纽约时报》11月17日发表了一篇名为Computing From Weather to Warcraft的新闻稿。文中报道说,两三年前,全世界最牛的25台超级计算机都是美国公司造的;而现在,中国和印度击败了长期领跑亚洲的日本,分别占据了排行榜的第10名和第13名。而且中国的机器是自主研发的(印度Tata公司那台是IBM造的)。

  文中还提到,在曙光5000A之前,中国最强大的超级计算机,是九城运营魔兽世界online游戏所用的集群服务器。(游戏行业有争议,但客观上培养了不少出色的架构师。我很关注网易云风的团队开发的deep cold引擎)

  接下来的曙光5000B,计划使用龙芯替换AMD的CPU。而我们正在开发的pFind 2.2,将是在该系统上运行的主要应用软件之一。

  其实,11月真正的重要新闻不是金融危机,而是德国医生成功治愈了一名艾滋病人。居然是采用治疗白血病的定向骨髓移植方法搞定的。这种方法概率非常小(这病人真是RP大爆发),不能大规模推广,但证明了基因疗法的可行性。当然,该案例还有待进一步的重复验证。

电子竞技、周扒皮和工程师性格

  最近开始很严厉地执行todo list,以便把上半年落下的进度追回来,争取年初的愿望不落空。心情好多了,忙碌带来充实,另一方面,又感到自己变得刻薄而急躁。

  今天周末,居然一直睡到12:40才起床。打电话到办公室,旁边组的人说,组里工位上一个人都没有,我也就索性找借口不去加班,放松一天。游戏风云频道正在直播G联赛总决赛,于是看了一整天电子竞技比赛。

  很喜欢游戏风云频道,没有故作深沉的老家伙(年纪太大的,估计也看不懂星际、魔兽和CS吧,哈哈),主持人和嘉宾经常为比赛结果打赌,然后在转播中各为其主;对战术有不同意见,就会吵吵闹闹,恨不得剪刀石头布。别看圈子里都是年轻人,但无论是俱乐部、职业选手、媒体还是赞助商,还都很像样子,整体运作挺规范。

  跑题了,回来再说自己的情绪。翻了翻上周的邮件,口气总是很强硬:目标是什么;每个人负责哪一块;已经完成的milestones;距离deadline还有多久;最悲观情况下,哪个要壮士断腕,哪个要力保……很像周扒皮半夜鸡叫?提醒自己约束暴躁的性格。

  说到情绪和性格,《梦断代码》里提到,美国做过一项IT专业团队的个性特征的研究:“77%的样本偏爱思考后决策,只有23%的样本偏向感性。而普通人群里,这两类人大概相等。41%的受访者是内闭型思考者,比例两倍于普通人群。极端情况下,程序员的行为特征——避免目光接触、难以读懂身体语言、沉迷于偏僻的课题——非常类似 Asperger’s Syndrome(一种轻度自闭症,高智商人群发病率较高)。”

  这是不是意味着,只有自闭的书呆子才适合软件开发呢?

  恰恰相反,我见过的最出色的软件工程师,都特别善于沟通交流,无一例外。查《代码大全》那本厚厚的砖头,有一章专门论述程序员的必要个人性格,除了最后一条以外,几乎都与人际关系有关:Curiosity(求知欲)、Intellectual Honesty(诚实)、Communication and Cooperation(交流与合作)、Creativity and Discipline(创造性和纪律)、Laziness(懒惰)。

  的确,大多数技术人员都比较内向,善于集中精力,不喜欢多说话。恰恰因为这样,就更需要特别注意交流。例如我自己在工作的时候,就是一个典型的话痨,前两天还刚发过邮件提醒新人:“罗嗦一点,多解释一下,总是没坏处”。其实我是内向型性格,多次心理测试结果都是“哲学家”型,也就是前面提到的内闭型思考者。(哈哈,出乎很多人的意料吧)

  澄清一点,心理学所谓内向外向,并不像普通人理解的,话多就是外向。而在于你在什么状态下得到“充电”。内向的人,倾向于在独处时通过沉思和自省,得到平静和自我认同;而外向的人,则通过与别人分享和交流的过程,得到自信和升华。

  人际交流是一种技巧,是可以学习和积累的。其实不少内向的人都善于交际,尽管我们的“能量”源于独处时的“充电”(例如读书、写日记、锻炼、上网等),但也知道如何扮演团队中的润滑剂或领袖,在合适的时机,把能量放射出来。

  要交流,就意味着面临种种压力:语言误会、花费精力、真话带来的麻烦、利益上的冲突、器量上的修炼……但这是团队成员必须承担的责任,是职业精神的一部分。只顾自保懒得交流,是软弱和缺乏热情的表现。

  BTW 1:润滑剂,是除领袖以外,团队里另一种凝聚型的角色。《最后期限》专门提到这种人:独特的亲和力,自然而然地维护团队气氛。

  BTW 2:谢国忠的BLOG里提到了工程师,黑色幽默了一把:“所以这个世道没什么公平可说,反正谁站对了地方谁就钱赚得多。我觉得对世界最有贡献的就是工程师,但工程师赚钱赚的最少,你要为国家做贡献的就选工程师,想为自己赚钱的还是想办法钻进投行做金融去。”

想买lehuo域名的朋友,抱歉

  这个月很忙,又收到两封买域名的邮件都没有回,想了想,索性直接发到BLOG上。每个月都会收到询问的邮件和电话,花费不少精力。很多打到手机上的电话还是长途,俺是穷人,肉疼呀

  lehuo.com和lehuo.net的确在我手里,而且lehuo.org和lehuo.com.cn等等一整套都在。我不懂域名投资,注册它们是准备自用的,是俺的joyfire.net的中文翻译拼音。

  和我联系的大多是startup。非常欣赏他们的激情和创意。之前也说过,最近是创业好时机。应该说买家给的价已经很高了,如果单纯为钱,可能就卖掉了。但近期内我的确不打算转让,包括作为投资入股一类的方案,都不会接受。

  只要有想象力,一定能找到更好的域名。真心祝愿朋友们创业成功。

  BTW 1:如果非要拿下,请参考mayi.com和mayi.net的价格,真到这么高我就卖,哈。

  BTW 2:前一条的麦田BLOG的cn域名失效了。自己搜索吧。个人意见是,创业资金很重要,花太高代价仅仅为了买几个域名不值。