Em novembro de 2009 publiquei minhas impressões sobre o CouchDB, já que estou desde então estudando banco de dados NoSQL para aplicações bem específicas. Permaneci por alguns meses estudando o CouchDB, que é mantido pela Apache Foundation e realizei diversos testes. O banco de dados se demonstrou bem eficiente para o modelo de aplicação que estou trabalhando, no caso a performance foi bem superior ao MySQL, já que tenho um volume de informações enorme e o fato de trabalhar com documentos — para esta minha aplicação específica — foi o que me chamou a atenção para um banco de dados estilo NoSQL.
Resolvi dar uma espiadinha em outro banco de dados no mesmo estilo, o MongoDB. Instalei no meu ambiente e realizei os mesmos testes. No CouchDB demorei muito tempo para realizar algumas operações simples, enquanto que no MongoDB, realizei os mesmos procedimentos de maneira mais rápida e sem me enroscar nas configurações e na manutenção do banco. Em termos de performance — no caso da minha aplicação — os dois bancos se mostraram praticamente iguais.
Embora o CouchDB também tenha bibliotecas para trabalhar em Python, a do MongoDB parece ser mais simples e direta. Pelo menos me identifiquei melhor com sua biblioteca e consegui adaptar minha aplicação rapidamente para trabalhar com o MongoDB, descartando o tempo que levei para o aprendizado e leitura das documentações, demorei menos tempo para desenvolver um script totalmente funcional para MongoDB do que para CouchDB. Isso não quer dizer que o CouchDB seja ruim e ainda não tenho o volume de informações necessárias para fazer um benchmark ou dar opinião sobre qual é melhor.
É muito simples trabalhar em Python com o MongoDB, veja um exemplo:
#!/usr/bin/python
from pymongo import Connection
import datetime
con = Connection('localhost', 27017)
db = con['teste01']
user = {"nome":"Fulano",
"sobrenome":"de Tal",
"email":"fulano@detal.net",
"data_inclusao": datetime.datetime.now()}
# Insere
users = db.users
users.insert(user)
O código acima cria um banco no MongoDB (veja as instruções para instalação e veja também a documentação Python para MongoDB) e insere um registro no dict user para o banco de dados. Como o trabalho é feito em um banco de dados não relacional, não há necessidades de definir o layout da tabela. O layout é definido à medida que os documentos são definidos e é flexível, podendo ser alterada a qualquer momento.
A pesquisa na base de dados pode ser feita com o seguinte código:
#!/usr/bin/python
from pymongo import Connection
con = Connection('localhost', 27017)
db = con['teste01']
# Pesquisa um só
users = db.users
a = users.find_one({"email":"fulano@detal.net"})
print a
# Pesquisa varios
for u in users.find():
print u['nome'], u['email']
Entre o CouchDB e o MongoDB eu me identifiquei mais com o segundo. Consegui fazer as tarefas de forma mais rápida e eficiente. Mas o primeiro também é um ótimo banco, merece ser estudado. Provavelmente continuarei meus estudos e desenvolvendo a pesquisa em cima do MongoDB, pois tem uma documentação um pouco melhor e mais ferramentas para trabalhar na base de dados.
O próximo passo é integrar uma aplicação Django no MongoDB. Mas isso é motivo para outro post!
Não posso deixar de divulgar a grande iniciativa do Luiz Eduardo Borges em disponibilizar a segunda versão do livro Python para Desenvolvedores sob licença Creative Commons. Ainda não li todo o livro, mas pelo índice já dá para perceber que é um grande material, leitura indispensável para programadores de outras linguagens que desejam conhecer Python ou até mesmo programadores Python que desejam aperfeiçoar seus conhecimentos.
Uma leitura técnica como esta, além de revigorante é bastante inspiradora. Por mais experiência que alguém tenha sobre uma determinada tecnologia, ao ler um ótimo material como este, é possível aprender novas técnicas ou melhorar procedimentos já utilizados. Então vale muito a leitura, além de tudo está sob licença CC.
O download do livro pode ser feito na página Python para Desenvolvedores no próprio site do Ark4n ou se tiver alguma dificuldade no download, fiz um mirror do livro. Clique aqui para baixar do mirror.
Em uma apresentação do Luciano Ramalho, observei que estava utilizando o Sphinx (não confunda com o SphinxSearch) para gerar sua documentação e apresentação. Logo que voltei para o escritório, resolvir dar uma fuçada na ferramenta e simplesmente caiu como uma luva. É uma maneira bastante simples de criar documentações, principalmente de projetos desenvolvidos em Python. Sempre utilizei diversas técnicas para documentar meus projetos, desde Wiki, Texinfo e até LaTex, mas só de pensar em criar toda uma documentação em LaTeX, desanima um pouco.
O Sphinx nada mais é que uma ferramenta que pega um documento escrito em reStrucutredText, compila e gera saída em diversos formatos, como html e até mesmo LaTeX (que pode ser facilmente transformado em PDF). É realmente muito rápido e simples criar uma documentação, que pode estar dentro dos códigos Python. A linguagem de marcação “rst” é simples de ser lida e escrita, não tem todas as complexidades (embora bem completas) de um LaTeX.
Passei a fazer um teste com a ferramenta e adotei em alguns projetos, depois de um tempo utilizando, já posso afirmar que é bem simples e eficiente e toda documentação (que são arquivos texto, seguindo marcação rst) pode ser facilmente controlada por um Bazaar ou SVN (ou outro de sua preferência).
Se você gosta de Emacs, existe um suporte rst para Emacs, o que torna a tarefa de documentar ainda mais facil. Com vários atalhos e funcionalidades, documentar nunca foi tão rápido e menos chato.
Mais informações: Sphinx Python Documentation Generator

Fazer gráficos em Python não é uma tarefa difícil. Existem várias bibliotecas com este objetivo, como a Matplotlib, SciPy e outras proprietárias como ChartDirector. As duas primeiras são bem científicas e muito bem documentadas, a terceira é uma solução proprietária, mas oferecer gráficos de vários formatos.
O grande problema da Matplotlib e SciPy é a customização. Seus gráficos padrões são, digamos, não muito bonitos, embora atenda muito bem o seu objetivo principal. Uma outra alternativa é o Gnuplot, que também é excelente, mas também cai no problema da customização para exibir gráficos mais elegantes em sites que muitas vezes são gerados on the fly. O problema dessas bibliotacas é a necessidade de muito código para fazer gráficos simples, sem contar no trabalho de customização para criar gráficos mais bonitos, com degradês e outras frescuras que alegram os olhos dos visitantes.
Descobri a pouco tempo o CairoPlot, uma biblioteca bastante simples, criada por brasileiros e que utiliza a PyCairo para criar seis tipos de gráficos, incluindo gráficos em pizza, donut, barras, linhas, etc. O que mais me impressionou na biblioteca é a simplicidade, com poucas linhas é possível gerar gráficos bonitos e elegantes como o exemplo abaixo:

É uma mão na roda para quem precisa criar gráficos on the fly em sites ou utilizá-los em apresentações.
O download pode ser feito através de um branch do Bazaar, da seguinte forma:
bzr branch lp:cairoplot/1.1
Depois de baixar, basta seguir os exemplos no site da CairoPlot ou estudar o arquivo test.py. Se você conhece Python, em poucos minutos estará criando seus próprios gráficos.
Mais informações: http://linil.wordpress.com/2008/09/16/cairoplot-11/
Post relacionado: Utilizando o Bazaar VCS

Fiquei bastante sumido durante as duas últimas semanas. Estou me dedicando em adaptar alguns projetos para o Django 1.0, versão muito esperada que foi lançada recentemente. Por serem projetos de produção, optei por sempre respeitar e seguir as versões estáveis do Django, mesmo sabendo que existe um comprometimento grande por parte dos desenvolvedores em relação a estabilidade e segurança das versões em SVN. Em laboratório, mantenho as duas versões (a estável e a SVN, utilizada para testar novas features e avaliar as melhorias).
O bom de fazer essa atualização de código é aproveitar a oportunidade e colocar em prática um ‘code refactoring‘, otimizando as aplicações e aproveitando a oportunidade para corrigir bugs e padronizar diversas funções.
O Django 1.0 tem várias novidades e muda muita coisa em relação ao 0.96, por isso nem sempre um código feito para a versão 0.96 vai funcionar de primeira na 1.0, mas a adaptação vale a pena, pois a nova versão está sensacional. Como eu já estava acompanhando as evoluções através do SVN, a migração não está sendo difícil porque já sei tudo que mudou, mas no meu caso é demorada porque diversos pontos das aplicações que mantenho são complexas e dependem de outras aplicações externas. A integração precisa ser muito bem testada e depurada antes de subir para produção e esse processo toma muito tempo e exige total dedicação.
Por este e outros motivos, talvez fique um pouco ausente das listas e participação na comunidade durante as próximas semanas. Tenho muito trabalho pela frente, mas estou muito satisfeito por ter escolhido o Django como ferramenta de trabalho. O dia a dia está me provando o quanto esse framework é poderoso.
Python é uma linguagem de programação que está crescendo muito. O mercado está aquecido e faltam bons profissionais. Conheço algumas empresas (algumas de grande porte) que estão a procura desses profissionais, com salários e benefícios interessantes, mas a tarefa de encontrar esses profissionais nem sempre é muito simples.
Se você tem interesse em aprender a linguagem e fazer networking com profissionais Python, terá duas oportunidades entre os meses de agosto e setembro em São Paulo e no Rio de Janeiro. São dois eventos, o primeiro será organizado na Impacta em São Paulo e no Rio de Janeiro, o mais esperado de todos: a PyConBrasil que é nada mais e nada menos que o maior evento Python da América Latina.
O evento de divulgação Python na Impacta acontecerá no dia 30 de Agosto em São Paulo e a PyConBrasil nos dias 18, 19 e 20 de Setembro no Rio de Janeiro.
São duas oportunidades imperdíveis!
Para maiores informações, consulte o site de cada evento:
Migrei todos meus projetos pessoais que estavam em Subversion para o Bazaar-vcs e tenho utilizado esse excelente VCS a alguns meses. Uma das coisas que senti falta foi a integração com o meu editor favorito, o Emacs. No pacote emacs-snapshot do Ubuntu, o editor já vem com suporte pronto ao Svn, porém ainda não tem uma integração para o Bazaar. Procurei por diversos lugares alguma receita pronta para integrar o Bazaar ao Emacs e facilitar algumas tarefas de desenvolvimento
. Testei várias soluções sem muito sucesso, até que cheguei ao site DVC, que disponibiliza um pacote que integra não apenas o Bazaar, mas outros VCS ao Emacs, como GIT, Mercurial, GNUArch entre outros.
Para instalar, pegue a última versão do DVC em um branch Bazaar:
bzr get http://bzr.xsteve.at/dvc/
Entre no diretório e digite autoconf para que seja criado o configure. Depois rode o configure e make.
Agora basta adicionar o dvc-load.el ao seu ~/.emacs com a seguinte linha:
(load-file "/caminho/para/o/dvc/dvc-load.el")
Pronto! Quando abrir novamente o Emacs, já terá a integração com o Bazaar. Para testar, basta ir até algum diretório de projeto Bazaar e digitar M-x bzr-status
Ontem tivemos a primeira reunião do GruPY-SP (Grupo de Usuários Python do Estado de São Paulo). Reunimos 14 pessoas, o encontro foi bastante divertido, regado de pizza, boa cerveja e claro, muito assunto relacionado a Python. Conhecer as pessoas da lista e encontrar velhos conhecidos é sempre uma atividade muito bacana.
O grupo paulista foi criado, decidimos fazer reuniões periódicas em São Paulo Capital e no interior para ajudar a fortalecer essa grande linguagem em todo Estado. A mesma tendência está acontecendo em outros Estados. Todos estão convidados a participar do grupo, independente do nível de conhecimento, basta simpatizar com a linguagem e aproveitar ótimas horas de bom papo e aprender bastante.
Quem trabalha com Python ou simpatiza com a linguagem, está convidado a se juntar à Associação Python Brasil.
Abaixo está a foto do primeiro encontro do GruPY-SP (clique para ampliar):
Da esquerda para direita, começando do alto: Luciano Ramalho, Luciano Pacheco, Christiano Anderson (eu), Alberto Fabiano, David Kwast, Leandro Lameiro, Vinícius Assaf, Daniel (sobrenome difícil), Roger Demestrescu (foi embora antes, então a cadeira e o crachá o representam), Bruno Tikami, Renato Lipi, Mauro Baraldi, Bruno Gola, Tomas Correa.
Foto retirada do flickr do Luciano Pacheco.
Publiquei a pouco tempo um artigo sobre o Listen, um tocador de músicas bastante interessante, feito em PyGTK. O recurso que mais admiro em um tocador de música é a simplicidade. Eu quero apenas selecionar as faixas favoritas e aguardar que o tocador toque todas na ordem selecionada. Gosto do Rhythmbox, mas acho sua interface poluída demais e consome muita memória. O Listen estava sendo meu tocador favorito, até conhecer o Decibel Audio Player, que também é desenvolvido em PyGTK e tem uma interface muito mais simples que o Listen.
O Decibel não tem uma organização como o Listen e Rhythmbox, onde você apenas informa qual diretório estão seus arquivos de músicas e ele, de forma recursiva, cria uma lista com tudo que você possui. O Decibel trabalha em conjunto com o sistema de arquivos, você precisa entrar no diretório, marcar todos os arquivos e jogar para a área do lado direito que será sua playlist. Como minhas músicas são organizadas por diretórios contendo o nome da banda, nome do álbum e músicas, fica muito facil elaborar uma playlist apropriada para o momento.

Fica mais uma dica!