Categories

Calendar

September 2010
M T W T F S S
« Aug    
 12345
6789101112
13141516171819
20212223242526
27282930  

Display Equation with MathJaX

之前一直用一个 LaTeX 的 WordPress 插件来显示公式,插件的工作原理很简单,把公式用 LaTeX 编译为 dvi ,然后用 dvi2png 之类的工具转换为图片,最后根据公式的文本内容算出一个 Hash 值,作为图片的文件名,缓存起来,下次遇到需要显示同样的公式的时候,如果文件已经存在的话,就不重新生成一遍了。

Disable TRAMP on Windows

TRAMP 是 Emacs 的一个很重要的组件,可以用于无缝地处理 ssh 、ftp 等远程文件编辑(甚至远程编译、调试等),还包括本地的 sudo 编辑文件等,总之是一个很强大的组件。今天要写这篇关于禁用 TRAMP 的文章,让我一时觉得真是光阴荏苒。

第一是关于 Emacs ,因为我实际上已经好久没有用 Emacs 了,有时候发现不知为什么好像在有意无意地避开它。不过最近编辑 LaTeX 文件比较多,尝试了很多编辑器,最后还是忆起 Emacs 的 cdlatex.el 最趁手,用其他的编辑器来写 TeX 简直就是体力活,所以即使在 Windows 下,也还是决定再启用 Emacs 。第二是关于 TRAMP ,我曾经是很喜欢这个东西的,因为它确实是很好用,如果在中文 Google 上搜索 Emacs TRAMP 的话,第一条的结果依然还是我很古老的那个 blog 上 4 年前的那篇半翻译半整理的文章。

解决 Matlab MEX 编译时 GCC 版本的问题

在 Matlab 里使用 mex 来编译 C/C++ 代码失败,这个问题算是困扰了我好几个月了,主要是我的环境比较恶劣:系统是 Arch Linux ,感觉这个系统比较喜欢追求最新版本,比较无视老版本软件的兼容性问题吧。再加上系统是 64 位的,出现各种兼容性问题似乎也觉得是理所当然的,然后像 Matlab 这样的软件通常使用较老版本的 GCC ,而 GCC 更新的时候又做了一些大改动,总之结果是我每次试图编译的时候都得到类似这样的错误:

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.2/cc1: /opt/matlab/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.11′ not found (required by /usr/lib/libgmpxx.so.4)

因为 GCC 新版本里把 GLIBCXX_3.4.11 这个符号去掉了,所以挂掉了。搞得我每次需要运行 mex 编译的代码都要放到另外一台 Windows 机器上跑。也 Google 了很多次都没有找到解决方案。今天一怒之下用了最暴力的方法:/opt/matlab/sys/os/glnxa64/libstdc++.so.6 其实是指向该目录下的另一个文件 libstdc++.so.6.0.9 的软连接,我将他改成指向系统里的新版本的 libstdc++:/usr/lib/libstdc++.so.6.0.13 ,结果问题解决了。那个目录下还有一个 README ,说了这几个文件是从 GCC distribution 里拷贝过来的。于是这样用新版本覆盖应该不会有太大的问题吧? 至少目前还没有出什么问题的。

Growl for Windows meets GreaseMonkey

最近学校的 CC98 论坛简直慢得令人发指,总是让我感觉又回到了蓝田时代——洗完脸刷完牙回来了一个页面还没有打开。加上考试周到了,又特别喜欢灌水,所以老是想去刷新页面看有没有新帖子,其实主要也是看的俱乐部水楼、晚安楼之类的地方,不过每次等半天页面终于出来了,发现没有新帖也觉得相当浪费时间和感情。想起 quark 之前有做过一个监视 98 的新帖子,然后用 notification-daemon 给出提示的东西,于是我想也做一个类似的东西好了,让它自己在后台刷新,网络慢点也没有关系,至少我不用一直等在那里了,有新帖的时候再关注一下好了。

不过在 Windows 下没有 notification-daemon 可以用,而且诸如 Python、Ruby 之类的脚本在 Windows 下跑起来都觉得相当别扭。记得之前看过一个叫做 Growl for Windows 的东西(这家伙的缩写真有点那个……),好像就是 Mac 下的那个 Growl 的 clone 。于是去仔细看了一下,似乎支持一套标准的协议,而且各个语言的 binding 都很全。

Duplicate Elimination in Scrapy

之前介绍 Scrapy 的时候提过 Spider Trap ,实际上,就算是正常的网络拓扑,也是很复杂的相互链接,虽然我当时给的那个例子对于我感兴趣的内容是可以有一个线性顺序依次爬下来的,但是这样的情况在真正的网络结构中通常是少之又少,一但链接网络出现环路,就无法进行拓扑排序而得出一个依次遍历的顺序了,所以 duplicate elimination 可以说是每一个 non-trivial 的必备组件之一,这样就算在遍历的过程中遇到环路也不用怕,排重组件会检测到已经访问过的地址,从而避免在环路上无限地循环下去。最简单的办法也就是每次抓取页面的时候记录下 URL ,然后每次抓取新的 URL 之前先检测一下是否已经有记录了。不过,通常我们并不直接按字符比较 URL ,因为那样通常会漏掉许多本来确实是重复的 URL ,特别是现在动态页面盛行的情况,例如在 cc98 (ZJU 的一个校内论坛)上下面几个 URL 路径是等价的:

让 trackpoint 的 middle-click 与 scroll 共存

Thinkpad 上的小红点(Trackpoint)一直是让人爱不释手的东西,使用起来非常方便,也不像触摸板那样经常会不小心碰到,另外,用 trackpoint 还可以很方便地模拟滚轮操作,在 Windows 下,只要安装了 trackpoint 的驱动,就可以在控制面板里设置滚动了,设置好以后只要按下中键,然后移动 trackpoint 就可以实现像上、下、左、右四个方向的滚动了。不过其实我一般是不用这个功能的,有些程序(比如 Firefox)本身就支持中键点击启动滚动,无论是 trackpoint 还是普通的鼠标(不过工作方式有些不同,有些时候,如在 Google Reader 页面上不太好用),当然,最大的原因还是启用了这个驱动之后原本的鼠标中键功能就丧失了。例如,在 Firefox 里可以用鼠标中键点击在后台打开新标签,或者中键单击关闭标签等,都会变得不可用。如何同时使用滚动和中键的功能,我 google 了很久都没有找到满意的答案。

不过我后来发现在 Linux 下倒是可以很方便地办到这一点,创建一个文件 /etc/hal/fdi/policy/mouse-wheel.fdi ,内容如下:

SSH tunnel tips

从我两三年前接触 SSH 的时候我就在文档上见过 SSH tunnel 相关的东西,然而当时没有怎么看明白,也就一直没有深究,直到最近需求越来越多了,才终于发现这个东西原来这么有用,于是记录在此。

SSH tunnel 主要有三种,一种是 dynamic application-level port forwarding ,可以用来作为 SOCKS proxy ,通常翻墙就是用的这种端口映射;一种是 Local Forwarding ,主要用于提供常规的加密隧道,例如让 IMAP 协议通过这个加密隧道,避免密码在网络上被人监听到;一种是 Remote Forwarding ,可以用于逆向穿透 NAT 。其实,另外还有一种专门为 X 打造的 X11 Forwarding ,一般不会用到,Linux 下远程登录通常不会需要开启 X 程序,或者有其他更好用的方法,因此我们这里并不打算介绍这个。

Symlink with Directories

Linux 下的软链接 (英文通常称作 symbolic link, soft link 或者是 symlink) 是非常实用的东西,我想任何经常在 Linux 做事情的人都会时不时地会用到这个东西。相比起硬链接来说,它要更加灵活一些,限制也更少,而相对于 Windows 下的那种“快捷方式”来说,它又更加底层一些,处在文件系统层面,很多操作(例如打开文件 open )都会自动 follow 链接到指定的文件,因此它对大部分应用程序可以说是完全透明的。虽然如此,也有一些特殊的地方对于把 symlink 当作“自己本身”来处理还是当作“它所指向的源文件”来处理却并没有一个定论的。

让 Linux 下的 FTP 服务器支持 GBK 编码

在 Linux 中使用 UTF-8 作为 locale 已经成为理所当然的事,而 Linux 下的许多 FTP server 并不会处理文件名的编码,因此 UTF-8 的 locale 使得 FTP 服务里的文件名编码也是 UTF-8 的,原本都使用 UTF-8 是一个很好的解决方案,也是一个大趋势,然而 Windows 下有许多程序却只支持 GBK 这一系列的编码,或者是根本没有考虑编码的问题,因此也只能处理 Windows 默认的 GBK 编码了。所以在 Linux 下架设的 FTP 服务器让使用 Windows 的朋友来访问的话,中文可能会出现乱码,就显得不太友好了。为此也有不少解决方案,其中包括针对 vsftpd 的补丁,可以进行编码转换。然而这个补丁对于现在的 vsftpd 的版本来说有点老了,而且在 64 位的系统下面的错误:

Poor Man’s Picasaweb Photo Uploading Script

虽然不太常用网络相册,但是有时候也会把照片传到 Picasaweb 上作为一个备份。如果安装了 Picasa 的话可以很方便地上传,另外,也有为 IE 做的 ActiveX 控件可以方便地批量上传照片。但是 Linux 下地 Picasa 据说是用 wine 模拟的,不想用,而浏览器也没有 ActiveX 可以用,手工一个一个地上传颇有一些麻烦。后来发现 Google 其实提供了它的各种服务的 API 的 Python binding 可以比较方便地使用,这样就可以弄一个脚本来上传了。