Archive for March, 2008

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 设置好了的。

[ANN]YASnippet 0.1.1 Released

Saturday, March 8th, 2008

YASnippet — Yet Another Snippet extension for Emacs. 最近有些忙,代码差不多了,文档会在有时间的时候陆续更新。先看 Screencast :

这里可以下载清晰版的 Screencast 。yasnippet.el 是在总结了 smart-snippet.el 的反馈之后完全重写的。部分 feature 列表:

  • 配置简单(一句话: (require 'yasnippet-bundle)
  • 在输入的时候同步更新 field (Textmate)
  • 可以在文件中定义 snippet (msf-abbrev)
  • 支持将文件中定义的 snippets “编译”成单独的 .el 文件,方便携带,加快加载速度
  • 没有使用内置的 abbrev ,因此可以在没有 abbrev-table 的 mode 方便使用
  • 智能的 Tab 键:展开、下一个 field 或者是缩进以及其他,而且是自动的,几乎不用配置
  • 支持 Elisp 嵌入 (msf-abbrev)
  • 支持 Field Transformation (Textmate)
  • 可以从菜单选择 snippet ,可以有同名的 snippet ,展开的时候使用弹出菜单进行选择

最后,这是项目主页,我想继续沿用以前smart-snippet 的讨论组,两个扩展都可以在里面讨论。相关文档和发布通知等应该会陆续出来,最近好忙 >_< ~~

[ANN] RMMSeg 0.1.4 Released

Sunday, March 2nd, 2008

我今天发布了 RMMSeg 0.1.4 版。性能有少许提升,现在使用 ComplexAlgorithm 大约有 20KB/s 的速度,而 SimpleAlgorithm 差不多是 60KB/s 。我在一个 branch 里用 C 来实现了一部分代码,减少了许多 String 的构造,可是效果并不明显,让我非常失望,而且由于我在前一篇 Blog 里提到的 Ruby 关于 Hash 的 Bug ,需要打过 patch 的 Ruby 才能正常运行,所以并没有把带 C 扩展的版本包含在这个 Release 中。

下面是 RubyForge 上的 Release announcement:

Read the rest of this page »

Fixnum Overflow in Ruby’s Hash Implementation

Sunday, March 2nd, 2008

Ruby’s build-in Hash is the first-choice if you want to do searching. Using your own customized object as hash key is simple: define the following two method for your object:

  • hash: to get the hash code of the object.
  • eql?: to compare whether two object are equal.

When working to improve the performance of RMMSeg, I tried to implement a Substring class which can hold a reference to a big chunk of text instead of doing an expensive copy. Then I implemented the hash and eql? method. The hash value calculated is identical to the related String, and eql? is properly implemented. But the whole thing seemed not working quite well.

Read the rest of this page »