21 julho 2006

Primeira Colaboração de Código ! :)

Semana passada surgiu uma dúvida na lista python-brasil ,
manipulação de datas com o pymssql e como eu tenho interesse na utilização de Python com o MS-SQL dei bastante atenção à dúvida, gerando minha primeira colaboração com código a um projeto Open Source.

O Problema

Em um comando INSERT desejava-se inserir uma data no banco de dados.

No Python 2.4 temos o objeto datetime para trabalhar com datas, porém o driver de acesso ao banco (pymssql) não reconhece esse tipo e isso nos obriga a converter a data para string antes de enviar ao pymssql.

Obviamente essa conversão é uma responsabilidade do driver pymssql.

Simulei o erro com esse código:

>>> import pymssql
>>> pymssql.__version__
>>> from datetime import datetime
>>> con = pymssql.connect(host='server', user='usuario', password='senha', database='base')
>>> cur = con.cursor()
>>> cur.execute('insert into PrazoLog(Data) values(%s)',>>> [datetime(2006, 7, 20, 11, 6, 14)])
>>> con.commit()

Contornando o Problema

Após eu conseguir simular o erro na minha máquina fui investigar como contornar o erro, e graças ao fato do Python ser executado a partir dos fontes eu pude ler o código do pymssql que estava instalado na minha máquina sem ter que consultar o site, repositórios ou qualquer outro local.

Novamente graças ao Python executar os fontes, pude fazer alterações nos fontes do pymssql e simplemente testar. Obviamente como não desenvolvo constantemente em Python fiz meus testes e debugs de forma bem artesanal (usando prints).

Apenas consultando o e-mail com o problema e os arquivos que já estavam na minha máquina consegui chegar em um patch que permitia contornar o problema de forma simples rápida e ao meu ver bem feita.

Tomei alguns cuidados que achei importante, como tentar não adicionar mais uma dependência ao pymssql. A versão do pymssql que eu disponho não depende do módulo datetime e como eu sabia que esse módulo foi incorporado somente na versão 2.4 não queria adicionar essa dependência.

Lembrei-me, então, do duck typing. Como eu queria apenas o método timetuple da classe datetime.datetime. Apenas verifiquei se o objeto tem o método e tendo-o eu executo-o.

Funcionou que foi uma beleza :), testei nas 3 versões do MS-SQL que eu tenho aqui na empresa (7.0, 2000, 2005) e funcionou. Fiquei empolgado e eufórico! Mandei a minha correção para a lista e o Girão, que é quem teve o problema, falou que funcionou beleza e gostou da correção.

Colaborando com a Comunidade

Aproveitando a euforia e a "aprovação" do Girão fui a página do projeto para enviar a minha proposta de patch. O projeto está no sourceforge.net , dei uma olhada no Fórum e todas as mensagens não recebiam respostas :( e não achava nenhum link do tipo "reporte um bug".

Mas navegando pelo site do projeto achei uma nota sobre a dependência do módulo datetime e achei bem estranha. Então fui verificar os fontes, nos fontes da minha máquina não via nada que levasse ao módulo datetime, então fui consultar o repositório CVS.

Qual não foi minha surpresa quando a versão do CVS revelou-me que a dependência era justamente para solucionar o mesmo problema que eu tinha solucionado :S . Fiquei meio triste, pois pensei, re-invetei a roda, mas fiquei contante pois ainda achava minha solução mais adequada por não adicionar a tão falada dependência.

Apelei e mandei o patch direto para os 2 e-mails de desenvolvedores que eu achei no site.

Após 4 dias o Andrzej Kukula, um dos desenvolvedores, me respondeu dizendo que o meu patch seria incorporado no projeto! :D A empolgação foi total !

Moral da História

  1. O Python facilita a leitura e a depuração dos fontes

  2. Sempre verificar a versão do CVS/SVN

  3. Colaborar com algum projeto não é tão difícil assim
      Precisa-se de:
    • um pouco de interesse

    • um pouco de experiência para saber o que esperar de um módulo/biblioteca/framework, pois para mim (e para o Girão também) a conversão de tipo era função do módulo pymssql

    • um pouco de inglês

    • o que eu menos precisei foi conhecer bem a linguagem - eu acho

  4. e por último, mas não menos importante, colaborar é empolgante e divertido, principalmente em Python ;)

26 junho 2006

Post de inaguração

O Começo

No fim de semana passado eu e um colega de faculdade fomos estudar para a prova semestral de Web Service.

Após muita enrolação e algum estudo conseguimos fazer um exemplo de um servidor de Web Service e um Client de Web Service em Java. Bom, conseguimos não, o eclipse fez para gente, mas estava tudo conforme as aulas dadas. ;)

Obviamente fui tentar fazer a mesma coisa em Python, depois de algumas passagens pelo Google e 2 erros cruciais de digitação consegui fazer o client e o server também em Python.

Ai eu fui exibir o Python para o Marcelo (meu colega de faculdade), ele achou bem legal e soltou a seguinte frase "Ow, por que você não faz um blgo com essas coisas?".

Eu respondi que não porque ando muito sem tempo e blá, blá, blá... Mas aquilo ficou na minha cabeça e enquanto eu não vim aqui criar o blog eu não sosseguei.


A proposta

A minha idéia para o blog é documentar e comentar meus estudos que são na maioria dos casos sobre Python, mas tem algumas outras coisas, como PostgreSQL por exemplo.

Talvez eu comente algo sobre política também, pois eu gosto de política e esse ano tem eleição então devo colocar algumas idéias por aqui.


A Falta de experiência

Não tenho muito experiência com blogs e seus detalhes, mas dei uma lida aqui na ajuda do Blogger para começar.

Por exemplo o Dirceu já me "linkou" no seu blog, como eu sou um leitor do blog dele também eu tentei "linkar" ele aqui no meu blog, assim como outros blogs que eu leio.

Como na ajuda do Blogger não ficou muito claro como fazer, fiz de um jeito que achei meio "força bruta" fui no template do meu blog e adiconei o código HTML com os links para os devidos blogs.


Periodicidade dos Posts

A princípio pretendo uma meta de pelo menos um post por semana, que é mais ou menos o reflexo de um ciclo de estudo que eu faço.

Começo com umas pesquisas no meio da semana e no fim de semana dou uma detalhada um pouco maior, como conclusão do estudo prentendo fazer um post aqui.

Obviamente essa é uma meta, mas como eu tenho visto a maioria dos blogs que leio com uma periodicidade de post baixa, já fico com impressão que é uma meta difícil de cumprir.

Bom por hoje é só que já ficou bem longo, mas acho que eu consegui resumi o que eu queria dizer no meu "discurso de inauguração". :)

Até mais.