Dec 09, 2006
Lendo notícias
Existem diversos programas para agregar news feeds. Eu nunca usei nenhum programa específico porque prefiro usar algo ou incorporado com o Emacs, ou dentro do próprio firefox. Até recentemente eu usava um pequeno script em Python que gerava uma página web com uma lista simple com os cabeçalhos das notícias. Se a notícia me interessa é só usar Ctrl-clique para abrir a notícia completa (no site de origem) em uma tab. É um esquema simples e efetivo. O problema é que esse script em particular não está funcionando para todos os formatos de agregadores. Além disso ele roda no meu servidor, para acrescentar um novo site tenho que mudar o arquivo que está lá. Procurando por algo mais prático eu descobri que dá para configurar a página inicial do google para mostrar notícias. Como ele é feito usando ajax dá para configurar onde os blocos com notícias vão aparecer na página (é só arrastar com o mouse) e dizer quantos cabeçalhos podem aparecer em cada bloco. O resultado pode ser visto na figura abaixo:
Posted at 21:30
Nov 29, 2006
Deixando o Gnome mais Hacker Friendly
Em geral eu prefiro usar gerenciadores de janela bem simples como o fvwm ou ion. Recentemente eu tentei usar o wmii no lugar do Ion. O problema é que, apesar de ser muito bom, o wmii ainda está meio verde, especialmente para alguns aplicativos como o ardour e snd. O último snd definitivamente não roda dentro do último ion :-( O que fazer? Eu ainda não decidi. Provavelmente vou voltar para o fvwm.
Eu descobri que, independente do gerenciador de janela, o mais importante para mim são as seguintes coisas:
- ter uma tecla de atalho para executar aplicativos, com complementação (claro!). No ion é só digitar F3 que ele pede um comando a ser executado. Eu nunca uso menus no ion justamente devido a esse recurso. Por exemplo, é só digitar F3 ema TAB e a complementação faz o resto.
- ter uma tecla de atalho para um terminal. Ao contrário de outros hackers, eu só deixo um terminal aberto, graças ao screen (o aplicativo mais útil em todos os tempos). Eu poderia abrir o terminal usando o comando descrito no item acima, mas já que eu sempre uso terminais, gosto de ter uma tecla de atalho para eles.
- abrir os programas, ou ao menos alguns deles, de modo que ocupem a tela toda, ou seja, abram maximizados. Eu só gosto de usar um programa por área de trabalho.
- abrir alguns programas-chave em lugares específicos. Por exemplo, no Ion quando eu mando abrir o emacs ele sempre aparece na primeira área de trabalho, o terminal na segunda, e o firefox na terceira. Com isso tenho uma organização básica para os programas que uso diariamente.
- uma barra de status simples. Eu não preciso de muita frescura, algo que mostre a hora, o status da bateria, a frequência da CPU já é suficiente.
Basicamente é isso. Quando eu estou trabalhando em outros programas específicos por períodos de tempo maior (por exemplo, xsane) eu crio alguma configuração ad hoc.
Eu estou preparando uma palestra onde vou precisar demonstrar programas que não estão rodando bem no Ion. Geralmente eu uso o Gnome para dar palestras, para não assustar o pessoal não-geek ("linux é isso!?"). Então resolvi ver se consigo configurar o gnome para atender aos pontos acima.
O gnome tinha um excelente applet para executar aplicativos que sumiu do mapa. A versão que tenho aqui tem uma "barra de ação unificada" que é horrível. Eu estou usando o applet "executar uma aplicação". Eu configurei ele para a tecla F3. Ele não tem uma complementação boa, mas por enquanto dá para o gasto.
O gnome permite que eu atribua uma tecla de atalho ao terminal, mas ele usa o gnome-terminal por padrão. Eu prefiro o xterm. Por enquanto deixei o gnome-terminal com F2, depois descubro como mudar para o xterm.
Procurando como fazer para o Gnome abrir as janelas ocupando a tela inteira eu achei esse howto sobre o Devil's Pie. Ele é um utilitário para detectar janelas e casa-la com uma série de regras, desse modo, por exemplo, pode-se configurar um programa para abrir em determinada área de trabalho. No howto ele mostra a (horrível) configuração usando XML que o Devil's Pie usa. Mas descobri que seus desenvolvedores viram a luz e incluiram uma sintaxe usando expressões-s (ou expressões simbólicas) como em Lisp. Graças a Deus! Depois de criar algumas configurações no ~/.devilspie/ o emacs, terminal, e firefox abrem nas áreas desejadas e com tela cheia. Esse é um exemplo de configuração:
(if
(is (application_name) "emacs")
(begin
(set_workspace 1)
(maximize)))
Eu configurei apenas uma barra de ferramentas do gnome, com hora, frequência da CPU, e outras coisas mais. Além disso eu removi o irritante notificador de autalizações.
Agora só faltam algumas configurações de teclado. Em geral eu uso o xmodmap, mas vamos ver o que o Gnome pode fazer por mim. Eu modifico as seguintes teclas:
- a tecla de "windows" vira Meta (útil para o emacs)
- a tecla CAPS LOCK vira CTRL
- eu troco as teclas de colchete e parênteses, isso é, os parênteses ficam na tecla dos colchetes e vice-versa. Como eu programo muito em Lisp, é fundamental ter acesso aos parênteses em uma tecla sem SHIFT
Para minha surpresa, eu posso fazer as duas primeiras opções acima usando a opção de "preferências do teclado" do Gnome, na seção "opções de layout". Mas a troca entre parênteses e colchete não é possível no gnome, então adaptei o mapa de teclado que usava anteriormente:
keycode 0x12 = 9 bracketleft bracketright keycode 0x13 = 0 bracketright braceright keycode 0x23 = parenleft braceleft keycode 0x33 = parenright braceright
Eu consegui configurar um ambiente gnome mais usável (para mim) que o padrão. Os programas principais que uso funcionam mais ou menos como no Ion, mas eu ainda tenho a possibilidade de usar os programas que não estão funcionando bem no Ion ou wmii. A desvantagem é que o modo como o gnome lida com janelas faz com que muito do trabalho de gerenciar janelas fique na mão do usuário. Vamos ver quantos dias eu sobrevivo com essa configuração ;-)
Atualização: Eu não consegui suportar o gnome-terminal e o comando de rodar aplicativos padrão do gnome por muito tempo. Como alternativa achei o ótimo gmrun. Agora só precisava de algo para atribuir ele e o xterm a teclas de atalho. Acabei usando o hotkeys mesmo. Com a seguinte configuração para tirar o splash screen e a frescurinha do OSD:
hotkeys -t custom -o off -Z
Posted at 23:26
Nov 18, 2006
Google talks
O google videos tem mais de 200 palestras técnicas: Tem palestras sobre creative commons, Ruby, vários sobre Python (aqui, aqui, e aqui), pacotes debian, Mercurial, Lisp , e muitas outras. Um vídeo muito bom que acabei de assistir é o The Science and Art of User Experience at Google. Ainda não assisti o Predicting bugs in code changes using SCM information mas parece ser interessante.Posted at 15:00
Nov 16, 2006
Python 2.5 acrescenta a sentença with
Eu vi recentemente que a versão 2.5 de python acrescenta a sentença with. A idéia é que with define um bloco e uma variável e algum código de 'limpeza" é executado depois. O exemplo clássico desse tipo de coisa é para acessar arquivos, onde o arquivo é automaticamente fechado no final da execução do bloco with. Esse é um exemplo desse uso:
with open("/etc/passwd", "r") as f:
for line in f:
print line
Claro que Lisp tem esse tipo de coisa. Por exemplo, a
função with-open-file em Lisp faz exatamente isso para
arquivos, abre um arquivo, executa o código no corpo da expressão e
automaticamente fecha o arquivo quando a expressão é terminada.
(with-open-file (stream "/etc/passwd")
(when stream
(loop for line = (read-line stream nil)
while line do (print line))))
Ainda que nada impeça a criação de algo geral como with em
Lisp, a prática tem sido de usar funções específicas com o prefixo
with- como with-slots, with-accessors, with-open-stream,
with-simple-restart e assim por diante.
Observe que meu intuito aqui não é falar mau de Python ou de qualquer outra linguagem, aliás eu acho Python uma linguagem muito legal. Eu quero falar sobre a possibilidade de poder extender uma linguagem de programação sem precisar da benção de ditadores benevolentes. Como eu falei em outro post, uma das grandes coisas em Lisp é a possibilidade de extender a sintaxe da linguagem usando macros (lembre que macros em Lisp não tem nada a ver com macros em C).
Macros em Lisp permitem que abstraiamos idiomas comuns que não podem ser abstraidos por funções. Por exemplo, um idioma comum é o de entrar em um diretório para executar um comando e voltar ao diretório anterior. Uma função para verificar se os arquivos de um diretório sob controle de versão foram modificados seria algo como o seguinte em Bash:
function status {
old=$(pwd)
cd $1
svn up
cd $old
}
status "/home/kroger/foo/bar"
Ao invés de repetir esse idioma em funções toda vez que vamos executar algum comando em um diretório, podemos capturar essa abstração básica em uma macro em Lisp:
(defmacro with-directory (directory &body body)
`(let ((dir (default-directory)))
(setf (default-directory) ,directory)
,@body
(setf (default-directory) dir)))
Esse código é uma versão praticamente linha por linha da versão em Bash, a diferença é que o corpo do código a ser executado vai entrar em ,@body. Um exemplo simples de uso seria algo como:
(with-directory "/home/kroger/foo/bar/"
(ext:run-program "svn" "("up")))
O mais legal é que with-directory aceita qualquer expressão válida em Lisp como corpo, não apenas uma única expressão. Isso permite uma grande flexibilidade e elimina códigos redundantes, aumentando a legibilidade.
O programador atento vai notar que eu poderia fazer algo assim em Bash (e qualquer outra linguagem que tenha eval:
function status {
old=$(pwd)
cd $1
eval $2
cd $old
}
status "/home/kroger/bin/" "git status"
O problema é que, não só eval tende a ser lento, como o que for executado tem que estar entre strings, e de uma maneira limitada, enquanto que macros em Lisp são integradas no resto da linguagem, por exemplo:
(with-directory "/home/kroger/foo/bar/"
(dotimes (x 10)
(ext:run-program "svn" "("up"))))
A questão básica aqui é que a diferença entre Lisp e outras linguagens é que enquanto os usuários de outras linguagens esperam que recursos sejam implementados na linguagem pelas companhias que as dominam ou por aqueles que as mantêm, hackers de Lisp modificam a linguagem o tempo todo, aumentando-a de modo a facilitar seu trabalho.
Posted at 15:00
Nov 03, 2006
Microsoft ferra com programadores
Eu me deparei com esse artigo sobre o encerramento do visual basic pela Microsoft. Aparentemente todo o suporte e desenvolvimento futuro do visual basic foi parado e agora a Microsoft vai investir no Visual Basic.Net que é incompatível com o visual basic 'classic'. Eu não tenho nenhum interesse no visual basic e na plataforma .net, e o que me surpreendeu no artigo foi sua conclusão:Programmers aren't embracing VB.net as Microsoft expected and will probably continue using Visual Basic classic until it breaks. But what then? Open source might be the answer. Since then, most programmers have learned their lesson: DON'T rely on a proprietary programming language.Além de isso ser uma lição aos programadores que usam linguagens proprietárias, serve para lembrar o valor de uma linguagem ter um padrão definido como C, C++, e Common Lisp.
Posted at 15:00
Nov 01, 2006
Bye Bye Ion, welcome wmii
Eu usei o Ion como gerenciador de janelas por um bom tempo (eu não me lembro mais deve ter ao menos uns 3 anos). Antes disso eu usava o venerável fvwm. Depois de se acostumar com um gerenciador como o ion é difícil usar outra coisa. O ion é tão produtivo! Eu confesso que não tenho problemas maiores com ele, mas recentemente tive problemas em usar o snd com o ion. O snd é o emacs dos editores de áudio e uma ferramenta essencial no meu cinto de utilidades. O desenvolvedor principal do Ion clama que o problema deve ser no gtk, o que não seria a primeira vez que isso ocorre. Eu tentei rastrear o bug, mas é dificil achar um bug desse tipo que pode ocorrer em 3 camadas (no ion, gtk, e snd). Eu testei o snd com o wmii para ver se o bug acontecia e funcionou perfeitamente. Decidi que o wmii será meu novo gerenciador de janelas. O wmii segue a mesma filosofia de gerenciadores de janela para quem não gosta de mouse como o ion e ratpoison. O wmii tem algumas diferenças em relação ao ion que eu preferi logo de cara:- usa tags no lugar de workspaces. Muito mais flexível.
- procura organizar os programas automaticamente, seja lado a lado, um no topo do outro, ou ocupando a tela inteira
- pode usar qualquer linguagem de programação como linguagem de extensão, enquanto o ion usa Lua (que eu não gosto).
Posted at 15:00
Oct 27, 2006
Nerds na TV!
Holly lambda batman, os nerds estão na TV! Eu não tenho televisão, então não sei que programas estão passando e o que as pessoas estão assistindo. Mas eu gosto de assistir filmes e seriados em DVD no computador. A grande vantagem é que assisto o que quero, quando eu quero, e sem comerciais. Alguns seriados legais (como arquivo-x) podem ser achados para alugar em locadoras. Recentemente eu vi na estante da locadora um seriado chamado "Numb3rs" onde um matemático ajuda o FBI a desvendar crimes. Eu resolvi pegar para testar: se eu gostar do primeiro epsódio eu assisto o resto. O resultado é que o seriado é muito bom! Primeiro, as histórias são baseadas em casos verídicos, como no piloto, onde para resolver um caso de estrupo, um matemático (de verdade) desenvolve uma formula para determinar a região aproximada onde o estrupador pode morar, baseado nos padrões de onde os ataques aconteceram. O mais engraçado é que criticos falaram coisas do tipo "isso nunca aconteceria na vida real, um matemático ajudando a desvendar crimes" ;) O mais interessante é o piloto foi baseado em fatos reais até em pequenos detalhes. Realmente impressionante. Segundo, a inspiração inicial da série foi Richard Feynman. Só isso já seria suficiente para fazer algo legal. Terceiro, os produtores fazem de tudo para que a matemática no programa seja real, empregando diversos matemáticos como consultores. As fórmulas usadas são verdadeiras e aplicáveis a cada caso. O show recebeu excelentes criticas de matemáticos como aqui e aqui. Finalmente, tirando o fator nerd, o show é muito bem produzido e escrito. Aparentemente o show está indo bem (de certa maneira seguindo a trilha de CSI) e deve entrar na terceira temporada. O mais interessante é que o público não só gostou da matemática no show, como pediu mais!
Posted at 15:00
Aug 04, 2006
Humor Nerd
Quem me conhece pessoalmente sabe que eu tenho um humor (bastante) nerd. Mas não dá para competir com esses caras. Esse link tem uma coleção de piadas escondidas em livros de computação. Uma prática "comum" era colocar itens malucos ou falsos no index, como: Fibonacci numbers, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610 ou Números primos, que lista cada número primo de 1 a 826 (o número de páginas do livro). ou ainda IndexOutOfBoundsException: 30, 196, 210, 596 quando o livro só tem 595 páginas. O livro Common LISP: The Language tem a entrada kludges no index, apontando para as páginas 1-971. Ou seja, o livro todo :-)Posted at 15:00
May 24, 2006
Ciência da Computação tem a ver com idéias
Assim como biologia não é a "ciência do microscópio'' e letras não é a "ciência da caneta'', ciência da computação não é sobre o computador e sim sobre processos computacionais. Eu confesso que essa é uma idéia que me interessa bastante e o livro Structure and Interpretation of Computer Programs aborda esse tópico com maestria. Essas imagens do Knuth trabalhando no The Art of Computer Programming confirma isso. Não há nem um computador por perto!
Essas imagens foram tiradas desse artigo.
Posted at 15:00
Apr 21, 2006
Lisp no FISL
A palestra de Lisp no FISL foi um sucesso! tinha bastante gente na sala (muito mais do que eu esperava) e tinha até a presença de pessoas ilustres e legais como o Rodrigo Senra da comunidade Python. As perguntas foram boas e deu para ter uma idéia de que tipo de informação temos que ter no site do lisp-br. Eu fiquei bastante satisfeito com o resultado e acho que foi um bom início para o Lisp-br. Espero que no ano que vem mais lispers submetam trabalhos.Posted at 15:00
Apr 20, 2006
I Encontro de Usuários Lisp do Brasil
Hoje aconteceu o I Encontro de Usuários Lisp do Brasil durante o FISL 7.0. O número de pessoas não foi muito grande, em parte porque algumas pessoas interessadas não puderam ir ao FISL, porque foi a primeira palestra do dia e algumas pessoas ainda estavam na fila da inscrição, e em parte porque não sabiam que ia ter :-) Mas fiquei satisfeito com o resultado. Deu para confirmar quePosted at 15:00
Lançado o Grupo de Usuários Lisp do Brasil
Finalmente a Grupo de Usuários Lisp do Brasil foi lançado! Nós temos um site com artigos, vídeos, links, etc e uma lista de discussão sobre Lisp. Se você tem interesse ou curiosidade na linguagem não deixe de participar.Posted at 15:00
Jan 28, 2006
Mais sobre hotkeys
Uma outra maneira de mapear o teclado é usando o bom e velho xmodmap(1). É só colocar as seguintes linhas no seu ~/.Xmodmap (ou ~/.xmodmaprc):keycode 115 = F13 keycode 116 = F14 keycode 117 = F15Esses códigos correspondem as tecla windows da esquerda, windows da direita, e menu da direita, respectivamente. Agora é só configurar seu gerenciador de janela para fazer algo útil com as teclas F13, F14 e F15 do mesmo jeito que configuraria para outras teclas. Por exemplo, no ion esse seria o comando para rodar um terminal usando a tecla windows à esquerda:
kpress("F13", "ioncore.exec_on(_, 'xterm')"),Não tem a frescurinha do OSD mas é simples, funciona e não precisa instalar nada :-)
Posted at 15:00
Jan 08, 2006
Textos clássicos de ciência da computacao
Bom link com textos clássicos da ciência da computação, boa leitura para as férias. Inclue textos como Why Functional Programming Matters , The Early History Of Smalltalk , Computer Programming as an Art , Recursive Functions of Symbolic Expressions and their Computation by Machine , dentre outros.Posted at 15:00