InfoQ

新闻

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

作者 Werner Schuster译者 高昂 发布于 2007年6月28日 下午7时30分

社区
Ruby
主题
脚本,
富客户端/桌面
标签
自动化操作,
Google SoC,
Mylar

桌面自动化技术,是一个不断在改善并且适应当前技术发展的主题。苹果公司的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

相关赞助商

InfoQ中文站Ruby社区,面向Web和企业开发的Ruby,主要关注Ruby on Rails,通过新闻、文章、视频访谈和演讲以及迷你书等为中国Ruby社区提供一流资讯。

没有回复

回复

独家内容

运用Ruby纤程进行异步I/O:NeverBlock和Revactor

Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。

与杨巍一起探讨OpenSocial

InfoQ中文站有幸与Google中国的产品经理杨巍先生在一起探讨了OpenSocial的相关话题,包括OpenSocial的初衷、构成要素、实现方式、以及要实现它的技术储备等等。

书评:敏捷模式──指向成功的路标

Ryan Cooper对Amr Elssamadisy的新书发表了评价,并认为书中提供了一种为实施敏捷量身定做的框架。本书并没有给出一种人人可用的敏捷方法,而是为读者提供一些模式和工具,用以找出哪些敏捷实践可以最有效地达到该组织机构的特定目标。

构建的可伸缩性和达到的性能:一个虚拟座谈会

这个由业界主要专家们参加的座谈会探究了在使应用程序具备尽可能好的伸缩性及性能的过程中所面临的挑战和思考过程。

OpenSocial的分析与实现

本视频主要对OpenSocial进行了分析,并对实现的方式进行了介绍。其中包括:OpenSocial的开发经验、Container Provider的技术准备、平台的构成要素、具体的规范、以及对未来的展望。

缓存系统MemCached的Java客户端优化历程

Memcached在大型网站被应用得越来越广泛,但是Java客户端并不多,本文作者基于现有的开源客户端进行了封装优化,并翔实记录了这一过程。

超越SOA:动态业务应用的新企业应用框架(2)

在他们文章的第二部分,作者探讨了动态业务应用的架构并介绍了资源容器的概念。他们示范了如何在JEE之上构建这个架构,以及它如何影响实现生产力。

使用ClickOnce细分发布版本

ClickOnce让WinForms应用程序的部署轻而易举。David Cooksey演示了如何在ASP.NET中编写一个HttpHandler来实现对ClickOnce部署的版本细分。