脱胎换骨的 Zim

Zim 是一款桌面 Wiki 软件。很久以前曾用过它来写笔记,但是印象最深刻的是在 Gentoo 里安装它的时候,需要安装数十个 perl 软件包,因为它是使用 perl-gtk 开发的。最近,zim 发布了最新版 0.46,观察了一下它的源代码,发现居然是用 pygtk 重新开发的,对于 gnome 用户而言,此举可以省却许多依赖包的安装(因为 pygtk 及其周边软件包通常是 gnome 桌面所包含的)。

Posted by LiYanrui May 31, 2010 04:37:49 AM


freebsd + lighttpd + fastcgi + MoinMoin

最近重新整理了一下实验室的服务器,全新安装了 FreeBSD 7.2。比较郁闷的事情就是在 lighttpd 上重新配置 MoinMoin,以前做过成功的配置,但是升级系统时,忘记保存 lighttpd 的配置文件了。尝试了一段时间,总算又搞定了,这次得做个记录。

首先可以参考这篇文章安装并配置好 lighttpd 环境,然后就可以去 MoinMoin 的官方网站去下载 MoinMoin 的最新版本,目前最新的稳定版本是 1.8.5。

按照 MoinMoin 安装包内的 docs/INSTALL.html 文档的指点,将 MoinMoin 基本安装以及 Wiki 实例创建步骤都做完了,最后的环节就是配置 lighttpd.conf 文件,由于 INSTALL.html 文档在这部分语焉不详,并且我对 Web 服务器的原理以及 lighttpd 的配置语法都不熟悉,让我茫然了好大一会。翻来覆去,看了好几遍 INSTALL.html 给出的这段 lighttpd.conf 的配置代码:

$HTTP["host"] =~ "^(www\.)?example\.org" {
    url.rewrite-once = (
        "^/robots.txt" => "/robots.txt",
        "^/favicon.ico" => "/favicon.ico",
        "^/moin_static161/(.*)" => "/moin_static161/$1",
        "^/(.*)" => "/wiki-engine/$1"
    )
    server.document-root        = "/srv/org.example/htdocs/"
    $HTTP["url"] =~ "^/wiki-engine/" {
      fastcgi.server = ( "/wiki-engine" =>
        (( "docroot"   => "/",
           "min-procs" => 10,
           "max-procs" => 10,
           "max-load-per-proc" => 2,
           # allocate successive port numbers for each process, starting with "port"
           "bin-path"  => "/srv/org.example/bin/moin.fcg",
           "host"      => "127.0.0.1",
           "port"      => 3060,
           "check-local" => "disable",
        ))
      )
    }
}

不禁有点飘飘欲仙之感,因为这串代码对我来说简直如天书一般。连猜带蒙的,最后我是这么来理解的:

  • $HTTP["host"] 是用来设置虚拟主机的,就是那种多个域名共享 1 个 IP 的虚拟主机,那个 ^(www\.)?example\.org" 是采用正则表达式来匹配 www.example.org 这个域名。"=~" 就表示后面跟随的字串是正则表达式,对于非正则表达式,可以用 "=="。
  • url.rewrite-once 是采用正则表达式匹配的方式用来替换 "www.example.org" 后面所跟随的字串(即 url 字串)的。比如 "www.example.org/robots.txt" 所跟随的字串是 "/robots.txt",当它被 url.rewrite-once 中的 "^/robots.txt" 所匹配时,就会被替换为 "/robots.txt"。嗯,这里对于 "/robots.txt"、"^/favicon.ico" 以及 "^/moin_static161/(.*)" 都是替换为其自身,好像是在咬自己尾巴玩,实际上它们是为了让对应的三个 url 不被那个 "^/(.*)" 替换规则篡改。
  • server.documet-root 就是指定 MoinMoin 网页模板所在的目录,而那个 wiki-engine 是 MoinMoin 实例所在的目录。
  • $HTTP["url"] 是用来定义 fastcgi 服务器的,它也是采用正则表达式来匹配 "/wiki-engine/" 这个 url 字串,表示只要匹配通过的 url 字串所代表的页面请求都通过一个 fastcgi.server 来处理。
  • 在 fastcgi.server 的配置中,除了做一些平常的配置之外,最关键的在于指定 moin.cfg 文件所在的全路径。moin.cfg 是用来实现 MoinMoin 与 fastcgi 服务器相互联接的,它默认位于 server.document-root/../server 目录内,我们可以将它复制到 wiki-engine 所在的目录。

基于上述的理解,我对上述 lighttpd.conf 的配置片段进行了以下修改:

### M2WK MoinMoin
server.modules += ( "mod_alias" )
alias.url = ( "/moin_static185/" => "/usr/local/share/moin/htdocs/" )

$HTTP["host"] =~ "^192\.168\.0\.2" {
    url.rewrite-once = (
        "^/robots.txt" => "/robots.txt",
        "^/favicon.ico" => "/favicon.ico",
        "^/moin_static185/(.*)" => "/moin_static185/$1",
        "^/(.*)" => "/m2wk/$1"
    )
    server.document-root  = "/usr/local/share/moin/htdocs/"

    $HTTP["url"] =~ "^/m2wk/" {
        fastcgi.server = ( "/m2wk" =>
            (( "docroot"   => "/",
               "min-procs" => 10,
               "max-procs" => 10,
               "max-load-per-proc" => 2,
               "bin-path"  => "/usr/local/var/m2wk/moin.fcg",
               "host" => "127.0.0.1",
               "port" => 3060,
               "check-local" => "disable"
            ))
        )
    }
}

值得注意的地方是:我配置的服务器只是在内网中使用的,没有域名,所以 $HTTP["host"] 只能匹配服务器的 IP 地址了;需要启用 lighttpd 的 alias 模块,以便将 MoinMoin 所生成的网页中所使用的 "/moin_static185/" 路径映射到服务器本地目录。

配置完 lighttpd.conf 之后,还得对 moin.fcg 中的一处代码片段进行一些修改:

class Config(FastCgiConfig):
    # properties = {'script_name': '/'} # use this instead of the line above if your wiki runs under "/" url

    # for backlog, we use a default of 5. if the listen(backlog) call crashes for you, try a smaller value!
    # backlog = 1
    max_requests = 1000
    properties = {'script_name': '/'}  # <--- 必须有

 现在启动(重新启动) lighttpd 之后,在浏览器中输入服务器的 IP 地址,就应该能够看到 MoinMoin 的页面了,剩下的事情就是有关 Wiki 的配置,不再细说。

但是,这里有个费解的问题。通过上述方式配置好 MoinMoin 之后,当我重启 FreeBSD 时,通过 rc.d 的方式启动 lighttpd 会失败,等 FreeBSD 启动完毕后,通过手工启动 lighttpd,就不出错。

Posted by LiYanrui Nov 25, 2009 07:40:38 AM


Emacs 还真是古怪!

当我打开 Emacs 23 要写一篇文档时,发现 3 年前遭遇的输入法无法调出的历史又重演了,只不过那次是 scim,这次是 ibus。认真检查了一下 XMODIFIERS, GTK_IM_MODULE, QT_IM_MODULE 都很正常,locale 也没有什么可质疑的。先去 ibus 的 issue list 上逛了一下,没有发现类似病症……又去几个 bbs 里看了一下,看看近期是不是有人跟我一样人品不好……很孤独,似乎就我一个人这样!

深吸一口气,冷静……回顾一下这两天对 Gentoo 都干了些什么?

嗯,昨天先是更新了 portage,然后 `emerge -uDNa world`,再然后习惯性的 `emerge --depclean -a`,结果发现 xorg-x11 一直都依赖的几款字体要被清除,我还挺高兴的回车了,事后还挺严肃的 `revdep-rebuild` 了一下。

字体!我不禁想起当初折腾过的一件事情, font-cursor-misc 抑或 font-adobe-75dpi 导致的?测试后,发现装回以下 4 个包:

[ebuild  N    ] media-fonts/font-adobe-75dpi-1.0.0  USE="X nls" 0 kB
[ebuild  N    ]  x11-apps/bdftopcf-1.0.2  USE="-debug" 0 kB
[ebuild  N    ]  media-fonts/font-alias-1.0.1  USE="-debug" 0 kB
[ebuild  N    ]  media-fonts/font-util-1.1.1  USE="-debug" 0 kB

然后注销一下桌面(我用的是 GNOME,不知 KDE 会怎样),再进入桌面。迫不及待的调出 Emacs,CTRL+SPACE 一下,呃,ibus 又出来了!然后我就懒得再去细致的测试究竟是上述 4 个包中的哪一个对 Emacs 调出中文输入法有致命的影响了。

Posted by LiYanrui Nov 17, 2009 04:58:16 PM


Evince 终于可以支持批注了

这其实已经不是什么新闻了,只是因为它需要 >=0.11.0 版本的 poppler 的支持。而 Gentoo Portage 里把 poppler 的包拆出了问题,即使解决 >=poppler-0.11.0 的屏蔽,也是没法安装成功的,因为 poppler-utils 包的问题……总之是需要做一些手脚,才能把全套的 poppler-0.11.1 装上。

从 evince 的 git 仓库里编译了最新版本(2.27.3)。完毕后,兴冲冲地打开一个 pdf 文件,然后就是寻找添加批注的功能。事实证明,是找不到的。

我又窜到 Windows 里,用一个盗版的 acrobat 在一份 pdf 文档里添加了一个批注,然后再窜回 gentoo,用这个号称是开始支持批注的 evince 打开了这份 pdf,结果看到了这个:

现在可以耐心地等了,估计到 gnome 2.28 的时候,这个功能不会再跳票。

Posted by LiYanrui Jun 21, 2009 05:43:14 AM


让 Emacs 飞起来

许多憎恨 emacs 的人往往不是因为它的功能太强大了,而是因为它启动太慢。我曾经玩过一个字符界面的游戏——Word War vi,内容就是讽刺 Emacs 是内存怪兽的。估计 emacs 忍气吞声已经很久了。终于有一天,emacs 实现了一个有些笨拙的服务器模式——使用 M-x server-start 启动服务器,然后使用 emacs-client 进行连接——让它的 fans 们和机器可以轻松那么一下了。然而,真正让 emacs fans 们扬眉吐气的是去年 9 月(也许是 8 月,也许是 10 月,反正我不是考古学家)实现的 daemon 进程,它让 emacs 飞起来了。如果你也与我一样对此后知后觉,那么不妨来看我写的这篇文章吧。

Posted by LiYanrui May 22, 2009 02:40:46 AM


打算做这么一个东西

CoNote = PDF 文档阅读器 + 书籍管理 + 读书笔记工具

Posted by LiYanrui Apr 26, 2009 03:14:04 AM


去除 xorg-x11 所依赖的那一堆字体

我承认自己是有点洁癖。几日前,portage 移除了一堆 perl 包的依赖之后,我的 gentoo 中软件包减少了大概有 20 多个,然后又删除了一些不再使用的包。今天,趁着洁癖的余热未退,开始着手去除 xorg-x11 所依赖的字体包,这些字体包似乎是从 xorg-x11 7.4 开始被依赖上的。我可能一辈子也用不到这些字体。

Posted by LiYanrui Apr 23, 2009 04:06:17 AM


Evince 的 PDF 标注支持又要向后拖

Evince 主要开发者 Carlos 说:Annotations support is in our RoadMap since GNOME 2.20, and it has been the main goal since then. However, we failed in 2.22, in 2.24 and we are going to fail again in 2.26.

Posted by LiYanrui Feb 25, 2009 03:58:03 AM