InfoQ

新闻

Rhodes:将Ruby应用带给iPhone、Windows Mobile和BlackBerry

作者 Werner Schuster 译者 杨晨 发布于 2008年12月25日 上午9时31分

社区
Ruby,
.NET,
Java
主题
富客户端/桌面,
运行时
标签
Android,
XRuby,
iPhone,
Symbian

Rhodes是一个开源的解决方案,它使得开发人员能够在移动设备上进行Ruby开发。而且它允许使用类似Java的特性,一次编写,到处运行。它 还支持多种设备,例如iPhone、Windows Mobile和RIM的BlackBerry,并且在将来还会支持Symbian和Android。

能够将程序部署到iPhone是一件非常有趣的事,它为iPhone开发提供了另一个选择(继Objective-C之后)。而且,Rhodes以及必需的解释器和程序库都是开源的,由Github托管,还有一个Rhomobile项目的公开BUG追踪系统


我们采访了RhomobileAdam Blum,深入地了解了Rhodes是如何工作的,以及他们是如何成功使得Ruby程序能够在iPhone上运行。

平台

关于如何使得Ruby程序成功地在iPhone上运行的问题。Adam解释说:

答案就是 [..] 我们将开发者的程序和我们的架构以及一个Ruby解释器绑定在一起。为了顺从于AppStore,开发者们不能随意地在其他地方下载解释过的代码。要么他 们忍气吞声,要么他们就选择一种更简单的方法来解决这个问题,只要他们肯违背这种限制的话,那就是集成一个Ruby解释器,直接下载Ruby代码。


iPhone上的Ruby版本现在是1.9版。而且Rhodes支持其他多种平台,并计划添加更多平台的支持,例如Symbian等等。

BlackBerry的应用程序都是用Java编写的,所以想让这个平台支持Rhodes和Ruby,就得多做点儿事。Rhomobile选择了一个雄心勃勃的解决方案,使用XRubyXRuby是一个Java的Ruby版本,它能够将Ruby源代码编译成Java类文件。XRuby的开发在去年停滞了下来,但是Rhomobile已经选择了XRuby,并且对其进行了改进,现在在Blackberry上使用的是XRuby来运行Rhodes应用程序的。Adam还提道:

我们现在还在搞Android,根据我们在RIM的实现(基于XRuby而不是JRuby)来尝试在Android上运行Ruby代码。


Adam也提到说,需要保持Ruby解释器体积足够小,而这会影响到一些Ruby库的使用:

我们定义了一个子集,这也是为什么我们要自己来做框架的理由。为了让解释器的体积更小,我们可做了不少工作,而且以后会做得更好。


例如eval()等特性现在也不支持。 

因为Rhomobile是与Ruby解释器需要在移动平台上协同工作,我们又和Adam聊了聊他对于这个问题的愿景:

嗯…… 我们当然希望看到Ruby解释器的实现者们把解释器做得更小,而且更关注于当构建了好用的Gems之时,程序库依赖的体积也更小。现在这些事情都是我们在做,不过也还好。

如何工作

Rhomobile目标是支持多种不同的移动电话平台,所以他们选择了构造Rhodes跨平台应用程序架构。简而言之:Rhodes应用程序就是运行在本地设备上的web应用程序(例如运行在设备上的应用程序,其Ruby部分就 如同HTML GUI一样)。这些程序的GUI用HTML来定义,并且使用浏览器来显示。现代的手机都带有浏览器程序,例如iPhone上的基于Webkit的 Safari。也就是说,开发者可以使用通用的web开发方法来开发应用程序,包括在GUI中使用Javascript。Rhodes同样关心如何使 GUI看起来像独立平台上的原生GUI组件,例如使用属于iPhone GUIs的IUI。 

但Rhodes还有一些新方法:有一些现代智能手机的高级特性在Rhodes应用开发中也可以使用,比如说地理定位信息;对加速仪摄像头以及本地PIM的存取下个版本就可以使用。下一个版本预定于1月发布。

使用这些特性,我们可以使用Ruby调用,并且在HTML文件中以HTML标签形式来使用,例如:

<geolocation/>

将会以如下形式展现

37.3317° North, 122.0307° West;37.331689;-122.030731


像其他Ruby的Web架构一样,开始编写Rhodes应用程序也很简单。在开始的时候,先使用一个生成器:

 rhogen app accountapp

这个命令产生了基本的应用程序骨架,包含了控制器以及其他的应用。更多信息请参见Rhodes示例。 

Rhodes还包括Rhom,它是一个对象映射器。在Github上同样也有其他的Rhomobile程序库。例如Rhosync,它可以将不同的数据源同步到移动电话上。

 
Rhomobile 还是一个新项目,现在发布的版本号是0.1,但是0.2版将会在这个月末发布,这个版本改进了PIM的存取以及GUI。0.3版预期会在2009年的一月 末发布,将会支持更多的平台以及支持更多设备(例如加速仪),以及为Rhodes开发者提供项目托管。

最后需要说明一件非常重要的事情,Rhodes是在Github上的一个开源项目。Rhomobile的商用模型基于双许可证。Rhodes应用程序是开源的,但是如果一个公司希望使用Rhodes,并且不打算对外公开源代码,那么就需要从Rhomobile取得商业许可证。

 
你还知道其他的跨平台解决方案能够像Rhodes一样提供类似级别的集成化吗?你会使用Rhodes来编写程序吗?

查看英文原文:Rhodes Brings Ruby Apps to iPhone, Windows Mobile, BlackBerry

深度内容

模块化Java:声明式模块化

本文是模块化Java系列文章的第4篇,介绍的是声明式模块化。文中描述了组件如何以声明的方式来定义并组织在一起,而无需让代码依赖于OSGI API。

Ian Robinson和Jim Webber谈论基于Web的整合

本采访是在伦敦举行的QCon2009上记录的,Ian Robinson和Jim Webber探讨了如何将Web作为整合平台以及REST在理论上和实践中的好处。

项目管理修炼之道(精选版)

项目管理对于项目成败至关重要,但实践中每个项目都有自己的独特性,没有现成的解决方案可以套用。书中从应对实际风险的角度出发,讲述了从项目启动、项目规划到项目结束的整个管理流程,展示了作者的思考过程。本迷你书从原书中精选出5个章节。

那是鸟,还是飞机?不,那是超人!

在这个演讲中,Fred将会揭示敏捷的一些外在因素,并会重点关注敏捷获得成功的内在原因。从案例研究和真实的项目经验来看,Fred认为:工具、管理体系都不能让你变得敏捷。敏捷的成功,植根于士气高涨、充分授权的工作者身上,他们能够以不同以往的方式思考问题。

访谈和书摘:Eben Hewitt的新书《Java SOA Cookbook》

Java SOA Cookbook

Eben Hewitt的新书《Java SOA Cookbook》从Java实现的角度讨论了面向服务架构。Eben在书中讨论了SOA基础、工具、最佳实践和SOA治理等主题。

Mark Richard的《Java消息服务》第二版

Mark Richards的新书《Java消息服务》第二版覆盖了JMS的许多主题, 包括发布和订阅模式以及点对点模式,消息过滤和事务等。InfoQ与Mark谈论了跟他的新作。

模块化Java:动态模块化

本文是“模块化Java”系列文章的第三篇,讨论动态模块化,内容涉及如何解析bundle类、bundle如何变化、以及bundle之间如何通信。

让测试也敏捷起来

对于测试组织来说,敏捷方法带来的快速迭代却让测试本身变得困难起来:缺乏“足够详细的文档”,缺乏“仔细设计用例的时间”等等。在本演讲中,段念将与大家探讨如何在敏捷过程中进行测试。