Posts
Ol\xE1,
Voc\xEA ainda n\xE3o respondeu ao convite de Rodrigo Senra, enviado em 9/29/2009 10:28:13 PM !
Para aceitar de fazer parte do caderno de endere\xE7os dele(a) e dar a ele(a) acesso aos seus dados no UNYK, clique aqui.
http://www.unyk.com/ml/77/3/?i=4456EBD761654F1CA1BB6556D3FF5F26&s=16441086
UNYK \xE9 um caderno de endere\xE7os inteligente e completamente privado. O caderno de endere\xE7os de seus contatos \xE9 atualizado automaticamente quando voc\xEA altera seus dados no site UNYK.com. Do mesmo modo, voc\xEA n\xE3o precisa mais gerenciar os dados de seus contatos, j\xE1 que o far\xE3o isto por voc\xEA.
Simples e gratuito\x85 UNYK j\xE1 conquistou 10 milh\xF5es de usu\xE1rios.
N\xE3o responda diretamente a esta mensagem. Caso voc\xEA tenha perguntas ou d\xFAvidas, por favor, entre em contato conosco: http://unyk.com/pt/Entre-em-contato-conosco
UNYK Inc., 1010 de Serigny, bureau 820, Longueuil, QC, J4K 5G7, Canada.
N\xE3o quero mais receber nenhum convite para utilizar UNYK da parte de Rodrigo Senra: cancelar minha inscri\xE7\xE3o
http://www.unyk.com/ml/250/74/?mid=9E97A6A87A748BA3&email=d1b2ea430fce4ada@moblog.vox.com&s=16441086
N\xE3o quero mais receber nenhum convite para utilizar UNYK: cancelar minha inscri\xE7\xE3o
http://www.unyk.com/ml/77/4/?i=4456EBD761654F1CA1BB6556D3FF5F26&s=16441086
UNYK, o primeiro caderno de endere\xE7os inteligente que se atualiza sozinho!
Ol\xE1,
Em 9/29/2009 10:28:13 PM, Rodrigo Senra lhe pediu para fazer parte do seu caderno de endere\xE7os Unyk para ter sempre acesso aos seus dados, e para que voc\xEA tenha sempre acesso aos dados dele(a).
Para aceitar o pedido dele(a), clique aqui.
http://www.unyk.com/ml/70/5/?i=4456EBD761654F1CA1BB6556D3FF5F26&s=16441086
Unyk \xE9 um sistema inteligente e simples que lhe permite gerenciar seus contatos e nunca perd\xEA-los de vista.
Agora voc\xEA n\xE3o precisa mais se preocupar com os dados dos seus contatos. Daqui pra frente, eles se encarregar\xE3o da gest\xE3o dos pr\xF3prios dados deles em seu caderno de endere\xE7os. Quando os dados deles forem modificados no site Unyk.com, o seu caderno de endere\xE7os ser\xE1 atualizado automaticamente. Quando voc\xEA modificar seus dados no site Unyk.com, o caderno de endere\xE7os deles no Unyk ser\xE1 atualizado automaticamente.
\xC9 realmente simples e \xE9 gratuito... UNYK j\xE1 tem 10 milh\xF5es de usu\xE1rios.
N\xE3o responda diretamente a esta mensagem. Caso voc\xEA tenha perguntas ou d\xFAvidas, por favor, entre em contato conosco: http://unyk.com/pt/Entre-em-contato-conosco
UNYK Inc., 1010 de Serigny, bureau 820, Longueuil, QC, J4K 5G7, Canada.
N\xE3o quero mais receber nenhum convite para utilizar UNYK da parte de Rodrigo Senra: cancelar minha inscri\xE7\xE3o
http://www.unyk.com/ml/250/74/?mid=9E97A6A87A748BA3&email=d1b2ea430fce4ada@moblog.vox.com&s=16441086
N\xE3o quero mais receber nenhum convite para utilizar UNYK: cancelar minha inscri\xE7\xE3o
http://www.unyk.com/ml/70/6/?i=4456EBD761654F1CA1BB6556D3FF5F26&s=16441086
UNYK, o primeiro caderno de endere\xE7os inteligente que se atualiza sozinho!
Convite pessoal de Rodrigo
Galera,
o site http://rodrigo.senra.nom.br está temporariamente fora do ar. Peço a paciência de todos enquanto termino a reformulação do site (e termino a migração de dados).
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:
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 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
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.
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.
O Borg
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.
A Programação
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).
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" ?
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.