Exerb——将 Ruby 脚本转换成 Windows 下的可执行(.exe)文件!
October 4th, 2007
自从关注并使用 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 命令行窗口。
使用 Linux shell I/O 重定向简化小程序的日志记录
March 12th, 2007
一些自动执行特定任务的小脚本程序,如果希望能使程序的 stdout/stderr 输出到屏幕的同时也把他们记录到一个日志文件,可以使用 tee 命令结合 shell I/O 重定向来轻松完成:
./a_tiny_script 2>&1 | tee the_log_contain_both_stdout_and_stderr.log
这个命令的精华在于 2>&1,意为让 stderr 使用 stdout 的文件描述符,效果也就是将 stdout 和 stderr 内容合并,并且输出到 stdout 被定向的位置。在这里也就是管道中的 tee 命令的 stdin 上,然后 tee 将得到的输入同时显示在屏幕上和记录到日志文件里。爽吧?
以前为了在 PHP 脚本里实现这样的功能竟然使用了 ob 系列函数 + 自定义的 output callback 函数,并且这样也只能做到同时显示和记录 stdout,真是晕到死。
标签:bash, GNU/Linux, PHP, Programming_编程AutoUpdateSoftOnSkycn.cmd
December 27th, 2005
在软件使用上,我一直都是个喜欢追新的人。
不过这么多年来一成不变的浏览器+软件下载站+手工浏览下载的模式已经让我厌倦了。懒人总是有懒人的办法,因此也就有了这个使用 Windows 命令行脚本编写的 AutoUpdateSoftOnSkycn.cmd。
AUSOS 的工作原理很简单,用 wget 取得软件下载站上的某个软件的介绍页面,然后使用 grep/sed 来分析页面的文本取得此软件的下载地址,再次使用 wget 取得这个软件。使这个工作流程能真正应用的重点在于,大多数软件站的某个具体软件的介绍页面地址都具有持久性,这是为了提高使用具体关键字时自己在搜索引擎中的排名,同时也方便用户访问和自己管理。
基于这个工作原理,AUSOS 稍加修改就可以适用于大多数软件下载站,实际上这也是我下一步的目标。不过这样一来配置文件 AUSOS.conf 和项目列表文件 ItemIDList.ini 就会复杂一些了,到时候也许会做一个 GUI,如果真的需要的话。
另外编码过程中发现 Win2k 以后 Windows 命令行脚本虽然增强了很多,但还是有些不便,也许以后会移植到 bash 脚本上,这样虽然看上去没那么 NB 了,不过可以做到跨平台。Windows 下用 Cygwin 里的 bash 来执行;Linux 自是不必说,bash 已经流行很多年了。
写完发给一个 coder 朋友看,他说“Windows shell script 都可以写那么长,你丫真素 YD。”,呵呵。
如果你有兴趣的话可以在线看看 AUSOS 在 Vim 中高亮后的代码。并且,使用说明也可以在这里比较方便的看到。
下载地址:
AutoUpdateSoftOnSkycn.cmd v0.2
超微型的 Cygwin 环境,如果你和大多数人一样没有安装 Cygwin,那么请下载并解压到 AUSOS 所在目录或者 PATH 环境变量中列出的任何一个目录里。
SCColoredID,星际争霸彩色 ID 修改器 v0.2.0,支持 Windows Vista
October 12th, 2005

我知道早在几年前就有了这种工具。不过我所找到的这类工具都不大好用,比如 W.Z.Q 的那个,每次修改都要从游戏里切换出来,很不方便。因此一怒之下自己写了个,具备全局快捷键修改,以及 ID 列表保存能力。
同时附上 Delphi 源代码。其实程序很简单,就是用一个循环的 ReadProcessMemory() 来读取 starcraft.exe 进程的内存,并且通过搜索一个特征字符串找到游戏的 ID 列表位置,然后用 WriteProcessMemory() 写入我们设置的彩色 ID 而已。至于如何让 ID 以各种颜色显示,则要感谢前人 W.Z.Q 的研究。事实上我是使用 WinHex 查看经他的 scRedStorm 修改过 starcraft.exe 进程的内存得到的这个“秘密”。
更新历史
v0.1.0221.874
- 解决对 1.08 以上版本无效的低级问题。
v0.2.0
- 即时预览彩色 ID,精确模拟星际争霸对待彩色代码的行为。
- 支持 Windows Vista。为了避免与 Vista 的快捷键冲突,以前的 Ctrl + Alt + Tab 已经更改为 Shift + Tab。
- ID 首尾都可以使用空格。
- 放弃 FlatStyle 控件,在 Vista 里它已经不再好看了。
下载
SCColoredID v0.2.0
SCColoredID v0.2.0 源代码
发现一个 ACDSee 7.x 可能是因为硬编码造成的问题
January 17th, 2005
大家都知道 ACDSee 有 Viewer 和 Browser 两种模式。一般来说我们在“我的电脑”或者其他文件管理器里双击一个图片文件时 ACDSee 会以 Viewer 模式启动,以便让我们查看双击的这张图片。此时如果我们双击 ACDSee 的显示图片的区域,会使其切换到 Browser 模式,以便让我们浏览刚才打开的图片所在文件夹下的所有图片。
问题就出在这个 Browser 模式上。 Read the rest of this entry »
标签:Programming_编程, Software_软件