Rails 2.0.4 – Release de Manutenção

Acaba de ser liberada a versão 2.0.4 do Rails. É uma liberação para corrigir alguns problemas de segurança, compatibilidade e correções de alguns erros. A mais importante das correções, e graças a comunidade, foi ajustar a vulnerabilidade do REXML que poderia ser usada para um ataque DoS.

Para instalar a nova versão: gem install rails -version 2.0.4

Vejam aqui todas as correções

RailsBox podcast #1

É com prazer que anúncio o primeiro RailsBox Podcast! Depois de algumas tentativas, diversas paradas, conseguimos finalmente terminar.

Sempre ao som de bons blues, iremos falar sobre rails, ruby, web, programação, ou seja, o mundo geek.

O RailsBox podcast será apresentado por mim, Ozéias Sant’ana, e por Davis Cabral.

Espero que gostem e não se esqueçam de mandar feedback, que irá deixar nosso podcast cada vez melhor.

Neste primeiro episódio falemos sobre o firefox, rails summit, falha no rexml, tradução e mais, confira.

Download: Episódio #1
iTunes: RSS Feed

Show Notes

UPDATE 03-09:
O feed para iTunes e demais softwares já está ok.

Primeiro Post

post_it

Bom, este é o primeiro post oficial no meu novo blog, e diga-se de passagem, eu estou muito feliz com isto. O meu antigo domínio, iconcreative.net, não fazia mas sentindo desde que comecei a fazer parte da comunidade rails.

Com um novo layout, que vai ganhar corpo com o tempo, e bastante novidades como podcast, screencast e muito mais conteúdo para a comunidade.

Aguardo sugestões, dicas e também críticas, é com elas que trarei informações certas, na pedida certa para cada leitor.

Usando o Observer no Rails

Este artigo seria apenas uma dica de como saber o que foi alterado em um objeto, mas para ficar mais fácil e principalmente para quem está dando os primeiros passos em rails resolvi fazer uma pequena introdução sobre o assunto.

O Observer é um objeto que se responsabiliza por “escutar” os eventos que ocorrem com outro objeto. Ou seja, qualquer alteração feito no objeto observado será analizado e poderá executar uma ação. Isto é muito útil para gravar logs, enviar emails e outros.

Vamos criar um projetinho para entender:

$ rails observers
$ cd observers
$ script/generate scaffold User name:string phone:string age:integer
$ rake db:migrate

Acima criamos um projeto e geramos uma entidade User e seus atributos, e migramos o banco. Vamos criar agora a entidade de log e o observer:


$ script/generate model Log table:string action:string field:string \
old_value:string new_value:string comments:text
exists app/models/
...
$ script/generate observer user
exists app/models/
exists test/unit/
create app/models/user_observer.rb
create test/unit/user_observer_test.rb
$ rake db:migrate

Feito isto precisamos “ativar” o observer, e para isto basta adicionar no config/enviroment.rb

Agora podemos definir em qual momento ele vai gerar o log, antes ou depois de persistir o objeto:

  • before_create, before_destroy, before_update, before_save, before_update
  • after_create, after_destroy, after_update, after_save, after_update

Como tudo no rails os nomes já definem o que cada um vai fazer. Vamos gerar um log quando criar ou excluir um usuário. Para isto, vamos abrir o arquivo user_observer.rb

Vamos acessar http://localhost:3000/users e criar um user e veja o log gerado:

Simples? Muito. Agora vamos pedir para ele observar o que foi alterado em um objeto:

O log gerado:

Aqui temos apenas uma introdução do que podemos ter com o Observer. Bons estudos.

Tradução: “Está tudo OK para você?”

Achei esse artigo interessante, o título original é “Is everything OK for you?” – the question you should never ask your developers. É minha primeira, de muitas outras, traduções que pretendo trazer para vocês:

“Está tudo OK para você?” – A pergunta que você nunca deve fazer ao seus desenvolvedores

376588066_ae1f1f8363

Eu falei com um amigo meu recentemente e ele queixou-se sobre o seu líder (na verdade ele estava me explicando por que razão o seu líder era ruim). Não é sobre sua personalidade ou atitude, mas meu amigo queixa-se das perguntas que seu líder fazia, por exemplo:

– “Está tudo OK para você?”

Muito bem… Como você pode responder a esta pergunta? Será que ele está perguntando sobre minha vida privada? sobre meu ambiente de trabalho? Sobre minhas tarefas? O que ele espera como resposta? Se quase tudo está OK para mim, mas eu tenho algumas idéias sobre como melhorar a performance da equipe, devo responder “Sim”, “Sim, mais…” ou “Não”? Na minha humilde opinião, está é uma pergunta errada – isto demonstra falta de respeito, porque meu líder não se importante realmente com a resposta, é igual a “Como vai você?”.

Se você é líder de Equipe ou Projeto ou está a frente de uma equipe de desenvolvimento você deve ler este artigo e conhecer o ponto de vista dos seus engenheiros.

Por que essas questões não são boas ?

Vamos supor que eu trabalho em uma equipe e vejo que estamos produzindo um código que não está sendo bem testado, e a nossa equipe não tem qualquer ferramenta de integração contínua. Eu gostaria de compartilhar minhas idéias sobre como lidar com estes problemas, mais meu líder é difícil de compreender e está sempre ocupado.

Embora ele sempre me faça perguntas como “Você está OK com a equipe?”, “Está tudo OK para você?”, eu devo falar sobre Integração contínua e dos problemas de testes que temos aqui? Será que é um bom momento para falar sobre minhas idéias? Estas questões não me incentivam em expor os verdadeiros problemas que a nossa equipe possa ter.

Quais perguntas os engenheiros aguardam?

Os engenheiros são pessoas concretas e eles esperam perguntas concretas. Claro, que às vezes é dolorido, mas o que estamos fazendo é freqüentemente tão complexo que fazer perguntas gerais refere-se a nada – você realmente quer saber sobre o nada? (Será que não é um exemplo de gerenciamento?). No exemplo do meu amigo, as questões do seu líder são genéricas demais.

Seria muito mais fácil se ele pergunta-se:

  • Você vê qualquer problema no projeto que estamos desenvolvendo?
  • Você pensa que os nossos processos de desenvolvimento estão corretos? Você tem qualquer idéia sobre como podemos melhorá-los?
  • Você precisa de alguma ajuda no que está fazendo?
  • Você tem alguma idéia como …?

Use sua criatividade com as pessoas

Se você tiver gerenciando uma equipe de desenvolvimento de software você deve aprender quais questões deve fazer. Você deve fazer perguntas que não se pode responder com um simples “sim” ou “não”. Faça perguntas que permitam aos seus engenheiros se expressarem, exporem seus sentimentos, idéias, medos. Seus engenheiros são criativos (Eu tenho certeza disso) – deixe eles falar com você e compartilhar suas idéias, deixe-os pensar e criar!

Faça perguntas certas – você receberá as respostas certas

Se você estiver fazendo perguntas erradas como “Está tudo OK para você?” não espere uma resposta certa (o que significa). O que você espera do seu engenheiro quando faz uma destas pergunta? Você espera que ele lhe fale sobre sua semana? Peça a ele sobre o final de semana. Você está esperando que ele fale sobre seus filhos? Pergunte sobre seus filhos.

Fazer perguntas corretas é a chave para uma boa e aberta comunicação – e é o fator mais importante para ter uma equipe eficiente de desenvolvimento (ver também as Práticas de XP). Fazer perguntas corretas, você vai obter respostas coerentes ou seja, a resposta correta para sua questão – sem equívocos. Se você quiser fazer perguntas gerais, só para ver se não está dormindo (mante-los acordados?), basta dizer “Olá!”. Se você quiser fazer uma pergunta e não espera qualquer resposta (ping?) – Então não faça!, você não vai ganhar respeito fazendo isto.

Se você estiver a sorte de trabalhar em um ambiente Ágil, esse problema pode ser resolvido de alguma forma durante o Daily Scrum Meeting, onde você pode compartilhar suas idéias e problemas, ou através das retrospectivas, quando a equipe é encorajada a analisar a sua maneira de trabalhar.

Conselho

Se você é um líder de equipe ou projeto, significa que você é esperto o bastante para encontrar perguntas certas que deixarão seus desenvolvedores falarem sobre os verdadeiros problemas e soluções reais. Faça suas perguntas freqüentemente e você verá quantas oportunidades irá encontrar ao seu redor.

Tome cuidado, ao fazer perguntas genéricas. Pode ser pior do que não fazer nenhuma pergunta.

Eu estou muito curioso sobre suas opiniões:

  • Você é um engenheiro (desenvolvedor) e estão lhe fazendo essas perguntas sem sentido? Qual é a sua resposta?
  • Você que é líder de equipe, faz estas perguntas? O que espera nas respostas? Por que você está perguntando?

Fique a vontade para compartilhar suas idéias aqui.

Revistas, uma grande palhaçada

Mensalmente recebemos aqui na empresa uma revista, que deveria servir de informação para o pessoal de TI. Particularmente, acho difícil encontrar uma revista de qualidade, e prefiro ler blog’s que me trazem conteúdo sempre novo e atualizado.

Mais por que A grande palhaçada?. Bom, imaginem vocês que esta revista fez uma grande reportagem sobre um mega data center da Microsoft, e mais um monte de balela. No final do artigo, em destaque, colocaram um pequeno trecho sobre o Firefox 3. O artigo fala um pouco sobre o lançamento do browser, sobre o recorde e no final termina assim:

“Em termos de produto, o Firefox 3 agradou ao público com recursos amigáveis; mas o projeto parece não se encaixar no universo corporativo.”

Quero apenas fazer algumas considerações:

  1. O Firefox Day foi no dia 18 de Junho, ou seja, a revista está bem atualizada (Edição de 22 de julho).
  2. O Firefox está sim no ambiente corporativo, não usa quem acha que web é coisa do sobrinho.
  3. O cara que perde tempo a ler uma revista desta está na zona de conforto e não quero nem falar sobre isto.
  4. Se você for fazer uma entrevista em uma empresa e ver estas revistas no balcão, vá embora e procure outra.

E o restante da revista ??? 82 páginas de “blablabla”, da mais pura perda de tempo.

O pior de tudo, é que tem empresas que preferem que você leia uma destas revistas, do que deixarem você ler um blog atualizado e bem feito.

UPDATE:

O link correto da revista é este. Não é possível acessar o site da revista sem o www. Por que será ???

Gem has_many_select

O problema

Estava fazendo a migração de um sistema para a versão 2.1 do rails, que usa tabelas sem qualquer normalização ou padrão de DB, e me deparei com o seguinte problema:

1
2
3
4
5
6
7
  class HeaderSale < ActiveRecord::Base
    set_table_name("cab_pedido")
    set_primary_key("r_e_c_n_o_")

    has_many :justifications,
      :foreign_key => 'nr_pedido'
  end

O problema é que tenho uma campo chamado ‘r_e_c_n_o_’ que é serial(auto incremento), mais não é uma primary key. Pra complicar eu tenho um outro campo, chamado ‘cpv_pedido’ que a primary key e também é auto incremento (pega o último e soma), ou seja, este banco é um “sonho” para qualquer desenvolvedor.

Quando eu faço um busca:

1
2
3
4
x = HeaderSale.find(:first, :conditions => 'cpv_pedido = 193514')
   => 'SELECT * FROM "cab_pedido_vendas" WHERE (cpv_pedido = 193514) LIMIT 1'
x.justifications
   => 'SELECT * FROM "justificativa" WHERE ("justificativa".nr_pedido = 307634)'

Mais o correto seria:


=> 'SELECT * FROM "justificativa" WHERE ("justificativa".nr_pedido = 193514)'

Para resolver este problema, criei a gem has_many_select – não sei porque dei este nome, que temporariamente resolve o problema, já que na próxima versão do rails teremos está opção.

Como usar ?

Primeiro passo é instalar a gem:

1
2
gem sources -a http://gems.github.com
gem install ozeias-has_many_select

Depois no environment.rb


require 'has_many_select'

No relacionamento do model:

1
2
3
4
5
6
7
  class HeaderSale < ActiveRecord::Base
    set_table_name("cab_pedido")
    set_primary_key("r_e_c_n_o_")

    has_many :justifications,
      :foreign_key => 'nr_pedido', :primary_key => 'cpv_pedido'
  end

O resultado:

1
2
3
4
x = HeaderSale.find(:first, :conditions => 'cpv_pedido = 193514')
   => 'SELECT * FROM "cab_pedido_vendas" WHERE (cpv_pedido = 193514) LIMIT 1'
x.justifications
   => 'SELECT * FROM "justificativa" WHERE ("justificativa".nr_pedido = 193514)'

E agora?

E agora, se a gem estiver sendo útil para você, não se esqueça de me recomendar no working with rails.

Sugestões, dicas e críticas são bem-vindas.

Update 22/08/2008:

Apesar de ter mudado meu login no github, o nome da gem não foi atualizado. Valeu Marcus. O correto é:

1
2
gem sources -a http://gems.github.com
gem install ozsantana-has_many_select

No github: http://github.com/ozeias/has_many_select/tree/master

Rails Summit Latin America 2008

Como a maioria de vocês já sabem, em outubro teremos a Rails Summit Latin America 2008. Alguns dos maiores Railers da comunidade internacional como David Hansson, Charles Nutter, Chad Fowler, Dr. Nic, Chris Wanstrath, David Chelinsky, Thomas Enebo, Ninh Bui, Hongli Lai, Chris Wanstrath, Obie Fernandez, Jay Fields e outros. Da comunidade brasileira teremos Manoel Lemos, Carlos Eduardo, Fabio Kung, Vinicius Teles e George Guimarães.

Da para saber por estes nomes, que serão dois dias imperdíveis. Bom, tenho uma galerinha aqui da região (Toledo e Cascavel) que está afim de ir, e a principio íamos de carro, mais como o número de interessados esta aumentado, e por isto, estou fazendo um pacote para irmos de van ou ônibus.

Então se estiverem a fim de ir me avisem, vou definir a melhor rota e se tiver na rota passamos e pegamos os interessados em suas cidades.

Também estou verificando o hotel para ficarmos por lá.

Os interessados deixem seu nome e cidade em oz.santana ( @ ) gmail.com e/ou aqui.

3º Circuito Paraná de Software Livre em Cascavel

Circuito Paraná de Software Livre

Nos dias 15 e 16 de agosto, estará sendo realizado no Auditório da Universidade Estadual do Oeste do Paraná – UNIOESTE de Cascavel, o 3º Circuito Paraná de Software Livre

No dia 15 teremos palestras e não precisa de inscrição para participar. Já no dia 16 teremos várias atividades acontecendo simultaneamente, com direito a oficinas, installfest e palestras.

Sobre as palestras, teremos duas que particularmente eu recomendo, a primeira: Uma Introdução sobre Ruby on Rails por Davis Cabral e Ozéias Sant’ana, e a segunda Métodos ágeis e sua relação com o Software Livre por Rafael Caceres.

Maiores informações aqui e inscrições aqui.

Rails-doc

Acaba de ser lançado o site rails-doc.org, uma aplicação de documentação. Ele foi desenvolvido para que os desenvolvedores Rails tenha uma alternativa muito boa de consulta a documentação do Rails.

Existem outras diversas fontes de consultas as API do rails, mais o que chama atenção no rails-doc é ser um sistema social de documentação de código. Desenvolvedores Rails podem adicionar notas a documentação atual, basta estar registrado.