Google SoC 系列:Rubyland:使用 Ruby 拓展桌面应用

  • Werner Schuster
  • 高昂

2007 年 6 月 28 日

话题:Ruby语言 & 开发

桌面自动化技术,是一个不断在改善并且适应当前技术发展的主题。苹果公司的 Mac 平台,在很多年之前就拥有了自己的AppleScript技术,最近又添加了Automator,使用户可以在脚本代码中自定义实现特定功能的 actions 动作,让程序在某些事件发生时自动处理那些令人厌烦的重复性作业任务。同样在 Windows 操作系统下,用户可以使用Windows Scripting Host工具来监听并记录系统动作,而 Unix/Linux 操作系统的用户,也可以使用DBus工具来进行相似的操作。

Rubyland是 得到 Google 公司暑期编程活动(Summer of Code,SoC)资助的开放源代码项目,由 Scott Ostler 发起。Rubyland 项目使用 Ruby 语言编写逻辑处理脚本,实现跨平台自动化脚本处理的重用方式。Scott 在 Rubyland 项目中实 现的处理机制可以通过事件源调用处理脚本,事件源可以是文件系统(比方说,当存在于 /foo 目录下的文件被更改时,激发事件处理脚本)或是邮件程序(比方 说收到 3 封新的邮件)。Scott 还给出了其他的一些例子:

尽管这个夏天我的注意力会集中在 Rubyland 项目编码的完善之中,但是我也打算编写一些初始的事件源,为的是展示 Rubyland 的功能,同时也是为了做着好玩。首先我将会实现对 Growl 消息通知的连接,目前已有越来越多的应用开始使用 Growl,并且这些应用也期望自己可以得到 Rubyland 提供的功能支持。需要实现的另外一个功能是,当文件夹里的内容发生变更时,可以使应用自动探知到变更的内容,并调用相应 Rubyland 脚本。除了这两个特性以外,我还在尝试另外一些想法,我们将看看下面项目会是如何进展的。

Growl是一个专为苹果 Mac OS X 系统设计的通知系统,用于实现程序中通知用户某事件发生的统一消息提示。

Rubyland 的代码细节实现是基于 Ruby 语言的标准函数库,对此 Scott 这样解释道:

目前,计划将在(RubyForge 上的开源项目)EventMachine 基础之上实现 Rubyland 的核心代码,通过 dRB 或其它相似的分布式编程机制,实现事件源之间的消息通讯。很多与之相关的改进已在近期这段时间内完成,并且我可以确定的说,在未来的几周之内,人们 将会在项目不断的改进和完善中看到更多惊喜。

分布式 Ruby 库dRB已经包含在 Ruby 语言运行时的安装包之中,为开发者提供了一套可以使代码跨越 Ruby 运行时环境进行通讯的机制。EventMachine则为编写网络客户端和服务器之间的事件处理过程,提供众多函数类库的功能调用。

当然,Rubyland 实际上就是它的事件源和相应脚本的组合。Scott 希望,所有使用 Rubyland 的开发者都会感觉到,为 Rubyland 编写新组件是一件轻松而愉快的事情,对此他这样说道:

围绕着 Mac OS X 平台的 TextMate 文本编辑器所产生的一个有趣的用户群体,让我感到非常惊讶。当有人付出了一些额外的努力,将他们自己的成果打包带给其他人时,接 着就会出现一个非常神奇的网络效应,把整个社区都带动起来。对于 Rubyland 项目,我的目标是尽量实现桌面任务处理过程的简化,如果有人为完成一项处 理任务付出了大量的努力,那么对于需要同样功能的人来说,任务实现将在 Rubyland 的支持下将会变得简单。

计划中的另外一个想法是,在 Rubyland 项目中通过监控即将发生的事件,以及猜测用户当前的处理动作,来整合不同的事件源。这项功能将会对用户动作与可调用的操作系统资源之间的关联建立,起很大的帮助作用。Eclipse 的 Mylyn 项目(前 Mylar 项目)就是实现以任务为中心编程的优秀项目范例。Mylyn 项目允许用户自定义任务,并记录过程中哪些资源(文件或源代码等等)被程序调用。如果用户决定进行另一项处理任务,任务所需的文件可以被 Mylyn 记录,并且针对所需资源提供相应的用户界面。用户在下一次继续这个任务时,必要的文件就可以相应地被 Mylyn 和这些资源相关的 UI 预先打开。在一定程度上讲,上述的实现与操作系统如何处理作业上下文转换任务非常近似。Tasktop Technologies目 前也正致力于将这项功能应用在桌面客户端之上。在这样的机制下,采集到事件触发源越多,行为分析的有效信息也就越多,这也正是 Rubyland 事件源机制 派得上用场的地方。由于 Rubyland 计划在跨平台情况下表现一致,这是对它的一种可能使用方式,Rubyland 允许第三方开发者撰写他们自己的分析 功能模块,针对这一点 Scott 解释道:

两年前我曾为一个计划实现类似功能的在校研究生工作。他发现这样一个问题,即便是许多运行在 Mac 平台的应用拥有大量可用来监控 应用状态的 Applescript 脚本库,仍然需要做大量的工作来为给定的应用建立工作流程和资源模型,并且需要做更繁琐的工作来整合两种不同的模型。 Rubyland 通过现成地提供基本的探测功能和一系列事件源,为问题的解决给出更多可行的途径。这是一个具有挑战性的问题,相信通过 Rubyland 帮 助开发者解决这个问题会是一件非常有意义的事情。

当问及 Scott 如何规划项目并制定开发进程时,他这样说道:

我计划在暑假的中期之前发布第一个 Rubyland 版本,并且在版本发布的时候,已建立好日常交流所需的邮件列表,并可能会有相 关的技术论坛。如果希望一直关注项目发展的状况,可以订阅 Rubytalk 的邮件列表或者关注建立在 O'Reilly 上的博客,项目有关的消息都会在这里 发布。同时,所有感兴趣 Rubyland 项目的开发者都可以随时和我取得邮件联系,内容可以是关于尝试 Rubyland 已有的功能,或是希望 Rubyland 添加的新功能,总之,我非常愿意听到来自各方面的建议。:)

需要了解更多的信息,请参考Scott 在 O'Reilly 博客上的第一篇文章,在这篇文章中,Scott 将会给出一些 Rubyland 项目使用的示例代码。

查看英文原文:Google SoC Series: Rubyland: Extending Desktop Applications with Ruby

Ruby语言 & 开发