RailsRumble 2010 Review

No último final de semana participei do RailsRumble 2010, uma competição onde um time com no máximo 4 pessoas tem 48 horas para desenvolver uma aplicação usando Ruby on Rails.

Meu time desenvolveu o Mittun, um gerenciador de eventos. Fazendo uma rápida retrospectiva (só do meu ponto vista, não fizemos uma retrospectiva do time ainda):

+ Conseguimos definir em pouco tempo as principais tarefas e funcionalidades do produto. Isso ajudou muito a andarmos com um objetivo claro até o final do projeto
+ Conseguimos preparar nosso ambiente de produção/deployment (Ubuntu, MySQL, Ruby, Rails, Apache e Passenger) em menos de uma hora com deployment automatizado com capistrano. Isso nos tirou uma grande preocupação e nos permitiu focar no desenvolvimento do produto.
+ Voltar a ter um contato forte com Rails foi energizante.
+ Fizemos a busca de eventos com paginação, tudo bonitinho …
… mas esquecemos de coloca-la no produto
Como muitos outros projetos, não conseguimos deixar claro qual o objetivo do produto na sua página principal, quando um novo usuário entra no site ele não consegue saber de cara qual o propósito da ferramenta.
Infelizmente dormimos uma noite, pois é. Trabalhamos 24 horas direto, da sexta-feira a noite até o sábado a noite, direto, sem parar para dormir nenhum minuto. Então dormimos a noite de sábado e voltamos às 12 últimas horas do domingo.
Foi meio chato não ter ficado entre os 20, acho que todos os times devem ter um pouquinho desta sensação, afinal todos se esforçaram muito. Mas esse não era nosso objetivo principal, então vamos em frente.

O Rumble foi extremamente importante pra mim, por muitos motivos e muitas razões. Há todo o desafio de ter que desenvolver uma aplicação em 48 horas, o que, em qualquer linguagem já é um grande desafio. Some ainda o fato de ter que lidar com todas as dificuldades de um projeto real, definir e alinhar objetivos, deixa-los claros e evidentes o tempo todo, priorizar funcionalidades mais importantes, abrir mão de algumas outras e manter o andamento do trabalho visível. E mais um pouco: definir a visão da produto, layout (só dou pitacos nessa parte), comportamentos, funcionalidades e, principalmente, desenvolver o produto. Tudo em 48 horas!

Mas pra mim, pessoalmente, o mais importante foi o que consegui vivendo este projeto, que foi ter de volta um pouco de alegria e motivação para desenvolver novas aplicações e resolver problemas, trabalhar com coisas simples e eficientes, ver os resultados acontecerem, o produto andando e crescendo, isso não tem preço :) Eu estava há algum tempo sem ter um contato forte com Ruby on Rails e o Rumble foi muito legal nesse ponto e me ajudou bastante.

Mas claro, tudo isso só foi possível graças ao meu time (blastoooooooise), que foi formado por pessoas – literalmente – excepcionais: Makoto, Cabral e Roberto Soares, os quais devo muitos agradecimentos. E também ao apoio da Giran, que nos proporcionou um ambiente muito bacana. Enfim, foram as 48 horas mais divertidas e com maior aprendizado dos últimos meses, talvez até deste ano.

E foi isso, muita diversão e aprendizado. Não conseguimos ficar entre os 20 este ano, mas tentaremos de novo no ano que vem! Blastooooooise!

Lançamento: Giran Soluções e Ensino

Pessoal, é com uma enorme satisfação que escrevo este post e comunico a vocês o lançamento oficial da minha empresa junto com meu grande amigo-irmão-parceiro e agora sócio, Léo Hackin, e claro, com a participação incondicional e incansável da minha adorada esposa que, literalmente, tirou a coisa da informalidade e ‘nos deu asas’.

A empresa já está registrada há algum tempinho e, também, em atividade. Porém, hoje está sendo o seu lançamento oficial, basicamente com a marca e o site temporário pois a sede ainda está em fase final da reforma da sala e o site em ajustes finais para ir ao ar, muito em breve escreverei sobre a sede e como ela ficou.

Há algum tempo, muita gente não entendeu o meu pedido de saída da globo.com, mesmo tendo eu, acabado de entrar. O principal motivo que me trouxe de volta a Vitória foi exclusivamente pessoal e particular, não cabem comentários aqui no blog. Com o retorno, aproveitei o tempo ocioso e dei início ao trabalho que era também um sonho antigo, assim como entrar na globo.com, e agora o sonho saiu do papel e, literalmente, caiu no mundo real.

Giran Soluções e Ensino

giran_mini1Giran é o nome da nossa empresa. Durante quase 2 meses nós procuramos um nome, inventamos códigos e nomes estranhos, nomes ao contrário, nomes em japonês, em chinês, enfim, tentamos de um todo, mas nenhum deles tinha o domínio livre. Apesar de se tratar do nosso lado profissional e de ser agora a nossa cara, nossa marca e identidade ‘na rua’, o nome é algo muito especial, e não poderia deixar de ser algo nerd, afinal somos nerds. Darei uma pista e quem descobrir a origem do nome ganhará o direito de disputar uma partida de xbox na nossa nova sede; a dica: é um nome retirado de um rpg, mais especificamente de um mmorpg!

Conheça: Giran Soluções e Ensino

Na Giran o nosso foco de trabalho serão contratos de consultoria e coaching em projetos java e rails, gerenciamento de projetos com Scrum e, também, ensino e treinamento especializados em java, php e rails. Quando o site estiver no ar muitas outras informações e detalhes sobre nossa área de atuação serão disponibilizadas.

A criação e lançamento da Giran ocorreu, antes de tudo, após uma longa conversa sobre valores, princípios, visão e expectativas para a empresa e sobre como faríamos para criar e manter uma empresa jovem e descontraída e ao mesmo tempo profissional e comprometida. Nós não poderíamos simplesmente abrir uma outra ‘old big company’ baseada em velhas e obsoletas idéias e trabalhar de forma caótica e improdutiva, na nossa empresa usaremos o que há de ponta para o desenvolvimento e gestão dos nossos projetos e treinamentos, estudaremos cada caso com o máximo de detalhes, cada cliente, cada projeto afim de aplicar o que for melhor para cada situação, exatamente igual fazemos em nosso dia-a-dia e em nossa evolução pessoal+profissional.

Na Giran todo o nosso trabalho será pautado e muito fortemente baseado nos valores e princípios de Extreme Programming, especialmente em alguns que temos uma certa predileção:

  • Respeito – Pois este é a base para todos os outros valores e princípios, é o motivo pelo qual nascemos e pelo qual prosperaremos.
  • Coragem – Não seremos reativos à mudanças, não cortaremos a nossa criatividade e de nossos funcionários. Lidaremos com o risco de forma aberta, transparente e responsável; e erraremos o quanto for preciso para chegar o mais próximo possível da perfeição e continuar sempre no caminho da evolução e da melhoria contínua.
  • Simplicidade – Seremos pragmáticos, sempre! Não queremos fazer mais do que a concorrência, não queremos fazer o desnecessário, não queremos ser ‘grande e flácido’, nós queremos resolver o seu problema.
  • Comunicação – Somos emocionais, queremos olhar nos seus olhos, conversar e sentir as suas emoções, tom de voz, expressões faciais, gestos e postura, não vamos trocar uma visita por um e-mail ou telefonema.
  • Qualidade – Não pode haver desperdício. Não pode haver software ruim ou de má qualidade. Prezamos fortemente pelo código que escrevemos e sabemos que ele é o nosso produto, não se trata de nível de qualidade, o objetivo é a altíssima qualidade, e é isso que importa.

Outro ponto de grande realização para nós com a abertura da Giran é poder participar e atuar de uma forma ainda mais forte e ativa no desenvolvimento de projetos open source e nos grupos e comunidades da nossa região. Poder agora, como empresa, dedicar tempo remunerado a estes projetos, incentivar e bancar a participação dos nossos funcionários, poder viabilizar eventos e outras atividades e muito mais. Hoje nós já participamos fortemente como membros e coordenadores no ESJUG, Agile-ES, PHP-ES, Linux-ES e EESL e estamos iniciando a participação no Vitória Perl Mongers.

E é isso, agora é correr atrás e tentar aplicar tudo que eu disse para meus antigos chefes/gerentes e ver, na prática, se será bom ou ruim, fácil ou difícil, lucrativo ou não e por aí vai. Agora o sonho acabou, virou realidade!

Starling: Trabalhando com Filas em Ruby

Quem nunca ouviu a grande falácia de que Rails não escala? Isso foi moda durante algumas semanas enquanto o Twitter passava por problemas de escalabilidade, não necessariamente por culpa do Rails ou de Ruby, mas quem quer por lenha na fogueira não está muito preocupado com isso e quer mesmo é semear a discórdia. Muita água já passou por baixo da ponte, o Twitter agora está estável e as coisasfluem bem.

No começo deste ano o pessoal do Twitter anunciou e tornou open source o projeto Starling, criado por Blaine Cook. O Starling é o core do Twitter, ele é o servidor de filas responsável por manter em pé o Twitter. E agora como um projeto open source está disponível como gem e pode ser usado por qualquer outro projeto.

Indo direto ao ponto, o Starling é, basicamente, um servidor de filas implementado sob o protocolo do MemCache. O MemCache é um servidor de cache distribuído de altíssima performance e é largamente usado, principalmente em clusters de aplicações web.

Para usar o Starling é muito simples. Os primeiros passos são

Instalação

1) Instalar o servidor MemCache

[code]jeveaux@kamael ~ $ sudo apt-get -y install memcached[/code]

2) Instalar a gem do MemCache e

[code]jeveaux@kamael ~ $ sudo gem install memcache-client[/code]

3) Instalar a gem do Starling.

[code]jeveaux@kamael ~ $ sudo gem install starling[/code]

E pronto, isso é tudo para começarmos a usar o Starling. Se você achou a instalação simples se prepare, pois a utilização é ainda mais simples.

Usando o Starling

Se você já usou o MemCache vai sentir-se familiarizado com o Starling. A diferença é apenas na implementação do protocolo, ou seja, a utilização em código será igual a do MemCache, só que ao fazer set e get as coisas acontecerão de uma forma um pouco diferente. Por enquanto a diferença maior que percebi foi em relação do método get, que quando usado no MemCache apenas retorna um valor do cache e o mantém lá, já no caso do Starling o get retorna o valor e o remove da memória. Analisando com calma isso faz sentido, afinal não estamos mais falando de cache e sim de filas, mesmo que a implementação da fila seja feita usando cache.

Mas antes de irmos para os exemplos de código, precisamos fazer com o que o servidor de filas – duh, Starling – esteja disponível e rodando. Vamos iniciar o Starling na porta 22122 (-p) e como um daemon (-d):

[code]jeveaux@kamael ~ $ sudo starling -p 22122 -d[/code]

Isso já basta para iniciar o servidor do Starling e deixá-lo disponível para uso. Agora então vamos alimentar a fila, crie o arquivo: alimentar_fila.rb.

[code]#alimentar_fila.rb
require ‘rubygems’
require ‘memcache’
starling = MemCache.new ‘localhost:22122’
starling.set ‘fila’, ‘qualquer objeto'[/code]

Ao executar este arquivo (ruby alimenta_fila.rb) não teremos nenhum resultado visual, mas acredite, a fila chamada de‘fila’ no exemplo está recebendo objetos. Agora o trabalho será para – como dizem – consumir a fila. Vamos ao consumir_fila.rb.

[code]#consumir_fila.rb
require 'rubygems'
require 'memcache'
starling = MemCache.new 'localhost:22122'
loop {
  objeto_fila = starling.get 'fila'
  if !objeto_fila.nil?
    puts 'recuperado da fila:' + objeto_fila
  end
}[/code]

E agora sim estamos prontos para colocar e remover objetos em uma fila. O exemplo para consumir os objetos ficará em loop, então você pode executá-lo numa janela do bash e em outra janela ir executando o exemplo para alimentar a fila com objetos e acompanhar o comportamento dos procedimentos de alimentar e consumir a fila. A recuperação da fila será imediata, instantânea, afinal, assim como o MemCache, o Starling está preparado para receber milhares de operações por segundo.

E é isso, o seu servidor de filas já está rodando e sendo alimentado/consumido. Agora é aplicar para o que você está precisando :D

Problemas

Há um probleminha chato com a gravação de log em disco que o Starling faz das filas. Todo o set feito gera o objeto na memória e também em disco – geralmente em /var/spool/starling/. O problema é que o get somente remove o objeto da memória e não do disco. Aparentemente isso foi feito pra ser assim mesmo e segundo o próprio Blaine Cook este arquivo de log não ficará sendo incrementado para sempre, pois, depois de um certo tamanho (o engraçado é que ele não fala esse certo tamanho) ele será rotacionado, mas por enquanto ainda não descobri este certo tamanho e o arquivo tem crescido infinitamente.

E apenas uma observação quanto ao consumir_fila.rb: Não deixe-o executando por muito tempo e nem muito menos esqueça de finalizá-lo pois como ele fica em loop infinito poderá ocupar o seu processador a toa.

Customizando o gedit para Rails

Não há dúvidas que o TextMate é um excelente editor para se trabalhar com Rails, mas como nem todos possuem um Mac para ter o prazer de utilizar este editor, o jeito é se contentar com alternativas menos hype sexy.

Para quem usa Gnome, porém, é muito mais fácil encontrar uma ótima alternativa. O gedit é um editor de texto que vem, geralmente, por default em qualquer distribuição Linux com Gnome. Não vou falar muito do gedit como editor pois este não é o foco do post, a idéia é mostrar apenas o projeto gedit-rails, que é o projeto que contém uma série de utilitários para deixar o gedit ‘turbinado’ para se trabalhar com Rails.

Para instalar o gedit-rails é super simples, basta fazer o download do projeto (zip, tar.gz ou via clone do repositório do github) e fazer a instalação executando o script install.sh. A instalação é simples e não há nenhum estágio além da execução da execução propriamente dita do script e depois disso o trabalho será apenas de configuração.

A instalação adicionará no gedit o tema de fontes e cores: Darkmate, os plugins: Class Browser, HTML Tidy, Rails Hot Keys, Rails Hot Commands e Snap Open e o mais importante, os snippets. A configuração pode ser feita basicamente em duas etapas:

Tema de fontes e cores: Edit > Preferences > Fonts & Colors> Darkmate. E o resultado será:

– Plugins: Edit > Preferences > Plugins. Lembre-se, os plugins que foram instalados e que podem ser ativados são: Class Browser, HTML Tidy, Rails Hot Keys, Rails Hot Commands e Snap Open. Os snippets já estarão funcionando sem nenhuma modificação. Basicamente alguns dos recursos adicionados serão:

Recomendo também a leitura dos posts sobre gedit-rails do Urubatan, um dos autores do projeto.

Para quem curte o VI também existe uma ótima opção, o vim-rails. Qualquer dia escrevo sobre este addon.

Palestras e Atividades confirmadas

A ‘temporada’ de eventos de 2008 já começou e está a todo vapor. Este ano eu novamente eu não pude participar do FISL, mas não vou perder (pelo menos não quero perder) os outros eventos do ano. Algumas palestras já estão confirmadas:

  • Testes de Software e Ferramentas de Testes
    Semana passada apresentei uma nova versão (ainda não disponibilizei no slideshare) desta palestra sobre Testes na faculdade São Camilo, aqui no Espírito Santo mesmo, bem pertinho de Vitória. Fiz uma série de adaptações, a maioria delas em reordenação de slides e organização de conteúdo que ajudaram bastante para o bom andamento da apresentação, ficou mais legal :D
  • Introdução ao Desenvolvimento Web com Java
    Em 27 de maio farei uma apresentação de introdução do desenvolvimento web com Java onde serão abordados temas e ferramentas desde JSP/Servlets passando por JSF até uma pontinha de JBoss Seam. A apresentação será no InfoWork 2008 realizado pela UVV.
  • Ruby on Rails para iniciantes
    E pra fechar o mês, uma nova visita à São Camilo, desta vez para participar e colaborar com a expansão da comunidade Linux e de Software Livre do estado, vou participar do EESL (Encontro de Estudantes sobre Software Livre) e fazer uma apresentação (na verdade uma seção de exemplos e how-to) bem introdutória sobre Ruby on Rails, estou bastante ansioso pois esta será a minha apresentação sobre Rails.

Além destas apresentações já confirmadas, estarei entre os dias 16 e 19 de maio em São Paulo para participar do Falando em Java.