Publicado por Rafael Rosa em 12 de Março de 2009

Blogo - Como foi construído um aplicativo comercial para Mac OS X usando Ruby

blogoguys.jpgO Blogo é um cliente de blogs para Mac / OS X desenvolvido pela Brainjuice - a razão social de Benjamin Jackson e Ivan Neto, dupla de desenvolvedores Ruby e web designers do Rio de Janeiro - nascido a partir das péssimas experiências que tiveram com os editores de blog comercias existentes.

Segundo a Brainjuice, o Blogo é o primeiro aplicativo comercial para OS X feito em Ruby (mas o título de primeiro aplicativo cross-platform é de outro - veja a nota no fim do artigo). Ao invés de usar Objective C (que eles acham que toma muito tempo para desenvolver), eles experimentaram o RubyCocoa e descobriram as belezas do Cocoa (apesar dos métodos com nomes bizarros!) junto com o MacRuby. Depois de muito trabalho e várias conversas com Laurent Sansonetti [famoso no MacRuby], eles conseguiram lançar o Blogo.

blogoapp.png

Perguntei ao Ben sobre o processo de desenvolvimento do produto e sobre as coisas boas e ruins na tarefa de criar um aplicativo desktop para Mac OS X:

Ruby Inside: O Blogo é uma aplicação apenas para OS X. A ideia original era mesmo escreve-lo para OS X ou vocês pensaram em desenvolver algo multi-plataforma usando alternativas como o JRuby e Monkeybars?

Benjamin Jackson: Sem chance. Nós não aceitamos interfaces não-nativas. Odiamos AIR. Usamos Safari. Quando você não dá uma interface nativa ao usuário, algo fica errado. Os controles não respondem como deveriam, a ordenação da abas NUNCA funciona corretamente, o arrastar e soltar vira arrastar e orar.

O Firefox não importa os bookmarklet de maneira apropriada, ele coloca um monte de javascript horroroso no título. Por que? Porque ele está sendo arrastado de uma view do WebKit, não de uma janela do Firefox. Eu não quero apontar o dedo só para o Mozilla. Isso acontece em todos os lugares, e com raríssimas exceções, é o único resultado possível quando se tenta agradar à todos.

A Coca-Cola adapta suas receitas para cada país no mundo. Se você se importa o suficiente com os usuários de uma plataforma e está disposto à dedicar-lhes tempo que poderia ser gasto em outras coisas, como melhorar seu produto, deveria estar implícito que você se preocupa o suficiente para criar algo que faz algo mais do que compilar no seu sistema operacional.

Como foi o processo de empacotar o Blogo para distribuição? Vocês tiveram surpresas e tropeços ao longo do caminho?

E como! Eu aprendi mais sobre os detalhes internos do Ruby do que eu gostaria. Tive que fazer ajustes ao excelente script standaloneify do Jonathan Paisley para fazer com que ele funcionasse com nosso ambiente de compilação. Compilei todas as extensões em C tanto para PPC quanto Intel. Hackeei o arquivo principal do Ruby para reduzir o load path por causa de conflitos em instalações Ruby fora dos padrões (ouviram, leitores). Re-escrevi todo o módulo de IO remoto para utilizar as funções nativas do Cocoa com callbacks assíncronos ao invés de utilizar seus equivalentes em Ruby, o que seria muito mais conveniente. Troquei todas as gems que mexiam com dados remotos pelos seus equivalentes em Cocoa, ou criei as minhas próprias gems. Removi todas as threads em ruby e passei a utilizar NSThreads.

MacRuby será melhor. *bate na madeira*

Eu notei que o Blogo vem num pacote de instalação razoavelmente grande (28MB de download), dada suas funcionalidades. Você acha que os usuários vão torcer o nariz para esses arquivos grandes e que precisamos melhorar o empacotamento de aplicativos Ruby, ou você acha que isso não é um problema?

Nós compilamos para Tiger e Leopard, mas não faremos isso por muito tempo. As limitações impostas por essas compilações duplas incluem ter que anexar uma distribuição completa do Ruby e todas suas gems e frameworks. O Growl+Installer é uma das maiores partes. GData, o HMBlkAppKit, Sparkle e o rb-appscript também consomem um bom espaço.

Que conselhos você daria para alguém querendo desenvolver aplicativos para Mac usando Ruby?

Estude Cocoa. Leia a documentações dos conceitos e o HIG (Human Interface Guidelines). Aprenda as APIs, porque você precisará saber o nome daquele componente que faz aquela coisinha antes de criar uma sub-classe dele. O Cocoa te força a entender uma série de conceitos que não são muito utilizados em outros frameworks. Delegates e bindings, além de economizar tempo de programação, mudam a forma como você pensa sobre seus código.

Use o MacRuby. É estável mas só funciona no Leopard. Esqueça o Tiger.

Leia o artigo da Apple sobre desenvolvimento de aplicações Cocoa com o MacRuby.

Inscreva-se no mailing list macruby-devel. Dê feedback aos desenvolvedores, eles são caras legais e vão te ajudar.

Dê uma olhada no Hot Cocoa. O Rich Kilmer fez um excelente trabalho nele, e parece que vai ser uma das partes mais interessantes do MacRuby. Escrever pequenas domain-specific-languages como essa vão contra a sintaxe digaExatamenteOQueVoceQuerDizer: eAlgoMais: do Cocoa, mas no fim das contas isso é Ruby, oras bolas. Código sucinto e limpo fazem o Matz feliz.

Quais são os próximos passos para vocês e para o Blogo? Vocês tem planos para desenvolver mais aplicativos desktop usando Ruby?

Nós temos vários planos. Alguns deles provavelmente irão incluir MacRuby de alguma forma. Não ter que compilar a aplicação é muito conveniente sob vários aspectos. Alguns podem envolver o Rhodes, mas acho que nunca iremos escrever qualquer coisa em Objective-C, e eu nem quero. É uma linguagem estranhamente bela, tem um jeito Lisp de ser, e, segundo minha humilde opinião, é muito mais legível do que o Lisp. O Ruby é apenas outra ferramenta para que possamos fazer nosso trabalho de maneira rápida.

Obrigado Ben!

Observação: O Blogo não é o único aplicativo desktop comercial em Ruby no mercado - o JotBot criado por David Koontz, James Britt, e Logan Barnett's (um aplicativo de acompanhamento de tarefas inovador) é outro excelente exemplo, sendo o primeiro aplicativo desktop cross-platform escrito em Ruby utilizando o Monkeybars. Recentemente, David publicou um bom resumo sobre como ele foi feito.

2 Comentários para “Blogo - Como foi construído um aplicativo comercial para Mac OS X usando Ruby”

  1. #1
    Diego R. V. Disse:

    Bom, sou leigo nesse tipo de desenvolvimento. Mas ao meu ver, cada dia aparecem aplicações incriveis e bem feitas em AIR e sim, funcionam perfeitamente em qualquer OS.

    Gosto é gosto ;)

  2. #2
    Aguinelo Pedroso Disse:

    Eu concordo mais com a visão do Blogo, prefiro as coisas nativas e de preferencia sem usar uma salada de coisas, mas isso é pura utopia hoje, precisamos ser ágeis com qualidade =)

Deixe um Comentário