2009-09-16

怪梦

这几天可能有点用脑、用眼过度 -- 每天还没下班肚子就很饿,眼睛酸痛,感觉很累。此外,两个耳朵的耳孔似乎肿了起来,有点疼 -- 这可能是秋凉的缘故。嗯,牙齿是不疼了,这回耳朵又蹦了出来。

昨夜做了个奇怪的梦 -- 仿佛身在乱世,并且被羁押在某处。后来有一天,说要把我们放走,于是来了一个科技球 -- 对,星际争霸里面的形状。不同的是,该球缓缓打开,里面又飞出一颗小球,它就是我们的飞行工具。它打开了舱门,现出荷枪实弹的两彪形大汉(有点像美剧里面的黑人保镖)守在门口。我们走进去后,它就起飞了,并且是超光速飞行,可惜却怎么也体验不出异样的感觉。

飞船将每个人送到各自的目的地,轮到我之后才知道会被就地枪杀 -- 好像整个过程就是要在外星系将我们处死。我想躲,可是身不由己,还是扎扎实实的中了两弹 -- 没有感觉到疼痛,也没有感觉到死亡,只有刹那的惊醒,然后再次惊醒 -- 原来我在梦中做了个噩梦。

标签:

工作札记 (10)

花了三天堆积了200多行elisp代码,这样我可以用它在v2的基础上自动生成v3的头文件和实现代码。 写这些elisp代码的时候深切体会了代码风格(coding style)不一致造成的麻烦,并再一次体会到软件系统构架和API设计的重要性。代码风格的不一致导致解析源代码的时候多出许多分支逻辑,而退一步讲,如果v2的API设计的很好,这200多行代码可以再减少很多。

我把自己的TeX文件迁移到CJKutf8后,萌生了一个念头,就是调整那些文件的排版,尽量减少LeTeX的警告信息。看了生成出来的pdf文件,刚好有一页是讲述当初为什么学 elisp -- 随心所欲的操纵 emacs。 不经意之间,三年前的决定产生了一个比较好的回报。 可能有许多东西并不和工作内容有直接联系,比如elisp和scheme。 但是我的第一个业余的代码生成工具是用scheme写的,生成和项目相关的代码 (后来用Ruby/ERb重写了,并在组内作了个讲座 -- 如果坚持 scheme 的话, autogen 是个不错的工具); Elisp 也是 -- 虽然和项目使用的语言无关,但是我可以用它生成我们需要的代码。 这样想来,现在学 Haskell 将来用到它的机会也不会很渺茫。

写到这里,我又想起曾经三分钟热度向MM极力推销 SICP,不过后来不了了之了。

标签:

2009-09-14

The connection has timed out

这两天gmail似乎无法访问,一直显示超时(gtalk可以访问),不过刚刚还原了hosts文件后就都OK了。

江湾体育场内歌声震天,乃是“黄河大合唱”,不知道这算不算“扰民”,而修改hosts文件也是因为以前的某段特殊时期而做的人肉DNS。

标签:

2009-09-11

CJKutf8

以前用latex(teTeX)排版中文文档基本上用的是老办法: latex + cjk + gbkfonts。后来重装了系统后,硬盘上用gbkfonts从微软simsum.ttf等生成的字体也都没了,于是编译tex文件总是提示字体丢失。

teTeX已经停止开发,现在大多数Linux发行版采用的是texlive,而且也自带了一些字体:
# apt-cache search latex-cjk-chinese


实际上texlive里utf-8已经支持的比较好了,再也不需要GBK了,简单的文档如下:
\documentclass[12pt,a4paper]{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{gbsn}
这是一个测试。
\end{CJK*}
\end{document}


于是手工修改已经存在的tex文档,但是有的文件在编译的时候没问题,再次编译生成目录的时候会报错:
\GenericError {(inputenc) } {Package inputenc Error: Unicode char \u 8 ...


搜索了一把,这应该是latex-cjk的bug,解决办法可以参考如下链接:

http://lists.ffii.org/pipermail/cjk/2008-April/002218.html

标签:

2009-09-09

Elisp to Rescue!

这些日子开始做一个简单的代码生成工具 -- 听着很炫,其实很思想简单 -- 就是用一些(脚本)程序修改老的C头文件,并自动在源代码中修改相应的实现。修改头文件相对简单,用sed就可以了,因为现有API的名字有明显的模式可寻,而修改C源代码则相对困难,这是因为大家的实现方式并不一致。姑且不论对代码的解析,仅仅是用sed/awk之类的工具去做块编辑便很难得心应手。

生活中总有一些事情可以激发一点点灵感。昨天因为写错了一个自定义类型的名字,一段代码花费了我半个多小时的调试时间(为了通用,它藏在两层macro之中),于是想如果能把这些自定义类型加入vim/emacs的语法高亮,这样可以比较方便的看出来。接着便配置了vim/emacs去做这些事,配置emacs很简单,在c-mode-hook里面设置一下c-font-lock-extra-types即可。

我突然想到,为什么不重用cc-mode来做代码生成呢?Emacs提供了编辑功能,cc-mode提供了足够的c/c++语法解析,而lisp天生便用于符号操作,用elisp去操纵c/c++代码实在是再适合不过了!

另外,如果我们的代码能做到简单一致(Simple & Consistent)那该多么美妙!可惜这已经是奢望了。

标签: