May
25
上周在一台联想的新机器上安装 Linux,最初是用一张自定义的 CentOS 5.2 netinstall disc,结果每次 usb-driver 加载结束的时候,都出来一屏乱码然后就没动静了,此时仅仅加载了内核,什么信息都没法看。于是我猜想是不是联想的隐藏分区在作怪,可是删除了之后依旧是一样的问题。不过使用另一张 redhat installation DVD 却可以正常地安装,安装结束后,终于知道了那屏乱码是啥原因——内核 too old, 不支持这个网卡。最终,安装了内核地 headers,然后在 Intel 网站上下载了驱动的源代码,终于编译出来这个 driver,可以上网了。不过后来欲安装图形界面的时候,又发现它完全不支持附带的 21′ LCD.
安装图形界面主要是想解决在该 server 上登录某 VPN 网络的问题。后来发现该 VPN server 提供了针对 debian 系列的 deb package 供安装,于是试试 Ubuntu,开始拿了一张 8.10 的盘,live cd 测试发现对屏幕的默认支持不太好,于是下载 9.04 刻录了一张,安装完成后,非常完美,VPN 果然可用,我只需静下心来配置我的服务器软件了。
Linux 的桌面,折腾好了可以爽一爽,但是折腾不好的话,会让你很郁闷,还是找个省事的好,呵呵。
May
12
在 unix 环境工作难免要碰到 vim. 我倒也经常用 vim 做一些简单的编辑,但是似乎没怎么写过大段的代码。今天有人想用它来写 ruby 的时候,我帮忙去找 ruby 相关的配置,很快发现 vim 本身就带了丰富的完善的 ruby 配置,只是默认没有 enable.
在几个 mac, linux 的系统中,我发现情况都是这样,可能是 vim 为了性能考虑?vim 安装时就带了许多的语法高亮、缩进等定义,分布在安装目录下的 plugin, indent 等目录中。只需要在你的 .vimrc 文件中加上这么一行:
filetype plugin indent on
vim 在打开文件中就会根据文件类型选择不同的缩进方式。试了一下 ruby 的缩进,非常棒。好像很多用户想用 vim 编辑某种语言程序时,都会在网上到处搜该语言的配置文件,拿到一个就 paste 到自己的 .vimrc 中试试,结果折腾半天也不好,遂放弃。
刚刚在 Google Reader 里看到一篇旧文,说 vim 的配置使用自己特定的语法是个硬伤,确实。上面简单的一个命令,如果没有看过一些 vim 的文档,谁也看不出它会起什么作用。许多人尝试 vim 好多次,好多次被吓跑。第一次可能是因为它的 mode 的概念,进去都不知道怎么编辑。第二次可能就是因为不会配置—— vim 的强大就在于它的可定制性,不会定制,就不能用了。
最后再补上几个 .vimrc 中必备的命令:
set nocompatible
syntax on
还有特别为某种文件类型指定 tab 以及缩进的配置,比如 ruby 的风格:
au FileType ruby setlocal expandtab
au FileType ruby setlocal tabstop=2 shiftwidth=2 softtabstop=2
au FileType ruby setlocal cindent
au FileType ruby setlocal smartindent
au FileType ruby setlocal autoindent
老实说,我也是个菜鸟,不过感觉上面这些东西对新手就够了。
May
10
计算机系的同学一定听说过“龙书”吧?编译原理的经典之作 – Compilers: Principles, Techniques, and Tools. 很幸运,我们当时的课本就是它。
刚才和同学聊到编译原理的好书还有“虎书”和“鲸书”时,他提醒我龙书已经出来第二版了 – Compilers: Principles, Techniques, and Tools (2nd Edition),让我比较吃惊。2006年出的,那时已经毕业了。做毕业设计的时候,老师就提到后来发展的许多新技术,龙书中都是看不到的,让我看虎书。现在应该好了:
Every chapter has been completely revised to reflect developments in software engineering, programming languages, and computer architecture that have occurred since 1986, when the last edition published.
关于“龙书”,这里有一个词条,原来之前还有一本绿龙书,出版于1977年。不到10年,红龙书出来了,而现在的紫龙书时隔20年才出来。看到定价请不要害怕,国内已经有影印版。
看这本书以及另一本讲计算机体系结构的书的时候,给我印象最深的是,这些作者可以把如此深奥、晦涩、难懂的知识这么流畅地传授给你,让你感受不到门槛。他们不仅是科学家,还是教育家,他们写书的时候不仅要自己懂,而且要考虑如何让读者懂。而国内的作者们,肚子里本来就没东西的就不用说了,有些学术水平比较牛,写出的书看起来却不相称,许多感觉是在给自己打草稿。
另外提醒大家,千万不要看那些糟蹋原著的中文译本。与其花时间在猜测那些蹩脚甚至错误的翻译文字上,不如花点时间学好英文,去看原著。
May
09
初次试用 Mac 的 Terminal,肯定会觉得在命令行上移动光标非常不方便 —— Mac 的大部分程序中按下 Home/End 键都不是到达行首或行末,这让初次接触 Mac 的用户们很烦恼。这个其实比较容易解决,在 Mac 中,多数情况下 Ctrl-a/Ctrl-e 是行首、行末。接下来就说说其它的一些技巧,让你在 Terminal 中的工作更加高效。
现在的 Mac OS X 中的默认 shell 都是 bash 了。bash 的最基本的技巧就不必多说了,大家按得最多的,我想可能是上下方向键(或者 Ctrl-p/Ctrl-n),还有 Ctrl-r 搜索命令历史。
—————–不仅限于 Mac—————–
有一个我们一般不去碰的命令 —— “set -o vi”,它会把 bash 命令行的编辑方式改成 vi,当然了,默认 mode 是 “Insert”。你可以试试执行这个命令,然后输入命令,按下 ESC. 这时 j/k 就是上一条/下一条命令,h/l 就是左右移动了,再试试 w? 如果你喜欢 vi,这也许是个不错的选择
默认的编辑方式是 emacs,可以通过 “set -o emacs” 来设置。也就是说,在 bash 中,默认我们是可以用 Emacs 的方式来编辑命令的。回头看到达行首/行末的命令 Ctrl-a/Ctrl-e,它们就是 Emacs的命令啊。下面列出对命令编辑非常有用的一些其它指令:
Ctrl-f/Ctrl-b: 向前/向后移动一个字符 (forward/backword),相当于方向键。
Ctrl-n/Ctrl-p: 向下/向上移动一行,就是历史查找了,也相当于方向键
Meta-f/Meta-b: 向前/向后移动一个单词(在 vi 模式下可以单按w/e/b)
Meta-d/Meta-backspace: 向前/向后删除一个单词 (vi:dw/db)
Ctrl-k: 删除到行末,非常方便。比如你向前翻历史翻了很久,又决定从头输入一个命令,那么就 Ctrl-a, Ctrl-k,把整行删掉。(vi:d$, 还可以 d^ 删除到行首,不知道 emacs 有没有对应的便捷方式?)
————-不仅限于 Mac 部分结束————-
请看 Meta 键的介绍。
如果是在 Linux 系统中,那么上文列出的命令中的 Meta 直接用 Alt 替代就行了。而在 Mac Terminal 默认的配置下,我们需要首先按一下 ESC,放开后再按后面的字母,挺不习惯吧?(这种方式在 Linux 中也应该可行)其实在 Mac 中想要试用 Alt(Option) 也很简单。打开 Terminal 的 Preferences -> Settings,选择你使用的 color scheme,在 keyboard 设置的最下面有个 “Use option as meta key”,选中就可以了。实际上这就是设置了 Terminal 程序如何发送给 shell 按键代码。不选中的话,你 ssh 到一台 Linux 机器上也必须用 ESC 键。