不要莫名的匿名留言

我接受匿名评论。但是如果是给本人的留言,请让我知道你是谁,不然不好回复。比如在“Ubuntu9.10 is coming soon”那个帖子中,匿名留言:“有光盘没,我想装个玩玩”我真不知道该把光盘给谁。
留言的时候可以选择身份,没有Google帐户的可以写下名称,网址可以不写的。

Continue Reading

调整链接

今天整理了一下链接。桃子和芋头的Blog因为太久没更新,删了。桄欣界和乔三的Blog因为在墙外,也删了。
开源项目站的链接加上了。还有准备翻译聊斋,专门起了一个页。

Continue Reading

当郁闷变成纠结,纠结变成悲剧,我彷徨了

当郁闷变成纠结,纠结变成杯具,我彷徨了。好像这些都是天朝人民对坏心情的描述,但不同的时代措词也不一样。由这些近义词造出来的无数的人民的心声,就像滚滚长江浪,一层赶着一层,以致于我有点彷徨,有点不知所措。看来尘世果然普难,谁都有丝丝烦恼,当一个词不堪重负,盛不下那么许多人的不悦,就换了。

最近看到三个新闻,比较鼓舞。其一是新京报发的,讲计划生育的工作应该由怎么让人不生孩子,转变成怎么说服人生孩子。列出了成堆的统计数字,旨在说明京沪等发达地区人口负增长和社会老龄化严重。幼儿园和小学招不满甚至招不到学生。其二是电脑报发的,记者走访了直辖市、农村、沿海私立及内地城市公立学校,调查计算机教育情况。结果发现中小学计算机教育的诸多问题,其中一大问题就是城乡师资差异大,城里的孩子条件好,上机机会和计算机课时充分,村里的孩子则基本没机会上机,也学不到什么计算机知识。第三条是人民网发的,北京市从今年起公办学校的义务教育资源对外地学生开放,更直接的说法是外来务工人员子女义务教育阶段在京就读免收借读费。

把这三条信息结合起来,是一个好消息:新生人口高峰时期已过,原本紧张的教育资源压力降低,有望惠及欠发达地区的学生。可以预见的,未来十到二十年我国高等教育资源也将不再稀缺,这可能是中国走向教育全民化的一个开端。

Continue Reading

Linux的SCIM版天然码输入法的制作

从2002年开始一直在用天然码输入法,后来07年换了电脑,就没再用了。最近打双拼烦了,又想起来自己还用过天然码这样一个输入法。于是上天然码的网站找下载,发现根本没有更新。论坛里除了营销人员的置顶帖,只有一片骂声,主要是骂它不支持Windows7。

连Windows7都不支持,看来更无望在Linux上用了。于是上Google搜了一下相关的文章,huzi一篇《自制天然码输入法》的文章引起了我的注意。这位老兄用天然码的字典和拼音的词库制成了天然码的码表,然后用输入法生成器生成了自己的Windows天然码输入法。有了码表,那么制作Linux输入法也就可能了。马上动手!

先去天然码的网站下载字典,发现已经不提供下载了。突然想起天然码首页有个查字功能,可以自己写一个程序遍历一下GBK字库反查出编码来。随便查了个字,网站报Microsoft JET Database Engine错误,(*@#&@,晕死。

没有字表,词表也不能生成,失败!

于是另想办法,先下载安装天然码的天码行空版,然后用UE以16进制打开C:\Windows\system32\trm32.mb,发现码表文件中词对应关系是GBK编码明文。只是在mb文件中还有很多的00、ff等字符,必需去掉才能成为纯文本。这个简单得很,马上写一个C程序

#include "stdio.h"
int main(int argc, char **argv) {
    char c;
    char cn;
    while(1) {
        c = getchar();
        if(c == EOF) {
            cn = getchar();
            if(cn != EOF)
                c = cn;
            else
                break;
        }
        if(c == 0x00) c = 0x0a;
        putchar(c);
    }
    return 0;
}

保存为conv.c,编译,运行,把trm32.mb的所有00替成换行符,所有FF去掉。

cc -o convert conv.c ./convert < trm32 > trm32.txt

然后用文本编辑器打开trm32.txt,去掉开头的输入法描述部分。再观察码表正文,居然是前置编码,还省略了首字母。于是用正则替换整理,让字和码同行。正则查找([0-9a-z]*)\n替换成\n\1。再去掉连续的空格[ ]{2, 100}替换成空字串。

接下来就是补齐首字母。观察码表,发现每个单键码字首部都有一个空格,于是再写一个C程序来补首字。

#include"stdio.h"
int main() {
    char s[50] = "";
    char *t = "123456789abcdefghijklmnopqrstuvwxyz";
    int i = 0;
    while(gets(s)) {
        if(s[0] == ' ')    i++;
        printf("%c%s\n", t[i], s);
    }
}

编译运行于是得到天然码的完整码表。再另存为成UTF-8编码,然后用scim-make-table把五笔的scim-table首部描述抄过来。用uuidgen自己生成一个uuid,把该改的全改了。然后用scim-make-table作成trm.bin,拷到scim的tables目录。重启,成功。

Update 6/20/2013: 想要码表的朋友可以访问我的GitHub项目,三维天然码的编码方案受中国专利保护(专利号CN95100877.3),码表仅供个人研究和使用,不可用于商业用途。

Continue Reading