Intercon 2007: Eu fui! ;-)

Este ano, finalmente, eu pude participar do iMasters Intercon! Já há alguns anos que eu quero ir, mas não consigo, cheguei a ser convidado para palestrar e não pude, mas dessa vez, finalmente, foi. Deixei o pessoal por aí publicar seus posts sobre o assunto primeiro, principalmente porque o evento me deixou com a cabeça cheia de idéias, e precisava de um tempo para digerir tudo e falar sobre elas ao invés de tentar fazer uma cobertura “jornalística”. Esse é então o primeiro de uma provável série de posts sobre o Intercon, e nesse primeiro vai ser difícil evitar a rasgação de seda, tão bem impressionado que eu saí de lá.

Primeiro eu quero agradecer ao Tiago Baeta e ao André Metzen pelo evento e pelo convite. Imagino a quantidade de trabalho que dá promover um evento como o Intercon. Parabéns, foi fantástico! Quero também agradecer ao Maurício Samy, o Maujor, que foi quem primeiro indicou meu nome para o Intercon. Valeu pessoal!

Quero também agradecer à platéia. Vocês foram demais. O Manoel Netto disse que eu consegui atingir 80% da platéia. Tomara. (Mostrei o post dele para um amigo e ele perguntou, ingenuamente: “como ele sabe?” Para os desavisados: claro, ele não sabe, é um palpite baseado no que ele viu lá de cima. E seria melhor não ter que explicar isso.) Mas o fato é que a platéia estava animada e participativa, empurrando a gente.

Como este ano o evento foi ecologicamente responsável[bb], recebi como presente um lindo bonsai. Acertaram no presente, além de mim, minha família adorou. Pusemos no pinheirinho de Gulliver o nome de “Jaspion” e vamos nos esforçar para que ele tenha uma vida longa, intensa e bem vivida. Se alguém aí tem dicas sobre como cuidar de bonsais, por favor envie.

Infelizmente, só pude assistir ao evento na sexta e tive que sair no intervalo do “se vira nos 3″, mas o evento valeu cada minuto que passei lá. Aprendi muito com as palestras[bb], e muito mais com o twitter e no bate-papo do lado de fora. Saí de lá com aquela sensação de “preciso fazer mais isso”.

Instalando o PSE no Ubuntu 7.10 Gutsy Gibbon

O novo Ubuntu[bb] 7.10 está maravilhoso. Até o 7.04 eu usava um hack para fazer funcionar minha placa de rede, agora ela funciona sem truques. O compiz já instalado funcionou sozinho, bem direitinho. O resto tudo também funcionou sem dor. Menos o PSE.

Por algum motivo estranho, a versão do mod_python (3.3.1) desse novo Ubuntu reclama de sei lá o que. A versão anterior (3.1.3) funcionava sem problemas. Dei um jeito aqui de colocar para funcionar. Não sei se é uma boa saída, se alguém tiver uma sugestão melhor, por favor.

Segue a receita de bolo para instalar o PSE no novo Ubuntu:

  1. Instale os pacotes necessários: sudo apt-get install apache2 libapache2-mod-python python-profiler build-essential latex2html
  2. Baixe o PSE: wget http://nick.borko.org/pse/PSE-3.0.6.tar.gz
  3. Extraia o código fonte: tar -xzvf PSE-3.0.6.tar.gz
  4. Entre na pasta: cd PSE-3.0.6
  5. Compile e instale: sudo python setup.py install
  6. Edite o arquivo de configuração do Apache: sudo gedit /etc/apache2/apache2.conf
    Acrescente ao final:
    PythonHandler pse_handler
    AddHandler python-program .pt
  7. Aqui vai o hack: sudo gedit /usr/lib/python2.5/site-packages/mod_python/importer.py
    Encontre a linha 303, que deve ser:
    return __import__(module_name, {}, {}, '*')
    E edite para ficar:
    return __import__(module_name, {}, {}) #, '*')
    Cuidado para não quebrar a identação!
  8. Reinicie o Apache: sudo invoke-rc.d apache2 restart

Pronto, deve funcionar. Aqui para mim foi só isso.

Tradutor Português-Portunhol

Falta uma semana para lo dia internacional de hablarse portuñol. Fica aqui minha contribuição ao ócio e falta do que fazer, fruto de uma tarde de feriado entediante: tradutor automático de sites português-portunhol. Você pode, por exemplo, ver este site traduzido para o portuñol[bb].

Tomara que você ache tão divertido de usar quanto eu achei construí-lo.

Acentuação em Português e Expressões Regulares Python

Ao utilizar expressões regulares em Python[bb], por padrão, seu texto é interpretado como uma seqüência de caracteres ASCII comum. Assim, caracteres acentuados são considerados sinais gráficos especiais, e não são capturados como letras. Veja este exemplo:


>>> import re
>>> print re.sub(r"\b","|","era uma criança")
|era| |uma| |crian|ç|a|

Como você pode ver, o ce-cedilha não é considerado uma letra, “quebrando” a palavra. Resolver isso é muito fácil, basta compilar a expressão regular passando a flag L, para que ela siga o locale de sua máquina, ou a flag U, para que ela trabalhe com unicode. No meu caso, em que o locale da máquina é unicode, tanto faz. Veja como funciona:


>>> import re
>>> c=re.compile(r"\b",re.U)
>>> print c.sub("|",u"era uma criança")
|era| |uma| |criança|

Só não se esqueça de trabalhar com strings unicode.

Blogroll

Eu tinha uma idéia a respeito de blogrolls que eu não costumava compartilhar: a de que eles fogem aos objetivos do site. Pensava que o sujeito chega a um site procurando pelo bom conteúdo que há ali, ou porque assina o RSS[bb], logo não vai ver o blogroll, ou porque estava procurando algo no Google e, chegando com um objetivo específico, não vai clicar a esmo em qualquer link que achar bonito. Não costumava compartilhar essa idéia porque era só um palpite, eu não tinha nenhuma certeza disso.

Bom, mudei de idéia. Tenho clicado em tantos links legais em blogrolls por aí, e descoberto tanta coisa interessante, que fui convencido da utilidade disso. Então agora temos um blogroll. Está em ordem randômica, pois foi o jeito mais justo. Só links em português, para que todos possam aproveitar. Boa leitura!

Um pouquinho mais da sintaxe do Python

Um amigo meu está fazendo faculdade, e começando a aprender a programar (com Java[bb].) Ele me mostrou semana passada um exercício que o professor passou:

  • Solicitar que o usuário informe um número inteiro que será usado como limite superior do contador.
  • O programa deverá exibir todos os números pares existentes entre 1 e o limite superior (informado via teclado pelo usuário).
  • Após a exibição dos números o programa deverá perguntar se o usuário deseja executar mais uma vez.

Por curiosidade, eu escrevi uma solução em Python[bb]:

continuar=True
while continuar:
numero=int(raw_input("Informe o valor inicial da repeticao: "))
print str(range(2,numero+1,2))[1:-1]
continuar=raw_input("Continuar? (S/N) ").upper()!="N"

Update: inspirado nos comentários do Rafael Santini, uma solução com break fica mais elegante:

while 1:
numero=int(raw_input("Informe o valor inicial da repeticao: "))
print str(range(2,numero+1,2))[1:-1]
if raw_input("Continuar? (S/N) ").upper()=="N":break