Rhodes é uma nova solução open source para trazer desenvolvimento Ruby aos dispositivos móveis. Ainda mais: ele permite usar o mesmo código Ruby em vários dispositivos. Atualmente o iPhone, Windows Mobile e BlackBerry da RIM, com suporte para Symbian e Android chegando em breve.
A chance de fazer deploy no iPhone deve ser interessante, pois ele adiciona outra opção para o desenvolvimento do iPhone (ao lado do Objective-C). Também: Rhodes e todas os interpreters necessários e bibliotecas são open source, hospedados no GitHub e um bug tracker público para projetos Rhomobile também está disponível.
Nós conversamos com Adam Blum da Rhomobile sobre como exatamente Rhodes funciona, e como eles conseguiram usar Ruby como uma linguagem para o iPhone.
As Plataformas
A primeira questão é naturalmente sobre como o Rhomobile tornou possível escrever Ruby apps para o iPhone. Adam explica:
A resposta é [..] nós embutimos a aplicação do desenvolvedor com nosso framework e um Ruby interpreter. Para ser compatível com a AppStore os desenvolvedores não podem os baixar código interpretado "on the fly" de nenhum lugar. É a responsabilidade do desenvolvedor cumprir as regras, mas se eles querem violar há uma maneira muito mais simples para fazer isto do que a incorporação de um Ruby interpreter e baixar código Ruby de qualquer outro lugar.
O Ruby usado no iPhone é uma versão recente do Ruby 1.9. Rhodes suporta outras plataformas e planeja adicionar mais plataformas onde o Ruby está disponível, por exemplo Symbian.
Suportar Rhodes e Ruby no BlackBerry, cujas aplicações são escritas em Java, requerem um pouco mais de esforço. Rhomobile escolheu uma solução ambiciosa que usa XRuby. XRuby é uma versão do Ruby para Java que compila o código Ruby para arquivos de classe Java. O desenvolvimento do XRuby diminuiu no ano passado, mas Rhomobile pegou XRuby, melhorou ele, e está usando agora XRuby para para executar aplicações Rhodes no RIM BlackBerry. Adam também mecionou:
Nós estamos trabalhando no Android, a começar pelo nosso próprio Ruby que nós fizemos para a implementação RIM (que é baseada em XRuby não JRuby)
Adam também menciona a necessidade de manter os Ruby interpreters pequenos, que tem um efeito na bibliotecas Ruby suportadas:
Isto é definitivamente um subconjunto. Esta é parte da necessidade de fazermos nosso próprio framework. Nós fazemos um monte de coisas para torná-lo menor e vamos continuar fazendo ao longo do tempo.
Algumas funcionalidades, tais como o eval()
também não são suportadas.
Considerando que o Rhomobile funciona com Ruby interpreters para plataformas móveis, nós perguntamos para Adam o que ele gostaria de ver no suport disso:
Hmm... gostaríamos de ver implementadores Ruby focados em tornar menor as implementações do Ruby acrescido de mais atenção para o tamanho dos custos de dependências quando as pessoas constroem plugins Gem úteis. Mas para agora é nosso trabalho fazer isso e tudo bem.
Como isso funciona?
O Rhomobile destina-se a dar suporte para diferentes plataformas de telefone móveis, então eles escolheram uma maneira para executar o framework cross platform applications Rhodes. Em resumo: aplicações Rhodes são aplicações web que são executadas localmente no telefone (ie. a parte Ruby da aplicação roda no telefone bem como a GUI HTML). A GUI dessas aplicações são definidas em HTML e exibidas usando o componente do browser que está disponível em todos os telefones. Telefones Modernos tendem a ter browsers padrões, ex. o Safari basedo Webkit do iPhone, que significa que é possível usar os métodos de desenvolvimento normal da web para definir aplicações, inclusive utilizando Javascript na GUI. Rhodes também cuida de fazer a GUI parecer-se com o componente nativo GUI na plataforma individual, ex. usando IUI no iPhone GUIs.
Mas o Rhodes acrescenta outro twist para isso: algumas das funcionalidades avançadas dos smartphones modernos estão disponíveis para as aplicações Rhodes. Atualmente está disponível informações de geolocation; acesso ao accelerometer, camera e ao PIM local estarão disponíveis na próxima versão em Janeiro.
É possível acessar essas funcionalidades com chamadas Ruby e com tags HTML nos arquivos HTML, ex.:
será mostrado algo parecido com isso:
37.3317° North, 122.0307° West;37.331689;-122.030731
Começar a trabalhar em uma aplicação Rhodes é tão simples como em muitos outros Ruby web frameworks, ele começa com um gerador:
rhogen app accountapp
Isso gera um esqueleto de aplicação básico, com controllers e outras apps. Mais informações estão disponíveis no Rhodes Tutorial.
Outra parte do Rhodes é o Rhom, um mapeador de objeto. Rhomobile também tem outras bibliotecas no GitHub, ex. Rhosync, que ajuda com a sincronização de várias fontes de dados para o telefone móvel.
Os projetos do Rhomobile são bastantes novos - a release atual está na versão 0.1, mas uma release 0.2 será lançada no final do mês com melhor acesso ao PIM e GUI. Uma release 0.3 deve ser lançada no final de Janeiro de 2009 e deve trazer suporte para mais plataformas, acesso a mais funcionalidades do dispositivo (accelerometer, etc), além de hospedagem de projetos para desenvolvedores Rhodes.
Finalmente é importante mencionar que os projetos Rhodes são open source e hospedados no GitHub. O modelo de negócio do Rhomobile funciona no dual licensing. Aplicações Rhodes são open source, mas se uma empresa quer usar Rhodes mas manter sua fonte fechada, poderá fazê-lo comprando uma licença comercial Rhomobile.
Você conhece outras soluções cross platform como Rhodes que oferece um nível semelhante de integração? Você usaria Rhodes para escrever uma aplicação?