Um respiro “Ágil” no meio de um mar waterfall!
por Cairo Noleto no dia 01/07/2009, em Metodologias de desenvolvimento
Olá, hoje vou contar apenas uma das histórias de desenvolvimento que vivenciei.
Há alguns anos trabalhei em uma empresa de desenvovimento, e lá nós tínhamos papeis bem definidos! X semanas eram de análise, Y semanas de desenvolvimento, Z semanas de design, e assim foi-se.
Durante 8 meses nós desenvolvemos assim, onde o cliente só conhecia o sistema dele uma vez ou outra nesse tempo todo. Nosso prazo já estava estourando e com certeza nós tínhamos cerca de 25% do projeto concluído.
Faltando pouco mais de um mês para finalizar o prazo do projeto, o cliente desesperado queria algo do sistema para poder trabalhar, ele não aguentava mais o sistema atual e a promessa desse novo sistema o fazia querer mais e mais o seu uso.
A equipe então perguntou o que o cliente queria logo de imediato. Paramos todos os códigos que estávamos fazendo e fizemos tudo o que o cliente queria. Foi nesse período que começou o respiro Ágil.
Nessa época de desenvolvimento eu não tinha nenhum conhecimento sobre Ágil, metodologias de desenvolvimento, testes, ou qualquer outro tipo de conhecimento Ágil.
Sentamos com nosso cliente e em duas semanas ele estava com uma parte do sistema pronto e já estava usando em produção! Nessas duas semanas nós trabalhamos com o cliente ali do nosso lado, desenvolvendo e mostrando a cada commit, fizemos isso e conseguimos ter um cliente “satisfeito”, ganhamos um pouco mais de prazo.
Logo após isso eu saí dessa empresa e nunca mais tive contato com ela… Até pouco tempo atrás.
Conversando com um dos sócios da empresa, perguntei sobre esse tal projeto, e como eu já sabia e deduzira, o projeto tinha sido finalizado mas não completo, como a maioria dos projetos feitos em Waterfall. Grandes prazos, altos custos e grandes falhas!
Mas para minha surpresa, de todo o sistema, a única parte que ele estava usando foi aquela que fizemos em duas semanas com ele ali do lado! O que para mim foi uma felicidade e como o título desse artigo: Um respiro “Ágil” no meio de um mar waterfall!
Usando Factory Girl em seus testes
por Cairo Noleto no dia 21/06/2009, em Fixtures, Ruby
Hoje quem desenvolve em Ruby On Rails tem nas mãos as poderosas ferramentas de testes, sejam eles para desenvolvimento orientado a testes ou orientado a comportamentos. E no início nós usávamos fixtures, que são arquivos que contém um amontoado de dados que serão usados em nossos testes.
Junto com a evolução dessas ferramentas nasceram os fixtures replacements. Nasceram para suprir a necessidade de organização e praticidade na utilização de fixtures. Atualmente temos Machinist, Factory Girl, Object Daddy, Dataset, Fixjour e FixtureReplacement. Certamente existem outros, mas esses são os mais famosos e usados.
Hoje vou mostrar como você pode usar o Factory Girl em seus testes/especificações.
Para instalar o Factory Girl:
sudo gem install thoughtbot-factory_girl
Depois você tem que configurar no seu environment o uso da gem:
config.gem “thoughtbot-factory_girl”, :lib => “factory_girl”, :source => “http://gems.github.com”
Depois de configurado, vamos a criação de suas factories. Por padrão, o Factory Girl carrega automaticamente em seus testes as factories que se encontram em test/factories/*.rb, spec/factories/*.rb ou você pode criar todos os seus factories em um único arquivo e colocar em test/factories.rb ou spec/factories.rb. Você pode criar todos os seus factories em um único arquivo ou separar por model (O que eu acho mais organizado).
Antes de usar o Factory Girl nos seus testes você deve definir como cada model deve funcionar:
Factory.define :user do |factory|
factory.name => "Cairo"
factory.surname => "Noleto"
end
Você pode ter outras definições, por exemplo:
Factory.define :admin, :class => User do |factory|
factory.name => "Administrador"
factory.surname => "Cairo Noleto"
factory.admin => true
end
Você pode fazer vários tipos de factories, um para cada situação que você precisar, é mais fácil para fazer a manutenção.
Depois que você define suas factories é hora de realmente brincar com elas ;)
user = Factory.build(:user)
user_admin = Factory.build(:admin)
Quando você usa build, ele constroi um objeto não salvo.
user = Factory.create(:user)
user_admin = Factory.create(:admin)
Ao utilizar create, você está criando um objeto salvo.
Você pode criar uma hash com os atributos:
admin_attributes = Factory.attributes_for(:admin)
Você pode definir associações:
Factory.define :picture do |factory|
factory.name "Random name"
factory.association :user, :factory => :user
end
Basicamente o Factory Girl é isso, dessa forma você já pode abandonar as fixtures. Existe mais opções de uso do Factory Girl que você pode olhar a documentação oficial.
Nested Attributes usando paperclip
por Cairo Noleto no dia 17/06/2009, em Rails, Ruby
Nested Attributes é um ponto interessante que veio junto com o Rails 2.3. Chegou para simplificar o uso de formulários complexos e simplificar o acesso desses atributos.
Este artigo será um tutorial de como usar nested attributes em conjunto com models que trabalham com imagens e fazendo upload usando o paperclip.
Para começarmos, ja vamos partir do pré-suposto que você já possua instalado o rails e todas as gems que fazem parte e que já tenha instalado o paperclip.
Para começar vamos criar um novo projeto Rails para este tutorial:
Agora vamos gerar dois scaffolds, um para Product e outro para Picture, model que será responsável por tratar as imagens:
Depois de tudo gerado, é hora de brincarmos com os models. Primeiro vamos dizer que o model Product possue várias Pictures e adicionarmos que ele aceita os atributos aninhados para Pictures:
1 4 end 5
Agora, vamos dizer que picture possue um product e que possue um arquivo em anexo chamado image:
1 4 end 5
Com isso, os models já funcionam com atributos aninhados. As views agora! Vamos adicionar a Picture em new.html.erb e adicionar uma partial, essa partial é o inicio das mágicas ;)
1 New product 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
A partial vai ficar assim:
Se o formulário passado pra view for um objeto novo, então ele vai mostrar um file field para uma foto, se não for, ele vai carregar um thumb e adicionar uma box para deletar a imagem.
Agora, vamos adicionar um método no helper, que vai adicionar dinamicamente novos arquivos para fazer upload:
1 15 end
Adicionando o método criado, poderemos adicionar vários arquivos para fazer upload:
1 New product 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Ao iniciarmos o servidor (http://localhost:3000/products/new) veremos o link Add Picture.
Não se esqueça de incluir os javascripts no layout <%= javascript_include_tag :all, :cache => true %>
Com isso você tem um ponta pé inicial para trabalhar com atributos aninhados na sua aplicação. Não é difícil usar atributos aninhados com paperclip, que agrega outra função para o model. Você pode por exemplo usar atributos aninhados dentro de um outro model, que está em um outro model e que está em um outro model… Não existe limites para isso :)
UPDATE: Obrigado ao Jésus Lopes que descobriu alguns bugs (na partial e no helper) que já foram devidamente corrigidos ;)
Erecompi 2009
por Cairo Noleto no dia 03/06/2009, em Rails, Ruby
Hoje começou as palestras do Erecompi 2009. Esse ano contou com a presença da figura carimbada na comunidade Rails no Brasil do Fábio Akita.
Ele falou sobre o ecossistema Rails e deu uma introdução geral sobre Rails, Ruby, Agile e mais um monte de coisa.
Falou sobre os valores da comunidade, das escolhas e sobre o trilho Ruby On Rails no mundo. Falou da história, tocou no blog de 15 minutos e mostrou um monte de código clonado do github.
Foi legal ver que boa parte das pessoas já sabem o que é Agile (ou estão mentindo ;) e ver que muita gente já conhece Ruby On Rails, apesar de não usar. E ver que há ainda pessoas que não gostam do Agile e temem ver licitações com esse tipo de contrato.
Também contou com um case de sucesso do Grupo Credishop na utilização de (j)Ruby On Rails e nos desafios de colocar a coisa para funcionar em um Oracle 7 sem muita experiência e em um tempo onde praticamente não existia jRuby.
Foi bastante legal ouvir as experiências e os desafios dessas pessoas e poder trocar idéias com elas.
E agora que venha a Rails Summit em Outubro.
Opa, ainda estou aqui!
por Cairo Noleto no dia 07/05/2009, em Off-topic
Sumi! Nas últimas semanas realmente sumi, por uma boa razão!
Para quem me segue no twitter sabe que vou ser pai, que vou me casar e que comprei um MacBook.
Minha vida está tomando um rumo totalmente novo e isso está me distânciando um pouco do meu blog. Claro que não esqueço totalmente, todos os dias eu acesso e vejo se está tudo ok.
Bom, agora que tenho um MacBook, meu GitHub já tem alguns TextMate Bundles e comecei a “mecher” no OS X :)
Instalando Nginx com Passenger
por Cairo Noleto no dia 18/04/2009, em Rails, Ruby
Para quem acompanha o mundo Ruby On Rails soube que no dia 16 foi lançado o Passenger com suporte total para Nginx (Lê-se Engine X). Assim temos mais uma rápida opção de deployment para Ruby On Rails.
Para instalar, primeiro instala a gem do Passenger
sudo gem install passenger
O Passenger gera o instalador fácil para Nginx e para o Apache, no nosso caso só digitarmos
sudo passenger-install-nginx-module
Nessa parte eu estava obtendo um erro e não estava instalando o Nginx e aqui nessa thread os Phusion’s Guys resolveram o problema. Então eu fiz um clone do projeto que ta no github e rodei um rake package para gerar a gem com a modificação e fiz a instalação da gem e tudo foi resolvido.
Após isso é só configurar o Nginx, que por padrão é instalado em /opt/nginx. Para fazer o deploy é simples, adicione o seguinte código em /opt/nginx/conf/nginx.conf (altere a pasta conforme onde você instalou o Nginx)
Para completar, eu fiz um script onde posso iniciar, parar ou reiniciar o servidor
Você pode colocar a inicialização automaticamente no servidor
sudo update-rc.d nginx defaults
Depois é só inicializar o servidor e pronto.
Instalando Apache CouchDB no Linux
por Cairo Noleto no dia 16/04/2009, em Apache CouchDB, Linux, Ubuntu
Para instalar o Apache CouchDB no Ubuntu/Debian-likes use
sudo apt-get install couchdb
Mas a versão que ele instala (pelo menos no Ubuntu 8.10) é uma versão um pouco mais antiga, então resolvi instalar via source
wget http://linorg.usp.br/apache/couchdb/0.9.0/apache-couchdb-0.9.0.tar.gz
tar zxvf apache-couchdb-0.9.0.tar.gz
cd apache-couchdb-0.9.0
Antes de instalar, você deve instalar as dependências
sudo apt-get install build-essential erlang libicu38 libicu-dev libmozjs-dev libcurl4-openssl-dev
Após isso a coisa fica fácil :)
./configure
make
sudo make install
Ainda não está finalizado, você deve adicionar um usuário para iniciar o couchdb
sudo adduser –system –home /usr/local/var/lib/couchdb –no-create-home –shell /bin/bash –group –gecos “CouchDB Administrator” couchdb
Você deve dar permissões a algumas pastas
sudo chown -R couchdb /usr/local/etc/couchdb
sudo chown -R couchdb /usr/local/var/lib/couchdb
sudo chown -R couchdb /usr/local/var/log/couchdb
sudo chown -R couchdb /usr/local/var/run/
Pronto, agora está instalado, você pode inicializar o Apache CouchDB com
sudo -i -u couchdb couchdb -b
“Apache CouchDB has started, time to relax” ;) assim você inicia o CouchDB manualmente, se você quiser deixar ele iniciando automaticamente, você pode fazer
sudo ln -s /usr/local/etc/init.d/couchdb /etc/init.d/
sudo update-rc.d couchdb defaults
Agora você pode digitar sudo /etc/init.d/couchdb {start|stop|restart|force-reload|status} e facilmente você inicializará ou finalizará o Apache CouchDB, para você ver seu Apache CouchDB funcionando, clique aqui.
Lançado o Rails Guides em Português
por Cairo Noleto no dia 10/04/2009, em Rails, Ruby, Traduções
Foi lançado hoje a primeira versão dos Guias dos Rails em português.
Um detalhe importante, é que essa é a primeira versão, por quê esses guias sempre vão sofrer alterações:
- Evoluções do Rails
- Maturação das idéias
- Mudança de rumos no guia
Você pode conferir todos os guias aqui.
Autoditada, uma “profissão” que está com os dias contados?!
por Cairo Noleto no dia 08/04/2009, em Off-topic
“Quando eu nasci eu era uma pessoa que precisava de muitos cuidados, eu precisava ser alimentado, limpado e mais um monte de coisas, por quê eu não tinha capacidade de realizar essas tarefas sozinhos.
Então eu fui crescendo, comecei a observar o mundo ao meu redor, notei pessoas falando, caminhando e pensei “Pow, que legal, eu também quero ser assim, eu quero poder ir de um lugar para outro sem ser nos braços que me carregam todos os dias” então eu comecei a praticar a ficar de pé, depois comecei a engatinhar, até que enfim, num belo dia, eu consegui ficar de pé e caminhar para onde eu queria.
Mas eu sempre caminhava e queria algo muito longe, então comecei a apontar, a mexer meu corpo de forma que as pessoas que estavam ao meu redor, soubessem o que eu queria, mas isso não foi suficiente, eu ainda não me expressava totalmente, então comecei a copiar os sons que estavam ao meu redor, e um dia eu consegui falar o que eu realmente queria, e realmente fui ouvido!
Comecei a querer sair e ver mais coisas, então comecei a sentir um mundo mas um belo dia, eu não conseguia mais ver nada, então minha mãe super preocupada comigo me levou a um médico, e este disse que eu tinha que fazer uma cirurgia ou estaria cego para o resto da minha vida, por quê eu estava com câncer.
Acordei a percebi que não via, então minha mãe, segurou minha mão e disse:
‘Você poder ver com as suas mãos, seus ouvidos, seu nariz e com a sua boca filho’
Então a partir dali eu comecei a ver um mundo totalmente diferente”
Este é um resumo de uma grande história, de um garoto que aos 3 anos de idade sofreu de câncer e ficou cego, mas ele e sua mãe não se deram por vencido e ele conseguiu se adaptar de uma forma extraordinária ao nosso mundo, como vocês podem ver neste filme:
Eu poderia citar aqui várias pessoas que foram autoditadas, mas eu prefiro falar de uma coisa que está mais próxima de ser entendida, de um caso vivo.
Ser autoditada não é apenas estudar sozinho, mas conseguir aprender coisas novas e evoluir sem precisar de algo ou alguém nos conduzindo. É ter fé em você mesmo e ter a certeza de que apenas você pode e vai conseguir.
Ser autoditada nos dias de hoje é muito mais fácil do que eram os autoditadas a 100, 200 ou 500 anos atrás, ser autoditada é uma escolha, não é uma imposição, ser autoditada é ter o prazer em fazer as coisas que gosta, na hora que quiser, quando quiser, ser autoditada é experimentar realmente o mundo e conseguir extrair dele tudo que você conseguir!
Não posso desmerecer as nossas Universidades, faculdades, colégios, mas posso não creditar no nosso sistema de educação. Não posso creditar em um sistema que apóia que você seja mediano. Enquanto nosso sistema de educação for assim, nós moraremos em um país de terceiro mundo, seremos pessoas de terceiro mundo e seremos sempre medíocres!
Neste artigo existe muitas repetições da palavra eu e você e tenha certeza de que é somente a referência que essas palavras fazem que pode mudar alguma coisa no nosso Brasil ou no nosso mundo, apenas EU e VOCÊ.
Redcar, release da versão 0.1
por Cairo Noleto no dia 05/04/2009, em Editores, Ruby
A pouco tempo atrás, descobri através do Twitter um editor que promete ser o TextMate para Linux, o RedCar.
Para quem conhece ou já ouviu falar do TextMate sabe que ele possui Bundles, e esses malditos é que fazem toda a mágica do TextMate e que nos deixa com uma vontade louca de ter um Mac.
Então Daniel Lucraft começou a construir um editor todo feito em Ruby usando GTK, e mais um monte de firula. Depois de um “Instale sabendo que vai quebrar. Salve seus arquivos, por que vai quebrar” resolvi ajudar Daniel e fiz algumas alterações.
Se você não está satisfeito com seu editor atual, ou se você quer ter o poder dos Bundles sem ter o TextMate, então é a sua chance :P Visite a página oficial, dê uma passada no github, instale e ajude esse projeto.




