Programar é criar Uma idéia de sua cabeça vira um "ser vivo" que habita o computador e se relaciona com outros programas e seres humanos.

Programar é um desafio Para concretizar idéias, vários problemas e obstáculos aparecem e é preciso fazer algoritmos para resolvê-los.

Programar é se dedicar Mesmo depois de "pronto" o programa, sempre há algo a melhorar, bugs para corrigir, versões para lançar.

Programar é um prazer É um brinquedo que não enjoa. É sempre diferente, é sempre uma aventura.

Esta página reúne todos os programas que fiz. É um grande índice descritivo, com informações gerais sobre cada programa.

Todos estes programas são gratuitos e possuem o código fonte aberto (GPL, Open Source, etc). Você pode baixar, usar e modificar sem medo.

Primeiro a historinha

Sou um programador autodidata, não tendo estudado formalmente nessa área. Tanto no curso técnico (Eletrônica) quanto na faculdade (Processamento de Dados), não cursei matérias sobre compiladores, algoritmos, autômatos e outros bichinhos do "mundo da programação" que qualquer aluno de bacharelado estuda. Também nunca li livros sobre esses assuntos, livros técnicos são muito chatos.

Parênteses: Os únicos livros técnicos que já li foram "Mastering Regular Expressions", "Unix Text Processing" e o "The Art of Unix Programming".

Aprendi na prática, pesquisando na Internet, participando de listas de discussão e olhando o código de outros programas. Poder "olhar o código" foi essencial para o meu aprendizado, por isso todos os programas que faço têm o código fonte aberto, para que qualquer um possa ver e também aprender.

Gosto de linguagens interpretadas e de fazer programas alto-nível, sem precisar se preocupar com as entranhas da máquina: bits, bytes e essas malices. Para mim programar é criar algoritmos e estruturas de dados, essa é a parte divertida. Se for para ficar massageando o hardware cuidando de ponteiros de memória, coletor de lixo e shift de bits, estou fora.

Meu negócio é manipular texto. Me coloque para fazer um conversor, um tradutor, um gerador de relatório ou coisa parecida e me veja feliz. Os programas que fiz são retratos dessa preferência. Nada de drivers, cálculos, compiladores e essas coisas chatas.

O primeiro programa que fiz foi um joguinho de labirinto para MS-DOS em 1995. Desde então aprendi outras linguagens (Bash, SQL, SED, PHP, Python, AppleScript, nesta ordem) e fiz outros programas, tanto em casa quanto no trabalho (virei programador).

Nas horas vagas (cada vez mais escassas!), continuo atualizando e melhorando os programas mais importantes, aqueles que possuem página na Internet, lançamentos freqüentes de versões novas e comunidade de usuários. De vez em quando também aparece algum programa novo.

O pagamento? Fico feliz e satisfeito quando alguém me manda um e-mail dizendo "Teu programa foi útil para mim" ou "Fiz um programa inspirado no seu". Considero que dar a minha contribuição à cadeia de uso-aprendizado-produção de software é uma boa maneira de investir parte de meu tempo livre.

Confira no Changelog Nerd o ritmo intenso de lançamento de versões novas dos programas.

Filhos mimados

Estes são os queridinhos, os programas que eu gosto de cuidar e melhorar. Eles são completos, com documentação, versionamento, página na Internet, comunidade de usuários e toda a parafernália que acompanha um programa grande.

Alguns desses programas já deram passos importantes, entre eles:

MoneyLog

Acompanhe suas finanças de maneira simples e prática. Em um único arquivo ficam os seus lançamentos (quanto ganhou e gastou) e o gerador de extratos. É uma página de Internet e um programa ao mesmo tempo. Baixe a página, adicione dados novos utilizando um editor de textos comum e veja o resultado no navegador. Tudo localmente, sem precisar estar conectado na Internet. Simples, rápido, leve, personalizável, tudo-em-um. Possui suporte a tags, filtro ativo (funciona enquanto digita, usa expressões regulares), colunas ordenáveis com um clique, saldo mensal, saldo acumulado, lançamentos futuros, visão dos meses recentes, visão geral (resumo). Veja mais detalhes no site do Moneylog.

EmoMemory

O EmoMemory é um jogo que mexe com a memória e com o coração. Ao invés de ficar memorizando símbolos, desenhos ou cartas, você se concentra nas pessoas que ama. Sua família, seus amigos, colegas e parceiros. Além da memória visual, esse jogo exercita a sua Memória Emocional, levando em conta resultados de estudos que comprovam que memórias boas (eventos prazerosos e pessoas próximas) possuem mais detalhes contextuais e são lembradas mais facilmente. Você sabia que emoções afetam sua memória? Foi lançado como shareware, mas ficou gratuito (e livre) em 2011.

txt2tags

É um conversor de arquivos texto para vários formatos: HTML, XHTML, Sgml, LaTeX, Lout, Man Page, Wikipedia, Google Code Wiki, DokuWiki, MoinMoin, MagicPoint (mgp) e Adobe PageMaker, entre outros. Você escreve seu texto normalmente e coloca marcações mínimas, como **negrito** e //itálico//, e o programa o converte para o formato desejado. Este programa eu utilizo para tudo: gerar as páginas do meu site (como esta que você está lendo), gerar os artigos e documentos que escrevo, slides de palestras, site da banda, site dos outros programas... É também utilizado por diversos sites nacionais e gringos (já são mais de 100, veja a lista completa) e é o formato original do meu Guia de Expressões Regulares. Também tem listas de discussão em português e inglês, uma grande comunidade de usuários, tradução para várias línguas e vasta documentação. Ufa! Esse já virou um monstro.

RAC

Uma ferramenta de extração de texto, feita em parceria com meu amigo Thobias. Ele programa (sou 100% leigo em C), eu faço a test-suite, site e documentação e juntos definimos as especificações. A idéia é ter uma ferramenta simples e flexível de se usar na tarefa de extrair pedaços de textos, podendo dizer coisas como "da 5ª até a antenúltima linha", ou "da terceira ocorrência de BLA até a penúltima ocorrência de BLI". Este programa ainda é um bebê, mas já tem implementada mais da metade da especificação e tem agradado os usuários. Seu site e documentação estão escritos em linguagem didática, em português, para que o usuário possa experimentá-lo facilmente, sem medo. Nossa intenção é dominar o mundo, acreditamos estar na trilha certa :)

Funções ZZ

Coletânea de mini-programas com funcionalidades diversas. São mais de 120 funções para o shell Bash que fazem tarefas como arrumar nomes de arquivos, calcular horas e datas, conversão entre medidas, validação de CPF/CNPJ, gerador de senha, entre outras. Várias funções fazem pesquisa na Internet, extraindo e formatando dados de vários sites, entre eles: dicionários, tradutores, notícias, loteria, Detran, Google, cotação de moedas, previsão do tempo... Enfim, um grande canivete suíço. É codificado à quatro mãos (eu e o amigo Thobias) e é constantemente atualizado, pois os sites consultados sempre mudam de lugar e formato. Interfaces ICQ e Windows foram feitas por usuários dedicados. Por falar em usuários, eles são muitos. E estão sempre nos ajudando a manter tudo funcionando, participando ativamente na lista de discussão do programa.

AdiumBook

É um programa para Mac OS X que serve para manter sincronizados os contatos da Agenda e do Adium (cliente ICQ/MSN/*). O programa foi feito no Xcode (IDE do Mac), a interface Cocoa foi feita no Interface Builder e o código é AppleScript puro. É meu primeiro programa gráfico, com botões, menus, pesquisa, apelo visual e tratamento de eventos. Já tem uma boa base de usuários e foi destaque no site do próprio Adium.

txt2regex

É um assistente (programa interativo) para se fazer expressões regulares em vários programas conhecidos. Apenas navegando entre menus (no modo texto) e escolhendo opções você vai construindo sua expressão. O programa já se tornou referência, faz parte de várias distribuições de Linux/Unix (Conectiva, Debian, Mandrake, FreeBSD, ...) e já foi matéria em revistas internacionais (França, Alemanha, Japão). Está traduzido para 10 idiomas e entende as expressões de mais de 20 programas. Um detalhe interessante é que seu código é escrito inteiramente com os comandos internos do shell Bash, não usando nenhum outro comando externo do sistema, como sed, cut, e outros.

sedsed

É um depurador (debugger) para o programa SED. Um salva-vidas. Com ele você pode "enxergar" o conteúdo dos registradores internos (buffers) do SED enquanto os comandos são executados, facilitando o entendimento de seu funcionamento. A grande vantagem desse depurador é que ele gera um script em SED! Então você depura seu script usando o próprio SED do sistema. Além disso ele ainda faz outras coisinhas legais como alinhar (indent) o script e convertê-lo para HTML, com a sintaxe colorida, links e tudo mais. Com ele é possível ver como funciona o inacreditável dc.sed.

SedSokoban

Isso mesmo, o lendário jogo de empurrar caixas, Sokoban, inteiramente escrito em SED :) O jogo está bem completo, com 90 níveis, cores, comandos, detecção de vitória e movimentação do personagem usando as setinhas! Tudo começou como uma brincadeira, mas se transformou num projeto desafiador. Foram 8 horas de programação intensa e abstrata. "Viajar na maionese" de repente ganhou um significado palpável para mim. A recompensa veio logo. No dia seguinte ao anúncio, ele se espalhou de maneira impressionante, conseguindo algo que eu nunca imaginei atingir: uma notícia no Slashdot, a central mundial dos nerds. Foi uma felicidade tremenda, meu joguinho tosco sendo visto por centenas (talvez milhares?) de pessoas do mundo todo. Foram vários comentários, muitos deles perguntando: "MAS POR QUÊ?". Porque programar é divertido, oras.

Aviso: Este não é um jogo que lhe cativará pelo seu visual ou jogabilidade, o seu único charme é ter sido escrito em SED, uma mini-linguagem de manipulação de texto. O mérito é pela tosquice. É algo como fazer uma casa com palitos de sorvete, não é pela casa em si, mas pelo desafio da construção.

Extra: Se você gostou do Sokoban, saiba que também tem o SedArkanoid :) Este é BEM chato de jogar, tendo que apertar a tecla ENTER para que a bolinha se mova. Mas está completo, com cores, explosões cadenciadas, possibilidade de segurar a bolinha no bastão e tem 3 vidas. O joguinho tem alguns segredos. O comando "#" faz você ficar invencível. Legal para segurar o ENTER e ver a bolinha andando rápido e destruindo tudo. Os níveis escondidos t1, t2, t3 e t4 são legais para demonstrar o algoritmo das explosões cadenciadas.

Filhos distantes

Estes são outros programas que fiz. Alguns são estudos, outros ferramentas pequenas e alguns são programas completos. Alguns pararam no tempo, outros eu atualizo de vez em quando, enfim, é um grande saco de gatos.

A minha primeira vez foi assim...

Ingredientes:

Resultado: