Category Archives: 0和1

最近C++0x信息收集

  列出最近看过的关于C++0x的一些链接,以发表时间排序:

  标准委员会总是磨磨蹭蹭的,0x里什么auto&decltype,Initializer,variadic templates,concepts和sequence point这些提案经过N长时间反复炒,都快失去新鲜感了。估计就算立刻出现在VC和gcc里,很多人也能拿起来就用。想了半天,没什么可写的,也许现在剩下的就是等着投票了。

Bigtable论文

  Google labs里刚贴出了Bigtable的论文:Bigtable: A Distributed Storage System for Structured Data。立刻引起很多讨论。很关注这个话题。在Blog发表了不少与此有关的讨论,搜索了一下,感觉这些观察和思考是有连续性的。把它们都列出来:

  最近会看看Google Map卫星地图上的中关村,所有标志性建筑都清晰可见,也能找到我住的小区单元楼和工作的大厦。原来每天就活在这么一个格子里。

确定BUG位置

  前些天着急上火,因为pFind的肽序列质量误差过大的BUG总也排除不了。今天总算逮住了。导致质量计算不准的是数据索引模块,而且仅仅是修饰的索引才出现BUG。老版本遗留问题。真折腾。同时松口气,BUG定位后就好改了。

  有关质量误差的其他细节今天也都改完了。不由高兴起来,明天去实验室加班。昨天会上好大压力。阿弥陀佛,我得把《最后期限》再看一遍。

  上周开始重新浏览Distributed Programming with Ice,目前在精读The Ice Run Time in Detail一章。刚写了个HelloWord代码。上网一看,ICE 3.1.0又发布了,乖乖,好快的推出速度。

几篇关于MapReduce的中文资料

  收集到几篇关于Google MapReduce的技术资料,供参考。

  Tinyfool:什么是MapReduce? Google的分布运算开发工具!

  梦想风暴:MapReduce

  SQLiu:从Map和Reduce说起

  is03kyh:My Map Reduce

  田春峰:MapReduce:Google的人间大炮

  Xerdoc:Map Reduce – the Free Lunch is not over?

  IcyRiver:MapReduce与Database之争

Agile的JFox,Pragmatic的JFox

  昨天allen发了一篇BLOG:Agile J2EE、IoC、AOP : JFox的发展策略。明确提出JFox的新定位:Agile J2EE Application Server。也就是说,侧重于IoC,AOP技术,有选择性地支持EJB标准,放弃类似Entity Bean这样复杂而不实用的部分。

  很赞同这种明确实用的策略。提些小建议:

  1. 确 保固定的发布周期,短一些。最好每月一个milestone版,半年一个final版。人手不够?步子可以迈小一点;变化?把部分feature推迟到下 一版……无论如何,版本发布的频率节奏一定要稳定,周期要短。这是很多成功的开源项目的经验,也是Agile最重要的原则之一。
  2. 建立一个子项目,专门用于集成实用的示范应用,演示JFox推荐的体系结构、设计模式用法。这些示范应用必须是实际的完整的解决方案,而不是Hello World式的Demo。用户可以在此基础上修改扩充,形成自己的系统。Pragmatic的开发框架对推广很重要。

C++应用程序和C++库

  引用孟岩的好文:

  “…… 现在我们知道,用来写C++程序库所需要的技术,与用来写C++应用程序所需要的技术存在很大的差别。这已经比较糟糕了。更糟糕的是,一般的C++开发者 根本分不清这中间的差别,他们在开发中往往既不是一个称职的程序库开发者,也不是一个单纯的应用开发者。他们一边想着完成手头的工作,一边琢磨如何能够写 出高质量的基础库和框架,为万世开太平。如果说C语言是一把轻快的小匕首,遇谁都是进身猛刺,血溅一尺,那么这种C ++的使用方式无异于左手打铁铸兵,右手挥剑刺秦,这种精神分裂的状态直接将很多项目变成了既超期超支又质量低劣的垃圾。“

   “认识到这样的事实之后,C++程序员应当以更理性的态度来看待自己的工作。大部分情况下,你所需要做的是寻找一些可以互相合作的、稳定可靠的开源程序 库,然后在其基础之上,面向目标,使用尽可能简朴的技术,专心专意地进行应用开发,把那些复杂精妙的语言技巧和“可复用”之类的想法扔到Java国去。唯 其如此,你才可能更高效地开发出好的应用软件,而且会逐渐积累和重构出真正可复用的软件。”

Google的算法

  开始设计pFind系统的集群版本。今天在读Google的论文:MapReduce: Simplified Data Processing on Large Clusters。之前推荐过The Google File SystemWeb Search for a Planet: The Google Cluster Architecture两篇论文。

  Google的强大不只源于PageRank算法,用普通PC组成的高效集群也是一个杀手锏。李开复就提到过,MapReduce算法和GFS架构才是Google真正的核心竞争力。

  digg上热炒Google购买Orion算法的的事。引出一大堆各式各样的八卦议论,比如有关这个博士生的国籍。有个小伙这么写“After all Israel is just America III. Canada is America II.”,哈哈。

  有趣的是,现在,北京时间2006年4月10日22:30分,用Google Web Search搜索这个新闻,可看的内容很少,但用Google Blog Search搜索,就能找到世界各地用各种语言写的评论,很多都是20分钟前刚写的。

读完《基因组:人种自传23章》和《Modern C++ Design》

  回到北京后杂事很多,看生物信息的论文,还看完了《基因组:人种自传23章》,暂时把《Modern C++ Design》放下了。昨晚没写BLOG,看完了剩下的几章:Object Factory、Abstract Factory和Visitor,这几个模式的Policy不多,相对简单。

  泛型技术没有想象的那么难,只要把前三章的基础啃下来了,后面都是应用。设计模式不是教条,而是根据实际情况调整的策略。C++0x标准放弃Loki的智能指针,而采用Boost的auto_ptr和shared_ptr,不喜欢

C++和集群系统

  现代C++的发展方向让人困惑:泛型技术的确很酷,却妨碍了模块的动态链接。没有Java Bean这样的标准组件模型可能算是C++语言最让人头疼的地方,程序员被各种编译器和操作系统的细节淹没。

  大型系统里,C++到底负责哪些部分更合适?时髦的体系结构是这样的:用C++实现library层,用Java甚至更华丽的动态语言实现业务层和界面层。看起来很美,比如Eclipse和SWT

  串联质谱鉴定系统搜索引擎pFind以外的模块如何组织?一直拿不定主意。

  上周去合作单位,实际操作同类的国外工业级产品,集群系统的体系结构给我留下了深刻印象:由C++实现各种独立的后台服务,无论命令行、Java GUI界面、分布式网络协议或Web界面方式,都能操作这些服务进程。的确是简明漂亮的方式。

  好的解决方案往往都很简单。比如集群节点间的通讯服务,其实只需相互交换简单的消息,再利用NETBIOSNFS共享具体数据就行了。

《Modern C++ Design》

  最近搜索浏览了一些关于template的blog,感觉自己可以开始看《Modern C++ Design》了。所以昨天抽空到中关村图书大厦买了中文版,候捷、於春景译,华中科技大学出版社,中文名是《C++设计新思维》

  浏览了第1章(Policy-Based Class)和第6章(Singletons),目前卡在第3章(Typelists)的迷魂阵里,计划接下来读第9章(Absract Factory)。

  对我这种只会用STL容器,看到大段尖括号就发晕的template菜鸟来说,这本书的学习曲线有些陡峭。但泛型编程和设计模式结合起来太酷了,每看懂几页,就会回忆起以前的某个笨拙设计,开始胡思乱想,踅摸如何重构。

  记笔记,下面是几条以前不知道的ABC:

  1. 虚函数不可以是templates
  2. 如果class template有个成员函数从未被调用,它就不会被编译器实现出来

后记:3月3日读完第一遍