Google SoC系列:Rubyland:使用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

你可能感兴趣的:(Google SoC系列:Rubyland:使用Ruby拓展桌面应用)