Django Utilidades :: Marinho Brandaohttp://marinhobrandao.com/pt-brTue, 06 Jan 2009 10:23:48 -0000Aprendendo Django no Planeta Terrahttp://marinhobrandao.com/blog/p/aprendendo-django-no-planeta-terra/<div class="document"> <p>Acabo de colocar no ar o site <strong>Aprendendo Django no Planeta Terra</strong> <a class="footnote-reference" href="#id8" id="id1" name="id1">[1]</a>.</p> <img alt="http://marinhobrandao.com/blog/p/aprendendo-django-ilustracao/?img=1" src="http://marinhobrandao.com/blog/p/aprendendo-django-ilustracao/?img=1" /> <p>Quem tem me acompanhado com uma certa regularidade sabe que eu valorizo muito a imagem, mas tenho evoluído nesse sentido.</p> <p>Após mais de 2 anos usando o Django em projetos profissionais e brincadeiras pessoas, e participando da comunidade brasileira, especialmente, uma coisa se tornou muito clara pra mim: é preciso dar um passo mais ousado.</p> <p>Eu cheguei a escrever um livro quase completo há 1 ano atrás e não gostei do resultado. Alguns amigos apontaram o que eu já sentia: o conteúdo estava burocrático e pesado, e precisava de um certo pragmatismo (obrigado Andrews).</p> <p>Então, este é um livro eletrônico voltado para o iniciante. São capítulos curtos, liberados quase que diariamente, bem ilustrados e com uma linguagem que segue a história de um alienígena, me inspirando na série do <strong>Guia do Mochileiro das Galáxias</strong>.</p> <p>É a história de um alienígena e seus dois amigos terráqueos, que estão aprendendo Django e se divertindo muito com isso. À medida que a história se desenrola, o framework é desmistificado e a pessoa vai aprendendo como resolver problemas e fazer boas sacadas no seu dia-a-dia.</p> <p>Sou muito grato ao <strong>Luciano Ramalho</strong> <a class="footnote-reference" href="#id10" id="id2" name="id2">[3]</a>, <strong>Guilherme Semente</strong> <a class="footnote-reference" href="#id11" id="id3" name="id3">[4]</a> e <strong>Felippe Nardi</strong> pelas dicas, ao <strong>João Matheus</strong> por suas ilustrações e ao <strong>Miltinho Brandão</strong> <a class="footnote-reference" href="#id9" id="id4" name="id4">[2]</a> pelas idéias, ouvido e amizade de sempre. E claro, não somente eles, todo o restante da comunidade brasileira <a class="footnote-reference" href="#id12" id="id5" name="id5">[5]</a>, da World News Network <a class="footnote-reference" href="#id13" id="id6" name="id6">[6]</a> e dos desenvolvedores do Django Project <a class="footnote-reference" href="#id14" id="id7" name="id7">[7]</a>.</p> <p><strong>Links relacionados</strong></p> <table class="docutils footnote" frame="void" id="id8" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id1" name="id8">[1]</a></td><td><a class="reference" href="http://www.aprendendodjango.com/">http://www.aprendendodjango.com/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id9" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id4" name="id9">[2]</a></td><td><a class="reference" href="http://miltonweb.wordpress.com/">http://miltonweb.wordpress.com/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id10" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id2" name="id10">[3]</a></td><td><a class="reference" href="http://ramalho.org/">http://ramalho.org/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id11" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id3" name="id11">[4]</a></td><td><a class="reference" href="http://semente.taurinus.org/">http://semente.taurinus.org/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id12" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id5" name="id12">[5]</a></td><td><a class="reference" href="http://www.djangobrasil.org/">http://www.djangobrasil.org/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id13" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id6" name="id13">[6]</a></td><td><a class="reference" href="http://wnnetworks.com/">http://wnnetworks.com/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id14" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id7" name="id14">[7]</a></td><td><a class="reference" href="http://www.djangoproject.com/">http://www.djangoproject.com/</a></td></tr> </tbody> </table> </div> Versão 0.6 do Yadsel com suporte a Djangohttp://marinhobrandao.com/blog/p/versao-06-do-yadsel-com-suporte-a-django/<div class="document"> <p>Depois de um longo período apenas mantendo a estabilidade da versão atual, tirei ontem o dia para concluir os ajustes necessários para a versão 0.6 do <strong>Yadsel</strong>, com foco quase que exclusivo em projetos construídos com Django.</p> <p>Ocorre que antes disso, o Yadsel trabalhava somente com versões de forma linear, ou seja: <strong>uma classe, uma versão</strong>.</p> <p>Isso permaneceu até a versão 0.4, quando implementei o recurso de Extensible Versions (versões extensíveis) e Partial Versions (versões parciais). Essa versão inaugurou a idéia de poder ter várias classes em uma só versão. Melhorou na organização dos arquivos de versões e possibilitou trabalhar várias aplicações compartilhando uma mesma versão.</p> <p>Mas ainda assim, outro recurso era necessário para o uso cotidiano no Django. No Django, as aplicações são independentes umas das outras, e ainda assim, podem haver eventuais dependências. Isso cria a necessidade de suporte a múltiplas versões em um mesmo projeto, ou seja: <strong>cada aplicação, uma versão</strong>. Para isso foi necessário implementar o <strong>Version Space</strong>.</p> <p><strong>Version Space</strong></p> <p>O Version Space é um recurso novo do Yadsel que torna possível que cada &quot;espaço&quot; no controle de versões possua sua própria versão, histórico e log. No caso do Django, o version space traduz-se pelo nome da aplicação, em outros aplicações, o desenvolvedor pode implementar como bem quiser.</p> <p>Em outras palavras: eu posso manter uma aplicação de newsletter em diversos projetos com evolução de versões independentes do restante, incluindo toda a parafernália de DDL e DML que o Yadsel suporta: Tabelas, Domínios, Triggers, Procedures, Views, etc.</p> <p><strong>Yadsel no Admin</strong></p> <p>No embalo do Version Space veio o suporte ao Admin. É simples, ao instalar a aplicação <strong>'yadsel.drivers.django_app'</strong> em seu INSTALLED_APPS, seu Admin passará a exibir duas seções para visualizar logs e históricos da evolução do banco.</p> <p><strong>Yadsel pelo manage.py</strong></p> <p>O Yadsel implementa um novo comando ao manage.py: <strong>yadseltool</strong>. A lógica de funcionamento é a mesma da yadseltool independente, porém seguindo a sintaxe de comandos baseados aplicações do manage.py:</p> <pre><code>$ python manage.py help yadseltool Usage: manage.py yadseltool [options] [appname ...] Executes Yadsel database version control for the given app name(s). Options: --settings=SETTINGS The Python path to a settings module, e.g. "myproject.settings.main". If this isn't provided, the DJANGO_SETTINGS_MODULE environment variable will be used. --pythonpath=PYTHONPATH A directory to add to the Python path, e.g. "/home/djangoprojects/myproject". --traceback Print traceback on exception --action=ACTION Action of evolution; up=upgrade, down=downgrade --from=FROM --to=TO --mode=MODE Mode of output; hidden=messages are hidden, steps=step by step, interactive=confirms actions, output=only prints to output --test=TEST Set test mode --history=HISTORY Write history of versions --silent=SILENT Keeps exception messages --log=LOG Write a log of changes --version show program's version number and exit -h, --help show this help message and exit</code></pre><p><strong>Exemplo de chamada do yadseltool</strong></p> <pre><code>$ python manage.py yadseltool minha_aplicacao</code></pre><p><strong>Mas como afinal utilizar o Yadsel em meu projeto Django?</strong></p> <p>Bom, primeiro é necessário baixar a versão 0.6 do Yadsel em sua máquina</p> <blockquote> <a class="reference" href="http://yadsel.googlecode.com/files/yadsel-0.6-with-django-support.tar.gz">http://yadsel.googlecode.com/files/yadsel-0.6-with-django-support.tar.gz</a></blockquote> <p>Feito o download, instale o Yadsel numa versão 2.4 ou superior do Python</p> <pre><code>$ python setup.py install</code></pre><p>Em seu projeto, acrescente a seguinte aplicação à setting <strong>INSTALLED_APPS</strong> do arquivo <strong>settings.py</strong></p> <blockquote> 'yadsel.drivers.django_app'</blockquote> <p>Rode o <strong>syndcb</strong></p> <pre><code>$ python manage.py syncdb</code></pre><p>Serão criadas as duas tabelas necessárias para o histórico e log do Yadsel. Entenda que <strong>'histórico'</strong> trata-se do controle das versões, é ele que sabe se sua aplicação está na versão X ou Y. O <strong>'log'</strong> trata-se de cada comando SQL que é gerado e executado, assim como suas respectivas eventuais mensagens de erro.</p> <p>Crie a seguinte estrutura de pastas em uma de suas aplicações:</p> <pre><code>minha_aplicacao/ minha_aplicacao/yadsel_versions/ minha_aplicacao/yadsel_versions/__init__.py minha_aplicacao/yadsel_versions/versao1.py minha_aplicacao/yadsel_versions/versao2.py minha_aplicacao/yadsel_versions/versaoN.py</code></pre><p>o arquivo __init__.py deve conter ou importar as classes de versões, que podem ser estruturadas como bem quiser, seja em módulos ou em pacotes.</p> <p>O conteúdo provável do arquivo __init__.py será este:</p> <pre><code>from versao1 import *</code></pre><p>E o do arquivo versao1.py (ou qualquer outro que contenha classes de versões) será provavelmente este:</p> <pre><code>from yadsel.core import * class Version1(Version): version_number = 1 def up(self): pass def down(self): pass</code></pre><p>ou como este exemplo:</p> <pre><code>from yadsel.core import * class MinhaVersao1(Version): version_number = 1 def up(self): CreateTable('minha_tabela_nova', id = Integer(primary=True) name = Varchar(50, required=True), ).append_to(self) AlterTable('states', Add('percent', Decimal(15, 5, default=0)), ).append_to(self) ExecuteSQL(""" Create or Alter Procedure sp_teste... """).append_to(self) def down(self): ExecuteSQL(""" Drop Procedure sp_teste """).append_to(self) AlterTable('states', DropColumn('percent'), ).append_to(self) DropTable('minha_tabela_nova').append_to(self)</code></pre><p>A minha sugestão é que se use o Yadsel no Django somente para manter a evolução, não para criar tabelas em si. Isso porque o Django o já cria as tabelas muito bem. O que ele não faz é o resto :D</p> </div> VivixVideo no ar!http://marinhobrandao.com/blog/p/vivixvideo-no-ar_151/<div class="document"> <p>Bom, como devem ter notado, tenho estado ausente até mesmo nas conversas de Google Talk e na lista de discussão.</p> <p>Também não é por menos, passo atualmente por três lançamentos de peso onde tenho a resposabilidade técnica de fazer acontecer. É prazeroso, mas ao final do dia tudo o que eu quero é a família, e assim tem sido.</p> <p>A última grande novidade que tenho para vocês é o <strong>VivixVideo</strong> <a class="footnote-reference" href="#id19" id="id1" name="id1">[1]</a>, um site bilíngue para agregação de vídeos totalmente baseado nos conceitos da web2.0: o usuário faz o site, em quase todas as formas da palavra, e os planos levam em consideração a amplitude dessa filosofia: teremos em breve uma área de desenvolvimento onde será possível publicar tickets e participar da construção do site até onde for possível essa interação.</p> <img alt="http://marinho.webdoisonline.com/blog/p/150/?img=1" src="http://marinho.webdoisonline.com/blog/p/150/?img=1" /> <p>A criação levou pouco mais de 2 meses, contando com uma equipe de 5 pessoas em seu tempo extra-expediente, mas com muita boa vontade, as previsões de prazo foram cumpridas com algumas gordurinhas a mais trasformada em recursos adicionais.</p> <p>O lançamento conta com premiações e possibilidades de lucro por parte dos participantes, e os planos para novidades são ousados.</p> <p><strong>Django</strong></p> <p>A versão utilizada do Django é a 0.97-newforms-admin <a class="footnote-reference" href="#id20" id="id2" name="id2">[2]</a>, a versão do Python é 2.5, com Apache, mod_python e Fedora Gnu/Linux.</p> <p><strong>Aplicações externas</strong></p> <p>Dentre os recursos extra utilizados, pelos quais somos gratos, destacam-se:</p> <ul class="simple"> <li>django-diario <a class="footnote-reference" href="#id21" id="id3" name="id3">[3]</a></li> <li>django-forum <a class="footnote-reference" href="#id22" id="id4" name="id4">[4]</a></li> <li>django-tagging <a class="footnote-reference" href="#id23" id="id5" name="id5">[5]</a></li> <li>django-ads <a class="footnote-reference" href="#id24" id="id6" name="id6">[6]</a></li> <li>django-microformats <a class="footnote-reference" href="#id25" id="id7" name="id7">[7]</a></li> <li>djapian <a class="footnote-reference" href="#id26" id="id8" name="id8">[8]</a></li> <li>django-plus <a class="footnote-reference" href="#id27" id="id9" name="id9">[9]</a></li> <li>ajax many2many widget <a class="footnote-reference" href="#id28" id="id10" name="id10">[10]</a></li> <li>jQuery <a class="footnote-reference" href="#id29" id="id11" name="id11">[11]</a></li> <li>jQuery auto-complete plugin <a class="footnote-reference" href="#id30" id="id12" name="id12">[12]</a></li> <li>yadsel <a class="footnote-reference" href="#id31" id="id13" name="id13">[13]</a></li> </ul> <p><strong>Equipe</strong></p> <p>A equipe, que está parabéns pelos resultados é composta por:</p> <ul class="simple"> <li>Márcio <a class="footnote-reference" href="#id32" id="id14" name="id14">[14]</a></li> <li>Marcos Freitas <a class="footnote-reference" href="#id33" id="id15" name="id15">[15]</a></li> <li>Mariana Queiroz <a class="footnote-reference" href="#id34" id="id16" name="id16">[16]</a></li> <li>Marinho Brandão <a class="footnote-reference" href="#id35" id="id17" name="id17">[17]</a></li> <li>Miltinho Brandão <a class="footnote-reference" href="#id36" id="id18" name="id18">[18]</a></li> </ul> <p><strong>Links relacionados</strong></p> <table class="docutils footnote" frame="void" id="id19" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id1" name="id19">[1]</a></td><td><a class="reference" href="http://vivixvideo.com/">http://vivixvideo.com/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id20" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id2" name="id20">[2]</a></td><td><a class="reference" href="http://code.djangoproject.com/wiki/NewformsAdminBranch">http://code.djangoproject.com/wiki/NewformsAdminBranch</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id21" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id3" name="id21">[3]</a></td><td><a class="reference" href="http://code.google.com/p/django-diario">http://code.google.com/p/django-diario</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id22" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id4" name="id22">[4]</a></td><td><a class="reference" href="http://code.google.com/p/django-forum">http://code.google.com/p/django-forum</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id23" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id5" name="id23">[5]</a></td><td><a class="reference" href="http://code.google.com/p/django-tagging">http://code.google.com/p/django-tagging</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id24" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id6" name="id24">[6]</a></td><td><a class="reference" href="http://code.google.com/p/django-ads">http://code.google.com/p/django-ads</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id25" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id7" name="id25">[7]</a></td><td><a class="reference" href="http://code.google.com/p/django-microformats">http://code.google.com/p/django-microformats</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id26" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id8" name="id26">[8]</a></td><td><a class="reference" href="http://code.google.com/p/djapian">http://code.google.com/p/djapian</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id27" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id9" name="id27">[9]</a></td><td><a class="reference" href="http://code.google.com/p/django-plus">http://code.google.com/p/django-plus</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id28" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id10" name="id28">[10]</a></td><td><a class="reference" href="http://django-plus.googlecode.com/files/ajax_m2m_widget.rar">http://django-plus.googlecode.com/files/ajax_m2m_widget.rar</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id29" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id11" name="id29">[11]</a></td><td><a class="reference" href="http://jquery.com">http://jquery.com</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id30" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id12" name="id30">[12]</a></td><td><a class="reference" href="http://code.google.com/p/jquery-autocomplete/">http://code.google.com/p/jquery-autocomplete/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id31" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id13" name="id31">[13]</a></td><td><a class="reference" href="http://code.google.com/p/yadsel">http://code.google.com/p/yadsel</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id32" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id14" name="id32">[14]</a></td><td><a class="reference" href="http://vivixvideo.com/u/editor/">http://vivixvideo.com/u/editor/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id33" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id15" name="id33">[15]</a></td><td><a class="reference" href="http://vivixvideo.com/u/marcosfreitas/">http://vivixvideo.com/u/marcosfreitas/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id34" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id16" name="id34">[16]</a></td><td><a class="reference" href="http://vivixvideo.com/u/Mariana/">http://vivixvideo.com/u/Mariana/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id35" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id17" name="id35">[17]</a></td><td><a class="reference" href="http://vivixvideo.com/u/marinho/">http://vivixvideo.com/u/marinho/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id36" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id18" name="id36">[18]</a></td><td><a class="reference" href="http://vivixvideo.com/u/miltinho/">http://vivixvideo.com/u/miltinho/</a></td></tr> </tbody> </table> </div> Site da DjangoBrasil no ar!http://marinhobrandao.com/blog/p/site-da-djangobrasil-no-ar_133/<div class="document"> <img alt="http://marinho.webdoisonline.com/blog/p/132/?img=1" src="http://marinho.webdoisonline.com/blog/p/132/?img=1" /> <p>Neste final de semana, a revista Info <a class="footnote-reference" href="#id7" id="id1" name="id1">[1]</a> edição de dezembro chegou à casa dos assinantes com a matéria sobre o Django, <strong>Ruby on Rails</strong> e outros frameworks ágeis. Eu ainda não tive a oportunidade de lê-la (quero fazer isso na segunda-feira) mas pelo que o <strong>Ítalo Maia</strong> <a class="footnote-reference" href="#id12" id="id2" name="id2">[6]</a> indicou, a matéria ficou bacana e destacou os pontos fortes dos frameworks analisados - e parece que o Django se saiu bem :)</p> <p>Agora a notícia que já veio no mesmo pacote foi o lançamento do site da nossa comunidade no endereço oficial <a class="footnote-reference" href="#id8" id="id3" name="id3">[2]</a>, anunciado <a class="footnote-reference" href="#id9" id="id4" name="id4">[3]</a> pelo <strong>Semente</strong>. É muito importante exaltar o trabalho que o Semente (na programação e configuração), o <strong>Jader Rubini</strong> <a class="footnote-reference" href="#id10" id="id5" name="id5">[4]</a> (no design) e o <strong>Jean Rito</strong> (criador do domínio) fizeram pelo site, como principais expoentes, assim como agradecer ao pessoal da PyTown <a class="footnote-reference" href="#id11" id="id6" name="id6">[5]</a> por ceder a hospedagem e apoiar a comunidade, e ao restante do pessoal que participou.</p> <p>Agora nosso desafio é exatamente suprir nos pontos que o Django não está forte: documentação em língua portuguesa, o que vai ser de bom grado para o conteúdo do site.</p> <p>No mais, só parabenizar e agradecer!</p> <p><strong>Links relacionados</strong></p> <table class="docutils footnote" frame="void" id="id7" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id1" name="id7">[1]</a></td><td><a class="reference" href="http://info.abril.com.br/">http://info.abril.com.br/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id8" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id3" name="id8">[2]</a></td><td><a class="reference" href="http://www.djangobrasil.org/">http://www.djangobrasil.org/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id9" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id4" name="id9">[3]</a></td><td><a class="reference" href="http://groups.google.com.br/group/django-brasil/browse_thread/thread/c8c5c204986a7405">http://groups.google.com.br/group/django-brasil/browse_thread/thread/c8c5c204986a7405</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id10" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id5" name="id10">[4]</a></td><td><a class="reference" href="http://jaderubini.wordpress.com">http://jaderubini.wordpress.com</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id11" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id6" name="id11">[5]</a></td><td><a class="reference" href="http://pytown.com/">http://pytown.com/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id12" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id2" name="id12">[6]</a></td><td><a class="reference" href="http://eusouolobomal.blogspot.com/">http://eusouolobomal.blogspot.com/</a></td></tr> </tbody> </table> </div> Projetos brasileiroshttp://marinhobrandao.com/blog/p/projetos-brasileiros/<div class="document"> <p>Um dia desses eu e o <strong>Andrews</strong> <a class="footnote-reference" href="#id26" id="id1" name="id1">[1]</a> estávamos papeando sobre a nossa ânsia de ajudar na comunidade. Ela sem dúvida é muito maior do que a nossa condição real para isso, afinal, a Tarsila <a class="footnote-reference" href="#id27" id="id2" name="id2">[2]</a> e a Larissa são ainda mais importantes e as esposas também.</p> <p>Ainda assim, é perceptível a saúde da comunidade: é fácil notar ao menos 4 ou 5 líderes naturais na comunidade tomando a iniciativa e buscando evoluir, cada qual do seu jeito, evidentemente. Estamos nos preparando para o lançamento do site oficial <a class="footnote-reference" href="#id28" id="id3" name="id3">[3]</a> e com uma ousada meta para dobrar, triplicar ou até aumentar em dez vezes o nosso número - em um ano. É possível.</p> <p>Nem todos os esforços são destacados: às vezes um bocado de artigos ou alguns projetos tocados podem aparecer mais do que outros esforços que são feitos para moderar, manter documentação, responder os colegas, criar snippets, criar screencasts... enfim, cada um contribui da maneira que se sente melhor e a coisa vai andando.</p> <p>Mas eu quero destacar aqui hoje alguns projetos brasileiros bacanas - e seguramente eu posso ter passado em branco por algum ou talvez até não tenha conhecimento de outros, pois eles crescem rapidamente:</p> <p><strong>Djapian</strong> <a class="footnote-reference" href="#id29" id="id4" name="id4">[4]</a></p> <p>Projeto criado pelo <strong>Rafael SDM Sierra</strong> <a class="footnote-reference" href="#id35" id="id5" name="id5">[10]</a>. É o que eu mais gostei até agora na comunidade: utiliza do Xapian <a class="footnote-reference" href="#id36" id="id6" name="id6">[11]</a> para fazer buscas full-text em bancos de dados.</p> <p><strong>Yadsel</strong> <a class="footnote-reference" href="#id30" id="id7" name="id7">[5]</a></p> <p>Criado por mim, está começando a ganhar corpo, com o uso de outras pessoas fora eu e meu emprego <a class="footnote-reference" href="#id37" id="id8" name="id8">[12]</a>. É uma biblioteca que inclui uma API e ferramentas para evolução e regressão de bancos de dados, se baseando em drivers para cada SGBD ou ORM.</p> <p><strong>django-diario</strong> <a class="footnote-reference" href="#id31" id="id9" name="id9">[6]</a></p> <p>Criado pelo <strong>Semente</strong>, é uma aplicação plugável de blog. Idéia muito bem sacada: você baixa, coloca no seu projeto e pronto!</p> <p><strong>django-durus</strong> <a class="footnote-reference" href="#id32" id="id10" name="id10">[7]</a></p> <p>Criado pelo <strong>Andrews Medina</strong> <a class="footnote-reference" href="#id26" id="id11" name="id11">[1]</a>, este também é muito interessante. É uma interface para acesso ao SGBDOO Durus <a class="footnote-reference" href="#id38" id="id12" name="id12">[13]</a>, que acredito que será incorporado como backend oficial no futuro.</p> <p><strong>django-zodb</strong></p> <p>Também criado pelo <strong>Andrews Medina</strong> <a class="footnote-reference" href="#id26" id="id13" name="id13">[1]</a>, este é semelhante ao <strong>django-durus</strong> mas para o SGBDOO <strong>ZODB</strong> <a class="footnote-reference" href="#id39" id="id14" name="id14">[14]</a>. Ainda não foi disponibilizado.</p> <p><strong>bingo</strong> <a class="footnote-reference" href="#id33" id="id15" name="id15">[8]</a></p> <p>CMS (sistema de gestão de conteúdo, como o WordPress <a class="footnote-reference" href="#id40" id="id16" name="id16">[15]</a> ou Joomla <a class="footnote-reference" href="#id41" id="id17" name="id17">[16]</a>) criado pelo <strong>Andrews Medina</strong> <a class="footnote-reference" href="#id26" id="id18" name="id18">[1]</a>, que ainda não foi disponibilizado.</p> <p><strong>django-gadgets</strong> <a class="footnote-reference" href="#id34" id="id19" name="id19">[9]</a></p> <p>Criado por mim, já está na versão 1.0 (suporte completo à API). Útil para a criação de Gadgets para o iGoogle, Google Desktop, OpenSocial <a class="footnote-reference" href="#id42" id="id20" name="id20">[17]</a>, Orkut, MySpace, Ning, Hi5, etc.</p> <p>Seria injusto destacar esses projetos e não destacar o aclamado snippet do <strong>Rodrigo Senra</strong> <a class="footnote-reference" href="#id43" id="id21" name="id21">[18]</a> sobre classes de modelo dinâmicas, que pode ser encontrado em <a class="footnote-reference" href="#id44" id="id22" name="id22">[19]</a>. Outro destaque ainda deve ser dado ao field <strong>DateTimeField</strong> <a class="footnote-reference" href="#id45" id="id23" name="id23">[20]</a> de autoria do Andrews Medina e aos <strong>LocalFlavors</strong> brasileiros <a class="footnote-reference" href="#id46" id="id24" name="id24">[21]</a>, que agora não me recordo o nome do autor.</p> <p>Você pode ainda encontrar outros dando uma navegada por aqui: <a class="footnote-reference" href="#id47" id="id25" name="id25">[22]</a>.</p> <p>Até a próxima!</p> <p><strong>Links relacionados</strong></p> <table class="docutils footnote" frame="void" id="id26" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a name="id26">[1]</a></td><td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id11">2</a>, <a class="fn-backref" href="#id13">3</a>, <a class="fn-backref" href="#id18">4</a>)</em> <a class="reference" href="http://pyman.blogspot.com/">http://pyman.blogspot.com/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id27" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id2" name="id27">[2]</a></td><td><a class="reference" href="http://www.flickr.com/photos/marinho/tags/tarsila/">http://www.flickr.com/photos/marinho/tags/tarsila/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id28" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id3" name="id28">[3]</a></td><td><a class="reference" href="http://www.djangobrasil.org/">http://www.djangobrasil.org/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id29" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id4" name="id29">[4]</a></td><td><a class="reference" href="http://code.google.com/p/djapian/">http://code.google.com/p/djapian/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id30" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id7" name="id30">[5]</a></td><td><a class="reference" href="http://code.google.com/p/yadsel/">http://code.google.com/p/yadsel/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id31" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id9" name="id31">[6]</a></td><td><a class="reference" href="http://code.google.com/p/django-diario/">http://code.google.com/p/django-diario/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id32" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id10" name="id32">[7]</a></td><td><a class="reference" href="http://code.google.com/p/django-durus/">http://code.google.com/p/django-durus/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id33" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id15" name="id33">[8]</a></td><td><a class="reference" href="http://code.google.com/p/bingo/">http://code.google.com/p/bingo/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id34" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id19" name="id34">[9]</a></td><td><a class="reference" href="http://code.google.com/p/django-gadgets/">http://code.google.com/p/django-gadgets/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id35" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id5" name="id35">[10]</a></td><td><a class="reference" href="http://blog.stiod.com.br/">http://blog.stiod.com.br/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id36" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id6" name="id36">[11]</a></td><td><a class="reference" href="http://www.xapian.org/">http://www.xapian.org/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id37" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id8" name="id37">[12]</a></td><td><a class="reference" href="http://www.tron.com.br/">http://www.tron.com.br/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id38" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id12" name="id38">[13]</a></td><td><a class="reference" href="http://www.mems-exchange.org/software/durus/">http://www.mems-exchange.org/software/durus/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id39" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id14" name="id39">[14]</a></td><td><a class="reference" href="http://www.zope.org/Wikis/ZODB">http://www.zope.org/Wikis/ZODB</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id40" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id16" name="id40">[15]</a></td><td><a class="reference" href="http://wordpress.org/">http://wordpress.org/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id41" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id17" name="id41">[16]</a></td><td><a class="reference" href="http://joomla.org/">http://joomla.org/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id42" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id20" name="id42">[17]</a></td><td><a class="reference" href="http://code.google.com/apis/opensocial/">http://code.google.com/apis/opensocial/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id43" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id21" name="id43">[18]</a></td><td><a class="reference" href="http://rodsenra.vox.com/">http://rodsenra.vox.com/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id44" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id22" name="id44">[19]</a></td><td><a class="reference" href="http://www.djangosnippets.org/snippets/314/">http://www.djangosnippets.org/snippets/314/</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id45" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id23" name="id45">[20]</a></td><td><a class="reference" href="http://code.djangoproject.com/browser/django/trunk/django/db/models/fields/__init__.py">http://code.djangoproject.com/browser/django/trunk/django/db/models/fields/__init__.py</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id46" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id24" name="id46">[21]</a></td><td><a class="reference" href="http://code.djangoproject.com/browser/django/trunk/django/contrib/localflavor/br">http://code.djangoproject.com/browser/django/trunk/django/contrib/localflavor/br</a></td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id47" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id25" name="id47">[22]</a></td><td><a class="reference" href="http://code.google.com/hosting/search?q=label:django">http://code.google.com/hosting/search?q=label:django</a></td></tr> </tbody> </table> </div> Matéria na revista Infohttp://marinhobrandao.com/blog/p/materia-na-revista-info/Bom, agora que voltamos à ativa, vamos botar esse blog aqui pra ferver.<br><br>O primeiro destaque que quero dar é à matéria que será publicada sobre o Django na <span style="font-weight: bold;">revista Info</span> [1] do mês de <span style="font-weight: bold;">dezembro/2007</span>. Quem está elaborando é a simpática <span style="font-weight: bold;">Cibele Gandolpho</span>. Esta matéria terá foco no potencial da ferramenta para oportunidades profissionais.<br><br>Criamos um tópico [2] no grupo com o objetivo de movimentar a comunidade em prol de dar a ela informações como cases de negócio e profissionais.<br>O tópico surpreendeu até a nós que estamos vivenciando o crescimento do framework dia-a-dia. Só para se ter uma idéia, o <span style="font-weight: bold;">Django Sites</span> [3] publicava ontem <span style="font-weight: bold;">826</span> sites criados com Django, hoje no momento em que escrevo este, já são <span style="font-weight: bold;">833</span>, e por lá ainda não constam vários sites publicados, como este blog e o <span style="font-weight: bold;">YAH</span> [4]. Também não costam trabalhos de acesso restrito, que são cada vez mais numerosos.<br><br>Agora fica o pedido: se você têm informações a acrescentar ao tópico para informações sobre o Django no Brasil, como cases e trabalhos experimentais, ou oportunidades de trabalho e negócio, dê uma passada por lá. Basta dizer que esta é a primeira atenção que o Django recebe da mídia abrangente nacional e isso tem vital importância para a ferramenta em nosso país.<br><br> <span style="font-weight: bold;">Links relacionados:</span><br> <ol><li><a href="http://info.abril.com.br/">http://info.abril.com.br/</a></li><li><a href="http://groups.google.com.br/group/django-brasil/browse_thread/thread/9b4a84b479b97ded">http://groups.google.com.br/group/django-brasil/browse_thread/thread/9b4a84b479b97ded</a></li><li><a href="http://www.djangosites.org/">http://www.djangosites.org/</a></li><li><a href="http://tibia.webdoisonline.com/yah/">http://tibia.webdoisonline.com/yah/</a><br> </li></ol> adorador.es 0.2 no arhttp://marinhobrandao.com/blog/p/adoradores-02-no-ar/A nova versão do <strong>adorador.es</strong> [1] está no ar.<strong> </strong> Demorou, afinal a <strong>Tarsila</strong> [2] tem sido bem exigente nas últimas semanas, e a qualidade também. A nova versão oferece, além de ajustes gerais para várias funcionalidades, o suporte a <strong>comunidades</strong> [3], o que já coloca o site em pé de igualdade com o <strong>Orkut</strong> [4], e posiciona o sistema para a próxima atualização, que focará recursos em Ajax, especialmente o novo editor XHTML, publicação de videos, bookmarks, nova ferramenta para publicação de fotos, planeta, mashup na <strong>página central</strong> [5] e outros recursos, além de ter a <strong>busca customizada</strong> [6] mais enriquecida com sites bons de contéudo, e possibilidade para customizar mais a <strong>página externa</strong> :) A migração do banco foi feita com o <strong>DBMigrations</strong> [7], que segurou muito bem o tranco. Agora vamos torcer para o <strong>DreamHost</strong> [8] ajustar a instabilidade recente do meu servidor, aí vai ficar perfeito! PS: como hoje nosso foco é o desenvolvimento dos recursos para a versão 1.0, não temos feito esforços de marketing, mas já estamos iniciando negociações de parceirias e teremos algumas novidades para os membros (não muito diferentes das do <strong>Secundum</strong> [9] e do <strong>Via6</strong> [10]), à medida que os recursos forem implementados. <strong>Links relacionados:</strong> <ol> <li><a href="http://adorador.es/">http://adorador.es/</a></li> <li><a href="http://adorador.es/marinho/tag/tarsila/">http://adorador.es/marinho/tag/tarsila/</a></li> <li><a href="http://adorador.es/central/comunidades/">http://adorador.es/central/comunidades/</a></li> <li><a href="http://www.orkut.com/">http://www.orkut.com/</a></li> <li><a href="http://adorador.es/central/">http://adorador.es/central/</a></li> <li><a href="http://www.google.com/coop/cse?cx=006858688342800770536%3Agmenxudb6o8">http://www.google.com/coop/cse?cx=006858688342800770536%3Agmenxudb6o8</a></li> <li><a href="http://code.google.com/p/dbmigrations/">http://code.google.com/p/dbmigrations/</a></li> <li><a href="http://www.dreamhost.com/">http://www.dreamhost.com/</a></li> <li><a href="http://www.secundum.com.br/">http://www.secundum.com.br/</a></li> <li><a href="http://www.via6.com.br/">http://www.via6.com.br/</a></li> </ol>Primeiro grande case de Django no Brasilhttp://marinhobrandao.com/blog/p/primeiro-grande-case-de-django-no-brasil_40/O primeiro grande projeto brasileiro em Django saiu do forno: o <a href="http://www.garimpar.com/favoritos/" target="_blank">Favoritos do Garimpar</a> é todo construído em Django e pelo que eu entendi de uma conversa com um dos criadores, os outros projetos da empresa também o são. Pra quem não conhece, a Garimpar tem objetivos ousados, que é oferecer sistema de buscas de notícias e redes sociais de forma ainda mais aprofundada que o que é hoje feito pelo <strong>Google</strong> e pelo <strong>Yahoo</strong>. Eu mesmo já troquei o <strong>del.icio.us</strong> pelo Garimpar, já que ele oferece as mesmas vantagens e algumas mais. Ponto pra <strong>internet brasileira</strong>, e ponto para o <strong>Django</strong>, que começa a se firmar.Proposta de Layout para o Django Brasilhttp://marinhobrandao.com/blog/p/proposta-de-layout-para-o-django-brasil_20/<div> <a href="http://www.flickr.com/photos/marinho/369051323/" title="photo sharing"><img src="http://farm1.static.flickr.com/182/369051323_9e8a1d01f9_m.jpg" alt=""></a> <br> <span> <a href="http://www.flickr.com/photos/marinho/369051323/">Proposta de Layout para o Django Brasil</a> <br> Originally uploaded by <a href="http://www.flickr.com/people/marinho/">Marinho Brandão</a>. </span> </div> uma das propostas que enviei para o grupo Django Brasil avaliar :)<br> <br> está bombando xD <br>Proposta de Logo para o Django Brasilhttp://marinhobrandao.com/blog/p/proposta-de-logo-para-o-django-brasil_19/<div> <a href="http://www.flickr.com/photos/marinho/369051324/" title="photo sharing"><img src="http://farm1.static.flickr.com/180/369051324_06a4f1bef7_m.jpg" alt=""></a> <br> <span> <a href="http://www.flickr.com/photos/marinho/369051324/">Proposta de Logo para o Django Brasil</a> <br> Originally uploaded by <a href="http://www.flickr.com/people/marinho/">Marinho Brandão</a>. </span> </div> A intenção é passar a idéia das tags, da marca (Django Brasil) e das cores nacionais, em conjunto com a maca do Django <br>