Páginas

domingo, 29 de maio de 2011

Programando para Android com Racket

Numa possível "série" de posts que acaba de começar agora, vou mostrar as várias possibilidades de uso de Racket, a linguagem para criar linguagens.

Uma das coisas fantásticas de Racket é a documentação. Esta pode ser consultada online ou offline quando você instala o ambiente na sua máquina (existem instaladores para Windows, Linux e Mac OS X).

A instalação é fácil veja meu post para mais detalhes. Para escrever nosso programa para Android ou browser vamos usar o Moby, um compilador da linguagem Advanced Student Language (uma das linguagens do Racket) para Javascript/mobile.

Não precisa se preocupar com a instalação do Moby. Ele está disponível no PLaneT, o sistema de distribuição de pacotes do Racket. Isto quer dizer que o DrRacket (uma IDE que vem incluída) vai instalar o Moby pra você no primeiro uso e deixar tudo prontinho...

Ok, então você instalou o Racket, abriu o DrRacket, e agora?
Como sempre, muito fácil.

Para começar, vamos verificar que seu ambiente está funcionando corretamente.
Cole o código abaixo na área de definições:

  #lang planet dyoo/moby:3:10
  "hello world"
  true
  (define (f x) (* x x))
  
  (check-expect (f 42) 1764)
  
  (check-expect (map f '(1 2 3 4 5))
                (list 1 4 9 16 25))

Clique em "Run" (ou use o atalho CTRL+T) e veja o resultado:
Welcome to DrRacket, version 5.1.1 [3m].
Language: planet dyoo/moby:3:9; memory limit: 256 MB.
"hello world"
#t
Running tests...
Both tests passed!
>

A primeira vez pode ser um pouco mais lenta pois o DrRacket vai baixar e instalar o Moby. As outras execuções não precisam de Internet e serão rápidas.

Agora vamos criar dois arquivos:
  • counter.rkt
  #lang planet dyoo/moby:3:10
  (define initial-world 0)
  (big-bang initial-world (on-tick add1))

  • run-counter.rkt
  #lang racket
  (require (planet dyoo/moby:3:10))
  (run-in-browser "counter.rkt")

Agora basta executar o run-counter.rkt clicando no botão "Run".


Pronto, sua primeira aplicação está criada.
Veja como ficou:

Ela é bem simples, só um contador. Mas que funciona no browser e.... e no seu Android!! Se você não tiver um, funciona no do seu amigo...

Para instalar a aplicacão no Android precisamos gerar um pacote. Para isto criamos um outro arquivo, o "build-counter.rkt", com o seguinte conteúdo:

#lang racket
(require (planet dyoo/moby:3:10))
(create-android-phone-package "counter.rkt" "counter.apk")

Este programa vai transformar nosso "counter.rkt" em um pacote para Android "counter.apk".
Pronto!

Sim, pronto! Instale a aplicação no seu Android e divirta-se!

Como ficou no Android?
Como eu não tenho um telefone com Android, baixei a SDK com um emulador e criei um dispositivo virtual para testar.

Baixei o Android SDK pra Linux e extraí num diretório qualquer.
Basta executar o utilitário em tools/android para criar um AVD (dispositivo a ser emulado). Para criar um
AVD é preciso instalar alguma versão da API, na área "Avaiable Packages" eu escolhi "SDK Platform Android 3.1, API 12, revision 2".

Em resumo:

Inicie o dispositivo clicando em "Start".


Para desbloquer a tela use "Page Up" do seu teclado.


Para instalar o nosso aplicativo "counter" no Android, execute este comando num terminal:

rodolfo@lisa:~/Downloads/android-sdk-linux_x86/platform-tools$ ./adb install ~/projects/racket-for-smartphones/counter.apk
1348 KB/s (203114 bytes in 0.147s)
 pkg: /data/local/tmp/counter.apk
Success

Instalado! Clique no menu de aplicações, aquele ícone com vários quadradinhos entre o globo e o fone.


E lá está nossa aplicação counter!!! Clique no ícone para executar.



Minha conclusão é que este procedimento é mais fácil do que o Hello World em Java proposto pelo Android SDK... e já temos algo melhor que um Hello World.

Você tem um Android aí na sua mão? Quer testar? Baixe e instale o pacote counter.apk (200 kB) e me mande uma foto!

[editado 2011/05/30 12:11]
O meu amigo Juan Lopes testou num Android, vejam:


Se você acha que um contador não é tão legal, então pode tentar outros exemplos, e pode também criar sua própria aplicação. O Moby dá acesso a GPS, sensor de movimento, acelerômetro, Internet, e tudo que não tiver lá pode ser estendido.

Para mais informações, veja a documentação oficial do Moby e a página do projeto com slides, material em áudio e vídeo (em inglês).

Futuro
O Danny Yoo está trabalhando em um compilador de Racket para Javascript, o Whalesong, que deve ser integrado ao Moby, substituindo a camada atual de compilação. Feito isto, ele pretende focar novamente em melhorar o Moby.

Agradecimentos
Obrigado ao Danny por ter atualizado o Moby para funcionar corretamente com a versão mais recente do Racket (5.1.1), à equipe PLT por criar o Racket, e à comunidade pelo entusiasmo e prestatividade.

2 comentários:

Davi Orempüller disse...

Bacana, vou criar uma VM para começar a me aventurar no racket.
Parabéns pelo post

Rodolfo disse...

O Racket é mesmo bastante viciante.
A comunidade é muito ativa e receptiva.
Estamos começando mais um canal de comunicação, específico para quem quer se comunicar em Português, seja por dificuldades com o inglês ou para manter a proximidade com os falantes de nossa língua.
Confira:
http://groups.google.com/group/racket-br