<?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"
	>

<channel>
	<title>Stiod</title>
	<atom:link href="http://blog.stiod.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.stiod.com</link>
	<description>Desenvolvimento, design e tecnlogia web aplicada a web social.</description>
	<pubDate>Wed, 19 Nov 2008 17:58:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Djapian - Search API for Django with Xapian</title>
		<link>http://blog.stiod.com/2008/11/19/djapian-search-api-for-django-with-xapian/</link>
		<comments>http://blog.stiod.com/2008/11/19/djapian-search-api-for-django-with-xapian/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 17:57:40 +0000</pubDate>
		<dc:creator>Caio Salim</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Xapian]]></category>

		<category><![CDATA[djapian xapian django api search]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=157</guid>
		<description><![CDATA[Criamos uma página para o projeto Djapian.
\o/

Para quem não conhece, o Djapian, é um aplicativo que você pode incorporar à sua própria solução afim de permitir buscas nos textos, essencial em aplicativos como: Wiki, Blog, CMS e todo tipo de projeto que envolva colaboração de usuários em informação.
Acesse esse post para ver um artigo completo [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=99b81671ae26f4a6a576dfd61e061224&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Criamos uma página para o projeto <strong><a href="http://www.djapian.com">Djapian.</a></strong></p>
<p>\o/</p>
<p style="text-align: center;"><img src="http://caio.stiod.com/blog2.png" width="100%" alt="Djapian - Search API for Django with Xapian " /></p>
<p>Para quem não conhece, o <strong>Djapian</strong>, é um aplicativo que você pode incorporar à sua própria solução afim de permitir buscas nos textos, essencial em aplicativos como: Wiki, Blog, CMS e todo tipo de projeto que envolva colaboração de usuários em informação.</p>
<p>Acesse <a href="http://blog.stiod.com/2007/08/25/djapian-solucao-de-search-engine-para-seu-projeto/">esse post</a> para ver um artigo completo sobre o <strong>Djapian</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/11/19/djapian-search-api-for-django-with-xapian/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Introdução ao framework javascript ExtJs - parte 1</title>
		<link>http://blog.stiod.com/2008/10/30/introducao-a-biblioteca-extjs/</link>
		<comments>http://blog.stiod.com/2008/10/30/introducao-a-biblioteca-extjs/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 13:37:24 +0000</pubDate>
		<dc:creator>Caio Salim</dc:creator>
		
		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=77</guid>
		<description><![CDATA[Já percebemos que o mercado exige que as novas interfaces alcancem níveis de usabilidade ainda maiores, e a interface com o usuário seja a mais agradável possível, com efeitos de navegação, crossbrowser, folksonômica, microformatada e assim vai.
Recentemente, em um cliente, tive que utilizar o framework javascript Extjs pra constuir uma interface no famoso estilo web [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=99b81671ae26f4a6a576dfd61e061224&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Já percebemos que o mercado exige que as novas interfaces alcancem níveis de usabilidade ainda maiores, e a interface com o usuário seja a mais agradável possível, com efeitos de navegação, crossbrowser, folksonômica, microformatada e assim vai.</p>
<p>Recentemente, em um cliente, tive que utilizar o framework javascript Extjs pra constuir uma interface no famoso estilo web 2.0 , com vários efeitos de navegação(Drag 'n Drop, Fade, Slides) e como não a conhecia tive que entrar em <em>debugLearning mode on</em>.</p>
<p>Extjs já está na sua versão 2.2 e não me aprofundei nos conhecimentos das versões anteriores e nesse post quero ser mais objetivo e pouco introdutório nos seus conceitos e ir por as mãos na massa.</p>
<p>Você pode começar baixando o código fonte com exemplos e documentação que estão em <a href="http://www.extjs.com/download">http://www.extjs.com/download</a> e aconselho também a baixar a documentação que esta em arquivo de <a title="Adobe Air" href="http://www.adobe.com/air">AdobeAir</a>.</p>
<p><strong>Pra prática logo né ?!</strong></p>
<p>Você já deve conhecer o getElementById, o getElementsByTagName e um monte de outras propriedades em javascript.</p>
<p>Segue alguns Exemplos de como funciona no ExtJs:</p>
<p>- document.getElementsById("id") = ExtJs fica Ext.get("id")<br />
- document.getElementsByTagName("tag") =  Ext.select("tag")<br />
- Recuperar todos os elementos com a classe "red-link" = Ext.select(".red-link")<br />
- Todos os DIVs com a classe "box" =  Ext.select("div .box")<br />
- Centralizar um objeto no centro da tela = Ext.get("obj").center()<br />
- E NÃO É SÓ ISSO! [Polishop Rules]</p>
<p>Pra quem conhece frameworks javascript já nota a semelhança com Jquery, Prototype e outras similares.</p>
<p>Mas o ponto forte do ExtJs são os seus <a href="http://extjs.com/deploy/dev/examples/samples.html">widgets</a> pra montar Panels, Grids, MsgBoxes, Drag'n Drop e muitos outros objetos e efeitos de navegação que tanto enchem os olhos do usuário final.</p>
<p>A seguir estarei publicando mais textos sobre as funcionalidades, dicas e algumas outras coisas que acredito serem interessantes sobre esse framework.</p>
<p>That's not all folks.</p>
<p>See you in a while!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/10/30/introducao-a-biblioteca-extjs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mudar o nome da aplicação no admin do Django</title>
		<link>http://blog.stiod.com/2008/10/22/mudar-o-nome-da-aplicacao-no-admin-do-django/</link>
		<comments>http://blog.stiod.com/2008/10/22/mudar-o-nome-da-aplicacao-no-admin-do-django/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 02:54:11 +0000</pubDate>
		<dc:creator>Rafael SDM Sierra</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=130</guid>
		<description><![CDATA[Atenção! Pode conter links inúteis
É incrivel, passei meus ultimos um ano e meio trabalhando em empresas de terceiros, porém, eu não sentia aquele prazer que só um verdadeiro programador sente ao programar.
 Mãs! Tudo mudou quando decidimos (eu e mais 4 socios) que era hora de tocar a empresa seriamente, então eu sai da empresa [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=ff921322b6cfe076d99baca600953284&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p><strong>Atenção!</strong> Pode conter links inúteis</p>
<p>É incrivel, passei meus ultimos um ano e meio trabalhando em empresas de terceiros, porém, eu não sentia aquele prazer que só um <a href="http://tinyurl.com/2rz8x6">verdadeiro programador</a> sente ao <a href="http://desciclo.pedia.ws/wiki/POG">programar</a>.</p>
<p> <strong>Mãs!</strong> Tudo mudou quando decidimos (eu e mais 4 socios) que era hora de tocar a empresa seriamente, então eu sai da empresa onde trabalhava e segui viagem para <a href="http://stiod.com">minha própria empresa</a>.</p>
<p>Bom, enrolei muito já, vamos ao que interessa.</p>
<p>Você já deve ter se revoltado com o <a href="http://djangoproject.com">Django</a>, mais precisamente com o aplicativo <a href="http://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin">Admin</a>, quando você era obrigado a aceitar uma versão capitalizada (no sentido da primeira-letra-maiúscula, e não financeiro) do nome do seu aplicativo na tela inicial da administração.<br />
<img src="http://blog.stiod.com/wp-content/uploads/2008/10/admin02t-300x80.png" alt="" title="Admin" width="300" height="80" class="alignnone size-medium wp-image-128" /></p>
<p>Porém, agora sei que é possivel modificar esse nome que fica com fundo azul, tudo graças a uma introspecção no código do Django, algo que eu dificilmente faria trabalhando para terceiros (esse foi o motivo de eu ter escrito aquelas abobrinhas ali em cima :P), e ao que tudo indica, essa "funcionalidade", não está documentada (pelo menos não foi fácil encontrar informações sobre isso, tanto que devo um link aqui).</p>
<p>Pra resolver esse problema é simples, basta editar o model desejado e adicionar dentro da classe <a href="http://docs.djangoproject.com/en/dev/ref/models/options/#ref-models-options">Meta</a> um atributo chamado "app_label" (repare que ele não se encontra na documentação), e com isso o model será agrupado no nome que você der para ele, o interessante, é que você pode agrupar varios aplicativos dentro de uma só tabela, desde que todos os models tenham o mesmo nome no app_label.</p>
<p>Mas o mais bizarro mesmo, é que você pode modificar o app_label de outros aplicativos que não fazem parte do seu projeto, por exemplo, ao adicionar as seguintes linhas em algum model.py seu:</p>
<pre class="python"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">contrib</span>.<span style="color: black;">auth</span>.<span style="color: black;">models</span> <span style="color: #ff7700;font-weight:bold;">import</span> User</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">User._meta.<span style="color: black;">app_label</span> = <span style="color: #483d8b;">&quot;AWAAAY&quot;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li></ol></pre>
<p>Você vai jogar o modelo User pra dentro da tabela <strong>AWAAAAY</strong>.</p>
<p>Só gostaria de deixar claro que usar essa "funcionalidade" (não sei se isso seria realmente uma funcionalidade, já que não está documentada) pode resultar em comportamentos adversos (do projeto, não seus), uma vez que eu não estudei completamente o código-fonte do Django pra saber até onde vão os efeitos desse atributo.</p>
<p>So, have fun with moderation.</p>
<p>Em tempo: Estou com o Django-1.0<br />
Nota de copyright: A imagem que utilizei aqui pertence ao site http://djangoproject.com</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/10/22/mudar-o-nome-da-aplicacao-no-admin-do-django/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Django com WSGI</title>
		<link>http://blog.stiod.com/2008/10/15/django-com-mod_wsgi/</link>
		<comments>http://blog.stiod.com/2008/10/15/django-com-mod_wsgi/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 18:35:33 +0000</pubDate>
		<dc:creator>Ricardo Perez</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[python django mod_wsgi]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=99</guid>
		<description><![CDATA[Para quem usa o mod_python para servir suas aplicações em Django e esta insatisfeito ou  teve algum problemas com o mesmo. Pois é, eu mesmo tive um baita problemão com o mod_python e precisava de solução urgente, que fosse rápida e fácil de configurar,  uma ótima alternativa que eu encontrei foi o mod_wsgi [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=16d6638a359587a410348fe0eff49043&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Para quem usa o mod_python para servir suas aplicações em Django e esta insatisfeito ou  teve algum problemas com o mesmo. Pois é, eu mesmo tive um baita problemão com o mod_python e precisava de solução urgente, que fosse rápida e fácil de configurar,  uma ótima alternativa que eu encontrei foi o mod_wsgi (http://code.google.com/p/modwsgi/), logo de inicio verifiquei que num servidor de alto acesso de usuários a diferença de performance foi visivelmente absurda, hoje em dia só uso o mod_wsgi.Não vou abranger instalação do mod_wsgi mas somente a configuração do Apache e do arquivo wsgi</p>
<p>No seu arquivo de configurção do apache</p>
<pre class="apache"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">WSGIDaemonProcess <span style="color: #00007f;">user</span> processes=<span style="color: #ff0000;">2</span> maximum-requests=<span style="color: #ff0000;">500</span> threads=<span style="color: #ff0000;">1</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">WSGIProcessGroup usergroup</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">WSGIScriptAlias / /path/para/aplicacao <span style="color: #adadad; font-style: italic;"># sabendo que é a pasta onde fica a aplicação e não ela</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #00007f;">Alias</span> /public /path/para/aplicacao/app/public/</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li></ol></pre>
<p>crie um arquivo na pasta da sua aplicação com o nome app.wsgi</p>
<pre class="python"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">sys</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/path/para/aplicacao/'</span><span style="color: black;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'DJANGO_SETTINGS_MODULE'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'app.settings'</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">application = django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>.<span style="color: black;">WSGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li></ol></pre>
<p>Maiores Informações: <a href="http://code.google.com/p/modwsgi/">http://code.google.com/p/modwsgi/</a> e<br />
<a href="http://code.google.com/p/modwsgi/wiki/InstallationInstructions">http://code.google.com/p/modwsgi/wiki/InstallationInstructions</a></p>
<p>Referência:<br />
<a href="http://ericholscher.com/blog/2008/jul/8/setting-django-and-mod_wsgi/">http://ericholscher.com/blog/2008/jul/8/setting-django-and-mod_wsgi/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/10/15/django-com-mod_wsgi/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Importação e exportação no Oracle (linha de comando)</title>
		<link>http://blog.stiod.com/2008/10/15/importacao-e-exportacao-oracle/</link>
		<comments>http://blog.stiod.com/2008/10/15/importacao-e-exportacao-oracle/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 17:59:52 +0000</pubDate>
		<dc:creator>Rafael Monteiro</dc:creator>
		
		<category><![CDATA[Oracle]]></category>

		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=107</guid>
		<description><![CDATA[Olá galera, meu nome é Rafael Monteiro e esse é o meu primeiro post aqui na Stiod.
Atualmente desenvolvo em PHP e venho utilizando os SGBD's: MySQL, PostgreSQL e Oracle.
Espero conseguir manter a qualidade das informações passadas pelos demais membros do blog...
Bom, vamos ao que interessa.
Hoje vou dar uma pequena dica, acerca de dois comandos que [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=6f339dafa4060287c94cbd471a33cf23&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Olá galera, meu nome é Rafael Monteiro e esse é o meu primeiro post aqui na Stiod.</p>
<p>Atualmente desenvolvo em PHP e venho utilizando os SGBD's: MySQL, PostgreSQL e Oracle.</p>
<p>Espero conseguir manter a qualidade das informações passadas pelos demais membros do blog...</p>
<p>Bom, vamos ao que interessa.</p>
<p>Hoje vou dar uma pequena dica, acerca de dois comandos que por muitas vezes são desconhecidos pelos próprios usuários do Oracle.</p>
<p>São os comandos <strong>EXP</strong> (export) e <strong>IMP</strong> (import), acessíveis via linha de comando.</p>
<p><span id="more-107"></span></p>
<p>Tais comandos permitem realizar operações de backup e recuperação de dados.</p>
<p>Caso você os utilize sem fornecer argumentos, será emitido um prompt, que solicitará os parâmetros necessários.</p>
<p>Entretanto, pode ser mais viável inserir a linha de comando com os argumentos já preenchidos, de acordo com a necessidade.</p>
<p>Em linha de comando, através de:</p>
<p><code>imp -help</code><br />
ou<br />
<code>exp -help</code></p>
<p>é possível visualizar as palavras-chave disponíveis.</p>
<p>Um exemplo simples de exportação seguido de importação é o seguinte:</p>
<p><code>exp schema/senha file=arquivo.dmp tables=tabela rows=yes</code></p>
<p>Nesse caso é gerado o arquivo <em>"arquivo.dmp"</em> com base no dump da tabela <em>"tabela"</em> contido no schema especificado.</p>
<p><code>imp schema/senha file=arquivo.dmp fromuser=x touser=y</code></p>
<p>Aqui, é importado para o schema especificado o conteudo de <em>"arquivo.dmp"</em>.<br />
Caso o dump tenha sido gerado de um schema diferente do qual será importado deve-se utilizar os argumentos <strong>fromuser</strong> (proprietário do schema de exportação) e <strong>touser</strong> (proprietário do schema de importação).</p>
<p>Realizando o processo de exportação/importação dessa forma, além de uma maior simplicidade, é inegável a redução do tempo para a geração do dump, comparando-se com um utilitário gráfico.</p>
<p>Veja mais em:<br />
<a href="http://www.psoug.org/reference/import.html">http://www.psoug.org/reference/import.html</a><br />
<a href="http://www.psoug.org/reference/export.html">http://www.psoug.org/reference/export.html</a><br />
<a href="http://www.orafaq.com/wiki/Import_Export_FAQ">http://www.orafaq.com/wiki/Import_Export_FAQ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/10/15/importacao-e-exportacao-oracle/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Django EmailMessage(Erro Com Cópia Oculta)</title>
		<link>http://blog.stiod.com/2008/09/08/django-emailmessageerro-bcc/</link>
		<comments>http://blog.stiod.com/2008/09/08/django-emailmessageerro-bcc/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 17:58:02 +0000</pubDate>
		<dc:creator>Ricardo Perez</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[email bcc cco tips]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=81</guid>
		<description><![CDATA[Hoje deparei com um pequeno problema no módulo EmailMessage do Django, eu precisava mandar um email oculto em uma certa funcionalidade, apesar do EmailMessage dar suporte a cópia oculta(BCC),  ele definitvamente mostra para os outros destinatários do email quem foi enviado o email oculto(¬¬), dando uma buscadinha no Google encontrei essa snippet, FixedEmailMessage(http://www.djangosnippets.org/snippets/630/), que [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=16d6638a359587a410348fe0eff49043&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Hoje deparei com um pequeno problema no módulo EmailMessage do Django, eu precisava mandar um email oculto em uma certa funcionalidade, apesar do EmailMessage dar suporte a cópia oculta(BCC),  ele definitvamente mostra para os outros destinatários do email quem foi enviado o email oculto(¬¬), dando uma buscadinha no Google encontrei essa snippet, <a href="http://www.djangosnippets.org/snippets/630/" target="_blank">FixedEmailMessage</a>(http://www.djangosnippets.org/snippets/630/), que além de resolver este problema, também tem suporte a CC.</p>
<p>Vai la um exemplo:</p>
<p><code><br />
FixedEmailMessage('titulo', 'corpo', from_email='ex@exemplo.com', to=['para@exemplo.com'], bcc=['oculto@email.com'], cc=['copiado@exemplo.com']).send()</code></p>
<p>Referência: <a href="http://www.djangosnippets.org/snippets/630/" target="_blank">http://www.djangosnippets.org/snippets/630/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/09/08/django-emailmessageerro-bcc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Indíces em PostgreSQL</title>
		<link>http://blog.stiod.com/2008/08/09/indices-em-postgresql/</link>
		<comments>http://blog.stiod.com/2008/08/09/indices-em-postgresql/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 03:49:53 +0000</pubDate>
		<dc:creator>Rafael SDM Sierra</dc:creator>
		
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://blog.beta.stiod.com/?p=71</guid>
		<description><![CDATA[Um dos grandes problemas de performances em bancos de dados são os indíces, ou mais precisamente, a falta deles.
Antes de mais nada, o que raios é um índice?
Um índice nada mais é do que um conjunto de tuplas ordenadas, vamos pegar como exemplo a seguinte tabela:

CREATE TABLE usuarios (
id INTEGER,
login VARCHAR(20),
senha VARCHAR(40)
);

Nessa tabela, nenhum índice [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=ff921322b6cfe076d99baca600953284&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Um dos grandes problemas de performances em bancos de dados são os <a href="http://www.postgresql.org/docs/8.3/interactive/indexes-intro.html">indíces</a>, ou mais precisamente, a falta deles.</p>
<p>Antes de mais nada, <strong>o que raios é um índice?</strong></p>
<p>Um índice nada mais é do que um conjunto de tuplas ordenadas, vamos pegar como exemplo a seguinte tabela:<br />
<code><br />
CREATE TABLE usuarios (<br />
id INTEGER,<br />
login VARCHAR(20),<br />
senha VARCHAR(40)<br />
);<br />
</code></p>
<p>Nessa tabela, nenhum índice foi criado, então, vamos inserir alguns registros:<br />
<code><br />
INSERT INTO usuarios (id, login, senha) VALUES (1, 'usuario1', 'senha1');<br />
INSERT INTO usuarios (id, login, senha) VALUES (2, 'usuario2', 'senha2');<br />
INSERT INTO usuarios (id, login, senha) VALUES (3, 'usuario3', 'senha3');<br />
...<br />
INSERT INTO usuarios (id, login, senha) VALUES (300000, 'usuario300000', 'senha300000');<br />
</code></p>
<p>Agora temos 300,000 usuários no nosso banco de dados, uma quantidade pequena, mas já serve ao nosso proposito, vamos fazer um select que nos retorne um usuário qualquer:<br />
<code><br />
=# SELECT login FROM usuarios WHERE login='usuario2';<br />
login<br />
----------<br />
usuario2<br />
(1 row)</code></p>
<p>Time: 179.047 ms</p>
<p>Se saiu bem....179ms pra encontrar um resultado, agora vamos fazer outro:<br />
<code><br />
=# SELECT login FROM usuarios WHERE login='usuario223432';<br />
login<br />
---------------<br />
usuario223432<br />
(1 row)</code></p>
<p>Time: 191.386 ms</p>
<p>Hmmm....subiu pra 191, o que aconteceria se eu precisasse pegar o registro número mais alto, tipo 9999999? Teriamos um sério problema certo? Mas porque isso acontece?? Vamos entrar no cerne do PostgreSQL, vou mudar meu SQL:<br />
<code><br />
=# EXPLAIN SELECT login FROM usuarios WHERE login='usuario223432';<br />
QUERY PLAN<br />
------------------------------------------------------------<br />
Seq Scan on usuarios  (cost=0.00..5910.00 rows=1 width=13)<br />
Filter: ((login)::text = 'usuario223432'::text)<br />
(2 rows)</code></p>
<p>Time: 0.792 ms</p>
<p>Repare na primeira linha do resultado, ele está fazendo uma <a href="http://pt.wikipedia.org/wiki/Busca_linear">busca sequencial</a> até encontrar o resultado desejado. De forma resumida, isso significa que ele vai comparar cada linha que tiver na tabela até encontrar o que você, desde o primeiro até o último (ou até encontrar), se o seu resultado estiver nos primeiros registros legal, mas se for um dos ultimos bilhões....</p>
<p>Pra resolver esse problema, basta criar um índice na tabela:<br />
<code><br />
=# CREATE INDEX idx_usuarios_login ON usuarios(login);<br />
CREATE INDEX<br />
Time: 4020.891 ms<br />
</code></p>
<p>Agora vamos repetir o mesmo SQL:<br />
<code><br />
=# SELECT login FROM usuarios WHERE login='usuario223432';<br />
login<br />
---------------<br />
usuario223432<br />
(1 row)</code></p>
<p>Time: 1.528 ms</p>
<p>OMFG!!!! Caiu de 190 pra 1!!!! UM!!!! Preciso falar mais alguma coisa?</p>
<p><strong>"Puxa vida Rafael, você resolveu todos os problemas da minha vida, vou criar indíces em todas os campos de todas as minhas tabelas e em todas as combinações possiveis!!"</strong><br />
Você ta loco??? Se você fizer isso sua performance em modificações (INSERT, UPDATE, DELETE) vai sofrer <strong>muito</strong>. Isso porque se sempre que você modificar os valores, o PostgreSQL vai precisar reorganizar os indíces pra garantir que a performance no SELECT seja alta.</p>
<p><strong>"Carai, como infernos eu vou saber em que campos criar um índice então?"</strong><br />
Fácil, crie apenas em campos que você use WHERE e ORDER BY, dessa forma você vai manter o equilibrio na performance.</p>
<p><strong>"Pow cara, mas e as chaves primárias e estrangeiras?"</strong><br />
Bom, uma chave primaria naturalmente já é um indíce, porém, uma chave estrangeira não, então, se você tiver um campo que seja uma chave estrangeira para um campo em outra tabela, crie um índice nele também.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/08/09/indices-em-postgresql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internacionalização de software: i18n</title>
		<link>http://blog.stiod.com/2008/06/09/internacionalizacao-de-software/</link>
		<comments>http://blog.stiod.com/2008/06/09/internacionalizacao-de-software/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 09:09:56 +0000</pubDate>
		<dc:creator>Yoshio</dc:creator>
		
		<category><![CDATA[C/C++]]></category>

		<category><![CDATA[Delphi]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.stiod.com.br/?p=82</guid>
		<description><![CDATA[Fiquei um tempo sem colocar nada no blog, mas voltei. Recebi até um comunicado oficial do Rafael que se não colocasse nada no blog, era para pegar minhas coisas e passar no RH (ou era para passar no RH e depois pegar as minhas coisas?).
Introdução
Imagine que seu professor de linguagem C++ (ou outra de sua [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=7e736ce812faf84fd8b1c6914f3624eb&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p><em>Fiquei um tempo sem colocar nada no blog, mas voltei. Recebi até um comunicado oficial do Rafael que se não colocasse nada no blog, era para pegar minhas coisas e passar no RH (ou era para passar no RH e depois pegar as minhas coisas?).</em></p>
<p><strong>Introdução</strong><br />
Imagine que seu professor de linguagem C++ (ou outra de sua preferência, mas uma linguagem descente, por favor) lhe passe uma lição de casa: “Faça um <a href="http://pt.wikipedia.org/wiki/MMORPG">MMORPG</a> em 5 idiomas diferentes”.<br />
Simples não? Qualquer um faz um MMORPG em C++ da noite para o dia. O detalhe desta simples aplicação é permitir a utilização ou diversão (já que é um game) em outros idiomas.<br />
Se você pensou em um colocar vários “IFs” ou “CASEs” para cada linha que contenha uma string...<br />
<span id="more-70"></span><br />
Bom, talvez não seja algo tão errado, se você tiver tempo para colocar vários “IFs” para cada uma das 4.000 strings de frases aleatórias dos <a href="http://pt.wikipedia.org/wiki/NPC">NPCs </a> do seu game. O trabalho todo será seu mesmo.<br />
Tudo bem, é só uma lição de casa, mas se não for pegue suas coisas e passe no RH (ou passe no RH e depois pegue as suas coisas... vocês entenderam né?).</p>
<p>Bom, sem encher muita lingüiça, vamos ao ponto: <strong>i18n</strong></p>
<p><strong>What?</strong><br />
<a href="http://pt.wikipedia.org/wiki/Internacionaliza%C3%A7%C3%A3o_(software)">i18n</a> é o acrônimo de <em>internacionalization</em> (“i” + 18 letras + “n”). As vantagens de se utilizar i18n são:</p>
<p>- O programa não precisa ser re-compilado a cada alteração nas traduções. Alternar entre os idiomas pode ser feito dinamicamente em tempo de execução (salvo algumas situações específicas).</p>
<p>- Este método é válido para muitas linguagens, não só o C++, o processo é praticamente o mesmo.</p>
<p>- Se o programa não conseguir encontrar a string traduzida ele exibirá a string original.</p>
<p>- A pessoa que fará as traduções não precisa entender de programação. Como o arquivo a ser traduzido está separado do programa, você pode mandar para um tradutor e depois só fazer as modificações necessárias para encaixar no programa (poucas coisas mesmo).</p>
<p>- Seu amigo chinês vai poder jogar seu game! De quebra ele indica o seu game para outros amiguinhos chineses que devem ser mais ou menos uns 10 mil só no bairro dele.</p>
<p>- Formatação correta de moeda, pesos, medidas, data, hora, etc. para o idioma escolhido.</p>
<p>- Aumento do alcance do seu programa/game em escala mundial. Para um alemão, nada melhor do que se utilizar um software em alemão. Para um brasileiro, nada melhor do que utilizar um software em português, não é?</p>
<p>- Perdão. Não existe nada melhor do que utilizar um software em português brasileiro (ora pois!).</p>
<p>- E outros benefícios que eu não me lembro ou não consegui inventar.</p>
<p><strong>Nada mastigado, apenas o caminho das pedras...</strong><br />
Mas como utilizar a/o i18n em meu programa? A melhor forma é utilizando o <a href="http://www.gnu.org/software/gettext/">gettext</a>. Seu uso é relativamente simples (claro, se você for um programador de verdade). Os passos e quesitos básicos para implementar as traduções são:</p>
<p>- O programa para estar perfeitamente internacionalizado deve ter suporte a caracteres UNICODE, mas tem que ter suporte de verdade ao UNICODE. Por exemplo, no Delphi só é possível manipular esses caracteres internamente sem poder exibi-los, pois os componentes dele não possuem suporte ao UNICODE (e vai saber quando terá de verdade). Mas você pode comprar componentes de terceiros com suporte a UNICODE, ou fazer que nem eu que alterei o componente TEdit na mão e fez o antivírus apitar na hora de rodar o programa (depois eu conto essa história).</p>
<p>- Instalar o gettext se você não tiver.</p>
<p>- Marcar no código as strings que serão traduzidas. Por exemplo:</p>
<pre class="c"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Welcome to the Django Mr. %s!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, name<span style="color: #66cc66;">&#41;</span>;</div></li></ol></pre>
<p>se transforma em:</p>
<pre class="c"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span>_<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Welcome to the Django Mr. %s!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span>, name<span style="color: #66cc66;">&#41;</span>;</div></li></ol></pre>
<p>onde “_()” é uma função do gettext que marca a string para extração. Esta talvez seja a parte chata da coisa, mas não é tanto esforço assim.</p>
<p>- Um botão ou opção no seu programa para o usuário mudar o idioma.</p>
<p>- Extrair as strings (veja o manual do gettext). Será gerado um arquivo *.po com as strings marcadas.</p>
<p>- Traduzir as strings para um idioma em um editor de texto UNICODE. Utilizando o exemplo anterior ficaria assim:<br />
"Welcome to the Django Mr. %s!\n"<br />
"Bem-vindo a Djelva Sr. %s!\n"</p>
<p>- Compilar o arquivo traduzido com uma ferramenta apropriada, será gerado um arquivo *.mo. Uma ferramenta que utilizo para compilar e editar é o <a href="http://www.poedit.net/">Poedit</a>.</p>
<p>- Copiar o arquivo compilado para a pasta correta, normalmente (ou sempre) é em “diretório_do_programa/locale/sigla_do_idioma/LC_MESSAGES/default.mo”. Como em “meu_programa_bilingue/locale/pt_BR/LC_MESSAGES/default.mo”. Agora você sabe por que alguns programas com vários idiomas possuem uma pasta “locale” no diretório de instalação?</p>
<p>- Testar o seu programa.</p>
<p>- Para alterar a tradução basta editar apenas o *.po do idioma e compila-lo novamente, sem precisar mexer no código fonte do programa.</p>
<p>Basicamente, para cada idioma haverá um arquivo compilado diferente. De preferência, o idioma original do seu programa deve estar em inglês, mas nada impede que você o faça em português.</p>
<p><strong>Dicas</strong><br />
- Ao fazer a tradução procure fazer com que a tradução possua um tamanho próximo ao do original.</p>
<p>- No caso do Delphi você pode utilizar o <a href="http://dybdahl.dk/dxgettext/">dxgettext</a>, ele faz a captura automática das strings dos componentes. Infelizmente, faça uma boa leitura da documentação dele, pois existem alguns atributos de componentes que não devem ser traduzidos.</p>
<p>- Antes de fazer o seu programa estude (é estude!) um pouco sobre os idiomas que você irá disponibilizar em seu programa. Dependendo do idioma será necessário colocar algumas alterações no programa, como a escrita da direita-para-esquerda, de cima-para-baixo, etc. Não é nada muito difícil de fazer, muitas vezes isso é feito de forma automática pelo programa (depende muito da API utilizada) ou só mudar uma flag do componente que está utilizando (que também depende muito da API utilizada XD).</p>
<p>- Permita que o usuário escolha o idioma. Não obrigue ele a utilizar somente o idioma definido pelo SO. Eu mesmo já sofri muito com isso. :´(</p>
<p>- Para aplicações Desktop o ideal é que o texto possa fluir na tela de forma dinâmica, pois um texto pode aumentar ou diminuir de dimensões ao mudar de idioma, como de "texto romanizado" para "ideogramas chineses". Faça com que os itens da tela se redimensionem e se posicionem automaticamente. Uma boa opção é deixar com quebras de linhas automáticas, tomando o cuidado para que o texto não fique em cima de outros itens ao quebrar a linha.</p>
<p>Repare que só é possível fazer essas traduções com textos estáticos do programa. Se vierem dados do banco de dados já é mais complicado. A não ser que suas tabelas estejam bem modeladas, pelo menos na <a href="http://en.wikipedia.org/wiki/Third_normal_form">3NF</a> já daria para traduzir boa parte dos campos. Por exemplo, uma tabela de cores poderia ter os campos “cor_ptbr” e “cor_en”. Mas como fazer traduções corretamente de banco de dados isso eu deixo para próxima (pois nem eu sei XD).</p>
<p>Não entendeu nada do que falei? Clique <a href="http://www.google.com.br">aqui</a> que tudo ficará mais claro.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/06/09/internacionalizacao-de-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Como rodar um DATEDIFF no Mysql 4.0?</title>
		<link>http://blog.stiod.com/2008/06/09/como-rodar-um-datediff-no-mysql-40/</link>
		<comments>http://blog.stiod.com/2008/06/09/como-rodar-um-datediff-no-mysql-40/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 03:32:25 +0000</pubDate>
		<dc:creator>Gabriel Verta</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.stiod.com.br/?p=81</guid>
		<description><![CDATA[Estava Rafael Monteiro, que não é o Rafael SDM aqui da Stiod, mas um amigo que trabalha comigo, utilizando a versão 5 do MySQL em um projeto, onde era necessário retornar a diferença entre datas de uma tabela. Até ai tudo bem, ele estava utilizando o datediff, cuja definição da documentação[1] fala:

- "DATEDIFF() retorna o [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=621065003626775a5e65c60a7198ccf6&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Estava Rafael Monteiro, que não é o <a href="http://blog.stiod.com.br/?author=1">Rafael SDM aqui da Stiod</a>, mas um amigo que trabalha comigo, utilizando a versão 5 do MySQL em um projeto, onde era necessário retornar a diferença entre datas de uma tabela. Até ai tudo bem, ele estava utilizando o datediff, cuja definição da documentação<a href="#datediff1">[1]</a> fala:<br />
<em><br />
- "DATEDIFF() retorna o número de dias entre a data inicial expr e a data final expr2. expr e expr2 são expressões de datas ou data e hora. Apenas a parte da data dos valores são usados no cálculo."<br />
</em><br />
Dando como exemplo:<br />
<code><br />
mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');<br />
        -> 1<br />
</code><br />
Porém quando chegou na hora de colocar o site em produção no ambiente disponibilizado pelo cliente, tinhamos apenas a versão 4.0 do MySQL, que não suporta o comando DATEDIFF.<br />
Uma alternativa que encontramos para isto foi converter as datas para unix_timestamp e dividir a diferença pelo número segundos de um dia (86400)<br />
<code><br />
select floor((unix_timestamp(data_final) - unix_timestamp(data_inicial)) / 86400) as diferenca from tabela;<br />
</code></p>
<p>É isso ae.. Rafael Monteiro e seus códigos elegantes... xD</p>
<p><a name="datediff1">[1]</a> <a href="http://dev.mysql.com/doc/refman/4.1/pt/date-and-time-functions.html">http://dev.mysql.com/doc/refman/4.1/pt/date-and-time-functions.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/06/09/como-rodar-um-datediff-no-mysql-40/feed/</wfw:commentRss>
		</item>
		<item>
		<title>GoTo: Agilizando acessos a comandos comuns</title>
		<link>http://blog.stiod.com/2008/05/08/goto-agilizando-acessos-a-comandos-comuns/</link>
		<comments>http://blog.stiod.com/2008/05/08/goto-agilizando-acessos-a-comandos-comuns/#comments</comments>
		<pubDate>Thu, 08 May 2008 14:50:31 +0000</pubDate>
		<dc:creator>Rafael SDM Sierra</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.stiod.com.br/?p=80</guid>
		<description><![CDATA[Quantas vezes você já teve que abrir 5 terminais e em cada um digitar algo como:
ssh usuario@servidor -p porta
Ai depois tem que voltar em cada um pra digitar a senha e só então entrar no servidor.
Afim de agilizar um pouco esse processo, criei esse script que permite que você execute os comandos mais comuns com [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=ff921322b6cfe076d99baca600953284&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Quantas vezes você já teve que abrir 5 terminais e em cada um digitar algo como:<br />
<code>ssh usuario@servidor -p porta</code></p>
<p>Ai depois tem que voltar em cada um pra digitar a senha e só então entrar no servidor.<br />
Afim de agilizar um pouco esse processo, criei esse script que permite que você execute os comandos mais comuns com um simples:<br />
<code>goto 0</code></p>
<p>Para instalar o programa basta baixar o script <a href="http://pub.stiod.com/goto">aqui</a>, colocar em algum lugar do seu path e adicionar permissão de execução:</p>
<pre>
$ wget http://blog.stiod.com.br/wp-content/uploads/goto
$ sudo mv goto /usr/bin/
$ sudo chmod +x /usr/bin/goto
</pre>
<p>A manutenção dos comandos é bastante simples, basta executar o goto sem passar nenhum argumento adicional e você vai cair na interface de gerencia dele, algo como:</p>
<pre>Chose an option:

	add &lt;command&gt;
	del &lt;id&gt;
	edit &lt;id &lt;new-command&gt;
	quit
	license
:
</pre>
<p>Para adicionar um comando na lista, basta digitar:<br />
<code>: add ssh user@servidor -p porta</code></p>
<p>Em seguida esse comando vai automaticamente aparecer na lista de comandos disponíveis:</p>
<pre>
Chose an option:
	0: ssh user@servidor -p porta

	add &lt;command&gt;
	del &lt;id&gt;
	edit &lt;id&gt; <new-command&gt;
	quit
	license
:
</pre>
<p>Lembrando que o comando pode ser qualquer coisa que esteja no seu $PATH e o "cd" (que faz parte do shell -seja bash, sh, ksh, etc-)</p>
<p>Para remover um comando da lista, basta digitar "del 0", ou o número do comando listado.<br />
Caso queira modificar um comando, masta digitar "edit 0 comando novo".</p>
<p>Para executar um atalho, basta digitar no shell:<br />
<code><br />
$ goto 0<br />
</code></p>
<p>E ele automaticamente vai executar o comando programado.</p>
<p>P.S.: Essa ideia não foi minha, ela foi kibada de um script que o <a href="http://ulissescastro.wordpress.com/">Ulisses</a> fez.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/05/08/goto-agilizando-acessos-a-comandos-comuns/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
