All Stories

不再用回C++Builder了

  相比MFC,我果然还是更熟悉VCL的使用。不过我不想再用回C++Builder了,我要用VC,就冲着Boost库对于VC的编译器的极佳的支持。今天又写了一点点代码,要把asio的库都好好体验一把了,UDP、TCP都要有,Client、Server也全都有。现在还吊死在C++上,只是因为我确实还不怎么会用其它的语言,在项目进度的压力下,我不敢贸然地尝试完全不同的概念和思维方式。今天只是稍微做了一点html页面生成的部分,还有很多要做,尤其是要能做成带不同的链接地址的,唉,走一步算一步了,问题总有解决的一天,先把最有把握的部分解决掉。后半个月看来是要晚上加几天班了,呼呼,原来那个项目还有一些遗留问题也要解决,真是郁闷。上午突然想起来,我那东东得有一个自动升级功能,想了好一会儿,构思着再加一个updater.exe,每次系统启动的时候运行一下,把该升级的都升级了,后来突然又想到,干吗不把这个功能作为客户端程序中的一个模块呢,不需要单独的一个project了。  还有就是,我还是想做一个流程文件编辑器的,因为用Excel也真的太傻了。但是今天粗略地想了想,这个编辑器其实还是有点复杂的,要求比较灵活呢!其实如果是用VCL来做的话,我觉得应该几乎没多少障碍,可是现在可能是MFC,或者其它的,很多事情我都不知道怎么实现。

越来越复杂了

  今天去讨论了一下,居然提出可能要做个流程文件编辑器,彻底晕倒!其实这一点我应该早就预见到的,而今天他们说用Excel来让用户自己编辑,你说如果只是一两个人来编辑一下倒也就忍了算了,我自己也可能会省事儿点,但是现在要求是可能每个人都会改一下,让每个人来改那Excel里面,自己对应前趋后向的关系,还要不出错,不是逼他们发疯吗!唉,估计我这套东东弄出来后,没几个人愿意用,太无聊了!不如我赶紧在里面加入些新奇有趣的特性进去,不过有人敢玩吗,呵呵。  晚上回来上网,看了看Linus那段对C++的放炮闹得好惨烈。呵呵,如果不考虑库的因素,我个人也是更习惯用C的,现在这个项目一边用MFC做框架和界面,另一边用Boost做业务逻辑,两种截然不同的风格,不知道以后我这代码的维护者看到后会是什么样的心情,嘿嘿。

小作坊使用开源软件协助软件开发

  这是一个总结,也是一个开端。所谓总结,即是到现在我已经发现并已尝试使用过这些东西,现在整理一下,罗列出来。所谓开端,即是从现在开始,我要好好使用这些东西,应用到实际中去,提高效率或减轻负担。  小作坊,适合于个人单干,或小型几人十几人的团队,如果对于大型的团队,我觉得我们公司那套其实挺不错的,毕竟人家花了我也不知道多少钱从IBM引进来的。所以小作坊有一点很明显的区别是,资源很有限,从硬件到软件,从资金到人力,都是很匮乏的。这里罗列出来的东东,全部都是开源的,而且是相对比较成熟的,就是为了应对上面提到的小作坊的各种可能面临的困难和不足。另外还要提到的是,这里讲的是“协助”软件开发,其实是针对整个软件开发周期中各阶段的活动,而不是单纯的在编码调试阶段的活动。最后一点,这是面向Windows环境下使用VC/Delphi等桌面应用开发人员的方案。1、建模——StarUML这个东东据说是个韩国人开发的,用Delphi写成,功能也许没有Rational Rose那么强悍霸道,但用来画个UML图、序列图什么的,已经足够了,而且安装包才20MB左右,快速轻巧。想想Rose需要多少钱,其实我也不知道,嘿嘿!2、版本控制——TortoiseSVN当然用SVN,传说中CVS的替代者,而Tortoise这个shell扩展真的方面。在Windows下用SVN如果不用命令行,就用它了,没啥好说的。不过说实话,VSS也不错,尤其是2005版文件传输效率较6.0提高了不少,而且和VC的IDE集成得很好。所以见仁见智了,对于不用VS工具的,就强烈推荐这个东东了。在单机上可以直接找个文件夹作为仓库就可以直接使用。3、项目管理——Open Workbench项目管理?我用得上吗,我自己也怀疑。但它号称可以和MS的Project匹敌,本来是一个公司开发的,后来捐献给开源社区,貌似他们也比较有钱的说,安装包还是用InstallShield做的。我大概最多也就是用来作作日程安排而已吧。4、持续集成——Cruise Control不用多说了,就用Cruise Control了,刚刚才学会,其实也没咋学,就是把同事那个脚本抄来改了改,真的挺好用挺喜欢的,现在最新版已经是2.7.1了,拿2.5上可用的脚本直接就能正常使用,而且比起2.5来,还少了乱码问题。5、Bug跟踪——MantisBug跟踪系统好像很多,商业的、开源的都有,比如FrogCreek,BugZilla、BugFree等等,选择Mantis只是因为我已经有点习惯它了,主页上有打包好的,直接运行一个批处理文件就能正常工作,特别提醒一下,要把config_default_inc.php和config_inc.php里的SMTP配置都改好,然后默认的账号administrator和它的密码root,这个我颇花了点时间去搞,开始没看明白帮助,晕!6、开发文档编写——doxygen也就是在写代码的时候插入一些规定格式的注释,然后运行一把doxygen,就能从中提取出内容生成多种格式的文档。不过似乎好像,我自己很少写注释的说,只有开源的项目才这样做得比较多。7、用户帮助文档编写——CTeX也没啥好多说的,用户帮助文档Windows上以chm/html格式的最为流行,很多大型软件公司的产品都会配上PDF格式的manual。如果想生成PDF格式的帮助文档,就用CTeX吧,这个东东还真的不错,相比Word来,完全相反的两种思想和作法。Word一开始会觉得上手很容易,所见即所得,但是内容格式一多,再进行修改什么的就很容易乱,而TeX则相反,一开始觉得很麻烦,所想即所得,但是一旦初稿已经形成,再进行修改什么的,就不容易乱了,呵呵。8、安装程序制作——Inno Setup以前用过Wise,感觉还不错,不过人家是商业软件。后来找到了Inno Setup,就喜欢上了。它用Pascal的脚本,可以调用Windows的API,可以完成很多高级的任务。其它还有NSIS之类的也应该不错,但没用过,暂不考虑了,而InstallShield一方面是商业软件,另一方面好像显得有点杀鸡用牛刀的感觉,嘿嘿。  就是这些了。

生活真他妈的无聊啊

  其实是因为人太懒,要做的事情很多,我却宁可无聊地消磨时间!  明天打算去看一下相机,要是价钱合适就买个。

持续集成

  今天突然想起来,要一个同事教我怎么冒烟。项目组里用的是CruiseControl这个持续集成框架,通过编写xml格式的脚本,可以让它自动从版本控制系统里获取最新的代码,自动编译,自动打包,最后进行发布。同事大致给我讲了一个需要进行修改的三个xml配置文件的用途及里面一些元素的使用方法,然后我就开始在自己的电脑上进行实验,开始遇到一点困难,怎么都弄不好。先是要用它来启一个Web服务器,好像自带的是apache,因为要用JSP,还要用ANT,所以还得装JDK,装好JDK却不知道还得在环境变量里添加一个JAVA_HOME设到JDK的目录去,所以总是连网页都显示不出来,后来在同事的指点下,设好环境变量,页面终于出来了。不过取代码、编译、发布的过程总是失败,最后发现,好像是首先,指定的路径不能再空格,即使是使用8.3格式也不行,然后,得小心地设置各个源代码、工程等的存放路径,这样才能继续,保证编译时能取到正确的工程文件。其实到后来才了解到本质,就是一堆命令行的集合,只不过有些常用的功能它提供更方便的命令来执行,比如文件操作、版本控制管理系统操作等等。  现在,我给自己也建了个本地的CruiseControl,可以每天冒烟了,哈哈,这有一个好处,每天可以自己设定一个时间,然后让它自己运行,编译完后执行安装程序的脚本,制作好安装包,再压缩打包,最后就是一个完整的程序包。  仔细想想,转项目部后的近半年,还是学了一些有用的东西。比如除了这个外,还有MFC编程,至少现在能用MFC+Codejock的库写些简单的程序了,使得我现在几乎完全放弃使用C++Builder/Delphi了。对COM编程也有了很肤浅的了解,对Scintilla的使用方法的了解……等等等等,说不定对我以后都有帮助。  现在要做的一体化平台已经决定用Boost了,老大应该也不会太反对了,因为我的方案已经基本确定,Demo都给他看过了,现在可以好好使劲用一把Boost中的一堆堆让人眼花缭乱的模板了,哈哈哈哈,真是开心!

长吐一口气

  今天老大来跟我讨论那东东的设计方案,居然说要用PHP/ASP之类的东西做个网站,把我郁闷了一把,不过好在我最后发现用这样的设计是无法比较方便地实现P2P文件传输的,最后老大只好同意照我的想法来实现了,真是有点庆幸,不然我就要郁闷了!不知道为什么他那么喜欢Web的东西,而不知道为什么我那么不喜欢Web的东西!而且那帮人真的是COM/DCOM技术的狂热爱好者,只要搭得上边的都想用这个来做,真是晕倒,而恰恰我是一点都不感冒,如果有可替代的其它技术,我就宁可不用的。有些地方不用COM实在没有其它方便的方法了,也就没办法了,比如Shell扩展之类的。  除了把设计方案讨论了一下,今天都没怎么做,还在担心那个流程图怎么画,昨天后来想了想,光是Graphviz还是不够的,Graphviz只是根据依赖关系自动给出图形,但具体的节点处于什么位置,却好像没有提到。  另外,又学到一个东西,在HTML页面中表单内容通过URL传递时,像中文之类的非标准ASCII字符,会先经过编码,以ASCII可见的方式传递,开始我看asio那个例子里面的代码,只是简单的转换,后来我把Google桌面搜索的页面改了一下,发现就变了,最后发现人家是用UTF-8编码来转换的,经过反复的试验,最后得出结论,IE打开的HTML页面如果是UTF-8保存的,就会把表单传递的内容也以UTF-8格式转换,如果以ANSI格式保存的,则也以ANSI格式转换。如果要从UTF-8转到ANSI,可以用Win32 API MultiByteToWideChar先把UTF-8转成UNICODE的,再用WideCharToMultiByte转换回ANSI就可以了。

今天写了点代码

  我等不下去了,今天先自己写了点代码,把asio那个http server的代码copy过来用了用,效果很不错啊,哈哈,仰天狂笑三声先!  现在是很确信这个东东的最大难点是流程图的自动构成,再生成带有热点链接的html页面。跟老大稍微讨论了一下,他提到我们可以让用户自己填一个规定格式的表格,我们再从表格中生成流程图。这确实也是一种解决问题的思路,而且让我突然感觉眼前一亮,似乎这个问题也不再是不能解决的了。老大提到可以用VML这样的东东,我没听说过,不过却知道有Graphviz这个东东,似乎可以解决我这个问题。  看起来业务逻辑相对是一个很简单的任务了,但如果确定要用Graphviz的话,还得学习一下它的dot语言,虽然我可能最后只用到它很小一个功能子集。时间只有3个月,11月底就要有可用的版本来试点,可能会有点紧哦。抓紧时间,争取快点把那些不是很困难的部分早点完成,然后来攻关这个流程图生成、html页面生成问题。  晚上afei打电话来慰问了一下,应该是xcc跟她说了我的事。然后谈了一会儿关于工作的事情,心里又舒畅了不少,等这个项目完成了,如果没有什么大意外的话,我一定要走了。

asio真是牛x啊

  今天开始搞新项目了,这个项目需求好久好久前就出来了,一直拖着,大概的设计思路我也已经有了,但从工作的角度讲,今天才是真正的开始,从需求分析开始。其实我觉得需求已经比较明确了,只是那些人到时候估计会不停地改口,这是很让人郁闷和气愤的,但也是不可避免的。  鉴于打算用类似Google桌面搜索那样的界面技术,所以得先研究下本地建一个http服务器有困难,看了看asio的例子程序,估计所有代码加起来不到100KB吧,但确实已经是一个可用的http服务器了,我都用bjam编译运行过来,效果很让我欣喜若狂,本来这样的只是为了本地建一个给本机用的服务器,足够了啊!所以不禁要感叹一下,asio真是牛x啊!  老大一直很担心到时候拿不出东西来,总是叫我好好讨论一下需求。我自己的想法,这个东西要是把所有支撑模块都做好了,业务逻辑其实是很简单的一块,随便怎么改都行,应该很灵活,即使到时候发现他们的要求变了,我应该也能快速作出响应。  中午没睡着,下午就虚了,晚上就又累又困了。

睡不着

  梦中无数次出现她那羞羞答答用手压着嘴唇跟我说的情景。我使劲儿安慰自己。这是第一天,这样的日子还会有多少。