All Stories

软件开发所需的工具

软件开发所需的工具

  今天断断续续写了几行代码,再次感叹,在这VS中配合VAX写代码给人那种酣畅淋漓的感觉,任何其他地方都是体会不到了。网上有不少人不少文章在说,使用IDE有很多坏处,让人不知道背后的机制原理云云,对于此种言论,我很不屑。不是说,懒惰是程序员的美德吗,既然有工具能帮人完成一部分工作,为什么不放手,而去追求那虚无缥缈的所谓“高手”的虚名。  从csdn上看到新闻谈及VS的下个版本,这MS的动作也太快了点吧,VS 2008才出来不到一年呢,CodeGear真的彻底完蛋了!再没有哪家公司能像以前的Borland那样生产IDE,跟MS抗衡了。  今天写代码时,发现需要记录一些想法,或者是计划,但我找不到合适好用的工具。之前也看到一个群组里有人开话题讨论用什么来记录想法,有人提到evernote,这个工具我也看过,是个共享软件,而且对中文的支持不行,仅这两个问题让我就望而却步了。之后再也没有其他的类似的好工具了,平时如果只是为了记录下问题、需求这种跟软件开发强相关的信息,我倒是搭建了一个Redmine服务器,它也有一点项目管理的功能,但还是太弱。在公司里,流行的做法是用MS Project来做项目管理,用Excel来记录需求,用notes上的CMM库来记录问题,不过我因为所在部门的不规范性,所以更自由一点,或者说其实是没有机会使用那么高级的东西,只好还是在redmine中折腾。  寻找好用的全流程软件生命周期管理工具!

爬梅林后山

爬梅林后山

  今天是我第一次出去参加这种社会性质的户外运动团活动,吃了没经验的亏,当时没有准确估计行程,只买了一瓶脉动便跟人上山了。当时也是不了解,单纯地以为只要走个十几二十分钟路就可以了,谁知是足足4个小时,从上午10点开始,一直到下午2点,可怜我连早饭都没吃,到12点多时,那瓶水就喝完了,然后就又饿又渴又累地翻山越岭,又不好意思开口向别人要水,毕竟是不熟悉的人啊,忍了近2个小时!  到下午2点过一点点的时候,终于到了吃饭的地方,最急着解决的事便是解渴,跑到自来水笼头那里,估摸着那水是山水,确实没有那种自来水出来的消毒水味道,大口喝了好多,还是不解渴,又买了2罐百事,没办法,没有其他适合的饮料。  那些菜的味道倒真是不错,那汤也好喝,就是量不多,也过钱也不多才一人给了25块钱。到下午4点的时候就出发返回,这次走的路就没有之前那么困难了,都是平缓的石板路,跟着几个人一边走一边聊,还没觉得不适,前面那段路上我都没怎么说话,连拍照都只是照了几张风景,返回的时候倒是拍了些人物的。  我还是内向了点,不知道怎么能挑起话题,唉!

努力写好代码

努力写好代码

  前几天偶然lint了一把我在做的项目的源代码,结果发现近千个error。这让我比较困惑,大致看了一下,有不少是我并不期望它进行检查的,但又不能简单地把这类检查项屏蔽掉,所有就不知道怎么办了,lint应该是有意义的,但具体要怎么做,做到什么程度,我就完全没有头绪了,如果仅仅是为了减少错误项的输出而屏蔽检查项,那就失去lint的意义了。  我还是比较努力地希望自己能尽量写出一些优雅少错的代码的,也尝试在实际工作中使用一些方法和理念。今天在公司定位崩溃报告模块的问题,最后发现读取PE文件版本信息就有问题,但本来出于该模块的特殊性,很难直接在IDE里调试该模块,经过一些时间的折腾后,给取PE文件版本信息的类写了个单元测试,用CppUnit来跑,就算被测代码逻辑有问题,调试起来也方便多了!于是我又想到,这单元测试还真是个好东西,为什么我(们)就是不愿意做呢?我想主要原因还是在于,对TDD对项目进度的影响仍然没有足够的信心。另外再扯远点,我有点不想用CppUnit了,总感觉有点麻烦,现在这类框架倒也不少,google、Boost都有单元测试框架,其他还有什么UnitTest++、CppUnitLite等等,可选择的范围倒是不小,但我有一个顾虑是,这些框架输出的报告能不能像CppUnit那样跟CruiseControl日志合并呢!  另外再说说重构。我现在倒也确实有这样的倾向了,不断地在重构和实现功能这两个角色之间来回切换,也很习惯这种工作方式。看这个项目的代码,虽然没有翻天覆地的变化,但确实也有不少的改变,而且代码量也比最高峰时期少了20000行左右,这个比例不小啊,1/4多。不过我还是很明显感觉自己在重构这方面有待提高,首先是缺少理论方面的学习,然后再来考虑怎么应用到实际的编码中去。真的要抽时间好好读一读书架上那几本书了!

Office2007的改进之处?

Office2007的改进之处?

  今天突然想到,之前遇到的两个操作Excel的问题,该不会是在2007里对2003版本的修正吧!  最早使用COM操作Excel2003出现的问题是,在我的电脑上,打不开Excel文件,硬是说没有正确的序列号,我分特,公司花了那么大一笔钱买了license的!想了一些办法,仍然没有解决,为了不影响进度,忍痛在512MB内存的机器上装了个2007版的Office,但是奇怪的是,如果直接运行Excel 2003 SP2,编译文件什么的,都是好好的。  第二个问题是,突然一夜之间,所有的使用Excel 2003的机器上,都不能对图形全选操作了,用鼠标是可以选择的,但如果通过代码来SelectAll则必定异常,无论是在VBA中,还是通过COM接口操作,屡试不爽!很无语的是,当时定位了好久,也因为只有我自己的开发机上是用的Excel 2007,根本暴不出这个问题,最后找到出错处后,仍然束手无策,一狠心,再也不copy图片了,而是提取出各个图形节点的位置信息,自己用GDI一个一个画出来,同时带来很严重的失真现象。自己画的线条没有抗锯齿,没能好好计划节点内的文字大小和位置,没能按照连接线的原始图样进行绘制,不过总算也勉强能蒙混过关。  第三个问题是,发现解析所有图形节点时,发现多了一两条不可见的line,但是同样一个文件拿到我的机器上,通过Excel 2007的接口解析,却没有这两条line,瀑布汗!所以图形在我的机器上显示的好好的,到了别人的机器上就多出一个虚线矩形框和一个实线矩形框,只好额外写几句来特殊处理一下!  我猜,第二个问题和第三个问题,会不会是由同一个原因引起的,会不会是由于2003和2007版本之间的一点不兼容性引起的,2003创建的文件被2007编辑过后,再拿到2003上去就会有点表现不正常?还是说本来就是2003就有问题了,只不过2007上有了改进?

抛异常实现多级信息传递

抛异常实现多级信息传递

  从没用过C++的异常,都是看到别的代码抛出异常来,我自己的代码里try...catch(...),甚至从来不知道catch里到底是要什么类型的。  这次有这样一个需求,在一个比较深的调用层次的地方,不但要返回成功过失败,如果失败了,还希望能得到原因。其实这个需求之前就有了,但当时没有放在心上,觉得不做也不要紧,而且当时的想法是像Windows API那个,设置一个全局的值,即Error Code,任何操作之后都设置一下这个值,其他地方就可以直接获取到失败原因。当时想到这个方案时,心中也有点不舒服,这也是导致一直拖着不实现的一个原因。  昨天做过功能的,直接就想到用C++异常来实现。今天先看了一眼msdn,然后就决定,这么简单的需求,就不需要自己写个异常类了,直接抛个字符串出来算了。字符串内容是从资源里取的,所以最后就直接throw一个CString出来了。效果还是不错的,不过有一点是需要特别注意的是,本来都已经通过返回值知道操作不成功,就可以跳出这个流程了,但有了异常,就需要在任何可能调用到这个路径的某处上层,进行try和catch,不然程序就直接down掉了!

叫老大过去真是有效

叫老大过去真是有效

  叫老大过去真是有效啊,哈哈,虽然加了一些额外的需求,却把另外一些需求的实现期限往后推了,这让我心里觉得无比舒坦,这才是正常的工作方式啊,哪有总是有突发的需求加进来冲击原本已经排得满满的进度。  今天解决了两三个问题,花了几个小时总算实现把一个活动根据多个角色拆分成多个活动。结果下午4点的时候又被叫去讨论问题,这让我很头痛,那么多的讨论,纯粹是浪费时间,花在写代码上的时间就被不断缩减。而且一讨论就没完没了地纠缠一些毫无意义的问题和细节,自以为是地出些馊主意,还不能拒绝。

公司电脑也加内存了

公司电脑也加内存了

  一个月前申购的1GB内存条今天终于领到了,还顶着大太阳跑到K4地库去领来的,又等了快2个小时才让人装好,顺便还去领了根音频延长线来,不过已经最近没有机会用自己的电脑,所谓“兵马未动,粮草先行”啊,哈哈!现在应该跑VS要顺畅一些了吧,跟家里一样,把虚拟内存也去掉了。  今天没干什么事,上午不知道怎么就混过去了,下午就是去领了下内存条、等人安装,接着又开了2个小时会,于是一天也就过去了,现在我真的很讨厌开会。不过现在也明白一个道理,以后开会一定要拉着老大一起去,他说话的份量确实比我足多了,我就在想要是还是我一个人的话,今天肯定还是会有不少情况下要跟人起争执的,而老大去了,很多时候他出面说话,别人都不怎么争吵,我那个汗啊!

从VS2008降到VS2005

从VS2008降到VS2005

  本来想用VS2008来写WIND的,但是这两天遇到几个问题,不得不降到VS2005来用。  首先是装了Refactor!Pro,在VS2008编辑器变得迟缓无比,敲几下键盘,就会死半分钟,这是无论如何不能忍受的,于是在Refactor!Pro的配置项里改了一番,卡死的情况有所好转,但仍然处于不可用状态!而且在退出VS的时候,会写一个巨大的cache文件,工程中没有多少个文件,都会写入100多MB,估计随着代码量的增加,这个文件的体积也会不断飚升。  其次是,我从PN中抠出来的Scintilla相关的代码,一添加到工程中后,VS2008就会updating intellisense,而且只updating到半途,VS就崩溃了,屡试不爽,无论是从命令行打开该工程,或者是从界面上打开该工程,都会updating直到崩溃!  于是,我万般无奈下,尝试用VS2005。降级倒是很容易,直接用文本编辑器打开.sln和.vcproj文件,把里面最开头几行中的版本号改小就行了。再用VS2005打开工程,写几行代码,编译一把,似乎倒是没有在VS2008中的那些问题,只好先用VS2005来写了,生在中国可真幸福。  这倒都只是IDE的问题,我猜如果只是直接从命令行来编译整个解决方案的话,应该不会有问题吧,而且升级也方便,只是改几个版本号。只是是否有这个必要,一定要用VS2008来编译。以后再说吧,本来最主要的也只是为了体验一下Refactor!Pro重构的快感。

加了一天班

加了一天班

  今天去加班了,其实很不想去的,但是弱者是没有决定权的,连同自身的自由!  终于搞定也几个催得最紧的问题,问题还在于逻辑跟界面绑定了,不能用CppUnit做单元测试,所以在这种纯逻辑的情况下进度慢了很多,因为测试验证相对比较麻烦。  本来还想把开发环境从VS2003换成VS2005的,在冒烟服务器上也装好了VS2005,但最后还是没有继续下去,因为升级环境要做的事情还真是不少。首先,那些第三方库需要用VS2005重新编译,比如XTP、ACE、CppUnit;其次,VS2005之后引入的Side By Side,让我有点惧怕,谁知道会不会有什么不正常的;再次,担心有的第三方库在VS2005下直接使用会有问题,比如iconv,我是直接把iconv.lib拿来用了的;最后,我的机器上装的VS2005运行得好像有点点不正常,设置了编辑器字体背景颜色有时不能立即生效,如果设置了是浅绿色,则只有空白处才是浅绿色,有文字的地方还是白色的,而且连语法着色都没有了,前景全变黑色了!另外还有一点是,毕竟还是疲于奔命在项目的功能实现上,实在没有多余的心情去做那样的事啊!倒主要也是为了使用一下那个重构工具,唉。不过看来公司内也许像我这样边编码边重构的人还是不多的吧,至少我周围那几个人是不这样的。  其实我也只会用那么两三种重构手法,最常用的便是提取方法,重命名方法名或变量名,将方法其实从.h文件移到.cpp文件。偶尔可能也会用用提取类等等手法,但这样的机会很少。所以还需要继续学习和实践啊。