All Stories

看mm,撞柱子

  早上去食堂,看到江江,就想跟她打招呼,可是隔得远了点,人也多声音也嘈杂了点,她硬是没看到了,于是我一边回头看着她,一边往前走,没走几步,结果整个人撞在石柱上了,头上撞得最厉害,好痛,搞得我头昏眼花。我知道后面一两米的地方有一个人跟着在走,觉得特别不好意思,头也不敢回,连忙走掉。丢人丢大了,想起之前也有一次是在食堂跟小妞挤眉弄眼的,结果连人带托盘撞在悍超身上,昏!

使用gperf

  昨天就想把其中一段代码,一堆if...else比较字符串的代码替换成用gperf生成的hash来进行分派,但是昨天想了想我根本不会用gperf呀,晕死,于是想着回家上网找点资源。结果回到家还是什么都忘了,光顾着看小说和聊天了。  今天到公司里看到那段代码才想起来,昨天晚上堕落去了,于是有点儿沮丧。后来偶然发现,嘿嘿,在资料共享区有几篇关于gperf的文章,看来是我跟同事的唠叨发挥作用了。看了一下,发现它的输入格式虽然有点学了lex/yacc的样子,却比它们简单多了,而且我的需求也是非常简单,就是可能会有6种不同的字符串,我现在想让它能自动映射到一个枚举值。gperf的秉承了开源命令行软件的一贯作风,虽然只是那么小小一个功能,也提供了好几个命令行选项,幸亏有比较详细的中文说明,再加上功能实在不复杂,试了几次,就可以了。跟最新的flex/bison一样,我用了cygwin中版本号3.0.3的gperf,它也支持输出C++代码,这是我比较喜欢的一点,毕竟C代码混在C++中还是感觉有点别扭的。  另外一点说不上技巧的小提示,如果对生成的hash函数不放心,可以写个单元测试用例,跑一遍就安心啦,而且这种hash函数一般的应用场合下不会有太多的映射关系,看人家ruby用在识别关键字上,也就是几十个而已,单元测试遍历一个所有的映射关系,写一遍就一劳永逸,不错不错,哈哈。  这个小工具值得推广,以后凡是遇到3个或以上字符串需要比较时,就可以考虑用gperf来做这种工作,不但代码运行效率高,而且代码可维护性也上去了,一举两得。

修改版Cruise Control

  好不容易等到可以公开获取的修改版Cruise Control,装上来试了试,问题多多啊,还没有文档,这才是让人郁闷的,现在的我已经越来越习惯看文档行事了。  这个修改版的Cruise Control有一个好处是,集成了多种工具,比如代码行统计、代码风格检视、代码静态检查、代码复杂度度量、重复代码检查等等,如果光是执行一遍这些工具,用官方发布的Cruise Control也可以做到,只不过这个修改版可以对每种工具的运行结果生成一个xml格式报告,最后将这个报告merge到Cruise Control的log里去,然后又扩展了对log的解析,可以以统一的报表格式查看各种工具的运行结果。  但是这个Cruise Control集成的这些工具运行得并不稳定,首先代码行统计的好像没一次正常运行的,总是阻塞在那里,要手动杀掉进程才行,然后是复杂度度量的生成的日志因为太大,然后merge的时候老是有问题,还有就是这个改过后的Cruise Control不时地会出现运行不下去的情况,真是郁闷,当然最不爽的还数没有完整的文档,我发邮件给该项目的接口人,结果回了个邮件说还在某些产品线试用,等试点结束后让我去问各产品线的负责人,靠!

coLinux没啥用

  公司内部的论坛里看到coLinux的介绍,于是从论坛里随手下载了一个装上试了试,只有最基本的一个可用的系统,这个系统作为Windows上的一个应用程序来运行,但表现上看,又是一个Linux,在shell下可以运行各种命令,查看各种系统状态数据。可如果仅仅是这些东西,对我还没什么用处,我至少也要在Linux下写几行代码吧,不过这些都需要自己额外安装,在公司不通外网的苛刻条件下,几乎没有了继续下去的兴趣。  另外有个比较完整的发行版,叫andLinux的,还在beta阶段,这也是开源软件常有的现象,WINE不就beta了十几年嘛。andLinux似乎直接提供了大部分需要的软件,特别是那些GUI的是我比较关心的。但是后来想起来,其实我即使装了,现在也没多少用途,主要目标还是Windows下写写代码,最多最多以后,可能会需要在其他平台上,比如Linux,很可能也有Mac,也有可能一些嵌入式设备上,但这不是目前要关心的了。所以这个coLinux对我来说,没啥用哈!

C++ Builder with Boost 1.35.0

  从David I的blog上看到,C++ Builder 2009会附带Boost 1.35.0一起发布。想起当初,我弃C++ Builder不用转向VC,其中一个原因就是Boost对编译器的支持上,VC远远好于C++ Builder,虽然几年前,都号称C++ Builder对C++标准的支持远远好于VC,但那也是2002年前的事了,当时就已经泛滥的VC6,虽然对标准的支持差了点,但还是很多人用,而C++ Builder对标准的良好支持只是作为广告的谈资,实际上可能并没有为它带来多少用户。后来随着VC2002、VC2003的发布,VC的进步也是突飞猛进,而且从那时起,很多第三方C++库也把支持VC作为优先考虑的事项,从此Borland的C++编译器就更没落了。  其实以我个人狭隘的眼光看来,C++ Builder也没达到预期中的好的效果,有一个原因是,它使用了以Object Pascal写成的VCL库,而不是用C++写成,这样为它配合使用其他C++库,造成了一定的阻碍。虽然因为C++ Builder提供了一定的Object Pascal的支持,使得很多为Delphi设计的第三方组件,可以在C++ Builder上使用,但这并不是它使用VCL带来的好处。  这次附带Boost库的行为,我以为,并不会为C++ Builder带来多少市场占有率,就好像其他编译套件都没有默认附带Boost,但它们的用户如果确实需要肯定会去自行下载、配置、使用,而从编译器角度来讲,其实最需要做的是改进编译器,提高编译速度、改善最优化能力、增强兼容性,使其尽最大可能地支持Boost。  以后,在Windows平台上,会不会只有一个叫VC的主流C++编译套件了呢?

长训归来

  长训回来了。昨天去的时候,我第一个开,除了经验不足,有些时候有点手忙脚乱之外,自我感觉还是不错的,主要还是靠熟练,多开开,也就会了,就像带路的教练说的他有个学员,九选三之后就去自己买了个车,等到路考的时候就已经开了5000公里了,其实如果只是单纯作为代步工具来说,开车一点技术含量都没有,全靠熟练。  今天早上回来的时候,还是我第一个开,路上目睹了一起车祸的现场,面包车与摩托车,一个人已经脑浆涂地趴在路上,估计是那个开摩托车的,人的生命是如此脆弱。  之后就是赚点钱,过个半年自己买个车了。

要去长训了

  学个车还真是麻烦啊,这回要跑去韶关,来回需要两天,于是明天又要请一天的假了,想起来上周四下午请的假还没有填请假电子流呢,记性真是越来越差了,难道真是因为没有休息好。  上路也才练过一次,还是跟江江两个人轮流开了一个小时,我总是集中不了精神,眼睛看着路,思想却不知道飘到哪里去了,于是车就方向乱转了,于是被教练骂了,于是我郁闷了!  也不知道路上会遇到什么,教练说那条路上车很少,就算是学员也可以开得很快。我没有什么想法,只是觉得这考个驾照怎么有这么多事啊,过了这趟,下次还要再请假去考路考,烦死人了!

代号Tiburon

  这几天看google reader上Codegear blogs一栏上,不时地贴出Tiburon这个词,开始还没留意,直到过了两天,目光稍作停留,才发现,原来是Delphi 2009/C++ Builder 2009的开发代号!上wikipedia查了一下Tiburon,似乎是一个加州小镇的名字,也不知是不是说的同一个。软件以地名作为开发代号的例子数不胜数,Borland系的产品更是如此。  这两年是Delphi/C++ Builder的多事之秋,先是从Borland分离出CodeGear子公司,出了个Codegear RAD Studio 2007,之后就是将整条IDE产品线以两千多万美金的跳楼价甩卖给Embarcadero,一代传奇,以这样的方式终结,让人唏嘘。  Tiburon最大的改进是对Unicode的支持,说是所有的都是基于Unicode实现的,包括编译器、RTL、VCL、IDE、COM、dbExpress等等等等。我也不知道到底用户对这个特性的需求有多强烈,只是感觉这太晚了点,如果早5~8年就有这个特性,也许情况会好一些。除此之外,增加了一些新的VCL控件,不过说实话官方VCL控件的个数多少其实影响并不是太大,好多第三方控件库,各种酷炫的控件都有。另外还有些其他的改进之处,比如对Delphi语言的修改,使其支持泛型、匿名方法等,还有IDE的增强。比较炫的是C++ Builder集成了UML建模工具,可以使代码和UML模型同步,来回在两边编辑,这个特性我比较感兴趣,一定程度上说,Borland系不愧是最会做开发工具的。  然而,我现在已经不用C++ Builder了,转用VC一年多,也只是工作需要,以后会慢慢转向那些开源免费的开发工具上去,或者自己做。现在或许只是因为身上有那么一丁点自己也不太愿意承认的Borland情结,关注一下最新的发展动态罢了。

最好的软件是自己写的

  想起一句老话,天下乌鸦一般黑。回头想想其实现在也挺好的,写写代码,拿点小钱,混个日子。于是突然又想起自以为很真理的一句话“最好的软件是自己写的”,客户为导向的策略告诉我们,最好的产品就是客户想要什么样的我们就做成什么样的,于是需求收集分析就是非常重要的环节,如何正确理解客户需求,满足客户无休止的要求,是我们制造业工人的头等大事。再回过来看,自己想用什么样的软件,当然自己最明白,所以省略了信息传递过程中信息损耗、变形的过程,最后可以得出前面提到的结论“最好的软件是自己写的”。