quarta-feira, 29 de julho de 2009

Dica de livro: Startup, Jessica Livingston

Essa semana acabei de ler o livro Startup, de Jessica Livingston.

O livro conta a história dos fundadores de várias startups do mundo da tecnologia, todas no formato de entrevista.



Eu estava em dúvida se iria gostar do livro, uma vez que podia ser que ele fosse muito voltado para o lado de negócios e isso não me atrai tanto. Mas ele foi surpreendentemente proveitoso, acredito que o livro que eu mais gostei dentre os últimos que li.

As histórias são incríveis, contam tanto o lado do negócio quanto parte do lado tecnológico.

A escolha dos entrevistados também foi excelente, vou listá-los abaixo:
  • Steve Wozniak, Apple Computer
  • Mike Lazaridis, Research In Motion (criadora do BlackBerry)
  • Sabeer Bhatia, Hotmail
  • Evan Williams, Pyra Labs (Blogger.com)
  • Tim Brady, Yahoo!
  • Paul Buchheit, Gmail
  • Craig Newmark, craigslist
  • Caterina Fake, Flickr
  • Charles Geschke, Adobe Systems
  • Blake Ross, Firefox
  • Bob Davis, Lycos
  • Max Levchin, PayPal
  • Mitchell Kapor, Lotus Development
  • Steve Perlman, WebTV
  • Mark Fletcher, ONElist, Bloglines
  • David Heinemeier Hansson, 37signals
A maior semelhança entre todas as histórias de sucesso é o foco em criar um produto de qualidade.

Outro ponto interessante no livro é ver como as empresas do Vale do Silício são ligadas de uma certa forma.

Recomendo totalmente a leitura, mesmo para quem não é do ramo da tecnologia.

O livro é em português, e para quem quiser a versão original em inglês, o nome é Founders at Work.

Mas a tradução não trás nenhum problema grave, só identifiquei alguns erros de digitação, mas muito poucos e não atrapalham na leitura.

Fica a dica então. Aproveito pra falar para quem estiver procurando livros, visite a tag de livros do blog, que está ficando com um conteúdo muito bom.

Estou incluindo nela apenas os livros em que identifico um certo nível de qualidade após concluir a leitura.

Os próximos que eu irei ler são: "Ruby by example" e "Agile estimating and planning", mas ainda estou esperando chegar. Após concluí-los eu comento aqui.

Abraços e até o próximo post.

terça-feira, 28 de julho de 2009

Questionário para melhorar o Software Livre

Gostaria de ajudar a divulgar a pesquisa para identificar problemas de comunicação em projetos de software livre que o Fabio Kung postou na lista de discussões do rails-br.

Segue o texto dele:
Olá a todos,

O meu amigo Hugo Corbucci está fazendo uma pesquisa, como parte da sua pesquisa no mestrado, para identificar problemas de comunicação e possíveis soluções.

Se você contribui (ou já contribuiu) para o software livre e puder gastar alguns minutinhos, se importaria em responder o questionário?

http://www.ime.usp.br/~corbucci/floss-survey.html

Eu e o Hugo agradecemos! Quem puder divulgar por aí também seria de muita ajuda.

[]'s

-- Fabio Kung

É isso aí pessoal, quem puder contribuir respondendo ou divulgando (blog, twitter, amigos) eu agradeço.

Abraços.

domingo, 26 de julho de 2009

Quinto encontro GURU-SP

Final de semana passado aconteceu aqui em São Paulo o quinto encontro do GURU-SP (Grupo de Usuários Ruby de São Paulo). Foi perto do viaduto do chá, numa sala de reuniões que foi gentilmente cedida pelo pessoal da Voice Technology, (bela iniciativa, valeu mesmo!).


Palestra sobre GIT com o Douglas "QMX" Campos


O Guru-SP é um grupo de usuários que fala sobre Ruby, Rails e outros assuntos referentes a Agile. Nos reunimos com frequência para trocar conhecimentos. Esse foi o quinto encontro do grupo, e o terceiro que participo.


Coding Dojo no final da tarde

Nosso encontro começou pela manhã com uma apresentação de todos presentes e uma ótima introdução ao Rails comandada pelo Rafael Rosa "Fu".

Depois fizemos uma pausa para o almoço e quando voltamos o Rafael mandou mais uma ótima palestra, dessa vez um pouco mais avançada, sobre o ORM Data Mapper. O qual me impressionou muito, é uma boa opção para vários projetos (principalmente os que envolvem bancos legados) e vai ficar ainda mais viável quando vier o Rails 3.0 com a possibilidade de trabalhar com outros ORM de forma mais fácil.

A próxima palestra foi do Douglas Campos sobre o GIT. O cara entende muito de GIT e a palestra foi muito boa, pudemos até interagir num projetinho que fizemos no meio da palestra (alguns scaffolds) e ficamos simulando situações com o GIT (algumas até que não estavam previstas, mas que o Douglas soube se virar muito bem - desculpa pelos pushs inesperados!).

No final da tarde ainda fizemos um coding dojo, onde o Vinícius Baggio foi a frente para manipular o projeto que criamos todos juntos, para abordar temas como testes com Rspec e Remarkable.



Esse foi um resumo geral, todas as palestras e o encontro como um todo foi muito proveitoso. Dessa vez a galera compareceu em massa (acho que cerca de uns 25 participantes ou mais) e é muito legal ver o grupo crescendo desse jeito.

Com certeza teremos próximos encontros, acredito que o próximo deve ser marcado para setembro. Se você ainda não participa do grupo mas tem interesse, participe da nossa lista de discussões.

As fotos do evento estão disponíveis no link abaixo:

http://apantaliao.multiply.com/photos/album/29/Encontro_Guru-sp

Informações mais detalhadas sobre o evento, assim como vídeos das palestras e outros posts sobre ele podem ser encontrados na página oficial no GURU-SP:

http://guru-sp.com/index.php/Quinto_Encontro

Abraços pessoal e espero que os próximos encontros continuem sempre crescendo com qualidade, assim como está acontecendo.

segunda-feira, 20 de julho de 2009

Rails 2.3.3 liberado!

Post rápido para avisar que hoje a tarde foi lançada a versão 2.3.3 do Ruby on Rails.

Essa versão contém algumas correções de bugs e algumas novas características, como o método touch para atualizar timestamps de um registro, a opção :primary_key para o belongs_to do ActiveRecord entre outros, como melhorias para utilizar JSON.

Para maiores informações visitem:

http://weblog.rubyonrails.org/2009/7/20/rails-2-3-3-touching-faster-json-bug-fixes

Para fazer a atualização basta utilizar:

sudo gem update rails

domingo, 19 de julho de 2009

Review do curso Certified Scrum Master

Essa semana participei do curso Certified Scrum Master Training que é o curso oficial para Scrum Masters da Scrum Alliance, lecionado no Brasil pelo Alexandre Magno (Certified Scrum Trainer), numa parceria Adaptworks e Caelum.

O curso aconteceu entre os dias 13 e 16 de julho e estou completamente satisfeito. O Alexandre domina completamente o assunto e ensina de um jeito supreendente, cheio de atividades para nos fazer entender melhor o conteúdo.

Não vou entrar em detalhes quanto as atividades, pois deixo a surpresa pra quem pretende fazer o curso.

Apesar do curso ter acontecido a noite e todos estarmos muito cansados, o Alexandre conseguiu prender a atenção de todos e responder a todas as perguntas dos alunos satisfatoriamente, usando sua ampla experiência profissional para exemplificar.

O Scrum é muito diferente do que eu imaginava, até mais atraente do que minha ideia inicial, mas muito mais difícil de ser implantado do que eu previa.

As instalações do curso foram em local adequado (hotel Green Place Flat) e de fácil acesso, pelo menos para mim.

Esse era um curso que eu já pretendia fazer há algum tempo, mas tinha lá minhas dúvidas se eu gostaria e se valeria o investimento.

Como já disse, estou completamente satisfeito de ter feito o curso e se você está com essas mesmas dúvidas te indico que faça também.

Agora que tenho certo conhecimento de Scrum, posso dizer que é arriscado fazer um curso de Scrum em uma instituição que não aborde o tema da forma correta.

Pois ele apesar de simples, é difícil, e se for dado importância só para os processos (que geralmente é o que mais atrái todo mundo e muita gente pensa que Scrum é só isso) e deixar a cultura do Scrum de lado (que é o mais importante) com certeza você ao implantá-lo, apesar de ter seus desenvolvedores trabalhando com sprints, daily meetings, planning poker, etc, o que te dará a falsa impressão de estar trabalhando com Scrum, não terá os ganhos que o Scrum de verdade lhe proporciona.

Gostaria de dizer que não estou ganhando nada com esse post, só estou recomendando um curso que achei que deu retorno ao investimento.

Abraços e provavelmente eu devo começar a abordar o assunto Scrum aqui nos posts do blog, uma vez que pretendo me aprofundar mais com ele.

sábado, 11 de julho de 2009

Layouts aninhados no Rails usando content_for

A criação de layouts em aplicações Ruby on Rails é uma funcionalidade que valorizo muito no framework. Com ela podemos implementar na prática a filosofia de Design de Epicentro (ver livro Getting Real - 37signals).

Por padrão, podemos criar dois tipos de arquivos de layouts no Rails:
  1. Layout para controllers
  2. Layout para a aplicação inteira
Para criar um layout específico para um determinado controller, criamos dentro da pasta app/views/layouts da aplicação um arquivo com o nome:

nome_do_controller.html.erb

Por exemplo:

albums.html.erb

Um exemplo simples do conteúdo desse arquivo seria o seguinte:



Aonde invocamos o método yield será exibido o conteúdo da view da página que estará sendo acessada.

Se criarmos um arquivo parecido mas com o nome de application.html.erb, esse layout irá ser exibido em todas as páginas da aplicação, a menos que exista um arquivo de layout para o controller em questão (como mencionado acima) ou tenha sido informado de forma explícita um outro layout a ser exibido (demonstrarei como em breve).

O que acontece é que muitas vezes precisamos de dois ou mais layouts diferentes em nossa aplicação, mas parte desses layouts são iguais entre si. E replicar essas partes iguais em todos os layouts fere o princípio de DRY (Don't Repeat Yourself) e acaba causando uma série de retrabalhos.

Imagine que você altere essa parte repetida do layout em um dos arquivos e esquece de mudar nos demais?

Para isso, vou lhes apresentar uma solução que utilizei esses dias em uma aplicação minha. Na verdade encontrei essa solução no endereço abaixo, e apenas dei uma pequena adaptada para ficar mais fácil de trabalhar:

http://blog.jerodsanto.net/2008/06/rails-nested-layouts

Imagine que o layout de nosso site é parecido com a figura abaixo:



Onde possuímos um espaço para o logotipo, um espaço para o conteúdo e um espaço para uma sidebar que contém o menu.

Agora imagine que em determinada parte do sites precisamos exibir algumas fotografias grandes, e seria preciso retirar o sidebar para poupar espaço.

Para não termos que criar dois layouts praticamente idênticos, faremos eles com apenas as partes que são diferentes, e o que for igual deixaremos em um layout separado, o qual os dois incluirão. Conforme demonstrado na figura:



Podemos chamar isso de layouts aninhados, ou, no termo em inglês, nested layouts. Onde dois layouts simples herdam informações de um layout que trás informações comuns aos dois.

Para nos ajudar a implementar nossa solução utilizaremos um helper do Rails chamado content_for.

Com content_for podemos armazenar o conteúdo de uma determinada parte do nosso site para ser exibida depois em algum lugar específico, por exemplo:



O que é armazenado dentro do bloco do helper content_for é exibido depois em:

<%= yield :list %>

Então para solucionar nosso problema nós iremos criar dois layouts:
  • application.html.erb (que contém o sidebar e será exibido em todas as páginas da aplicação)
  • expanded_content.html.erb (que será exibido apenas nas páginas que precisam de mais espaço para o conteúdo)
E um outro arquivo que conterá toda a base do site:
  • base.html.erb
Tanto o application.html.erb quanto o expanded_content.html.erb definirão o que deverá constar no content_for :content, e depois renderizarão o base.html.erb, que contém um lugar definido para exibir o conteúdo de :content.

application.html.erb


expanded_content.html.erb


base.html.erb


Eu coloquei o conteúdo do sidebar dentro de um partial, para melhorar a visualização do exemplo.

Do jeito que está, todas as views serão exibidas utilizando o layout application.html.erb, uma vez que ele é o layout padrão da aplicação e "expanded_content" não é o nome de um controller.

Então como eu faço para utilizar o layout expanded_content.html.erb?

Você tem duas opções:

1) Se você deseja aplicar este layout à todas as views de um determinado controller, basta adicionar a seguinte linha no controller:

layout 'expanded_content'

Exemplo:



2) Se você deseja aplicar esse layout apenas a uma determinada action de seu controller, basta informar o layout na hora de renderizar a view, exemplo:



Com isso não duplicamos código e podemos administrar melhor nossa aplicação.

Gostaria de agradecer ao Shairon Toledo que me falou da existência do content_for la no grupo rails-br.

Espero que tenho gostado da dica.

Qualquer dúvida podem entrar em contato (e-mail, comentário, twitter).

Abraços!

sábado, 4 de julho de 2009

Listando anotações em aplicações Rails utilizando o Rake

Recentemente comecei a ler o livro do Rodrigo Urubatan, Desenvolvimento Fácil e Rápido de Aplicações Web Ruby on Rails, tinha comprado faz algum tempo, mas ele entrou na fila dos livros que eu já estava lendo.

Agora de manhã, na parte que ele ensinava como listar as funcionalidades do utilitário Rake (rake -T) e descrevia as mais importantes, me interessei bastante por uma delas, acho que vai facilitar o desenvolvimento de algumas aplicações minhas.

Estou falando do comando:

rake notes

Este comando lista todos os comentários em sua aplicação que começam por FIXME, OPTIMIZE e TODO.

Por exemplo, em um controller, eu adicionei o seguinte comentário:

# OPTIMIZE create_pack action needs to be refactored

Como mostra a imagem (clique para ampliar):



Quando, no diretório raiz da minha aplicação, eu executo o comando rake notes, ele me retorna:

rake notes
(in /home/bruno/projetos/escolinha)
app/controllers/pictures_controller.rb:
* [ 31] [OPTIMIZE] create_pack action needs to be refactored


Lembrando que por enquanto minha aplicação só tem essa anotação, se existissem outras, ele listaria também.

Além desse comando, você pode utilizar também:

rake notes:fixme
rake notes:optimize
rake notes:todo


Que listam tipos de anotações específicos.

Fica aí a dica, essa é uma funcionalidade que está disponível a partir do Rails 2.0, e ajuda bastante para lembrar o que ainda precisa ser feito.

Abraços e até o próximo post!