Archive for the ‘Linux’ Category

用 dvipng 来快速生成公式图片

Tuesday, October 28th, 2008

LaTeX用 LaTeX 可以生成漂亮的公式,这是众所周知的。但是并不是总是会用 LaTeX 来做整个文档。例如,虽然我也用 beamer 做过 slides ,但是我还是觉得用 PowerPoint 或者类似的工具可以更方便地做出漂亮的幻灯片来。又比如我在写 blog 的时候想要插入一个公式,等等。这个时候我通常会临时建一个 TeX 文档,输入这个公式,生成出 PDF ,用阅读器打开,然后截图。虽然已经这样做了许多许多次了,但是其实这个过程非常无聊,而且我喜欢透明的背景,截图是白色的背景的话,有时候不能很好地融入到场景之中。

但是其实输出为 PDF 格式只是 LaTeX 文档的一种渲染方式,要得到一个透明背景的 png 其实也是非常方便的事情。我以前在用 Muse 做笔记的时候就有一个像 MediaWiki 那样的 latex 标签可以直接书写 LaTeX 公式,结果会自动转化为图片嵌入到生成的文档中去,效果就像这个页面显示的那样。

Read the rest of this page »

Notes: How to make a patch

Friday, August 1st, 2008

虽然现在各种版本控制工具大行其道,但是有时候还是需要使用相对原始一些的办法提交补丁,制作补丁其实很简单,用 diff 命令,加上 -u 参数生成带有上下文的 unified 格式的 diff 文件,就是一个 patch 了。可是最容易忘记的地方就是后面的参数是先写未修改过的版本呢还是先写修改过的版本。我自己每次都记不住,要去查 man page 。正好今天收到一个 patch ,发现里面的修改都是反过来的,大概也是参数写反了吧。 ^_^ 所以我终于决定把正确的用法记下来:

diff -u original new > original.patch

希望自己能记住,就算记不住也能方便地在此查到。 :)

Read the rest of this page »

差点把自己的主目录删掉了

Friday, June 6th, 2008

我一直很讨厌 rm 命令的 -i 选项,一般删除目录都是直接 rm -rf 的,所谓“常在河边走,哪能不湿鞋”,今天差点把自己的主目录给删掉了。

本来是在试用 blueprint ,它的配置文件里面可以指定路径,谁知道它并不展开 ~ 为主目录,运行几次都没有反应,后来我改为绝对路径,才正常了。偶然发现它在当前目录生成了一个叫做 ~ 的目录,真是有些哭笑不得,立马 rm ~ 删除,结果出错了,我根本没有仔细看错误信息,心想:哦!对,这是一个目录,不能这样删。于是我又习惯性地键入 rm -rf ~ ……

过了大约 1 秒钟,没啥反应,我在想这个目录应该很小吧,怎么会删这么久?又敲了一个回车,然后突然反应过来了,难道它在删我的主目录?!立马 ^C 停止了!

2008-06-06-rm-rf.png

赶紧 ls 了一下,似乎应该在的东西都还在,算是虚惊一场,不过以后真得注意了。但是如果这次真的没有什么东西被删掉的话,那两秒钟的时间它在干什么呢?难道是 permission denied 救了我?

git status in shell prompt

Thursday, April 24th, 2008

When I see the post “Current Git Branch in Bash Prompt” from reddit, I found it really a cool idea. Personally, I use zsh, though that post is about bash, adding similar thing to zsh is pretty easy!

My zsh prompt is already pretty cool in my opinion. I borrowed something from Phil!’s ZSH Prompt, but I prefer a much cleaner style. Here’s what it looks like normally:

normal.png

It shows the current username and current working directory. I don’t like the full path of cwd shown in the prompt because I don’t care about it most of the time. Note the title bar below is not really irb, it’s the Screen status line. :p

Read the rest of this page »

Rsync without any configuration!

Saturday, March 22nd, 2008

Rsync 是一个在不同的机器之间拷贝文件的极佳的工具,由于它可以对文件进行增量传递,所以速度会比较快。不过它并不像版本控制软件那样要在本地记录版本信息,用于计算 diff ,似乎是在本地和远程都不会附加任何额外的“元信息”的,如果你感兴趣,可以去看一下它的算法和技术报告。其实我也比较感兴趣。 :)

不过几乎所有介绍 Rsync 的文章都会说先安装 rsync ,然后配置 /etc/rsyncd.conf ,云云,一堆麻烦的东西就出来了。我只想要一个 quick and dirty 的 scp 的替代品,该怎么办呢?又仔细看了一下文档,试验了一番,发现 rsync 也可以完全不做任何配置,只要在远程服务器把 rsyncd 服务启动起来。就可以直接通过 ssh 进行连接了:

rsync -avz --exclude '.svn' doc \
      pluskid.lifegoo.com:~/public_html/upload/project/yasnippet/

简单快捷! :D 当然前提是你自己的 ssh 设置好了的。

Emacs 23 prebuild deb package

Wednesday, February 6th, 2008

Emacs 的 unicode branch 前日 merge 到 trunk 中了,brep 编译了一个 for Windows 的版本供下载Emfox 做了 amd-64 的预编译 deb 包,我用它那里的源码和元信息编译了 i386 平台的 deb 包,放在这里。Enjoy! :)

/usr/bin/env: ruby -ws: No such file or directory

Thursday, January 31st, 2008

起因

我试图用 sow 工具来创建一个 gem ,但是当我执行 sow 的时候却得到了一个错误提示:

$ sow rmmseg
/usr/bin/env: ruby -ws: No such file or directory

经过

这是为什么呢?我首先找到了 sow 脚本的位置,发现它第一行的 Sha-Bang 如下:

#!/usr/bin/env ruby -ws

我立即尝试在 shell 下输入 /usr/bin/env ruby -ws ,发现一切正常,再创建了一个具有同样 Sha-Bang 的脚本,直接执行,却又同样的错误。这是为什么呢?

Read the rest of this page »

让 secureCRT 和 OpenSSH 共享 Private Key

Wednesday, January 30th, 2008

TerminalsecureCRT 是 Windows 下一款非常优秀的 SSH 客户端软件(商业软件),目前它的最新版本是 6.0 ,从 5.5 版开始支持 OpenSSH 格式的 Private Key ,并可以把它自己的 Private Key 转换为 OpenSSH 格式。

OpenSSH 是 Linux 下广泛使用的 SSH 程序。我自己在前一段时间广泛使用的一对密钥是通过 secureCRT 生成的,最近需要在 Linux 下也使用密钥的方式进行 SSH 连接,维护多对 SSH 密钥是比较麻烦的事情,而且容易搞混,可是私钥格式并没有统一标准,各个程序之间的格式通常是不兼容的。

在网上搜索了一下,发现 secureCRT 从 5.5 开始支持 OpenSSH 格式的私钥了,当然,为了避免重新生成一对密钥,它还有把 secureCRT 格式的密钥转换为 OpenSSH 格式密钥的工具,这下就方便多了。

下面是转换步骤:

Read the rest of this page »

no such file to load — mkmf

Wednesday, January 16th, 2008

在 Debian 这样有强大的包管理系统的发行版里面,通常会有许多地方和已有的插件管理系统有重叠,例如 Ruby 的扩展(gem)、Firefox 的扩展等等,用哪个管理系统就是仁者见仁了。全部都用系统提供的管理系统当然保证了统一性,更加方便。但是特定的管理系统通常更全更新。例如 Ruby 的话,安装扩展的时候我通常都是通过 gem 直接从 RubyForge 上安装的。

如果 Ruby 本身是通过 apt-get 安装的,然后通过 gem 来安装某个扩展时需要编译的话(例如 Hpricot 或者 Ferret 等),会出现如下错误:

/usr/bin/ruby1.8 extconf.rb install ferret
extconf.rb:11:in `require': no such file to load -- mkmf (LoadError)
        from extconf.rb:11

由于 mkmf.rb 并没有包含在 Debian 的 Ruby 包里面,需要安装相应的 dev 包,这里就是 ruby1.8-dev 了。装上之后就不会有这个问题了。

当有虚拟机在运行的时候阻止 Windows 关机

Sunday, January 6th, 2008

我经常在后台开一个虚拟机运行 Linux ,而几乎每次关机的时候都忘记了还有一个虚拟机在运行,导致 Linux 非正常关机了。所以我写了一个小程序来防止这种悲剧继续发生:在关机的时候检测是否有虚拟机在运行,有则阻止 Windows 关机。

广告时间

在介绍我的小程序之前,我实在是忍不住要对我现在用的虚拟机和虚拟桌面广告一番了! :p VirtualBox 是一个很不错的虚拟机。和老牌的 VMware 对比,也有许多优点:

  • VirtualBox 可以免费使用,而且还有一个开源版本。而 VMware 是商业软件,虽然 VMware Player 可以免费使用,但是有一些不便之处(比如无法直接创建虚拟机,需要用一个第三方的在线工具)。
  • VirtualBox 性能卓越,许多人都说用它跑虚拟机跟在本地跑一样,比 VMware 的性能还好,更不用说开源的 qemu 了,但是这是牺牲了 host OS 的性能为代价的。我自己的感觉是确实速度很快,但是并没有发现 host OS 会因此而变得很卡,只有当 guest OS 里面在做什么密集计算或 IO 之类的(比如安装操作系统),才会出现 CPU 占用 50% 的情况(我是双核 ;) )。
  • VirtualBox 附带的工具在 Linux 下轻松编译。包括虚拟显卡驱动、共享文件夹、虚拟网卡驱动之类的内核模块在最新内核下很容易就编译过了。相反,VMware 提供的源代码在最新内核下根本编译不过,网卡驱动要打过补丁,但是共享文件夹又出问题了,总之是很麻烦的。
  • VirtualBox 很 “lightweight”。VirtualBox 1.5.4 的安装文件 17MB ,而 VMware Workstation ACE 6.0.1 的安装文件 300+MB 。VMware 安装好之后默认会建立两个虚拟网卡,而 VirtualBox 不需要建立虚拟网卡就可以用 NAT 方式上网。通过端口映射的方式访问 guest OS 的 ssh 端口速度飞快。
  • VirtualBox 的窗口能自动捕捉和释放鼠标和键盘,而 VMware 需要手动点击进入虚拟机中,还需要按 Ctrl+Alt 来释放键盘和鼠标。

当然 VirtualBox 也有它不足的地方:

Read the rest of this page »