Caros amigos e leitores,
Vou escrever nesse post uma cobertura acerca do que ocorreu no evento do dia de ontem e que estive presente, o Ruby+Rails no mundo real 2010, em sua segunda edição. No ano passado também estive presente nesse mesmo evento e fiz um post de cobertura do que aconteceu. Esse ano vou “repetir a dose”…rs. Confiram abaixo!
Panorama
Ontem foi mais um sábado perdido…brincadeira…mais um sábado dedicado a angariar informação ao “portifólio de conhecimento”, como gosto de citar. Estive nesse evento juntamente com o colega de empresa Fabrício Campos. Estávamos motivados e com expectativa alta para a segunda edição do evento, muito pelo que ocorreu no ano passado. Para mim foi a segunda participação no evento, Fabrício estava participando pela primeira vez.
A localização (e a manutenção do local do evento, mesmo do ano passado) do Century Flat facilitou bastante a chegada até o local, muito pela variedade de vias de acesso e disponibilidade de transporte público até a Av. Paulista. Cheguei com um pouco de antecedência (cerca de 8h35 da manhã), fiz meu credenciamento e aguardei até as 9h00 para o início.
Consegui um bom lugar para me estabelecer: perto de tomadas Assim consegui manter meu notebook e celular “vivos” até o fim do evento! Apesar de no “fundão” o pessoal ter passado alguns “apertos” para visualizar alguns slides com código…
Abaixo vou colocar um resumo, informações e alguns apontamentos pessoais do que conferi “in loco”.
Wilian Molinari – Abertura do evento e o GURU-SP
Wilian Molinari, a.k.a PotHix, fez a abertura do evento contando para o pessoal o histórico sobre a idéia de criação do GURU-SP, e como eram as primeiras reuniões do grupo: o primeiro e segundo encontro tinham poucas pessoas (cerca de 3 ou 4). As reuniões eram esporádicas, mas conforme a lista de discussão crescia o desejo de se criar um evento crescia também. Assim o “Ruby+Rails no mundo real” (edição 2009, primeiro do grupo) foi bastante produtivo e aumentou consideravelmente o número de inscritos na lista.
A partir disso a comunidade Ruby aqui em SP cresceu e se tornou bastante sólida e ativa. As palestras subseqüentes (a maioria nos encontros mensais do grupo) foram melhores e com mais pessoas. Os encontros tornaram-se mais constantes e muitas outras empresas passaram a apoiar a o GURU-SP (inclusive a que trabalhamos eu e o Fabrício hoje: Voice Technology, que já recepcionou uma das reuniões do GURU-SP).
O GURU-SP hoje conta com alguns projetos e atividades:
- Tradução do Ruby Learning (Fabrício Campos participa );
- Tradução da Rails Magazine (Eu participo );
- Reuniões mensais;
- Lista de discussão;
- #horaextra após os encontros, pro pessoal confraternizar (“ninguém é de ferro”…rs).
Finalizando a abertura, foi passado um vídeo com uma mensagem do Matz (criador do Ruby) para o GURU-SP:
Abaixo a apresentação do PotHix na abertura (via Slideshare):
Douglas Campos & Scalone – Processamento batch – Escalando um sistema sem “fermento”
Nessa primeira palestra, @qmx e @scalone centraram as atenções para o conceito de processamento em batch, fazendo um paralelo (um tanto quanto extenso…) com a produção de pão.
A linha principal de raciocínio era: quando sua aplicação cresce muito e “escala sem esperar”, uma hora ela fatalmente não vai suprir a demanda(e “de repente” vai cair). Nesse ponto é preciso analisar alguns pontos e procurar um culpado (lógico! rs). O banco de dados (DBA), infra (sysadmin), entre outros são os primeiros da lista. O desenvolvedor nunca é o culpado (o famoso: “Eeeuu…que isso….eu não erro” rs). Por isso conhecer e saber desenvolver um sistema que possa processar múltiplas tarefas é necessário.
Para isso eles deram como “solução” o uso de dois processadores de tarefas: DJ e BJ.
Para um processamento de imagens pesadas em batch (ou conversão de vídeo), por exemplo, o mais indicado é uso do DJ. Abaixo algumas características:
Vantagens
- Documentação e tutoriais vastos;
- Curva de aprendizado baixa.
Detalhes
- Sinatra-dj;
- Compatível com rails > 2.2;
- Usa daemon ou worker.
Desvantagem
- Depende de Active Record, mas suporta backend mongomapper.
Exemplos de código
- http://github.com/qmx/batch-rreal2010 (usando DJ e BJ).
Uma outra biblioteca útil para trabalhar em conjunto com o DJ é o delayed_paperclip.
Abaixo as informações acerca do outro framework, o BJ:
Vantagens
- Mais simples e robusto;
- Instalação fácil;
- Curva de aprendizado mais baixa que o DJ.
Desvantagens
- Executa de forma serial;
- Depende do Active Record para gravar os jobs;
- Documentação? Só existe o README…
Um ponto importante que deve ser sempre ressaltado: DJ e BJ não são balas de prata. Uma outra ferramenta citada na apresentação foi o resque, usado em conjunto com o Redis (banco de dados NoSQL), para criação de filas de uso muito mais rápidas e escaláveis. Tem uma interface de administração legal e é uma solução muito valiosa.
As seguintes ferramentas de monitoração para soluções de processamento em batch foram dadas: Monit, God, Munin. E toda essa palestra se baseou em cases de sucesso, como o da própria AutoSeg (empresa onde trabalham ambos os palestrantes) e GitHub. Aliás, o GitHub também usa um servidor chamado Unicorn, que é faz parte das muitas soluções usadas pelo site para manter-se no ar com estabilidade.
Uma outra fonte muito legal sobre o assunto, que encontrei em pesquisas (o autor desse post mesmo…rs), foi um post do Tobin Harris intitulado “6 ways to run background jobs in Ruby“.
Para encerrar, só queria citar o ponto de que ambos os palestrantes estavam muito dispersos, divagaram demais no começo da apresentação. Até chegar na parte técnica mesmo foi “muito pão e poucas explicações claras”. Houve demora pra chegar no “core” da palestra (apesar das boas pitadas de humor). Mas tirando isso tudo certo…rs.
Abaixo confiram o vídeo da palestra (“produções Agaelebe”, by Hugo Borges, que gravou o evento todo e irá disponibilizar os vídeos a medida do possível):
A apresentação no Slideshare:
David Paniz e Leonardo Bessa – Entendendo metaprogramação e por que magia negra não existe (Voodoo é pra jacu)
O objetivo da apresentação, totalmente cercada por exemplos práticos (e a frase de título foi devido aos exemplos usando classes com o nome “Pica-pau”), era conhecer por dentro a metaprogramação e como ela realmente funciona dentro da linguagem Ruby. Ambos os palestrantes demonstraram o porque não é um bicho de “sete cabeças” mesmo…rs.
Primeiramente, a definição da Wikipedia para metaprogramação é complicada:
“Metaprogramação é a programação de programas que escrevem ou manipulam outros programas (ou a si próprios) assim como seus dados, ou que fazem parte do trabalho em tempo de compilação.”
O correto seria : Metaprogramação é escrever código que escreve/gera código. Assim fica mais claro (!).
Em Ruby é totalmente aceitável aproveitar as open classes, ou seja, a facilidade que a linguagem dá pra mudar o comportamento de objetos em tempo de execução, ao contrário de outras linguagens (Java e C#, por exemplo). Mas, usar e abusar disso não é legal: deve ser feito com responsabilidade e a medida que for necessário usar, sempre com comprometimento e responsabilidade.
Na apresentação as demos mostradas eram exemplos práticos dos mais variados assuntos: eu realmente posso adicionar um método a um objeto? onde o método fica? que tipo de objeto pode definir métodos? Métodos são adicionados em classes ou objetos?
E para complementar o assunto houveram definições de Singleton Class, Metaclass e EigenClass. Apesar de ser um assunto fora do meu conhecimento, consegui “pescar” alguns conceitos.
Abaixo o vídeo da palestra, gravado pelo Agaelebe:
E a apresentação no Slideshare:
Hugo Baraúna – Keynote: O que há de novo no Rails 3?
Hugo Baraúna, desenvolvedor Ruby/Rails há 3 anos na Plataforma Tecnologia (empresa focada em projetos/coaching em Rails, onde trabalha também José Valim, core Rails), trouxe um overview acerca das novidades do Rails 3, a ser lançado no segundo semestre de 2010. A maioria das informações se encontram no RailsGuides.
Abaixo os pontos, informações e mudanças mais importantes:
- Arquitetura: Rails -> ActionDispatch -> ActiveSupport (core do Rails). Todo o resto são plugins (Railties);
- Vantagens do Rails3 : Performance, Modularidade e Agnóstico (aceita os mais diversos plugins);
- Comandos do Rails: não é preciso mais escrever ” script/”alguma coisa” “, pois agora isso é nativo do comando rails (ex: rails server);
- Bundler: biblioteca para gerenciamento de dependências;
- Action Mailer (nova API);
- Router;
- ActiveModel (oriundo do google summer code 2009);
- Active Record;
- JS Driver: JavaScript no Rails3 (Prototype, JQuery ou MooTools);
- Unobtrusive JavaScript;
- XSS protection.
Para quem estiver interessado, a Plataforma mantém um profile no GitHub com alguns projetos relacionados a Rails 3. Abaixo 2 deles:
- Mail Form: “Send e-mail straight from forms in Rails with I18n, validations, attachments and request information”;
- Responders: “A set of Rails 3 responders to dry up your application”.
Abaixo o vídeo da palestra, gravado pelo Agaelebe:
E os slides presentes no Slideshare:
Marcelo Castellani – Rhodes, um framework para o desenvolvimento de aplicações nativas para smartphones usando Ruby
Essa para mim era uma das principais palestras do evento, pois já tinha ouvido falar dessa ferramenta (além do Titanium, que é open source também), para construção de aplicativos para dispositivos mobile (leia-se smartphones) multiplataforma.
O mercado mobile é muito promissor e já é uma realidade, fato. Há perspectivas para que no ano que vem existam mais acessos a internet pelo celular do que pelo Desktop (leia uma das fontes da notícia aqui). Portanto, conhecer e dominar técnicas de escrita de aplicativos para o mundo mobile, e não só para Desktop ou Web, é necessário.
Abaixo uma listagem das features do Rhodes, citadas pelo Castellani na apresentação:
- Faz parte da “família Rhomobile“, composta pelo Rhodes, RhoSync e Rhohub;
- Suporte a Iphone OS, Android, Blackberry, Symbian e Windows Mobile. Ou seja, praticamente 95% do mercado;
- As aplicações são nativas mesmo, para cada plataforma. Não há aplicações web rodando por baixo e mascaradas;
- O Rhodes possibilita a criação de aplicativos de celular com linguagem Ruby, ou seja, existe ganho de produtividade;
- A API é bem extensa para todos tipos de celulares;
- Rhodes é open source ;
- Como vantagens podemos citar uns dos lemas do Java : Write once, Run everywhere;
- Há abstração de hardware (não há necessidade de saber a arquitetura física do celular);
- RhoSync é pago
- RhoHub tem um plano Free e outros pagos
- Programa interessante para análise: Pivotal Tracker (Traker-r);
- Instalação: gem install rhodes / rhodes-setup. “Very easy”
- Atenção: o interpretador de Ruby do Rhodes é um subset do Ruby 1.9, portanto não há algumas funcionalidades da linguagem;
- A parte de persistência é feita através do Rhom: é um mini object mapper disponível no Rhodes (como se fosse um Active Record);
- É possível criar splash screen (tela de carregamento da aplicação), páginas de tratamento de erro, pode-se definir arquivos específicos por plataforma, usar GPS, câmera, etc;
- Para usar GPS na aplicação é preciso implementar Ajax. A plataforma Blackberry é a única que não suporta Ajax;
- Existe uma biblioteca para implementação de testes: Mspec;
- Licença: livre para aplicativos open source; 1000 dólares para aplicativos que forem cobrados.
Castellani tinha uma hora para apresentar e terminou em 45 minutos (!). Ao final muitas perguntas foram feitas e o pessoal realmente achou o assunto interessante!
A apresentação no Slideshare se encontra abaixo:
E o vídeo da palestra no blip.tv:
Anderson Leite – BDD e Cucumber
Antes de iniciar a sua palestra (e após um longo hiato de espera onde o pessoal dispersou…), Anderson Leite informou ao público que a nova reunião do GURU-SP está marcada previamente para o dia 26/06/10. Mas a data pode ser alterada (pois já existem outros eventos oficiais marcados, como o Agile Brazil e o Profissão Java, por exemplo).
A respeito da palestra, a mesma se centrou em 3 pontos: BDD, Cucumber e Cobertura de testes.
A idéia central é que um software deve ter testes, e devem estar de acordo com a visão do cliente, com o comportamento do software e daquilo que pode ser útil/com finalidade. É sabido que cerca de 80% de um software não é usado pelo cliente final.
Para nos auxiliar a fazer aplicações de valor (usando Ruby) a implementação dos conceitos de BDD se torna necessária. Algumas informações adicionais:
- Livros indicados para leitura: The RSpec Book e Domain Driven Design;
- Frameworks de teste baseados em BDD necessitam de uma linguagem de domínio;
- A linguagem de domínio no BDD deve ser baseada na visão dos stakeholders;
- No BDD faça o suficiente. Sempre entregue de valor real. Tudo é comportamento. Prefira algo “sem papelada”.
O Cucumber é uma ferramenta para a linguagem Ruby, baseada em BDD, que dificulta a perda de informação acerca de um domínio entre cliente, desenvolvedor e testadores. O Anderson fez alguns exemplos práticos, mostrando cenários de teste, mas para não “chover no molhado” nesse post e colocar informação repetida, eu indico algumas referências para o aprendizado:
- Beginning with Cucumber – RailsCasts;
- Screencast Ruby on Rails: Introdução a RSpec e Cucumber – Blog da Caelum (post escrito pelo próprio Anderson Leite! Por isso que pra mim foi “chover no molhado”…rs);
- Use the Cucumber – PeepCode (screencasts pagos, geralmente 9 “doletas”).
Para encerrar ele indicou um projeto para cobertura de testes: relevance-rcov.
E lembre-se: escrever código sem testes é uma #putafaltadesacanagem
Abaixo a apresentação no Slideshare:
E o vídeo no blip.tv:
Cassio Marques – Refatorando Ruby – Técnicas de Orientação a Objetos e Design Patterns Aplicados a Linguagens Dinâmicas
Essa foi a última palestra do evento, ufa! Mas não é aquele “ufa!” de “putz, não vai acabar essa joça não…”, pelo contrário: essa não foi aquela palestra que você não vê a hora de terminar para ir embora. Cassio Marques segurou o público até o final com um tema muito bom e de grande interesse do pessoal, inclusive o meu!
Para explicar e pensar no assunto precisamos responder algumas perguntas como: O que é refatorar um código? Porque mexer no código? Se o código está funcionando porque vou mexer??
As motivações, ou melhor, razão para refatoração em código são muitas:
- Muitas pessoas usam Ruby mas não sabem orientar a objeto (ainda tem dúvidas do paradigma Procedural x OO);
- Raciocínio estático;
- Uso de linguagem nova mas usando hábitos antigos;
- Organização de código;
- Modularizar o código;
- Facilitar manutenção e compreensão do código.
E quais as motivações para usar Design Patterns:
- Ajuda Ruby a ser “Enterprise”;
- “YAGNI” (eu não conhecia esse termo não…rs!).
E não esquecendo de que escrever, ter uma suíte de testes escritos e uma cobertura de testes é necessário pra verificar uma refatoração.
As dicas sobre refatoração foram:
- Mantenha seus métodos pequenos e facilitando compreensão e coesão;
- Dê nome aos parâmetros dos métodos;
- Uma classe não deve realizar trabalhos que não estejam relacionadas a ela! Tenha coesão;
- Substitua “números mágicos” por constantes;
- Encapsule variáveis/propriedades de objeto (como getters e setters do Java);
- Substitua condicionais por polimorfismo;
- Simplifique expressões condicionais;
- Padrões que valem ser estudados para Ruby: Command, Strategy, Delegation.
Abaixo a palestra, disponibilizada pelo Cassio Marques. Deixo meus parabéns para o mesmo pela apresentação e responsabilidade de fechar o evento!
O vídeo gravado e disponibilizado no blip.tv pelo Hugo Borges (@agaelebe) está abaixo:
Conclusão
O evento superou minhas expectativas? De certo modo não, de certo modo sim…(momento Cléber Machado…rs). Se eu fosse comparar com o evento do ano passado, na minha concepção, a grade de palestras do ano passado foi melhor. Esse ano o nível de palestras foi bom (nota 7). O diferencial, sem dúvida, foi a interação do pessoal, que fez muito mais networking e estava muito mais ativo em relação ao ano passado, junto com o aumento do número de patrocinadores e estandes de empresa no local.
Na minha concepção:
Pontos negativos
- Coffee break fraco;
- Wi-Fi muito lento e instável. Ano passado não houve disponibilidade de sinal, e esse ano foi praticamente se não tivesse também;
- Tela de projeção muito baixa, dificultando visão do pessoal do fundo da sala;
- Houve um hiato muito grande entre a palestra do Castellani e do Anderson, fora o sorteio e o problema do datashow. Nesse momento o pessoal dispersou no “fundão” do local…
Pontos positivos
- Boa localização
- Fabrício Campos foi sorteado e ganhou uma mochila da Localweb com alguns brindes dentro!
Para aqueles que queiram ver fotos do evento, vejam os links abaixo:
E quem quiser acompanhar os tweets do evento:
- Busca pelo hashcode oficial no twitter, acerca do evento (#rubyreal2010);
- Perfil do GURU-SP no twitter.
O Ricardo Almeida escreveu um post no site #horaextra, contendo as apresentações e vídeos das palestras.
Bem, acredito que seja isso que eu queria passar. Espero que vocês tenham gostado da cobertura e conforme as palestras, ou informações adicionais, forem liberadas eu atualizo o post.
Nos vemos no Ruby+Rails no mundo real 2011 e viva a comunidade Ruby em Sampa!
Até mais!