流水帐

Sat 17 September 2011
  • 自话 tags:
  • Life published: true comments: true

最近没有什么特别值得一提的事情,或者说都还在进行中还没有到值得一提的时候。

中秋节休息之后的第一天清早去驾校考交规理论,这个事没什么可说的,除了在4sq上又拓展了一点疆土,后来我又后悔没把GPS带着错过了一些还没有数据的道路。倒是那天去和回分别坐错了车,想十年前本人对城市交通网络了然于胸,除了视力不好把48路看成46路就没有坐错过车走错过路。结果现在公交线路的数量翻了一番,城市的交通网络也更复杂了。人脑则不具备scalability,活地图的时代一去不复返了。

第二件值得一说的是我在VirtualBox里成功安装了ArchLinux和GNOME Shell桌面。我工作的机器是有点古老的Dell OptiPlex 760,显卡还是ATI的Radeon HD 3420。为了开发的方便,我们装的都是CentOS 5,没错是5!!这周上班后升到了8G内存我就开始琢磨开个虚拟机体会一下现代生活。多余的不说了,几个注意事项:

  • Host要装ATI的fglrx驱动,xorg-x11-drv-ati直接也能用,但是性能非常差
  • VirtualBox要在4.0.4以上,我看网上说的,具体能个版本也不知道,但是用最新的就可以
  • 3D加速要开,在虚拟机的设置里
  • 最最重要的一点!不要从虚拟机的菜单里安装Guest Addon,那个对Arch不管用。要用pacman安装仓库里,包名我忘了,请自行-Ss
  • 别忘了把rc.vboxadd加入rc.conf的Deamons里

这周最诡异的问题是在配Netty的Pipeline时,我用了:
[cc lang="java"]
Channels.pipeline(new HttpMessageDecoder(), new HttpMessageEncoder(), myhandler);
[/cc]

结果稍微上一点压力居然出现了很多decoder异常,什么包不全、头不全、空指针什么的。不明真相最后改用例子里的:
[cc lang="java"]
ChannelPipeline cp = Channels.pipeline();
cp.addLast("decoder", new HttpMessageDecoder());
cp.addLast("encoder", new HttpMessageEncoder());
cp.addLast("handler", myhandler);
[/cc]

就成功了。也许是顺序的原因也许是名字的原因,可如果这个名字真的具有意义的话为什么没有常量可用呢?不去追究具体原因了,记住就好。

此外遇到的bug还包括clojure中transient数据结构的问题,我有一个transient的map,但是persistent之后发现只有前9(依稀好像是)次assoc!的内容保存了,后面却都丢失了。1.2里的transient都被标记了alpha,不过印象1.3的changes里好像也没提transient。

另一件与clojure有关的诡异事件是一个test case的failure report:

FAIL in (test-read-job) (wal.clj:61)
expected: (= (job k) (rjob k))
actual: (not (= "tomcat" "tomcat"))
不过最后好在是冤有头债有主,睁着眼有时也要说下滑。在从stream中读字节流多读了一个byte,后来用这一组byte去new String的时候,就变成了一个不可见字符。结果在命令行里的输出就是这么骇人听闻,还是在IDEA里跑这个测试才发现错误的那个字符串后面跟了一个方块。至于为什么多读了一个byte,copy/paste害死人啊。

以上这些牢骚是关于clojure的,但是这篇就不加clojure的tag了,否则被planet clojure收录去我又给中文世界丢脸了。

周五晚上我又更新了sunng.info的首页,以后也许我会定期的放一些得意的照片(或者照片上有得意的东西)上去做背景,以免被人看到后发现太单调乏味。

最后还要感谢一下twitter网友Kymair这周将Rage Viewer部署到了Heroku上。