Archive for the ‘Programming’ Category

Python como wget

Thursday, February 12th, 2009

Inspirado por este e-mail, resolvi tentar escrever um `wget -r` em Python. Com a ajuda do BeautifulSoup, bastou meia-hora para chegar numa prova de conceito bem interessante…

#!/usr/bin/env python

"""
Proof-of-concept Python implementation for `wget -r`.

Downloads only what looks like files.
That is: it isn't really recursive (yet). :)
"""

from urllib import urlopen, urlretrieve
from urlparse import urlsplit
import sys
import os

from BeautifulSoup import BeautifulSoup

URL = 'http://humberto.digi.com.br'

print "Opening", URL, "..."
b = BeautifulSoup(urlopen(URL).read())

links = [a['href'] for a in b.findAll('a')]
internal = [l for l in links if l.startswith(URL)]

# urlsplit:
#
# (u'http',
#  u'humberto.digi.com.br',
#  u'/wp-content/uploads/2008/03/delimport.png',
#  '',
#  '')

site_name = urlsplit(URL)[1]
if not os.path.isdir(site_name):
    os.mkdir(site_name)
os.chdir(site_name)

def reporthook(*a):
    sys.stdout.write('.')

for url in internal:
    # Gets only the file path, stripping first '/'
    path = urlsplit(url)[2][1:]
    print path,
    if not path or path.endswith('/'):
        # Looks like a directory, skip
        print 'skip'
        continue
    # Replicate directory structure
    dirname, fname = os.path.split(path)
    if dirname and not os.path.isdir(dirname):
        os.makedirs(dirname)

    urlretrieve(url, path, reporthook)

    print "OK"

Esse artigo é dedicado ao FTP Offline [2001-2008] da Diginet, feito em PHP com wget.

Falando em podcasts…

Monday, October 13th, 2008

Descobri agora pelo twitter que o áudio das palestras da PyCon UK 2007 também está disponível:
http://www.pyconuk.org/community/Audio2007

Não chega a ser um podcast propriamente dito — é apenas uma página Wiki com links para os arquivos. Além disso, os arquivos são distribuídos em formato Ogg, que a Apple teima em não suportar no iTunes (mais um motivo pelo qual eu odeio o iTunes, mas isso é motivo para outro post). Pra poder ouvir no iPod, o jeito vai ser convertê-los com o Audacity.


Nota: Se você não leu meu artigo sobre podcasts, leia aqui.

“Escute podcasts.”

Thursday, October 9th, 2008

Essa foi a dica de Bruce Eckel durante sua primeira palestra na PyCon Brasil 2008.

Para não adicionar apenas um “Concordo plenamente!”, eu resolvi fazer este artigo listando os podcasts que eu mais gosto e indicando apenas um episódio de cada, para tentar motivar os não-iniciados a, bem, iniciarem-se.

TED Talks

TED - Steven Johnson

“Idéias que merecem ser espalhadas.” Eu diria: idéias que precisam ser espalhadas. Uma reunião de mentes brilhantes e palestras idem.

É até injusto recomendar apenas uma palestra do TED. De qualquer forma, aí vai uma das que eu assisti mais de duas vezes:
Ken Robinson says schools kill creativity | Video on TED.com

Dica: para quem não entende bem inglês, é possível encontrar várias palestras legendadas no YouTube.

Um fator que deixa o TED ainda melhor é que as apresentações são limitadas em 20 minutos, o que obriga o palestrante a falar só o essencial e eleva a qualidade do evento. Algo semelhante é feito nas conferências de Python, chegando ao extremo de ter pelo menos uma hora dedicada às famosas palestras-relâmpago (de 5 minutos).

This Week in Photography

TWiP Logo

Assinar no iTunes. E se você não usa iTunes, baixe os episódios aqui.

O podcast mais bem produzido que eu já (ou)vi. Escrevo assim porque o formato de distribuição é misto: os episódios oficiais são apenas com áudio, mas há vários vídeos entre um e outro (demonstrações de equipamento, screencasts, etc.).

Outro ponto interessante é que eles se dão ao trabalho de dividir os arquivos em seções e adicionar imagens ao áudio (pois é, eu também não sabia que isso era possível!). As “show notes” também são excelentes, documentando quase tudo que foi discutido.

O uso que eles fazem da “web 2.0″ também é muito massa: não só há um blog bastante atualizado, como duas comunidades no Flickr (uma só para dar e receber critique) e “concursos” quinzenais no Photrade.com. Além disso, a maioria dos apresentadores está no Twitter, e as sugestões para o show devem ser enviadas usando a tag twipideas no Delicious.

Também difícil de recomendar apenas um episódio, já que eu comecei a ouvir há apenas dois meses e já escutei todos. Mas um vídeo que deve ser útil para muita gente é episódio 17, que explica qual a utilidade do histograma.

This Week in Tech

TWiT Logo

O podcast mais conhecido e mais ouvido. Dica de episódio: o mais novo que você encontrar!

FLOSS Weekly

FLOSS Weekly Logo

Entrevistas com os dragões do metal- digo, do software livre! O episódio 39 é com Simon Phipps, da Sun. A visão que ele tem sobre software livre vai além do software, tá ligado? :) Vale a pena ouvir.

Tem várias outras entrevistas boas, como a do criador do SQLite e a de um matemático holandês famoso por aí…

Menções honrosas

PyCon Podcast

http://advocacy.python.org/podcasts/

Uma idéia simples que eu achei genial: distribuir apenas o áudio das palestras, no formato de um podcast (um por semana). Já lancei a idéia tanto para o pessoal que produz os vídeos do FISL quanto na lista da PyCon Brasil. Vamos ver se cola…

Como eu citei na lista, eu não tenho paciência de assistir vídeos muito longos no computador, mas tendo as palestras em áudio eu vou ouvindo no carro e assim alivio meu sofrimento por não poder ir à PyCon em Chicago.

O único problema é que o áudio não foi gravado/tratado da forma correta, o que dificulta muito para ouvir alguns episódios.

Cranky Geeks

http://www.crankygeeks.com/

Nunca fui atrás da tradução de “Cranky”, mas para mim o show se chama “geeks ranzinzas”. Por quê? Basta dizer que é apresentado por John C. Dvorak, o jornalista mais ranzinza de todos os tempos.

WSGI: a resposta para a questão definitiva sobre Python, a web e tudo mais?

Wednesday, April 23rd, 2008

Pessoal, publiquei minha palestra do FISL 9.0 no SlideShare:
(more…)

strace on Mac OS X Leopard

Monday, February 25th, 2008

One of the most important tools for sysadmins and programmers working in the Linux/BSD environment is called strace. As it took me some time to find out where is “strace for Mac”, I thought it would be worth documenting here…

Making a long story short: in Tiger it was called ktrace, in Leopard it’s called dtrace, but it’s simpler if you just call dtruss.

Here are some examples directly from the dtruss man page:

dtruss df -h     # run and examine the "df -h" command

dtruss -p 1871   # examine PID 1871

dtruss -n tar    # examine all processes called "tar"

For a more “real-life” example, please see this article: Why DTrace Makes Leopard a Must-Have Upgrade — you’ll even learn how to prevent Time Machine from consuming all your CPU.

UPDATE: Just after posting this I discovered that:

1. There’s a really cool GUI for DTrace called Instruments. After playing with it for just a few minutes I was able to detect that it was psyco that was causing Python 2.4 to segfault when running web2ldap. Now back to a little more tinkering to discover why

2. Leopard/DTrace provides one command that I always wanted: iotop, to show which processes are responsible for the disk I/O (more dtrace commands here). Now to the question: is there a Linux version? The answer is: yes, and it’s written in Python (and requires a kernel >= 2.6.20).

Python: A Linguagem do Ano

Tuesday, January 8th, 2008

Esse post é apenas pra comemorar a escolha de Python como “A” Linguagem de 2007 no índice TIOBE, com o maior crescimento entre todas (2%) e finalmente ultrapassando Perl.

P.S.: Java continua em primeiro, mas como o índice conta apenas linhas de código escritas, vai ser difícil ganhar essa posição — e, diga-se de passagem, ainda bem!

Universidade Direta

Wednesday, September 19th, 2007

Estava eu aqui fazendo os exercícios de um dos melhores livros de programação de todos os tempos (leia-se: Kerninghan & Ritchie), quando lembrei do último post de Oliveira.

Na auto-denominada condição de membro fundador da Universidade Direta (porque na Universidade Direta é assim, você se autonomeia-se com o título que preferir), me senti na obrigação de comentar algo aqui no blog*.

Oliveira esqueceu de citar uma parte muito importante: o diploma - aliás, certificado - da nossa Universidade. Sendo uma Universidade extremamente moderna e atualizada, e ao mesmo tempo preocupada com tudo o que concerne à preservação do meio ambiente, a Universidade Direta declara que jamais imprimirá *um* certificado sequer, garantindo a preservação de milhares e milhares de árvores do nosso lindo e brega planetinha, e aproveitando para protestar contra essa história toda de diploma, certificado e papeladas em geral.

Em segunda instância, gostáriamos de frisar novamente que achamos todo e qualquer certificado totalmente desnecessário. Maaaaas… Para os mais inseguros, podemos enviar por e-mail um PDF simples, com a seguinte frase escrita em letras grandes e amigáveis: “Eu Sou Foda!” Assim, aquele que precisar de algo ao qual recorrer num eventual momento de incerteza com seu próprio ser ou simplesmente por querer provar para alguém que sabe, mesmo sem saber, terá sua tábua de salvação disponível imediatemente ao alcance do mouse (ou do locate, ou do Spotlight, conforme a qualidade e o grau de nerdice do cidadão).

Aqui vão as cadeiras que estou pagando só no setor de Línguas Estrangeiras e Estranhas (nenhuma coincidência que as duas primeiras línguas também sejam as preferidas de Alemão :-)):

Ah, também tem a (falta de) disciplina “Gringo’s Bar”, mas essa só ‘while $ > 0′… ;)

E jamais esqueça o velho conselho Jedi (by Mestre CLX):

Não deixe a faculdade atrapalhar seus estudos.

* Esse post também vai ao ar como resposta e em agradecimento à tirinha-homenagem que Karlisson lançou há alguns dias: Nota dez e meio. Obrigado, Nerdson! :D

Studying SQLAlchemy

Saturday, August 18th, 2007

Well, I could be stealing, I could be killing, I could even be programming… But today, inspired by this enlightening SQLAlchemy diagram and some great docs, I decided to just… draw.
… 

(more…)

Vim Tips

Tuesday, July 25th, 2006

I decided to write down some Vim commands I use frequently and others that I’ve been discovering recently, check it out.

I’ve created it as a separate page, as I intend to keep updating it regularly.

Now reading… #1

Friday, July 21st, 2006

One of my passions definitely is reading, and you can expect many posts about this subject here. After trying to read too many books in parallel, I’ve found a formula which works very well for me: one technical book (almost always from the Diginet ever-growing library) and one non-technical/fiction book (these ones I have to buy :)).

Now I’m reading The Pragmatic Programmer, which is one of the best books on programming I’ve ever read. It is almost like a complete programming course in a compact form (actually learning a programming language is left as an exercise to the reader ;)). The subjects vary: from things that you usually learn on college (like BNF grammars and big-O-notation) to things that you will normally won’t learn on college (like being pragmatic).

In the way, you will find many good practices and advice, like the importance of using a source code control system, admitting there’s no such thing as perfect software, and using “tracer bullets” (ie. iterative design, instead of a big pile of requirements that doesn’t solve any of the client’s problems). I could go on and on, but you really have to read the book to see everything.

Another interesting thing about the book is that almost all chapters start with some quote related to the subject, but one in particular doesn’t. It’s called “Temporal Coupling”. It is basically about analyzing your code to see if all the assumptions some piece of code makes about what was executed before it are really necessary, so that the program can run smoothly in concurrent environments later. Then, soon after I read this chapter, my copy of The Ultimate Hitchhiker’s Guide arrived, and when I opened it in the last book (”Mostly Harmless”) I found this quote:

Anything that happens, happens.
Anything that, in happening, causes something else to happen, causes something else to happen.
Anything that, in happening, causes itself to happen again, happens again.
It doesn’t necessarily do it in chronological order, though.

Well, I thought this would be a great opening for that chapter and e-mailed the authors with this suggestion. Andrew Hunt answered my e-mail and apparently he liked the idea (”Most excellent!” were his words). Let’s see if it comes in the next edition… :D