All Stories

无聊啊

  挺无聊的,在公司里,在家里,都无聊。这些天突然觉得很迷茫了。

睡到闹钟响

  今天终于是睡到闹钟响才醒来的!  还是觉得挺累的,在公司里没怎么做事,昏昏地过了一天,接到一个新任务,做跟VSS交互的模块,当前的主要问题在于需求尚不明确,而且可能会有些比较麻烦的需求。也懒得去仔细研究需求,就先看些文档和代码,VSS提供的一个ssapi.dll就暴露了所有接口,不过比较怪的是,在VC.NET2003中import时,6.0版的saapi.dll里IVSSDatabase接口居然没有Close方法,而8.0版的是有的!这也不合理啊,难道是真的没提供,亦或是VC的bug?  回到家后,就不怎么想动了,脑子接近处于停滞状态了。这些天越来越不喜欢用BCB了,感觉VC挺好用的,其实一大原因是得意于它的编译器对标准的支持程度好,还有一大原因是对Boost支持好!WTL也还算好用啊,VCL用Object Pascal写成就是感觉不爽了。MFC除了要带比较大的库外,用起来也不怎么不好用的,呵呵。

中午去见belovedog了

  话说昨天晚上才知道她也来这边大队培训了,于是两人约好今天中午一起吃饭。当然是我跑去培训中心找她,虽然两年没见了,但她的样子还是没变,一如既往的漂亮,皮肤之好,典型的重庆美女啊!两人一起吃了顿自助,也算是见过面了,拍了照,在主培楼外面晃悠,雨下大了,于是各自回自己该回的地方去。她还带给我一包重庆产的牛肉干,呵呵。  今天在公司,又发现一个严重问题,还是因为BSTR内存分配的问题,以前虽然也有些比较奇怪的现象,但一直没重视,以为是其它原因,今天才知道是这里错了。纠正一个大bug的感觉真爽啊,不过好多地方我都没有怎么仔细考虑容错处理,要写出一个强壮的程序来,还真的不太容易呢!  另外,那个日志类啊,一拿到公司里去用用,发现好多不对的地方,实在是经不起实践的检验啊,而且实在很难用,风格也很丑,怪不得boost一直没有一个日志库,要做好一个日志库也很难啊!

日志类的回调函数可以是类成员函数喽

  下午躺在床上突然想到,原来在TclSuck中是怎么做的,看了一下,这么简单,虽然不想给日志类加个模板参数,所以不能有模板成员变量,但一个作为回调的成员函数属于哪个类是未知的,所以一定要用模板,要把这个信息保存起来,只要先定义一个普通的非模板类作为基类,给这个基类添加一个虚函数,再从这个基类派生成一个模板类,就可以保存相应的类型信息了,而日志类中保存的是基类的指针,所以那个虚函数的作用也很明显了,狠一点的,可以把那个虚函数声明为纯虚函数,因为基类实在不需要让它做什么事,只是为了中间过渡一下而已!  傍晚去百草园见了一下hover,他进上研所了,来深圳大队培训,周四就走。吃完饭回到家,给afei打了个电话,她却告诉我belovedog也在大队培训,还说下午她们去见面的时候忘记叫我了,我当然要埋怨死afei了,于是给belovedog打电话,约时间见面。  熟识的人进公司越来越多了,从普通校友,到老乡,到同班同学,还有……

写了个简单的日志类

  基本可以满足自己使用的功能上的需求,即使发现哪里不能满足了,也可以马上自己改。不过实现得真是很难看很丑陋啊,是拿不出去见人的!而且在写这个类的时候,暴露了我的一大能力缺失,我对标准库和Boost一点都不了解,一些常用的组件应该怎么用我都不知道,全靠看帮助翻手册才勉强搞定。  这个类开始是在VC2005下写的,然后拿到BCB2006下试了下,发现BCB连Boost::function库都不能好好地支持啊?真是受不了,而我写这个类时,有一部分功能是依赖于Boost的,比如支持回调,所以如果没有Boost,这部分功能就不能支持喽,当然其它的功能还是可以用的。目前可以将消息写到控件台、OutputDebugString(也就是调试器)、文件、系统日志。其实当时有个想法是,Windows下可以写到系统日志里,Unix-like的系统下应该用Syslog,不过这个就暂时不管了,哈哈!除了可以写消息外,还可以定制消息输出的内容格式,其实是不同内容在同一行中出现的顺序,呵呵。当然,如果编译器能支持Boost,就可以用回调,可以用全局函数,或仿函数(目前还不能支持类成员函数),就可以完全定制输出消息的格式了!  除了依赖的Boost库外,全部的代码只有一个头文件,而且其它的依赖都是标准库或系统支持的库,方便啊!

日志程序库

  昨天审视了一下那些概念,猛然发现一个严重的Bug的原因,原来一直是因为我对BSTR等的概念不了解,才造成了这样的问题,哈哈,纠正一个严重bug的感觉真爽啊!现在也许真的是可以把那个任务搁一会儿了!除非到时候又有什么新的需求,或者要对某一块内容重构,对,有一块,现在的设计很傻很笨,缺少灵活性和弹性,如果要扩充新的内容,就比较麻烦,而且如果那个结构内容一多,就看起来特别怪异。  突然很想自己写一个简单的日志系统,那个胖子曾经还跟我吹牛他们设计日志系统的时候参考了ACE的很多东西,我看了一下,只不过是每天新建个文件,把文件名、行号和消息内容写进去而已啊,只能说它真的是个日志,根本没有所谓的系统的概念!  要日志系统,就看ACE、Pantheios、log4cxx、log4cpp、log4cplus、Boost.log(没被Boost接受)。其中log4cxx、log4cpp、log4cplus都是从log4j派生来的,后两个都好久没有更新了,log4cxx最后的发布版也是好久以前的了,svn里倒是可以取出最新的版本,不过对于Windows平台来说,它没了直接的VC的工程文件了,需要用ANT才能编译了,看过它的文档,功能还是很强大的,大概是得益于log4j的强大吧,而且它可以支持配置文件。ACE里的日志功能,设计得也是很强大,它还能自动缩进输出消息,这点比较有趣,但是使用时需要链接整个ACE库,这就比较不爽了,要是能单独把日志部分提取出来,或许用的人还多一点。Pantheios基于STLSoft这个库,功能也很不错,它使用Syslog协议,这个协议在RFC3164有描述,甚至自己在Windows平台上实现了这个协议。不过我除了Boost,很不习惯再用其它的非标准通用库了,所以这个Pantheios就这样被我cancel掉了。大概看了一个Boost.log的文档,发现大部分需要的功能,它确实也都有了,或许不如ACE的强大,但之后也存在着不小的提升空间,不知道当时Boost怎么没有接受它,现在它好像被搁置下来了,也没在maillist里提起过了,而我看boost-consult的vault上那个,照那个样子,应该不会被接受的,看来要让Boost加入一个日志库,还得等待一段时间了!  所以近期一段时间内自己写个小巧适用的,还是有点必要的哈!不过有一点很重要的是,需要能同时让VC7.1/VC8/BCB5.6.4/BCB5.81编译,最好还能在Unix-like的系统上用Syslog协议。

居然有人玩阿菲连连看

  今天收邮件,发现有封主题是“我是Afeilink的忠实用户”的,里面提到他最近在玩1.0beta版,问我里面一首背景音乐的事。真是让我意外啊,竟然还有重邮以外的人玩这个,呵呵。想当年,一方面为了逗阿菲,另一方面为了能让自己玩过瘾连连看,才整的这个小游戏,当初整出最早的版本后,就只在学校的E383上发了一下,在BBS上稍微宣传了一下,一段时间内还把BBS上自己的昵称改为“阿菲连连看xxxx...”,真是令人怀念的时光啊!当时BBS上Software版的人开了个群,xiaotnt在《电脑迷》工作,NAOH就把这个东西传给她,她就压到某一期的光盘里去了,还说有20块钱的稿费!有那么段时间,我还多想见见xiaotnt本人的,其实也是chuanking的原因吧,可惜的是,直到我毕业离校,也没有见到xiaotnt,而曾经一起在Software灌水的人,也没剩下几个还有联系的,当然那20块钱的稿费,也被xiaotnt拿去买零食吃掉了吧,呵呵。  有的事总要过去,有的人总要忘记……

再说点工作上的事

  手头的工作算是可以暂时告一个段落了,但不知道为什么,也许是不够自信吧,总觉得会有什么bug突然冒出来,然后就得一把屎一把尿的debug。其实大概想想,大多数会蹦bug出来的地方,基本上在前段时间做demo的时候发现并解决了的,这几天也就是把原来那个demo的代码合并到他们的代码库里,并改一下界面上的一部分代码,加了个用OLE实现的拖拽,这个拖拽效果比直接判断鼠标动作来实现的效果好看多了。给TreeView加了图标,感觉就是爽很多啊!  用了几天MFC后,突然觉得其实MFC挺好用的,甚至比VCL还好用-_-b说这话真是很冒风险,会被人口水淹死的。不过呢,可能是我自己的问题,用了几天Xtreme Toolkit Pro后,迷上了这样的界面库。说起来其实它也没有什么创新,都是模仿的别人,大部分是MS的,MS就是牛x啊,Shell、Office、VS等等等等推陈出新的界面风格,引得无数Windows桌面应用软件竞相模仿。  另外一个让我觉得使用MFC好过使用VCL的地方是,自从VC7.1出来后,VC已经成为众多C++程序库兼容的首要需求了,确实让人感觉,它的编译器已经比Borland的要好了。  再回来说在公司整的那玩意儿,我负责的模块其实真的是很小很小的一个模块,总的代码量大概就是几百行吧!今天下午感到无所事事了,还改了一下输出Debug信息的类,让它能根据宏定义分别实现向文件输出,向OutputDebugString输出,向那个程序的输出窗口输出。昨天看了下boost-consult上的vault,有个logging,想做个日志库合入Boost,看过代码后,觉得以这样的水平,是肯定不会让Boost接受的,一个小小的日志库,居然还要求Boost::thread和Boost::date&time,而这两库都是需要编译后才能使用的,这就对人们使用logging造成了巨大的障碍!另外,代码实现的风格已经库的使用等编程手法上看,目前也不是很细致,远称不上大师水平。最后就是,现在它实现的功能也挺有限的!看过ACE的日志功能的介绍,觉得功能还比较强大,曾经也想过自己写个日志库,现在想来,日志库的实现可能比较麻烦,至少功能上应该达到ACE的水平,不过如果真要静下心来慢慢写,也不是不可能完成的。

居然会为工作忙

  这两天在公司里,真是忙得有点昏啊,连邮件都经常是过好久才看一下回一下。其实静下来想想,也不是很忙吧,只不过是我自己偷懒闲惯了,这样有点事情做就不爽了。今天下午的时候还在想,今晚要加班了,不加班完成不了了,结果到下班时间,又决定不加了,还是回家算了。分给我的任务其实真的很少,代码量和难度都应该算是最低的。就是以前没这样被逼着干过,所以突然有点适应不了,甚至差点儿睡觉的时候都在想那里应该怎么写,真是郁闷啊,被逼到这份儿上。不过现在已经完成得差不多了,核心功能基本实现了,明天去把那些扫尾工作处理了,18号应该能顺利交付吧!完成了这个,应该就要投入到那个单板软件开发,和SharePoint架设上去了。都是没经验的,正好学一下,这两样东西也是两个截然不同的方面的东西。现在做的是Windows桌面应用开发,用MFC,说起来MFC并不是以前想像中那么不好用,呵呵,也许是因为前段时间直接用API写Demo写得快吐血了吧,又画TreeView又画分隔条,还要实现TreeView之间的拖拽,唉,当时没问清楚,做了很多无用功啊,早知道就应该把精力重点放在核心接口设计上。之后的单板软件开发让我既兴奋又紧张,这样的嵌入式软件开发参与一下,才不枉来公司一次啊!SharePoint倒不是很期待,好像目前的需求要实现的话,基本只是填几个框,鼠标点几下就好了。  今天看了别人的blog,才明白过来,不要用代码量来衡量一个人的水平。代码量过少,固然很可能实践经验不够,但当达到一定量后,之后就是瓶颈期了,很可能3w代码量经验的人,水平跟30w代码量经验的人差不多呢!代码写得精炼、优美才是作为一个编码人员应该追求的。