Autotest + RSpec 1.1.11

Apenas uma dica rápida para quem usa Autotest + RSpec. A partir da versão 1.1.5 foi feito uma alteração na maneira como se executa o autotest, coisa muito simples, mas tem tirado a paz da galera.

Se você usa gem, somente a gem, então use:


autospec

Se você usa plugin, então use:


script/autospec

Simples...

Railsbox Videocast na Rails Summit 2008

Este é meu primeiro post depois da Rails Summit 2008. Na minha opinião foi o melhor evento de nerd que já participei, simplesmente excepcional.

Lá pelas tantas, a galera reunida, resolvemos gravar um videocast para o Railsbox. O problema foi que o Davis, meu companheiro de podcast, só gravou uma parte, sorte nossa que eu tinha levado o Sony Vaio do Balena, o que salvou o audio do restante do videocast. O som não ficou aquelas coisas, por isto ainda tenho que editar e tirar um pouco a diferença de volumes.

Mas para vocês terem uma idéia, ai vai a parte gravada pelo Davis. Esta semana ainda termino a edição do audio e vocês poderão curtir na integra.


Railsbox Videocast na Rails Summit 2008 from Ozéias Sant'ana on Vimeo.

GitX - Visualizador de histórico do GIT para OS X

post

O GitX é um clone do gitk feito especificamente para OS X Leopard. Ainda na versão 0.4, ele é simplesmente espetacular. Escrito em Objective-C, tem interface nativa e se integra muito bem com o SO, permitindo ações como arrastar e soltar e o uso do QuickLook.

Alguns recursos:

GitX Stable
Wiki do Projeto
Documentação do Projeto
Screencast

Thin 1.0.0 - That's What She Said

post

Esse é o codename da nova versão do Thin 1.0.0. O lançamento é o resultado da colaboração efetiva da comunidade, que depois de roda-lo em produção, encontraram alguns bugs e outras necessidades.

O Thin é um servidor Rails estável, seguro, rápido e extensível. Utiliza 3 das melhores bibliotecas Ruby para web:

Para instalar: gem install thin

CHANGELOG

Foto by aaronazz

RailsBox Podcast #4

post

Motivado por um post na rails-br, que demonstrou as dúvidas da galera em relação a Licenças, gravamos um podcast com dois especialistas no assunto: Sylvestre Mergulhão e Rafael Caceres. Conversamos sobre as diversas licenças, software livre e open source.

Download: Episódio #4
iTunes: Subscribe
RSS Feed: Subscribe

Show Notes

Foto by Jaime Monfort

TownConnect, Inc.

post

Depois de 2 anos na Prati-Donaduzzi, chegou a hora de mudanças. Alguns dias de conversas e entrevistas, tenho o prazer de dizer que faço parte agora do time da TownConnect, Inc.

A TownConnect, Inc. é uma startup localizada nos EUA, e seu produto é uma rede social muito bem organizada e focada em serviços para a família, amigos e comunidade.

Junto comigo entra o Thiago Pradi, e nós nos juntamos ao Fábio Espindula, que foi o grande responsável por tudo isto.

Obrigado Mike, Obrigado Fábio.

Vamos trabalhar agora!!!

English Version:

After 2 years in Prati-Donaduzzi, the hour of changes arrived. Some days of conversation and interviews, I'm pleased to say I'm now part of dream team.

Thanks Mike, Thanks Fábio

So, let's rock

RailsBox Podcast #3

post

Um super podcast, com Marcos Tapajós da ImproveIt e da Surgeworks. Falamos sobre carreira, mercado de trabalho, rails, plugins e não podíamos deixar de falar de testes.

Download: Episódio #3
iTunes: RSS Feed

Show Notes

O livro citado pelo Tapajós é Test-Driven Development by Example do Kent Beck.

Foto by joconnell

Rails 2.1.1 - Release de Manutenção

post

Depois do Release de Manutenção para o Rails 2.0, sai agora o Release de Manutenção para o Rails 2.1. A nova versão, 2.1.1, corrige os problemas de segurança do REXML, além de outras pequenas atualizações.

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

Vejam aqui todas as correções

RailsBox Podcast #2

post

Nosso segundo episódio falamos um pouco sobre mercado de trabalho brasileiro e indiano, plugin has_cache, spree, Minas On Rails, Rails Summit e muito mais.

Ainda temos um pouco de problemas no audio, mais já está bem melhor que no primeiro podcast. Compramos agora um programa que divide os canais e assim fica mais fácil fazer o mix. Problemas com o iTunes e outros também resolvidos.

Críticas e sugestões são sempre bem vindas.

Download: Episódio #2
iTunes: RSS Feed

Show Notes

Foto by Wallyg

Rails 2.0.4 - Release de Manutenção

post

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

Ágil vs. Cascata

RailsBox podcast #1

post

É 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

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:

1
2
3
4
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:

1
2
3
4
5
6
7
8
9
10
11

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

1
2
3
4
5
6

  # config/enviroment.rb
  ...
  # Activate observers that should always be running
  # config.active_record.observers = :cacher, :garbage_collector
  config.active_record.observers = :user_observer

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

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

1
2
3
4
5
6
7
8
9
10
# app/models/user_observer.rb
class UserObserver < ActiveRecord::Observer
  def after_create(user)
    Log.create(:table => "user", :action => "create", :comments => "New user added!")
  end
  
  def after_destroy(user)
    Log.create(:table => "user", :action => "destroy", :comments => "User removed!")
  end
end

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

1
2
3
4
5
6
INSERT INTO "users" ("name", "updated_at", "phone", "age", "created_at")
VALUES('First User', '2008-08-22 12:07:34', '111-1111', 20, '2008-08-22 12:07:34')

INSERT INTO "logs" ("new_value", "updated_at", "comments", "old_value", "action", "field",
"table", "created_at") VALUES(NULL, '2008-08-22 12:07:34', 'New user added!', NULL, 
'create', NULL, 'user', '2008-08-22 12:07:34')

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

1
2
3
4
5
6
7
8
9
# app/models/user_observer.rb
  ...
  def before_update(user)
    user.changes.each do |key, values|
      Log.create(:table => "user", :action => "update", :field => key, :old_value => values.first,
        :new_value => values.last,  :comments => "User updated!")
    end
  end
  ...

O log gerado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
INSERT INTO "logs" ("new_value", "updated_at", "comments",
"old_value", "action", "field", "table", "created_at") VALUES('2008-08-22 12:29:00', 
'2008-08-22 12:29:00', 'User updated!', '2008-08-22 12:07:34', 'update', 'updated_at', 'user',
'2008-08-22 12:29:00')

INSERT INTO "logs" ("new_value", "updated_at", "comments", "old_value", "action", "field",
"table", "created_at") VALUES('222-2222', '2008-08-22 12:29:00', 'User updated!', '111-1111', 
'update', 'phone', 'user', '2008-08-22 12:29:00')

INSERT INTO "logs" ("new_value", "updated_at", "comments", "old_value", "action", "field", 
"table", "created_at") VALUES(26, '2008-08-22 12:29:00', 'User updated!', 20, 'update',
'age', 'user', '2008-08-22 12:29:00')

UPDATE "users" SET "phone" = '222-2222', "age" = 26, "updated_at" = '2008-08-22 12:29:00'
WHERE "id" = 1

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

Está tudo OK para você?

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:

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:

Fique a vontade para compartilhar suas idéias aqui.