<?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>lucmult &#187; python</title>
	<atom:link href="http://blog.lucmult.com.br/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lucmult.com.br</link>
	<description>Python, Django and Plone</description>
	<lastBuildDate>Thu, 12 Nov 2009 01:30:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Relato PythonBrasil[5]</title>
		<link>http://blog.lucmult.com.br/2009/09/relato-pythonbrasil5/</link>
		<comments>http://blog.lucmult.com.br/2009/09/relato-pythonbrasil5/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 03:14:05 +0000</pubDate>
		<dc:creator>lucmult</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[apyb]]></category>

		<guid isPermaLink="false">http://blog.lucmult.com.br/?p=116</guid>
		<description><![CDATA[Foi ótima a PythonBrasil[5].
Primeiramente quero começar dizendo que aqui é um relato pessoal e vou tentar evitar falar das coisas óbvias, como elogiar e/ou agradecer Luciano Ramalho, Senra, Deo, Niemeyer, e outros.
O nosso evento foi muito bom, mesmo Caxias tentando diminuir o seu brilho, com muito frio, neblina e chuva.
Comecei perdendo a palestra do Jacob, [...]]]></description>
			<content:encoded><![CDATA[<p>Foi ótima a PythonBrasil[5].</p>
<p>Primeiramente quero começar dizendo que aqui é um relato pessoal e vou tentar evitar falar das coisas óbvias, como elogiar e/ou agradecer Luciano Ramalho, Senra, Deo, Niemeyer, e outros.</p>
<p>O nosso evento foi muito bom, mesmo Caxias tentando diminuir o seu brilho, com muito frio, neblina e chuva.</p>
<p>Comecei perdendo a palestra do Jacob, devido ao mau tempo de Caxias que atrasou meu voo.</p>
<p>Senti falta de grandes amigos como Bruno Gola, Humberto Diógenes, Werneck, Daniel Cassiano, Lameiro, outros e até o Andrews Medina que estava lá mas nos encontramos pouco.</p>
<p>Aliás, um puxão de orelha para mim, que nessa PythonBrasil, conversei pouco com novas pessoas.</p>
<p>Só no último dia vi quem era o Kao, mau conversei com o nosso promotor do pypy, Santagada, o divertidíssimo ikke e o nosso programador do ano Marinho.</p>
<p>O Marinho com sua palestra relâmpago me convenceu a dar uma olhada no seu &#8220;filho&#8221; Geraldo Reports.</p>
<p>Vale mais um agradecimento ao Bruno (e ao Yahoo!) e ao xiru que me forneceram caronas nos primeiros dias de boa vontade. <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Conheci várias coisas que posso passar a utilizar, o Rudá Figueiras, me mostrou alguns benchmarks com o Zope/Plone, e a ferramente de benchmark FunkLoad &#8211; http://funkload.nuxeo.org/ que certamente vamos usar na Simples.</p>
<p>Na palestra Django Apps do Leandro Zanuz, que eu cheguei no finalzinho, eu vi que ele utilizou uma ferramenta legal para o analisar os dados de profile, eu já fiz uns profilers em alguns casos e essa ferramenta pareceu bem útil, mas preciso descobrir qual é. :-/</p>
<h2>Alguns fatos em ordem cronológica:</h2>
<p>O finalzinho da palestra do Santagada sobre o compilador JavaScript do pypy, me deixou mais motivado a tentar o pypy.</p>
<p>Enquanto o Rudá me mostrava o benchemark do Zope/Plone eu perdia a palestra do Bruno e do Rodrigo Bamboo, que vi só o finalzinho e todos elogiaram, evento bom é isso, enquanto você algo legal você perde outras coisas bem legais.</p>
<p>A palestra do Colin sobre a turbinada que eles estão fazendo no nosso CPython, me deixou mais motivado a estudar o CPython.</p>
<p>A palestra do Niemeyer colocou todos para pensar sobre as nossas qualidades e defeitos enquanto liguagem e comunidade, comparando-os com Java.</p>
<p>O GIL (Global Interpreter Lock), foi referenciado diversas vezes no evento e normalmente citando-o como uma limitação de nossa implementação padrão. </p>
<p>O fato engraçado foi que na palestra do Niemeyer, quando ele começou a criticar o GIL a chuva que nunca parava de cair, virou uma tempetade que fazia um barulho dificultando ouvir a palestra.</p>
<h2>A APyB</h2>
<p>Tivemos nossa Assembléia, e a votação para a nova Diretoria, agora eu sou Diretor Administrativo. <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Depois tivemos um debate sobre a nossa postura sobre as PythonBrasis, porque não tivemos nenhum candidatura no prazo. Prazo prorrogado por 4 semanas. E Curitiba é uma forte candidata.</p>
<p>Minha Palestra</p>
<p>Minha palestra foi após a do Gustavo Niemeyer, entre nossos palestras teve a foto do evento. </p>
<p>Na minha palestra ficaram poucas pessoas. <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  E não sube utilizar bem o tempo.</p>
<p>A material já está on-line, pode ser visto <a href="http://www.pythonbrasil.org.br/2009/sobre-o-evento/slides/ddd.py/view">aqui</a> .</p>
<p>Agora é nos prepararmos para começar oreganizar a Python Brasil [6].</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucmult.com.br/2009/09/relato-pythonbrasil5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Django + AMF + Flex</title>
		<link>http://blog.lucmult.com.br/2009/08/django-amf-flex/</link>
		<comments>http://blog.lucmult.com.br/2009/08/django-amf-flex/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 18:40:29 +0000</pubDate>
		<dc:creator>lucmult</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.lucmult.com.br/?p=100</guid>
		<description><![CDATA[
Hoje fui almoçar na casa da mamãe e levei o note &#8211; o macluck. Meu pai estava lá estudando o C# com o Flex, que eles estão começando a utlizar na  Mult . 

O assunto foi o que utilizar entre o .Net e o Flex? Web Service (xml), JSON ou qualquer outra coisa.
Com isso [...]]]></description>
			<content:encoded><![CDATA[<p>
Hoje fui almoçar na casa da mamãe e levei o note &#8211; o macluck. Meu pai estava lá estudando o C# com o Flex, que eles estão começando a utlizar na <a href="http://multprocessing.com.br"> Mult </a>. </p>
<p>
O assunto foi o que utilizar entre o .Net e o Flex? Web Service (xml), JSON ou qualquer outra coisa.</p>
<p>Com isso fiquei pensando nas alternativas em Python e pesquisando o pessoal recomenda utilizar o formato AMF para serializar e transmitir objetos do servidor para o cliente Flex.</p>
<p>Logo pensei em tentar fazer algo em Django + AMF.</p>
<p>E é isso que vamos ver, faremos um Hello World. <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><h2> O que precisamos ? </h2>
<p>Django, SQLite e DjangoAMF no servidor para conseguirmos enviar objetos para o cliente Flex.</p>
<p>Flex SDK para compilarmos os fontes Flex e gerarmos o .swf que irá rodar no browser.</p>
<p>O Flex roda no Flash Player, portante você precisará dele também, mas hoje em dia todo mundo tem, afinal precisamos assistir ao YouTube. <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2> Instanlando o Flex SDK </h2>
<p>Faça o download do <a href="http://download.macromedia.com/pub/flex/sdk/flex_sdk_3.zip"> Flex SDK </a>, esse é um arquivão gigante com o Flex SDK compilado para as 3 plataformas (Linux, Mac e Win), ou seja basta descompactar em uma pasta que está pronto.</p>
<p>Mas crie uma pasta só para esse arquivo .zip, pois ele irá criar tudo na pasta em que ele está.</p>
<p>Então façamos isso:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw2">mkdir</span> -p ~<span class="sy0">/</span>bin<span class="sy0">/</span>flex-sdk &nbsp; <span class="co0"># vou colocar no diretório bin na home do meu usuário</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">cd</span> ~<span class="sy0">/</span>bin<span class="sy0">/</span>flex-sdk</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw2">wget</span> http:<span class="sy0">//</span>download.macromedia.com<span class="sy0">/</span>pub<span class="sy0">/</span><span class="kw2">flex</span><span class="sy0">/</span>sdk<span class="sy0">/</span>flex_sdk_3.<span class="kw2">zip</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw2">unzip</span> flex_sdk_3.<span class="kw2">zip</span></div>
</li>
</ol>
</div>
<p>Vamos testar compilando um exemplo:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">cd</span> ~<span class="sy0">/</span>bin<span class="sy0">/</span>flex-sdk<span class="sy0">/</span>samples<span class="sy0">/</span>explorer</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ .<span class="sy0">/</span>build.<span class="kw2">sh</span> <span class="co0"># ou &#39;sh build.sh&#39; ou no windows &#39;build.bat&#39;</span></div>
</li>
</ol>
</div>
<p>Agora verifque se funcionou abrindo o arquivo ~/bin/flex-sdk/samples/explorer/explorer.html </p>
<p>Você verá algo como: </p>
<p><img class="alignnone size-full wp-image-103" title="flex_explorer" src="http://blog.lucmult.com.br/blog/wp-content/uploads/2009/08/flex_explorer.png" alt="Flex Explorer" width="640" height="289" /></p>
<h2> Vamos para o Django </h2>
<p>Eu utilizo o virtualenv, mas você pode fazer sem ele se você preferir.</p>
<p>Criando o virtualenv, o importante é utilizar pelo menos o Python 2.5, pois o DjangoAMF requer.</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">cd</span> ~<span class="sy0">/</span>src_rm <span class="co0"># diretório onde deixo os fontes que desenvolvo</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ virtualenv django_flex</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">cd</span> django_flex </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">source</span> bin<span class="sy0">/</span>activate</div>
</li>
</ol>
</div>
<p>Instalar o Django 1.1 e o DjangoAMF:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ easy_install django </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw2">mkdir</span> src &nbsp; <span class="co0"># ~/src_rm/django_flex/src</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">cd</span> src</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw2">wget</span> http:<span class="sy0">//</span>globalbase.dl.sourceforge.jp<span class="sy0">/</span>djangoamf<span class="sy0">/</span><span class="nu0">36602</span><span class="sy0">/</span>djangoamf<span class="nu0">-0.8</span>.<span class="kw2">zip</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw2">unzip</span> djangoamf<span class="nu0">-0.8</span>.<span class="kw2">zip</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">cd</span> djangoamf<span class="nu0">-0.8</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ python setup.py <span class="kw2">install</span></div>
</li>
</ol>
</div>
<h2> Criando uma aplicação django </h2>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">cd</span> ~<span class="sy0">/</span>src_rm<span class="sy0">/</span>django_flex</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ django-admin.py startproject mysite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">cd</span> mysite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ python manage.py startapp teste</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ vi settings.py</div>
</li>
</ol>
</div>
<p>Configure no settings.py, o banco de dados e adicione o Middleware do DjangoAMF que permitirá enviar os objetos pelo protocolo AMF.</p>
<div class="geshi no python">
<div class="head">Arquivo: mysite/settings.py</div>
<ol>
<li class="li1">
<div class="de1">DATABASE_ENGINE = <span class="st0">&#39;sqlite3&#39;</span></div>
</li>
<li class="li1">
<div class="de1">DATABASE_NAME = <span class="st0">&#39;mydb.db&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="me1">MIDDLEWARE_CLASSES</span> = <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&#39;amf.django.middleware.AMFMiddleware&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Agora vamos fazer um método que será chamado pelo Flex:</p>
<div class="geshi no python">
<div class="head">Arquivo: mysite/teste/views.py</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">datetime</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> horaAgora<span class="br0">&#40;</span>request<span class="br0">&#41;</span>: &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">datetime</span>.<span class="kw3">datetime</span>.<span class="me1">now</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Vamos configurar para essse método utilizar o AMF:</p>
<div class="geshi no python">
<div class="head">Arquivo: mysite/urls.py</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">urlpatterns = patterns<span class="br0">&#40;</span><span class="st0">&#39;&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="me1"><span class="br0">&#40;</span>r</span><span class="st0">&#39;^gateway/teste/(.*)&#39;</span>, <span class="st0">&#39;amf.django.views&#39;</span>, <span class="br0">&#123;</span><span class="st0">&#39;views&#39;</span>: <span class="st0">&#39;mysite.teste.views&#39;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Isso é o básico para você conseguir fazer a chamada no Flex.</p>
<h2> Fazendo o nosso cliente Flex </h2>
<p>Eu vou utilizar o Flex sem o Flex Builder que é pago, você pode fazer com Flex Builder, ou se você tiver no Windows com o FlashDevelop, que dá para trabalhar muito bem com o Flex.</p>
<p>Eu fiz o cliente Flex em outra pasta fora do Django e do virtualenv, para dar a idéia de ser totalmente separado, só fazendo a chamada via HTTP (e AMF).</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp;$ <span class="kw3">cd</span> src_rm</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;$ <span class="kw2">mkdir</span> flex_cliente</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;$ <span class="kw3">cd</span> flex_cliente</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;$ vi hora_servidor.mxml</div>
</li>
</ol>
</div>
<p>Agora vem a parte que eu não conheço muito e praticamente só copiei <a href="http://chevitarese.wordpress.com/2009/07/24/django-django-e-flex-1%C2%B0-exemplo"> daqui </a>.</p>
<p>Muito embora, eu também não domino o Django eu comecei a estudar ele a pouco tempo e não sei muito não. :-/</p>
<div class="geshi no actionscript">
<div class="head">Arquivo: hora_servidor.mxml</div>
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>?<span class="kw3">xml</span> <span class="kw3">version</span>=<span class="st0">&quot;1.0&quot;</span> encoding=<span class="st0">&quot;utf-8&quot;</span> ?<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>mx:Application xmlns:mx=<span class="st0">&quot;http://www.adobe.com/2006/mxml&quot;</span> layout=<span class="st0">&quot;absolute&quot;</span> creationComplete=<span class="st0">&quot;getTime()&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>mx:Script<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sy0">&lt;!</span><span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">import</span> mx.<span class="me1">controls</span>.<span class="me1">Alert</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">import</span> mx.<span class="me1">rpc</span>.<span class="me1">events</span>.<span class="me1">ResultEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">import</span> mx.<span class="me1">rpc</span>.<span class="me1">events</span>.<span class="me1">FaultEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">import</span> mx.<span class="me1">rpc</span>.<span class="me1">remoting</span>.<span class="me1">mxml</span>.<span class="me1">RemoteObject</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> <span class="kw3">getTime</span><span class="br0">&#40;</span><span class="br0">&#41;</span>: <span class="kw3">void</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">var</span> ro: RemoteObject;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ro = <span class="kw2">new</span> RemoteObject<span class="br0">&#40;</span><span class="st0">&quot;teste&quot;</span><span class="br0">&#41;</span>; <span class="co1">// Aqui é o nome do objeto remoto, no nosso caso temos apenas uma função, mas o que está após o /gateway/ no urls.py, será considerado o objeto remote</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ro.<span class="me1">endpoint</span> = <span class="st0">&#39;http://127.0.0.1:8000/gateway/&#39;</span> &nbsp;<span class="co1">// URL do que chama-se de gateway</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ro.<span class="me1">addEventListener</span><span class="br0">&#40;</span>FaultEvent.<span class="me1">FAULT</span>, getErro<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ro.<span class="me1">addEventListener</span><span class="br0">&#40;</span>ResultEvent.<span class="me1">RESULT</span>, showResult<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ro.<span class="me1">getOperation</span><span class="br0">&#40;</span><span class="st0">&#39;horaAgora&#39;</span><span class="br0">&#41;</span>.<span class="kw3">send</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; &nbsp; <span class="co1">// nome do método do objeto remoto</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">public</span> <span class="kw2">function</span> getErro<span class="br0">&#40;</span>ro:FaultEvent<span class="br0">&#41;</span>: <span class="kw3">void</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;Alert.<span class="kw3">show</span><span class="br0">&#40;</span>ro.<span class="me1">fault</span>.<span class="me1">faultDetail</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">public</span> <span class="kw2">function</span> showResult <span class="br0">&#40;</span>ro: ResultEvent<span class="br0">&#41;</span> :<span class="kw3">void</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;Alert.<span class="kw3">show</span><span class="br0">&#40;</span><span class="st0">&quot;A hora é &quot;</span> + ro.<span class="me1">result</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#93;</span><span class="br0">&#93;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>mx:Script<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>mx:Application<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>Agora temos que compilar o danado.</p>
<p>Eu não coloquei o diretório <strong> bin </strong> do Flex SDK no PATH, pois eu não uso o Flex no dia-a-dia, portanto terei que utilizar o caminho para o compilador, mas se você for utilizar isso no dia-a-dia, recomendo colocar no PATH.</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;$ <span class="kw3">cd</span> ~<span class="sy0">/</span>src_rm<span class="sy0">/</span>flex_cliente</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;$ &nbsp;~<span class="sy0">/</span>bin<span class="sy0">/</span>flex-sdk<span class="sy0">/</span>bin<span class="sy0">/</span>mxmlc hora_servidor.mxml</div>
</li>
</ol>
</div>
<p>Pronto você já tem um cliente Flex, pode abrí-lo no Firefox, no Safari eu não consegui abrir o .swf, tive que fazer um HTML que chama o .swf. :-/</p>
<p>Se você tiver sorte já irá funcionar <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  E você verá algo como:</p>
<p><img class="alignnone size-full wp-image-102" title="flex_cliente_ok" src="http://blog.lucmult.com.br/blog/wp-content/uploads/2009/08/flex_cliente_ok.png" alt="Flex Cliente OK" width="622" height="284" /></p>
<p>Ou você não teve sorte e apareceu algo como:</p>
<p><img class="alignnone size-full wp-image-101" title="flex_cliente_erro" src="http://blog.lucmult.com.br/blog/wp-content/uploads/2009/08/flex_cliente_erro.png" alt="Flex Cliente Erro" width="640" height="289" /></p>
<p>Mas você não deve ter sorte, e teremos que adicionar um novo arquivo no &#8220;servidor&#8221;, lá no Django, para o Flex funcionar, eu não entendi direito o que é isso e porque as vezes funciona sem esse arquivo.</p>
<p>Eu estava estudando isso por puro prazer, então não fui muito a fundo nos questões referentes ao flex, porém isso é algo importante para se saber ao usar em um ambiente de produção.</p>
<p>Vamos vamos resolver:</p>
<p>Lá no Django vamos criar um novo arquivo e disponibilizá-lo na raiz do site.</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ <span class="kw3">cd</span> ~<span class="sy0">/</span>src_rm<span class="sy0">/</span>django_flex<span class="sy0">/</span>mysite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $ vi crossdomain.xml</div>
</li>
</ol>
</div>
<p>O arquivo deve conter esse conteúdo:</p>
<div class="geshi no xml">
<div class="head">Arquivo: mysite/crossdomain.xml</div>
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span><span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;cross-domain-policy<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;allow-http-request-headers-from</span> <span class="re0">domain</span>=<span class="st0">&quot;*&quot;</span> <span class="re0">headers</span>=<span class="st0">&quot;*&quot;</span> <span class="re0">secure</span>=<span class="st0">&quot;false&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;allow-access-from</span> <span class="re0">domain</span>=<span class="st0">&quot;*&quot;</span> <span class="re0">secure</span>=<span class="st0">&quot;false&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/cross-domain-policy<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Ainda falta ensinar o Django a disponibilizar esse arquivo como se estivesse na raiz.</p>
<div class="geshi no python">
<div class="head">Arquivo: mysite/urls.py</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> django.<span class="me1">conf</span> <span class="kw1">import</span> settings</div>
</li>
<li class="li1">
<div class="de1">&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> settings.<span class="me1">DEBUG</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; urlpatterns += patterns<span class="br0">&#40;</span><span class="st0">&#39;&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>r<span class="st0">&#39;^(crossdomain.xml)$&#39;</span>, <span class="st0">&#39;django.views.static.serve&#39;</span>, <span class="br0">&#123;</span><span class="st0">&#39;document_root&#39;</span>: <span class="st0">&#39;./&#39;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Provavelmente tem outras formas mais intenligentes de disponibilizar isso no raiz do Django, mas como eu sou iniciante ainda, fiz desse jeito mesmo que é simples o suficiente para resolver o problema. <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>E agora está pronto nosso Hello World, ou melhor, nosso What time is it ? </p>
<p>Eu achei legal e simples a forma de utilizar o AMF no Django, permitindo interagir com clientes Flex.</p>
<p>E vocês, o que acharam ?</p>
<h2> Fontes:</h2>
<p>Django AMF: <a href"http://djangoamf.sourceforge.jp/"> http://djangoamf.sourceforge.jp/ </a><br />
Django + Flex: <a href="http://chevitarese.wordpress.com/2009/07/24/django-django-e-flex-1%C2%B0-exemplo/">http://chevitarese.wordpress.com/2009/07/24/django-django-e-flex-1%C2%B0-exemplo/</a><br />
Django + Flex: <a href="http://chevitarese.files.wordpress.com/2009/07/djangoflex.pdf">http://chevitarese.files.wordpress.com/2009/07/djangoflex.pdf </a><br />
VIM + Flex: <a href="http://ubuntuforums.org/showthread.php?t=742981">http://ubuntuforums.org/showthread.php?t=742981</a><br />
Meu VIM, agora com flex: <a href="http://hg.lucmult.com.br/vim/rev/32e24bf7768a" > http://hg.lucmult.com.br/vim/rev/32e24bf7768a </a><br />
Flex SDK: <a href="http://download.macromedia.com/pub/flex/sdk/flex_sdk_3.zip"> http://download.macromedia.com/pub/flex/sdk/flex_sdk_3.zip </a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucmult.com.br/2009/08/django-amf-flex/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mercurial &#8211; Publique seu repositórios</title>
		<link>http://blog.lucmult.com.br/2009/07/hg-mercurial-web/</link>
		<comments>http://blog.lucmult.com.br/2009/07/hg-mercurial-web/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 23:44:26 +0000</pubDate>
		<dc:creator>lucmult</dc:creator>
				<category><![CDATA[admin]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.lucmult.com.br/?p=36</guid>
		<description><![CDATA[Hg - Mercurial Web - Publique seus repositórios na Web, usando o wsgi]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 170px"><a href="http://mercurial.selenic.com/wiki/"><img class=" " title="Mercurial Logo" src="http://www.selenic.com/hg-logo/logo-droplets-200.png" alt="Mercurial Logo" width="160" height="192" /></a><p class="wp-caption-text">Mercurial Logo</p></div>
<p>
Já tem um tempo que eu quero começar a usar o <a href="http://mercurial.selenic.com/wiki/">Mercurial</a> de verdade e como agora eu tenho um host nada mais justo de disponibilizar meus repositórios <a href="http://hg.lucmult.com.br/">lá</a> &#8211; ou seria <a href="http://hg.lucmult.com.br/">aqui</a> !?</p>
<p>
O Mercurial tem algumas maneiras de disponibilizar o repositório, mas eu queria:</p>
<ol>
<li> Uma página que dê para navegar no código</li>
<li> Permitir fazer o clone via http</li>
<li> Permitir fazer o pull (subir as alterações) para o servidor também via http</li>
<li> Usar WSGI ao invés de CGI</li>
<li> Integrar no apache que eu já tenho configurado lá</li>
</ol>
<p>
<strong>Servidor:</strong> Ubuntu 8.10</p>
<p>
Eu estou utilizando o <a href="https://launchpad.net/~mercurial-ppa">repositóro do mercurial</a>, assim eu tenho a última versão, mas deve funcionar com a versão padrão do Ubuntu.</p>
<p><pre><strong>Pacotes necessários</strong>: mercurial, mercurial-common, libapache2-mod-wsgi</pre>
<p>
Talvez tenha mais algum, mas eu não lembrei de anotar durante a instalação :-/</p>
<p>
Como eu já disse, eu já tinha o apache rodando com alguns Virtuais Hosts, eu queria apenas adicionar mais um Virtual Host naparte do apache.</p>
<p>
Verifique se o mod_wsgi já está habilitado:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0"># a2enmod wsgi</span></div>
</li>
<li class="li1">
<div class="de1">Module wsgi already <span class="kw3">enable</span></div>
</li>
</ol>
</div>
<p>
A configuração é dividia em 3 partes:</p>
<p>
1 &#8211; VirtualHost no Apache<br />
2 &#8211; A aplicação mercurial.web (WSGI)<br />
3 &#8211; Os repositórios hg (mercurial)</p>
<p>
Eu criei uma pasta na home para manter a aplicação e os repositórios</p>
<p>
Criei o arquivo hgwebdir.wsgi, ou baixe direto do <a href="http://selenic.com/repo/hg-stable/file/67389a94825a/contrib/hgwebdir.wsgi">repositório contrib do Mercurial</a>.</p>
<div class="geshi no python">
<div class="head">Arquivo: <strong>/home/lucmult/hg/hgwebdir.wsgi</strong></div>
<ol>
<li class="li1">
<div class="de1"><span class="kw1">from</span> mercurial <span class="kw1">import</span> demandimport<span class="sy0">;</span> demandimport.<span class="me1">enable</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> mercurial.<span class="me1">hgweb</span>.<span class="me1">hgwebdir_mod</span> <span class="kw1">import</span> hgwebdir</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">application = hgwebdir<span class="br0">&#40;</span><span class="st0">&#39;/home/lucmult/hg/hgweb.config&#39;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>O arquivo só precisa dessas 3 linhas.</p>
<p>
<strong>IMPORTANTE</strong>: Utilize o caminho absoluto do arquivo de configuração, eu perdi muito tempo por conta desse detalhe.</p>
<p>
Crie o arquivo de configuração que referenciamos no arquivo anterior.</p>
<p>
Hoje, o modo correto de publicar vários repositórios é assim:</p>
<div class="geshi no ini">
<div class="head">Arquivo: <strong>/home/lucmult/hg/hgweb.config</strong></div>
<ol>
<li class="li1">
<div class="de1"><span class="re0"><span class="br0">&#91;</span>paths<span class="br0">&#93;</span></span></div>
</li>
<li class="li1">
<div class="de1">/ <span class="sy0">=</span> /home/lucmult/hg/projects/*</div>
</li>
</ol>
</div>
<p>
Onde os subdiretórios de <strong> projects</strong> são repositórios mercurial distintos.</p>
<p>
<p>
Crie um repositório como exemplo:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">$ <span class="kw2">mkdir</span> -p <span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects<span class="sy0">/</span>sandbox</div>
</li>
<li class="li1">
<div class="de1">$ <span class="kw3">echo</span> <span class="st0">&quot;lero lero&quot;</span> <span class="sy0">&gt;</span> <span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects<span class="sy0">/</span>sandbox<span class="sy0">/</span>readme.txt</div>
</li>
<li class="li1">
<div class="de1">$ <span class="kw3">cd</span> <span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects<span class="sy0">/</span>sandbox</div>
</li>
<li class="li1">
<div class="de1">$ hg init</div>
</li>
<li class="li1">
<div class="de1">$ hg add</div>
</li>
<li class="li1">
<div class="de1">$ hg ci -m <span class="st0">&quot;meu primeiro commit&quot;</span></div>
</li>
<li class="li1">
<div class="de1">$ <span class="kw3">echo</span> <span class="st0">&quot;bip bip&quot;</span> <span class="sy0">&gt;&gt;</span> readme.txt</div>
</li>
<li class="li1">
<div class="de1">$ hg st</div>
</li>
<li class="li1">
<div class="de1">$ hg ci -m <span class="st0">&quot;segundo commit&quot;</span></div>
</li>
</ol>
</div>
</pre>
<p>Agora só falta o VirtualHost:</p>
<div class="geshi no apache">
<div class="head">Arquivo: <strong>/etc/apache2/sites-available/hg.lucmult.com.br</strong></div>
<ol>
<li class="li1">
<div class="de1">&lt;VirtualHost *:<span class="nu0">80</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ServerName</span> hg.lucmult.com.br</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ServerAlias</span> hg.lucianopacheco.com.br</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ErrorLog</span> /var/log/apache2/hg.lucmult.com.br-error_log</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">CustomLog</span> /var/log/apache2/hg.lucmult.com.br-access_log common</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; WSGIScriptAliasMatch ^<span class="br0">&#40;</span>.*<span class="br0">&#41;</span> /home/lucmult/hg/hgwebdir.wsgi$<span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># To enable &quot;daemon&quot; mode, uncomment following lines. (Read mod_wsgi docs for more info)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; WSGIDaemonProcess hg.lucmult.com.br <span class="kw1">user</span>=lucmult <span class="kw1">group</span>=lucmult threads=<span class="nu0">15</span> maximum-requests=<span class="nu0">1000</span> processes=<span class="nu0">2</span> umask=<span class="nu0">0007</span> display-name=wsgi-hg.lucmult.com.br</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># some more interesting options (tested on mod_wsgi 2.0):</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; WSGIProcessGroup hg.lucmult.com.br</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;Location /&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">Allow</span> <span class="kw1">from</span> <span class="kw1">all</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AuthType</span> Digest</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AuthName</span> <span class="st0">&quot;lucmult Mercurial repositories&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; AuthDigestProvider file</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AuthUserFile</span> /home/lucmult/hg/hgusers</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;LimitExcept GET&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">Require</span> valid-<span class="kw1">user</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/LimitExcept&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/Location&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/VirtualHost&gt;</div>
</li>
</ol>
</div>
<div class="geshi no bash">
<div class="head">Habilitar o Virtual Host</div>
<ol>
<li class="li1">
<div class="de1"><span class="co0"># a2ensite hg.lucmult.com.br</span></div>
</li>
<li class="li1">
<div class="de1">Site hg.lucmult.com.br already enabled</div>
</li>
</ol>
</div>
<p>No arquivo de configuração do VirtualHost tá configurado para fazer autenticação, quando for fazer o push para o servidor.</p>
<div class="geshi no bash">
<div class="head">Para criar os usuários utilize:</div>
<ol>
<li class="li1">
<div class="de1">$ htdigest &nbsp;-c hgusers <span class="st0">&#39;lucmult Mercurial repositories&#39;</span> lucmult</div>
</li>
</ol>
</div>
<p>
Onde:<br />
<strong>-c hgusers </strong>  Criar o arquivo hgusers<br />
<strong>'lucmult Mercurial repositories'</strong> Identificação, mesmo texto que foi configurado em <strong>AuthName</strong> no Virtual Host<br />
<strong>lucmult</strong> Nome do usuário a ser criado
</p>
<p>Mais uma configuração que tem que ser feita, agora com relação a permissão.<br />
Tudo que fizemos na pasta /home/lucmult/hg, foi com o usuário lucmult, com isso o usuário que roda o apache (www-data) não tem permissão de escrita na pasta e isso impede o funcionamento.</p>
<div class="geshi no bash">
<div class="head">Atribuindo permissão para o grupo do apache <strong>www-data</strong></div>
<ol>
<li class="li1">
<div class="de1">$ <span class="kw2">chown</span> -R lucmult:www-data <span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects</div>
</li>
<li class="li1">
<div class="de1">$ <span class="kw2">chmod</span> -R g+rw &nbsp;<span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects</div>
</li>
</ol>
</div>
<p>
<strong>Imporante</strong> o endereço DNS hg.lucmult.com.br, tem que ser configurado no seu DNS.</p>
<p>Pronto agora é só reiniciar o seu apache e acessar o seu repositório, via browser ou via linha de comando. <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">hg clone http:<span class="sy0">//</span>hg.lucmult.com.br<span class="sy0">/</span>sandbox</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> sandbox</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;lero lero&quot;</span> <span class="sy0">&gt;&gt;</span> readme.txt</div>
</li>
<li class="li1">
<div class="de1">hg st</div>
</li>
<li class="li1">
<div class="de1">hg ci</div>
</li>
<li class="li1">
<div class="de1">hg push</div>
</li>
</ol>
</div>
<p>Fontes:<br />
<a href="http://devlog.waltercruz.com/mercurial_web">http://devlog.waltercruz.com/mercurial_web </a><br />
<a href="http://mercurial.selenic.com/wiki/PublishingRepositories">http://mercurial.selenic.com/wiki/PublishingRepositories </a><br />
<a href="http://mercurial.selenic.com/wiki/modwsgi">http://mercurial.selenic.com/wiki/modwsgi</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucmult.com.br/2009/07/hg-mercurial-web/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Postgres e psycopg2 8.4 no Mac OSX</title>
		<link>http://blog.lucmult.com.br/2009/07/postgres-psycopg2-mac/</link>
		<comments>http://blog.lucmult.com.br/2009/07/postgres-psycopg2-mac/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 02:34:40 +0000</pubDate>
		<dc:creator>lucmult</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[postgres]]></category>

		<guid isPermaLink="false">http://blog.lucmult.com.br/?p=29</guid>
		<description><![CDATA[Hoje precisei instalar o Postgres e o psycopg2 no Mac. Não foi muito difícil, mas não foi uma instalação normal, portanto vamos compartilhar!  
Para instalar o Postgres é fácil, basta ir no site e fazer o download do pacote compilado para o Mac que já vem tudo pronto.
Aqui o cara tem a explicação passo [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: sans-serif;">Hoje precisei instalar o <a href="http://www.postgresql.org/">Postgres</a> e o <a href="http://www.initd.org/pub/software/psycopg/">psycopg2</a> no Mac. Não foi muito difícil, mas não foi uma instalação normal, portanto vamos compartilhar! <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </span></p>
<p><span style="font-family: sans-serif;">Para instalar o <a href="http://www.postgresql.org/download/macosx">Postgres</a> é fácil, basta ir no <a href="http://www.postgresql.org/download/macosx">site</a> e fazer o download do pacote compilado para o Mac que já vem tudo pronto.</span></p>
<p><span style="font-family: sans-serif;"><a href="http://www.rodrigomerino.com.br/site/2008/12/instalando-banco-de-dados-postgresql-no-mac-os/">Aqui</a> o cara tem a explicação passo a passo do instalação.</span></p>
<p><span style="font-family: sans-serif;">Agora vem o psycopg2 que é o diferente.<br />
</span></p>
<ul>
<li>Comece <a href="http://www.initd.org/pub/software/psycopg/">Baixando</a> o <a href="http://www.initd.org/pub/software/psycopg/psycopg2-2.0.11.tar.gz">psycopg2-2.0.11.tar.gz</a></li>
<li>Descompacte</li>
<li>Configurar os headers, libs, includes do postgres</li>
<li>Edite o <strong>setup.cfg </strong>- aprendi <a href="http://jasonism.org/weblog/2008/nov/06/getting-psycopg2-work-mac-os-x-leopard/">aqui</a> como devia fazer<strong><br />
</strong></li>
</ul>
<blockquote><p><strong><span style="font-family: Courier New;">p</span><span style="font-family: Courier New;">g_config=/Library/PostgreSQL/8.4/bin/pg_config<br />
</span><span style="font-family: Courier New;">include_dirs=/Library/PostgreSQL/8.4/include<br />
</span><span style="font-family: Courier New;">library_dirs=/Library/PostgreSQL/8.4/lib</span></strong></p></blockquote>
<ul>
<li><strong>$ python setup.py config</strong></li>
<li><strong>$ python setup.py build</strong></li>
<li><strong>$ sudo python setup.py install</strong></li>
</ul>
<p>Pronto, verifique:</p>
<blockquote><p><strong>$ python</strong><br />
<strong>&gt;&gt;&gt; import psycopg2</strong><br />
<strong>&gt;&gt;&gt;</strong></p></blockquote>
<p>Agora espero que eu não deixe aqui abandonado novamente! <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucmult.com.br/2009/07/postgres-psycopg2-mac/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>OLPC Game Jam no FISL</title>
		<link>http://blog.lucmult.com.br/2008/04/olpc-game-jam-no-fisl/</link>
		<comments>http://blog.lucmult.com.br/2008/04/olpc-game-jam-no-fisl/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 02:06:02 +0000</pubDate>
		<dc:creator>lucmult</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[apyb]]></category>
		<category><![CDATA[fisl]]></category>
		<category><![CDATA[pygame]]></category>

		<guid isPermaLink="false">http://lucmult.wordpress.com/?p=20</guid>
		<description><![CDATA[OLPC Game Jam no FISL
Durante o FISL rolou o Game Jam da OLPC, que consiste em criar um jogo educativo em 30 horas para o XO da OLPC.
É uma competição e quem avalia os jogos são as próprias crianças.
O Andrews Medina e Bruno Gola se inscreveram para participar e assim que fiquei sabendo mendiguei pedi [...]]]></description>
			<content:encoded><![CDATA[<p>OLPC Game Jam no FISL</p>
<p>Durante o FISL rolou o <a href="http://wiki.laptop.org/go/Game_Jam_Brasil/2008" target="_blank">Game Jam da OLPC</a>, que consiste em criar um jogo educativo em 30 horas para o XO da OLPC.</p>
<p>É uma competição e quem avalia os jogos são as próprias crianças.</p>
<p>O <a href="http://andrewsmedina.com/" target="_blank">Andrews Medina</a> e <a href="http://blog.brunogola.com.br/" target="_blank">Bruno Gola</a> se inscreveram para participar e assim que fiquei sabendo <span style="text-decoration:line-through;">mendiguei</span> pedi para entrar na equipe também.</p>
<p>Quando eles se inscreveram já tinha começado a competição, o prazo encerrava as 20h da sexta-feira.</p>
<p>Nós fizemos a minha inscrição, mas programar que era bom nada, isso até aproximadamente às 14h da sexta-feira, ou seja, 6 horas antes de acabar o prazo.</p>
<p>Finalmente começamos a codar e resolvemos fazer isso lá no espaço da <a href="http://associacao.pythonbrasil.org/" target="_blank">APyB</a> onde tinha conexão a cabo, pois o wifi estava horrível.</p>
<p><img style="max-width:800px;" src="http://lucmult.files.wordpress.com/2008/04/img-ambiente-espaco-apyb.jpg" alt="" /></p>
<p>Essa decisão foi bem prejudicial, pois a todo momento vinham pessoas falar com a gente, ou para conhecer Python ou falar de Python, ou queriam saber como estava o andamento do jogo.</p>
<p>E não foi só isso que nos tirou a concentração, a nossa esquerda, na imagem vocês podem ver uma pessoa de camiseta azul, estavam o hermanos da <a href="http://www.python.com.ar" target="_blank">PyAr &#8211; Python Argentina</a>, e tinha uma hermana muito atraente que tirava a nossa concetração e a nossa direita havia um espaço não habitado, mas durante uma parte da tarde rolou uma discussão sobre Java X Python, mas ficar ouvindo sobre Java e J daqui e J de lá, não foi fácil.</p>
<p>Os hermanos também estavam participando do Game Jam, eles sempre participam da <a href="http://www.pyweek.org/" target="_blank">PyWeek</a> uma competição de games em Python que dura uma semana.</p>
<p>E não era o bastante, boa parte do tempo ficamos codando diretamente no chão, pois não havia cadeiras livres e nem espaço na mesa.</p>
<p>Aqui nessa foto da para ver nosso espaço no chão, da esquerda para direita, o note do Andrews, o meu MacBook e o note do Gola e o XO que recebemos para testar o jogo. Nesse momento o Gola estava inicializando o repositório http://svn.brunogola.com.br/olpyc</p>
<p><img style="max-width:800px;" src="http://lucmult.files.wordpress.com/2008/04/img-ambiente-dev-gamejam.jpg" alt="" /></p>
<p>O nosso jogo é uma réplica do Genius porém adaptado para o XO e que pode ser jogado com o XO em modo tablet. O nome final ficou como OLPyC Genius</p>
<p>Para quem não lembra o Genius.<br />
<img style="max-width:800px;" src="http://lucmult.files.wordpress.com/2008/04/genius37.jpg" alt="" /></p>
<p>Depois de conseguirmos espaço na mesa chegou um cara falando comigo:</p>
<ul>
<li><strong>Desconhecido</strong> &#8211; Você é amigo do <a href="http://humberto.digi.com.br/" target="_blank">Humberto Diógenes</a>?</li>
<li><em><strong>Eu</strong></em> &#8211; Sim.</li>
<li><strong>Desconhecido</strong> &#8211; Você que anda sempre com o CD do Mac Leopard?</li>
<li><em><strong>Eu</strong></em> &#8211; Sim, mas ninguém sabe que eu ando com esses CDs.</li>
<li><strong>Desconhecido</strong> &#8211; É que deu problema na atualização do firmware do meu Mac e eu queria o CD para tentar recuperá-lo.</li>
</ul>
<p>Mesmo deconfiando, afinal eu não o conhecia, eu emprestei o meu CD do Leopard.</p>
<p>Após algum tempo, ele ficou no stand a nossa esquerda tentando recuperar o Mac dele. Quando ele desistiu de recuperar o Mac, ele devolveu o CD e quis saber o que estávamos fazendo.</p>
<p>Quando dissemos do jogo ele falou que podia fazer umas imagens, mas a princípio nós não queríamos perder mais tempo com a arte, queríamos fazer funcionar o jogo.</p>
<p>Mas o cara é o <a href="http://valessiobrito.info/blog/" target="_blank">Valessio Brito</a> um dos caras que mais movimenta o <a href="http://br.gnome.org/bin/view/InkscapeBrasil/" target="_blank">Inkscape Brasil</a>, e fez a arte do nosso jogo ficar excelente e trouxe uma nova onda de ânimo a equipe.</p>
<p>Por volta de umas 19:40h, o hermanos ao nosso lado terminaram o jogo deles e começaram a testar e apareceu muita gente para ver o jogo deles, devia ter umas 50 pessoas em volta do stand deles e todos vibravam muito. O pior é que nesse momento o nosso jogo estava com um bug que nem rodava mais o jogo e isso causou uma grande ansiedade.</p>
<p>Finalmente as 20:05h entregamos o XO com o nosso jogo instalado! E tiramos a foto da equipe OLPyC. No momento da foto estávamos muito eufóricos e o Andrews tremia que nem vara verde!</p>
<p><img style="max-width:800px;" src="http://lucmult.files.wordpress.com/2008/04/img-olpyc-team.jpg" alt="" /></p>
<p>No momento de entrega encontramos os outros grupos participantes, 2 grupos do <a title="UNISINOS" href="http://www.unisinos.br/principal/" target="_blank">UNISINOS</a>, que têm aula de <a title="PyGame" href="http://www.pygame.org/" target="_blank">PyGame</a> na faculdade! Ficamos com inveja deles por terem aula de PyGame.</p>
<p>No dia seguinte as 2 garotinhas encarregas de julgar os jogos estavam no stand do LEC e fui mostrar para ela como jogar o OLPyC Genius, eis que ela me solta o nosso prêmio: <strong>&#8220;Eu sei, eu já joguei mais de 1000 vezes!&#8221;</strong>.</p>
<p>Ela falou meio que tirando uma da minha cara, mas foi uma felicidade única ouvir que nosso jogo foi jogado 1000 vezes!</p>
<p>No final do FISL teve o resultado do Game Jam e os hermanos ganharam com o <strong><em>PacMan de comer letras</em></strong> para formar palavras, em segundo lugar muito próximo aos hermanos ficou um dos grupos da UNISINOS com o <em><strong>tetris matemático</strong></em>.</p>
<p>Depois conversando com a organização soubemos que o nosso jogo de um erro na pré seleção, onde os adultos passavam pelo jogo para ver se funcionava e por isso ficamos em último lugar!</p>
<p>Mas a sensação de participar do GameJam foi inesquecível e sensacional. Na minha opinião foi o melhor momento do FISL.</p>
<p>Abaixo um screenshot do jogo.<br />
<img style="max-width:800px;" src="http://lucmult.files.wordpress.com/2008/04/olpyc-shot.png" alt="" /></p>
<p><strong>UPDATE:</strong> Esqueci de mencionar a impressionante <strong>portabilidade</strong> do <strong>PyGame</strong>. O mesmo código rodou sem pestenejar no <strong>Linux</strong> (note do Bola e do Andres), no meu <strong>Mac</strong> e no <strong>XO</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucmult.com.br/2008/04/olpc-game-jam-no-fisl/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>
