I have one problem…

– I have one problem.
– Let’s use XML and Perl
– Now I have three problems!

Let’s use Java instead!
Now you have a ProblemFactory problemFactory = new ProblemFactory(ProblemFactory.PROBLEM_FACTORY);
Let’s use C instead!
Now I am rewriting the string library! Now I am rewriting malloc()!
Let’s use Erlang.
Now I have no idea what I am doing.
Let’s use LISP.
Now I feel superior, but it takes 200 times to run.
Let’s use FORTRAN!
And now every computer scientist hates me
Let’s use Python.
Now I just “import work” and go home.
“Knock, knock.”
“Who’s there?”

very long pause….

“Java.”
If you put a million monkeys at a million keyboards, one of them will eventually write a Java program.
The rest of them will write Perl programs.
A Cobol programmer made so much money doing Y2K remediation that he was able to have himself cryogenically frozen when he died. One day in the future, he was unexpectedly resurrected.
When he asked why he was unfrozen, he was told:
“It’s the year 9999 – and you know Cobol”

Q: How many prolog programmers does it take to change a lightbulb?
A: Yes.

Reading man pages with Preview

Reading the man pages in the terminal are really boring, specially using up, down, space, “/” keys.

Using Mac Os X is possible to read the man pages in Preview.

Just put this code into yours .bash_profile / .profile file and be happy :)

pman() { man -t “$@” | open -f -a Preview; }

after restarting the bash, just use the pman command rather the usual man.

Just explaining:

the -t option gets the content of the man page and puts it in the stdout, where will be read by the open and opened in the Preview.

Suporte para Sequências de RNA no Genoogle.

Enquanto muitos estão na praia, bebendo, discutindo sobre o hexa campeonato do Flamengo, estou implementando o suporte a sequências de RNA no Genoogle.

A princípio parecia simples,definir um novo alfabeto, tirando o T do DNA e adicionando o U. Porém estou fazendo um trabalho bem mais amplo. Agora que o Genoogle está começando a ficar maduro, estou organizando melhor a estrutura de classes e os Junits. Como exemplo da mudança, o “diff” está em mais de 3.700 linhas de código. Acredito que esteja valendo a pena. Ano que vem, no início quero fazer um anúncio mais formal do Genoogle nas principais listas de discussão de bioinformática brasileiras e estrangeiras.

Fora o trabalho na estrutura interna do Genoogle, eu gostaria de trabalhar na interface Web dele. Estou meio sem tempo, porém se tu tiveres vontade de trabalhar com GWT (http://code.google.com/webtoolkit/), um pouco, bem pouco de SQL e muito de Java, contate me para conversamos!

Genoogle wants YOU!

Então, acabei de liberar uma versão nova do Genoogle.
Esta versão junto com a anterior é um conjunto de melhorias e correções que eu queria ter feito, como utilizar as variáveis de ambiente para algumas configurações e melhorias na exibição dos resultados. Percebo que uma das partes mais chatas é a liberação de uma nova versão. Mesmo com um checklist, é chatinho escrever changelist, pegar versão, gerar binarios, copiar para outro repositorio, verificar se tudo deu certo e anunciar. A parte de programar, desenvolver, é relativamente fácil, o difícil é liberar e fazer com que as pessoas usem.

Então, por isto novamente estou fazendo a propaganda aqui.
Se você gosta de genética, programação, desenvolvimento, algoritmos, procura um projeto interessante para se envolver, visite a página do Genoogle, baixe os binários, os fontes, inscreva-se no grupo, e participe!

O Genoogle é um concorrente do NCBI-BLAST, um dos softwares mais utilizados e citados na área de bioinformática, e tenho certeza que o Genoogleé capaz de abocanhar uma fatia destes usuários!

Eu ainda não fiz um anuncio em grandes listas de discussão, pois ainda quero mais usuários, encontrar e corrigir mais bugs e ter uma versão mais estável. Então, o Genoogle precisa de VOCÊ!

Eclipse no ubuntu 9.10

Depois de eu ter atualizado meu ubuntu para a versão 9.10,
comecei a perceber alguns comportamentos estranhos no Eclipse:
botões não funcionavam com clique do mouse e “restos” das janelinha amarelas.
Primeiramente tentei a solução mais simples: rm -rf eclipse/ , fiz o download, e usei uma nova versão. Não funcionou. :-(

Pesquisando um pouco, descobri que estes comportamentos anormais são por causa de algumas modificações do GTK
e que o Swt não corrigiu o modo de acessar esta biblioteca. Felizmente a solução do problema é bem simples:
antes de inciar o Eclipse, execute este comando:

export GDK_NATIVE_WINDOWS=true

e execute o Eclipse normalmente. Tudo irá funcionar bem!

No meu caso, que inicio o Eclipse por um ícone no desktop, eu criei um arquivo “eclipse.sh” com:

export GDK_NATIVE_WINDOWS=true
~/java/eclipse/eclipse

(onde ~/java/eclipse é onde está o Eclipse), dei permissão de execução para este script: chmod +x eclipse.sh
e no íncone, mudei o comando para executar o eclipse.sh. Simples e funcionou!
Alias, vi que este bug será corrigido na versão 3.5.2.

Windows 7 Locks

No artigo da OsNews : http://www.osnews.com/story/22501/Microsoft_Kernel_Engineers_Talk_About_Windows_7_s_Kernel , engenheiros do Microsoft falaram sobre o Kernel do Windows 7 e sobre as melhorias nele e principalmente que pela primeira vez na história da empresa, um novo sistema operacional consome menos memória que seu antecessor.
Praticamente o artigo inteiro comenta sobre locks. É interessante notar que até a versão anterior (Vista) existiam locks globais (!!) do sistema operacional e estes locks foram substituídos por “fine-grained-locks”. Isto me lembra um pouco do Big Lock do Linux até a versão 2.2 e que foi substituindo por locks menores no 2.4.

O artigo em si é muito interessante por dois motivos: como modificações no kernel podem ser feitas, beneficiando o sistema como um todo sem haver quebra de compatibilidade, principalmente, sem modificar as interfaces do Kernel.
Também, a grande diferença que se faz em utilizar locks localizados do que no sistema como o todo. Isto até para desenvolvedores de aplicativos é interessante. Por exemplo, no acesso a um vetor de 64 ou 128 megabytes, ao invés de sincronizar o acesso a este vetor, sincronizar o acesso a entradas ou aos conjuntos de entradas deste vetor.

Recomendo a leitura, principalmente por ser um ótimo “estudo de caso” sobre locks.