All Stories

研究了几个widget工具

  昨天心血来潮,装上了鱼鱼桌面秀看了看,以前也是装过的,有乱码,现在经过几个版本的更新升级,软件名称也已经换过了,但是乱码问题还是没有解决,原来用Delphi开发的就这么郁闷啊!我用的是英文的XP,打了中文语言包,照理显示中文是没有问题了的,不过这个软件在安装路径中如果有中文的话,就不能正常启动。另外,界面上也不全是乱码,某些地方的中文还是能显示出来的。还有,装的2.1.1纯净版,运行非常不稳定,经常出错崩溃。如此看来,这个软件也就是界面上比较出色了。  说完了缺点,来看看它的技术特点。现在这个软件也算是一个widget工具了,可以有一个侧边栏,依靠在桌面的右侧,在该侧边栏上的可以安放一些widget,一般就是显示当前时间,当前CPU占用率,内存使用率,某个城市的天气情况等等,翻来翻去就是这么固定的几个内容,主要体现在界面上的设计有所不同。看了一下它的SDK,终于基本搞明白,原来是程序内部固定了只提供这些服务,外部每个widget有一个脚本文件,可以是vbs或js,调用程序提供的那些对象、方法,然后绘制界面。除了一个描述逻辑用的脚本文件外,widget还会有一个配置文件,记录一些最基本的信息,比如图片文件路径等。widget可以通过鼠标拖拽,拖到桌面上任意位置,也可以停放在侧边栏上。稍微想了一下,觉得这个应该不难实现,也就是侧边栏是一个单独的窗口,在拖拽widget的时候,检测当前widget的位置,如果进入侧边栏窗口区域,则自动调整widget的位置,看起来像是多个widget贴在侧边栏上一样,实际上还是各个窗口各自管理。如果拖出了侧边栏,则拖到哪算哪。后来看了一下窗口类信息,果然跟我猜想的一样,说起来我的LLYFSpy都不能正常使用了,抽时间也得好好整一下,就作为WIND的一个插件好了。  看完鱼鱼桌面秀,我又想起盛大的widget和雅虎的widget,于是上它们的网站看了看。盛大的是能放到游戏中去的,这是一大特色,但目前似乎还不能放到桌面上。雅虎的看起来则要比鱼鱼的专业得多,widget能做的事也多一点,界面响应和交互能力也要强些。雅虎也是给每个widget一个配置文件,但是XML格式的,而且把逻辑处理的代码也放到这个配置文件里,说起来,单纯从用户角度讲,雅虎的方案更好一点,但如果能把一个widget的所有文件都打包的话,这个优点就不存在了。如果从widget开发者的角度讲,可能鱼鱼的方案稍微好一点点,因为不同的格式放在不同的文件中,用支持syntax highlight、auto-completion的编辑器来方便得多,现在还很少有编辑器能同时支持混合的语言。  看了这些之后,我就想,我是不是能把WallpaperHelper里的桌面时钟日历功能扩展一下,不就也有一个widget功能了嘛!看它们用来扩展的都是vbs或js,鱼鱼似乎是直接用的MS的那个WSH组件,这有一个很大的好处,直接用WSH的强大功能,它内置了不少接口,像FSO之类的,还可以直接调用ActiveX,实在强大!雅虎的倒是看到一个js32.dll,可能是mozilla的那个js引擎。盛大的没看。但是我现在对于要嵌入的脚本语言,只能Lua感兴趣,公司里也曾经有人讨论过对于嵌入的语言使用Lua好还是js好,当时我的观点是看应用场景,希望脚本做些什么事,再来分辨做这些事用哪种语言方便。

参观房展

  今天中午偶然得知在会展中心有房展,于是临时决定去参观一下,虽然买房对于现在的我来说还是比较遥远的事,但是感受一下那种气氛,了解一点市场行情还是可以的。  本来以为会展中心可以坐391直达的,结果后来才发现,391早已经不知什么时候改线路了,而且改了线路之后我曾经坐过,只是当时没有留意而已。于是下了车,一直走路过去,大概也就是十几分钟的样子吧,不过也出了一身汗。  展厅里外都有很多人,果然比较热闹啊!对于房展,需要关注些什么,我是一点经验也没有,所以像无头的苍蝇到处乱走乱看,看到很多地方都排起了长队等待领取纪念品,觉得还真是无聊。另外就是看到几处文艺表演,有个还算pp的mm在拉节奏轻快的小提琴,看她嘴角弯弯的样子,让我觉得像马姐姐,于是拍了两张照片下来,不过马姐姐的身材可比这mm的好得多!后来看到一处有六七个像幼儿园的小女孩在跳舞,也是很轻快活泼的节奏和旋律,很可爱,但似乎脸上又带有一种跟她们年龄不相符的成熟的神情,看了一会儿,想拍照,总是有人挡在前面,找不到好的角度,不禁又佩服起这些小女孩的体力还真不错!再后来,看到有两个mm在跳比较热辣的舞了,穿得也少,同样是有n多人挡在前面,还有不少人总是在她们前面1米左右的距离横穿而过,甚至有个中年妇女抱着个婴儿,直接坐在那个舞台边上拍照,唉!  对于房子,倒真的没怎么关心,偶尔留心了一两处,总觉得价格上太划不来,比如有一处复式的空中别墅,167个平方,在盐田,总价大概三四百万,心里就很不屑,觉得太不值了。  出来后,又走了很多路,累死了,还是得自己有车啊。

软件开发所需的工具

  今天断断续续写了几行代码,再次感叹,在这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的改进之处?

  今天突然想到,之前遇到的两个操作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个小时会,于是一天也就过去了,现在我真的很讨厌开会。不过现在也明白一个道理,以后开会一定要拉着老大一起去,他说话的份量确实比我足多了,我就在想要是还是我一个人的话,今天肯定还是会有不少情况下要跟人起争执的,而老大去了,很多时候他出面说话,别人都不怎么争吵,我那个汗啊!