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

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:

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:

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:

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!

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”!

[DIVULGAÇÃO] – 8º Encontro do Grupo de Usuários Ruby de SP (GURU-SP)

Divulgo para os interessadas em tecnologias relacionadas a Ruby e Rails mais um evento/reunião/encontro gratuito que acontecerá no dia 10/04/10. Será o 8º Encontro do Grupo de Usuários Ruby de SP (GURU-SP). Para mais informações confiram abaixo a notícia retirada do InfoQ.

O Grupo de Usuários Ruby de São Paulo (GURU-SP) fará mais um encontro no dia 10/04(sábado). Esse será o último encontro do grupo antes do evento Ruby on Rails no mundo Real.

O encontro contará com duas palestras de 40 minutos que serão divulgadas em breve e dessa vez será aberto um espaço para Lightning Talks de 5-10 minutos. É uma oportunidade interessante para você mostrar para a comunidade algum projeto, biblioteca, site relacionado com Ruby que tenha feito.

Esse é o oitavo encontro do grupo, para conferir como foram os anteriores acesse a wiki do GURU_SP.

A empresa Surgeworks já confirmou também apoio e fornecerá o coffe break.

Se sua empresa também quiser colaborar com o crescimento da comunidade Ruby e pode contribuir com algo, deixe um comentário que entraremos em contato.

Local:

O encontro será realizado no auditório da Caelum, próximo ao metrô Vila Mariana.

Rua Vergueiro, 3187, cj 84

Ao lado do metrô Vila Mariana

Mapa

Inscrição:

Para participar do encontro basta colocar seu nome no formulário.

O encontro deve ir até 13:00 e depois teremos o famoso #HoraExtra para socializar e confraternizar.

Se tiverem dúvidas, deixem comentários aqui no post ou entrem no grupo de discussão do Guru-SP ou no site oficial do grupo.

Nomeie as coisas corretamente

Esse post é essencial e de grande valia em termos de reflexão de como o programador inexperiente, até os mais experientes, devem tomar cuidado e seguir a risca a escrita de código com coesão, em termos de lisura e entendimento de variáveis, métodos e clareza de informações.

O texto abaixo está na íntegra e foi redigido por Daniel Lopes, retirado do blog AreaCriações. Daniel Lopes ministra cursos de Ruby/Rails pela E-Genial; um companheiro de empresa está fazendo o curso “Ruby on Rails – do básico ao avançado” e está gostando, portanto é indicado para os interessados em aprender mais sobre essa nova linguagem/framework de desenvolvimento Web.

Boa Leitura a todos!

Pensar no nome dos seus métodos e classes é tão importante quanto fazer o código funcionar. E se a nomenclatura que você adotou não é boa, eu considero o código errado! Este é tipo de coisa que não é ensinada em faculdades, mas deveriam ser.

Hoje vivemos em um mundo de desenvolvimento orientado a objetos. Mas é o objetivo de OOP? Simular o mundo real através do código, não é atoa que a primeira linguagem OO se chama Simula.

Tenho dedicado boa parte do meu em treinamentos, sejam pela eGenial ou para equipes em empresas. No ano passado participei de treinamentos com mais de 100 pessoas e só no começo deste ano foram mais quase 100.

Treinar tanta gente é uma experiência fantástica pois em nenhum emprego eu poderia ver o fonte de tantas pessoas, conhecer tantos problemas diferentes e aprender com os erros dos outros e propor soluções antes mesmo que aconteçam comigo.

Mas uma coisa tem me assustado muito: NOMES. Pensar no nome dos seus métodos e classes é tão importante quanto fazer o código funcionar. E se a nomenclatura que você adotou não é boa, eu considero o código errado! Este é tipo de coisa que não é ensinada em faculdades, mas deveriam ser.

Hoje vivemos em um mundo de desenvolvimento orientado a objetos. Mas qual é o objetivo de OOP? Simular o mundo real através do código, não é atoa que a primeira linguagem OO se chama Simula.

Então, o primeiro fator que considero para desenvolver OO corretamente é como você deve nomear e simular o mundo real através do seu código.

Mas como nomear corretamente as coisas?

A funcionalidade do Rails que acho mais fantástica é a preocupação de manter a característica do Ruby de ser legível. Temos métodos como validates_presence_of ou has_and_belongs_to_many ao invés de apenas vpo ou has_blg. Esta preocupação fica mais clara ainda se pensarmos nas tabelas, models e controllers.

Tabelas no Rails praticamente só servem para persistir objetos (reparem: objetos no plural) por isso elas são nomeadas no plural (customers, transactions, teachers, etc) enquanto a classe, que criará uma instância por vez, é nomeada no singular (Customer, Transaction, Teacher).

Métodos são operações que o objeto pode realizar, logo devem ser ações como calculate, find, sum enquanto propriedades/atributos são características do objeto que consequentemente devem ser nomeadas como tal. Seus accessors devem ter nomes de propriedades como name, age, value e etc. Se existe uma variável que é um verbo/ação então simplesmente seu código está errado e não tem significado como um objeto.

Já sabemos como nomear tabelas, classes e como a prática do Rails é muito boa para manter o código legível. Mas o que são controllers?

Um controller é uma forma de expor ao mundo os seus objetos do sistema e ao pensar como organizar seu controllers você deve ter isto em mente (por isto o Rails é REST e não apenas para expor uma API qualquer). Suas actions do controller devem ser ações mesmo, ações que vão ser executadas em seus objetos para poder mostrá-los ao mundo.

Se você tem uma action chamada “calculos” o nome simplesmente está errado, isto não é uma ação. Se você pensar em um controller como expositor de seus models com views então o método “calculos” está até no local errado, ele deveria estar dentro do model de BankAccount por exemplo e o controller apenas obtém o valor retornado pela ação calculate de um objeto da classe BankAccount. Neste exemplo a preocupação com nomes nos ajuda a colocar os métodos nos locais corretos criando uma boa arquitetura.

Código deve ser legível mesmo quando o sistema se tornar legado.

Qualquer sistema se torna legado, mesmo ele sendo escrito em Rails 3.0beta hoje, daqui a uma semana ele é legado e você não se lembrará de boa parte do que foi escrito lá.

Um desenvolvedor é um escritor e seu código (principalmente em Ruby) são frases que dizem o que deve acontecer. Se você não nomear seus métodos, objetos e variáveis da forma correta mais cedo ou mais tarde nem mesmo você entenderá um código que escreveu (experiência própria) quanto mais outro desenvolvedor.

Outro fator que destrói a legibilidade são os resumos. Um helper como options_for_select que cria options para um select do html poderia ser resumido para opt_select ou has_many poderia ser h_many. Mas estes resumos são extremamente prejudiciais e tornam o fonte impossível de ler futuramente.

Então sempre escreva o fonte como um manual e pensando em outra pessoa que venha a le-lo ao invés de pensar em você mesmo. Isto evitará o problema acima e mesmo daqui a 1 ano você voltará no código e entenderá tudo na primeira leitura.

Por que escrever fonte em Português é péssimo?

Nos treinamentos percebo que muita gente tenta escrever código Ruby em Português. O grande problema disto é que você terá algo assim: Pessoa.find_all_by_nome. Se você pensar em seu código como um simulador do mundo real que apenas contem instruções de como as coisas devem acontecer está óbvio que o seu simulador está “manco”.

Pessoa.find_all_by_nome não diz nada nem em Português e nem em Inglês. Logo é uma falha de arquitetura, e principalmente em Ruby, seu código acabou de perder a legibilidade da linguagem, que o Rails mantém e você acabou de destruir.

Como é impossível escrever tudo em Português então evite escrever qualquer coisa em Português. Desta forma você não terá um simulador “manco” que não descreve nada em linguagem nenhuma. Claro, termo técnico ou da regra de negócio como CPF, CNPJ e outros devem ser mantidos em Português ou na linguagem que for mas outras coisas como enturmação em uma rede social de alunos deveria ser representado como membership. Caso contrário você terá uma bizarrice como está:

class Estudante < ActiveRecord::Base
  has_and_belongs_to_many :enturmacoes
end

ao invés de

class Student < ActiveRecord::Base
  has_and_belongs_to_many :memberships
end

Evitando este tipo de arquitetura ruim: Estudante.first.enturmacoes.all(:conditions=>…). Ao ler esta frase (isto deveria ser uma frase) não existe nenhum significado em Português e nem em idioma algum, logo você tem um erro de nomenclatura e seu simulador do mundo real está manco, não representa a realidade e mais cedo ou mais tarde você estará dando manutenção em um sistema que apenas você entende.

Por favor não me venha dizer que é patriota e que o idioma do seu país é Português. Se você pensa assim deveria escrever class em japonês ao invés de Inglês já que o Ruby é uma linguagem Japonesa. Seu código é escrito para os outros e a única garantia que qualquer pessoa entenderá é escrevendo-o semanticamente correto e como a linguagem de programação já é em Inglês escreva-o em Inglês.

Também não existe problema algum se seu Inglês não é fluente. Tenha um dicionário a mão e tudo estará resolvido.

Conclusão

Não tenho vergonha em dizer que escrevi vários sistemas de 4 ou 5 anos atrás que por não ter seguido uma boa arquitetura o código é terrível e de difícil leitura. E pensando em arquitetura que me apaixonei por Ruby e consequentemente Rails, com eles é simples escrever um código que será fácil de ler mesmo daqui a 3 anos.

É sua obrigação fazer o código funcionar mas também é sua obrigação subdividir seus arquivos em pastas que fazem sentido, criar classes, templates e escrever código semanticamente correto, como um livro. Isto tudo é arquitetura do projeto e não apenas frescura, é preocupação com manutenção futura.

Esta regra o ajudará a identificar o que são método, o que são variáveis, objetos e onde colocar estas coisas.

Então pense 2 ou 3 vezes antes de escrever um método ou classe e não tenha vergonha em gastar mais horas do seu dia pensando em como organizar seus models e controllers do que escrevendo dezenas de linhas de código.

Minhas impressões – 7º Encontro do Grupo de Usuários Ruby de SP (GURU-SP) – 13/03/10

Caros colegas,

Na manhã de hoje estive participando do 7º Encontro do Grupo de Usuários Ruby de SP (GURU-SP), ocorrido em um auditório “próximo ao metro Santa Cruz” (mais abaixo a explicação), conseguido pelo pessoal da Caelum (via Anderson Leite), na Vila Mariana. Abaixo vou relatar as minhas impressões do evento.


Introdução e Panorama

Esse foi mais um dos sábados que pensei: poxa, poderia estar dormindo e descansando, aproveitando pra acordar tarde…Mas não, mais uma vez acordei as 7h00 rumo a mais um encontro de usuários Ruby (vai ser Nerd assim longe viu!… 🙂 ). No final, perder “alguns” fins de semana de vez em quando vale a pena: a busca pelo conhecimento é indescritível!

“Viagens” a parte, vamos ao que interessa !

Não tive muitas dificuldades para localizar o local, tirando a caminhada de 1100 números do início da rua até o prédio (onde ficava o auditório do encontro) + 150/200 metros da Avenida da saída do metrô (20~25 minutos de caminhada com notebook nas costas…). Na chegada ao local não tive dificuldades para encontrar o auditório e me instalar. Poucas pessoas estavam presentes até aquele momento, mas as instalações já estavam OK. No evento, como um todo, estiveram presentes cerca de 25 a 30 pessoas, que no final acabou ficando na média dos encontros do grupo.

O cronograma para o encontro era:

  • Palestra1: Por que Vim? – Willian Molinari (a.k.a PotHix);
  • Palestra2: HPricot – Jonas Alves;
  • Bate papo sobre as novidades do GURU-SP.

Abaixo um resumo sobre os tópicos anteriormente listados.

Palestra 1: Por que Vim? – Willian Molinari (a.k.a PotHix)

Willian Molinari nessa palestra mostrou ao público um pouco sobre esse tão famoso editor, que muitos conhecem mas poucos sabem usar de forma avançada, muito pelas “dificuldades” de adaptação (desmistificadas na apresentação). Pelo menos eu gosto do conceito do Vim e acho o mesmo muito interessante (!). A apresentação subdividiu-se nos seguintes pontos:

  • Filosofia de programação no Vim;
  • Comandos básicos;
  • Modos de edição;
  • Qual o melhor modo de usar;
  • Como customizar;
  • Killer commands;
  • Bons plugins para desenvolver com facilidade (em Ruby, é claro 🙂 );
  • Principais  vantagens/desvantagens.

Abaixo as informações mais importantes:

  • Existem 4 modos de edição no Vim: visual, inserção, comandos, normal;
  • Em qualquer modo existem variação de abrangência/ação quando usam-se comandos com letras minúsculas ou maiúsculas;
  • Modo visual – comandos disponíveis: “V” (para selecionar linhas) ou “v” (para selecionar caracteres);
  • Modo inserção – “i”, “a”, “o” ou “I”, “A”, “O” (escrever caracteres antes, depois ou na próxima linha, respectivamente);
  • Modo de comandos:

1 –  ” :! ” : permite executar comandos do terminal, como “ls”, “grep”;
2 – “:set wrap” (quebra a linha) e “:set nowrap” (não quebra as linhas);
3 – “:%s/arg1/arg2/g” : substitui o argumento1 pelo argumento2 em todo documento;
4 – “:w!” : salva e sai do arquivo;
5 – “:q!” : sai do arquivo e não salva mudanças;
6 – “:wqa” : sai e salva todos os arquivos abertos no Vim;
7 – “ZZ” : famoso “Zalva e Zai” (o mesmo que “:wqa”).

  • Modo normal:

1 – Navegação e busca de palavras em arquivos: “?” e “/”;
2 – Uso de setas de navegação: “h”, “j”, “k” e “l”;
3 – Navegação entre palavras: “w”, “e”, e “b”;
4 – Navegação entre começo e fim de linha: “0”, “^” e “$”;
5 – Motions: “f”(ind) e “t”(o) + um caracter de uma palavra para onde queira ir;
6 – Alteração: “yy”(ank) e “p”(aste), vulgo “copiar e colar”;

  • Vim tem suporte a “buffer de arquivos”: pode-se abrir mais de um arquivo e usa-se o “ls” para escolher o arquivo (bufExplorer) ;
  • Vertical split (“Vs”), Horizontal split (“:split”), Tab (“:T”) e Macros (“q”, “@” e “@@”) são tópicos avançados e poderosos;

Abaixo estão listados os plugins mais interessantes para os programadores Ruby que usam Vim, todos acessíveis via vim.org:

Outros plugins (diversos): vimpress, ragtag, endwise, IndexedSearch.

Fontes de estudo? Acesse os Vimcasts. Leia o Vimbook. Estude arquivos  “.vimrc” (arquivo de configuração do Vim. O Molinari oferece o próprio arquivo para download na página do GitHub dele). Acompanhe as dicas do @vimtips no Twitter. Leia o VimTutor.

Observações: Saiba que não será fácil aprender Vim! Portanto estude, pratique e treine sua digitação, pois os resultados só vem na prática.

Ufa! Só ficou faltando o link para a apresentação do Molinari. Caso seja disponibilizada, depois irei atualizar essa parte do post.

[Atualizado em 14-03-10 – Eis o link da apresentação do PotHix: http://bit.ly/95aqmI].

[Atualizado em 15-03-10 – Eis o link do vídeo gravado pelo Hugo Borges da apresentação do Willian Molinari: http://blip.tv/file/3347875]

Parada para coffee break agora! Hora do networking e aguardo para a próxima palestra…

Palestra2: HPricot – Jonas Alves


Jonas Alves trabalha na WebGoal a 1 ano e é rubista desde 2008. Trouxe a público o seguinte cenário, para exemplificar a sua apresentação: um cliente precisava coletar dados da internet, mas isso era feito manualmente e demandava muito tempo e esforço, e a qualidade das informações poderiam ser comprometidas por erros humanos. Era preciso automatizar o processo. Eles testaram as seguintes ferramentas:

  • PHP: DOMDocument (problema: limitado);
  • Java: HTMLParser (problema: muito verboso);
  • Ruby: HPricot (solução[!]: código limpo e mais fácil de usar).

De todas as opções, o Hpricot se destacou pelo seu poder e simplicidade de uso na extração de dados de websites, por meio de divs. A extração de dados da página fica muito mais fácil com o uso do plugin Firebug, para Firefox.

Fora esses pontos, a apresentação seguiu-se com uma demonstração de como construir um extrator de dados de um blog com Hpricot. Jonas disponibilizou os arquivos da apresentação e da demo em sua página do GitHub.

Eu, durante a apresentação, achei outro exemplo interessante para complementar a informação passada: http://www.lednerd.com/2007/04/20/extraindo-dados-com-ruby-e-hpricote/

Fora isso só achei o palestrante um pouco nervoso durante as explicações, mas no final deu tudo certo. Parabéns ao mesmo pelo conteúdo passado!

[Atualizado em 15-03-10 – Eis o link do vídeo gravado pelo Hugo Borges da apresentação do Jonas Alves: http://agaelebe.blip.tv/file/3348060/]

Hugo Borges – Bate papo sobre as novidades do GURU-SP


Hugo Borges passou os informativos sobre as discussões que estão ocorrendo entre os membros do grupo, visando um melhor planejamento e periodicidade das atividades. E as novidades são:

  • Encontros mensais – agora acontecem uma vez a cada 4 semanas, com duração de 3 a 5 horas. Dois encontros já estão confirmados: 03/04 e 01/05, na Caelum;
  • Existe um arquivo público para os interessados discutirem os formatos dos encontros. Acessem: http://bit.ly/gurusp7;
  • Os formatos dos encontros podem conter: palestras, mesas redondas , dojos, projetos, horas extra, etc;
  • Os projetos atuais do grupo são: tradução do RubyLearning (Hugo Borges é o líder) e tradução da Rails Magazine (Anderson Leite é o líder e estou participando 🙂 ). Em futuro próximo poderão existir projetos de gems, jogos, contribuições em outros projetos, plugins, etc;
  • Próximo evento: Ruby + Rails no mundo real 2010;
  • Desconto na compra de livros da editora O’Reilly com código do GURU-SP (“DSUG”): 35% na compra de livros impressos e 45% em e-books;
  • Palestras não aprovadas para o Ruby + Rails no mundo real 2010 serão apresentadas nos próximos encontros do grupo. É importante frisar que as duas palestras desse encontro fazem parte das não aprovadas para o evento de Maio (não por falta de qualidade, é lógico!).

Conclusão

O encontro começou as 9h00 e terminou perto das 12h30, antes do esperado, mas cumprindo o cronograma. Após isso houve a #horaextra, onde o pessoal sai para o almoço e beber alguma coisa, tudo regado a Ruby/Rails, troca de idéias e networking, é claro.

Tenho alguns prós e contras para adicionar:

Prós:

  • Infra-estrutura boa (wifi, tomadas, ar condicionado, água e café);
  • Os assuntos abordados em ambas as palestras não foram de cunho “avançado”, portanto tanto os mais experientes quanto os inexperientes puderam aproveitar.

Contras:

  • Não é “próximo ao metro Santa Cruz” (para os que se locomovem com transporte público);
  • O projetor multimídia, infelizmente, atuou no modo “preto e branco” em ambas apresentações, prejudicando a visualização dos códigos.

Bom, acredito que seja isso. Caso qualquer informação nova venha a surgir atualizo o post.

Até mais!

[DIVULGAÇÃO] – 7º Encontro do Grupo de Usuários Ruby de SP (GURU-SP)

Divulgo para os interessadas em tecnologias relacionadas a Ruby e Rails um evento/reunião/encontro que acontecerá no dia 13/03/10 aqui em São Paulo. Será o 7º Encontro do Grupo de Usuários Ruby de SP (GURU-SP). E o melhor: será gratuito!

Interessado? Já ouviu falar do grupo? Tem interesse em aprender mais sobre Ruby e Rails? Quer fazer networking?

Então atente-se as informações abaixo, que foram retiradas da lista de discussão do GURU-SP (http://groups.google.com.br/group/ruby-sp).

Fala pessoal.
Confirmado encontro dia 13!

O local será um auditório próximo ao metro Santa Cruz, conseguido pela Caelum.

Local:
Rua Dr. Diogo de Faria, 1201 Vila Mariana
Próximo ao metro Santa Cruz
Mapa: http://tinyurl.com/ya2mxma

Horário: 9hrs até o #horaextra depois!

Quem for, basta por o nome nessa planilha => http://tinyurl.com/yb3jmay

Teremos ainda duas palestras:

Palestra: Por que Vim?
Pothix (Willian Molinari)
Descrição: Nessa palestra eu pretendo mostrar um pouco sobre esse editor, filosofia, comandos básicos, modos de edição, qual o melhor modo de usar, como customizar, killer commands, bons plugins para desenvolver com facilidade e principais  vantagens/desvantagens.

Palestra: HPricot
Jonas Alves
Descrição: Coletar dados da internet manualmente demanda muito tempo e esforço, e a qualidade das informações podem ser comprometidas por erros humanos. Testamos ferramentas em PHP, Java, C++, C# e Ruby. De todas as opções, o Hpricot se destacou pelo seu poder e simplicidade de uso na extração de dados de websites. Na apresentação mostraremos como construir um extrator de dados de
vários sites com Hpricot.

Não esquece de colocar seu nome => http://tinyurl.com/yb3jmay

Divulguem e compareçam!

Eu estarei presente e espero você lá!

Referências sobre BDD – artigos para leitura

Para os interessados em aprender e entender o que é BDD, conhecer os conceitos essenciais dessa prática ágil, indico dois posts que li nesse dia de hoje, referências boas para quem busca respostas iniciais sobre assunto. Eis os links abaixo:

Ferramentas para BDD

Procurando por ferramentas para aplicar BDD?

Se você programa em Java pode usar um framework chamado JBehave. No site do projeto há um tutorial de 2 minutos (!) explicando o uso da ferramenta. Vale a pena dar uma passada por lá.

Se programa em Ruby use o framework Cucumber. O próprio site do projeto é bem completo e com muitas referências, inclusive para livros (o principal: “The RSpec Book: Behaviour Driven Development with RSpec, Cucumber, and Friends”).

Caso eu encontre outras referências do assunto, estarei colocando no blog a medida do possível.

Até mais e bons estudos!

Minhas impressões – Sun Tech Days 2009/2010 – Dia 1 (08-12-09)

Caros colegas,

Participei na última semana do Sun Tech Days 2009/2010, evento que aconteceu aqui em São Paulo, contando com a presença de grandes engenheiros da Sun e de ícones da comunidade Java do Brasil, e que tive o privilégio de me inscrever por um “golpe de sorte”, pois abriram-se entre o dia 02 e 03 de dezembro 200 inscrições gratuitas do evento, e tive sorte de me inscrever com sucesso 🙂


Vou disponibilizar para vocês agora um resumo de tudo o que aconteceu de acordo com a minha ótica.

Panorama 1: Para chegar até o local…

Para chegar até o local não foi as mil maravilhas no dia 08 de Dezembro…

Na madrugada/dia dessa data em SP choveu demais e tivemos um índice pluviométrico não esperado para o período, totalmente fora dos padrões. Portanto, vias principais congestionadas e o conseqüente problema do transporte público sobrecarregado. Levei quase 2h30 para chegar até o local (saída: 6h50 – chegada: 9h10!). Graças ao Google, GPS e Maps consegui encontrar o local, pois não conhecia a região e este foi meu primeiro Sun Tech Days 🙂

Panorama 2: Após a chegada

Presenciei uma organização/sinalização de locais/palestras/auditórios muito boa, fora a prestatividade dos envolvidos. Para pegar o crachá de conferencista não demorei muito tempo, além do espaço ser abrigador da chuva (acima de tudo…rs). De cara pude comtemplar as presenças do Marcelo Leal (SUN), Carlos Fernando Gonçalves (JavaNoroeste), Jorge Diz, Vinicius Senger e Yara Senger (Globalcode). Andando mais um pouco visualizei o mito James Gosling (!). Esperei mais 10 minutos até poder adentrar ao auditório principal. Nesse “meio tempo” fui visitar os estandes dos expositores, alguns como OpenSolaris, Oracle (é claro), Sun (é claro [2]) e Locaweb.

Após isso adentrei ao auditório principal para a primeira palestra do dia. Para saber sobre todos os palestrantes acesse esse link.

Boas Vindas ao Sun Tech Days – Luiz Fernando Maluf


Para dar as boas vindas ao pessoal do evento, o diretor para a América Latina da Sun Microsystems, Luiz Fernando Maluf, fez uma rápida apresentação mostrando o cenário no qual se encaixam os desenvolvedores Java (e usuários de tecnologias SUN) e como eles estão relacionados com o panorama do mercado, retorno profissional, técnico e financeiro, visando aproveitar as oportunidades que surgem no mercado de hoje: fim da crise, uso e expansão da plataforma Java pela linguagem Java (e outras) e abordagens acerca de novas tecnologias, como TV Digital, por exemplo. Agradeceu aos JUG leaders de comunidades, caravanas e o público do evento que estava presente.

Showcase de Tecnologia: Inspire-se! – Simon Ritter e Angela Caicedo

Antes do “pai do Java” falar sua “visão futurista” da plataforma, Simon Ritter e Angela Caicedo apresentaram alguns exemplos de aplicação das tecnologias Java e Sun do momento.  As implementações e demos foram mostradas para o público.

Simon mostrou como JavaFX pode ser produtivo, gerando animações com figuras ou vídeos, para Web ou Desktop, sem escrever uma linha de código e usando apenas uma “interface amigável de arrastar, soltar, colocar botões e etc.”. No fundo é o JavaFX Platform Suite, que pode ser usado como plugin para ferramentas pagas como Adobe Photoshop, Illustrator e etc. O objetivo era mostrar a produtividade da ferramenta com o objetivo de criar aplicações RIA com pouco “trabalho” (vulgo escrita de código).

Angela Caicedo mostrou uma tecnologia que achei bem interessante: uma “lousa mágica” usando JavaFX. Se trata de uma lousa de vidro, transparente, que por trás dela havia um projetor multimídia (projetando um quadro negro, lousa) com um Wii Remote em cima captando sinais de movimento e toque feitos com uma luva (a qual ia tocando a lousa ou “escrevendo” na mesma). As respostas eram enviadas via bluetooth para um notebook que processava as coordenadas e passava para uma aplicação JavaFX. Com isso era possível relacionar na aplicação o ponto tocado e a significância disso: se era um botão ativado da aplicação que deveria abrir uma paleta de cores, se era para limpar o quadro e etc.

Esse exemplo mostrou a sinergia de algumas tecnologias, além de Java e soluções SUN, que podem gerar modelos inteligentes tão bons quanto o apresentado.

O que está acontecendo com o Java? – James Gosling


Após o showcase James Gosling subiu ao palco para o frissom dos presentes, que puderam comtemplar o “mito”. O overview de James Gosling estava relacionado com as novidades da plataforma Java: mais de um assunto foi abordado, como JavaFX, NetBeansGlassfishJava EE6 e etc.

Sobre o Glassfish foi mantido o discurso de ser o servidor de aplicação mais rápido, baixado e performático do mercado (lógico…rs). Foram mostrados “gráficos e informações comprovando”. O mesmo está a muito tempo na versão V2, mas a versão V3 (lançada no dia 10/12) terá suporte a Java EE 6. Gosling fez algumas demos mostrando um menor tempo de redeploy para as aplicações, quase instantâneo, evidenciando uma melhoria na capacidade de criação e manutenabilidade de projetos via Glassfish.

Uma das novidades mostradas pelo mesmo foi o lançamento da JavaStore, que no momento está disponível apenas para o público americano, mas que tem previsão de abrangência maior e sair da fase beta no ano de 2010.

Gosling e Tim Boudreau, especialista em Java Card, fizeram uma demo mostrando o novo suporte para contenção de aplicações Web, http e https, embarcados (um servidor web dentro de um chip!).

O NetBeans foi citado como IDE padrão e está na sua versão 6.8 com suporte a Java EE6 também (Gosling indica “jogar no lixo” o EmacsViEclipse, inclusive…rs).

No final da apresentação, e de praxe para eventos da Sun, muitos brindes foram jogados para o público (Camisas da Sun e “Dukes“).

Glassfish V3: O servidor de aplicativos de última geração – Sang Shin


Sang é um velho conhecido do Brasil e de Sun Tech Days: essa foi a sua oitava viagem ao Brasil. Ao olhar para o mesmo sabia que conhecia ele de algum lugar. Voilá! Me veio a lembrança de já ter visto um vídeo no youtube dele “dançando” em uma das edições do Sun Tech Days. Confiram abaixo e tirem suas conclusões…rs.

Alguns pontos a ressaltar da apresentação

  • O objetivo do Glassfish V3 é ser o melhor servidor de aplicações do mercado: é compatível com Java EE 6, modularizado (baseado em OSGi e usando Apache Felix), sem limites de containeres e pode rodar containeres Java ou não-Java;
  • Glassfish tem suporte a mais de 200 bundles OSGi e podem ser desenvolvidos outros mais;
  • Existem 3 tipos de bundles: relacionados a kernel, containeres ou serviços;
  • Monitoramento e gerenciamento através de console web e asadmin;
  • Facilidades de um ambiente composto por Netbeans 6.8 + Glassfish v3 + Java EE 6, tendo-se desenvolvimento e deploy de aplicações “sem dor” e com muito mais rapidez. O deploy/redeploy automático mantém sessões e informações existentes de sua aplicação, mesmo após restart do servidor.

Os demos executados durante a apresentação, e que embasavam a teoria passada, se encontram no site mantido pelo próprio Sang Shin, o javapassion.com (não acessar java.passion.com…é NSFW…rs.). Eis alguns abaixo:

No final de sua apresentação Sang convidou para subir ao palco Jerome Dochez, principal engenheiro da Sun no desenvolvimento do Glassfish, para responder algumas perguntas do público e apresentar o seu overview da nova versão.


Para os interessados, a apresentação de Sang se encontra disponível para download por este link.

JDK7: O futuro da plataforma Java – Simon Ritter


Simon Ritter trouxe um overview para o público com as novidades do JDK7. Os pontos mais relevantes escrevo abaixo:

  • JDK7 está pronto, aberto e em constante desenvolvimento pela comunidade, o JSE7 ainda não está pronto e precisa de alguns pontos para ser resolvido (no JCP);
  • Sobre a linguagem as mudanças são: annotations on java types (JSR308); Project coin e modularidade (JSR294). Vale lembrar que todas as mudanças estão aprovadas;
  • Sobre o core: Projeto Jigsaw (a JSR294 impacta tanto no core quanto na linguagem. Modularidade = Jigsaw); atualização em concorrência e collections (JSR166); novas API’s a respeito de IO (NIO2);
  • Suporte a linguagens dinamicas (da vinci machine project) e Garbage G1 são bem importantes e de grande relevância também;
  • Uma das mudanças interessantes foi o uso de números binários de forma declarativa (int b = 0b01010101, binary b = 0X09AB), separação de grupos de números long por underscore (Long l = 9_938_827_122) e Switch usando string;
  • Gerenciamento automático de recursos: cláusulas try/catch que sempre precisam de um finally para fechar algum recurso (alguma_coisa.close) agora não mais precisam. A JVM gerencia isso (!);
  • Multi catch (2 cláusulas de exceção com o mesmo tratamento): talvez possa voltar no JDK7;
  • Invoke Dynamic bytecode (JSR292).

Sobre o projeto Jigsaw, em particular:

  • O JDK é grande, muito grande (só no JDK6 temos 47 pacotes toplevel e mais de 4000 classes), um problema em relação a tempo de download de pacotes e tempo de startup de algumas aplicações, por se usar bibliotecas demais;
  • Há dificuldade de se criar uma “plataforma fina, concisa e leve”, principalmente para dispositivos mobile dos dias de hoje, por exemplo. Para isso foi criado o projeto Jigsaw.
  • Já existe um projeto  de OpenJDK baseado no JigSaw;
  • A intenção de “código modular” é criar código limpo e bem direcionando para uso, criando uma não dependência de código e uso de bibliotecas entre programadores (commiters) ou código implantado em cliente, não dando propósito a erro. Os módulos terão versionamento, portanto você poderá definir no seu código qual a versão do módulo que você vai querer usar na sua aplicação.

Nessa versão foi bastante pensado nas mudanças a serem feitas, para não cair no erro do assert (java 1.4) e enum  (java 1.5), fato que “quebrou muitos códigos” antigamente. Simon reiterou que “trabalhar mudando e adaptando java é realmente pesado”.

O Lançamento final do JDK está marcado para Setembro de 2010. A plataforma Java tende a fica mais poderosa e abrangente, sem dúvida.

Ginga, Lwuit, JavaDTV e você – Dimas Oliveira & Tamir Shabat


Dimas Oliveira é um grande conhecido da comunidade Java no Brasil quando o assunto é TV Digital. Referência, esteve presente no Profissão Java, Java@TV Digital e OpenTDCTamir Shabat, especialista em desenvolvimento com Lwuit e TV Digital foi palestrante no Java@TV Digital. Em todos esses eventos eu estive presente e vocês podem acompanhar os posts pelos links anteriores (o Java@TV Digital ainda hei de escrever). Nesse Sun Tech Days a apresentação de ambos foi um “compilado” do que já tinha sido apresentado nesses eventos. Abaixo algumas informações dessa apresentação:

  • Perspectiva de no próximo ano termos 25 milhões de tv’s ligadas ao sinal digital, ou seja, é uma oportunidade palpável e direta para desenvolvedores gerarem aplicações, sendo que no ano que vem o Ginga estará mais maduro e a disponibilidade de set-up-boxes tende a ser maior;
  • Histórico da TV Digital não é de hoje: desde 2005 há desenvolvimento;
  • Para que já conhece Java é preciso aprender cerca de 8% a mais de Java para desenvolver para TV Digital;
  • TV interativa = TV + aplicações (não é simplesmente um browser com acesso a internet na TV);
  • Locais de estudo: Forum SBTVDjavatv-developers.


No final da apresentação Tamir mostrou uma demo, usando NetBeans + Lwuit (for TV Digital), de uma aplicação interativa para TV Digital baseada em uma aplicação real que a Rede Globo estaria disposta a usar. Um set-up-box foi usado para demostrar ao vivo os exemplos de interatividade desta aplicação.

Ajuste no desempenho do GC – Simon Ritter


Simon baseou-se para sua apresentação em 4 pontos:

  • Opções para a JVM da Sun;
  • Garbage collector;
  • Garbage first;
  • Dicas para tunning do GC.

No início foi exposta a evolução do gerenciamento de recursos, onde antigamente o desenvolvedor era responsável por alocar e desalocar memória (em C: malloc and free; em C++: new and delete). Hoje no Java só é preciso criar os objetos (“new”). A JVM se encarrega de gerenciar a memória (Garbage Collector).

Basicamente temos 3 tipos de opções, quando gerenciamos o GC:

  • Standard options:  todas plataformas;
  • -X options: não são aplicáveis a todas as plataformas;
  • -XX options: -não são aplicáveis a todas as plataformas e podem precisar de privilégios adicionais para usá-las.

Para maiores detalhes, favor consultar a documentação da Sun.

As dicas mais importantes passadas pelo Simon foram:

  • multi processos e cores criam objetos novos (todos tentam acessar o eden ao mesmo tempo): Solução: -XX:TLABSize=size-in-bytes ou -XX:ResizeTLAB;
  • Serial: indicado para maioria das aplicações para desktop;
  • Paralelo: indicado para maquinas com multiplos cores e bastante memória;
  • “JVM ergonomics”: comece usando -XX:+UseParallelGC e -XX:+UseAdaptiveSizePolicy;
  • Rode a opção -server;
  • As opções -XX:MaxGCPauseMillis=n e -XX:GCTimeMillis=n podem performar, mas não são garantidas;

Sobre GC e escolhas de Design:

  • Serial (-XX:+UseSerialGC);
  • Paralelo (-XX:+UseParallelGC). Para Tuning: -XX:UseParNewGC  e -XX:ParallelGCThreads=n, onde n é o número de CPU’s;
  • Concurrent (-XX:+UseConcMarkSweepGC). Para Tuning: -XX:ParallelCMSThreads=n, onde n é um quarto do número de CPU’s ; -XX:CMSInitiatingOccupancyFraction; -XX:+CMSIncrementalMode (off); -XX:+CMSIncrementalDutyCycle=n% (indicado n=50));
  • Stop the world;
  • Compacting (-XX:+UseParallelOldGC);
  • Non compacting;
  • Coping.

Sem dúvidas o G1 terá melhorias consideráveis para performance e foram mostrados exemplos de diagramas de alocação de memória com as respectivas legendas. Para saber mais, faça o dowload de um paper da Sun sobre o G1, por esse link.

Programação JavaFX para dispositivos móveis – Angela Caicedo


A apresentação foi bastante técnica e com muitos exemplos de código e demos. Foi uma sessão voltada para desenvolvedores que já conhecem a plataforma JavaFX e a plataforma de desenvolvimento de dispositivos móveis. Em resumo foi passado:

  • Introdução a MIDlets, MSA e JavaFX Mobile;
  • Conceitos de Mobile RIA , MVC, “stage e scene” e construção de UI’s;
  • Migrando aplicações de JavaFX desktop para JavaFX mobile;
  • Melhores práticas de performance;
  • Mobile samples e adição de mídias;
  • Demos.

A idéia central é: existem várias aplicações e modos de aplicar JavaFX para mobile devices, e essa é uma tendencia do mercado.

É preciso saber trabalhar com Java Micro Edition,  MIDP e aplicações e Wireless Toolkit (JavaME SDK). Algumas API’s de Java são essenciais: java.lang e java.io, além das específicas para desenvolvimento mobile: java.microedition. Com isso você consegue criar, editar, compilar, debugar, empacotar, testar e fazer deploy de aplicações (ou seja, tudo…rs).

O ambiente indicado para isso: Netbeans 6.8 + WTK (Wireless Toolkit) 2.5.2/JavaMe SDK 3.0.


Em termos de desenvolvimento:

  • Java ME MSA platform (JSR248 – Mobile Service Architechture). Essa é a base e dá suporte a tudo: audio, vídeo, camera, SIP, bluetooth, etc;
  • Para construir aplicações  de UI no MSA use API de alto nível (MIDP 2.0 widgets): é fácil, rápido e tem a beleza nativa de UI;
  • Há outras API’s disponíveis: JSR226 (SVG Tiny 1.1), JSR184 (3d graphics API) e OpenGL, por exemplo;
  • JavaFX mobile cria RIA para mobile;
  • Ao invés de trabalhar com aplicações de media (gimp, photoshop), passar as imagens para o MIDP  e só depois portar para o celular, agora você pode usar qualquer ferramenta de media (gimp, photoshop, adobe), passar pelo editor de media do JavaFX e portar isso para JavaFX mobile direto ou trabalhar via Netbeans para depois portar;
  • Modelo MVC pode ser implementado: Model (dados e sua lógica), View (Rich UI) e Controller (regras de processamento).

Para maiores detalhes e exemplos: http://javafx.com/samples

Linguagens de criação de scripts: opções para a JVM – Simon Ritter


Finalizando o primeiro dia (ufa!) o lema foi: Languages everywhere. Para o JDK7 é imprescindível saber o poder das linguagens dinâmicas e as mudanças que elas trarão. No caso são 4 que se destacam, ou melhor, são as que realmente são levadas em conta: Groovy, Ruby, Scala e Clojure.

Mas porque o número excessivo de linguagens? Liberdade de escolha e diferentes linguagens resolvem problemas de tipos diferentes. Java + todas elas + JVM : muitos poderes! (domain specific languages).

Abaixo um resumo de cada uma delas:

GROOVY

  • Linguagem OO;
  • Sintaxe é muito similar a Java, além de ser compacta e concisa;
  • Groovy herda classes Java e implementa interfaces Groovy ;
  • Permite closure e sobrecarga de operadores (-, +, * ou /), uma “máxima” das linguagens de script;
  • Integração com Java via JSR223;
  • Use groovy quando precisar de novas features que Java não tem pois os códigos se aproximam muito;
  • Meta object protocol – MOP (provê comportamento dinâmico para groovy);
  • Livro indicado: Groovy in Action (Dierk Konig).

RUBY

  • Imperativo, funcional e reflexivo (suporta muitos paradigmas programacionais);
  • Excelente suporte a metaprogramação e reflexão;
  • Suporte a continuação (“congela” um ponto e pode voltar a um anterior);
  • Tudo em ruby é objeto;
  • Tudo é chamada de método (obj.fred é o mesmo que obj.send(:fred));
  • Métodos podem ser invocados com ou sem parênteses.

SCALA

  • Puramente orientada a OO e tudo é objeto;
  • Scala não permite overload do operador true;
  • Array index é acessado por () e não [];
  • Não tem pré ou pós incremento (i++ ou ++i);
  • Arrays são mutáveis (ao contrário de Java);
  • Scala não suporta membros staticos (usar singletons no caso!);
  • Scala não requer construtor (pode ser definido implicitamente num código anonimo e se quiser fazer overload pode usar this).

CLOJURE

  • Modelada em Lisp;
  • Linguagem functional;
  • Funções são stateless;
  • Todos os dados são imutáveis;
  • Tem algumas complicações pois é uma linguagem onde se deve conhecer “onde se colocar as chaves, parênteses, ou chaves”.

A “sacada” é estar por dentro do JDK7 que vai dar suporte a linguagens dinâmicas de forma mais aberta (InvokeDynamic bytecode – JSR292).

Conclusão do dia 1

Como não podia deixar de ser, uma “avalanche” de informação…rs. Apesar de já ter visto muitos dos termos apresentados em outros eventos, sempre é bom revê-los por outras pessoas e com outras explicações. O primeiro dia foi de bom grado para mim, até uma camisa da Sun eu ganhei 🙂 . E a volta para casa mais tranqüila…rs.

Amigos leitores, essa foi a primeira parte do meu relato desse evento. Agradeço desde já os que deram uma passada por aqui e publicarei o mais breve possível a parte 2 da história.

Até logo!

Os Melhores Podcasts de Tecnologia para Desenvolvedores

Post excelente escrito pelo André Faria Gomes. Muito bom mesmo! Podcasts sem dúvida são um dos meios mais indicados para adquirir conhecimento em tecnologia, ainda mais quando você está antenado no que Martin Fowler, Kent Beck, Rod Johnson entre outros estão falando. Retirado do andrefaria.com.

Um dos maiores problemas da sociedade moderna é a dificuldade de locomoção diária, a maioria das pessoas passa horas em seus carros, ou em meios de transporte públicos para irem de lugar a outro. Há alguns anos atrás quando morava na zona norte de São Paulo e trabalha na zona sul, essa era minha realidade. Uma vez que naquela época passar por isso era inevitável procurei formas de fazer com esse tempo pudesse de alguma forma torna-se produtivo, foi então que comecei a ouvir à podcasts.

iPod FM radio remote por dan taylor
iPod FM radio remote por dan taylor

De acordo com a Wikipedia, Podcasting é uma forma de publicação de arquivos de mídia digital (áudio, vídeo, foto, etc.) pela Internet, através de um feed RSS, que permite aos utilizadores acompanhar a sua atualização. Assim, é possível o acompanhamento e/ou download automático do conteúdo de um podcast.

Neste post apresentarei os podcasts aos quais escuto e os episódios principais para que você ouça. Sugiro que você utilize o iTunes para inscrever-se nos podcasts e sincronizar com seu iPod.

Desenvolvimento Ágil

por pcalcado
por pcalcado

Podcast da ImproveIt

por Vinícius Teles
http://improveit.com.br/podcast
Português

AgilCast

Por AgilCoop
http://agilcoop.incubadora.fapesp.br/portal/agilcast
Português

Agile Toolkit Podcast
http://agiletoolkit.libsyn.com
Inglês

ThoughtWorks Podcast

http://www.thoughtworks.com/what-we-say/podcasts.html
Inglês

Open Source

FLOSS Weekly

por Leo Laport, Jono Bacon e Randal Schwartz
Inglês

Java

HorecaExpo - Java por bramloquet
HorecaExpo – Java por bramloquet

JavaPosse

Por Tor Norbye, Carl Quinn, Dick Wall e Joe Nuxoll
Inglês
http://www.javaposse.com

Java Technology Insider

Inglês
http://www.javaworld.com/podcasts/jtech

Grails Podcast

Por Glen Smith e Sven Haiges
http://grailspodcast.com

Ruby

Ruby on Rails por Andrew*
Ruby on Rails por Andrew*

Rails Envy

Por Jason Seifer e Gregg Pollack
Inglês
http://railsenvy.com

Rails Podcast

por Geoffrey Grosenbach
Inglês
http://podcast.rubyonrails.com/

Rubiverse Podcast

Por Mike Moore
Ingles
http://rubiverse.com

JavaScript

jQuery Podcast

Português
http://blog.jquery.com/2009/11/13/announcing-the-official-jquery-podcast/

Gadgets

GeekBrief TV

por Cali Lewis
Inglês
http://www.geekbrief.tv

Software

Desk por Guillermo Esteves
Desk por Guillermo Esteves

Pragmatic Podcasts

por Pragmatic Bookshelf
Inglês
http://www.pragprog.com/podcasts

Software Engineering Radio

por Software Engineering Radio
http://www.se-radio.net
Inglês

Elegant Code

por Elegant Code Community
http://elegantcode.com
Inglês

Google Developer Podcast

http://code.google.com/p/google-developer-podcast/downloads/list
Inglês

Hearding Code

http://herdingcode.com
Inglês

Tecnologia

IT Conversations

http://itc.conversationsnetwork.org
Inglês

net@Night

por Amber MacArthur e Leo Laport
http://www.twit.tv/natn

Twit – This Week in Tech

por  Leo Laporte, Jeff Jarvis, Baratunde Thurston, e John C. Dvorak
http://www.twit.tv/twit

MacBreak Weekly

por Leo Laporte, Don McAllister, Paul Kent, and Andy Ihnatko
http://www.twit.tv/mbw

This Week in Google

por Leo Laporte, Gina Trapani, Jeff Jarvis e Mary Hodder
http://www.twit.tv/twig

SitePoint Podcast

inglês
http://www.sitepoint.com/podcast

Empreendedorismo e Negócios

37 Signals Podcast

por 37 Signals
Inglês
http://37signals.com/podcast

Max Gehringer (CBN)

por Max Gehringer
Português
http://cbn.globoradio.globo.com/servicos/podcast/NOME.htm

Mundo Corporativo (CBN)

por Heródoto Barbeiro
Português em Áudio
http://cbn.globoradio.globo.com/servicos/podcast/NOME.htm

The Startup Success Podcast

http://startuppodcast.wordpress.com
Inglês

TED Talks

por TED Talks
Inglês
http://www.ted.com

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!