Vim? Emacs!

十一月 3rd, 2007

我: Hmmm,你的 Emacs 编辑 Rails 项目明显没有偶的 Vim 爽嘛,连 RHTML 里的 Ruby 代码都没法语法高亮。

W 君: (看了偶演示 Vim + rails.vim 后)确实不太方便。

我: 那何不转过来用 Vim?反正 Vim 你也经常用(W 是 Linux 系统管理员)。

W 君: 不行,我用 Emacs 是有很特殊的原因地。

我: ?

W 君: ……

我: ……?

W 君: …… 因为 Emacs 的图标是牛啊。(同事 W 君是股民 -_-b)

我: …… 狂晕!

Tags: , , , ,

按照《使用 Subversion 进行版本控制》 书中的建议,项目在被 import 到版本库前,最好能在项目根目录下建立 trunk、branches、tags 等目录,并将项目源代码存放在 trunk 子目录下,这将有利于工作中对相对稳定的项目做较大修改时创建分支。

但是一些历史项目,或者我们自己在对 Subversion 不够熟悉的情况下创建的项目,可能是直接把项目源代码存放在项目根目录里的,这种情况下要修改版本库布局,将所有文件移动到 trunk 子目录下就比较麻烦了。设想过使用 svn mv 命令应该可以做到,但是它会产生一个整个项目所有文件被移动的 revision,不但很不优雅,也不便于以后查看历史记录以及回溯到旧版本。

这种情况下我们可以这样做:

  1. 将整个项目的版本库导出为一个 dump 文件(它是一个可编辑的文本/二进制混合文件,其中包含了所有的 revision 记录)。
  2. 在 dump 文件中所有的路径前加上 trunk/ 前缀,使它们处于 trunk 子目录下。
  3. 在 dump 文件中 revision 1 里直接加入 trunk 等目录的创建。
  4. 删掉项目的版本库并重建新版本库,然后导入我们修改后的 dump 文件。

进行这样的操作后,项目的版本库状态就是从 revision 1 开始所有的文件就存在于 trunk 目录下了。

具体操作步骤,以在 Linux 命令行下为例:

svnadmin dump /path_to_svn_repos/your_project > your_project.svn_dump
vim -b your_project.svn_dump
# 以下为 Vim 命令
:%s/^Node-path:\s\+/\0trunk\//ge
:%s/^Node-copyfrom-path:\s\+/\0trunk\//ge
# Vim 命令结束
# 添加 trunk 等目录的创建,见后文详述
rm -rf /path_to_svn_repos/your_project
svnadmin create /path_to_svn_repos/your_project
svnadmin load /path_to_svn_repos/your_project < your_project.svn_dump

注意一定要用 -b 参数启动 Vim,这样可以避免 Vim 在没有配置好多字节文件支持的选项时对 dump 文件可能的破坏。添加 trunk 等目录的方法是在 Revsion-number: 1 那一行后的第一个 PROPS-END 行后插入以下蓝色的代码。注意那些空行,有些是空一行有些是空两行,我是严格按照已有的目录的格式来写的,在没有看到这个 dump 文件的规格文档前最好连空行也照原样复制。

...
Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2007-10-11T14:15:09.781135Z
PROPS-END

Revision-number: 1
Prop-content-length: 100
Content-length: 100

K 7
svn:log
V 0

K 10
svn:author
V 6
rainux
K 8
svn:date
V 27
2007-10-11T14:15:48.344335Z
PROPS-END
Node-path: trunk
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Node-path: branches
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Node-path: tags
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END

Node-path: trunk/README
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 8001
Text-content-md5: 2ffe7715fd6ba5509508a29022c22a17
Content-length: 8011

PROPS-END
== Welcome to Rails
...
Tags: , ,

四个小时前,在上海紫金山大酒店四楼的会场见到了自由软件社区的大哥级人物 Ian Murdock。一身白色 T shirt 的他看上去比活动宣传照上更年轻。

虽然了解、使用和喜爱 Debian 已经有四年了,但对于创始人 Ian Murdock 却没有太多的了解,只知道他现在为 Sun 工作,Debian 这个词源自他当时的女友(现在的妻子)Debra 和他自己名字的组合。很浪漫的命名方式,如果有机会,我也希望能做这样的事。 :) 看到活动的介绍后,才知道 Ian 还是 Linux Foundation 的 CTO,Linux Standard Base 的 Chief。

今天活动的主要内容是 Ian 的个人演讲和跟现场的 Linux 用户交流。给我的印象是 Ian 比较健谈,对大家提出的大多数问题都聊了很多。可惜,可惜,最大的遗憾是,他说的话有 95% 我都没听懂……-_-b 平时自诩流畅阅读英文技术文档的我,听力实在是太差了。(以后一定要经常对照字幕看原版电影来练习听力!)

晚上九点左右,活动结束后,Ian 还坐在舞台的一角为大家签名,跟大家合影。我也有幸跟他合影了一张(感谢好友 AKAI 帮助拍摄!),本来想说 “I’ve loved and enjoyed Debian for several years and will continue, many thanks to your hard work!”,不过没好意思说出口。-_-b

这次活动到会的粗略估计大概有四五百人,应该是超出了报名人数不少,以致于主办方准备的简单晚餐在还有很多人排队时就已经被“洗劫一空”了。

PS: 发现到会的 Geek 中 MM 还挺多的。

Ian & Rainux

Tags: , ,

links for 2007-10-05

十月 5th, 2007

Tags: No Tags

自从关注并使用 Ruby on Rails 以来,也对 Ruby 语言本身很感兴趣,并经常尝试用它写一些日常使用的小工具脚本。虽然自己使用很方便,但要分享给不用 Ruby 的朋友就比较麻烦了。

但是在 JavaEye 的某个帖子里知道 Exerb 后,事情就变得简单了。Exerb 是一个可以把 Ruby 脚本以及其依赖的 Ruby 扩展库转换成 Windows 下的单个的可独立运行的可执行文件的工具(这么长的一句话读起来是不是很有想扁我的冲动?:p),到 Exerb Project 的主页 下载安装包解开并执行里面的 setup.rb 即可完成安装。

用法也很简单,先执行 mkexy your_script.rb,让 mkexy 启动你的脚本并运行,这期间它会自动探测出 your_script.rb 所依赖的类库文件以及扩展库文件,并在 your_script.rb 结束运行后创建一份清单 your_script.exy,然后执行命令 exerb your_script.exy 即可生成 your_script.exe。OK,现在可以轻松地把你的 Ruby 脚本分享给朋友们了。(注1)

看到这里,也许你会跟我一样想,哇哈哈哈,有了这个工具,用 Ruby 来做 GUI 的小工具就变得有意义了啊。没错,对依赖 fxruby、wxruby 的 Ruby GUI 脚本也能正常的使用 Exerb 完成转换 (注2) (注3)。但是,由于 Exerb 会把 fxruby/wxruby 的运行库嵌入到 .exe 文件里,生成的 .exe 文件都非常大,fxruby 的在 9MB 左右,wxruby 的 11MB 左右。对于一个功能简单的小工具来说,这个程度的体积显然是很多人不能接受的。

事实上,已经有了一个 GUI toolkit 运行库很小,VisualuRuby,虽然它是 Windows Only 的,虽然它现在在 Vista 上还有点小问题。不过这又是另外一个话题了,我会在下一篇 blog 里继续聊。

注1: 在这之前也许你需要用 upx 压缩一下生成的 .exe 文件,因为它确实比较大,一个最简单的 Hello world 也有 1.4MB 左右。

注2: Tk/Gtk/FLTK 我没有试过,对 Tk 不感兴趣,Gtk 在 Windows 下的运行库太过庞大,FLTK 则是因为找到的 ruby-fltk 在 Windows 下的二进制发行版依赖的 Ruby 版本太老,源代码发行版还没来得及尝试自己编译。

注3: 对于 GUI 脚本,使用 exerb -c gui your_script.exy 可以避免生成的可执行文件运行时带有 Windows 命令行窗口。

Tags: , ,

links for 2007-09-30

九月 30th, 2007

Tags: No Tags

links for 2007-09-28

九月 28th, 2007

Tags: No Tags

links for 2007-09-22

九月 22nd, 2007

Tags: No Tags

links for 2007-09-18

九月 18th, 2007

Tags: No Tags

links for 2007-09-13

九月 13th, 2007

Tags: No Tags