Migrado para hopefulramble.blogspot.com

Olá!

Migrei o conteúdo deste blog para o Blogger: HopefulRamble.blogspot.com – a partir de agora, postarei somente lá.

Cansei do editor do WordPress.com avacalhar a minha formatação. =/

Quem lê por RSS pode atualizar o feed para: http://hopefulramble.blogspot.com/feeds/posts/default

Falou!

P.S.: Kudos aos mantenedores do projeto: https://code.google.com/p/google-blog-converters-appengine/ — a migração foi bem menos dolorosa com a ferramenta deles.

Publicado em General | Marcado com , | Deixe um comentário

Programando Erlang – 1 de Any

UPDATE: Post migrado para: http://hopefulramble.blogspot.com/2014/04/programando-erlang-1-de-any.html

Na virada do ano, uma das minhas resoluções para 2014 foi a de que este ano aprenderia Erlang. Eu queria brincar com alguma linguagem que usasse ideias diferentes das que uso no trabalho e que me ensinasse mais do que simplesmente outro jeito de escrever os programas que já sei.

Como eu gostei de ler as ideias do Joe Armstrong no livro Coders at Work, e as descrições de Erlang na Internet me deixaram curioso, resolvi que em 2014 eu iria aprender Erlang. E assim, decidi por comprar logo o livro Programming Erlang, escrito pelo próprio Joe, e tentar aprender por ele.

Continuar lendo…

Publicado em General | Marcado com , , , , , , , | 2 Comentários

Trabalho Eficaz com Código Legado

UPDATE: Post migrado para: http://hopefulramble.blogspot.com/2014/01/trabalho-eficaz-com-codigo-legado.html

Trabalho Eficaz com Código Legado é o título em português do famoso livro sobre código legado (título original: Working Effectively with Legacy Code) escrito por Michael Feathers, um consultor muito experiente e reconhecido na comunidade Agile/XP. Acabei de ler a versão traduzida que um amigo emprestou, e a tradução está bem decente — bem diferente da última vez que li um livro técnico em português.

Capa do livro

Trabalho Eficaz com Código Legado

A definição do livro para código legado é basicamente, código sem testes. Eis a resposta do livro à pergunta: “o que os testes têm a ver com o código ser ruim?”:

Código sem testes é código ruim. Não importa o quão bem escrito, nem se ele é bonito, orientado a objetos ou se foi bem encapsulado. Com testes, podemos alterar o comportamento de nosso código de maneira rápida e verificável. Sem eles, não temos como saber se nosso código está melhorando ou piorando.

Continuar lendo…

Publicado em General | Marcado com , , , , , , , , | 2 Comentários

Você devia aprender shell-script

Se você é programador, você devia aprender shell-script. Ou pelo menos, algo parecido.

Nem que seja apenas o básico para se virar: criar o arquivo e deixar executável, ler e escrever variáveis, redirecionar entrada e saída, encadear comandos, grep e cut basicão.

Você pode ainda não saber que precisa da habilidade de fazer shell-scripts, e isso é um problema. Tem sido difícil para mim comunicar a outros programadores que conheço como a vida deles seria mais fácil se aprendessem um mínimo de shell-script. (Enquanto isso, meu irmão sargento do Exército, que nem é programador profissional, usa o shell regularmente para resolver pepinos impossíveis no trabalho dele. That’s a win!)

Os motivos que as pessoas dão para deixar de aprender shell-script são mais ou menos os mesmos: “não tenho tempo, tem outras coisas me ocupando no momento”, “isso não é da linha de comando? ninguém mais usa a linha de comando, os anos 80 já se foram há muito tempo” e “por que você se importa que eu aprenda essa linguagem velha e tosca?”.

Estou aqui para dizer que nenhum desses motivos é válido, vamos destrinchá-los um por um.

Motivo 1: não tenho tempo, tem outras coisas me ocupando no momento

É claro que você não tem tempo e está ocupado, você ainda não sabe shell-script! Se soubesse, teria resolvido uma penca de problemas antes do tempo e estaria navegando no reddit. :D

Brincadeiras à parte: você acha o tempo pra estudar. Invista um pouco de tempo agora, pra colher depois. Colhe em tempo e tranquilidade — o que antes você fazia manualmente, você agora só checa o resultado.

Motivo 2: linha de comando é coisa do passado

Bééééé, not really! Interfaces de linha de comando continuam a todo o vapor. Mesmo os cool kids brincando com as últimas encarnações de Javascript não param de criar uma porção de ferramentas para a linha de comando, uma mais interessante que a outra.

A verdade é que as interfaces de linha de comando, apesar de não serem muito intuitivas para um usuário leigo, são muito boas para nós, programadores. Ou para qualquer pessoa que queira poder resolver os próprios problemas computacionais sem depender de alguém haver encontrado o mesmo problema antes e ser generoso a ponto de resolvê-lo e compartilhar a solução.

É verdade também que a sintaxe pouco familiar de shell-script pode assustar um pouco quem está começando. Mas a questão é que a vida fica muito mais fácil depois que você destrincha o básico.

Experimente um pouco. Quem sabe, capaz de você acabar se divertindo nessa brincadeira!

Motivo 3: por que você se importa que eu aprenda essa velharia?

Hã, esse não é bem um motivo, mas é uma reação esperada. E a resposta é: porque eu só tenho a ganhar.

Veja só, se você aprender shell-script e conseguir otimizar sua vida um pouquinho, vai sobrar tempo pra você aprender ainda mais um pouquinho de shell-script e otimizar ainda mais e assim por diante, então a tendência é o mundo melhorar, ha-ha!

Piadinhas à parte, a verdade é que aos poucos você vai começar a perceber que pode resolver um monte de problemas que antes você nem se dava conta que existiam. Problemas que, apesar de você não vê-los, estavam lá atrasando sua vida, atrapalhando seu desempenho, deixando você numa espécie de indefesa aprendida.

Shell-script é uma ferramenta semelhante ao seu editor de textos ou IDE, no sentido que vai acompanhar você pelo resto da vida. Por isso vale a pena aprender, pois você terá retorno continuamente. E você estará sempre descobrindo coisas novas e o domínio do shell vai continuar consistentemente lhe recompensando, à medida que você vai aprendendo outras coisas.

Essa é a beleza de shell-scripting, a de permitir você combinar várias coisas, mesmo algumas que não tenham sido feitas para serem combinadas. É a beleza da filosofia Unix. Thanks, Mr. McIlroy, we’ve seen the light now.

Um dos melhores investimentos do meu tempo na época que estava na faculdade foi ler boa parte do Advanced Bash Scripting Guide, quando um dos rapazes do laboratório imprimiu uma cópia em folha dupla e letra miúda pra ficar fácil de carregar. É meio comprido, mas é uma excelente fonte para aprender: é recheada de exemplos, ensina boas práticas e tem várias notas sobre portabilidade.

Mas se você não curte ler em inglês, não desanime. Pode começar com a página do Aurélio, que é como comecei também, no fim das contas. Leia o livro dele.

Fuja das desculpas, e comece logo. O retorno é garantido.

Publicado em General | Marcado com , , , , | 4 Comentários

Problemas da Filosofia

Um amigo indicou-me a leitura de The Problems of Philosophy (Os Problemas da Filosofia), uma introdução a Filosofia escrita por Bertrand Russell, filósofo e historiador britânico. O livro é excelente, esclareceu várias dúvidas minhas e me fez pensar melhor sobre muitas coisas.

O texto original está disponível no Projeto Gutenberg, e existem também algumas traduções online.

Ele começa fazendo a pergunta: “Existe algum conhecimento no mundo que é tão certeiro que nenhum homem razoável poderia duvidar?” Partindo daí, ele segue mostrando por que responder essa pergunta é difícil, apontando as hipóteses que comumente assumimos como verdadeiras e quais motivos podemos ter para acreditar nelas ou não.

Demorei um pouco pra aceitar que o motivo porque acreditamos que o sol vai nascer amanhã é, basicamente, porque ele já nasceu muitas vezes antes! I mean… dude, the shit is probabilistic! Aparentemente, isso é um choque pra quase todo mundo, então não estou sozinho.

É fascinante a quantidade de coisas que assumimos — algumas com mais motivos e outras com menos — e o livro faz um bom trabalho de esmiuçar várias dessas coisas. Ele é relativamente curto, mas é denso para noviços como eu, então é meio difícil tentar resumir aqui o que se pode tirar dele.

Mas tendo lido esse livro, me sinto mais seguro sobre algumas coisas em que acredito e também mais capaz de analisar os motivos que tenho para avaliar novas informações. Quando alguém vier com historinhas tipo “não existe verdade absoluta, só existem percepções” com o intuito de me confundir sobre os fatos — como já me aconteceu antes — estarei melhor preparado para lidar com isso.

Entendo agora que não existe uma “verdade absoluta” sobre todos os assuntos, que possa ser conhecida a uma mente, mas sei que existem algumas verdades universais que podemos aplicar para raciocinar com fatos, probabilidades e com hipóteses, conforme os motivos (ou falta de motivos) que temos para acreditar nelas.

Quem tem curiosidade sobre como as coisas funcionam, como conhecimento funciona, recomendo a leitura deste livro; vale a pena. Embora outra introdução a Filosofia provavelmente sirva também.

Valeu, Flávio, pela recomendação do livro. =)

Publicado em General | Marcado com , , , , , | Deixe um comentário

VI Melhorado

Practical Vim é um livro sobre o Vim — o editor de textos xodó dos programadores. Muito bem escrito, recheado de exemplos e referências, kudos para o Drew Neil, autor dessa belezinha. Drew também faz vídeos sobre o Vim, disponíveis gratuitamente em http://vimcasts.org.

Edit Text at the Speed of Thought

Edit Text at the Speed of Thought!

Se você ainda não conhece o Vim, talvez esse livro não seja um começo adequado. É bom ter pelo menos seguido o vimtutor. Se você usa Vim há um bom tempo e está sentindo que não usa todo o potencial da ferramenta, este livro pode ser o que você precisa.

O livro foi escrito num formato de dicas, demonstrando problemas e soluções, começando com as mais simples e avançando para outras mais refinadas, com referências cruzadas entre elas. Isso torna possível você lê-lo aos poucos, não necessariamente em ordem, portanto fica uma leitura leve — como se fosse uma centena de blog posts. Mas eu li na ordem mesmo assim. :P

Como o livro é extremamente prático e recheado de exemplos, e também como já falei algumas coisas a respeito aqui antes, vou só falar os destaques que pessoalmente me foram legais.

Um dos pontos centrais do livro é que para usar bem os recursos Vim, devemos aprender os mecanismos de repetição que ele oferece. Repetir o último comando, a última mudança no texto, a última macro, a última busca — essas funcionalidades ajudam bastante no trabalho de edição, que é repetitivo por natureza, portanto vale a pena aprender bem como elas funcionam.

Aprendi a lidar com registradores (registers) no Vim, finalmente! Muitas vezes antes já senti falta e acabei fazendo a tarefa manualmente ou recorrendo a uma ou outra mutreta… Você pode aprender facilmente sobre os registers do Vim em um tutorial online, mas o livro ensina com exemplos práticos, dando a motivação certa pra você aprender cada comando. Eu já havia lido várias vezes sobre os registers online, mas só depois de ler os pulos do gato no livro que estou me sentindo confortável para usá-los. São bem úteis na hora de fazer refatorações em código, e montar ações a serem repetidas com o comando ponto.

Uma dica interessante do livro sobre macros é uma maneira de criar macros que “param automático”. A ideia é usar um movimento (motion) que falhe quando a macro não deve mais ser aplicada. Quando um movimento falha na execução de uma macro, o restante da execução é cancelado. Sabendo disso, podemos tirar proveito na hora de montar e executar a macro, o que nos permite criar macros “infinitas” que não precisam de contagem exata e pararão a execução no momento certo.

Descobri algumas coisas legais também sobre a busca do Vim. Se você faz uma busca usando o comando / e depois aciona a substituição com a busca vazia :s//texto a repor/ o Vim reusa o padrão usado na última busca. Isso é legal porque permite você refinar a busca visualmente primeiro, e então montar o comando de substituição depois. Às vezes isso é mais prático do que usar a busca e substituição pedindo confirmação com :s/texto a substituir/texto a repor/gc. Ah, e quando estiver montando expressões regulares na busca, é uma boa ideia começar as ERs com o escape \v que ativa o comportamento ”very magic” — muito mágico e muito mais fácil.

Outra dica boa sobre busca é o plugin que muda comportamento do * e # no modo visual. Por padrão, o Vim buscará a palavra sob o cursor (coerente com o comportamento no modo normal), estendendo a seleção. O plugin altera para ele buscar o texto que está selecionado, o que é bem mais útil. =)

Curti também as explicações sobre a integração do Vim com ctags, grep & ack, o funcionamento do corretor ortográfico, etc — tem uma seção do livro dedicada a esses assuntos. Ainda não coloquei muita coisa na prática, mas fiquei cheio de ideias.

Num mundo em que existem ferramentas muito inteligentes para edição de código que por vezes até escrevem o código por você, o Vim tem se mantido relevante porque permite a economia de movimentos em qualquer tipo de texto. A longo prazo, o Vim ainda é um bom investimento para quem precisa de uma edição de texto mais refinada, como muitos programadores. Não todos, porque alguns programadores infelizmente só usarão as linguagens bem suportadas pela sua IDE. Mas a trupe de teimosos da qual eu faço parte provavelmente vai se manter usando Vim até o fim — o benefício vem a longo prazo.

Enfim, compre o livro, assista os vídeos, siga o twitter do Vimcasts

Ah, e quando programar em Java, sugiro usar o Intellij IDEA – bem melhor que o Eclipse. :D

Publicado em General | Marcado com , , , , , , , , | 4 Comentários

Alguns programas úteis para usar no Ubuntu

Ok, hoje estou tirando a preguiça do traseiro para escrever sobre algo que há tempo queria fazer: uma lista de alguns programas úteis que uso no Ubuntu. A maioria deles eu demorei um pouco para descobri-los, por isso acho uma boa idéia falar deles por aqui — são aplicações bacanas que merecem uma boa propaganda.

Meld

Comparando duas pastas com o Meld

Comparando duas pastas com o Meld

Meld é uma ferramenta muito útil para programadores, mas que pode muito bem ser útil para outras pessoas também. Ele ajuda você a ver as diferenças entre versões diferentes de arquivos ou pastas, e permite copiar as coisas de um lado para outro e vice-versa.

Ele é uma mão-na-roda para o desenvolvedor na hora de fazer merges complicados, e também para verificar a situação de projetos que foram alterados por pessoas diferentes sem usar um sistema de controle de versão decente (que aliás, se a escolha estiver em aberto pra você ou caso ainda esteja usando CVS/SVN, recomendo dar uma boa olhada no Mercurialpode começar por aqui).

Para instalar no Ubuntu, digite num terminal:

sudo apt-get install meld

Dica: um jeito rápido de copiar e colar linhas de comando do navegador no terminal é dar um triplo-clique (clicar 3x) em qualquer lugar da linha pra selecioná-la inteira, e depois clicar no terminal com o botão do meio (isto é, com a rodinha do mouse) — isto já copia e cola incluindo até o Enter. É o “copiar e colar” mais tradicional do Linux, pra mim é meio surpreendente como muitos power-users desconhecem esse truque.

Shutter

Shutter é um programa que ajuda a fazer capturas da tela, aka, screenshots. A maioria das pessoas está acostumada a fazer esse tipo de coisa usando a tecla Print Screen, mas o legal do Shutter é que você pode escolher um pedaço específico da tela pra capturar, fazer alterações por cima, tudo no mesmo passo.

Yo dawg, I heard you like taking screenshots!

Yo dawg, I heard you like taking screenshots!

Ele também tem plugins para aplicar efeitos nas imagens, fazer upload para ImgUr, TwitPic, ImageShack, Dropbox, etc.

Pra instalar no Ubuntu, digite num terminal:

sudo apt-get install shutter

DBeaver

O DBeaver é uma aplicação cliente de banco de dados SQL, que suporta vários bancos e plataformas. Não é muito espetacular, mas de todas as aplicações open-source desse tipo que testei, é de longe a que tem a melhor usabilidade. Ele baixa os drivers adequados para conectar nos vários bancos diferentes, só esse recurso já é uma bela duma ajuda.

Pra instalar no Ubuntu, você pode escolher entre baixar e instalar o pacote Debian ou baixar e descompactar o zip do site http://dbeaver.jkiss.org/download – ou ainda, você também pode instalar como plugin para o Eclipse se preferir.

PlayItSlowly

O PlayItSlowly é um programa muito legal que permite reproduzir arquivos de áudio ou vídeo em velocidade e frequência diferentes do áudio/vídeo original, até já andei falando antes sobre ele por aqui.

Can you guess from which band is this song?

Can you guess from which band is this song?

Usando o PlayItSlowly você pode fazer andar mais rápido o vídeo daquela palestra lenta que dá sono e também ouvir um trecho duma música repetindo em velocidade mais lenta sem perder o tom original, pra você poder perceber melhor as notas — bem útil pra quem quer aprender a tocar alguma música. Além disso, você também pode sacanear seus amigos reproduzindo uma gravação deles conversando com a fala fina… Esse programa é muito bacana, especialmente porque eu tenho uma pequena parcela de contribuição no quão legal ele é: a última versão dele inclui algumas melhorias na interface que eu implementei. =)

Se você está usando a última versão do Ubuntu, pode instalar digitando no terminal:

sudo apt-get install playitslowly

Caso esteja usando uma versão mais antiguinha, considere baixar o pacote com a última versão do site — prometo que a interface melhora legal.

Amphetype

Amphetype é um programa pra treinar digitação com textos que você escolhe, que também gera umas estatísticas joiadas. Infelizmente, não está mais sendo mantido e acho que nunca teve um empacotamento de verdade pra Linux (só tem instalador para Windows e Mac). Mesmo assim, continua sendo bem decente — eu uso uma versão que modifiquei levemente para facilitar a deleção dos textos fontes. Um dia quem sabe eu tomo vergonha na cara e tento montar um pacote, publicar o patch, etc.

Amphetype: pratique digitação digitando e lendo seu texto preferido

Amphetype: pratique digitação digitando e lendo seu texto preferido

Como falei, não tem um empacotamento pronto pra Linux, mas você consegue rodar baixando o código-fonte, usando alguns comandos no terminal:

  1. Instale o subversion para poder baixar os fontes:
    sudo apt-get install subversion

  2. Use o subversion para baixar os fontes:
    svn checkout http://amphetype.googlecode.com/svn/trunk/ amphetype-read-only

  3. Execute o programa com o comando:
    python Amphetype.py

Pinta

O Pinta é um programa muito bem feitinho, pra editar imagens no estilo do MS Paint — uma coisa que demorou um pouquinho pra aparecer no Linux. Um recurso legal dele é o “Recolor”, que pinta apenas em cima de uma determinada cor. Funciona como aquelas canetas marca-texto, permitindo chamar atenção para textos em outras imagens como nesse exemplo:

É divertido pintar com o Pinta =)

É divertido pintar com o Pinta =)

 

Instale no Ubuntu digitando num terminal:

sudo apt-get install pinta

Programas para usar na linha de comando

Além desses programas, gostaria ainda de falar rapidão de outros programas úteis pra quem também gosta de usar a linha de comando:

  • quilt é um conjunto de shell-scripts que ajudam a lidar com diffes e patches, é uma ótima ferramenta para um desenvolvedor ter na sua caixa, já me foi útil várias vezes. Instale com:
    sudo apt-get install quilt

  • rlwrap é um programa que adiciona os recursos da linha de comando de histórico e atalhos de edição, em qualquer outro programa que leia comandos da entrada padrão (Teste com rlwrap ruby, por exemplo). Instale com:
    sudo apt-get install rlwrap

  • tree é um programa bem simples, que lista os diretórios em forma de árvore. Por algum motivo, levei anos pra descobrir que esse programa existia. Instale com:
    sudo apt-get install tree

Publicado em General | Marcado com , , , , , , , , , , , , , | 3 Comentários