All Stories

抛异常实现多级信息传递

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

叫老大过去真是有效

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

公司电脑也加内存了

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

从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文件。偶尔可能也会用用提取类等等手法,但这样的机会很少。所以还需要继续学习和实践啊。

高兴得太早了

  又去受了一回气,要把google桌面搜索,google地图的功能都做进来了,真是痴人说梦话,还总是说没工作量,神经病!  今天把格式化显示时乱码的问题解决了。其实不是MS SQL Server那里引起的,而是从Excel读取数据后转换成XML中间格式就出错了。如果是原始的干净数据,是没有问题的,只有当原来已经有同名的流程已经存在时,跟新的流程数据进行合并时,才会不正常,主要是没把连接线中记录的两端的图形节点uuid值改换回旧的,于是跟图形节点中的uuid值对应不上了,生成的dot文件中又是以uuid来作为节点标识的,当然出错了。  另外又发现一个判断上下级关系的方法写得有问题,光是看代码就看出来了,果然他们实际试用的时候也是不正常的。但实际上这部分代码我都是纯粹凭想像写出来了,根本没经过什么测试。主要原因还在于这部分代码跟界面绑在一起了,都不好用CppUnit进行单元测试,所以逻辑正确性都不能保证了,看来抽时间还是得把这部分重构一遍,不要跟界面绑定了!  今天又偶然看到一个可以Visual Studio 2005和2008下使用的重构Refactor!™ Pro for Visual Studio,在公司里找到一个似乎是免费版的,装了后在VS2005上看了看效果,从界面上看很酷啊,哈哈,不过公司里只用VS2003,真是遗憾啊,只能继续用VAX里带的那点重构功能了,尽管大部分情况下也勉强够用了!

快到头了

  今天狠了狠心,直接又加了一张表,把原来用XML表示的组织结构信息存储到数据库中去了,原先过高地估计了难度,其实是心里有抵制情绪,心理暗示这用二维的关系数据表来表示树型结构很不方便。其实不然,只要每一条记录里保存一个指向父节点的引用就可以了。  于是最后的攻坚战接近尾声了。权限相关的问题基本上从编码角度讲,差不多完工了,就剩下及时刷新客户端的组织结构显示了。而另一个主要问题,格式化显示流程图的问题,就我现在的猜想,问题还是出在MS SQL Server的使用上,自我感觉其他各部分的实现还是经得起推敲的。  自打从CodeProject上又重新找了一个自动更新版本号的插件后,工程的版本号终于又能跟着每次编译而自动增长了,到今天为止,都已经到1000多了,这样好过以前要手动修改资源,但似乎有点不太专业。就我理想中的应该是,每次CruiseControl进行自动构建时,帮忙自动增长版本号,而不是我一个本地构建时进行增长。现在只有我一个人修改代码还好说,如果多人协作,目前这种做法明显行不通。

觉得自己很可怜

  觉得自己很可怜,唉,状态很差,生活、工作都很糟糕。今天去汇报工作进度,被领导认为这两周来没做什么事,郁闷!遇到个变态的领导,让人如此无语,用小妞的话来说,有过这样的经历后,以后觉得什么人都是挺好的了。  今天又因为忘了std::map的自动排序功能,而花了不少时间去修正那些bug。我把句柄作为key,该句柄上的标题文字作为value,本来想这样的结构用std::map挺好的,结果整了好久才发现插入容器时的顺序跟容器内的节点顺序不一样,才猛然想起来,这个std::map会自动根据key的值排序一把,而我恰恰不需要这个特性,于是想起去年,做编辑模块的语法提示功能时的情景,用了std::vector<std::pair<HANDLE,CString> >的结构,有一点std::map的样子,但又保留进入容器的顺序。  代码真的越写越乱了,现在连接口都是混乱的了。相似的方法名,容易产生歧义的参数列表,以及更多耦合的类划分。为了完成功能,我只好不管这些了。还有,我似乎也有点完美主义,上周讨论下来的结果,那个方案,我总觉得太土太不专业,总想用另外一种我自以为要好得多的方法来实现,但是脑海里另一个声音却是“先完成功能,不要管实现得好不好看”!  在公司论坛里看到一个monaco字体,等宽的,发贴的人说是最好的编程字体。开始我还不以为然,看到另一个人解释说什么叫好的编程字体,一要等宽,二要容易辨别o和0,1和l,剩下的则是见仁见智,觉得挺有道理的,虽然贴图上的样子看起来并不好看,我还是下载下来试用一把,把VC2003里用了一年的FixedSys换掉了,感觉还是挺爽的,看来大概是用了太久了,审美疲劳了。

Opera确实比较快

  这两天还是照平常一样,在网上看小说,因为看的都是盗链,看到后面的章节一般都是截图的。昨天偶然开了一个Opera 9.51,猛然发现在它这里图片出来的速度比Firefox里快多了,很明显的现象。不得不承认,Opera在这方面的努力真的很有成效。而Firefox对现在的我来说,最大的让人不满之处就是它速度实在慢了点。如果换作以为,我肯定还会再加一点内存占用过大,不过现在1.5GB物理内存使得我不再特别关注这个缺点了。不过速度慢这个缺点却是没有明显的可以弥补的办法。  都说Chrome的V8引擎已经作了极速优化,但是总的看来chrome还是个半成品,我已经太过习惯于添加了各种扩展的Firefox了,所以Opera也还是没能正式作为我的主用浏览器。而我就只能希望Chrome的出现能刺激一下Firefox开发团队,好好优化一下代码,提高点效率。