15 April 2009

Horóscopo do Kao

Tão bom quanto qualquer outro.

Áries
Inesperadamente você recebeu uma herança que já estava esquecida. Receba 100.

Touro
Seus filhos já vão para a escola. Pague a primeira mensalidade. Pague 50.

Gêmeos
O seu cachorro policial tirou o 1º prêmio na exposição do Kennel Club. Receba 100.

Câncer
A geada prejudicou sua safra de café. Pague 50.

Leão
O médico lhe recomendou repouso num bom hotel da montanha. Pague 45.

Virgem
Você apostou com os parceiros desse jogo e ganhou. Receba 50 de cada um.

Libra
Você vai casar e está comprando um apartamento novo. Pague 25.

Escorpião
Você tirou o primeiro lugar no Torneio de tênis do seu clube. Parabéns! Receba 100.

Sagitário
A prefeitura mandou abrir uma nova avenida, para o que desapropriou vários prédios. Em consequência seu terreno valorizou. Receba 25.

Capricórnio
Você foi promovido a diretor de sua empresa. Receba 100.

Aquário
Você achou interessante assistir a estréia da temporada de ballet. Compre os ingressos. Pague 30.

Peixes
Seus parentes do interior vieram passar umas férias na sua casa. Pague 45

Ofiúco
Saída livre da prisão. Conserve esse cartão para quando lhe for preciso ou negocie-o em qualquer ocasião, por preço a combinar.

02 March 2009

Firefox de Volta (aka Teclado Rulz)

Já faz um tempinho que eu tinha voltado a usar Windows XP no meu laptop e por conta disso acabei tendo a oportunidade de experimentar e me apaixonar pelo Google Chrome. Depois de muito tempo usando Firefox, o Chrome me conquistou por sua simplicidade, as abas em cima (um pequeno detalhe que eu acho muito legal) e também por ser muito rápido. Tudo isso bastou até pra me convencer a abandonar minhas extensões, aliás, um dos argumentos que eu mais vi usuários do Firefox usarem para torcer o nariz para o Chrome.

Eu achei que ia demorar pra encontrar um motivo para voltar a usar o Firefox, mas finalmente voltei a usá-lo. Começou quando eu vi um link para o Bespin, um editor de código online desenvolvido pelo Mozilla Labs, na lista Python Brasil. Para testá-lo precisa do Firefox 3.0 ou do Safari 4.0, então, depois de muito tempo abri meu Firefox novamente.

Na onda de testar coisas que pareciam legais, dei uma olhada no Ubiquity. Eu já tinha ouvido falar nele tempos atrás e mais recentemente o Juan tinha me mostrado ele em ação, mas o que realmente me fez ficar com ele foi a atratividade enorme que comandos por teclado passaram a ter para mim desde que eu comecei a usar o Emacs. Agora me parece muito mais prático ter uma lista de comandos fáceis de lembrar e com autocompletar para ajudar quando a memória falha.



Lendo as referências do Ubiquity também descobri o Enso, um launcher de aplicações que segue conceitos muito parecidos com os do Ubiquity (na verdade seria mais correto afirmar o contrário). Comecei a usar e é muito mais divertido abrir os programas assim do que navegar pelo menu Iniciar.



A única coisa que eu não gostei foi o jeito padrão de digitar comandos (segurar Caps Lock, digitar o comando e soltar), mas isso é configurável. Pra mim foi essencial, já que meu teclado não tem mais uma tecla Caps Lock.

E eu estava pronto para escrever que um dos problemas era a falta de extensibilidade do programa, mas após uma rápida pesquisa acabei de encontrar uma versão beta que é extensível em Python!

23 January 2009

Emacs

Já faz um tempo que eu estou ciente da guerra sagrada dos editores de texto. Como o primeiro deles que eu vi sendo usado foi o vi (trocadilho não intencional) foi ele o primeiro a ganhar minha atenção também. No entanto nunca me motivei o suficiente para me adaptar à interface. Como minha história de programador foi marcada por editores bem normais (para os padrões de hoje) eu acabava sempre caindo para uma alternativa simples e confortável quando eu realmente tinha que fazer algo sério, ou então para um ambiente especializado caso precisasse trabalhar com uma linguagem específica.

No entanto, eu sempre me senti atraído pelas lendas de poder infinito prometido àqueles que dominam um desses editores lendários. Um pouco frustrado pela falta de flexibilidade da minha opção atual, resolvi voltar a investir no aprendizado de uma dessas ferramentas. Baixei e instalei os dois, mas apesar da minha maior simpatia com o Vim, resolvi que deveria experimentar o GNU Emacs dessa vez.

Bom, os comentários sarcásticos sobre o Emacs dizendo que ele é “um grande sistema operacional, faltando apenas um editor decente” estão perto de ser verdade: o Emacs é um sistema bem complexo. Ele vem com diversos modos de edição diferente que são divididos em dois tipos: major-modes e minor-modes. Os major-modes governam o comportamento geral do editor para um determinado buffer (o que você chamaria de "arquivo" em um editor comum, mas que não necessariamente está associado a um arquivo no disco), enquanto os minor-modes adicionam comandos e comportamentos que podem complementar um major-mode. Para um determinado buffer apenas um major-mode pode estar ativo, mas minor-modes podem ser vários. Um exemplo: o major-mode Text serve para editar arquivos de texto normais e o minor-mode Autofill pode ser usado para que as linhas sejam quebradas automaticamente para formar parágrafos uniformes. Existem também major-modes para linguagens de programação e marcação como o c-mode, o python-mode e o html-mode. Além de comandos adicionais, aparecem menus para executar alguns dos comandos mais comuns.

Bom, até agora parece que tudo isso é só uma nomenclatura rebuscada pra coisas comuns que todos os editores tem, mas a diferença é o grau de customização que é possível no emacs. Cada um desses modos são implementados como programas em um dialeto específico de Lisp chamado Emacs Lisp ou ELisp. O que acontece é que cada tecla (ou combinação de teclas) pressionada pode estar associada com uma função ELisp, inclusive as teclas alfanuméricas, o que quer dizer que quando você digita a letra A no seu teclado, existe uma função Lisp que insere o caractere A na posição atual do cursor. Porém, não precisa ser assim! Nada impede você de associar qualquer tecla ou combinação com qualquer outro comando fazendo seu próprio programa Lisp. E é graças a essa flexibilidade que o Emacs vem com uma míriade de modos que não tem nada a ver com editar texto, por exemplo, um psicoterapeuta virtual, um jogo de tetris, um navegador de arquivos, leitor de notícias online e MUITOS outros, tanto já incluídos no GNU Emacs como disponíveis na internet. Fora minor-modes adicionais que acrescentam ferramentas muito legais como essa aqui:



Vale também mencionar que um dos major-modes chamado org-mode tem uma palestra de mais de 40 minutos do Google Tech Talks para explicar o seu funcionamento.

Apesar de todas essas maravilhas, existem razões pelas quais é difícil começar a usar o Emacs.
  • A pletora de funcionalidade pode ser um tanto desgastante. São tantos comandos e opções que é enlouquecedor no início.
  • Os atalhos de teclado costumam envolver malabarismos não tão comuns em outros editores. Existem atalhos como Ctrl+x, b significando que você precisa primeiro apertar Ctrl+x e depois apertar b, até porque Ctrl+x, Ctrl+b é outro atalho que ativa outro comando.
  • O programa foi criado bem antes de algumas convenções que muitos de nós estamos acostumados (Ctrl+C, Ctrl+V, Ctrl+Z, alguém?). Para se ter uma idéia, o comando padrão de desfazer é Ctrl+_ e como o caractere é um underscore, isso significa que você precisa apertar Shift junto em um teclado QWERTY convencional. Felizmente isso tem uma solução simples: existe o modo CUA que é fácil de ativar e que faz com que muitas coisas passem a funcionar do jeito que é convencional nos editores atuais.
  • O programa é um tanto feio para padrões estéticos atuais e tem cara de antigo.
  • Customizar o comportamento do programa significa editar um arquivo Lisp ou usar uma interface um tanto poluída chamada Custom (que, adivinhem, é implementada em Lisp dentro do próprio Emacs)
Apesar dessas desvantagens eu estou gostando de aprender a usá-lo. Já fiz minhas primeiras funções em Lisp para adicionar uns comandos que eu sentia falta de outros editores e foi bem fácil. A impressão que eu tenho é que é um tipo de ferramenta que tem uma interface nem um pouco convencional, mas que compensa aprender. É mais ou menos a impressão que eu tenho do Blender também.

Meu principal objetivo é usá-lo como a IDE perfeita para Python e ele tem umas features bastante impressionantes para isso:



O Rope é usado para uma parte da funcionalidade mostrada nesse vídeo. É uma biblioteca com recursos de refatoração e funções de introspecção úteis para IDE's. No Emacs ele é usado através do Ropemacs.

Uma dica para quem estiver iniciando: aprenda os comandos por nome. Todo comando tem um nome que está relacionado com a função que ele desempenha. Aperte Esc e depois x (ou segure a tecla Meta - Alt normalmente - e pressione x) que você irá para o minibuffer e poderá executar um comando digitando seu nome. Além disso, você não precisa saber todo o nome do comando, basta apertar tab para mostrar uma lista de opções de autocompletar. Se o comando que você executar tiver um atalho de teclado, uma mensagem aparecerá no minibuffer dizendo qual é o atalho, logo após a execução. Assim você pode ir memorizando os atalhos dos comandos que você usa com mais frequência, enquanto os comandos novos que você aprender dá pra memorizar pelo nome que é muito mais fácil.