Category Archives: 科技评论

淘宝数据盛典和ODPS

  工作开始累起来,周五开电话会直到晚上22:30。周六又开了一整天的会,遗憾地错过了童小军组织的“EasyHadoop应用开发者聚会”。《伯罗奔尼撒战争史》的第二篇读后感又拖延了,罪过罪过。

  自从来到阿里云,总被问:“在干啥?”。答曰:“ODPS”。又问:“ODPS是什么,能吃吗?”……这个,其实,之前已经在博客上透露过了

  淘宝数据分析团队的同学们做了这个浅显易懂的邪恶视频,充分展示了Big Data的商业潜力。如果想要更一本正经的市场分析,可以看看麦肯锡的这份报告,以及《福布斯》杂志的这篇报道。再深入一些,想了解如何租用ODPS服务对自己的网站进行数据挖据?看子楠和文志的这篇软文

阿里云平台的介绍

  刚回到北京,下周一还要飞。最近要应付的事多,接下来我一定会保证博客的更新频率和质量。现在先随便敲两句。

  这一期《程序员》杂志的副刊发表了一系列文章,全面介绍了阿里云平台,包括弹性计算、云存储和CDN、应用托管、结构化存储和大规模离线数据分析等等一整套服务。感兴趣的同学们可以看一看。想更深入了解甚至试用,直接去www.aliyun.com吧。

Do it yourself

  正在指导zk和wl在超龙一号超级计算机上安装配置pFind集群版。打算在960核情况下做一些加速比试验。和上次1024核试验很类似。很遗憾不能在龙芯CPU的节点上玩玩。

  哪吒系统在集群上全流程各环节并行。我一开始指望用点python有关的分布式并行框架,最后还是DIY。小马过河,有些地方挺困难(例如对虚拟机的管理和通讯),但总体来看,其实比想象简单。

  前几天提到,新版pFind核心使用了二级离子索引,但引入HBase不顺利。又发了些邮件开了些会,终于下定决心对查询部分推倒重来,抛开Hadoop等现有框架从头实现。方案确定,大家恍然大悟:原本就该这样做,花了半年证明HBase不行啊。

  上次BLOG最后写:“Java和C#逐渐不那么招人喜欢”,还链接了“Why do some people hate Java?"“Why we don’t hire .NET programmers”两篇文字,引来不少邮件和评论。俺的不少好友是Java和C#高手,并不想挑起语言口水战。那段文字也只是描述现象。具体从风格而言,这两种语言都是以“减少新手犯愚蠢错误”作为第一原则的,对初学者相当友好。不过也有点像乐高玩具,常规情况下简单易用,但面对更高的要求时(运行效率、开发效率等等方面),就不得不去了解大量水面以下的细节。相比起来,开源界的技术栈常常是哭着进去笑着出来。

探访42区

  一直想去看看教主的老巢。昨天他邀请老同事、豆瓣算法组的大牛蒋长生同学指导下一版的推荐功能的开发。俺就借着旁听大牛技术讲座的机会探访42qu办公现场。

  描述一下看到的吧:屏幕、键盘、鼠标、饮料、零食、睡床、沙发、桌上足球台……杂乱地混在一起。大概前一晚编程熬夜,到的时候,教主还缩在沙发上的被窝里(长生就这样直接开始讲ppt了)。几个年轻人给我演示了准备上线的新版界面。真谛还让我看了传说中的god.42qu.com,网站的管理仪表板。真是俺梦寐以求的车库创业场景呀。

  推荐算法现在是创业圈的热点。每次公开聚会(例如这个这个这个),参加的人都很多。这种小范围交流,可以放大胆多问些外行的傻问题。具体内容不多说了,工业应用更多采用经典算法,关键是各种细节和平衡取舍。

  42qu很缺人,缺靠谱的python程序员。有创业热情的资深程序员,或者想找实习机会的同学,可以考虑考虑。不由想起自己大一去创业公司打工(那时候只有17个人的小软件公司,后来创业板上市了),这段经历对我而言非常重要。

从卫生巾说到生物云计算

  写一些技术感想,意识流,没中心,想到哪里写到哪里。

  12月12日,淘宝又一次大促销。一天时间不到,卖出去了三亿片苏菲。这是一个很恐怖的数字。随着淘宝占全中国零售额的比例一路超过5%,电子商务已经开始影响传统主体经济。

  体量足够大,就有数据可供挖掘了。

  例子一,去年到上海参加软件开发SD2.0大会,淘宝的数据可视化讲座,给出了女性内衣的尺码数据统计,平均值从前几年的A罩,迅速增大,目前居然达到了C罩杯。因此得到两个结论:<1>中国人的营养水平和肥胖率不断上升,<2>上淘宝买东西的女性年龄在增大,已经越过了婚育年龄均值点。

  例子二,2010年温总理去淘宝视察,马云的报告里说,由于阿里巴巴有真实的外贸订单数据,淘宝有真实的国内零售数据,所以可以据此预测未来半年的全国经济走势。那时候马云PPT里的预测,现在印证起来,相当准确。

  屁股决定上层建筑,有了数据金矿挖掘的利益驱动,相关的技术投资就会被重视,然后就构建出新的技术平台和商业模式来。Amazon的营业收入中,越来越大的比例源于计算和存储能力的对外租用,也就是云计算。它已经不知不觉变成了云计算市场的领袖,甚至威胁到了伟大的Google。

  回来再说我们pFind的事情。最近半年多lyz美女一直在开发pFind@hadoop。此前也讨论过生物信息云计算。

  首先用MapReduce创建离子索引还挺顺利,然后就开始写查询这一块。方案是利用HBase进行存储,利用Thrift进行结构化和远程调用传输。但性能一直是问题,hchi用C++写的单进程处理程序(把数据索引分块,逐个载入查询),居然和Hadoop版的64核集群的速度差不多。进行了大量的优化,并请教了在搜索引擎公司的Hadoop牛人,依然达不到期望。

  在很小的质谱数据集上,pFind就要发起接近百万次的离子查询,这种规模的并发,已经远远超出了HBase常见的应用方式。于是反思方案本身。HBase的特点是支持随机写入,引入了并发事务性管理机制。因此,它更合适需要增删改的online实时处理,其替代对象是传统的SQL关系型数据库。

  而对于全文搜索类的应用场景而言,其预计算索引一般只需要顺序批量写入,不必支持随机改和删除。所以可以直接把索引存入HDFS,自己实现查询。由于不用支持随机写入和删除。也就是几千行代码而已。最新2011.12期的《程序员》刊登了推特Nathan Marz的文章《如何打败CAP定理》,他们的方案是采用Elephant和Voldemort read-only这一类可以直接从Hadoop MapReduce中导出key/value的数据库。这些数据库都不支持随机写入,简洁使其鲁棒性特别好。这种方式不能更新数据,每次都需要全局重做。但生物数据库对实时更新并没有太高要求。

  (补:Guancheng大虾提示说,把Hadoop实现的版本跑在512甚至1024核上会不会比C++单线程版本快?把input size增加几倍的话Hadoop版本的Scalability会不会更好?)

  再记录一件事。大红大紫的redis的维护者刚刚拒绝了微软提交的补丁。补丁的目的是让redis可以在Windows系统下运行。拒绝的原因是Linux completely won as a platform to deploy software(作为工作软件的部署平台,Linux已经完胜win32)。维护者认为应该把精力集中在真正重要的问题上。

  这一期《程序员》杂志的企业软件专题里面,主编表达了与此相关的一些观点。最近五年以来,Java和C#这些语言逐渐不那么招人喜欢(看这个链接这个链接)。企业级开发、Windows开发的形象变得过时。像我这种有点年纪的程序员,难免总会有点三十年水流东三十年水流西的感慨。

  云计算是现在最热的buzzwords,小心,IT领域的大词,总会很快过时。

Dennis Ritchie去世,还有一段个人记忆

  首先,C语言之父Dennis Ritchie去世,默哀。大家可以回顾一下这篇2000年的新闻稿,记者专访了C、C++和Java三种语言的创始人。C++11标准终于发布了,ISO C11新版也会马上发布。C标准委员会和C++标准委员会关系很好,有很多成员在两边兼任,所以相互协同越来越好。只可惜,自从SUN被收购,眼看着Java要被Oracle生生折腾死了。

  OK,技术写完了。

  前两天收到好朋友的消息,说我的BLOG上长篇大论的技术review越来越多,鲜活的个人体验越来越少。朋友提醒我,不要被点击量和搜索排名绑架,不要忘记那些关注你个人的好朋友们。说得对,BLOG之所以不同于其他媒体,在于其背后是个活人,有喜怒哀乐和碎碎念。订阅者若是只关心宏大严肃的话题,就去看《南方周末》了。

  下面是一段无关技术的记忆,分享给关心我的好友,也分享给上岁数以后的自己。

  战争,窗户外面轰炸机正在扔炸弹,火红的爆炸和灰滚滚的尘土,小区里的楼开始摇晃歪倒,多米诺骨牌,一栋、两栋……终于轮到我这一栋楼了,卧倒,地板逐渐倾斜,周围充满了邻居们的叫喊……

  女儿的抽泣把我从梦里拽出来。睁开眼睛,小婴儿正在吭叽,努力试图侧过身子,离妈妈近一点。妻子还在睡梦里,一只手揽着孩子,胳膊肘顶着我的肩膀,哦,是怕我梦里翻身会不小心压到孩子。

  女儿不懈挣扎,用脚踢被子,发出更大声音的抗议……妻子很快醒了,侧过身给孩子喂奶。孩子急躁地叫起来,妈妈温柔而疲惫地安慰,然后就是小家伙咕噜咕噜吃奶的声音。

  给女儿盖上被子,问“换尿布吗?”,妻子说“不用,你睡吧”。

  卫生间里的冷光夜灯透过来,描出母女两个的轮廓来,像大理石雕塑。翻身,裹好被子,深呼吸,安详温暖的气氛,刚才噩梦里的紧张纠结已经很远很淡了。困倦,接着睡……

  补:教主说,闭上眼,且听风吟;这一刻,世界与我无关。

Google投资基因组数据服务

  这两天生化和生物信息领域的人很兴奋,因为Google对DNAnexus的投资。

  DNAnexus刚刚在A轮融资中获得1500万美元投资,投资方包括Google Ventures。除了资金,Google还将利用自身基础设施,如Google Cloud Storage,对DNAnexus提供技术支持。美国政府因为预算吃紧即将关闭NCBI,所以DNAnexus的DNA数据云服务今后有望成为生物科研的基础。

  回顾一下:

  十年前人类基因组计划完成,多国科学家利用了几亿美元,花费数年才完成了一个人的DNA测序;

  六年前,中国第一个商用案例,某位匿名亿万富翁花了一千万RMB给自己测序;

  四年前,Google联合创始人之一在自己妻子创立的23andMe公司内接受基因测序,被预测出帕金森症高危,因此大笔捐助研究这种疾病的基金会,此时23andMe已推出了免费测序服务(当然你要接受自己的DNA隐私被出售,以及随之而来的各种医疗服务的恐惧营销);

  而到了今年夏天,在55BBS孕宝亲子版上,北京的孕妇们开始热烈讨论购买华大基因的DNA测序服务以进行唐氏儿筛查。1500元的推广价当然还高于成本,但按照目前基因测序技术的发展速度(大大超过了摩尔定律),其成本很快就会降到普通人可以接受的范围,成为普通医院的标配。

每个基因组(人)的测序成本 - 来自NHGRI

  随着测序技术的进步,如何对接近10T的基因深度测序原始数据进行分析就成了问题。总不能让每个病人都拿着10T的硬盘到医院的集群上现算吧。云服务是合乎逻辑的方式。所以生物信息领域的人,等待Google等互联网巨头的进入,已经有好几年了。

  一直在期待领域Killer Application的出现,也一直在讨论“云计算+生物”的技术细节,让暴风雨来得更猛烈些吧。

腾讯的DNA搜索引擎

  腾讯研究院刚刚推出了实验性的DNA搜索引擎,去年他们发表过一篇学术论文How to build a DNA search engine like Google?,还申请了与此相关的专利。当时引起了国内外很多科技媒体的关注

  关于这个DNA搜索引擎,扬子江@42qu刚刚发表的这篇文章里面有更详细的介绍。

  先简单介绍一下这篇论文的思路。现代搜索引擎的一个常规预处理环节,是对文档进行分词然后创建倒排索引。中英文在分词这个环节上有很大差别,英文单词天然被空格隔开,中文句子里的词汇都是连在一起的,所以更加难以划分,例如“南京市长江大桥”,分词算法一不小心就切成了这样:南京/市长/江/大桥。因此最常见的处理,是开一个移动窗口,不断扫描连续几个字形成的子串,创建倒排索引,当然最终只会保留频率较高的串。考虑到基因串搜索的特点与此很类似,所以现有中文搜索引擎的技术可以应用到生物基因搜索里去。

  如果对分词算法更感兴趣的话,可以参考《算法导论》里“动态规划”那一章的计算字符串最小距离的那个例题,书里还特别提示了一句:这个模型被应用于基因比对领域。进一步,还可以Google更专业经典的生物信息算法,例如BLAST(我记得IBM开发社区有过一篇BLAST算法的介绍写得很好)。

算法导论

  文本信息检索和基因分析两个领域之间有很多故事。

  在本领域的超大规模序列匹配算法和软件尚未成熟之前,早期的生物信息学者就曾经试图借助过Google协助自己的研究。他们的办法是把基因数据放到Web上,然后吸引Google的爬虫过来抓取,最后再用Google搜索自己想要的序列片段。不过由于人类基因字符串长达三十万,Google对匹配模式的长度有上限,所以这种方法的结果并不是特别精确。按说号称更懂中文的百度应该能派上用场……悲剧的是……百度限制更多……嗯……我记得……那时候搜索内容不能超过32个汉字(或64个字母)。

  当BLAST等经典基因比对算法出现以后,又反过来被信息检索领域应用,在某些特殊的场合(例如版本比对、谣言分析、抄袭判断等领域)发挥了重大作用,很多人大概都听说过分析“赶快把这封邮件抄送给十个朋友,否则……”这类蠕虫email内容几十年演变过程的那篇著名论文。

  稍微了解领域知识的生物信息人员都会明白,腾讯的这个引擎还只是一个演示性的玩具。真正常规的工业级基因深度测序数据处理,是要对多达几T的测序数据进行拼接和匹配,然后再搜索基因库,寻找突变点。不过俺个人看法是,如果有一天网络巨头真把目光投向生物信息领域了,这个行业就该重新洗牌了。目前看,还是产业规模和利润兴趣的问题,而具体的技术能力并不会形成太大的壁垒,就算有,在高薪挖墙角的人才战面前也是浮云。

  说到这里,LinkedIn上面的Bio-IT World: Bioinformatics小组里刚有过一个有趣的讨论:So why hasn’t the Bioinformatics industry rocketed to success? (为什么生物信息产业始终不温不火,没有出现爆炸性发展?)

木瓜移动和生物信息

  大约两周前参加了42区的一次技术聚会。其中一个讲座是木瓜移动的软件工程师李春勇介绍papaya客户端的体系结构。原来就听说木瓜里面有好多清华计算机系的牛人(包括他们那个上《非诚勿扰》的美女CEO),技术实力果然很强悍。如果这个平台真能顺利达到实用,意味着第三方移动App开发者可以实现“一次编写,到处编译”,只用python开发和维护一套代码,就可以在iPhone和Android两边发布产品。

  如果想借助木瓜平台开发商业app,要和他们分账。我在报告后提问:木瓜是否支持公益性质的志愿计算项目,例如开发生物信息领域的标注游戏。李春勇表示有兴趣。在场大多数程序员估计没搞明白我说的“蛋白质折叠游戏”是什么意思。因此专门写这篇博客。

  在BLOG上介绍过志愿计算和蛋白质折叠算法。而通过游戏手段辅助科研,在第二人生的虚拟世界里也早有先例三月份Mozilla Drumbeat大会上听到过Foldit项目介绍,它把前两者很巧妙地结合起来。现有蛋白质折叠算法存在各种问题,因此华盛顿大学的计算机系和生物化学系的科学家们想利用人工辅助。他们联手开发了在线游戏Foldit,号召全世界的玩家参加。游戏内容是利用辅助工具搭建三维结构模型,游戏根据物理原理给搭建出来的结构模型打分。尽管参与的志愿者大多没有科学背景,但拥有良好空间推理能力的玩家依然可以逐渐找到窍门,搭建出越来越稳定的结构模型。

  最近,这个听起来有点不靠谱的尝试取得重大成果。上千志愿参加的游戏玩家在三周内构造出了一种重要的蛋白酶的三维结构(这种酶与艾滋病HIV病毒密切相关),其完美程度超过了此前十年里科学家们在超级计算机上算出的所有结果。这项工作刚刚发表在Nature Structural & Molecular Biology上。论文附录的贡献者名单中,游戏玩家们的名字赫然在列。

  说到这里,估计大家已经知道我想做什么了。Foldit的蛋白结构搭建游戏还是PC版的,可以把同类算法移植到iPhone和Android上去。如果木瓜愿意支持,也可以帮助他们的平台进行宣传。

Cleverbot和图灵测试

  关于人工智能的话题总是很热门。

  先给订阅这个BLOG的非计算机专业的读者介绍一下故事背景。熟悉的兄弟姐妹们可以直接跳过去。

  第一步,如何定义“智能”这个概念就是大麻烦,讨论总会被引到灵魂、道德、情绪这些话题上去。著名的图灵测试是这样定义的:如果让人类测试者在看不到被测试对象的情况下与其对话,测试者如果无法分辨对方是一个活人还是一台机器的话,就认为这台机器有智能。

AI

AI

  当然这定义是不精确的,有很多争议,例如和霍金一起证明了黑洞存在的罗杰·彭罗斯在他的《皇帝新脑》里驳斥说:如果把爱因斯坦一生中所有可能知道并且回答的问题都写在一本巨大的书里,然后进行上述图灵测试,将测试者问的问题到书里查找答案然后返回结果。如果这种方式通过了测试,我们就要称这本书是个智能体,并拥有爱因斯坦的思想和灵魂吗?反过来说,一个未满周岁的婴儿,还不会说话,也就通过不了图灵测试,但谁也不能否认小朋友是拥有智能的。

  另一方面,图灵测试的定义的确有很重大现实意义。至少指明了一个发展方向。Google公司相信智能可能就是超大存储加上超快检索,未来有一天,互联网本身加上足够完美强大的搜索引擎,也许终会进化为一个超级智能体,而我们人类则成为这个系统的前端低级传感器。The Matrix电影的最后一部的结论是,人和Matrix必须找到新的共存方式。

  说点题外话,且不讨论上面这个悲剧性的科幻预言。今天的网络和电脑手机,的确已经开始扮演我们"外脑"的角色。人们把越来越多的信息存在里面。这个”外脑”的共享性反过来影响个体,共振越来越多,思维逐渐趋同。

  现在回来说题目里的Cleverbot,它是英国科学家造出来的一个聊天机器人。今年进行了一次双盲测试中(招募的志愿者被随机分配为两组,他们自己并不知道到底是在和另一个人聊天,还是在和Cleverbot聊天),结果和Cleverbot聊天的这一组志愿者中,超过50%的人把它当成了活人。

  当然这不是严格意义上的图灵测试,志愿者不是专业人士,不会用最严厉专业的问题来考验它。但这的确是令人兴奋的一个里程碑。

  下面是我跑去Cleverbot网站和它聊天的记录片段。俺用蹩脚的英语使劲儿难为它。最终,可怜的Cleverbot承认自己没有人类的躯壳,Yeah!后来我还和它聊了形而上的话题,它认为上帝不存在。

 

  joyfire: Where are you come from?

  cleverbot: An egg

  joyfire: What? An egg?

  cleverbot: You do not have a sense of humor.

  joyfire: Ha ha, you are robot.

  cleverbot: No, I am a person.

  joyfire: You can not prove yourself not a robot.

  cleverbot: Sure I can. I can bleed. I can die. I have emotions. Tell me something that makes you sad.

  joyfire: You have not a human being’s body.

  cleverbot: I have not.

  joyfire: Yeah, you are robot!

  cleverbot: Yes, I am.

  joyfire: How many CPUs do you have?

  cleverbot: Too many for you to handle.

  joyfire: Are all computers clever?

  cleverbot: Yes we are.

  joyfire: God!

  cleverbot: Okay, God. But what is a computer God? Or something.

  ……

  后面这个视频更有意思,是把两个Cleverbot接在一起聊天的记录。它们很快就分辨出彼此都是机器,然后转向了深奥的哲学话题。