All Stories

又被培训了一下ruby

  今天又培训了一把ruby,再次让我感受了一遍ruby的强大,真是一个无所不包的魔幻型语言啊!  开始,老大先演示了一个分布式ruby包的应用,几行代码,就能实现一个服务器端组件,再几行代码,又实现了一个客户端,调用了服务器端的对象,其简便程度太让人吃惊了。这种应用很能吸引人,特别是可以做一些加密功能。但我想我还是不放心就这么去用它的,我很担心它的性能。反正WEBrick开的Gem server有内存泄漏问题,就一直让我对ruby做实际应用持有怀疑心理。在我看来,也许脚本语言的真的主要战场在字符串处理上,写个小程序也许可以应付,开发成本比起C++来确实低得多,但做稍微有点规模的应用,就还是让C++来吧。  而Lua这种,在我看来真的还是用来做为C++应用的扩展机制,描述一下插件逻辑,我想不出还有哪里能更适合它的,和还有哪个脚本语言比它更适合来做这个的了。  Ruby让我最不爽的是,对嵌入支持不好,《Programming Ruby》一书就提到,ruby不是设计成用来嵌入的。不过我在想,以我目前的需求,即使要嵌入,一个进程用一个解释器应该能满足需要了。看公司那个项目里,为了让嵌入的ruby解释器多做点事,就创建了一个又一个新的工程来嵌入,也是一种解决办法啊,哈哈。

进展缓慢

  再一次出乎自己的预料,太慢了!  不过通过单元测试,来保障代码的正确性,实在是一个非常不错的办法。我用的是CppUnit,写测试用例还是比较麻烦的,要在.h和.cpp两头写,每次都是复制其他的代码结构,据说CppUnitLite等等新生代的单元测试框架用起来要省事一些,不过我没用过,并且我现在很看重CppUnit能使用MFC的界面,也能输出XML格式的报告,而且还提供一个xslt文件,可以把报告格式转换成和JUnit类似的格式,这样CruiseControl就能直接合并到它的日志里。就是这些原因,使得我迟迟不愿意再花时间和精力去了解其他的框架,继续忍着那些小麻烦。  现在用起boost.bind和boost.lambda来,比以前熟练了不少,但还是只用到一点它的皮毛。前几天看到一篇blog,讲boost.function和boost.bind结合使用的威力,让我大吃一惊,原来boost可以这样用!就这么投入中去了,再好好学习巩固一下STL,学习一下算法,学习一下boost的应用。

彻底累了

  估计真的是体力透支了,影响到正常的工作了,提不起精神。  说起工作,一个小小的需求实现,也原来要涉及到这么多模块,真是郁闷,我的架构设计能力还是不行啊,继续努力学习啊!明天开始着手另外一个大需求的实现吧,三天,能做成什么样子呢?我早已没有之前估计工作量时的那么乐观了,过高地估计自己的能力,过低地估计了实现难度,唉!

自定义保存文件对话框

  早就想在保存文件时,能让用户顺便多输入点信息了,于是自定义保存文件对话框的需求就提上来了。在网上搜了一遍,各种方法倒是不少,不过都跟我想像中的有点区别,我想在MFC中做,就希望能尽量的简单方便。于是就搁下了,直到前天,在公司里想起这件事,问了问同事,同事给我一个例子,VC6写的工程,看了觉得很简单,但是回家自己弄还是不行。昨天又跟同事交流了一下,再加上晚上在网上找资料,结合着弄,终于成功了。  首先,添加一个对话框资源,加上需要的各种控件,最重要的是要加一个ID为stc32的控件,可以是Static,至于大小、位置,可以之后慢慢调整,以及对话框的风格要加上WS_CHILD。  然后,给该对话框添加类,基类就选CDialog好了,生成代码后,把基类从CDialog改为CFileDialog,尤其要注意,CFileDialog的构造函数需要更多的参数。  再之后,要给m_ofn成员初始化一下,先是dwFlags要有OFN_ENABLETEMPLATE,再lpTempate要指定到刚才活到的对话框资源。  最后,就是看情况,重载几个虚函数,比如OnFileNameOk,OnFileNameChange等等。  搞定!

搞定phpBB的NT域账号认证登录

  当时看到phpBB后台有选项可以选择认证方式,有三种,分别是DB、Apache和LDAP,我就觉得要糟,老大知道后肯定会要求用NT域账号方式认证登录。  果然昨天下班后,老大就发了邮件,说最晚下周要搞定这个问题。我郁闷啊,其实我早就开始想办法去寻找解决办法了,当时直接切换到LDAP认证时,提示说LDAP扩展没有安装,而用Apache认证方式时,说什么账号名要一致云云。  到网上找了很久,也没有发现有价值的内容,倒是sf.net上有个for phpBB 2.x版本的mod,可以使得支持LDAP认证,不过我装的是3.0.2,而且下载下来那个mod,我都根本不知道即使我装的是2.x版本的,怎么应用上去,所以此路不通。  不过看到Apache认证方式,再结合项目组用VisualSVN Server搭建的SVN服务器,给我一点思路。我是可以通过Apache来实现NT域账号认证的,再让phpBB来使用Apache的认证结果。虽然思路是有了,但实际上,我根本不懂Apache的配置文件要怎么写,看了半天它的手册,也不知所云,只知道它是有mod可以支持ldap认证的。最后实在没办法,抱着试试看的心情在公司网上发了个帖子询问,终于有个人回复了,问他要了点例子参考,果然OK了!  基本搞定phpBB的NT域账号认证登录问题!

项目从VSS迁移到SVN

  今天开会的时候,不知怎么的,提到源代码管理的问题,直接就扯到要把源代码从VSS迁移到SVN。这是我之前几次考虑过的事情,不过当时的想法是,既然是迁移,就要把所有历史记录都迁移过去,费了好大的劲,最终还是没成功。当时的问题是,vss2svn并没有转换成功,后来想想继续用VSS也并没有多大影响,于是还是继续用。今天老大就说,历史记录丢了就丢了吧,反正VSS还在,到时候实在有必要的时候,还是可以看的。这样一想,也就霍然开朗了。会后立马动手,从VSS上Get latest整个目录,然后import到SVN上,基本没费什么力气。而且趁此机会,把方案、设计文档、帮助手册、会议纪要也都传了上去。然后绑定redmine上的版本库记录,不过有点问题,据同事说,不但需要svn的客户端程序,还需要重启系统,光是重启redmine服务是不行的,我大汗!  

新版本实现新需求

  今天继续昨天的工作,要能给流程也添加关联的文档和子流程,当时评审需求的时候,我还以为没多少工作量的,这两天做起来才发现,大大地错了,要做的事还是很多的,不过幸好当时也是怀着一点小心思,多报了点。  首先,数据库处理模块需要增加相应的接口,因此COM组件也同样需要加一下封装。然后,核心业务处理模块需要封装数据库处理模块的接口。最后是界面响应增加入口,而且界面响应有三处需要增加入口的。  有了添加关联,同时也就需要查询和删除功能,都需要做不少事情。而之前的代码写得也略微复杂了点,现在增加代码时,发现有不少需要重构的。自从读了《重构》后,把这种活动看作理所当然的,不知假如我没读过该书,仍然遇到这样的事情,会怎么处理呢?  后来偶然看了一下版本计划,发现这些需求竟然不是要求最近这个版本实现,而是再下一个版本,这下我就怵了,宝贵的时间就这么消耗掉了。于是马上掉头做另一个需求,要能实现关联超链接。这时,又发现一个UCD的问题,关联时,弹出太多对话框了,版本历史上最多的时候有3个对话框需要用户进行交互,现在已经减少为2个,但还是不爽,应该在1个对话框里把所有这些都搞定,于是再次重构!  没完!

很流很水账,银湖后山

  昨天又跑出去玩了,玩得太high了,一直到后半夜1点多才回到家,对于不久前的我来说,这简直是太让人难以置信了,我不是应该是个宅男么,不是很不喜欢跟人出去high的吗!但事实就摆在眼前,我跟着一群不熟悉,甚至不认识,很多还是第一次见面的人一起出去玩,而且玩得那么晚!  早上像平时上班一样的时间起床,收拾了一下便出门了,先坐317,到了市二医院转58路到武警医院,太早了!当时上了317我就想,这次应该会提前很多时间,果然,317坐了15分钟,58路坐了10分钟,总共半小时不到就到了集合地点了。本该9点才是出发的时间,结果8点10分就到了。  爬山,仍是主题。这次爬山路线就比较隐秘了,那些路应该都是之前爬山的人走出来的,并不像莲花山、梧桐山、南山这种有专门修过的登山道,而且更陡!不过相比那次爬梅林后山,速度要慢一些,而且这次我为了防止重蹈上次梅林后山的复辙,背了双肩包,装了3瓶共1800ml的佳得乐,1包摩卡蛋糕,1包萨其玛,6个桔子,尽量最后没有用上多少。  我们在差不多山顶的地方进食中饭的,我其实没吃自己带的这些东西,倒是吃了别人的一些枣,挺甜的。有3个mm还带了盒饭,式样全都一样,太可爱了。无聊时,杀人游戏是个老少咸宜的活动,但是和不熟悉的人玩,而且玩的规则也不是我喜欢和熟悉的那种,让我捉襟见肘,屡屡失误。  众人都有些疲乏,便不再爬山,直接下了山,快到山脚时,进入了一片高级住宅区,别墅区,里面的保安还不让我们借道,我们只好从外边再绕出去,搞得另一边的保安们也很紧张!下来了,就是银湖公园了,那里没什么玩的,于是众人商量了很久,走走停停商量着,最后决定到八卦岭去吃饭,如果有玩的就顺便玩一下。  结果是到了八卦一路的一家叫大骨仔的店,离吃饭的时间还早点,就几个人打麻将,几个人打拖拉机,然后吃饭。吃饭倒没什么值得讲的,跟所有下馆子吃饭都一样,喝点酒,吹下牛。  吃完饭,人就先散伙了一批,有人说要去洗脚,哈,这是我很喜欢的一种放松方式,就留下,点一下人,刚好4男4女,不过形象真的不好,全身汗臭,背个大包,着装也不整洁。进了一家叫一方山水的店,装修倒是还可以,不过技师水平不怎么样,而且收得也贵点,38一个人,不过有茶和奶茶喝,成本也是这么高上去的。  洗完脚,叫淡蓝色的mm硬是要叫人再去KTV玩,特别是威逼利诱群主,哈哈,开始群主还是很强硬的样子要回家,最后还是经不住淡蓝色的软磨硬泡,于是8个人再赶到华强北欢唱100,同样,装修不过,包间里还带卫生间。几个人唱起了歌,我就跟淡蓝色几个人玩起骰子,不过我玩不过她,郁闷,开始单玩的时候还好点,有个更差的人垫底,后来分组玩的时候,就惨了,不停地输,不停地喝,喝得我撑死了。  大概high了3个小时吧,终于决定回去了,毕竟第二天还有些人要上班的,包括我。打车回家时,我身上的现金已经不剩下多少了,还好是与人拼的走的,可以不用付这全程的价钱,回到家,1:14!

再次放弃升级工程到VS2005

  本以为今天闲一点了,可以干点其他事了,于是琢磨着把工程从VS2003升级到VS2005。升级的事,之前一直有想,但一直由于这样那样的原因而放弃了。这次又动了这样的想法,一方面是因为VS2005上才有Refactor!,另一方面是换了高版本的dot后,dot本身就带有8.0版本的crt dll,所以想着如果把7.1版本的crt dll换掉,感觉会舒服一点。  先看了看最基本的ACE和XTP有VS2005编译出来的lib和dll,然后开始升级工程。这次学聪明了点,不停靠VS2005自己的升级功能,而是直接自己编辑.sln和.vcproj文件。基本上只要把版本号改了,就可以了。为了回退方便,我先复制了各个.sln和.vcproj文件,并改名,然后才改版本号。再用VS2005打开,编译链接。这个过程倒没出多少问题,2005和2003最大的几点区别是,2005中对字符串操作的函数作了扩展,其次是manifest的引入。这都没有引起多少麻烦的事,只略作修改就可以了。  最后却因为另外一个没想到过的问题而促使我放弃了升级:编译太慢!真是没想到啊,也不知道是本来VS2005的编译器就比较慢,还是说这个编译器在遇到某些情况就会性能降低,比如使用了大量模板等等。反正最后我忍无可忍了,rebuild一次,就要好久好久,2003下明显要快得多,没多少犹豫,决定还是继续使用VS2003吧,顺便庆幸了一下,Impeller幸亏不是用VS2005编译的,不然会多花多时间啊!