Google
 

2007-05-31

看来UUID要被合入Boost了

  在maillist上看到review result,估计没什么意外的话,UUID库应该是要被接受到Boost里去了。这样的库有时候还是挺有用的,像我这次做的东西,为了测试方便,专门写了个函数可以调用Windows下的CoCreateGuid来生成一个高度离散的值,转成字符串来用,呵呵。不知道Boost接受一个库是依照什么标准,这次看到这个库在被review到后期,有人提到几点,首先是license问题,其次useful,再次performance,还有security,好像还跟作者的积极程度有关,有人发现了bug或提出了建议,作者能及时积极地修正和回复。Boost真是个好玩的东东啊,不过我现在的感觉是,Boost不适合企业等正规场合使用,而是适合个体户或爱好者用用,因为它变化得太频繁!
  昨晚11点就关了电脑,然后花了一个小时飞快地翻了一遍《应用密码学》,了解了一点最最基本的概念,打算有空了整个Crypto库来玩玩。
  公司里的事弄得头昏脑胀了,从VSS2005的ssui.dll里找了几个对话框资源出来加到自己的项目中,工作比想像的大多了!每个对话框都有10来个控件,要写各种事件处理的代码,唉!实际的功能却还是没进展。另外那个SharePoint的事老大又来催了,还要我下周三就拿出个样子来给他看看,他是心急了啊,还以为多好玩的东西呢!跟室友简单地交流了一下,他说我是没有做设计,所以很乱,而且还说如果没写设计文档,应该一天的代码量要一二百行,我说我一个月是写了约3000行啊。
  熬过这个六月,应该就都会好了吧!

2007-05-30

又瞎忙乎了一天

  又瞎忙乎了一天。上午先搜简历到10点,然后开始整代码,把VSS接口部分的模块和GT3000接口模块完善了一下,其实就是增加了几个方法。下午没做什么事,只是增加了个花哨的工具栏,并且借此机会,让右键菜单也可以有图标了,图标都是从其它程序里抠出来的,哈哈。主要是找了好久都不知道怎么给菜单项加关联图标,只好通过工具栏来实现了。加了个工具栏,还发现个问题,突然发现鼠标移到工具栏按钮上去时,界面刷新挺慢的,后来发现原来是我的代码里有问题,每次刷新都会调用那个函数,那个函数会不停地输出日志信息,于是我把打印日志的语句都删掉了,还以为会快起来了,结果还是慢。最后才发现,原来是有一个要判断GT3000是否登录的动作,会每次都要调用GT3000的COM接口,它又是个进程外组件,效率当然低了,改了后,效果就差不多了。
  还有两天这周就结束了,我给自己定下的目标能完成么!加油加油!
  好好整一下那个日志库,再看一遍《应用密码学》,写个库来玩玩。

2007-05-29

要好好做一下设计

  虽然需求写得是把每个要做的方面都考虑到了,但实现的时候,突然发现一团乱麻啊!还是得好好设计一下才行,两个交互模块都得写一堆代码啊!
  今天无聊的时候,用工具统计了一下我写的两个cpp文件,注释率超过40%啊,哈哈,平常自己在家里写着玩的,基本上都是不写注释的,在公司全是因为有了那几个宏,可以一下生成一片一片的注释块,哈哈,而且很有趣的是,在公司基本没怎么写特别长特别复杂的函数过,都是一小段一小段的,然后每个函数前面都有一块说明性注释,稍微长一点的函数里就有一块一块的注释,也是用宏生成的,就这样,注释率就上去了,哈哈。
  争取这周内,应该把主要功能都实现了,之后只是做些修饰润色补全工作。越来越喜欢用VC了,说实话,MFC真的还算好用的,呼呼,尽管不喜欢它会增大文件体积。
  那个花里糊哨的日志类也是比较有趣,针对当前的项目改了一下,还可以再改进一下的。不过对于那回调功能需要Boost::function支持,这比较要求高,今天尝试把那部分自己来改一下,结果没弄出来,我的泛型程序设计水平太低了,需要继续努力学习啊!

2007-05-28

换项目部后第3次搜简历

  上午搜了一个小时简历,好多公司的人啊!然后开了两个小时会,讨论了些最近的工作上的问题,我基本上没有说话,确实没什么好说的。还决定周末搞活动,去爬南山,然后吃饭。
  下午基本也没干什么事,就是把日志部分替换掉了,没怎么花时间。最重要的是,把之后要做的那东西确认下来了,可以开始做了,我突然都有点怀疑自己这次怎么条理这么清晰,头脑这么清楚,把原来看起来乱糟糟的一堆需求整理得有条不紊的,自己都佩服自己了,哈哈。而且老大问我做不做得完哦,6月30号前,我很小心翼翼地说,不完善点的话,功能部分应该能实现吧,其实我心里想的是,6月1号前我就能把它做出来吧,顶多就是bug多点,容错部分考虑不全罢了。老大很是替我担心,说先把重要的几个功能实现了吧!我当然点头称是,下班前把像以前用BCB时一样,先把界面整出来,然后照着界面把后台功能实现,我把视图上的右键菜单项都添加上了,发现要做的事情就是这些了,把这些功能整出来就行,还暗暗地想,要做的真的不多哦!
  还是像往常一样,吃完晚饭就回家了。上codeproject看了看,上面好多好东东啊,于是down了一些WTL的文章和代码下来。大部分是些讲做界面的,因为用VCL的时候,从来没想过界面是怎么用代码来实现的。最近可是懒死了啊,在家里怎么都不想动手。想了想,那个要做完全灵活的插件扩展的平台,可以由主程序提供界面,做成MDI的,就可以有多种界面了,比如TreeView、ListView、WebBrowser、Edit等,然后把这个Handle传递给插件按约定导出的函数,插件就可以为所欲为了,对于DLL类型的插件,当然可以直接调用Win32 API来做,对于脚本插件,看来是应该有一个简单的操作Win32 API的函数集才行。另外,不同的界面还需要定义些各自的事件,让插件在事件触发时能做相应的动作,比如鼠标点击等。这种约定后具体实现的函数名可以通过配置文件来指明,这样就比较自由。当然最大的自由应该是能在插件之间的相互调用,通过组合插件的功能来实现更强大的功能,就像Eclipse一样,那才是我想要的东西。

2007-05-27

每天只能睡6个小时

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

2007-05-26

终于熬到周末休息了

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

2007-05-25

装了个VS2005Pro版

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

2007-05-24

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等等。其实做个简单的,花不了多少时间的。
  跟小丫头打了一个多小时电话,小丫头懒洋洋的,真可爱,呵呵。

2007-05-23

无聊啊

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

2007-05-22

睡到闹钟响

  今天终于是睡到闹钟响才醒来的!
  还是觉得挺累的,在公司里没怎么做事,昏昏地过了一天,接到一个新任务,做跟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除了要带比较大的库外,用起来也不怎么不好用的,呵呵。

2007-05-21

中午去见belovedog了

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

2007-05-20

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

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

写了个简单的日志类

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

2007-05-19

日志程序库

  昨天审视了一下那些概念,猛然发现一个严重的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协议。

2007-05-18

居然有人玩阿菲连连看

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

2007-05-17

再说点工作上的事

  手头的工作算是可以暂时告一个段落了,但不知道为什么,也许是不够自信吧,总觉得会有什么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的水平,不过如果真要静下心来慢慢写,也不是不可能完成的。

2007-05-16

居然会为工作忙

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

2007-05-15

看云风的blog有感

  看到云风blog上关于C和C++的争论,有点反感。本来对云风的印象也不深,只知道当时网上有个关于游戏编程的个人主页,上面有些有趣好玩的东西,一个学生写出一个游戏开发包,也有点让人佩服的。自从他出了本书,看过那本书后,印象就不怎么好,总觉得书上全是吹嘘自夸的,没有多少实际有用的东西。现在再看这blog上的一些他的做法、观点,实在有点恶心。
  他居然说用C写的模块比用C++写的好维护!真不知道怎么妄自得出这样的结论来的,难道那些研究出OO,发明改善C++的先辈们真的全是做的无用功。只是写过个游戏开发包,做过一两个网游,就敢这样大放厥词,实在让人不爽啊!而且看过他在书上列出的那点代码,也实在没什么水平可言,总让我感觉是自己不行然后去批判别个不好用。再怎么样,说说我们公司那些产品,应该也是几百万行代码规模吧,也是嵌入式,又是对性能要求比较高的场合,现在不也是用C++了么,不也是用STL了么,还是本领域内市场占有率世界第二呢!有点想骂人,唉……

2007-05-14

坐车坐到冒烟

  下班回家坐328,结果渐渐闻到一股什么东西烧焦的味道,结果车停下来了,坐后排的人往后面看了看,还说这车子烧着了,突然一车的人都开始往外跑,几个女的还被弄倒在地,还有丢掉鞋子的,呼呼。

2007-05-13

从XUL说起

  心血来潮,又去Songbird的网站看了一下,还把编译好的Preview的安装程序,以及SVN里的源代码都下下来了。只可惜看了半天的编译说明,还是没看懂,唉,这个说明也太烦琐了,条理都不清晰。这样看来,Mozilla的XUL解决方案怎么推广得了哦,想想Adobe、MS这些大厂商的解决方案,一整套完整的流程支持,各个环节都可能会有比较完善的工具支持,而且安装部署都会很容易,一张光盘,一个ISO镜像,一个setup.exe文件就搞定所有的事,一切都准备好给人使用,有多少比例的人愿意去花那么些时间搞那么麻烦的mozilla的东西。Mozilla社区确实应该好好想想,反思一下,为什么XUL技术出来这么多年,Mozilla里也用了那么久,却一直没有被大众接受,直到现在这些大厂商出来推,才火起来。也许从技术的角度讲,各个解决方案间没有特别大的区别或差距,但是易用性、友好性方面呢,可能差得太多了。其实这也是众多开源项目的通病啊,孤芳自赏的hacker想法是走不出hacker圈子的。
  装上Songbird,听了几首MP3,就把它卸载了,现在的条件用XUL技术来实现这样的桌面应用时候还早了点,连一个窗口里点菜单,点右键,来回换输入焦点都会卡好几秒钟,有几个人受得了,换回foobar2000,看起来轻巧多了。所说Firefox3.0也是基于XulRunner来实现的了,就像Songbird一样,进程管理器里可能就看不到firefox.exe了,而是一个XulRunner.exe。这样就像Java之类的了,虚拟机实现的东西,除非是开发效率或其它有什么特别突出的优点,不然是不会被大众接受的。
  Mozilla能有那样好的扩展能力,其实从某方面讲,跟Eclipse、Emacs等是一个原因,那就是脚本语言和本地代码的结合。它用XUL描述界面,用C/C++实现真正的逻辑,再用JavaScript把两者结合起来。这样看来,只要能把描述界面的部分规范下来,真正的核心逻辑用C/C++实现,再设计一个良好的两者互动通信机制,那么一个弹性极佳的系统也就设计出来了!LLYF Spy中,是应该好好设计一下了,2.0可以只做预研性的设计和实现,3.0可以考虑实现成一个程序员工具平台了,只要扩展机制实现得好,可以给它添加各种扩展功能,比如编辑器,比如听MP3,比如下载上传……

Boost1.34.0正式发布

  在经过Beta、RC后终于在5月12日在主页上宣布1.34.0发布了!相比之前的1.33.1改动是比较多哈,当然,加入的新库都是些小规模的,好在不用编译,哈哈!
  昨晚堂哥告诉我二伯被人砍了,今天打电话去问候了一下,背上、头上、臂上各中一刀,所幸都没中要害,力道也不致命,那种凶手真是猪啊,老大的年纪了脾气还这么坏,这样的大人都教育出什么样的小孩来呢!
  参加一个正式的项目对人的锻炼还真是有点用的哈,至少我现在知道有序列图,UML图这些东西了,哈哈,而且逼得我用MFC写程序,确实不知道为什么,用VC写代码风格总比在BCB下写的好看,呼呼!
  用StarUML来建模,呵呵,只要开源软件足够好用,还是很能吸引人的。
  从微软的网站上下了个XML Notepad 2007来写简单的XML文件,也挺好用的,至少比直接用UltraEdit来写方便多了,哈哈,这也是免费的。
  关键是这些工具比起那些商业付费的同类来说,很小巧啊,而且功能上已经能够满足我目前的需求了。但是有些软件是不得不用D版啊,比如Office、VS、BDS……

2007-05-11

Boost是一天一个Release Candidate啊

  正式版就要发布啦!
  好困好累哦!都不想动了!开心就好!

2007-05-10

跟小思宇全家吃饭去了

  今天小思宇说她爸妈定了12号回去的机票了,于是我问她晚上有空一起吃饭不。最后定在万科城的关东风饺子馆,跑上跑下去借张优惠卡,结果到买单的时候才知道,预订桌席的就已经有八五折了,晕!小思宇长得跟她爸很像哦,照小妞的话说,她爸长得很可爱,一看就是很慈祥的,呵呵。不过今天小妞好像状态不好,战斗力下降,而小思宇则更不行了,柳妈妈也是只是稍微动了一下筷子!

2007-05-08

今天又浪费掉了

  上网聊了一晚上天,也没做什么事,现在体会到软件架构设计的重要性了,也体会到为什么会有人去发明什么UML了。
  现在觉得似乎用VCL还是得用第三方控件啊,尤其是界面方面,装了几个控件包,试用了一下效果还是挺满意的。不过我最喜欢的界面控件应该是像VCLSkin或XPMenu那样,用原生VCL控件画完后,只要放上这样一个第三方控件,就能直接把界面效果改掉了。而现在看到的BusinessSkinForm、DynamicSkinForm、KSDev、Raize这些都是把一个一个控件自已实现了一遍,如果原来已经画了界面的,就很麻烦了。
  VCL是不能跟Boost很好地混用的,因为Boost中大量应用的模板技术,泛型编程,很多都极度依赖C++的语法,比如回调,用()来调用可调用体,用Object Pascal写成的VCL可能就不行了,所以尽管我没真的试过,还是放弃这个念头了。要有Boost就老老实实地只跟纯C++程序一起用吧!

2007-05-07

五一长假结束了

  五一长假终于结束了,这是最省钱的一次长假了,只买了个双肩背包和一瓶15ml的眼部护理凝胶,呵呵。本来还跟小丫头说,每次长假是一次比一次花得多,小丫头就说我就是这样变穷的。
  代码结构改掉,引出的问题还真的挺多的。因为希望能尽量减少对VCL的依赖,于是不用IntToHex,改用Boost::Format,突然发现有很严重的性能问题,调了好一会儿,甚至想过要放弃而改回VCL,最后发现,只要合理地整改程序结构,多余的操作不做,速度自然就提上去了。不过让我还是有点担心的是,Boost::Format是不是真有性能问题。暂时也不管了,反正能满足要求了,而且把AnsiString::Pos也换成用Boost::string_algo来实现。另外还有一个问题是,TCanvas还没能去掉,应该直接换用API画。
  其实这次代码重构的一大目的是为了把原来写在MainForm类中的3000行代码精减,初步目标是控制在1000行以内,如果能更少就更好了。另外一个目的是要把不同类型的功能划分成不同的模块来实现,这样也是为了能更好更方便地支持多种类型的插件和协件。
  再次,这回要把各种全局设置、协件、插件、外部工具等设置都做到同一个设置对话框里去,所以想要一个更好看点的界面,看到Foxmail里那个不错,观察了一下是用了TZlistbox控件,网上找了一下,好像是付费的。如果直接用TListBox就太土了点,又观察了一下VS2003里的向导,是用HTML做的,原来是没注意过的,也是因为MS用HTML做的界面经常做得像Native程序一样,所以也看不大出来,上次听同事说起过,今天看了一下,就是几个HTML文件在那里切换,自己实现几个接口就行了。当然,今天又得到一个教训是,在这种情况下,能让脚本做的事,就尽量让脚本做,放在C++里增加了不少复杂度,而且某群人说过比较极端却也不无道理的话,“一行脚本顶一百行C++代码”。比如原来我嵌入的WebBrowser里面没有XP风格,后来发现只要加一句HTML代码就行了。还有,一直没解决的屏蔽F5刷新的问题,在网上找了找,其实几行JavaScript代码就搞定了。
  最后,看到有个叫ShowHTMLDialogEx的API,可以直接弹出个对话框浏览HTML文件哦,比较方便。

2007-05-06

开始LLYF Spy的重大升级

  看着LLYF Spy中臃肿不堪的代码,实在惨不忍睹啊!于是下决心把LLYF Spy彻底重构一遍,原来已经算是1.8版的了,现在刚好来一个大版本升级,作为2.0吧!看看以前的升级版本历史记录,还是有点值得回味的,呵呵。最开始的几个版本都还是在学校的时候写的,从1.0到1.6都是,1.7是工作后买了电脑后做的第一次升级,并尝试用Inno Setup做了个安装程序,把几个其它小程序一起打包了。1.8是突然某一天在公司里想要一个抓任意形状区域的图像的功能,于是又改了一下,并且编译环境也从C++ Builder 6.0升级到BDS 2006。现在2.0的计划,不但要给它外形整容,还要给它内部调理,另外再把其它的几个小程序也清理掉,能整合的整合。看看新出炉的版本历史:
2.0
+增加主菜单
+增加协件支持
+增加Lua、Python、Tcl脚本插件支持、增加COM插件支持
+增加外部工具配置支持
+Website探测增加对Firefox的支持
+增加全功能性的设置界面
+支持英语和简体中文两种界面
+添加到Office插件中
+添加到Windows Bands、IE Bands中
-移除了几个原来在主界面上的功能,转到协件或插件或外部工具来支持
x重写了主要核心代码,用户可能体会不到,但对LLYF Spy的发展来讲具有重大意义

1.8
+增加多种抓图方式
x插件信息对话框中的WebBrowser增加XP风格
x更小的可执行文件体积,使用BDS2006编译连接

1.7

+ add some new plugins.
+ add external tool integrated.
+ add color pick dialog.
+ auto records the form status while exiting
x can move out of the screen
x WEBSITE page hints.
x modify plugins context menu look style.
x confirm dialog while exiting.

1.6:

x uses virtual list view to display DebugOutputString output.
x automatically find previous process instance and restore the mainform.

1.5:

+ add screen color capturing feature in Capture page.
+ add a splash form.
x modify PlugIns Option dialog user interface.
x modify main popup menu style.

1.4:

+ add sorting while clicked on column header of listview in Process Information dialog.
+ add system menu items.
+ add popup menu of tray icon.
+ add viewing the password under the stars in web pages.
+ add plugins supporting.

1.3:

+ add Run item to popup menu.
+ add commandline parameter AsService for LLYFSpy.exe.
+ add popup menu in Windows page.
x fix some small bugs.

1.2:

+ add tracking the OutputDebugString API output strings.
+ add module list, memory information, file mapping list of current process.
+ add process list, service list, device driver list, port-process assiociated list of

currently running system.
+ add tray icon while minimizing.
x modify About dialog looks.

1.1:

+ add windows message capturing.
+ add extracting all icons contained by destiny program file.
+ add viewing PE information.
+ add popup menu popups while click by right mouse button.
+ add advanced capture mode.
x add Stay on top popup menu item.
x show inherited tree of all child windows of this window in Windows page.

1.0:

First version released.Bugs are here and there;-)

Inno Setup挺好用的

  Inno Setup真的挺容易用的,小巧轻便,又免费。本来还专门整了个安装输入法的程序,把ime文件复制到系统目录下,再写一下注册表,调用一个API,最后把所有文件用WinRAR打包成自解压文件。其实这样的方案也不是不行,只是觉得自解压的界面丑了点,看起来更业余了点。于是抽空用Inno Setup整了个,ISTool才是其中的大功臣,把本来全部要用代码完成的功能分解到各个GUI窗口中进行设置。它可以完成复制文件,操作注册表,调用简单API等功能,实在太方便了。现在我这个安装程序还可以自动寻找上一次的安装路径,可以根据用户选择写入不同的内容到注册表中,用户体验应该说还是不错的,哈哈。
  生成的安装程序在系统菜单上显示的“关于”选项,会弹出一个版权信息消息框,如果要改这个消息,应该改setup.e32文件中对应的信息。我开始用UltraEdit来改,但改了总是出错,于是把源代码弄来自己编译一个setup.e32,不过有一个问题是,我自己编译的体积要大好多,不知道哪里的问题,而且界面显示上有一点点问题。另外,安装程序文件查看版本的时候,在“备注”一项里,也会有固定的标识,也是可以用改资源的方法处理的,如果有代码的话,先修改一个SetupLdrVersion.rc文件,再编译成res,最后编译一把SetupLdr.e32就行了。在编译Setup.e32时,会要求有RemObjects的Pascal Script控件,下一个装上就行了。最后还有一点是,它居然不能用Delphi7来编译,看代码中的注意说,用小于7的版本,或者9都可以,9应该是2005吧,反正我在2007下面是编译过了的。

2007-05-05

输入法的几大致命伤

  作为一款输入法软件,有几点将会是致命伤:
1、在某些环境中不能正常显示候选窗口,比如Firefox、Opera等程序中;
2、不支持GBK字库或UNICODE字集;
3、不能用UNICODE选项编译,因为编译了后运行不正常;
4、有时候看不到状态窗口,或者没有方便的进行设置的方法。
  以上几点按受影响严重程度依次排列,目前我正被这些问题困扰着,都不知道怎么解决啊!

2007-05-04

没能move成

  就在出门前的半分钟,一条短信把行程改变了。
  小丫头说,做女人好辛苦啊。我说,做女人长好看点,就有好多人追。小丫头说,没人追。我说,76GG啊,还有莫名其妙打电话来的啊。
  做女人真的很辛苦啊,幸好我不是……

下雨了,move

  雨绵绵,let's move!
  在网上找到一个叫Firebug的Firefox扩展,Mozilla的插件扩展机制也真tmd牛x啊!

2007-05-03

用VCL很痛苦的一件事

  用cnsw.org论坛上某位据说是mm的话说,VCL打从娘胎里就不支持UNICODE。这让我觉得很痛苦,自从在VC2005下用API写了几天代码后,就不知不觉习惯了想用_UNICODE选项来进行编译了。唉,可惜的是,我现在是严重依赖VCL画界面了,不用它我还真的不知道怎么实现一些界面效果,比如我经常用到的PageControl。
  Boost sandbox已经从sf.net的CVS迁移到SVN上去了,待Boost 1.34.0正式release后,Boost的主库也会从sf.net的CVS迁出。Boost是个好东西啊,不过跟VCL一起用的话……

2007-05-02

协件和插件

  昨天偶然想到,IceSword使用的协件机制是一种处理主程序与其它相关性不大的功能之间关系的不错的方法。虽然想到了这点,但并没有马上去看它是怎么实现的,于是自己躺在床上一边嗑瓜子一边想,想了一会儿大概有了个轮廓。今天起来看了下IceSword,发现基本上我想的也差不多就这样了。它有一个C的头文件,提供接口声明,一个DLL提供进程间通信。而我当时想到的是需要一个LIB,可以静态链接进协件。如果有很多接口需要暴露的话,用DLL会好一点,这样相比LIB,能减小每个协件的文件大小。另外唯一剩下需要考虑的是,采用怎样一个良好的进程间通信机制,要快速稳定,同时又不能太消耗系统资源。
  插件以前我只用过DLL形式的,其实似乎COM是很不错的一种选择,只不过我一直对COM没研究,看过一些文章,也还是没搞明白怎么用COM实现插件机制。了解过Eclipse和Emacs等弹性非常好的架构后,隐约觉得用脚本来实现插件也是一种极好的方法。重新修葺一遍代码,整理好功能接口,就可以为多种脚本提供支持了。不过还有一点需要注意的是,用脚本实现的插件,对界面的操作大概都需要主程序来支持了,比如显示一条消息,选择一个文件等。另外还有一点需要提到的是,如果主程序需要暴露很多接口给脚本插件,或者同时需要能支持多种脚本语言的话,使用SWIG是个不错的选择。

2007-05-01

五一了,哦耶

  七天长假哦,哈哈,不过也没怎么觉得兴奋,只是想着可以懒洋洋发躺在床上发呆了就感觉安逸。再想想还有一天一千的两天旅行,呵呵,对我来说很奢侈啊!
  最近写blog的频率似乎降下来了,因为回到家都不怎么想动了,就看几集动画片,被小丫头知道后还要被嘲笑就这么点追求。工作忙也可以算是这么一个借口啊,怪不得我发邮件问一个人为什么不继续更新他的blog时,他会说最近很忙这样的理由出来啊。现在自己也算是稍微体会了一把。
  好穷啊好穷啊好穷啊,只能怪自己太颓废堕落了,呜呜。