RubyOnBr logo

Ruby além do usual

Muitos de nós já leram várias matérias, artigos, tutoriais, documentações sobre RoR, Ruby, já vimos as maravilhas do Ajax, REST, as bibliotecas e plugins que facilitam nossa vida, etc, etc, etc. Já vimos que o JRuby está a pleno vapor, o IronRuby e o RubyCLR sendo desenvolvidos, o CakePHP, o MonoRail, Ruby conversando com SAP… enfim… eu tenho certeza que eu estou esquecendo algum item, mas não é esse o ponto.

Vamos esquecer um pouco a Internet, o RoR como framework, o ambiente corporativo, os sistemas, os mashups, os plugins, etc. Vamos pensar somente em dispositivos eletrônicos, vamos lembrar que nossos computadores possuem interfaces USB, Firewire, e alguns mais antigos ou com a ajuda de adaptadores, portas paralelas e seriais. Agora vamos imaginar o Ruby conversando com estas interfaces, por exemplo, bluetooth, portas seriais, paralelas, ou até mesmo respondendo como um servidor UDP ou TCP.

Tudo isso é possível com a utilização de algumas bibliotecas ou até acessando diretamente as API’s do sistema operacional em uso. No Linux, esta operação é mais tranquila já que a maioria dos drivers são de código aberto, facilitando a integração com o Ruby ou com um conhecimento intermediário de C/C++ e desenvolvimento de extensões utilizando a API do Ruby. Já o Windows, é um pouco mais complicado dependendo do seu objetivo. Acessar um dispositivo bluetooth, por exemplo, passa a ser uma tarefa árdua, já que o mesmo pode ser compatível com o driver genérico do Windows (se você tiver sorte) ou, se não for, você dependerá dos drivers de terceiros e seus respectivos SDK’s.

Independente destes empecilhos, é interessante pensar que o Ruby não é só uma linguagem de script, ou de manutenção de sistema ou a linguagem escolhida pelo David Hansson para contruir o RoR. É, sim, uma ferramenta totalmente capacitada e amadurecida para interagir com dispositivos externos. Sim, o Python também é, o Perl, o C#, o Java, o C/C++, e não esquecendo do velho, porém respeitadíssimo, Assembly. Mas a diferença do Ruby para estas linguagens é, como todos nós sabemos, a facilidade, agilidade e seriedade que o Ruby nos proporciona. Como diz meu amigo de muitos anos, Bruno Mosconi, “Ruby é uma linguagem que joga no seu time”. Acho que essa frase representa a alma e a essência do Ruby.

Sei que isso tudo é “lindo e maravilhoso”, mas como tudo não sobrevive de teoria, a prática tem que ser colocada a prova. E a pergunta é: já fizeram esse tipo de coisa?
A resposta é: SIM! Já fizemos aqui no Brasil e, claro, já fizeram lá fora.

Temos um caso MUITO real, e é bem provável que você, que está lendo este artigo, tenha visto, mas não desconfiou nem por um segundo que por trás de toda traquitana o controle central era comandado pelo Ruby!

Vamos voltar há exatamente 1 ano atrás. Skol Beats 2006, Av. Faria Lima esquina com Av. Juscelino Kubitschek, esquina do posto Ipiranga (o que têm o McDonald’s).

Aquele painel eletrônico gigante, que ficou por 2 semanas, funcionava da seguinte forma:
  1. Você escolhia a tenda que iria “bombar” no Skol Beats
  2. Cada tenda tinha um código
  3. Você enviava esse código para um número SMS
  4. O seu voto era computado e você recebia de volta uma outra mensagem SMS que continha um endereço WAP fornecendo um ringtone exclusivo para seu celular.
  5. Em tempo real, o painel computava o seu voto com um delay de no máximo 10 ou 15 segundos (dependendo to tráfego)

Veja o vídeo:
http://www.youtube.com/watch?v=iGLfN7iLopY

O Ruby tinha as seguintes tarefas:
  1. Monitorar/controlar a interface PCMCIA (modem GPRS) e a conexão via API
  2. Comunicar-se com o sistema da integradora de SMS
  3. Sincronizar um banco de dados local com os dados coletados remotamente
  4. Comunicar-se com o software que controlava os painéis de LED, fornecendo os dados no protocolo estabelecido

Após 2 semanas, o mesmo painel foi removido para dentro do evento (Sambódromo de São Paulo) e passou a ter, além do comportamento de enquete, um comportamento de sorteador de camisetas para que as pessoas votassem de dentro do evento. A cada sorteio, de 1 em 1 hora, o painel mostrava parcialmente o número de celular sorteado e o script enviava um SMS para a pessoa avisando que ela havia ganhado e deveria comparecer ao estande para retirar a mesma. Este projeto gerou uma grande repercussão na imprensa, representando um ótimo exemplo de Mídia Alternativa, sendo considerado o primeiro painel interativo do Brasil!

Sim, acredite, tudo isso controlado pelo Ruby!

Além deste case profissional, já me aventurei também com outros dispositivos mais comuns e outros com fins de pesquisa. Um exemplo interessante é um protótipo de um leitor de RFID que enviava os dados lidos através de uma rede Ethernet e que era recebido por um servidor UDP feito em Ruby em conjunto com o MySQL e o ActiveRecord que, no final, era atrelado com outras informações através de uma aplicação RoR.

Além destes exemplos, existem vários outros que podem ficar para uma versão 2.0 deste artigo.

Acho que deu pra ter uma idéia do poder que o Ruby é capaz de entregar em nossas mãos e como também, atualmente, é possível sonhar com futuras implementações da comunidade, bem como na evolução que a linguagem tem tomado nos últimos meses.

O objetivo deste artigo foi de estimular a comunidade a pensar de uma forma diferente na utilização do Ruby no seu dia-a-dia. Espero que tenham gostado!

Thiago Avancini (http://www.thiagoavancini.com)

Comente o artigo

Todos os diretos reservados a RubyOnBr. Copyright RubyOnBr .
This site is powered by Radiant CMS.