Aguardando ansiosamente o aquecimento global…

Enquanto o tal do aquecimento global está de férias em Campinas, estamos passando um frío muito localizado. No nosso quarto de dormir, graças a “perfeição” da engenharia da Encol, o termômetro marca 14oC à sombra. Digo perfeição considerando que mesmo fechada, a janela permite que a natureza siga seu curso, conduzindo o vento polar patagônico (me desculpem os argentinos) diretamente para a cama.

Como sou inimigo da pneumonia e fã do Macgyver, resolvi improvisar o dispositivo abaixo. Damas e Cavalheiros, lhes apresento o Sistema Isolante Térmico Tabajara.

Publicado originalmente em 31 de julho de 2007.
Posted in About Me, Humor | Leave a comment

Criando tabelas dinamicamente no Django

Caso de Uso

Estava eu criando um sistema comercial sobre Django. O Django possui uma ferramenta de mapeamento objeto-relacional (ORM) onde vc define classes em Python (modelos no Djargão) que serão mapeadas para tabelas no banco de dados. Os modelos (classes e instâncias) são usadas para manipular os dados em um banco relacional sem que seja necessário entrar no mérito do SQL. O fluxo de trabalho consiste em definir uma classe em Python (que herda de Model) e rodar um script de sincronização com o Banco de Dados (python manage.py syncdb), esta ação cria as respectivas tabelas no Banco.

Este sistema comercial tem o de sempre: produtos, categorias de produtos, clientes, fornecedores, etc. O interessante são as “tabelas de preço”.

O Problema

Me deparei com duas opções na hora de criar as tabelas de preço:

criar uma tabelona de preços que possua uma coluna para designar agrupamentos lógicos de preços.
criar diversas tabelinhas de preço cada uma representando um agrupamento lógico.
A opção 1) não teria mistério quanto a implementação usando o ORM, mas é ineficiente pois a tabelona de preços seria potencialmente muito comprida. A opção 2) é mais interessante do ponto de vista do desempenho, mas exige que as tabelas sejam criadas sob demanda e dinamicamente. Aí surge o problema, pois estas tabelas de preços pequenas são criadas por uma stored procedure dentro do banco e não tem uma classe correspondente nos modelos do ORM. Ainda é possível manipular estas tabelas via SQL, porém o desejável seria usar o ferramental do ORM.

A Solução

Resolvi realizar o seguinte experimento: criar classes dinamicamente correspondendo as tabelas criadas dinamicamente, e assim restaurar o mapeamento objeto-relacional em tempo de execução. E rolou!

O trecho interessante do código é:

def create_tp_model(table_names, namespace):
template = “”"
class %s(models.Model):
preco = models.DecimalField(“Preço”, max_digits=10, decimal_places=3)
produto = models.ForeignKey(‘Produto’)
class Meta:
db_table = ‘%s’
“”"

for i in table_names:
exec template%(i,i) in namespace

# Create classes for pre-existing TP’s
from django.db import connection, get_introspection_module
introspection_module = get_introspection_module()
cursor = connection.cursor()
table_names = [i for i in  introspection_module.get_table_list(cursor) \
if i.startswith('tp_')]
create_tp_model(table_names, globals())

Deste ponto em diante eu posso obter uma referência para uma destas tabelas e usar o ORM normalmente.

tp_obj = getattr(sys.modules[module_holding_tp_objs], tp_name)
count = tp_obj.objects.count()

Algumas semanas depois de escrever o texto acima, eu encontrei uma documentação no site do DJango sobre esta abordagem: http://code.djangoproject.com/wiki/DynamicModels

Posted in Desenvolvimento, Python | Leave a comment

Uma breve História no TemPOO

No princípio havia o caos,
instruções de branch para cima e para baixo,
O código-fonte ficava tão enrolado,
que foi oficialmente denominado spaghetti.
Isso se fosse longo, se fosse curto era miojo.

Mas um antigo Shaman veio com um novo mandamento,
Edsger Wybe Djkistra “O Impronunciável”,
Essa falta de estrutura é coisa de jumento,
determinou que Goto era mau e com ele acabaria.
Aparentemente abolido, mas no fundo só escondido,
Criar procedimento e funções virou rotina ou subrotina,
Estruturando e compilando era só alegria.
O pobre do dado, ao segundo plano relegado.
O foco estava no controle, e o coitado só manipulado.

Novos tempos, novo profeta,
lá da terra dos Vikings veio um novo vendaval
um tal de Kristen Nygaard com ajuda de Ole-Johan Dahl
Criaram primeiro SIMULA, e depois Beta,
Botando em primeiro plano o dado,
nem nu nem pelado, bem vestido: encapsulado.
E o controle como é que fica ?
Em segundo plano, no objeto pendurado.

POO, não entendi ? Não tem mistério
A classe define um novo tipo de dado.
define e fabrica instância,
à sua forma e semelhança,
cada instância com seu próprio estado.

O conceito fica meio etéreo
se faltar polimorfismo e herança.
Para especializar, não reescreva o fonte
Herdando de outra classe você ganha confiança
Respeite a interface e mensagens não causam desastre

Sem versos alexandrinos e com rima pobre,
fica difícil expressar esta arte tão nobre
Se aqui aprendeu orientação a objeto,
então é bem grande seu intelecto,
Mas a história não tem um fim tão abjeto
pois surgiu a orientação a aspecto
Para que não sofras com tão longo poema,
Fica para outra este outro tema

Encerro esta breve história no temPOO,
dando a pré-história um new look:
Encostado em seu menir preferido,
estava Homo Hackeris com seu notebook
apoiado sobre o dolmen de rocha
modelando a natureza a sua volta.

class bicho { nasce(); come(); copula(); dorme(); }
class roedor(bicho) { mama(); }
class ave(bicho) { voa(); }

Foi ficando escuro, e de tão entretido
Homo hackeris tomou um susto com um zumbido
Vi, qt C this? (ou vixe o que é que é isso)
Não era o Superhomi nem o Supla.Era só um morcego! Mas que droga!

Ei, Stroustrupitecus: precisamos de herança múltipla.

Posted in Humor | Leave a comment

FISL 7 – Terceiro Dia

Caracas! Cada dia fica melhor. Pela manhã me encontrei com a galera no meio dos estandes e comecei a revisar a programação do dia.

Fui interrompido pelo Borg solitário da M$ (um cara vestido de preto com umas ropuas reluzentes e fantasia cyberpunk) que veio me assimilar, mas o Binhara do projeto MONO (vestindo a sua capa que é a bandeira do brasil com um símio no centro) em seguida me colou um carimbo do MONO que aparentemente cura a assimilação. Acho que é por isso que o Borg, apesar de estar assimilando todo-mundo, continuava uma coletividade de um único indivíduo.

Escolhi ver as seguintes palestras:

  • Front-end do gcc do Barbieri ( não conseguimos nem entrar, a lotação transbordou até o corredor)
  • Gnome Stuff pelo Miguel de Icaza (absolutamente show)
  • Plone no Desktop: Integração com Nautilus do Sidnei da Silva (screencasts, live action demos, muito massa)
  • Best practices for Python GUI development do Johan Dahlin (+d400 pessoas aplaudindo Python/Gtk/Gazpacho)
  • Resolvendo Quebra-cabeças com Python do Niemeyer (despensa comentários, só tenho pena de quem perdeu)
  • Xen-3: o estado da arte em virtualização do Murillo Bernardes (me decepcionei um pouco com esssa)
  • Common Lisp para o Homem Comum do Pedro Kroger ( bastante interessante, e Python foi muito citado!)
  • XUL – Desenvolvendo Apps para Mozilla/Firefox do Marcio Vieira (acho que já estava cansado e não aproveitei bem esta palestra, mas a tecnologia me interessa).
Posted in Congressos | Leave a comment

FISL 7 – Segundo Dia

Até umas 2:12 am, eu e o Dorneles “Deo” Tremea estavamos ainda trabalhando nos notebooks no quarto de hotel, diminuindo o prejuízo nos mailboxes abarrotados.

Resolvi fazer uma pausa, e gravar para a posteridade algumas pérolas do dia de hoje:

  • O Glauber me contou diversos fatos a respeito da idolatrada figura de “Chuck Norris”:
  • Greg “Google/ApacheChairman/SubversionMan” Stein veio dar um blá para a comunidade Python/Zope/Plone! Simpático, humilde, jeitão tranquilão compatível com o cabelo. Contou fofocas dos bastidores de uso de Python (entre outras tecnologias) no inner sanctum do quartel-general do Google. No fim, prometeu tentar liberar a versão do PEP-8 anabolizada, com guidelines internas de programação em Python adotada pelo Google.
  • No finzinho da dupla apresentação do LeoRochael e Jean “BigKahuna” Ferri sobre uso de Plone, depois de mostrarem como cadastrar eventos, notícias, incorporar páginas externas, mudar o main_template do Plone, e através do windowZ embutir um outro site (no caso foi o do Google) dentro de um Plone… um cara se levanta da platéia e pergunta: “O Plone suporta a geração de conteúdo dinâmico” ?
Posted in Congressos, Python | Leave a comment

FISL 7 – Primeiro Dia

Como sempre o FISL está muito massa. No primeiro dia (2006-04-19) rolaram 3 palestras relacionadas a Python: a do Dorneles (i18n e Plone), a minha (introdutória a ling.) e a do Humberto (TurboGears). A impressão que fica é de que o interesse pela linguagem tem aumentado.

Na parte da tarde, a rapaziada investiu um bom tempo em planejar o encontro PZP que irá ocorrer no segundo dia (2006-04-20), quem sabe se teremos a ilustre presença do Greg Stein ? Por conta dessa reunião preparatória perdi muitas palestras, acho que hj vou assistir mais.

O dia terminou com um jantar bacana, uma partida de Go entre o Klaus (aka Chuck Norris) e o LeoRochael (aka L-Array), e mais uma investida contra o PythonChallenge, na qual tenho a alegria de anunciar que o Deo acaba de avançar para o nível 22.

Postado originalmente em 23 de janeiro de 2007
Posted in Congressos | Leave a comment

FISL 7 – Oia quem apareceu no Zero Hora

Naturalmente não colocaram 15% de tudo que eu disse, nem todos os outros membros da comunidade que eu citei.

Posted in About Me, Congressos | Leave a comment

Struggling with CoreBlog and LinguaPlone

I’m still fighting to setup my own blog! Now, I converted CoreBlog2 to support LinguaPlone.

Posted in Blog | Leave a comment

At last we reveal ourselves to the Jedi

Sweating to setup my own blog. First I gave it a try with Blogspot but my Firefox 1.5 did not liked him very much.
So I started to seek out alternatives. CoreBlog2 was the next attempt, everything was fine until I installed LinguaPlone.

Crash, boom, bang! After a couple days off-line I re-installed CoreBlog and here we are.
I do not blame CoreBlog (that is why I’m still sticking to it) because I was to lazy to diagnose
what the real problem were at the time. Let’s see if it will hold steady.

Posted in Blog | Leave a comment