11/21/2007
Usando o ZODB no Django
Mas como utilizar ele para web?
A resposta mais óbvia é Zope e Grok . São dois frameworks para web que utilizam ZODB como base de dados!
A resposta não tão óbvia é o Pylons . O Pylons é um framework que trabalha através de camadas (middlwares) onde você uma dessas camadas pode ser a implementação para suporte a ZODB.
E a resposta nada óbvia é o Django. O Django é um framework famoso pela sua coesão, mas isso não quer dizer que ele não pode ser facilmente integrado com outras ferramentas. Uma das provas disso é o tranquil, uma middlware que integra o Django ao SQLAlchemy .
Inspirado pela necessidade de usar o ZODB , por não querer usar Grok , Pylons ou outro e pela implementação do tranquil, implementei o django-zodb, uma middlware que integra o Django ao ZODB.
O endereço do projeto é: http://code.google.com/p/django-zodb/
Para instalar o projeto basta ler a página do wiki do projeto: http://code.google.com/p/django-zodb/wiki/Installation
No projeto tem um projeto em Django demonstrando como usar o django-zodb .
Ou seja usar ZODB com o Django também pode ser uma boa alternativa!
10/12/2007
SQLAlchemy no Django com tranquil
Em paralelo a isso foi criado um projeto chamado tranquil, que tem por objetivo integrar o SQLAlchemy no Django.
As features mais legais desse projeto implementado até o momento são:
- Usar tables, objects e mapper objects do SQLAlchemy no Django
- Manipular models do Django como se fossem objetos do SQLAchemy
O site do projeto é: http://code.google.com/p/tranquil/
10/08/2007
Sob nova direção
A minha entrada na equipe marca a saída de Osvaldo Santana da moderação da lista. O pedido de aposentadoria do Osvaldo, foi uma surpresa para mim. Desde que participo da comunidade ele é moderador da lista e fez bem esse trabalho enquanto esteve a frente da moderação. Por isso espero fazer esse trabalho da melhor maneira possível. E até já estou me familiarizando com o moderationtools ( ferramenta utilizada pelo Osvaldo para moderar a lista).

Se você programa em Python e não faz parte da lista, que tal se inscrever na lista e fazer parte dessa comunidade?. Mas, se você não programa em Python ainda, que tal se inscrever e conhecer essa linguagem que tem mudado o ponto de vista ( e a vida ) de muitos programadores?
9/27/2007
Instalando Django com Apache e Mod_Python no Ubuntu
Como no Ubuntu Python já vem instalado, é uma coisa a menos a se preocupar. Outra vantagem em usar o Ubuntu, ou qualquer distribuição baseada em Debian e a possibilidade de utilizar o apt-get para facilitar a instalação dos programas.
Então vamos aos passos:
1 - Instalando o Apache 2
Para instalar o Apache 2 no Ubuntu basta abrir o terminal e digitar apenas um apt-get
#sudo apt-get install apache2
Para ver se o Apache foi instalado com sucesso e está em funcionamento é só acessar http://localhost em seu navegador.
2 - Instalando mod_python
Para instalar o mod_python no Ubuntu não é muito diferente
#sudo apt-get libapache2-mod-python
3 - Instalando o Django
#sudo apt-get install python-django
4 - Configurando o Apache
Como o mod_python foi instalado via apt-get, o módulo já fica habilitado automaticamente.
Mas é necessário configurarmos nossa aplicação no Apache. Para isso temos que editar o http.conf da seguinte maneira:
Para editar o http.conf, é só digitar esse comando no terminal:
#sudo gedit /etc/apache2/http.conf
E adicionar as linhas a seguir:
<VirtualHost * >
<Location "/">
SetHandler python-program
PythonPath "['/home/seuusuario/projetos/'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE meuprojeto.settings
PythonDebug On
</Location>
</VirtualHost>
Onde informamos através do PythonPath o diretório onde ficam os seus projetos como no exemplo foi: '/home/seuusuario/projetos/'. E criamos a variável de ambiente DJANGO_SETTINGS_MODULE cujo valor é o local onde fica o settings.py onde "meuprojeto" é o nome do projeto.
Podemos ao invés de editar o http.conf editar o arquivo: /etc/apache2/sites-avaliable/default.
5 - Reiniciando o Apache
Após configurar o Apache é só reiniciar ele. Para reiniciar ele digite o comando abaixo:
#/etc/init.d/apache2 reload
Para testar é só acessar no seu navegador o endereço configurado!
Só para lembrar, o Django + Apache + Mod_python é uma ótima opção para deploy, ou seja, para rodar sua aplicação já finalizada. Para ser servidor de desenvolvimento não é recomendado a utilização do Apache e sim do próprio servidor de testes do Django.
9/16/2007
Django Sprint - status
No meu ponto de vista, tanto o Sprint mundial e o Sprint nacional foram um sucesso!
No Sprint mundial muitos tickets foram filtrados, vários erros resolvidos, novos itens criados e algumas coisas que não eram documentadas no Django agora tem documentação. Como os shortcuts [2], form preview [3]. Para conferir algumas coisas que foram feitas é só verificas os tickets com a palavra chave: sprintsept14 [4].
Eu tive uma humilde participação, sugerindo e criando um DataTimeInput, mas o aprendizado foi grande! Me interei mais no processo de colaboração do Django, como triagem de tickets, por exemplo.
Já no Sprint nacional, um dos grandes resultados é o site do DjangoBrasil que em breve deve estar no ar. Várias issues relacionadas ao desenvolvimento do site foram solucionadas [5]. Também foi criada a página sobre Django no Wikipédia, melhorada a página sobre Django no PythonBrasil, e algumas traduções foram feitas.
Todos que participaram estão de parabéns!!!!
Quem não pode colaborar não fique triste pois o trabalho não para por aqui! O Sprint foi apenas uma maneira de motivar os djangers a se unirem e a melhorarem o Django, mas a colaboração pode ser feita quando você quiser.
[1] - http://pyman.blogspot.com/2007/09/django-sprint.html
[2] - http://www.djangoproject.com/documentation/shortcuts/
[3] - http://www.djangoproject.com/documentation/form_preview/
[4] - http://code.djangoproject.com/query?status=new&status=assigned&status=reopened&group=stage&keywords=%7Esprintsept14&order=priority
[5] - http://code.google.com/p/djangobrasil/issues/list?can=1&q=&sort=status&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary%20Stars%20Opened
9/13/2007
Django Sprint
final de semana) ocorrerá um Django Sprint[1] pelo mundo todo. Ou
seja, será um dia onde os djangers focalizarão sua atenção em melhorar
o Django.
Um dos objetivos do Sprint é unir as features que estão prontas no
branch do django com o projeto atual, como o newforms-admin,
GeoDjango, suporte a multi-databases entre outras features. Outro
objetivo é resolver os tickets em aberto no sistema de tickets do
Django que chegam a mais de 1000 tickets em aberto.
Se você quiser participar é só acompanhar e adicionar seu nome na
página do wiki[1]. São mais de 100 pessoas do mundo todo inscritas!
Entre elas 9 são brasileiros!
Aproveitando o gancho do Sprint Mundial, a comunidade de Django aqui
no Brasil resolveu fazer um Sprint também, iniciando no mesmo dia (14) e prolongando até o dia 16. Esse Sprint tem como objetivo resolver
algumas coisas relacionadas ao site do djangobrasil, a tradução do
Django, tradução da documentação e alistamento e organização de dois projetos: bingo[2] ( um cms ) e ajaxforms[3] ( newforms + ajax).
Se você deseja participar, acesse a página da Sprint do Django
Brasil[4] para obter maiores informações e assinar a lista de
presença.
Eu já me inscrevi no Sprint Mundial e marcarei presença no Sprint do
djangobrasil também!!!
E aê? Vamos participar?
[1] http://code.djangoproject.com
[2] http://code.google.com/p/bingo/
[3] http://code.google.com/p/django-ajaxforms/
[4] http://groups.google.com/group
9/09/2007
Django Rapidinhas (1)
Eu resolvi fazer uma série de post's rápidos de dicas sobre Django. As 'Django Rapidinhas'.
E o tema de hoje é ordenar model's randomincamente no Django. Para isso precisamos de um model de exemplo. Vamos criar um model que represente um Aluno de uma escola ou faculdade.
class Aluno(models.Model):
nome = models.CharField(max_lenght=40)
idade = models.IntegerField()
Para retornarmos em uma lista todos os usuários usando o ORM do Django usamos o método all():
>> Aluno.objects.all()
Para ordenarmos essa lista usamos o método order_by, que necessita de um parâmetro informando o nome do campo que será a referência para a ordenação. Para um ordenação descendente adicionamos o '-' ao início do parâmetro e para uma ordenação ascendente não adicionamos nada, só o nome do campo basta.
Ordenar por nome, de forma ascendente:
>> Aluno.objects.all().order_by('nome')
Ordenar por nome de forma descendente:
>> Aluno.object.all().order_by('-nome')
E para ordenar randomicamente? É difícil?
A resposta é não. Pelo contrário. É muito fácil. É só passar uma interrogação (?) como parâmetro.
>> Aluno.objects.all().order_by('?')
Fácil não?
9/07/2007
PyConBrasil
Para começar, levei aproximadamente 30 horas de viagem para chegar em Joinville! Na viagem estava muito ansioso, por não conhecer ninguém da comunidade pessoalmente e por nunca ter participado de um PyCon e por começar dando um treinamento de um Framework Web que está iniciando em um ambiente onde há muitos desenvolvedores que utilizam Zope/Plone.
Meu primeiro contato com o pessoal, na Assembleia tirou todas essas baboseiras da minha cabeça.
Aliás a melhor coisa que estou trazendo do evento são as amizades que fiz lá. Realmente estava lá uma comunidade. Muito bate papo entre uma palestra e outra e nas palestras também. Muitas piadas e brincadeiras nos Happy Hour. O humor do pessoal é enorme.
No primeiro dia, eu participei dos dois treinamentos: sobre programação com python em celulares nokia e sobre Grok. Os dois treinamentos foram conceitos introdutórios, mas foram muitos importantes para conhecer um pouquinho sobre cada ferramenta. No final do primeiro dia fui avisado que teria uma mesa redonda sobre Python para Web e eu representaria o Django, Dorneles o Plone e Luciano Ramalho o Grok. Nós três tivemos a idéia de falarmos sobre cada ferramenta de forma divertida e contar porque cada um de nós a utilizamos. Foi bem divertido, arrancamos muitos rizos do pessoal, inclusive quando disse que não uso Plone por sua tela azul. Para quem quiser acho que em breve estará disponível na Web.
No segundo dia, comecei tentando arrumar o meu computador e o laboratório para dar o treinamento de Django e também não assisti quase palestras. Uma das poucas palestras que assisti foi a do Gustavo Neimayer sobre Storm que foi muito legal.
A experiência de ministrar um treinamento sobre Django foi muito legal! A sala estava lotada! Vi que muitas pessoas tem interesse sobre o framework, mas percebi também que muitos não sabem por onde começar! E o treinamento tinha essse objetivo, mostrar como iniciar no Django.
No último dia eu eu resolvi não fazer nenhum treinamento, para poder assistir as palestras.
Resumindo na PyCon foram abordados muitos assuntos como: Eagle, GTK, QT, WxPython, Maemo, PyJamas, Django, Grok, Zope, Plone, TurboGears, SqlAlchemy, IronPython, Shuberry, Gimp, PyGame, Gsoc. E assuntos como Python no ensino de estatística, no ensino de computação, na ciência. E teve uma palestra sobre motivação com o Dorneles Climber.
Para quem quiser ver as fotos oficiais do evento: http://picasaweb.google.com/PyConBrasil
A PyCon foi muito legal. Não vejo a hora de chegar a próxima.
Nos vemos lá.
8/16/2007
Baixando uma página com IronPython
Não. É possível baixar uma página em IronPython com a mesma quantidade de linhas que se usaria com o urrllib2.
Como que eu faço isso?
É bem simples. Veja:
>>> from System.Net import WebClient
>>> site = WebClient().DownloadString('http://pyman.blogspot.com')
>>> print site
E se eu quiser salvar uma página em um arquivo? Há uma maneira bem simples de se fazer isso com CPython. E com o IronPython como fica?
No IronPython a simplicidade é a mesma. Olha só:
>>> from System.Net import WebClient
>>> WebClient().DownloadFile('http://pyman.blogspot.com', 'pyman.html')
Legal esse IronPython ein!!!!
----------------------------
Gostaria de deixar bem claro, que este post é uma resposta a um post [1] feito pelo meu amigo Walter Cruz sobre o mesmo assunto.
Outras referências sobre o assunto:
[1] - http://devlog.waltercruz.com/baixando_pagina_com_python
[2] - http://andrzejonsoftware.blogspot.com/2007/05/how-to-download-web-page-with.html
[3] - http://www.voidspace.org.uk/python/weblog/arch_d7_2007_08_11.shtml#e790
8/09/2007
Django na PyCon Brasil
Esse ano a PyCon Brasil [1] contará com duas palestras e um treinamento básico sobre Django. Aliás o treinamento, será ministrado por este singelo djanger que vos escreve (eu). Essa participação de djangers na PyCon é uma avanço, já que será o primeiro PyCon Brasil que conta com palestras e treinamentos relacionados ao Django.
O Django é um dos frameworks para desenvolvimento rápido para web em Python com mais ascensão no Brasil. Devido ao crescimento da comunidade aqui no país, que começou a se formar em dezembro do ano passado com uma lista de discussão no google groups [2]. Um sintoma do crescimento da comunidade Django aqui no Brasil é a participação de djangers brasileiros no planet oficial do django, além das participações de brasileiros na listas de discussões oficiais do Django [3].
Se você curte Python, Django, quer aprender mais sobre Python, Django, Zope, conhecer os amantes dessa linguagem e saber o que a galera anda fazendo com Python aqui no Brasil. Comece a arrumar as suas malas, ainda há tempo de fazer sua inscrição [4].
Ótima oportunidade de aprender e fazer amigos!
[1] - http://pyconbrasil.com.br/
[2] - http://groups.google.com/group/django-brasil
[3] - http://www.djangoproject.com/community/
[4] - http://pyconbrasil.com.br/sobre-o-evento/inscricao
5/31/2007
Uma imagem vale mais que mil palavras
5/16/2007
Adeus Vim!
Se eu programasse em outra linguagem, não teria problemas, mas como programo em Python identação errada é sinonimo de código errado.
Já tive esse problema com o Vim uma vez, e para resolver, usei o IDLE para arrumar as identações de todos os códigos de um sistema que havia feito em django e com a reincidência do problema, vou aposentar o Vim.
Andei olhando vários editores e um deles me agradou muito, O Scite [1].
Algumas características dele:
- Suporta várias linguagens
- Exporta o código para html, pdf
- Auto-identação
- Suporta temas de cores, mas devem serem configurados manualmente
- É bem leve
- É suportado por windows/linux
[1] - http://www.scintilla.org/SciTE.html
5/06/2007
Tipagem dinâmica + OO, é disso que o povo gosta
Mas o mais surpreendente foi o que aconteceu com ruby que passou de 19º para 10º subindo 9 posições.
O fato de Python e Ruby estarem alcançando a popularidade dos programadores é algo que pode ser comprovado por um fato que consta na mesma pesquisa da tiobe, que a popularidade de linguagens orientada a objetos continua crescendo e que a popularidade de linguagens com tipagem dinâmica vem crescendo bastante e se continuar dessa maneira alcançará e ultrapassará o nível de aceitação das linguagens com tipagem estática.
Isso acontece porque, pelo menos na minha opinião, as linguagens mais simples, fáceis e com menos 'burocracias', continuem a ganhar a confiança de cada vez mais programadores.
A prova real de que essas linguagens estão agradando é o fato da Microsoft utilizar o Python e Ruby através do IronPython e do IronRuby como linguagens dinâmicas para a mais nova menina dos olhos da Microsoft, o Silverlight.
Muitos podem contestar dizendo que tipagem estática é uma auto-documentação e por isso é mais simples e fácil e bla e blé e bli, mas o duck typing é a maior prova de que se a ave fizer 'Quá quá', ela não precisa ter um crachá de pato para sabermos que elá não é um pavão e sim um pato.
[1] - http://www.tiobe.com/index.htm?tiobe_index
4/12/2007
Ruby e Python duas irmãs de pais diferentes.
Ruby foi desenvolvida por Yukihiro Matsumoto, com o objetivo de criar uma linguagem simples, mas poderosa. Já python, foi criada por Guido Van Rossum em 1991, com o objetivo de criar uma linguagem simples com fácil aprendizado.
Assim nasceram duas irmãs.
Digo duas irmãs porque no mundo da programação elas têm características parecidas entre si, ambas são bonitas, simpáticas, ousadas, mas uma (ruby) é mais atrevida, outra (python) é mais organizada.
>>>if “ola” == “ola”:
print “ola”
Já ruby é mais atrevida com seus blocos flexíveis.
>>if “ola” == “ola”: puts “ola” end
puts “ola”
end
Ambas são interpretadas, e tem seu ambiente interativo e também com tipagem de forma dinâmica, não precisando informar de qual tipo aquela variável será. Se eu quiser números:
>>>valor = 1
E não:
int valor = 1
Objetos? Nelas tudo são objetos. Um ‘oi’ é objeto, um ‘tchau’ é objeto também, e um número? Lógico que é objeto. Mesmo tudo sendo objeto não é necessário programar orientando a objetos. Se quiser cumprimentar:
puts ‘oi’
Ouprint ‘oi’
Ou se despedir
puts ‘adeus’Ou
print ‘adeus’
Ruby voa nos trilhos da web (rubyonrails), como se fosse um trem bala.
Já python conquistou as buscas na web (google), os vídeos (youtube), os efeitos 3D (blender), e até o espaço (NASA).
Como podem ver, as duas são atraentes. Então qual escolher?
Fique tranqüilo!
4/08/2007
IronPython o Python para .NET
Com isso temos a integração do .NET Framework e sua bibliotecas, como o WindowsForms, com o Python.
Para ter o IronPython basta fazer o download dele aqui. E para que ele funcione direitinho é necessário o .NET Framework que pode ser baixado aqui.
Para acessar o console do IronPython basta executar o ipy.exe.
Programando algumas coisas no console poderá ver que os comando básicos do Python funcionam perfeitamente. Por exemplo:
>>> print 'ola IronPython'
ola IronPython
>>>range(3)
[0,1,2]
>>>def soma(a,b):
return a+b
>>>soma(1,2)
3
Agora usando uma biblioteca do .NET Framework
>>>import System
>>>System.Environment.OSVersion
Microsoft Windows NT 5.1.2600 Service Pack 2
E agora para finalizar este post sobre o básico do básico do IronPython, usando as bibliotecas padrão do Python no IronPython. Para isso, é só adicionar o caminho da pasta lib do Python no path. Se o seu Python for a versão 2.4, ficaria assim:
>>>import sys
>>>sys.path.append(r"c:\python24\lib")
E agora usando a biblioteca do Python no IronPython:
>>>import os>>>os.getcwd()
'C:\\ironpython'
IronPyth9on funciona independente de ter Python instalado, mas daí não tem como utilizar a biblioteca padrão do Python no IronPython.
Só para finalizar...
Se você quer trabalhar com .NET, IronPython é uma grande alternativa para escolha de linguagem, já que as outras opções são C#, J#, VB.NET.
E com o projeto mono, sua aplicação usando IronPython fica portável tnato em ambientes Windows como Linux.
Para saber mais acesse o site do projeto: http://www.codeplex.com/IronPython
2/28/2007
Python direto do Pen Drive
Isso é possível através do projeto Portable Python [1].
Na sua versão atual ( 1.0 BETA ) já vem o Python 2.5, Django 0.96 (eba!!!), e o editor Scite 1.71.
Com o Portable Python é possível criar sistemas usando django + sqlite ( por exemplo ) e executá-los direto do Pen Drive. Quer dizer não precisa ser nessariamente um Pen Drive, pode ser uma camera digital, um mp3player e etc.
=]
[1] - http://www.portablepython.com/site/download/
1/30/2007
MySQLdb + Python 2.5 no windows
Um grande exemplo é o MySQLdb, o módulo para acesso ao MySQL no Python. Esse projeto não permite nem a instalação no windows para Python 2.5, fazendo com que muitos continuem com o Python 2.4.3 ou migrem para Linux, basta apenas um pesquisa no Google por 'MySQLdb in Python 2.5' para ver a instatisfação de muitos programadores.
Mas depois de horas e horas na internet, procurando alguma solução achei um instalador do modulo MySQLdb para Python 2.5. Se você tinha esse problema, assim como eu, agora é só fazer o donwload dele clicando aqui.
Depois do módulo instalado é só testar e usar:
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
****************************************************************
Personal firewall software may warn about the connection IDLE
makes to its subprocess using this computer's internal loopback
interface. This connection is not visible on any external
interface and no data is sent to or received from the Internet.
****************************************************************
IDLE 1.2
>>> import MySQLdb
>>>
1/03/2007
Ano novo PythonBrasil novo!!!!!
Para que não sabe PythonBrasil é o site da comunidade Python brasileira.
O visual do novo site ficou bem legal. E a disposição das informações também.
Aproveitei que estou de folga e ajudei na construção de algumas páginas novas. E espero continuar colaborando.
ah, antes que eu esqueça.
Feliz 2007 para todos....
12/15/2006
Powered by Python
Os principais nomes são: Google, Nasa, o Governo Federal Brasileiro, Varig, IDG Now...
e agora um dos sites mais acessado do mundo tamém entra nessa lista: YouTube!
Você ainda não faz parte dessa lista? Ainda ta em tempo ein!!!!
=]
12/11/2006
Qual interface gráfica usar?
O grande problema não está relacionada com a falta de recursos que python tem ou com dificuldade de programar interfaces e sim na grande variedade de bibliotecas disponíveis para Python. Sendo assim, no começo é bem complicado escolher qual utilizar.
Nesse post vou tratar das seguintes bibliotecas: PyGTK, PyQt, wxPython, PySWT, PyUi e Tkinter.
Tkinter
Acompanha a distribuição oficial do interpretador Python. É simples de utilizar, mas é muito pobre em componentes visuais. Uma grande vantagem que é portável em qualquer ambiente em que funcione o Python.
PyGTK
Baseada no GTK do GNOME, tem ricos componentes visuais e boa performance. Dois problemas que acompanham essa biblioteca é a portabilidade e o tamanho do código.
O GTK funciona também no Windows, mas não é algo confiável e fácil de se fazer...
Em relação ao tamanho do código, na sintaxe do PyGTK é necessário a utilização de comandos retundantes em muitas partes do código, assim necessitando de muitas linhas de código para se fazer algo.
PyQt
Baseada na biblioteca QT do KDE, tambem tem boa performance e ótimos componentes visuais, e a estrutura de programação em PyQt é boa, diferente do PyGTK.
O lado ruim dessa biblioteca é a portabilidade. Ela funciona em Linux perfeitamente, mas em ambientes Windows, tem os mesmos problemas que o PyGTK.
Além disso PyQt é licenciado pela GPL. Sendo assim tem alto custo para desenvolvimento para sistemas comerciais.
wxPython
Baseada em wxWindows, funciona no Windows e no Linux. Rica em componentes visuais e bem documentada. Mas é dificil de se aprender, é um poco instável, e a API é meio complicada.
PySWT
baseada no SWT do JAVA. Rica em componentes visuais e facil de utilizar. Ao meu ver, muito boa. MAs muito pouco utilizada...
PyUi
é uma biblioteca feita com o intuito de se desenvolver interfaces para jogos. Utiliza pygame.. Mas pode ser usadas para qualquer tipo de aplicação.
Conclusão:
* Tkinter - no caso de uma aplicação que não necessite grande apelo visual
* PyQT - para qualquer aplicação que seja GPL e em Linux
* PyGTK - para qualquer caso em que a PyQT não seja uma boa opção, como em aplicações comerciais
* PyUi - para desenvolver Interfaces para Games
Agora no caso de desenvolver bons aplicativos para Windows ainda fica a pergunta PySWT ou wxPython? wxPython é mais utilizada. Mas será que maior popularidade influi em melhor opção?
Eu estou testando as duas e espero encontrar a resposta...
