All Stories

什么程序可以集成脚本语言解释器

  每次看到按键精灵,心里总有种奇怪的感觉,这个东东,忽悠了好多菜鸟,也赚了不少钱吧,可我心里却觉得这不值,是忌妒吗?  最近想着,做什么程序可以集成脚本语言解释器呢!  有些情况是可以预见得到适用的,比如这些天突然想学学围棋,于是在网上找了下打谱的软件,这种软件就适用。有个叫StoneBase的打谱软件是国内做得比较好的,但它并没有第3方可扩展性,照我的想法是,对于要兼容多种格式的棋谱文件,就可以用脚本来解析,规定一种中间格式,假设是标准的SGF,把所有其它格式在主程序的主动触发下都用脚本转换成中间格式。我暂时也想不出其它更多的地方可以用脚本的了,偶然看到它的论坛上有人发了个可以自动下载TOM网站上公布的棋谱文件,于是我就想,是不是可以干脆直接支持外部工具,但是转念又一想,都已经是外部工具了,就不需要集成解释器了……  另外还有种情况,最近因为要写Socket程序,所以想到如何方便地调试这类程序,特别是对于客户端和服务器端都还没写出来的情况下。于是我想写一个辅助调试socket程序的工具,大概的想法是,它可以做为一个主动去连接的客户端,或者是被动接受连接的服务器端,连接上后,可以看到接收到的内容,还可以由用户手动输入内容发送,这种情况下,脚本的应用就比较有实际意义了,比如可以把接收到的内容交给脚本处理一下,脚本再根据实际情况发送一些内容,这比较适用于调试协议,像http/ftp等协议用脚本就能实现一个简单的原型。这个工具我已经想了很久了,但只建了个工程,却还没开始做,如果做好了,一定是个很实用的东东。除了这样的客户端和服务器端功能外,还要有用Detours静态hook创建进程,动态注入attach到已有进程,用WinPCap或Raw Socket(其实有了WinPCap就不需要了)抓包这几项功能。静态hook和动态attach是为了看进程调用WinSock API的情况,而WinPCap抓包就是一个普通的抓包功能,因为如果光是做抓包功能,我想我是做不过那些专业的做了好多年的工具的,如IRIS、CommView以及开源的Wireshark等等,所以重要的是前几项。又扯远了,脚本在这个工具里还可以用于解析帧结构、协议等等。  当然还有种情况,就是用于像按键精灵这样的工具上。  现在有4种脚本语言是我比较感兴趣集成到程序中的,分别是Python、Ruby、Lua和TCL,但实际上TCL与前面3个放在一起并无多少作用了,它的应用面比较窄,又缺少现代语言的一些元素,而且没有什么特别有优势的特性。Python和Ruby这两个大而全,且语言特性丰富的脚本已经能满足大多数场合的要求,而Lua则完全是看中它小巧快速,特别适用对性能有点要求的场合。Boost中有Python的粘合库,Lua以前有LuaBind和LuaTinker,但好像没更新好久了,至于Ruby我还没有了解。但我想,我总有一天会自己来分别写一套简单的,自己够用的库的。

感觉到有点压力了

  今天上午,一个同事打电话,问些关于某个名义上由我维护的工具的事情。问题的缘由是,该工具现在使用的时候有些不正常,于是我就推脱说现在忙于另外一个项目。最后她就生气了,其实我心里也不爽。下午的时候去看了看现象,其实我觉得不一定是工具有问题,可能工具使用的机制就是有问题的,如果是机制有问题的话,就一时半会儿也不好解决了。这个工具说原理,其实并不复杂,无非是个函数hook,只不过同我们平常接触到的不一样,它是针对运行在单板上的软件的,单板运行VxWorks操作系统,使用PPC的CPU,用Tornado(其实是GCC 2.9x)编译,应用的典型场景是,在运行Windows系统的PC机上写好代码用Tornado编译一把,然后用这个工具把编译好的东东上载到单板上,并通过用户操作给指定的函数hook一下。有了hook,当然是有unhook操作,问题是有些情况下,unhook不成功!据了解,出问题的情况是分hook什么函数而定的,有的函数hook了就很容易直接宕掉,我粗略估计了一下,这些函数很可能是因为被调用得太过频繁,有些操作来不及做,就阻塞了,比如要把消息发回给PC上的显示终端,于是很可能就宕掉,但这也只是我的猜测。  另一方面,现在手头的这个项目,渐渐时间少起来了,我要争取本月底前拿出一个基本可用的但可以很不完善的原型出来,至少可以让那些头头们不要总在那里烦人。不过真的动手的时候才发现,其实有不少问题是很花时间的,当时的构思是不够仔细的,不够推敲的。  有点烦啊!  afei打电话来说下周就要出去了,估计走之前也没时间再出来了。

真是没用

  上周六下午无所事事,就跑去健身房耗了一个小时,本来只是跟以前一样踩一下车,跑一下步的,后来去做了几个仰卧起坐,要求是做4组,每组15个,结果我只做了2组就做不下去了,后来好不容易又死撑了10下。当时就觉得挺虚的,就偷偷逃回家了。过了一晚上,腹部上的肉疼得站直不了了,像是要被撕开一下。今天还是痛,虚啊,听室友说他上次这样痛了3天才好,晕!

在编辑器方面做点事

  跟TextPro的负责人交流了一下,发现分歧还是挺大的。他们只想做一个普通的处理中文文本,有正则表达式支持查找替换,还有一些简单的转换处理功能的小程序就可以了。而我原本还以为要做一个通用的文本编辑工具,至少类似UltraEdit、EmEditor之类的,只不过对中文处理增强了。分歧很大,我只好放弃了,不如自己玩自己的。  看了一下鱼鱼桌面秀,存在字符编码问题,我的系统上如果安装路径里包括了中文,就运行出错,处于不可用状态。其实我只是想看看它的插件编写环境,原来它用的SynEdit,还是比较完善了。晕!

doxygen是个好东东

  doxygen真是个不错的东东,现在都有点爱上它了,特别是对于现在我这样的情况,我还是随时准备着要把手头的代码交接给后来的人的,所以为了减少沟通交流的时间,比较详细的文档是很重要的一步,而对于缺少设计文档的项目来说,源代码即是最好的文档。这时doxygen的作用就很明显了,在它的帮助下,可以很方便地扫描出当前项目下所有源代码中类的依赖关系,文件依赖关系,类说明,文件说明,方法说明等等等等!我现在用的办法是,先生成一个doxyfile,添加到项目中,在VC的外部工具中添加一项,调用doxygen生成该项目的文档,还是比较方便的。不过也遇到些问题,最奇怪的莫过于中文的支持了。我从官方网站上找来的1.5.x对中文支持都有问题,但从公司网上找的一个人家自己编译好的却没问题。另外一个问题是,对于不同工程中同名的类,它会只留下一个,丢掉了另外的,这就不好了。对于不同工程中的同名的文件,倒是可以通过指针建子目录来解决。不过也许是我还没用好,说不定是哪里的设置问题。

小思宇搬家

  小思宇从百草园的七座搬到八座,我就过去帮忙。其实东西也不算很多,只是几个箱子,而且还不大,虽然3个人,加个小推车搬了2趟。  在百草园遇到小玉玉,没有说话,她只是低下头走过,我也没出声。小思宇问是不是很尴尬,还说我脸都红了。我都会脸红,呵呵。唉,这是注定要遗憾一辈子了。

爬南山

  周四的时候我开始计划张罗组织原来的3500测试组还留在深圳的人一起出来玩一下。至于我为什么要来组织,这目的我自己都觉得有点不可思议,也许说出来也没什么人会相信,但确实除了这个理由,我找不出其它的借口。仅仅是因为有一天中午睡午觉前江江随口说了一句哪天一起去爬山吧。本来说好大概有十来个人,一起去爬莲花山,放风筝打牌,晚上去泡吧。晚上的时候,宣宣发短信说可以周六去她家玩,提供晚饭和水果。  结果周五的时候,疯丫头发了个茂业打折活动的邮件,有几个人就闹着要去逛街,我再次发邮件问还有没有人活动时,就没人回了。晕倒,而江江和bobo那天刚好请假了不来,我只好遗憾地宣布活动cancel。中午吃饭时,疯丫头就在那里撒娇说要去宣宣家。我则已经兴味索然了。快睡午觉时,宣宣和疯丫头就来鼓动人一起去玩,结果还真说动了剩下的一些人。唉,美女跟男人的号召力就是不同啊,悲哀一下。  昨天早上8点便起了床,8点半出门坐车去梅林找疯丫头,果然说好是8:45的,一直等到9:20多才出来,我就有点生气,一边走一边也不说话,疯丫头说,你要是再不理我,我就回去了。我就开玩笑说,拜拜。她还真的调头就回去了,呵呵。这丫头,我只好折回去把她拉过来。跟宣宣约好要10点去买菜的,只好又打的,花了55块钱。花了点时间找到宣宣,4个人一起去买菜。买了好多东西,购菜车都装满了,我还两只手全提满了,买菜就花了250左右。  意外的是,本来说好买菜的4个人中午只是随便吃点泡面之类的东西就算了,下午1点半后去爬山。而那些家伙居然都不吃中午直接跑过来了,于是就开始做中饭。而小思宇给我打电话,说要一起爬山。时间刚好差不多,快3点的时候小思宇才跋山涉水地赶到,而那边则刚刚做完中饭开吃。吃完饭,那群人就一个两个地想罢工躲在家里,没几个人想爬山。小思宇说她是专门赶过去爬山的,于是我就义无反顾地背上包要出门。后来也不知道怎么一说,那群人最后全都出来了。一共11个人,分3辆车打到海关登山口,都是4点多了。下山后都是6点半了,天都很黑了。小思宇还想过去逛街抢购,最后看着天太黑了,放弃了。回到宣宣家,大牛又当了一回大厨,做了整整一桌的菜。比中午的在丰盛多了,两条清蒸的鱼,多合我口味的,哈哈。

被人拍得不好意思了

  今天偶然说起我大学时写的几个小程序,什么窗口类观察器,进程管理等等,然后一个同事就在那里说牛x啊什么的,说得我都不好意思了。不过说实话,我倒真的不觉得周围哪个人牛的,呵呵,当然我自以为也不牛,不是谦虚,是实话。见不到牛人,也就自己也难以提高,真是一大遗憾啊!

我真的是太懒了

  最多只能集中精力半个小时,就坐不住了,就觉得头昏了。  良好的可扩展性,以及交由用户放任的自由,在有些类型的软件上,是一种很有吸引力的策略。这类软件一般说来面向的是比较熟练的电脑用户,比如你怎么也不能假设隔壁的阿姨会用Total Commander来管理自己的文件。  今天突发奇想又玩了一会儿doxygen,不知道哪里出错了,我试图document我的代码,但总是不照我想要的效果出来。不过我想还是要用用,这东东特别适合给代码作文档了。