Django Migrations vs Unit Tests

A partir da versão 1.7, o Django conta com um sistema de migrations próprio. Com elas é possível controlar as versões do seu banco de dados, podendo voltar para qualquer versão do Schema que for necessário.

Um sistema como estes significa, também, mais trabalho para o Django fazer. Em um ambiente de produção, não há diferenças perceptíveis — As migrations foram feitas para serem executadas em momentos pontuais — Porém, dependendo da sua configuração, é necessário criar o banco de dados no início da execução e destruir ao final dos testes unitários. Se este é o seu caso, é bem possível que você esteja vendo seus testes ficarem mais lentos à medida que novas migrations são criadas.

Desativando as migrations

Ao que parece, este problema é bem comum. Tanto que há algumas soluções.  Sendo que a mais simples consiste em adicionar o seguinte ao seu arquivo settings.py:

class DisableMigrations(object):
    def __contains__(self, item):
        return True

    def __getitem__(self, item):
        return "notmigrations"

MIGRATION_MODULES = DisableMigrations()

Pode até ficar mais simples que isso, pois esta solução já foi integrada como plugin tanto para o manage.py test quanto para o py.test.

Se você migrou recentemente para o Django 1.7, é bem provável que isto acelere seu desenvolvimento. Os meus testes unitários que demoravam em média 120 segundos, parassaram a demorar apenas 10!

Nunca mais faça um commit com o composer.json inválido

Captura de Tela 2014-01-03 às 09.33.48Se você usa git, gerencia suas dependências com composer e não quer correr o risco de quebrar o build do seu projeto por algo bobo — como esquecer uma vírgula — abra o terminal, navegue até a pasta do seu projeto e execute:

echo "php composer.phar validate" >> .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

O que isso faz?

A primeira linha cria um hook (ou adiciona ao final de um hook existente) no seu repositório git que será executado antes de qualquer commit (por isso pre-commit), neste hook haverá o comando: “php composer.phar validate”; Este comando valida seu composer.json e dá erro (exit code 1) quando há algo errado. A segunda linha torna o hook executável (se não for executável, não funciona).

Espero que ajude.

Criando Playbooks com Ansible

The_playbookA parte chata de quando se reinstala o sistema operacional ou cria uma máquina virtual é instalar e configurar tudo de novo. Cada programa, cada truque que foi feito no computador anterior terá que ser refeito no novo. Claro que, no caso da máquina virtual, você pode pode usar imagens de seu estado. Ainda assim, em algum momento você terá que repetir seu trabalho.

Para resolver este problema, coloquei minha preguiça de lado e comecei a criar meus próprios playbooks do ansible. Escolhi o ansible porque, ao contrário do puppet e chef, você consegue executá-lo em um computador remoto sem um serviço dedicado rodando no destino, tudo via SSH.

O meu playbook, atualmente, serve para configurar os meus computadores de trabalho (casa e escritório). Ainda estou aprendendo a usar o ansible e não sigo “à risca” as melhores práticas, mas tento manter tudo o mais simples possível — O que não é difícil, visto que é tão simples quanto editar um arquivo YAML. Meu playbook não contempla todos os softwares que eu uso, mas deve chegar lá em algum momento no futuro.

Saber que minha configuração não se perderá com uma simples troca de computador tem me estimulado a fazer uma série de micro-otimizações. Até agora estou gostando muito dos resultados e me divertindo com o processo. Se você cansou de ficar se repetido na configuração dos seus computadores (desktops e principalmente servidores), recomendo muito que comece a escrever seus próprios playbooks.

Vim: Por Onde Começar?

Já falei um pouco sobre como eu comecei com vim neste blog, mas isso foi no longínquo ano de 2009! É natural que nesse tempo muito tenha mudado. Como sou um fanboy grande entusiasta do vim, me perguntam com frequência por onde começar. Este post tem o objetivo reunir boas referências para iniciantes, de forma que eu sempre possa passar o link para ele quando alguém me perguntar — Talvez eu até venha a adicionar novas referências aqui com o tempo.

Leia

Da última vez, recomendei o vimtutor para leitura. Apesar de bem completo, aprender direto no terminal pode intimidar alguns. Sendo assim, ultimamente tenho recomendado o post Learn Vim Progressively. Não é um post muito longo, e já inclui alguns comandos mais avançados.

Assista

Em 2010 o Fabio Akita decidiu fazer alguns screencasts e vender através do seu blog. Dentre eles, um sobre o vim. Posteriormente ele decidiu liberar todos eles gratuitamente:

Screencast: Começando com Vim

Fui um dos que compraram e fiquei bem satisfeito com o conteúdo na época. Como é difícil convencer alguém que está começando a já sair desembolsando algum dinheiro, achei ótimo que o video se tornou gratuito.

Jogue

Direto dos comentários do Learn Vim Progressively, descobri o jogo Vim Adventures. Ao que parece ele não vai te ensinar a usar o editor, mas vai ajudar a se familiarizar com os movimentos de tecla, comandos e modos.

Você também pode encontrar algumas configurações muito bem vindas no plugin vim-sensible, que tenta reunir as configurações que deveriam ser padrão. Lembre-se também que você pode usar o comando help em qualquer comando (:help <comando>) é um bom tira-dúvidas para todas as horas.

Veja também a configuração do vim que eu uso no dia-a-dia. Logo de cara é uma lista de plugins muito úteis.

Se ainda estiver complicado, lembre-se do comando:

:help!

Effective Programming: More Than Writing Code

1559_thumbComo programador que sou, dedico boa parte do meu tempo escrevendo para um computador e tentando me aperfeiçoar nisto. No entanto, isto não é tudo que se espera de mim como profissional. Grande parte do meu trabalho não está relacionada ao código que escrevo. Por mais que me tornar um escritor de código melhor seja essencial para o meu trabalho, existem outros pontos tão essenciais quanto (ou mais) e é disto que Effective Programming: More Than Writing Code se trata.

Este ebook é um apanhado de posts do famoso blog Coding Horror de Jeff Atwood  — um dos meus blogs favoritos, devo admitir — é comercializado pela hyperink por justos US$ 2,99, e você ainda pode enviar para os amigos de graça no momento da compra! Claro que tudo isso é possível porque a “editora” sabe que você já tem esse conteúdo gratuitamente, mas acredite, só o trabalho de separar e organizar estes posts já vale mais do que o simbólico preço.

O Coding Horror é um blog publicado desde sempre 2004 e embora eu até já conhecesse alguns dos posts no livro, a maioria foi inédita para mim. Eu recomendo muito a leitura, mas se você não estiver planejando comprar, considero os seguintes posts altamente interessantes:

I Repeat: Do Not Listen to Your Users: Muito perceptível no dia-a-dia. Ouvir cegamente seu usuário chega a ser frustrante, mas isto não significa que devemos ignorá-lo.

Listen to Your Community, But Don’t Let Them Tell You What to Do: Sobre como receber o feedback da comunidade ao redor do seu software ou projeto.

Low-Fi Usability Testing: “You don’t know if your application truly works until you’ve performed usability tests on it with actual users.”.

I Pity The Fool Who Doesn’t Write Unit Tests: “Whenever you are tempted to type something into a print statement or a debugger expression, write it as a test instead.”

The Ultimate Unit Test Failure: Seu usuário não liga muito para sua cobertura de testes de 100%.

Meetings: Where Work Goes to Die: Me fez fazer a minha “lição de casa” antes das reuniões do trabalho.

Sharpening the Saw: “Sharpening the saw is shorthand for anything you do that isn’t programming, necessarily, but (theoretically) makes you a better programmer.”

Como o próprio título do livro já diz, eu aprendi mais do que escrever um código melhor.

Introdução à Arquitetura e Design de Software

Em virtude dos projetos em que eu estava envolvido, decidi aprender um pouco mais sobre Java. É comum no meu dia-a-dia escrever algumas linhas de código nessa linguagem — normalmente acompanhado por alguém com mais experiência do que eu. Foi exatamente um desses programadores mais experientes, o Thiago Caiubi, que me indicou o livro “Introdução à Arquitetura e Design de Software — Uma visão sobre a Plataforma Java”. Excelente indicação, por sinal.

Me lembro de ter ouvido um colega de faculdade dizer que uma das partes de se aprender uma nova linguagem é entrar no “eco-sistema” dela. Um grande acerto do livro é começar exatamente por este ponto. O capítulo 1 — A plataforma java — nos introduz ao glossário da linguagem, nos explica como a linguagem tem evoluído e mostra como funciona o sistema de especificações com a tal “burocracia”  em se incluir uma funcionalidade na plataforma. Embora seja um livro focado em uma tecnologia, fiquei impressionado com o grau de imparcialidade apresentado. Foi muito bom ver que nenhuma das ferramentas é apresentada como “a solução definitiva para o problema X” (nem mesmo o próprio Java). Os autores se esforçaram para apresentar pontos a favor e contra cada tecnologia, assim como possíveis casos de uso.

O livro se faz valer também por suas referências. Pausei a leitura várias vezes para poder lê-las e refletir com calma. Essas pausas, no entanto, se tornaram um pouco incômodas com o tempo. Porque as referências ficam listadas todas no final do livro (NBR 14724, ou parecido). Aliás, por que não colocá-las no rodapé da página?

Como a própria descrição já diz, o objetivo deste livro não é te ensinar a linguagem e sim te introduzir ao pensamento arquitetural, e de design, de software que utiliza a plataforma Java nos dias de hoje. Isso faz com que o livro aborde temas como frameworks, REST, conceitos de orientação a objetos, dentre outros. Ainda assim, enriquece estes tópicos mais “comuns” com a experiência dos autores — Não necessariamente recomendando algo, mas estimulando seu raciocínio.

Visto que a última vez que li um livro de Java foi em 2008 — durante a minha faculdade — este livro me ajudou a me atualizar com o desenvolvimento Java desta década e estudar conceitos de arquitetura e design. Não sei se o livro gerará tanto interesse aos que já tem mais experiência com a linguagem, mas acho bem possível que ele te leve a uma reflexão.

Pro Javascript Design Patterns

Mais um livro de JavaScript lido. Desta vez foi Pro Javascript Design Patterns de Dustin Diaz e Ross Harmes. Fiquei interessado pelo título logo de cara, não conseguia enxergar como certas convenções populares em  outras linguagens iriam se encaixar no estilo “diferente” do JS.

O livro cumpre bem seu papel de apresentar os Design Patterns de forma fácil e mostrar como é possível adaptá-los ao Javascript. Confesso que resisti bastante às concessões feitas para tornar possível a implementação de alguns conceitos, como namespaces, ainda que seja claro o potencial benéfico que têm.

Embora os exemplos sejam bem enfáticos quanto à separação de responsabilidades, o que já era esperado dado que o intuito é ensinar Design Patterns, fiquei incomodado com o estilo do código-fonte. Boa parte das funções e métodos são bem extensos e sem boa legibilidade. Algumas vezes eu simplesmente desisti de entender o que cada linha de código fazia e deduzi pelo nome do método. Provavelmente, não há algum problema de design neles, mas o jargão do Uncle Bob ecoou na minha cabeça algumas vezes.

Se você já não gosta de JavaScript, por qualquer motivo, provavelmente este livro não vai mudar a sua opinião. Mas, se você já conhece a liguagem, está acostumado a desenvolver tudo o que precisa sem muita orientação a objetos e separação de reponsabilidades, e já percebeu que isto não é suficiente, este livro pode te ajudar muito.