Programador ou Desenvolvedor?
A diferença entre um programador e um desenvolvedor de software é muito grande, mas quase sempre ignorada.
Presa à um paradigma completamente equivocado, a “indústria” do software busca imitar a indústria “convencional”, baseada no trabalho manual, seguindo muitas das idéias de Taylor e Adam Smith.
Essas idéias e princípios funcionam muito bem no chamado trabalho manual, que, em geral, atinge sua máxima eficiência quando organizado na forma de linha de montagem, com alta especialização e divisão de tarefas. Mais uma vez: desenvolvimento de software não funciona como linha de montagem.
Auto-escaping de HTML em sua aplicação Rails
Um ataque muito comum contra aplicações Web ultimamente é o cross-site scripting (XSS).
Uma das formas de executar esse ataque é aproveitar campos que aceitam a entrada de HTML para inserir links para código malicioso, geralmente em JavaScript ou VBScript. Desta forma, o script de um domínio não confiável é executado no contexto de um site confiável.
Luke Francl, do Rail Spikes, desenvolveu o plugin xss_terminate, baseado no plugin acts_as_sanitized. Este plugin trata todos os campos dos modelos de sua aplicação Rails para evitar a inserção de código malicioso. Desta forma, o uso do método h() em suas views torna-se desnecessário. O plugin é configurável, permitindo que o desenvolvedor defina campos que não devem ser tratados.
No mesmo post, Luke ainda fala sobre o uso de Erubis para aumentar a segurança e aponta outras alternativas.
Code smells
Você sabe o que é um “code smell“? Bem, mesmo sem saber a definição, são muito grandes as chances de que você já tenha se deparado com um.
Code Smell é um sintoma de que algo no código pode estar errado. Geralmente indica a necessidade de um refactoring ou de alteração estrutural da aplicação.
Alguns code smells muito comuns são:
- Lazy class - uma classe “burra”, ou seja, que faz muito pouco (os famosos BOs, TOs e etc, comuns no mundo Java);
- Feature envy - uma classe que utiliza excessivamente os serviços de outra;
- Contrived complexity - uso forçado de design patterns complexos onde não são necessários;
- Inappropriate intimacy - uma classe que depende de detalhes de implementação de outra.
E você, o que já viu por aí?
Veja também:
Code smells taxonomy
Refactoring.com
Rubylearning: mais uma turma em Março
Satish Talim me informou hoje que a quarta turma para seu curso online gratuito de Ruby terá início em 1º de Março.
A última turma teve 2190 participantes, dos quais 35% eram brasileiros.
Se tiver interesse, faça sua inscrição aqui.
Erro ao instalar gem: undefined method `[]=’ for Gem::ConfigFile
Há alguns meses me deparei com este erro quando configurava o ambiente de desenvolvimento de Ruby on Rails no Ubuntu Linux em meu computador. Hoje, ao fazer o mesmo no computador que uso no trabalho, ocorreu a mesma coisa.
Em ambos os casos estava utilizando o pacote Ruby instalado via Synaptic (sudo apt-get ruby-full e sudo apt-get rubygems).
No meu computador pessoal, a solução foi editar o arquivo config_file.rb (localizado no diretório onde está instalado o rubygems, no meu caso é /usr/local/lib/site_ruby/1.8/rubygems) e adicionar o seguinte método:
def []=(key, value) @hash[key.to_s]=value end
(encontrei essa solução aqui: Gems through the proxy (or the «undefined method `[]=’» error) )
Já no computador da empresa em que trabalho, apaguei todos os pacotes relacionados ao Ruby e instalei tudo (ruby e rubygems) manualmente a partir dos fontes.
Bom, que o Google indexe essa página e essa solução não fique tão escondida. Se você souber alguma outra solução, comente.
Entendendo sistemas distribuídos de controle de versão (Git, Mercurial etc)

Você ouviu falar de Git e DVCS (Distributed Version Control System) mas ainda não entendeu bem o conceito? Bom, você não está sozinho.
Deixo aqui duas boas referências para aprender mais sobre o assunto:
- Intro to Distributed Version Control (Illustrated)
- Why Distributed Version Control Matters to You, Today
Boa leitura.
Thin 0.5.3 “Purple Yogurt”
Na última sexta-feira, Marc-André Cournoyer anunciou o release da versão 0.5.3 do servidor Thin (codename Purple Yogurt).
Contando com mais dois desenvolvedores na equipe (Kevin Williams e James Golick), o Thin agora também é distribuído como gem pré-compilado para Windows.
EDIT: já saiu a versão 0.5.4.
Leia mais:
http://glauche.de/2008/01/14/how-many-thin-server-instances-are-best/
http://www.deze9.com/jp/blog/post?p=current-uptime-of-the-thin-server…
http://blog.rayngwf.com/2008/01/thin-ruby-web-server-that-is-really.html
http://glauche.de/2008/01/12/thin-nginx-with-rails/
Tradução - Produtividade do desenvolvedor: Média vs. Mediana
Neal Ford, da ThoughtWorks, foi muito gentil ao permitir que eu traduzisse seu artigo “Developer Productivity Mean vs. Median“.
O artigo fala sobre algumas falsas crenças da “indústria” do software: linguagens restritivas, economia na forma de contratação de desenvolvedores medíocres e tentativa de encurtamento de prazos de entrega através da adição de mais pessoas aos projetos, entre outras.
Boa leitura!
Sun anuncia compra da MySQL AB
A Sun e a MySQL AB anunciaram um acordo de compra no valor de 1 bilhão de dólares.
Creio que isso ajudará na adoção do MySQL, pois muita gente só adere a novas tecnologias ou produtos quando há “grandes nomes” investindo.
E você, o que acha? É bom ou ruim?
Acertaram outra vez?
A Apple acaba de lançar o MacBook Air. Provando mais uma vez ser uma empresa com opinião, redefiniu muitos conceitos sobre equipamentos ultra-finos.
Enquanto outras empresas sacrificam usabilidade (telas muito pequenas, mini-teclados) e poder de hardware em busca de manter padrões de notebooks “normais” (diversas entradas, slots para cartões, drives de DVD), a Apple aposta na “era Wi-Fi”, dispensando conectores (o MacBook Air possui uma entrada USB 2.0, uma entrada para headphone e uma mini-DVI) e o drive óptico, mantendo a tela de 13.3 polegadas e um teclado completo.
Será que eles acertaram outra vez?