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.

Professional JavaScript for Web Developers, 2nd Edition

Professional JavaScript for Web Developers - 2nd EditionJavascript é uma linguagem que tem se tornado cada dia mais importante. Ela percorreu um grande caminho desde os longínquos tempos em que servia apenas para validar formulários e impressionar os amigos, passando pela revolução do AJAX e interfaces ricas, até chegar nos dias de hoje com novas possibilidades do HTML5 e Node.js. Diante de todo este movimento, eu precisava aprofundar meus conhecimentos na linguagem.

Muitos são os livros que abordam o Javascript, mas o Professional Javascript for Web Developers me pareceu ser aquilo que eu precisava. Em seu índice, encontrei desde conceitos básicos, como variáveis e escopo, até outros mais novos, como Client-Side Storage.

Durante a leitura, me surpreendi ao descobrir pequenas armadilhas e pormenores interessantes mesmo em capítulos onde eu não esperava novidades. Pude entender conceitos como: O que é ECMAScript, DOM Levels, Como evitar alguns memory leaks, melhorias de performance, boas práticas, etc.

O autor, Nicolas C. Zakas, trabalhou por bastante tempo no Yahoo! como front-end engineer e contribuiu bastante para o desenvolvimento da YUI. Recentemente, ele ajudou a criar o CSSLint, uma ferramenta de qualidade de código CSS aos moldes do JSLint. Uma boa parte do conteúdo do livro está disponível online nos artigos de seu blog, vale a pena conferir.

De fato, a leitura deste livro me ajudou bastante a conseguir entender a linguagem como um todo e desenvolver boas práticas. Os dois últimos capítulos do livro (Upcoming APIs e The Evolution of JavaScript) tentam adiantar o que estava por vir, aumentando sua vida útil. Naturalmente, dado a evolução a passos largos do HTML5, a implementação de algumas features tomaram hoje um caminho diferente ou perderam parte de sua relevância visto que o livro é de 2009.

Uma atualização com as APIs e funcionalidades mais recentes seria bem vinda. Ainda assim, não perca a oportunidade de ler este livro se você, como eu, quer se aprofundar mais nas “entranhas” do JavaScript.