All Stories

每天只能睡6个小时

  真可怜,虽然是周末,明明是个让人睡懒觉的日子,可是每到那个时间点,就会自动醒来,然后睡不着,然后翻来覆去也睡不着,然后躺着觉得狠狠的无聊,然后起来开电脑!  昨晚睡下之前,发现了让日志类的表现像标准流一样的方法,其实很简单,就是加个成员变量,是一个标准流的对象,然后用一个方法把它的引用返回出去,外部用户就可以用标准流提供的各种设施了。不过这样有一个东西我还没搞明白,怎么知道人家一次IO完成了呢,我只是希望能通过它来接受用户的输出,之后我要把这些输出处理一下再用我的方式输出,这个时机我就不知道了。现在的办法是,到下一次再输出上一次保存的内容,很不爽啊,很不可靠啊!估计方法还是有的,只是我不知道而已。  于是可以不用一个特定的结束符了。还加了个过滤功能,比较有趣。用了一堆编译开关的代码调试起来还真是麻烦的呢,因为很可能写的某段代码是从来没被编译到的,所以错误一直都不会暴露出来。比如这个日志类,涉及到是否是Win32平台、是否是UNICODE编译、是否带有Boost库,几个分支一混合,就是n多种情况,哪那么容易都覆盖到啊!

终于熬到周末休息了

  最近一直过得很忙很累啊,搞得每天回到家都不想动了,只是点点鼠标发发呆了。今天还算比较有成果的,把需求整理了一遍,写了个word文档,给几个相关的人看了下,基本上是pass了,接下去就可以照着这个文档做了。下午就是在画UML图,写概要设计。前些天看以前的《程序员》杂志提到,这是传统的瀑布模型的软件开发流程,如果用TDD,是可以省掉概要设计和详细设计的。哈哈,我回想一下我平常自己写着玩的代码,虽然不是TDD,但也是遵循TDD的原则啊,每次都增加一点功能,让这点功能能正常工作了才开始下一个功能,这样看来原来就是这样,所以我从来没写过概要设计和详细设计,也能整出些小玩意儿来,不过就是从来没有重构过,所以代码一般只有一个版本,之后变得很难看也从来不管,如果要我从头来过,我太懒了,基本上不可能,看看那个到现在还歇菜的LLYF Spy。下周争取努力把那个需求实现了,然后就到了6月份了,剩下的时间里就用来查错、纠错和优化吧!还有另外一个任务呢,唉,真烦!  今天提到了日志,我顺便自告奋勇要改进一下项目中的日志部分内容,要好好研究一下怎么做一下好用又强大的日志系统。今天提到一个需求是,应该能方便地进行过滤。  跟妈妈打了大半个小时电话,说着以后找什么样的老婆,找了老婆怎么样,使劲yy了一把,呵呵。

装了个VS2005Pro版

  从电骡上拖了个VS2005Pro下来,之前装的那个Team Suit居然没有MFC和ATL,我也不记得是不是我当时自己就没装上,感觉这种可能性不大,还是弄个Pro版来用用,公司里装的也是Pro版,虽然公司里现在是用2003来工作的。我心里想着是慢慢摆脱BCB,从VCL中解脱出来,转用MFC或WTL。其实说实话,我还是多佩服VCL的易用性的,只是它跟Boost的兼容性实在不如VC啊,为了一个类库而放弃使用了5年多的东西,还是有点点犹豫的,毕竟很多时候,遇到一个问题,用VCL的话,是很快就能想到怎么做,用WTL或MFC就不行了。  现在反而开始来学10年前流行的东西,真是讽刺啊!很茫然啊,小丫头说我连自己养都不够钱花,我也很心虚啊,一个人过惯了大手大脚不计后果花钱的生活,要是突然真的两个人了,还真的很难适应呢,说不定还会引出一大堆的问题来。说到底,就是得想办法多赚钱啊。

VSS接口用起来还是比较容易的

  VSS提供的接口使用起来还是比较容易的,今天大概用了一下,可以把里面的内容都列出来了,估计其它的什么checkin、checkout、get latest version等也不会很复杂吧,不过没找到怎么get某个特定版本的方法,难道是从version的接口中去找?其它时间还是都花到改bug上去了,得好好研究一下需求才行了啊!另外整了一会儿日志部分,把日志输出到一起去了,当然原来的部分还是简单了点,我自己的难用了点,但信息可以多一点。  又大概看了一下Boost.Log的文档和代码,觉得这个库还是挺不错的,在网上看了maillist上的存档,原来当时是作者自己要求不要被accepted的,因为他觉得这个接口看起来不舒服,他觉得抽空从头再设计一个新的日志库,当时说的可能需要半年或更多时间,现在半年过去了,他果然还没有什么新的东西拿出来。  我准备自己设计一个日志库,初始目标是完全依赖STL和Boost,先能支持标准C++的输出,和Windows环境下的输出,并针对VC编译器,加入遍历堆栈的特性!然后从Booost wiki上取一些需求。最好是能不编译就可以使用,而且不依赖那些需要编译后才能使用的Boost库,比如date_time、threads等等。其实做个简单的,花不了多少时间的。  跟小丫头打了一个多小时电话,小丫头懒洋洋的,真可爱,呵呵。

无聊啊

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

睡到闹钟响

  今天终于是睡到闹钟响才醒来的!  还是觉得挺累的,在公司里没怎么做事,昏昏地过了一天,接到一个新任务,做跟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库外,全部的代码只有一个头文件,而且其它的依赖都是标准库或系统支持的库,方便啊!