<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pythonologia, o blog da Triveos</title>
	<atom:link href="http://blog.triveos.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.triveos.com.br</link>
	<description>Python e Django — Cursos e Desenvolvimento Web</description>
	<lastBuildDate>Tue, 24 Aug 2010 23:46:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>PythonBrasil [6] – Curitiba, 21 a 23 de outubro</title>
		<link>http://blog.triveos.com.br/2010/08/12/ythonbrasil-6-curitiba-21-a-23-de-outubro/</link>
		<comments>http://blog.triveos.com.br/2010/08/12/ythonbrasil-6-curitiba-21-a-23-de-outubro/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 22:04:27 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[geral]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/?p=712</guid>
		<description><![CDATA[Como não podia deixar de]]></description>
			<content:encoded><![CDATA[<p>Como não podia deixar de ser esse ano teremos mais uma edição do encontro brasileiro da comunidade Python: a <a href="http://www.pythonbrasil.org.br/">PythonBrasil [6]</a>.</p>
<p><a href="http://www.pythonbrasil.org.br/"><img src="http://blog.triveos.com.br/wp-content/uploads/logo1.png" alt="Logotipo da PythonBrasil [6]" title="PythonBrasil [6] — Curitiba, 21 a 23 de outubro" width="480" height="120" class="aligncenter size-full wp-image-713" /></a></p>
<p>Das seis edições do evento eu só não pude ir na que aconteceu no ano passado. Essa ausência me &#8220;dói&#8221; até hoje e eu ainda sou corroído por uma &#8220;invejinha&#8221; de quem foi.</p>
<p>A PythonBrasil tem muitas características que eu gosto de ver em eventos de tecnologia: formatos inovadores (palestras relâmpago, open spaces) além das tradicionais apresentações e cursos, a presença de uma turma realmente especial de desenvolvedores extremamente experientes, um evento com a &#8220;mente aberta&#8221; (já é praxe convidar palestrantes para falar de outras linguagens de programação), etc, etc.</p>
<p>Esse ano teremos algo ainda mais especial: o evento acontece aqui na nossa cidade: Curitiba.</p>
<p>Se você quer participar de um evento muito legal eu recomendo que você <a href="http://www.pythonbrasil.org.br/2010/sobre-o-evento/inscricoes">faça sua inscrição</a>. Se você já usa Python e tem coisas legais para mostrar para nós <a href="http://www.pythonbrasil.org.br/2010/sobre-o-evento/inscricoes/2010/sobre-o-evento/chamada-de-trabalhos">submeta uma proposta</a> de palestra ou curso.</p>
<p>Nós da <a href="http://www.triveos.com.br/">Triveos</a> estaremos por lá e (se nossas propostas forem aprovadas) apresentaremos algumas das coisas que estamos fazendo com Python e Django. Além disso vamos distribuir alguns brindes para os participantes do evento.</p>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/08/12/ythonbrasil-6-curitiba-21-a-23-de-outubro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando Django com IIS e SQL Server</title>
		<link>http://blog.triveos.com.br/2010/08/04/usando-django-com-iis-e-sql-server/</link>
		<comments>http://blog.triveos.com.br/2010/08/04/usando-django-com-iis-e-sql-server/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 20:46:26 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[geral]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/?p=682</guid>
		<description><![CDATA[As distribuições Linux e o]]></description>
			<content:encoded><![CDATA[<p>As distribuições Linux e o Mac OS X já possuem uma instalação bastante completa de Python e instalar o Django é rápido e fácil nesses ambientes.</p>
<p>Como o Django suporta &#8220;oficialmente&#8221; os servidores Web e de banco de dados mais comuns no mundo <em>open-source</em> (Apache, nginx, lighttpd, MySQL, PostgreSQL, etc) a documentação dele está repleta de exemplos sobre como fazer um <em>deploy</em> nesses ambientes.</p>
<p>Mas e se você trabalha num ambiente onde a plataforma da Microsoft é usada intensamente? E se você usa o IIS como servidor Web e o SQL Server como banco de dados relacional, seria possível usar o Django?</p>
<p>A resposta é sim, mas por não ser suportado &#8220;oficialmente&#8221; a configuração desses ambientes não é muito documentada nem é muito simples (ao menos pra nós que não trabalhamos intensamente com a plataforma da Microsoft).</p>
<p>Vamos descrever os passos necessários para colocar esse ambiente &#8220;no ar&#8221;.</p>
<a name="wptoc_0_0_0"></a><h2>Baixando e instalando o Python</h2>
<p>O jeito mais fácil de instalar o Python na plataforma Windows é com o <a href="http://www.activestate.com/activepython/">ActivePython</a> distribuido pela ActiveState. Além da instalação padrão do Python essa distribuição inclui módulos e bibliotecas muito úteis no ambiente Windows.</p>
<a name="wptoc_0_0_1"></a><h2><strong>Nota, a versão recomendada é a Active Python 2.5. Os screenshots são meramente ilustrativos</strong></h2>
<div id="attachment_684" class="wp-caption aligncenter" style="width: 454px"><a href="http://blog.triveos.com.br/wp-content/uploads/001.png"><img class="size-medium wp-image-684" title="Active Python da ActiveState" src="http://blog.triveos.com.br/wp-content/uploads/001-444x300.png" alt="Site para Download do Active Python da ActiveState" width="444" height="300" /></a><p class="wp-caption-text">Active Python da ActiveState</p></div>
<p>Acessando o site e clicando no link para <a href="http://www.activestate.com/activepython/downloads/">download</a> você será encaminhado para um formulário cujo preenchimento é opcional e o download será iniciado.</p>
<div id="attachment_685" class="wp-caption aligncenter" style="width: 450px"><a href="http://blog.triveos.com.br/wp-content/uploads/002.png"><img class="size-medium wp-image-685" title="Formulário cujo preenchimento é opcional" src="http://blog.triveos.com.br/wp-content/uploads/002-440x300.png" alt="Tela com Formulário cujo preenchimento é opcional" width="440" height="300" /></a><p class="wp-caption-text">Formulário cujo preenchimento é opcional</p></div>
<p>Assim que o download terminar é só executar o instalador e seguir as instruções.</p>
<div id="attachment_689" class="wp-caption aligncenter" style="width: 392px"><a href="http://blog.triveos.com.br/wp-content/uploads/005.png"><img class="size-medium wp-image-689" title="Seguindo as instruções do instalador" src="http://blog.triveos.com.br/wp-content/uploads/005-382x300.png" alt="Seguindo as instruções do instalador" width="382" height="300" /></a><p class="wp-caption-text">Seguindo as instruções do instalador</p></div>
<a name="wptoc_0_0_2"></a><h2>Instalando o Django e suas dependências</h2>
<p>Para facilitar o trabalho, a Triveos desenvolveu um instalador que já instala o Django e outros pacotes necessários (<strong>que funciona APENAS com o Active Python 2.5</strong>) Baixe-o <a href="http://code.google.com/p/wissd/downloads/list">aqui</a> </p>
<p>Mas se desejar instar o Django manualmente continue lendo.</p>
<p>O procedimento para instalar o Django e parte de suas dependências segue no &#8220;Prompt de Comandos&#8221;. O ActivePython já colocou os diretórios do Python no PATH do sistema e instalou as ferramentas necessárias para baixar e instalar o Django e suas dependências (setuptools/easy_install/pip).</p>
<p>Agora é só a gente criar um ambiente isolado de trabalho (que chamaremos de &#8216;gerenciador&#8217;) com o virtualenv e instalar o Django com o pip.</p>
<div id="attachment_690" class="wp-caption aligncenter" style="width: 489px"><a href="http://blog.triveos.com.br/wp-content/uploads/009.png"><img class="size-medium wp-image-690" title="Instalando o Django" src="http://blog.triveos.com.br/wp-content/uploads/009-479x300.png" alt="Instalando o Django" width="479" height="300" /></a><p class="wp-caption-text">Instalando o Django</p></div>
<pre>C:\Users\usuario&gt; virtualenv gerenciador
C:\Users\usuario&gt; cd gerenciador
C:\Users\usuario\gerenciador&gt; Scripts\activate.bat
(gerenciador) C:\Users\usuario\gerenciador&gt; pip install django</pre>
<a name="wptoc_0_0_3"></a><h2>Criando um projeto Django</h2>
<p>Com o que a gente já fez é possível iniciar um projeto Django que, posteriormente, armazenara seus dados num servidor SQL Server e será acessível através de um servidor IIS. Esse projeto também se chamará &#8216;gerenciador&#8217; e será criado dentro do nosso ambiente virtual que tem o mesmo nome: &#8220;<code>C:\Users\usuario\gerenciador\gerenciador</code>&#8220;.</p>
<div id="attachment_693" class="wp-caption aligncenter" style="width: 489px"><a href="http://blog.triveos.com.br/wp-content/uploads/010.png"><img class="size-medium wp-image-693" title="Criando o projeto 'gerenciador'" src="http://blog.triveos.com.br/wp-content/uploads/010-479x300.png" alt="Criando o projeto 'gerenciador'" width="479" height="300" /></a><p class="wp-caption-text">Criando o projeto </p></div>
<pre>(gerenciador) C:\Users\usuario\gerenciador&gt; python Scripts\django-admin.py startproject gerenciador
(gerenciador) C:\Users\usuario\gerenciador&gt; cd gerenciador
(gerenciador) C:\Users\usuario\gerenciador\gerenciador&gt;</pre>
<a name="wptoc_0_0_4"></a><h2>Configurando o acesso ao SQL Server</h2>
<p>Para que seja possível acessar um banco de dados SQL Server a partir de uma aplicação feita em Django é necessário instalar o <em>backend</em> do mesmo já que ele não faz parte da instalação padrão do Django. O projeto que implementa esse backend fica no endereço: <a href="http://code.google.com/p/django-mssql/">http://code.google.com/p/django-mssql/</a>.</p>
<p>Para que o backend funcione é necessário colocar o diretório &#8220;<code>[django-mssql]/source/sqlserver_ado/</code>&#8221; em um caminho do <code>PYTHONPATH</code>. No nosso caso vamos colocá-lo dentro do diretório do nosso próprio projeto. Para facilitar o nosso trabalho é só<a href="http://blog.triveos.com.br/wp-content/uploads/sqlserver_ado.zip"> baixar o arquivo</a> com o <em>backend</em> e descompactá-lo dentro do diretório do nosso projeto Django.</p>
<div id="attachment_698" class="wp-caption aligncenter" style="width: 337px"><a href="http://blog.triveos.com.br/wp-content/uploads/013.png"><img class="size-medium wp-image-698" title="Criando o banco de dados" src="http://blog.triveos.com.br/wp-content/uploads/013-327x300.png" alt="Criando o banco de dados" width="327" height="300" /></a><p class="wp-caption-text">Criando o banco de dados</p></div>
<p>Crie o banco de dados que será usado por nossa aplicação no SQL Server e certifique-se de usar a autenticação por senha e não a autenticação Windows (que não é suportada pelo <em>backend</em>).</p>
<div id="attachment_701" class="wp-caption aligncenter" style="width: 602px"><a href="http://blog.triveos.com.br/wp-content/uploads/050.png"><img class="size-medium wp-image-701" title="Banco de dados &quot;django&quot; criado" src="http://blog.triveos.com.br/wp-content/uploads/050-592x300.png" alt="Banco de dados &quot;django&quot; criado" width="592" height="300" /></a><p class="wp-caption-text">Banco de dados </p></div>
<p>Agora é só configurar a conexão no arquivo <code>settings.py</code> do nosso projeto.</p>
<div id="attachment_702" class="wp-caption aligncenter" style="width: 299px"><a href="http://blog.triveos.com.br/wp-content/uploads/055.png"><img class="size-medium wp-image-702" title="Configuração do projeto" src="http://blog.triveos.com.br/wp-content/uploads/055-289x300.png" alt="Configuração do projeto" width="289" height="300" /></a><p class="wp-caption-text">Configuração do projeto</p></div>
<p>Assim que a gente rodar um <code>python manage.py syncdb</code>&#8230;</p>
<div id="attachment_703" class="wp-caption aligncenter" style="width: 399px"><a href="http://blog.triveos.com.br/wp-content/uploads/060.png"><img class="size-medium wp-image-703" title="Rodando o &quot;syncdb&quot;" src="http://blog.triveos.com.br/wp-content/uploads/060-389x300.png" alt="Rodando o &quot;syncdb&quot;" width="389" height="300" /></a><p class="wp-caption-text">Rodando o </p></div>
<p>&#8230; as tabelas serão criadas no banco de dados.</p>
<div id="attachment_704" class="wp-caption aligncenter" style="width: 556px"><a href="http://blog.triveos.com.br/wp-content/uploads/070.png"><img class="size-medium wp-image-704" title="Tabelas prontas para serem usadas" src="http://blog.triveos.com.br/wp-content/uploads/070-546x300.png" alt="Tabelas prontas para serem usadas" width="546" height="300" /></a><p class="wp-caption-text">Tabelas prontas para serem usadas</p></div>
<a name="wptoc_0_0_5"></a><h2>Configurando o IIS</h2>
<p>Devo confessar que essa foi a parte mais complicada do trabalho!</p>
<p>Antes de instalar o seu projeto no IIS <strong>teste-o</strong> usando o manage.py.</p>
<p>Para facilitar o trabalho, a Triveos desenvolveu um instalador (<strong>que funciona APENAS com o Active Python 2.5</strong>) Baixe-o <a href="http://code.google.com/p/wissd/downloads/list">aqui</a></p>
<p>Este instalador instala o Django e todas os pacotes necessários (django-mssql e isapi-wsgi). Exige o Active Python 2.5</p>
<p>Após instalado, faça da seguinte forma:</p>
<p>1 &#8211; crie o diretório que vai receber o seu projeto no IIS (pode ser dentro do c:\inetpub)<br />
2 &#8211; crie o arquivo handler de WSGI neste diretório, assim:</p>
<pre>import os, sys 

#inclua aqui o caminho para o seu projeto
#é comum incluir o caminho para o diretório do projeto e seu pai
sys.path.append('C:\\django_projects')
sys.path.append('C:\\django_projects\\example_project') 

#configure aqui para apontar para o arquivo de settings de seu projeto
os.environ['DJANGO_SETTINGS_MODULE'] = 'example_project.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler() 

import isapi_wsgi
# The entry points for the ISAPI extension.
def __ExtensionFactory__():
    return isapi_wsgi.ISAPISimpleHandler(application)</pre>
<p>3 &#8211; salve o arquivo com algum nome (por exemplo, wsgi.py)<br />
4 &#8211; Busque dentro do diretório do Python o arquivo PyISAPI_loader.dll (normalmente em C:\Python25\Lib\site-packages\isapi). Copie-a para o diretório com o mesmo nome do arquivo .py (com extensão .dll) mas precedido de um caracter &#8216;_&#8217; (underscore). Assim, se o arquivo foi salvo como wsgi.py, copie a dll e a renomeie para _wsgi.dll<br />
5 &#8211; Para os diretórios de media e admin_media, você deverá incluir <em>Virtual Directories</em> do IIS apontando para eles<br />
<div id="attachment_725" class="wp-caption aligncenter" style="width: 556px"><a href="http://blog.triveos.com.br/wp-content/uploads/virtual_dir.png"><img src="http://blog.triveos.com.br/wp-content/uploads/virtual_dir-425x300.png" alt="" title="virtual_dir" width="425" height="300" class="alignnone size-medium wp-image-725" /></a><p class="wp-caption-text">Virtual dirs para admin media</p></div></p>
<p>6 &#8211; Finalmente crie os mapeamentos da seguinte forma:</p>
<p>Nas configurações do site, em Handler Mappings adicione um Script Map da seguinte forma:<br />
-Request Path: *<br />
-Executable: aponte para a .dll dentro do diretório<br />
-Nome: como desejado</p>
<p>Crie um mapeamento para StaticFileModule para os caminhos que apontam para os virtual dirs. Infelizmente é necessário criar um mapeamento para todos os subdiretórios. (ou seja, é necessário criar um mapeamento para admin_media/css/*, admin_media/js/* admin_media/img/*)</p>
<div id="attachment_724" class="wp-caption aligncenter" style="width: 556px"><a href="http://blog.triveos.com.br/wp-content/uploads/module_mapping3.png"><img src="http://blog.triveos.com.br/wp-content/uploads/module_mapping3-505x300.png" alt="" title="module_mapping3" width="505" height="300" class="alignnone size-medium wp-image-724" /></a><p class="wp-caption-text">Module mappings não ordenados</p></div>
<p>Ordene os mapeamentos colocando os de media primeiro e o Script Map por último.</p>
<p>Se tudo der certo o seu site está funcionando no IIS agora!</p>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/08/04/usando-django-com-iis-e-sql-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interface Admin do Django: um baita quebra-galho.</title>
		<link>http://blog.triveos.com.br/2010/07/02/interface-admin-do-django-um-baita-quebra-galho/</link>
		<comments>http://blog.triveos.com.br/2010/07/02/interface-admin-do-django-um-baita-quebra-galho/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 00:57:42 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[geral]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/?p=645</guid>
		<description><![CDATA[Já faz algum tempo que]]></description>
			<content:encoded><![CDATA[<p>Já faz algum tempo que nós aqui na <a href="http://www.triveos.com.br/" title="Triveos — Aplicações e sistemas para Web. Especialistas Python e Django">Triveos</a> estamos usando <a href="http://www.djangoproject.com/">Django</a> e <a href="http://www.python.org/">Python</a>. Também tenho apresentado palestras e ministrado cursos de Django em vários lugares. Temos até mesmo um <a href="http://www.ludeos.com.br/store/triveos-cursos-online/">curso online de Python e Django</a> à venda em um site desenvolvido em Django.</p>
<div id="attachment_652" class="wp-caption aligncenter" style="width: 403px"><a href="http://blog.triveos.com.br/wp-content/uploads/shot-2010-07-02-at-9.20.12-PM.png"><img src="http://blog.triveos.com.br/wp-content/uploads/shot-2010-07-02-at-9.20.12-PM-393x300.png" alt="A Interface Admin do Django" title="A Interface Admin do Django" width="393" height="300" class="size-medium wp-image-652" /></a><p class="wp-caption-text">A Interface Admin do Django</p></div>
<p>Todos os programadores Django adoram falar sobre um dos grandes diferenciais desse framework: <a href="http://docs.djangoproject.com/en/dev/ref/contrib/admin/">A Interface Admin</a>.</p>
<p>Realmente, só quem desenvolve aplicações Web a bastante tempo e perdeu tempo precioso fazendo &#8220;telinhas de cadastro&#8221; sabe como essa tarefa é chata e pouco desafiadora. E todos que desenvolvem com Django agradecem a existência dessa funcionalidade.</p>
<p>A interface Admin do Django é prática, fácil de ser usada, e bonitinha. Uma mão na roda. Um baita quebra-galho. Até mesmo&#8230; mágica! A diferença entre um projeto entregue e um projeto atrasado.</p>
<p>Mas isso termina por aqui.</p>
<p>A interface de Admin do Django tem uma função clara: administrar o sistema. Tanto que ela foi feita para ser acessada só por usuários do &#8220;<a href="http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/sites.py#L136">staff</a>&#8220;.</p>
<p>Ela foi feita para que os desenvolvedores do site não percam tempo fazendo cadastros &#8220;bobinhos&#8221; que precisam ser mantidos só pelos funcionários da empresa.</p>
<p>O Django nasceu no mercado editorial e o primeiro projeto desenvolvido nele foi um gerenciador de conteúdo (CMS). A interface de Admin do Django servia (serve?) para que os editores, jornalistas, autores, etc. inserissem conteúdo nos sites dos jornais do grupo <a href="http://www2.ljworld.com/about/">The World Company</a>.</p>
<p>A interface Admin não foi feita para você desenvolver toda a sua aplicação nela. Ela é muito poderosa e até faz algumas coisas além de permitir somente a inclusão, visualização, alteração, e exclusão de conteúdo. Ela permite ordenar registros, efetuar buscas, definir ações, etc. Mas paramos por aí.</p>
<p>Funcionalidades mais elaboradas ou que precisam ser acessadas por pessoas que não fazem parte do &#8220;staff&#8221; continuam tendo o seu desenvolvimento necessário.</p>
<p>No site <a href="http://www.ludeos.com.br/" title="Cursos online - Ludeos">Ludeos</a>, que foi desenvolvido em Django, a interface Admin ainda é usada para verificar os pagamentos dos cursos, e na manutenção das lojas e produtos. O fato do Django oferecer essa funcionalidade pra gente fez a diferença entre um projeto &#8220;atrasado&#8221; e um projeto &#8220;no ar&#8221;.</p>
<p>Mas o uso da interface Admin é um fator limitante para o nosso uso do sistema. Fica claro que, para que o projeto evolua, será necessário tirar algumas dessas funcionalidades da interface de Admin.</p>
<p>Em resumo: usem a interface Admin, mas saibam que em determinado momento ela pode limitar as suas ações e, nestes casos, Django oferece outras alternativas pra te ajudar a deixar a interface Admin: <a href="http://docs.djangoproject.com/en/dev/topics/generic-views/">Generic Views</a>. Falaremos sobre elas em outra oportunidade.</p>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/07/02/interface-admin-do-django-um-baita-quebra-galho/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Pythonologia será o blog da Triveos</title>
		<link>http://blog.triveos.com.br/2010/06/18/pythonologia-sera-o-blog-da-triveos/</link>
		<comments>http://blog.triveos.com.br/2010/06/18/pythonologia-sera-o-blog-da-triveos/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 20:29:17 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[negócios]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/?p=565</guid>
		<description><![CDATA[Algumas pessoas já devem ter]]></description>
			<content:encoded><![CDATA[<p>Algumas pessoas já devem ter notado algumas mudanças ou até mesmo algum <em>flood</em> de <em>posts</em> antigos devem ter inundado os agregadores e leitores de notícias (pelo qual pedimos desculpas). Essas mudanças são conseqüência da mudança do blog Pythonologia que, a partir de agora, passa a ser o blog &#8220;oficial&#8221; da <a href="http://www.triveos.com.br/">minha empresa</a>.</p>
<a name="wptoc_0_0_0"></a><h3>Razões para a mudança</h3>
<ul>
<li>A Triveos, minha empresa, precisava ter um blog para falar sobre desenvolvimento de software, Python, Django e sobre empreendedorismo.</li>
<li>A opção de criar um blog novo foi rapidamente descartada por um motivo bastante claro: falta de tempo para atualizá-lo. Até então eu tinha 2 blogs e não conseguiria lidar com um terceiro.</li>
<li>Com o lançamento da versão online do nosso <a href="http://ludeos.com.br/store/triveos-cursos-online/">Curso de Desenvolvimento Web com Python e Django</a>, nós decidimos adotar a estratégia de fazer da Triveos a maior referência em desenvolvimento Python e Django do país (algo muito difícil de se fazer).</li>
<li>O Pythonologia é bem ranqueado nos sites de busca quando o assunto é Python e Django e torná-lo o blog da Triveos seria um passo interessante em direção ao nosso objetivo.</li>
</ul>
<a name="wptoc_0_0_1"></a><h3>O que muda</h3>
<ul>
<li>Posts com conteúdo mais &#8220;pessoal&#8221; ou não relacionado aos tópicos que nos interessavam foram migrados para o meu novo <a href="http://emailpubli.co.in/">blog pessoal</a>.</li>
<li>O Pythonologia ganhou um novo editor: @dsracoon. O Thiago é o meu sócio aqui na empresa e também é desenvolvedor.</li>
<li>A organização dos posts por tags (que eu havia abandonado) voltarão a funcionar.</li>
<li>A freqüência dos posts vai aumentar.</li>
<li>Foco exclusivo nos tópicos: Desenvolvimento, Web, Python, Django e Empreendedorismo.</li>
<li>Voltarei a fazer resenhas de livros relacionados aos tópicos do blog.</li>
<li>A publicidade do blog será restrita aos produtos da Triveos. Deixará de ser ostensiva e passará a ser informativa (aka saem Adsense, Submarino, etc).</li>
<li>O domínio <a href="http://www.pythonologia.org/">pythonologia.org</a> agora redireciona para <a href="http://blog.triveos.com.br/">blog.triveos.com.br</a> (nos casos dos posts &#8216;pessoais&#8217; ele redireciona para o blog &#8220;E-Mail Público&#8221;)</li>
</ul>
<a name="wptoc_0_0_2"></a><h3>O que não muda</h3>
<ul>
<li>Manteremos o tom informal e pessoal que, em nossa opinião, deve ser característica de todos os bons blogs.</li>
<li>O blog continua com a função de informar, ensinar e de compartilhar conhecimento sobre os tópicos listados acima. Não usaremos o blog como um painel de anúncios da Triveos.</li>
</ul>
<a name="wptoc_0_0_3"></a><h3>Conclusão</h3>
<p>Espero que quem já acompanha o blog continue a acompanhar e que novos leitores se interessem por ele.</p>
<p>Devido às mudanças (que foram grandes) é possível que alguns problemas aconteçam ao tentar acessar algum artigo. Agradeceríamos muito se vocês nos avisassem desses problemas postando um comentário aqui mesmo.</p>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/06/18/pythonologia-sera-o-blog-da-triveos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Django-ZODB 0.2rc1 lançado</title>
		<link>http://blog.triveos.com.br/2010/06/08/django-zodb-0-2rc1-lancado/</link>
		<comments>http://blog.triveos.com.br/2010/06/08/django-zodb-0-2rc1-lancado/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 21:05:32 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[geral]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/?p=483</guid>
		<description><![CDATA[Post rápido pra anunciar que]]></description>
			<content:encoded><![CDATA[<p>Post rápido pra anunciar que hoje eu subi o módulo <a href="http://bit.ly/djangozodb">django-zodb-0.2rc1</a> no <a href="http://pypi.python.org/">PyPI</a>. Publiquei essa versão para que outros pythonistas que usam Django e/ou ZODB possam colaborar com o projeto.</p>
<p>A ajuda que preciso com maior urgência é para corrigir os meus erros de inglês na documentação (deve ter toneladas deles no README.rst) e completá-la (removendo os XXX). Consertando os bugs que forem aparecendo e finalizando a documentação eu já lanço a versão 0.2final. Modificações que mudem a API só entram nessa versão se forem pra corrigir erros de design.</p>
<p>Novas funcionalidades podem ser incorporadas em um branch separado. O projeto está hospedado no <a href="http://github.com/triveos/django-zodb">github</a>, portanto, isso é fácil de se fazer. Tem uma mini-lista de coisas que ainda faltam ser feitas no fim do arquivo README.</p>
<div id="attachment_485" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.triveos.com.br/wp-content/uploads/django-zodb-layout.jpg"><img src="http://blog.triveos.com.br/wp-content/uploads/django-zodb-layout-300x300.jpg" alt="Layout provisório do site do projeto Django-ZODB" title="django-zodb-layout" width="300" height="300" class="size-medium wp-image-485" /></a><p class="wp-caption-text">Layout provisório do site do projeto Django-ZODB</p></div>
<p>Já tenho um template pronto para o site do projeto mas não poderei trabalhar nisso nos próximos dias. Se alguém quiser mexer nisso é só falar comigo.</p>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/06/08/django-zodb-0-2rc1-lancado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novo sistema de comentários</title>
		<link>http://blog.triveos.com.br/2010/05/05/novo-sistema-de-comentarios/</link>
		<comments>http://blog.triveos.com.br/2010/05/05/novo-sistema-de-comentarios/#comments</comments>
		<pubDate>Wed, 05 May 2010 17:06:38 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[geral]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/2010/05/05/novo-sistema-de-comentarios/</guid>
		<description><![CDATA[Quem acompanha o Pythonologia via]]></description>
			<content:encoded><![CDATA[<p>Quem acompanha o Pythonologia via feed não deve ter notado ainda mas quem visita o site regularmente deve ter notado que eu troquei o sistema de comentários do blog para o <a href="http://www.disqus.com">Disqus</a>.</p>
<p>Fiz essa troca pelos seguintes motivos:</p>
<ol>
<li>Centralização na moderação dos meus dois blogs: esse aqui e o <a href="http://emailpublico.tumblr.com">E-Mail Público</a></li>
<li>Opções &#8216;infinitas&#8217; de autenticação para comentários. Acho muito chato ter que me cadastrar em um blog para comentar e acredito que tem mais pessoas que pensam como eu.</li>
<li>Funcionalidades de &#8216;rede social&#8217; nos comentários. O seu perfil no Disqus é integrado e você pode usá-lo em qualquer blog que utilize esse sistema.</li>
<li>Quantidade grande de ferramentas providas automaticamente (sem a necessidade de instalar, e manter plugins do WP).</li>
</ol>
<p>Percebi que algumas páginas ainda exibem o sistema antigo de comentários (graças à toneladas de caches que eu uso nesse site). Podem usá-lo sem problema nenhum. Estou monitorando os dois sistemas e fazendo o &#8216;sync&#8217; entre eles o tempo todo. Pode demorar um pouquinho mais pro seu comentário aparecer no sistema novo mas aparece.</p>
<p>Se notarem algum problema mais grave é só entrar em contato comigo por e-mail ou via twitter mesmo.</p>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/05/05/novo-sistema-de-comentarios/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Trabalhando com Python e Django à moda Osvaldo</title>
		<link>http://blog.triveos.com.br/2010/04/25/trabalhando-com-python-e-django/</link>
		<comments>http://blog.triveos.com.br/2010/04/25/trabalhando-com-python-e-django/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 01:45:40 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[geral]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/?p=446</guid>
		<description><![CDATA[Esse post está aqui para]]></description>
			<content:encoded><![CDATA[<p>Esse post está aqui para ser usado por mim como referência futura mas, como pode ser útil para outras pessoas vou deixá-lo público aqui no blog.</p>
<a name="wptoc_0_0_0"></a><h2>Software</h2>
<p>Trabalhei muito tempo com Linux (e alguns outros Unices) e de três anos pra cá sou mais um Apple Fanboy que usa o excelente OS X. Mas acho que boa parte das dicas aqui ainda são úteis para usuários de Linux.</p>
<ul>
<li><strong>Terminal.app</strong> &#8211; Porque Mac é máquina pra &#8216;macho&#8217; :D</li>
<li><strong>bash</strong> &#8211; Pesadão, bloat, mas não consegui me habituar com outro. É o default do OS X.</li>
<li><strong>Vim</strong> &#8211; Esse é o editor pra tudo. É difícil de aprender a usar mas é um F1. Depois que aprendemos a lidar com ele a gente voa. Uso a versão texto que acompanha o OS X.</li>
<li><strong>TextMate</strong> &#8211; Esse eu uso para o desenvolvimento &#8216;pesado&#8217;. Dá pra usar o Vim pra isso também. Mas dependendo do meu humor eu escolho o TextMate para algumas coisas.</li>
<li><strong>Rudix</strong> &#8211; O OS X não vem com tudo mas você encontra o que falta no Rudix.</li>
<li><strong>Git</strong> &#8211; Uso o git pros meus projetos mas também tenho o Mercurial, Bazaar, Subversion, &#8230; instalados para contribuir com outros projetos open-source</li>
<li><strong>virtualenv</strong> &#8211; ter um ambiente isolado para cada projeto Python onde você trabalha é muito legal. Já escrevi sobre o virtualenv <a href="/ambiente-isolado-para-python-com-virtualenv/">aqui</a>.</li>
<li><strong>pylint</strong> e <strong>pyflakes</strong> &#8211; Analisadores estáticos de código.</li>
</ul>
<a name="wptoc_0_0_1"></a><h2>Diretórios básicos</h2>
<ul>
<li><tt>$HOME/</tt>
<ul>
<li><tt>Work</tt> &#8211; Diretório onde os projetos em que trabalho ficam.</li>
<li><tt>bin</tt> &#8211; Diretório com scripts, binários estáticos, etc. Esse diretório fica no <tt>$PATH</tt></li>
</ul>
</li>
</ul>
<a name="wptoc_0_0_2"></a><h2>Configuração</h2>
<p>Sempre que eu falar sobre um arquivo de configuração específico você pode encontrá-lo no endereço: <a href="http://github.com/osantana/personal">http://github.com/osantana/personal</a>.</p>
<a name="wptoc_2_1_0"></a><h3>Os arquivos &#8216;.&#8217; (ponto)</h3>
<p><strong><tt><a href="http://github.com/osantana/personal/blob/master/profile">.profile</a></tt></strong></p>
<ul>
<li>Configurar 3 aliases: <tt>mv='mv -i'</tt> e <tt>cp='cp -i'</tt> pra evitar acidentes com arquivos sendo sobrescritos e <tt>ls='ls -G'</tt> para habilitar cores no comando <tt>ls</tt>.</li>
<li>Configurações genéricas para cores no terminal</li>
<li>Definir o <tt>vim</tt> como <tt>EDITOR</tt> padrão.</li>
<li>Definir <tt>LANG</tt> e <tt>LC_CTYPE</tt> como <tt>en_US.UTF-8</tt> para que o Mercurial e alguns outros softwares funcionem corretamente.</li>
<li>Adicionar o diretório <tt>$HOME/bin</tt> ao <tt>$PATH</tt>. Nesse diretório eu jogo todos aqueles programinhas utilitários usados no dia a dia.</li>
<li>Configurações Python:
<ul>
<li><tt>export PYTHONSTARTUP="$HOME/.pystartup.py"</tt></li>
<li><tt>source ~/bin/<a href="http://code.djangoproject.com/svn/django/trunk/extras/django_bash_completion">django_bash_completion</a></tt></li>
</ul>
</li>
<li>Configuração Java: <tt>export JAVA_HOME="/Library/Java/Home"</tt></li>
<li>Configuração Ruby: adicionar <tt>$HOME/.gem/ruby/1.8/bin</tt> ao <tt>$PATH</tt></li>
<li>Eu uso virtualenv em todos os meus projetos então crio duas funções para ativar os ambientes e entrar nos diretórios desses projetos:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Uso: p nome_do_projeto</span>
p<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>Work<span style="color: #000000; font-weight: bold;">/</span>$<span style="color: #000000;">1</span><span style="color: #000000; font-weight: bold;">*</span>
    <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> bin<span style="color: #000000; font-weight: bold;">/</span>activate <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">source</span> bin<span style="color: #000000; font-weight: bold;">/</span>activate
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Uso: c</span>
c<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VIRTUAL_ENV</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$VIRTUAL_ENV</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

</li>
</ul>
<p><strong><tt><a href="http://github.com/osantana/personal/blob/master/gitconfig">.gitconfig</a></tt></strong></p>
<pre>
[user]
	name = Osvaldo Santana
	email = osantana na triveos.com
[color]
	status = auto
	diff = auto
	branch = auto
	ui = auto
	grep = auto
[alias]
	st = status
	ci = commit
	co = checkout
[merge]
	tool = opendiff
[core]
	legacyheaders = false
	excludesfile = /Users/osantana/.gitignore
    whitespace = trailing-space,space-before-tab
[apply]
    whitespace = fix
[repack]
	usedeltabaseoffset = true
[git-tmbundle]
	gitx-path = /Application/GitX.app/
[mergetool "opendiff"]
	cmd = opendiff
	trustExitCode = true
[clean]
	requireForce = false
</pre>
<p><strong><tt><a href="http://github.com/osantana/personal/blob/master/gitignore">.gitignore</a></tt></strong></p>
<pre>
.DS_Store
*.py[co]
*.tmproj
*~
*.swp*
</pre>
<p><strong><tt><a href="http://github.com/osantana/personal/blob/master/inputrc">.inputrc</a></tt></strong></p>
<p>Eu uso o modo <tt>vi</tt> também no console. Neste arquivo fica essa configuração e mais umas outras que deixam o comportamento do prompt do Mac mais parecido com o do Linux.</p>
<p>Já falei sobre essas configurações <a href="/home-end-page-up-and-page-down-configuration-for-mac-snow-leopard/">aqui no blog</a>. Use por conta e risco.</p>
<p><strong><tt><a href="http://github.com/osantana/Personal-Files/blob/master/pylintrc">.pylintrc</a></tt></strong></p>
<p>As configurações que eu uso para análise estática do código que eu produzo. Eu rodo o <tt>pylint</tt> antes de fazer o commit do meu código. Durante o desenvolvimento eu uso somente o <tt>pyflakes</tt> que é mais simples e rápido mas faz uma análise mais superficial do código. Eu costumava usar o <tt>pep8.py</tt> mas já faz um tempo que o aposentei.</p>
<p><strong><tt><a href="http://github.com/osantana/personal/blob/master/pystartup.py">.pystartup.py</a></tt></strong></p>
<p>Script executado pelo interpretador Python ao entrar no modo interativo. Eu configuro o &#8216;auto-completion&#8217; do prompt interativo do Python, gravo o histórico de comandos, etc.</p>
<p>Infelizmente ele não funciona com o Python padrão do Mac porque o mesmo não é compilado com a biblioteca readline. Mas no Linux ele (deve) funcionar certinho.</p>
<p><strong><tt><a href="http://github.com/osantana/personal/blob/master/vimrc">.vimrc</a></tt></strong></p>
<p>Esse é o meu famoso arquivo <tt>.vimrc</tt>. Ele não tem nada de muito especial.</p>
<p><strong>Outros arquivos</strong></p>
<p>Existem outros arquivos mas, nestes casos, eles contém informações privativas e não faria sentido colocar aqui pra vocês :)</p>
<a name="wptoc_0_0_3"></a><h2>Criando e Usando um projeto Python (com Django)</h2>
<p>Para exemplificar vamos criar um projeto &#8220;pythonologia&#8221;:</p>
<pre>
~ $ cd ~/Work
Work $ virtualenv --no-site-package pythonologia
New python executable in pythonologia/bin/python
Installing setuptools............done.
Work $ p pythonologia
(pythonologia) pythonologia $ easy_install django
(pythonologia) pythonologia $ django-admin.py pythonologia
(pythonologia) pythonologia $ cd pythonologia
(pythonologia) pythonologia $ git init
(pythonologia) pythonologia $ git add *.py
(pythonologia) pythonologia $ git commit -m "Initial commit"
</pre>
<p>Projeto criado e a estrutura de diretórios vai ficar mais ou menos assim:</p>
<pre>
~/Work/pythonologia
       |____ pythonologia
       |     |____ app_django1
       |      \___ app_django2
       |____ bin
       |____ include
        \___ lib
             \____ python2.6
                   |____ distutils
                    \____ site-packages
</pre>
<p>Os arquivos que não são mantidos no repositório Git ficam no diretório <tt>~/Work/pythonologia</tt> ou em um diretório <tt>~/Work/pythonologia/files</tt>. O arquivo de projeto do Textmate, por exemplo, fica em <tt>~/Work/pythonologia/pythonologia.tmproj</tt>.</p>
<p>Eu também crio um link simbólico <tt>~/Work/pythonologia/django -> ~/Work/pythonologia/lib/pythonX.X/site-package/Django-1.1.1-py2.6.egg/django</tt> para dar uma &#8216;espiada&#8217; no código do Django quando necessário.</p>
<p>Quando eu quero trabalhar num outro projeto eu faço:</p>
<pre>
(pythonologia) pythonologia $ deactivate
pythonologia $ p outro_projeto
(outro_projeto) outro_projeto $
</pre>
<p>Eu estou num diretório qualquer e quero voltar para o diretório raiz do projeto basta fazer:</p>
<pre>
(pythonologia) ~ $ c
(pythonologia) pythonologia $
</pre>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/04/25/trabalhando-com-python-e-django/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>E os programadores, onde erram?</title>
		<link>http://blog.triveos.com.br/2010/04/25/e-os-programadores-onde-erram/</link>
		<comments>http://blog.triveos.com.br/2010/04/25/e-os-programadores-onde-erram/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 15:54:58 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/?p=442</guid>
		<description><![CDATA[O @marionogueira provocou e eu]]></description>
			<content:encoded><![CDATA[<p>O @marionogueira <a href="http://twitter.com/marionogueira/statuses/12812024364">provocou</a> e eu vou responder.</p>
<p>Mas antes vou explicar porque eu compartilho da visão de que o trabalho de desenvolvedor guarda semelhanças com o trabalho de um artista (importante dar destaque à palavra &#8220;semelhança&#8221; para não pensar que as coisas são iguais).</p>
<p>Como programador você pega uma especificação abstrata que se parece com uma &#8216;inspiração&#8217; e começa a trabalhar nela até obter algo &#8216;bruto&#8217;, aí você vai lapidando (iterando) sobre esse trabalho, simplificando, e aproximando o software daquela inspiração (especificação).</p>
<p>Nesse processo o programador vai deixando seu &#8220;estilo&#8221; no código. Na escolha de algorítmos, de estruturas de dados, nos textos de comentários e até mesmo no &#8220;Coding Style&#8221;. Essas características são tão notáveis que depois de um tempo é possível identificar o autor do código mesmo quando ele não está &#8216;assinado&#8217;.</p>
<p>Uma diferença importante entre o trabalho de artistas e de programadores é que raramente vemos o trabalho em equipe (times) no universo das artes e o mesmo é quase uma regra no mundo do software.</p>
<p>Mas daqui para frente eu vou falar sobre um tipo específico de artistas: aqueles que trabalham sob encomenda pintando retratos de reis e nobres para garantir o seu sustento. E para ilustrar o meu raciocínio vou usar uma das obras de arte mais conhecidas no mundo: a <a href="http://en.wikipedia.org/wiki/Monalisa">Monalisa</a>.</p>
<p>A Monalisa (La Gioconda) foi uma obra encomendada por Francesco del Giocondo a <a href="http://en.wikipedia.org/wiki/Leonardo_da_Vinci">Leonardo Da Vinci</a>. Existe muitas versões, mitos e mistérios que cercam essa obra mas vamos nos ater à &#8220;história oficial&#8221;.</p>
<p>Francesco passou uma especificação para Da Vinci (ele queria um retrato de sua esposa <a href="http://en.wikipedia.org/wiki/Lisa_del_Giocondo">Lisa Gherardini</a>) e provavelmente especificou prazo e preço. Ou talvez tenham feito um contrato de escopo aberto? Não sei, não estudei essa história muito a fundo.</p>
<p>Leonardo Da Vinci, então, fez os primeiros esboços e foi apresentando esses esboços ao contratante. Talvez não tenha feito isso porque o contratante confiava plenamente na capacidade de entrega dele. Mas não teria sido vergonha se tivesse que apresentar os esboços no meio da execução do projeto.</p>
<p>O resultado final foi um trabalho encomendado, executado no prazo combinado, à um custo determinado e que, mesmo assim, era uma obra de arte.</p>
<p>Curiosamente o escritório da <a href="http://www.triveos.com.br/">Triveos</a> é vizinho de uma escola de pintura. Todo dia passo em frente à sala de aula e vejo o trabalho dos alunos. É fácil perceber que não tem nenhum Leonardo Da Vinci ali (por enquanto). Falta-lhes experiência. Prática. Com o tempo e empenho eles se transformarão em bons artistas. Talvez gênios.</p>
<p>O mesmo acontece com os programadores. Só com a prática, a experiência, e com o domínio da técnica um programador se tornará um &#8216;artista&#8217; de verdade.</p>
<p>Mas voltando à questão levantada pelo @marionogueira&#8230;</p>
<p>O &#8216;mundo&#8217; está errado no gerenciamento dos programadores quando eles mudam escopo, prazo e custo dos projetos a todo o instante e ainda exigem uma obra de arte como resultado do trabalho. Ou quando não permitem que o &#8216;artista&#8217; trabalhe ao seu modo.</p>
<p>A Monalisa seria uma obra de arte se, durante o seu desenvolvimento, o contratante desse palpites sobre as cores e cenários deveriam ser usados na obra?</p>
<p>Mas os programadores também erram!</p>
<p>Erram quando aceitam o desafio de desenvolver uma obra de arte sem ter o domínio adequado da técnica, a prática e a experiência necessária para transformar aquela especificação em arte.</p>
<p>Em projetos ideais onde o escopo é claro, o prazo é razoável e custo está sob controle os programadores falham quando não compreendem que, mesmo tendo sido encomendada, a &#8216;obra de arte&#8217; é dele também. Sem essa compreensão eles deixam de se <a href="http://www.implementingscrum.com/2006/09/11/the-classic-story-of-the-pig-and-chicken/">comprometer</a> com sua execução.</p>
<p>Mesmo tendo sido encomendada, Da Vinci não fez a Monalisa &#8216;nas coxas&#8217;. Ele fez o máximo possível para entregar uma obra de arte única. Isso fica claro em projetos open-source onde a obra e o nome do artista fica público.</p>
<p>Um artista não precisa de foco e disciplina para se inspirar. Aliás, isso pode até atrapalhar. Mas para executar a obra é necessário muito foco e muita disciplina. Principalmente se a obra foi encomendada e tem custos e prazos pré-estabelecidos.</p>
<p>O programador falha quando ele não tem foco e disciplina no seu trabalho. Twitter, MSN, GTalk, IRC e outros sugadores de foco, hoje, ficam mais tempo em funcionamento do que a IDEs, editor de textos e outras ferramentas de desenvolvimento. Eu sei. Eu vivo isso.</p>
<p>Fora isso eles podem errar em outras questões que envolvem relacionamento interpessoal, trabalho em equipe, ética, etc. Mas nessas questões todos podem errar.</p>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/04/25/e-os-programadores-onde-erram/feed/</wfw:commentRss>
		<slash:comments>403</slash:comments>
		</item>
		<item>
		<title>Como garantir um emprego de desenvolvedor</title>
		<link>http://blog.triveos.com.br/2010/04/21/como-garantir-um-emprego-de-desenvolvedor/</link>
		<comments>http://blog.triveos.com.br/2010/04/21/como-garantir-um-emprego-de-desenvolvedor/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 19:34:32 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/?p=439</guid>
		<description><![CDATA[Post rápido e ligeiro com]]></description>
			<content:encoded><![CDATA[<p>Post rápido e ligeiro com uma lista de atributos que certamente vão garantir a sua vaga como desenvolvedor em qualquer empresa que valha a pena trabalhar.</p>
<p>Cada atributo tem um dos graus de importância abaixo (do mais importante para o menos importante):</p>
<ol>
<li><strong>Vital</strong> &#8211; característica mais do que essencial para vagas de desenvolvedor ou para qualquer outro tipo de posição.</li>
<li><strong>Essencial</strong> &#8211; característica imprescindível para um desenvolvedor.</li>
<li><strong>Importante</strong> &#8211; característica importante mas não imprescindível. Pode-se contratar um desenvolvedor que não tenha essa característica desde que haja um compromisso do mesmo em desenvolvê-la.</li>
<li><strong>&#8220;Plus&#8221;</strong> &#8211; não faz muita diferença mas pode ser uma característica que pode desempatar (a favor de quem a tem) numa disputa entre dois ou mais candidatos.</li>
<li><strong>Desnecessária</strong> &#8211; não faz diferença alguma.</li>
<li><strong>Condenável</strong> &#8211; característica que pode depor contra a sua candidatura.</li>
</ol>
<p>O que está escrito aqui é a minha visão sobre o assunto. Algumas empresas contratantes podem divergir no grau de importância de cada atributo. Outras, por questões legais, podem exigir determinada característica listada como </p>
<ul>
<li><strong>Comunicação</strong> (vital) &#8211; comunicação escrita e verbal, capacidade de argumentação e de expressar idéias e conceitos.</li>
<li><strong>Prazer em programar</strong> (vital) &#8211; você programa nas horas vagas? Não? Então desista. Corra atrás de trabalhar com aquilo que você faz nas horas vagas. Todos ficarão gratos.</li>
<li><strong>Prazer por aprender coisas novas</strong> (vital) &#8211; Veja&#8230; eu disse &#8220;prazer por&#8221; e não &#8220;interesse em&#8221;.</li>
<li><strong>Inglês para leitura</strong> (vital) &#8211; não dá mais tempo de esperar por traduções de documentação.</li>
<li><strong>Programação</strong> (essencial) &#8211; tem que saber teoria e prática. Conhecer algoritmos, estruturas de dados, conceitos de OO, paradigmas de programação, teoria da computação, matemática, &#8230;</li>
<li><strong>Familizarização rápida com ferramentas</strong> (essencial) &#8211; você é capaz de corrigir um bug numa aplicação escrita numa linguagem que você não conhece em quanto tempo? Consegue produzir código numa linguagem nova em menos de uma semana?</li>
<li><strong>Inglês para escrita</strong> (essencial) &#8211; grande parte dos softwares, bibliotecas e sistemas que usamos hoje são desenvolvidos por estrangeiros. Freqüentemente precisamos trocar um e-mail com esses desenvolvedores.</li>
<li><strong>Conhecer bem ao menos uma linguagem</strong> (essencial) &#8211; essa linguagem varia de acordo com o que você deseja desenvolver, mas ela tem que ser uma espécie de &#8216;segundo idioma&#8217; seu. No meu caso essa linguagem é Python, mas poderia ser outra.</li>
<li><strong>Inglês conversação</strong> (importante) &#8211; grande parte dos lugares bacanas pra se trabalhar, hoje, são estrangeiros, tem filiais fora do país ou estão contratando estrangeiros pros seus times. Poder conversar com eles é importante.</li>
<li><strong>Ter familiaridade com &#8216;linguagens chave&#8217;</strong> (importante) &#8211; algumas linguagens de programação estão presentes em tantos lugares que não é mais possível desconhecê-las: assembly de pelo menos 1 plataforma, C, Shell Script, linguagem funcional (fico devendo essa :D), linguagem OO (Java, Smalltalk, Python, Ruby, &#8230;).</li>
<li><strong>Participação em projetos FLOSS</strong> (importante) &#8211; universo perfeito para exercitar, experimentar, participar, desenvolver, aperfeiçoar, &#8230; todas as características listadas aqui. Alguns lugares onde trabalhei sequer pedia curriculums para contratar um desenvolvedor e usavam só a participação dos mesmos em projetos FLOSS</li>
<li><strong>Formação acadêmica</strong> (plus) &#8211; desde que seja numa boa faculdade (USP, Unesp, UNICAMP, UF*, UTF*, PUC*, &#8230;) podem indicar que os alunos aprenderam alguns fundamentos importantes de programação. O convívio social dos alunos para estudo, execução de projetos e trabalhos também acrescenta.</li>
<li><strong>Certificações</strong> (desnecessária) &#8211; empresas que pedem ou avaliam certificações não podem ser empresas onde valha a pena trabalhar. Empresas que usam certificações são aquelas que são incapazes de avaliar corretamente os candidatos e &#8216;terceirizam&#8217; essa tarefa para as entidades certificadoras. Uma empresa incapaz de avaliar um candidato não pode ser capaz de lhe dar boas condições de trabalho.</li>
<li><strong>&#8220;Corporacionismo&#8221;</strong> (condenável) &#8211; profissionais que falam &#8220;frases que agregam valor e aumentam a sinergia do time junior de colaboradores&#8221; ou que acham fundamental a existência de uma regulamentação no mercado de trabalho de TI geralmente são aqueles que não querem ou não conseguem se destacar como desenvolvedor por conta própria e precisa de uma &#8216;mãozinha&#8217; do governo pra isso.</li>
</ul>
<p>Esse artigo descreve algumas características que um desenvolvedor deve ter para conseguir um emprego. Mas se o desenvolvedor quiser empreender e montar o seu próprio negócio, ele precisa das mesmas características? Sim, mas com graus de importância diferentes. Além desses atributos são necessários alguns outros que tentarei abordar em outro artigo.</p>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/04/21/como-garantir-um-emprego-de-desenvolvedor/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Python ainda é pythônico?</title>
		<link>http://blog.triveos.com.br/2010/04/10/python-ainda-e-pythonico/</link>
		<comments>http://blog.triveos.com.br/2010/04/10/python-ainda-e-pythonico/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 01:04:46 +0000</pubDate>
		<dc:creator>Osvaldo Santana Neto</dc:creator>
				<category><![CDATA[geral]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.triveos.com.br/?p=387</guid>
		<description><![CDATA[Eu estava lendo um (longo)]]></description>
			<content:encoded><![CDATA[<p>Eu estava lendo um (longo) <a href="http://www.pragprog.com/magazines/2010-04/tangled-up-in-tools">artigo</a> que fala sobre várias coisas sobre como desenvolvíamos software no passado e como desenvolvemos hoje, etc&#8230; E num determinado momento ele fala sobre bibliotecas, frameworks e sobre um conceito denominado por ele &#8220;<em>radius of comprehension</em>&#8220;.</p>
<p>O conceito de &#8220;<em>radius of comprehension</em>&#8221; é simples: dado um determinado trecho pequeno de código, quanto de código a mais você precisa ler para entender o que ele faz. Quanto menor o &#8220;<em>radius of comprehension</em>&#8221; melhor.</p>
<p>Ao ler isso eu me lembrei de uma palestra do <a href="http://oficinas.ramgarlic.com/">Luciano Ramalho</a> onde ele fala que gosta da linguagem Python (e da idéia de algo ser &#8216;pythonico&#8217;) porque ela &#8220;cabe na cabeça&#8221; dele e acho que isso tem uma relação direta com a idéia de <em>&#8220;radius of comprehension</em>&#8220;.</p>
<p>Eu também pensava da mesma forma que o Luciano. Achava que Python &#8220;cabia&#8221; na minha cabeça. Mas hoje eu devo admitir que isso é parcialmente verdade.</p>
<p>Em primeiro lugar eu acho que a linguagem vem crescendo demais desde a versão 2.2. Adicionando funcionalidades e &#8220;acúcares sintáticos&#8221; cujos benefícios podem ser facilmente questionados.</p>
<p>Mas não vou falar muito da linguagem não. Vou falar de alguns módulos da biblioteca padrão do Python que são praticamente impossíveis de serem usadas sem ter a documentação à mão:</p>
<ul>
<li>logging &#8211; esse é o pior de todos. Não tem uma única vez que eu não preciso recorrer à documentação do módulo pra fazer algo &#8220;bobo&#8221;. Sei que um &#8220;logging.log(&#8230;)&#8221; basta para o básico, mas se você precisa de algo básico+1 você já se vê obrigado a ler toda a documentação do módulo. Acho que o problema desse módulo foi tentar copiar o log4j do mundo Java. Todos nós conhecemos o gosto por &#8220;over engineering&#8221; dos programadores Java.</li>
<li>ConfigParser &#8211; não tenho muito a dizer. Porque esse módulo precisa daqueles conceitos complicados de configurações &#8220;globais&#8221;, busca de arquivos em múltiplos diretórios, etc. Ele poderia implementar o simples e fácil e deixar as extensões para bibliotecas de terceiros.</li>
<li>email &#8211; precisei usar esse aqui uma única vez e desde então eu tremo de medo sempre que alguém me pede pra &#8220;manipular e-mails&#8221; em uma aplicação Python. Sei que manipular e-mails é complicado se considerarmos a quantidade de &#8220;variações dos padrões&#8221; existentes num serviço que tem quase a idade da Internet, mas as abstrações devem ser construídas para nos poupar desses detalhes, não?</li>
<li>xml.dom e xml.sax &#8211; eu já não gosto de XML, imagina manipular XML com essas duas bibliotecas &#8220;podres&#8221;. Se eu pego um código pra dar manutenção e esse código usa uma dessas duas bibliotecas eu triplico o valor do serviço.</li>
<li>re &#8211; neste caso eu não acho que seja muito culpa do Python, mas peça pra alguém que conheça regex mas não conheça Python explicar a diferença entre re.search() e re.match(). Ou mostre pra ele uma regex com &#8220;(?P&lt;foo&gt;.*)&#8221; significa.</li>
</ul>
<p>Além dessas tem outras que não vou me lembrar. Tem também algumas bibliotecas, módulos e frameworks no atual &#8220;eco sistema&#8221; do Python que simplesmente não entram na minha cabeça:</p>
<ul>
<li>Zope e Plone &#8211; a turma do PythonBrasil já conhece essa história. Eu tentei bem umas 3 vezes estudar essa dupla e nas 3 eu não consegui ir além de abrir a interface de administração do Zope. Mas de duas uma: ou sou burro demais ou o troço é desnecessariamente complicado. Por sorte o ZODB funciona separadamente porque esse sim é poderoso e fácil de usar.</li>
<li>Buildout &#8211; esse eu já usei basicamente pra instalar alguns programas mas é uma caixa preta completa pra mim. Não tenho certeza, mas acho que ele nasceu no (ou em função do) Zope/Plone e talvez isso explique um pouco disso. Eu não sei direito se ele é um sistema de build, um sistema pra criação de ambiente de desenvolvimento, ou se é algum sistema alienígena de IA.</li>
</ul>
<p>Eu sei que os problemas que temos que resolver hoje em dia são bem mais complexos do que os que tínhamos que resolver quando comecei a programar, mas problemas complexos não precisam de soluções que deixem transparecer essa complexidade.</p>
<blockquote class="ad">
A <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos</a> é especializada no desenvolvimento de aplicações Web e utiliza Python e Django em grande parte de seus projetos. Tendo como base esse <em>know-how</em> no uso de Python e Django criamos o <a href="http://www.triveos.com.br/curso-de-python-e-django/">Curso de Desenvolvimento Web com Python e Django</a> nas modalidades <em>in-company</em> e <a href="http://www.ludeos.com.br/store/triveos-cursos-online/" title="Curso Online de Desenvolvimento Web com Python e Django">online</a>.
</blockquote>

<hr />

<p>Copyright © 2010, <a href="http://www.triveos.com.br" title="Cursos e Sistemas Web com Python e Django">Triveos Tecnologia Ltda.</a><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/br/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/br/80x15.png" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.triveos.com.br/2010/04/10/python-ainda-e-pythonico/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
