Minhas impressões – Ruby+Rails no mundo real 2010 – 29/05/10

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:

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

Exemplos de código

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

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):

[blip.tv ?posts_id=3716284&dest=-1]

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:

[blip.tv ?posts_id=3728666&dest=-1]

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:

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:

[blip.tv ?posts_id=3721460&dest=-1]

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:

[blip.tv ?posts_id=3730009&dest=-1]

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:

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:

[blip.tv ?posts_id=3737359&dest=-1]

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:

[blip.tv ?posts_id=3737667&dest=-1]

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:

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!

Anúncios

Apresentação sobre “Os seis chapéus do pensamento”

No 8º encontro do GURU-SP, no qual estive presente e hei de escrever um report, aprendi acerca do assunto “os seis chapéus do pensamento”, via Rafael Rosa. Fiquei empolgado com o assunto e além de fazer a aquisição do livro (coisa que o Rafael  não indicou, mas fiz mesmo assim…rs) montei uma apresentação para repassar o conteúdo pro pessoal da empresa onde trabalho (Voice Technology). Abaixo coloco o link da apresentação no slideshare:

Caros leitores: qualquer opinião ou dúvida fiquem a vontade para falar!

P.S. : Fiz a apresentação há 3 horas atrás e o pessoal gostou bastante do conteúdo! A idéia de fazer mais lightning talks na empresa, aparentemente, foi bem aceita e com bom público. Só queria deixar o agradecimento, novamente, ao Rafael Rosa pela “luz”!

Minhas impressões – 1º Bate Papo do SP-GTUG (Globalcode – 03/03/10)

Caros colegas,

Vou escrever um pouco acerca das minhas impressões do 1º Bate Papo do SP-GTUG, ocorrido na Globalcode em 03/03/10. Estive presente em mais esse evento/encontro de pessoas interessadas nas tecnologias do Google. Se você quiser saber mais sobre o SP-GTUG, leia acerca do 1º encontro do SP-GTUG, ocorrido no ano passado (Agosto/2009).

Introdução

Após a primeira reunião do grupo, ocorrida no mês de Agosto/2009, houve um “hiato” em termos de organização de eventos e geração de conteúdo relativos as tecnologias Google, seja no blog do grupo, lista de discussão ou apresentações públicas. Graças aos incentivos, força de vontade e senso de organização do Paulo Fernandes, no começo desse ano foi organizado o 2º encontro do SP-GTUG, também na Globalcode em 06/02/10.

No 2º encontro os membros (alguns novos e outros remanescentes da primeira reunião) rediscutiram as estratégias do grupo, novos colaboradores e como incentivar a geração de conteúdo. Eis que uma das idéias que surgiu foi de organizar “bate papos”, que no final acabam sendo como os minicursos da Globalcode: membros que forem capacitados em alguma tecnologia do Google e se sentirem confortáveis em pesquisar e explicar, fazem uma apresentação para um público alvo interessado. Chegamos ao acordo que, a cada “bate papo”, 2 temas (2 palestras com 1h30 cada) seriam apresentadas e o assunto discutido com o público.

Com base nisso, foi marcado o 1º Bate Papo do SP-GTUG (!). Os assuntos do primeiro bate papo (e os “sortudos” que teriam a honra da estréia) foram:

  • Google AdWords, com Eric Gomes;
  • Opensocial, com Róbson Dantas.

Abaixo um pequeno resumo sobre as palestras.

Google AdWords – Eric Gomes

Eric Gomes, que é especialista em AdWords e já trabalha na área, trouxe a público um overview simples e direto sobre essa tecnologia. O AdWords nada mais são do que anúncios, encontrados em forma de link e presentes em ferramentas de busca (vulgo Google) de acordo com as buscas de um usuário (por meio das palavras  chave). Outros locais que podemos visualizar esses anúncios são  Youtube, Orkut, Gmail, Maps, etc. Favor não confundir AdWords com AdSense!…rs.

Alguns termos mais técnicos (e mais importantes da apresentação) sobre AdWords foram abordados, como:

Não é a toa que as propagandas perfazem, praticamente, o total do valor da renda arrecadada pelo Google, que é de cerca de 97% (Para mais informações ver esse post com os números do Google).

Quer saber mais do assunto? Veja os links abaixo:

Opensocial: aplicações e conceitos – Robson Dantas

“In particular, we’ve identified Robson Dantas (site) as an OpenSocial Guru for consistent demonstration of technical expertise and community involvement.” (Opensocial Google Group).

Para falar sobre OpenSocial nada melhor do que um Guru do Opensocial (como foi definido pelo próprio Google!), ou seja, Robson Dantas. Para não complicar (rs), vou transcrever a definição de Opensocial da Wikipédia:

O Google OpenSocial é uma plataforma do Google baseada em HTML convencional e Javascript. Uma API (Interface de Programação de Aplicativos) aberta [1] que permite que desenvolvedores criem widgets (aplicações ou add-ons) para rodar dentro de redes sociais [2] que aderirem à plantaforma OpenSocial. As redes sociais que já aderiram são o Orkut, MySpace, Friendster, LinkedIn, hi5, XING, Plaxo, Ning, Oracle, Viadeo e SalesForce[3].

O Robson passou para os presentes um panorama do desenvolvimento e oportunidades que podem ser aproveitadas nas redes sociais do Brasil e do mundo. Alguns números interessantes sobre esse nicho são:

  • Mais de 85% dos internautas usam redes sociais, seja Orkut, Facebook, Sonico ou outras;
  • No Orkut: 22 milhões de usuários. Acesso: 28 visitas ficando 496 minutos/mês.

Podemos explorar esse nicho desenvolvendo um ambiente formado por: Opensocial + aplicativos + criatividade (simples, sociais, atrativos e “virais”). Trazendo para a realidade temos alguns cases de bastante sucesso, como Buddy Poke, Mafia Wars e Farm Ville.

Alguns termos mais técnicos (e mais importantes da apresentação) sobre Opensocial foram abordados, como:

  • Opensocial API;
  • Conhecimentos que um desenvolvedor precisa ter: HTML, Javascript e outra linguagem (Java, PHP, Python, etc.);
  • Ferramentas a serem usadas: Firebug, Opensocial plugin, Sandboxes, Partuza, Shindig, OSDE;
  • Demo: Shindig + Opensocial e gadget “Hello World”;
  • Visão de mercado: desenvolvimento de plataformas de mídia, jogos online e aplicativos sociais (inclusive no próprio Google!).

Quer saber mais do assunto? Veja os links abaixo:

Conclusão

O encontro reuniu por volta de 20 a 25 pessoas, uma média considerável para um horário das 19h as 22h de uma quarta feira. E já teve 2 palestrantes de muito bom nível em sua primeira edição!

Espero que outros bate papos possam acontecer, e mais “especialistas” e interessados se disponham a apresentar. Mas, é importante ressaltar: nem só de apresentações viverá o grupo! Temos em mente que precisamos de mais colaboradores criando conteúdo no blog, participando dos eventos, enviando dicas na lista de discussão e oferecendo outras localizações para as reuniões do grupo (quando o auditório da Globalcode estiver ocupado).Participe da lista de discussão do SP-GTUG e dê sua opinião também!

Mais uma vez fica o agradecimento (e acredito que dos demais também) ao Paulo Fernandes de dar o “pontapé inicial” nessa iniciativa de angariar “sangue novo” para o grupo e estar organizando os encontros. Agradecimento também vai para a Globalcode, que pela terceira vez em três encontros (rs) cede o espaço gentilmente ao grupo.

Agora alguns avisos para os possíveis novos encontros (e bate papos). Já existem pessoas interessadas em apresentar alguns temas relacionados as tecnologias do Google. Abaixo listo alguns:

* Deise Garrido – Adsense

* Rodrigo Ribeiro (Isso mesmo: o “paguá” que escreve esse post…rs) – Android

* Paulo Fernandes – Overview de algumas tecnologias Google (a definir)

* Fabio Gama – Open Social, Maps, AppEngine

* Octavio Turra – Wave, Chrome

* Fernando Masanori – Python no AppEngine

Portanto não perca os “próxmos” capítulos! Interessado em participar? Venha discutir conosco! Acesse: http://groups.google.com/group/sp-gtug

Bem, por enquanto é só! Espero ter sido claro com as palavras e ter passado conteúdo útil com este post.

Até mais!

Dojo com Program-ME e Arduino na Globalcode – 10-12-09

Como diz o ditado: “antes tarde do que nunca” 🙂

Com um pouco de atraso vou divulgar aqui algumas informações a respeito da minha participação no Dojo com Program-ME e Arduino, que aconteceu no dia 10 desse mês (a uma semana exatamente) na Globalcode (Unidade São Paulo). Por lá tive a felicidade de encontrar um companheiro de trabalho (Alex Moraes), que também é interessado em programação, novas tecnologias e participa do grupo de Ruby da Fatec-SP.

A questão é: o que é um dojo (mais precisamente coding dojo) ?

Vou usar como referência um texto retirado da página do Coding Dojo UFSC:

Segundo o http://codingdojo.org/: “Um Coding Dojo é um encontro onde um grupo de programadores se reúne para trabalhar em conjunto em um desafio de programação. Eles estão lá para se divertir, e, através de uma metodologia pragmática, melhorar suas habilidades de programação e de trabalho em grupo.”

O Coding Dojo tem algumas regras básicas:

  • Desenvolvimento guiado por testes: Antes de fazer qualquer implementação, deve ser escrito um teste, que ao passar indica que a implementação está correta.
  • “Passos de bebê”: Se um teste não está passando, você deve escrever o código mais simples possível que faça o teste passar. Quando for escrever um novo teste para o mesmo método, escreva um teste que teste só um pouquinho a mais da funcionalidade desejada.
  • Pair programming: A programação é feita em duplas. Cada dupla tem um piloto e um co-piloto. Ambos pensam em como passar no teste atual, mas só o piloto digita. Cada par tem por volta de 5 a 10 minutos no seu turno. Quando esse tempo acaba:
    • O piloto volta para a platéia
    • O co-piloto assume o lugar do piloto
    • Um novo co-piloto vem da platéia
  • Todos devem entender: O piloto e o co-piloto devem sempre explicar em voz alta o que estão tentando fazer para solucionar o problema. Qualquer um na platéia pode pedir explicações se não entender algum raciocínio.
  • Três fases: Um Coding Dojo sempre está em alguma dessas 3 fases, dependendo do estado dos testes:
    • Vermelha: Pelo menos um teste não está passando. A dupla da vez deve se concentrar em fazer o teste passar. A platéia não deve falar nessa fase, para não atrapalhar piloto e co-piloto.
    • Verde: Os testes acabaram de ser rodados e todos estão passando. Essa é a hora de quem está na platéia dar sugestões para melhorar o código.
    • Cinza: O código foi modificado de acordo com as sugestões, mas a bateria de testes ainda não foi rodada. Deve-se evitar fazer grandes modificações no código nessa fase.

Qual o objetivo desse codingo dojo (Retirado da página de notícias da Globalcode)?


Neste Dojo, os participante deverão implementar uma aplicação que simulará o antigo brinquedo eletrônico conhecido como Genius.A simulação deverá gerar as seqüências de cores usando LEDs para um jogador interagir fisicamente com aplicação através de botões coloridos para repetir a seqüencia aleatória apresentada. O algorítimo deverá então captar essas ações e identificar se a seqüência realizada pelo jogador está correta ou não.

Durante este evento, com a participação especial do Felipe de Almeida Rodrigues (Fratech, ou “cover” do Martin Fowler, rs) e pelo Alberto Spock Lemos (Dr. Spock), que participaram de um DOJO no Linguágil, você aprende aplicar TDD e Pair Programing ao revesar na escrita do código a cada 7 minutos com outros participantes. Portanto, o problema deverá ser resolvido “ao vivo”.

Participando,  voce aprende técnicas ágeis de desenvolvimento, uma linguagem de programação, conhece o Program-ME e o que é computação física.

A minha opiniao do evento

O meu interesse em participar desse minicurso veio da palestra “Robótica Open Source – Vinícius Senger & Paulo Carlos dos Santos”, que aconteceu no OpenTDC 2009, onde finalmente consegui ver ao vivo as coisas acontecendo. Planejo, em futuro próximo, adquirir um kit desses para “brincar”…rs.

Achei legal a experiência e primeiro contato com o Arduino e os meios de programação do mesmo. Os instrutores trouxeram uma nova maneira de “fazer minicursos”: não é só uma pessoa falando durante 3 horas seguidas de um assunto, sem haver interação com o pessoal. São as mesmas 3 horas de interação, diversão, mão-na-massa e descobertas de momento acerca do assunto que foi abordado. Esse foi o ponto principal: todos participaram e fizeram o minicurso! (até eu tive meus 14 minutos, como co-piloto e piloto 🙂 )

Abaixo coloco algumas fotos tiradas por mim no evento (em algumas está Alex Moraes, no seu momento “co-piloto”):

Ao final do minicurso, Felipe e Dr. Spock disseram ao público que há a intenção de serem feitos mais dojos na Globalcode, de Arduino (é claro) e de outros assuntos. Portanto aguardem mais informações.

O Dr. Spock (que também escreve em seu blog sobre Arduino) já publicou dois artigos sobre esse dojo, inclusive com o código final gerado pelo pessoal do minicurso, alcançando o objetivo do projeto. Para conferir, acesse:

Bom, por enquanto é só e agradeço desde já aqueles que deram uma passada no meu blog e fizeram a leitura.

Até a próxima e aguardem as novidades!!

Apresentações – Sun Tech Days 2009/2010

Recebi esse email a poucos minutos atrás. Para os que não puderam estar presentes no Sun Tech Days 2009/2010 em SP (e para os presentes também) eis as apresentações do evento, disponibilizadas para os participantes. Acredito que seja interessante para todos. Eis abaixo o email:

Clique aqui, caso não visualize o e-mail corretamente.
Nesta oitava edição no Brasil, o Sun Tech Days 2009
foi um sucesso!

Com a presença de James Gosling, o “Pai do Java”, o Sun Tech Days reuniu desenvolvedores, estudantes, arquitetos, parceiros e formadores de opinião.

Foram dois dias de muita tecnologia, conhecimento, participação, inovação
e – por que não? – muita diversão!

Obrigado por sua participação, você ajudou a fazer a diferença neste evento.

Se quiser saber mais sobre a Sun Microsystems, nossos produtos e soluções, acesse www.sun.com.br.

Clique aqui para ver as palestras apresentadas este ano.

Esperamos encontrá-lo(a) em nossos próximos eventos!

Sun Microsystems

Minhas impressões – Sexto encontro GURU-SP – 26-09-09

Caros leitores desse blog,

Na manhã do dia 26-09-09, juntamente com o companheiro de trabalho Fabrício Campos, estive presente no sexto encontro do grupo de usuários Ruby de São Paulo (GURU-SP), ocorrido no auditório da GoNow. O tema chave era testes automatizados, em ritmo de perguntas, respostas e bate papo, tendo uma mesa redonda com especialistas no assunto interagindo bastante com o público.

Por meio deste post vou fazer um resumo do que presenciei no período das 10h00 até 15h30 (~) do excelente dia de sábado (também em termos climáticos…rs).

Panorama geral

Platéia - Sexto encontro GURU-SP
A algum tempo atrás tivemos o quinto encontro do GURU-SP, ocorrido na Voice Technology, e que fez sucesso. Lá tivemos cerca de 30 pessoas. Muitas expectativas foram geradas para o sexto encontro, e todas positivas. O nível de discussão só tendia a aumentar e ser mais especializado, fora o aumento do número de participantes. Neste sexto encontro tivemos por volta de 40 a 45 pessoas (apesar de termos 67 inscritos) e as expectativas foram alcançadas.

Mesa de discussão

Fizeram parte da mesa:

Mesa de discussão

Não puderam estar presentes: Diego Carrion e o Fábio Kung.

O encontro – parte 1

Rafael Rosa Fu fez a introdução do evento, agradecendo as empresas patrocinadoras, pessoal presente em um sábado de céu azul as 10h00 (rs) e ao crescimento dessas reuniões. Apresentou os membros da mesa e fez uma pesquisa do tipo de pessoal presente (membros da comunidade Ruby, Java [os “estranhos no ninho”, como bem definiu o Jorge Diz…rs], etc.) e já deixando no ar o objetivo chave da discussão para todos: quem faz testes? Porque e para que fazer testes? Quais as dificuldades?Que ferramentas eu uso e quais são?

A partir daí cada membro da mesa mostrou o porque de testar e onde testam nas empresas em que trabalham. Algumas perguntas vieram da platéia para “encorpar” a discussão. Um dos exemplos, que foi bastante usado e citado no encontro, foi de um rapaz da platéia que tinha muita dificuldade de testar soluções com NFP, usando Java + JUnit, pois os testes cresciam de forma “exponencial”, devido ao número de possibilidades de transações, por exemplo.

O consenso a respeito desse assunto: é importante pensar até onde testar, pois testes tem custo, seja de tempo ou financeiro. São indispensáveis, sem dúvida, pois é preciso fazer entregas íntegras e imunes a bugs. Soluções empresariais geralmente tem “hot zones” em relação a bugs. Conhecer como identificá-las e atacá-las se torna necessário.

Jorge Diz trouxe uma opinião interessante a respeito dos muitos conceitos apresentados sobre “alguma coisa+DD” (Driven Development): eles existem em várias linguagens, mas os métodos de teste e ferramentas usadas ainda não convergem para um padrão. Ruby parece ser bastante eficaz, seja em TDD, BDD e outros “DD’s”, e é aplicável até para testar Java (!).

Mas, cuidado: metodologias ágeis + teste de software só funcionam se você conhece, entende e sabe aplicar testes nos seus projetos. Não ouse começar a fazer TDD se você não é maduro o suficiente para escrever testes primeiro para depois codificar (para mais detalhes veja o conteúdo da palestra “Só imaturos não testam”, do Carlos Brando).

Cássio falou um pouco de sua experiência acerca das linguagens de programação e como executou/executa testes nelas. Deu exemplos falando do passar do tempo e o avanço ocorrido, desde a linguagem  C, C++, Java até Ruby. Hoje é muito mais fácil escrever e desenvolver testes, portanto escrevem-se mais testes, e não é tão trabalhoso quanto as linguagens antigas. Se você não escreve/testa quando programa em Ruby então você está fora do cotidiano e do senso comum.

Alguns outros questionamentos:

  • É preciso testar bibliotecas baixadas (gems ou jars) e que vão interagir com sua aplicação? R: de preferência sim, pois o comportamento dele com o seu código não é descritível e sabido;
  • É preciso testar CRUD? R: sim, pois 90 % das aplicações tendem a quebrar neles, ou em pontos associados a ele. Em contrapartida, testes em banco de dados são difíceis de executar, independente da tecnologia.

Algumas observações:

  • Teoria da janela quebrada acontece muito: se você deixa de testar ou escrever testes para um componente, isso tende a não testar e escrever testes para outro. Mesmo que não exista 100% de cobertura nos testes, não seja “desleixado”. Isso dá aval para outros também serem;
  • Se você ler algo a respeito de “alguma coisa+DD” tenha certeza: é um modelo de desenvolvimento criado pelos agilistas. Os mais importantes são TDD e BDD. Qual a vantagem: detalhar e escrever algo antes e que precisa passar por aferição antes de desenvolver;

Esses pontos anteriores foram discussão para o período inteiro da manhã praticamente (!).

Para fechar, antes de ir para o coffee-break, Anderson Leite mostrou exemplo prático usando Cucumber, para mostrar como  funciona essa ferramenta de teste em Ruby. Selenium e Webrat foram citados e mostrados como alternativas para testes de interface web, sendo o Webrat o “motor nativo” em Ruby para estes testes. O diferencial foi a rapidez na construção das aplicações, pois muita coisa já está pronta (Scaffolds). RSpec e Shoulda foram citados de maneira breve nesse horário (test units). Vimos como funciona a escrita de testes e como esta se aproxima do conceito literal do caso de teste em si, facilitando a leitura e entendimento do corpo técnico (empresa) e do corpo não-técnico (clientes).

Anderson Leite e Cucumber

Hora do Rango (!)

Sem comentários. Excelente e precisa, pois não dispersou o pessoal do local, extendendo mais o horário do evento, e facilitou o networking (mais troca de cartões, idéias e etc.). 30 minutos preciosos de descanso. Parabéns a GoNow por disponibilizar os lanches, refrigerante e uma máquina de café. 😉

O encontro – parte2: A volta aos testes (rs)

Jorge Diz foi a frente e fez uma apresentação “reciclada” de outras apresentações, mostrando os conceitos e premissas básicas da área de teste e qualidade de software. O que testar, quais são os papéis, tipos de testes, até onde testar, pessoas envolvidas, escolas de teste e etc, foram mostrados de forma conceitual. Jorge está se preparando para tirar uma certificação de teste de software, por isso o interesse e abordagem do assunto. Não é a toa que ele estará no encontro do dia 30 na ALATS, com o tema “Agile e Scrum – O Tsunami da Agilidade na Praia dos Testes: Novos Modelos, Novas Ferramentas. Eu e o colega Fabrício estaremos por lá 🙂

Foi uma abordagem bastante ampla, apesar de corrida, mas que exemplificou e mostrou um “resumão” da área de testes e o que permeia a mesma. A título de informação: somente eu e Fabrício Campos éramos, dos presentes no evento, nativos da área de teste de software. A discussão e interação do público com a mesa continuou quando partiram para o assunto de quando usar mocks e stubs em Ruby. Como foi bem técnica a discussão não tenho como colocar mais detalhes no post, devido ao meu conhecimento limitado de Ruby.

Após a passagem de slides do Jorge, Thiago Scalone foi a frente e apresentou um “screencast” gravado pelo mesmo acerca do Selenium e integração com projetos Ruby. O exemplo foi prático e mostrou  uma sequência de clicks e navegação via browser, que após serem “copiados” (macro) podem ser executados pelo selenium. O Selenium em si é uma suite de aplicativos (Grid, IDE, Remote Control, etc.), cada qual com sua finalidade. Problemas o mesmo também tem, como timeout de execução de passos (deve ser “calibrado”, pois o tempo de resposta de uma requisição ou resposta pode variar, seja pelo site ou navegador acessado), por exemplo.

Após o pessoal da mesa fazer mais uma integração e conversa com o público a respeito do uso do Selenium, Anderson Leite voltou a frente para “saciar” o interesse, fora as dúvidas do pessoal, a respeito do RSpec, ferramenta de testes unitários que se aproxima do Junit. Ao mesmo modo do Cucumber, foi mostrado um exemplo prático com a ferramenta.

Anderson Leite e o RSpec

Conclusão

Achei o evento muito bom e esclaredor a respeito das ferramentas de testes que Ruby dispõe aos seus programadores. No quinto encontro do GURU-SP instalei Ruby na minha máquina, mas até agora não tive tempo para estudos 😦 . Mas irei me empenhar, muito pelo que eu vi no sábado e pela oportunidade de unir o útil ao agradável: teste de software + desenvolvimento de software. Os únicos pontos que podem ser considerados “negativos” foram o ar-condicionado (geladíssimo…rs), a ausência de Wi-Fi destinado ao evento (usamos uma rede que estava com sinal aberto…rs) e a localização (apesar de o transporte público ficar perto do local o deslocamento até o mesmo é muito grande). Poderiam existir mais filtros de linha também :p

Deixo meus agradecimentos ao pessoal da GoNow (excelente recepção e auditório) e ao Rafael Rosa Fu, pelo trabalho e disposição para reunir o pessoal. A todos que participaram, obrigado pela oportunidade de participar das discussões e troca de conhecimento com vocês. Espero poder participar/ajudar/divulgar o sétimo, oitavo, nono, décimo…. (E lembrem-se: A Voice Technology é parceira do GURU-SP. Sintam-se a vontade para nos contactar a respeito de reuniões, eventos, coding dojo, etc).

As fotos desse post eu tomei licença de retirar do twitgoo do Rafael Rosa Fu.

Após o evento, o pessoal foi tomar uma cerveja e descontrair em uma happy hour, porque ninguém é de ferro (com certeza foi regado a Ruby…rs).

Happy Hour - GURU-SP - 26-09-09

Bom, encerro por aqui este report. Agradeço pela leitura dos que passaram por aqui!

Até a próxima!

Apresentação sobre Lean e Kanban

Retirado do blog do Lucas H. G. Toniazzo

Apresentação sobre Lean e Kanban