All Stories

C++ Builder with Boost 1.35.0

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

代号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情结,关注一下最新的发展动态罢了。

最好的软件是自己写的

最好的软件是自己写的

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

收到Intel寄来的书了

收到Intel寄来的书了

  几天前突然想起Intel似乎是在网上可以直接申请指令手册的,大学的时候就申请过,不过都没看直接在毕业离校看给一个老乡师弟了。现在想起来可能会搞点跟汇编、CPU、指令集相关的东东,所以又想弄一套来。  先在Intel的网站上找了一下,没找到相关的链接,于是google一下,还真能搜出来,以前可以直接在网站上填张表格就申请好了,现在是只能发邮件。于是照着示例写了个邮件,马上就有一封回信了,大致意思说是申请已经提交了,等fedex寄出后,还会发个邮件。结果等了好几天都没什么邮件,还以为中途出问题了。又等了几天,收到一个邮件说7月7日就已经寄出了,但我去fedex的网站上却查询不到。  今天公司里,收到一封邮件,说我有快递,我猜也就只可能是这书了,跑去投递中心一看,果然是,好大一箱,比上次的还大,有点儿重。回家拆开看看,每本都是厚厚的,但重量却比想像的要轻不少,都是一棵棵的大树啊!  估计我还是不会怎么去看的吧!

钱就是这样花掉的

钱就是这样花掉的

  平常经常抱怨,怎么也不见买什么东西了,怎么工作几年了还是没攒下钱来,真是太奇怪了。其实仔细算算,每笔钱的去向都是有据可查的,只不过我没有记账的习惯,更谈不上理财了,因此就有了所谓“你不理财,财不理你”的可悲下场。  今天又跑去华强北一趟,已经计划很久了要去买些平常穿的衣服和鞋子。照例没吃早饭,结果看小说看到连中饭的时间也过了,后来实在心里记挂得厉害,就随便收拾了一下便坐车到了华强北。  先跑去KFC里,吃掉¥36.5。  然后去红利多看键盘,家里那套微软的无线套装,键盘用得很不舒服,现在天热了,手放在本本上也觉得烫,所以也筹划了几个星期了想换个好点的外接键盘。红利多也没有多少可选择的余地,当初我曾还想过去万商那些小铺子里买个二三十的就行了,结果同事说还是得买个好点的像微软、罗技的,说实话,有了之前的经验教训,短期内我是不会再买微软的了,感觉性价比太低,而罗技的,从大学起,就一直没多少好感,尽管这牌子的键盘鼠标确实做得挺火的。最后选了个LaVIEW,以前没用过,因为我其实只买过3次键盘,第一次是装第一台电脑时一起配的,大概就是30块钱的,不记得什么牌子了一直用得挺好的,直到大四时电脑搬回家,因为想减轻点分量,就把键盘丢下了,到了老家又买了个新的USB接口的,现在也不记得什么牌子了,因为本来就很少回家,所以用得少,印象极其不深刻,也不记得多少钱了,应该也不会超过100块吧,再后来就是在这里给本本买的微软无线套装了,除了无线这个看起来牛B哄哄的特性外,实在找不出它其他的优点了。今天买键盘,主要看手感和外观两方面,最后以129块的价格买了一个超薄的,手感跟本本键盘类似。  买了键盘就去茂业买衣服。先到adidas买鞋,我也算是龙浩的比较忠实的客户了,每次买鞋首先想到的就是ad、puma之类的。随便挑了双很轻看起来很透气的运动鞋,打了8折还要576块。接着去买衣服,去杰克琼斯看看,好多人,因为在打5折,于是买了件T恤,也要124.5元。  采购完毕,回家,看看也很不起眼的几样东西,除掉路费不算,今天下午就是860多花出去了。钱就是这样花掉的!

郁闷,成质量部的人了

郁闷,成质量部的人了

  睡得少,白天果然很吃力,这是已经亲身验证过无数遍了。  本来想着是上午给个新的编译版本让他们测试一下,结果发现,一个最最最基本的功能都不能用,直接弹出消息框。其实是COM接口抛了个异常,虽然我没有用try...catch来处理,但最后还是被我挂接的未处理异常过滤函数捕获到了,弹出个没有内容的消息框。  于是下午调了近2个小时来定位哪里出的错,因为我自己的电脑上无论怎么样都是正常的,而别人的电脑上无论怎么样都是不正常的。猜了几次,最后想到一个地方,Excel中的CShapes::SelectAll方法,不知道哪里吃错药了,只要一调用该方法,它就抛个异常出来,倒是可以用try...catch捕获到,但却没有什么实际意义,因为我不知道这为什么错了,我以为这就是最正确的用法。  冥思苦想了1个小时,毫无进展,于是上楼去找老大诉苦,我当然不会指望老大知道怎么解决这个问题,而只是想让老大知道我很郁闷很痛苦。  再回到座位上,照老大说的,把自己的进展,遇到的困难写邮件抄送给所有相关人,这样至少让他们自己我还是在干活的。一直到下班的时间,质量部负责这事的人跑来跟我说,这二三四季度的绩效考评放到质量部来做了,我彻底郁闷了,成质量部的人了!不要逼我啊!

crash report

crash report

  以前对这方面没有多少关注,只是偶然看到LuaEdit用了个叫madExcept的库,可以让Delphi程序在运行时如果崩溃了弹出个看起来比较牛的对话框,显示一些当前进程和当前系统的相关信息,并可以让用户选择是否将这份报告通过email发送回开发者。当时很好奇这是怎么做到的,很希望在自己的程序中也集成进这个功能,但很遗憾地发现,这个库只适用于Delphi,而我偏偏就不是用Delphi的。  后来,偶然,没错,以是偶然,看到公司网上有人说FileZilla有一部分这种代码,于是找来看了看,才大致了解了基本原理,并直接把这段代码抠出来用在了项目中,但到目前为了,这个功能虽然加进去了,却还没有发挥实际的功用。因为这段代码针对使用VC编译的程序会生成一个dump文件,该文件需要配合编译时的源代码以及编译器生成的pdb文件协同工作才会有实际用途,而我们的项目没有一个良好的机制把各个发布版本配套的源代码和pdb文件归档。  这些天看了《软件调试》,稍微了解了Windows的错误报告机制,觉得这是一种能很好改善用户体验,帮助开发团队改进软件的方法。  前段时间读Code::Blocks和CodeLite的源代码时,发现在Windows平台下编译时它们都动态装入了一个叫exchndl.dll的动态链接库,却只是装入,没做其他任何事情。根据代码注释中的只言片语,加上后来去down了Dr.mingw的源代码,发现这个dll就是做了捕获未处理异常,生成报告的工作。  于是,我就有了现在这个想法,也许这个想法就是微软的错误报告机制的简装版。首先,确定这套机制由三大部件协同完成:1、未处理异常捕获;2、反馈崩溃信息;3、分析处理崩溃信息。在具体实现时,可按这三部分分别处理,未处理异常捕获,就像exchndl.dll一样,只需要提供一个dll,应用程序只需要装入后,什么也不用管了;反馈崩溃信息,可以另外再写个客户端,将报告信息(文件)传送给服务器端;分析处理崩溃信息,也就放在服务器端了,可以自动作些简单的分析(像WinDBG那样的,配合对应的源代码和pdb,可以找到引起崩溃的代码行),根据这代码行,可以给用户显示个html页面,说明一下崩溃原因等等,当然这需要一定的人工介入,而且也是三部分中最复杂的。这些工作都可以通过微软提供的技术来实现,但还是有不小的工作量,比如像WinDBG那样结合pdb和源代码分析dump文件,这都是调试器的一部分功能了,另外再显示html页面,肯定是需要有先例通过人工编制一个页面。  而且这套机制似乎有个最大的不足,是只适用于VC编译的程序。也许其他的编译套件(Borland、DigitalMars、OpenWatcom、Intel……)也提供了类似的机制,但可能没有VC的完善,不需要人工分析即可定位到源代码行,这是何等方便啊!