All Stories

《软件调试》

  从china-pub上买了本《软件调试》,厚达1000多页的大砖头。开始拿到的前面有8页是空白,到china-pub上去说了一下,该书的责任编辑通过email跟我协商,最后又快递了一本正常的过来,我再把有问题的那本快递给她,如此服务质量,也让人称心满意了。  难得原作者用中文写成,这样就可以让我们中文读者第一时间可以读到如此重量级如此深度的精品专著。  该书从CPU(Intel x86系)对软件调试的支持、操作系统(Windows)对软件调试的支持、编译器(MS VC)对软件调试的支持三大方面进行了讲述,中间结合VC、WinDbg等实例进行讲解。  昨天晚上躺在床上,快速地浏览了一遍,让我深深感叹Windows,噢不,应该是微软的强大。微软从操作系统到开发工具,都为软件调试支持了极其强劲而且方便的支持,窥斑见豹,微软做软件是多么认真,多么负责,微软帝国的崛起除了机遇外,其自身实力和不懈努力是起主要作用的。  翻完这本书,我禁不住想自己写一个应用层的调试器,像OllyDbg那样的。粗略想一下,一个调试器需要具有的最基本的功能:反汇编、CPU寄存器读写、内存读写、单步、断点,以及跟系统相关性比较大的装载模块、内存映射、符号信息读取。这些在Windows上绝大部分都有现成的API可以完成了,除了反汇编比较麻烦点(看看IDA Pro做成什么样了,当然动态调试器是不需要这么复杂的),其他的至少从原理上看,是很简单的,困难的是细节。  嗯,WIND Is Not Debuggger……

ACE还算好用

  照着红宝书上讲的,用ACE写了TCP的服务器端和客户端进行文件传输,代码量真的很少,而且可读性也很好,虽然没经过测试,但我自以为应该不会有多少问题了。  ACE还算好用,呵呵。既然这样,以后就考虑一直用ACE来做这方面的应用了,又能满足我跨平台的需求。  另外,我还是想建一个图形库,像visio/rose那样的功能,也许功能没有那么强大,但是效果就是朝那个方向发展。

引入ACE

  经过小小的思想斗争,最后我终于决定引入ACE,这个颇具盛名的跨平台网络库。犹豫是因为2个原因,一是我本来没有使用ACE的经验,如果在使用过程中遇到问题也没有求助途径,另一是以前在网上看到过有人说ACE跟MFC配合使用时会有内存泄漏的问题。  但是想了想,如果直接使用socket来写的话,开发效率更低,需要编写的代码更多,更容易出错。之前也是用了boost::asio,大概是因为没用好,反正不但代码写得难看,也没有能照预料中的那样正常工作。  同事在一个小程序中使用了ACE,虽然他用的是WTL,却仍然无形中给了我一种鼓舞,最终我还是决定用吧,泄漏就泄漏吧,反正只是个小程序,不会像服务器那样长时间运行的。稍微熟悉了一下reactor的使用方法,还算容易理解。它通过类继承,虚函数覆盖的方式来响应特定的事件。相比boost::asio使用functor回调的机制,更OO一点,而对于我来说,boost::asio可能多了需要对各种对象进行管理的工作。  争取在剩下的两天里,完成点对点文件传输的功能!

期待一个合法的强大的IDE

  虽然打算使用MinGW+wxWidgets来写程序,似乎是可以抛弃VC+MFC或者BCB+VCL这类商业软件了,但是,实际上我发现我根本离不了VC,主要是离不了VAX,这个超级好用超级变态强悍的VC助手。  早先的时候,只用到VAX的智能联想提示功能和跳转到定义或声明的功能,自从看了Martin Fowler的《重构》,VAX的诸多重构功能也成了我目前最常用的功能,日常工作写代码,离了它简直痛不欲生。  写代码最好用的是VC+VAX,但看代码最好用的,个人感觉还是Source Insight这个虽然不思进取,但基础确实不错的东西。Source Insight也可以用来编辑代码,不过比起VC+VAX来还是弱太多了,而且它也是要买license的,最关键的一点易用性方面不足是,多少个版本推出来,还是不支持标签页浏览,真是不可理喻,而且对中文的支持也是一直都没任何改进。  所以最好的工具是能集VC+VAX代码编辑功能和Source Insight代码浏览功能于一身的。但是目前还没有找到能达到这种效果的软件,从免费到商业的,都没有。回到最开始提出来的,要用MinGW+wxWidgets来做开发,还是比较困难的,比较折中一点的办法是,先在VC里做debug版进行开发和调试,定期用MinGW生成release版本进行测试,先打造一个好用的CppCoding工具。

九选三,pass!

  周五的时候才知道,原来我报的是6月30日的考试,一直都以为是7月10日的,所以一直都不怎么着急,还觉得练车次数太频繁,殊不知是30日。周六吃过中饭,正在睡午觉,教练还打电话叫我下午去练一下车,我说不行,要5点半才下班,然后拖到周日上午。今天又是6点半就起了床,匆匆赶到训练场,跟江江一起练了一个半小时,单边桥的我老是右边上不去,教练说不要紧。  说好11点集合,还有2个小时空闲,于是无所事事地到百草园去,江江趁这个空隙跑去体检了,我就只好无聊地看看网页,偶然发现blogger又解封了,像是重刑犯放风一样。到10点半的时候去百草园对面吃了一碗炸酱面,太多油,腻死我了。刚好11点,教练简单讲了一下考试时的注意事项,然后把我们带到接送车的地方。  12点半不到就到车管所了,一直到大约2点半的时候才轮到我们考,当时我还多紧张的,可是抽到的是3道,除了定点停车和侧方位停车外,另一项是所有项目中最简单的直角转弯,真是太幸运了。一上去就忘了起步打左转向灯,心里顿时瓦凉瓦凉的。好在后面的都冷静沉着地正常发挥,不但是我,连电脑也是,一点意外都没有,一次就pass了,心中那块石头放下来了。  九选三,pass!

如何利用机器资源

  今天突然发现,我在公司里有使用权的机器有好几台了,除了本来一直在用的,从进部门开始就配备的那台联想台式机外,还有一台2001年的老爷机,一台双核2G内存的工作站,一台双核双至强1G内存的IBM服务器,还有一台双核2G内存的服务器。这么多可用资源,现在却发挥不出作用,对工作没有什么帮助,实在让人觉得可惜。  但是如何利用这些机器资源呢?我确实也想不出好的点子来。可以建些版本控制、数据库、HTTP之类的服务,但还是大材小用。隐隐约约脑中一个概念闪现——分布式计算!可是现在分布式计算能大众化实用化的也没怎么看到了解到,曾经用过一个号称可以加快编译速度的利用VC的分布式编译工具,但当时试用的效果并不好,四五个机器一些联合编译,最后不但编译出来的文件有问题,耗时也比单机编译的多,真让人失望。  继续想、继续想,如何利用这些机器资源呢?

Side by Side Again

  昨天随口给一个同事讲了一下怎么部署用VC2005生成的应用程序,才能解决因为先进的Side by Side技术引起的应用程序配置问题。其实我自己也是半生不熟,没有掌握到真正的精髓。今天那个同事就给我打电话,说还是没有解决这个问题。于是我就亲自出马,上午搞了半个小时,还是没搞定。于是看我原来用VC2008写的WallpaperHelper怎么弄的,以及人家的Edraw是怎么弄的。一点一点凑,最后发现那个么临界点,只要先到VC安装目录下有个redist目录,里面能找到发布用的dll和配套的manifest文件,复制出来,然后把manifest中的内容复制出来,自己填写一个新的manifest文件,作为RT_MANIFEST类型添加到exe的资源中,这样就基本解决了。而且从中看到,manifest中的版本号可能比dll的实际版本号要低,但是没关系,反而如果自己强行把manifest中的版本号改了,程序反而不能正常运行,反正照着redist目录里的那样填就行了。

升级到Firefox3

  话说本来6月17日就是FF3发布的日子,不过由于时差等因素,昨天一直没等到它的发布,于是只好等到今天。回到家迫不及待地下载安装,然后把需要的扩展也跟着升级,对于一些没有对应版本的扩展,只好再上mozilla的网站找替代器,忙乎了一阵子。  媒体传闻得沸沸扬扬,说得悬乎神技地,但我用了一个多小时后,感觉也没多少值得表扬的。比较明显的改进是,内存占用确实比以前小了,可能只有原来的2/3或1/2吧。另外一个比较明显的修改是所谓的Awesome bar,就那花里糊哨的地址栏,也许是我还没用出来吧,反正觉得原来FF2里的也没有不好用到哪里去,这个也没有方便到哪里去,所以这个特性算不算得上是改进,我保留意见。再有,就是启动速度似乎是比FF2快了一点,不过对于我这样已经习惯于龟速电脑的人来说,吸引力也不是特别大。  倒是一些原本在FF2里用得好好的扩展,到FF3里不能用了,这让我觉得很郁闷,比如Tab Mix,还有能将网页保存成mht格式的Mozilla Archive Format,都找不到够格的替代品。还有,号称的15000项改进在哪里,仅仅是我这一个半小时的使用,就崩溃了2、3次,这个品质不行啊!  好了,牢骚发完了,要不是因为不想用IE,要不是看中它扩展多,升级方便,我才不这么啰嗦哩。

专心做一体化平台了

  看了他们整理了有十几条新的需求,另外bug也确实不少,跑去请示了一下老大的意见,是要认真到这个东西做下去喽。既然这样,就暂时放下编辑器和扩展框架的事了,计划一下如何把这个东东做好点。原来的有些设计是不合理的,在时间充裕的条件下,是肯定有更好的解决方案可以替代的。  如果真要专心做这个东西,有两点是可以很大优化的。一个是图形库,整出一个像edraw样效果出来,让该死的Excel见鬼去吧。另一个是分布式文件共享,看了Kademlia的一些介绍,不禁有点蠢蠢欲动,如果自己能实现一个通用性好的,后续的价值太大了。  这两块是相对较大的改动,其中还会涉及到数据库的设计等小细节,想起来居然隐隐有点儿兴奋。