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!

Terça-feira, 30 de Junho de 2009

Firefox 3.5 lançado!

Post rápido pra divulgar o lançamento da versão 3.5 do Firefox!



Visitem: http://br.mozdev.org

Domingo, 28 de Junho de 2009

Dica de livro: The Pragmatic Programmer

Já citei trechos desse livro pela menos duas vezes aqui no blog e, agora que terminei de lê-lo, gostaria de indicá-lo a todos os programadores que passam por aqui.

O livro The Pragmatic Programmer, from journeyman to master fala sobre programação em geral, sem focar em nenhuma linguagem específica e sim, no ato de programar. Mostra como deve se comportar um programador pragmático, e o que é isso.



O livro foi escrito por Andrew Hunt e David Thomas, dois experientes programadores. Recomendo a leitura a todos. O livro mudou minha maneira de programar, com certeza.

Infelizmente não há uma versão em português do livro, mas para quem tem a possibilidade de ler em inglês, não perca essa oportunidade.

O livro pode ser comprado aqui.

Não é uma propaganda ao site de comércio eletrônico, só estou querendo mostrar que não é difícil comprar um livro internacional pela internet aqui no Brasil. Existem sites que vendem esse tipo de conteúdo quase pelo mesmo preço do item em seu país de origem.

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

Quarta-feira, 24 de Junho de 2009

Proposta de criação de um Hackerspace em São Paulo

O Hugo Borges (agaelebe do GURU-SP) acaba de postar no blog dele uma proposta de um projeto de criar um Hackerspace na cidade de São Paulo.

A ideia dele é muito interessante, seria uma ótima oportunidade para todos os amantes de tecnologia da cidade.



Convido a todos a ler o post original no blog dele, e também a ajudarem a tornar isso possível.

Link: http://www.agaelebe.com.br/2009/6/25/hackerspace_em_sao_paulo

Basicamente um hackerspace é um lugar físico, uma espécie de laboratório que reune pessoas interessadas em certos tópicos de estudo, geralmente ligados a tecnologia, como projetos DIY (faça você mesmo), software, eletrônica, robótica, tecnoarte, entre outros. Além da realização destes projetos o hackerspace pode promover minicursos e eventos, buscando disseminar o conhecimento adquirido.

Abraços.

Segunda-feira, 22 de Junho de 2009

Dicas para refatoramento

Hoje li um texto que gostaria de passar adiante. Foi, novamente, no livro The Pragmatic Programmer - from journeyman to master - onde o autor citou algumas dicas de Martin Fowler a respeito de refactoring (refatoramento):
  1. Não tente refatorar e adicionar funcionalidades ao mesmo tempo.
  2. Esteja certo que você tem bons testes antes de começar o refatoramento. Execute os testes sempre que possível. Desta forma você saberá rapidamente se suas alterações quebraram algo.
  3. De passos curtos e cautelosos: mova um campo de uma classe para outra, una dois métodos similares em uma super classe. Refatoramento frequente envolve criar muitas mudanças localizadas que resultam em uma mudança de larga escala. Se você manter seus passos pequenos, e testar depois de cada passo, você evitará debugs prolongados.
Martin Fowler é uma figura respeitada na área de desenvolvimento de softwares, principalmente no que diz respeito a orientação a objetos.

Acredito que essas dicas são valiosas para um bom refatoramento.

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

Sexta-feira, 19 de Junho de 2009

Entendendo símbolos em Ruby (tradução)

Ontem eu estava no rails-br e um integrante do grupo citou o link para um artigo sobre símbolos no Ruby, escrito por Kevin Clark. Achei o artigo muito útil e resolvi traduzí-lo para o português para ajudar quem estiver com dúvidas em símbolos.

Sinceramente, eu também aprendi muito com o texto. Eu sabia quando utilizar os símbolos, mas não o porque.

Então segue abaixo o texto, qualquer crítica quanto à tradução, correção ou outro tipo de comentário será bem vindo. Lembrando que todos os créditos do texto são de Kevin Clark, o autor do original.

Para quem lê em inglês, este é o link do original:

http://glu.ttono.us/articles/2005/08/19/understanding-ruby-symbols

Entendendo símbolos em Ruby

Símbolos em ruby são um enigma. Nós usamos eles, mas muitos não os entendem realmente.

Então, afinal, o que é um símbolo?

De uma forma simples, um símbolo é algo que você utiliza para representar nomes e strings. O que se resume a uma forma eficiente de ter nomes descritivos enquanto você economiza espaço que seria utilizado para gerar uma string para cada instância de nome.

O caso do Dr. Jones

Dr. Jones é um psicólogo. Ele regularmente usa testes de associações de palavras para diagnosticar pacientes e usa ruby para manter um registro de tudo. Seu primeiro paciente, Why, responde dessa maneira:

Dr J: Vermelho
Why: Ruby
Dr J: Transporte
Why: Rails
Dr J: Pedaçudo
Why: Bacon

Dr Jones cria um hash para armazenar seus dados:

why = {"vermelho" => "ruby", "transporte" => "rails", "pedaçudo" => "bacon"}

O segundo paciente do Dr Jones, Bob, entrega os resultados de sua pesquisa:

bob = {"vermelho" => "pintar", "transporte" => "carro", "pedaçudo" => "gordo"}

O problema

Depois de executar várias centenas de testes de associações de palavras, Dr. Jones começa a perceber que ele está estourando a memória! Num palpite, Jones executa testes no irb:

> paciente1 = {"ruby" => "vermelho"}
> paciente2 = {"ruby" => "programação"}
> paciente1.each_key {|key| puts key.object_id.to_s}
211006
> paciente2.each_key {|key| puts key.object_id.to_s}
203536


Bem, vendo isso, cada vez que ele cria um hash para armazenar sua informação, o ruby cria um novo objeto string em uma diferente localização na memória para cada key. Felizmente, existe uma alternativa.

Símbolo ao resgate!

Diferente de strings, símbolos com um mesmo nome são inicializados e existem na memória uma única vez durante a sessão do ruby. Símbolos são obviamente mais úteis quando você reutiliza strings para representar alguma coisa. Reproduzindo o teste do Dr Jones, nós poderemos ver:

> paciente1 = { :ruby => "vermelho" }
> paciente2 = { :ruby => "programação" }
> paciente1.each_key {|key| puts key.object_id.to_s}
3918094
> paciente2.each_key {|key| puts key.object_id.to_s}
3918094


Usando símbolos, nós utilizamos um único endereço de memória para representar a palavra ruby em nosso teste de associação de palavras. Ao longo do tempo, isso pode poupar bastante espaço.

Mas eu não sou um psiquiatra, quando mais eu vou querer usar símbolos?

Símbolos são úteis qualquer hora que você estiver reutilizando uma palavra várias e várias vezes para representar algo, seja ele uma chave em um hash ou o método que você está usando em uma http query.
Um exemplo, do último e melhor e melhor framework web Ruby on Rails, é seu uso de símbolos em rotas e links. O Rails define actions dentre os controllers para fazer coisas no framework antes de renderizar uma página web, então um link em Rails pode se parecer com algo assim:

link_to("Ver Artigo", :controller => "articles", :action => "show",

Quando uma aplicação pode ter centenas de links, ou ao menos centenas de referências para diferentes actions e controllers, é significantemente mais eficiente utilizar símbolos do que strings.

Finalmente, é importante comentar que a utilidade dos símbolos não é restrita às keys em hashes. Por exemplo, se alguém for escrever um cliente ou servidor http ele pode utilizar get e post diversas vezes dentro da aplicação, e pode ser apropriado usar:

do_this if query == :get

...
send_message_to_server(:post,filename)


Qualquer hora que uma string possa ser usada várias e várias vezes, um símbolo pode ser um bom candidato para substituição.

Sábado, 13 de Junho de 2009

Suporte a multitouch nativo no Linux

Pessoal, esse é um post off-topic, mas eu achei muito interessante esse vídeo que mostra uma nova característica no Kernel do Linux, o suporte a multitouch.



Abraços!