All Stories

Lua脚本的一处用武之地

  今天突然灵光乍现,觉得这个输入法里可以嵌入Lua解释器,用来作些额外处理。当前想到的可以让Lua处理的事务主要是有些零碎的任务,比如将特定的组合字串翻译成另外的候选字串,比如在可以在词库中添加一条记录wygd,对应的五笔应该是“今天”,但在用户词库里多加一条记录对应是%%today,然后在匹配的时候发现%%,就取出后面的today,然后调用名为today的Lua函数,并把组合字串和当前的输入法模式作为参数传递给该函数,函数应该根据实际情况,返回诸如“2007年6月18日”之类的字符串,这样就可以扩展输入法的词库了,而这个词库里的内容是可以根据实际情况自动变化的,并且不需要修改输入法的源代码。不错不错,这是很好的一个使用Lua的场合啊。加入解释器后,Debug模式下ime文件是1MB左右,Release模式下是400KB,也不是很大,用UPX最高级压缩一下,可以减小到200KB左右,呵呵。

Windows开发不上msdn不行啊

  今天用WTL写一个输入法的辅助工具,到了后来,又发现Release模式下链接不了了,看来不是个别现象了,最后排查到,到了C++标准库,就会有问题,报符号定义冲突的错误。这次忍不住了,上google搜了一下,发现msdn论坛上一个帖子说,只要在设置工程属性的地方,把链接ATL为最小化CRT改成no就解决了,试了下,果然ok了。亏我当时还郁闷了一天就放弃了,看来在Windows下开发不上msdn不行啊,尤其是用VC了,就更应该上msdn的论坛了,难得有英文的这种Web形式的技术论坛,呵呵,都已经有点思维惯性了,以为老外只喜欢maillist或newsgroup的。  用WTL写了两个小程序后(都还没写完),觉得WTL真的不错,不过编译速度感觉有点慢了,不知道是不是因为这些天只是用来编译C程序,对速度的感觉已经被影响。但是生成的文件小巧啊,我到现在还没弄明白,到底什么时候,会链接进来那个msvc**71.dll之类名字的文件进来,反正这两个程序里都没链接进来,也许是因为太简单吧。  WTL形式上有点像MFC,一个窗口会有View类,一个对话框会有对话框类,然后有消息映射宏,宏里写上了对应的消息名字和消息处理函数名,再在处理函数里填上相应代码就行了。不过实质上,我也知道是极大不同的。

对C++Builder2007失望了

  自己可以弄到试用版的C++Builder2007来,花了好多时间,重装卸载了好几次,终于还是放弃了,怎么样都不行,总是在启动的时候报个错就退出了。真是失望啊!这样一来,也促成了我不写代码的借口,呼呼。  上午去百草园的社康中心看了看,好多人在体检,看个病还得预约啊!不过,医生说我只是咽液性囊肿,不要紧,总算放心了。  又改了两个输入法的bug,现在在msn messager里也能正常显示内容了,真是奇怪,有的程序就是不发消息过来,晕!想想五笔加加真是牛啊,这么多年前的东西,做出这么稳定、兼容性这么好来,不得不佩服啊!  总是嫌钱少,可是又没什么行动。我得打三份工才行啊!

有时候有点高估自己

  话说当时,自以为5月底能全部做完的事情,其实直到今天都没有完全完成。不过总算总的框架搭出来了,绝大部分应该有的功能也都有了,剩下的就是修修补补了。但再想想,更多的时候,是很没自信,那些功能的代码也写完了好多天了,但一直都没信心,连运行一下都不敢,生怕有什么问题。这是一种病态的心理,而且这样对于事情的发展没有丝毫的好处,显而易见的是各种坏处,躲得过初一躲不过十五,总归要做的。昨天把一个重要部分重构了,真是爽快啊,以后有些东西的修改,只要改一下外部的配置文件就行了,不用改代码重新编译了。今天确认完成了另外一个重要部分的功能,也基本能用了,易用性方面还有待改善。  再来说说这个输入法。说到那个某些程序下候选窗口出不来的问题找到原因后,异常兴奋,至少这个输入法已经从不可用,变为偶尔可用一下的地步了。到今天,又找到了另外一个严重问题的原因。有时候词库会乱,是因为词频调整部分没仔细,很容易遇到写乱的情况。另一大进步是,总算搞清楚了几种词库格式,可以写个词库维护工具了,呵呵。

觉得自己挺可怜的

  被一个老大叫去讨论什么东西,唉,反正很头大,夹死人的事。结果到后来我也没力气说了,他也小声说了,再后来我走到自己的位子上,发现怎么天都黑了,我都还没反应过来,看看周围也很安静的样子,也还是没反应过来。同事们见到我很奇怪,还以为今天有什么事,我才反应过来,已经7点多了,我还没吃饭。  今天就觉得很丧气,觉得自己挺可怜的。然后想着随便找个人一起过,就这样庸庸碌碌过一辈子算了。

本输入法的重大进步

  经过查看DDK中的IME源代码,学习了一下后,发现有一个办法可以算是避规那个在某些程序中显示不出候选窗口的问题。只要在接收到某个通知的时候,强制移动一下候选窗口就可以了,不过光标跟随问题没有解决,它只能固定地停在一个位置,不过也已经算是重大进步了,哈哈,真是开心啊。可以搞一下词库以及内部表示的问题了,不时地出现一下词库乱掉的问题,很恼火的!

我是个换肤论者

  “换肤论者”,呵呵,这个名词是在公司内部一个论坛上看到的,说的是一位同事说sogou输入法可以换成好多不同的外观,然后下面就有另外一位同事说,原来是个换肤论者。现在我发现,我也是个换肤论者,上sogou的网站看看,有好多比较漂漂的皮肤,然后又看到像极点中文之类的五笔输入法也是可以直接支持换肤的,想我用的五笔加加就不行,虽然当年它刚出来时用的组合框和候选框合一的界面新颖大气,可是这么多年过去了,也看腻了。无聊了,于是打算把我自己在整的那个输入法弄成可以换肤的,呵呵,大概的样子就像sogou那样,可以让候选框使用不规则形状,其实是用一张图片加掩码来合成一个region,再设成窗口的形状。用google在codoguru上搜到一段代码,可以把一个bmp转换成region,太好了,直接套上,真的可以直接显示不规则窗口呀,好开心!不过昨天发现问题,先是大红色(RGB(255,0,0))的掩码不起作用,但粉红色(RGB(255,0,255))的可以,单步跟踪到那段代码里面,发现是GetRValue等操作的时候在对一个色彩值取值时好像顺序错了,于是自己改了一下,改成大红色的也可以了,但其实没改对。后来又发现,对于超过一定高度的图片,窗口只能显示出上面一部分,又找了好久,把一些有用没用的代码都删掉,还是没找到原因,一直搞到后半夜2点,弄得心力交瘁啊。今天回来一下,原来在每次重画窗口时有一个MoveWindow操作,里面把高和宽都写死了,高只写了个90,所以只要超过90个像素高度的图片来操作,都会有问题。然后又发现,有一张淡蓝色掩码的,也没有正确的合成region,再跟踪了一会,又是那边取色彩值的地方的问题,又改了一下,现在也可以了,不知道是原本代码中的问题,还是其它什么问题,因为代码中提供的示例程序,是用黑色(RGB(0,0,0))这样特殊的值来演示的,可能并不能很好地测试到。  关于在Firefox中不能显示的原因,所说是因为自由拼音输入法并没有完全按照IME框架来写的,所以有问题,难道我要去找DDK中的那个例子来看看,然后重新写了一个。  不过说实话,自由拼音中的结构真的有点乱,而且效率也不行,特别是词库组织方面,比较土。尤其是后来被另一位作者加了五笔功能,代码更乱,连用UNICODE编译都会有问题。真要好的话,真的不如好好学一下IME框架,能支持UNICODE从头开始写一个。  目前已知问题:1、有些程序下弹不出候选窗口;2、有时候词库会乱,要重新打开一遍输入法才行;3、有时候会引起程序死掉,今天在公司里用Word就碰到过,所以不能用于重要场合;4、拼音的词组词库有问题;5、有时候状态窗口也显示不出来;6、还有很多其它小问题。

去阿菲那里吃了顿

  真是赶啊,下班就忙不迭地跑去生产中心坐班车,跟估计的差不多,开了45分钟到了莲塘,然后又走了五六分钟路,才赶到吃饭的地方,xcc和他gf已经在了,4个人喝了一顿粥。

整那个输入法

  这两天在整那个输入法,很多是模仿五笔加加Plus来的,因为我的使用习惯已经深深地被五笔加加Plus影响了。把分号开头转英文,大写字母开头转英文弄了,把状态窗口也换了,不过真难看啊,呵呵。  只是有些程序中显示不了候选窗,一点头绪也没有。这个问题不解决,几乎可以说,这是个没用的输入法。