<?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>Duodraco</title>
	<atom:link href="http://duodra.co/feed/" rel="self" type="application/rss+xml" />
	<link>http://duodra.co</link>
	<description>Desenvolvedor PHP, Linux e Opensource</description>
	<lastBuildDate>Wed, 29 Jun 2011 11:04:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PHP 5.4 &#8211; saiba o que vem por aí</title>
		<link>http://duodra.co/post/php-5-4-saiba-o-que-vem-por-ai/</link>
		<comments>http://duodra.co/post/php-5-4-saiba-o-que-vem-por-ai/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 11:02:53 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php54]]></category>

		<guid isPermaLink="false">http://duodra.co/?p=287</guid>
		<description><![CDATA[Olá Pessoal. O PHP 5.4 vem aí com muita coisa boa! Acabou de sair o primeiro alpha release da próxima grande atualização do PHP. Quem acompanha as listas internas do desenvolvimento do PHP já sabe o que esperar. Para quem &#8230; <a href="http://duodra.co/post/php-5-4-saiba-o-que-vem-por-ai/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal. O PHP 5.4 vem aí com muita coisa boa! Acabou de sair o primeiro alpha release da próxima grande atualização do PHP. Quem acompanha as listas internas do <a class="bbli" href="http://sledge.boo-box.com/list/page/ZGVzZW52b2x2aW1lbnRvXyMjX2JveF8jI190YWdnaW5nLXRvb2wtd3BfIyNfdW5kZWZpbmVk-72">desenvolvimento<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> do PHP já sabe o que esperar. Para quem não acompanha, seguem as principais mudanças:<span id="more-287"></span></p>
<ul>
<li><strong>Remoção</strong> de funcionalidades (ou &#8220;desfuncionalidades&#8221;) legadas
<ul>
<li>Configuração de SafeMode no ini.</li>
<li>register_globals (até que enfim)</li>
<li>y2k_compliance (ini)</li>
<li>session bug compatibility mode</li>
<li>funções session_(is_registered|register|unregister)</li>
</ul>
</li>
</ul>
<ul>
<li>ext/SQLite movido para PECL</li>
<li>$_SERVER['REQUEST_TIME'] tem <a class="bbli" href="http://sledge.boo-box.com/list/page/cHJlY2lzJUUzb18jI19ib3hfIyNfdGFnZ2luZy10b29sLXdwXyMjX3VuZGVmaW5lZA==-68">precisão<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> de microsegundos</li>
<li>Valor default de default_charset (php.ini) agora é &#8216;UTF-8&#8242;</li>
<li><strong>&lt;?=</strong> é sempre disponível mesmo com short_open_tag desligada</li>
</ul>
<ul>
<li>Melhorias Gerais:
<ul>
<li>Suporte a multibyte por default</li>
<li>Suporte a Traits (Leia mais na <acronym title="Request For Comments">RFC</acronym> para <a title="RFC para Horizontal Reuse / Traits" href="https://wiki.php.net/rfc/horizontalreuse" target="_blank">Horizontal Reuse</a> e no site do <a title="Traits em PHP – herança horizontal no hlegius" href="http://www.hlegius.pro.br/traits-em-php-heranca-horizontal/" target="_blank">@hlegius</a>)</li>
<li>Suporte a array dereference (em poucas palavras, será possível fazer $foo = array_merge(&#8216;a&#8217;,'b&#8217;)[1] , sabendo que array_merge retorna um array. Veja mais no <a title="Features in PHP trunk: Array dereferencing de Johannes Schlüter" href="http://schlueters.de/blog/archives/138-Features-in-PHP-trunk-Array-dereferencing.html" target="_blank">post do Johannes</a>)</li>
<li>Suporte a referência de objetos em chamadas recursivas a serialize() e melhorada a <a class="bbli" href="http://sledge.boo-box.com/list/page/cGVyZm9ybWFuY2VfIyNfYm94XyMjX3RhZ2dpbmctdG9vbC13cF8jI191bmRlZmluZWQ=-68">performance<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> de unserialize()</li>
<li>Suporte a Dtrace</li>
<li>Suporte a API para Stream <a class="bbli" href="http://sledge.boo-box.com/list/page/TWV0YWRhdGFfIyNfYm94XyMjX3RhZ2dpbmctdG9vbC13cF8jI191bmRlZmluZWQ=-64">Metadata<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a></li>
<li>Melhoria no uso de memória, performance e otimizações para a Zend Engine
<ul>
<li>Melhorada a porformance do @ (evite usá-lo de qualquer maneira <img src='http://duodra.co/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</li>
<li>Adicionados caches para eliminar repetições de bindings em tempo de execução para funções, classes, métodos, etc</li>
</ul>
</li>
<li>Melhorias no CLI e FastCGI</li>
<li>Melhorias nas extensões: CURL, Date, DBA, Hash, Intl, LDAP, Mysql, OpenSSL, PDO-Dblib, PostgreSQL, Zlib, SNMP</li>
<li>Adicionadas a SPL:
<ul>
<li>RegexIterator::getRegex()</li>
<li>SplObjectStorage::getHash()</li>
<li>CallbackFilterIterator e RecursiveCallbackFilterIterator</li>
</ul>
</li>
<li>JSON:
<ul>
<li>Interface JsonSerializable</li>
<li>json_decode: opção JSON_BIGINT_AS_STRING</li>
<li>opções json_encode:</li>
<li>JSON_NUMERIC_CHECK converte strings numéricas em ints</li>
<li>JSON_PRETTY_PRINT e JSON_UNESCAPED_SLASHES</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Exitem muitas outras <a class="bbli" href="http://sledge.boo-box.com/list/page/bXVkYW4lRTdhc18jI19ib3hfIyNfdGFnZ2luZy10b29sLXdwXyMjX3VuZGVmaW5lZA==-68">mudanças<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>, e esta é só a versão alpha. Para mais informações confira o <a title="Anuncio do PHP 5.4 no php.net" href="http://www.php.net/archive/2011.php#id2011-06-28-1" target="_blank">anúncio oficial</a>.</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "php54";
            bb_bid  = "1603894";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_width = "600";bb_limit = "6";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/php-5-4-saiba-o-que-vem-por-ai/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Integração Contínua e PHP</title>
		<link>http://duodra.co/post/integracao-continua-e-php/</link>
		<comments>http://duodra.co/post/integracao-continua-e-php/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 02:02:18 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[geral]]></category>

		<guid isPermaLink="false">http://duodra.co/?p=279</guid>
		<description><![CDATA[Voltando a postar no blog depois de MUITO tempo&#8230; praticamente um post de páscoa. Mas vamos voltar com a corda toda! Eu prometi há muito tempo um post sobre Integração Contínua &#8211; e cá está ele . Antes de mais &#8230; <a href="http://duodra.co/post/integracao-continua-e-php/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Voltando a postar no blog depois de MUITO tempo&#8230; praticamente um post de páscoa. Mas vamos voltar com a corda toda! Eu prometi há muito tempo um post sobre Integração Contínua &#8211; e cá está ele .<span id="more-279"></span></p>
<p>Antes de mais nada, vamos à definição de CI (Continuous Integration):</p>
<blockquote><p>Em engenharia de software, Integração Contínua (IC) implementa  continuamente  processos de aplicação de controle de qualidade &#8211; pequenos pedaços de esforço, aplicados frequentemente. Integração Contínua visa melhorar a qualidade de software e reduzir o tempo gasto para entregá-lo, substituindo a prática tradicional de aplicar o controle de qualidade depois de completo todo o desenvolvimento.[1]</p></blockquote>
<p>Indo além: a prática da Integração Contínua vai melhorar a Qualidade e a Velocidade de entrega de seus <a class="bbli" href="http://sledge.boo-box.com/list/page/c29mdHdhcmVzXyMjX2Jhcl8jI190YWdnaW5nLXRvb2wtd3BfIyNfMTYwMzg5NA==-64">softwares<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>, e de cada nova versão que ele venha a ter. IC também é uma das práticas que auxiliam metodologias ágeis.</p>
<p>A premissa é de que tenhamos uma parte de nosso processo que aconteça continuamente &#8211; parte essa que deve construir uma versão/build/release/pacote/&lt;insira aqui o que você chama de versão nova de seu software&gt; &#8230; lógico que para ter uma versão nova, não basta um <a class="bbli" href="http://sledge.boo-box.com/list/page/ZGVzZW52b2x2ZWRvcl8jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-68">desenvolvedor<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> dizer que está pronto; a nova versão está condicionada ao sucesso de testes previamente estabelecidos, que vão acontecer a cada nova TENTATIVA de realizar uma nova versão. Tentativa com sucesso: novo release; falha: esqueça esse build.</p>
<p>Lógico que nós, desenvolvedores evoluídos, não gostamos de reinventar a roda e tentamos sempre tirar proveito de soluções bem estabelecidas de software para resolver nossos problemas (e é para isso que o software serve: para resolver problemas). Existem muitas ferramentas prontas para nos ajudar na tarefa da integração contínua, automatizando o processo de recuperação de uma nova versão candidata, execução de testes e finalização/empacotamento/deploy.<br />
Entre elas temos o <a title="Home do CruiseControl" href="http://cruisecontrol.sourceforge.net/" target="_blank">CruiseControl </a>(com versões .NET e Ruby e sua adaptação para o PHP: phpUnderControl), Continuum, Gump, Go, Tinderbox &#8230; mas de todos acredito que o mais simples (e direto ao ponto) e extensível seja o <a title="Home do Jenkins" href="http://jenkins-ci.org" target="_blank">Jenkins </a>(ex-Hudson).</p>
<p>Atente-se para o fato que até então não citei nada exclusivo ao <acronym title="PHP Hypertext Preprocessor">PHP</acronym>, porque não é específico. <acronym title="Integração Contínua">IC</acronym> é relativo a software, em qualquer <a class="bbli" href="http://sledge.boo-box.com/list/page/bGluZ3VhZ2VtXyMjX2Jhcl8jI190YWdnaW5nLXRvb2wtd3BfIyNfMTYwMzg5NA==-64">linguagem<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>. Mas por que diabos o artigo é Integração Contínua <strong>E</strong> PHP?</p>
<p>Que tal um exemplo de como pode ser um processo de Integração Contínua com PHP?</p>
<p>Imagine o cenário: Estamos desenvolvendo um software em PHP, usando o <a title="Github do PHPUnit" href="https://github.com/sebastianbergmann/phpunit/" target="_blank">PHPUnit </a>e versionando-o com <a title="Git - Fast Version Control System" href="http://git-scm.com" target="_blank">Git</a>.</p>
<p>Nosso time já desenvolveu bastante, &#8220;comittou&#8221; algumas revisões, realizamos um merge e achamos que podemos mandar nossa versão para testes. Podemos nesse ponto mandar essa revisão para a Integração Contínua. Se tudo estiver ok, teremos um software que PODE ir para <a class="bbli" href="http://sledge.boo-box.com/list/page/aG9tb2xvZ2ElRTclRTNvXyMjX2Jhcl8jI190YWdnaW5nLXRvb2wtd3BfIyNfMTYwMzg5NA==-72">homologação<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>, onde o cliente/gerente/Product Owner vai avaliar se atendemos suas expectativas &#8211; se passarmos desse ponto temos um software que PODE ir para produção.</p>
<p>Porque a enfase no PODE? Não necessariamente esse software vai para produção, ou homologação, mas está pronto e, em tese, sem problemas técnicos para tal.</p>
<p>O Nosso servidor de Integração Contínua está configurado para observar um repositório git acessível a ele. Quando há uma nova revisão ele tentará criar um build.</p>
<p>Temos uma <a class="bbli" href="http://sledge.boo-box.com/list/page/ZmVycmFtZW50YV8jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-64">ferramenta<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> excelente para realizar builds para PHP: <a title="Phing - Phing Is Not Gnumake" href="http://phing.info" target="_blank">Phing</a>. Este cara é baseado no Apache Ant e basicamente ele funciona realizando tarefas previamente configuradas que culminarão em um novo release. Podemos alterar arquivos (mudando as configurações de ambiente por exemplo), realizar queries, movimentação de arquivos e, para nossa finalidade aqui, rodar os testes do PHPUnit &#8211; além de um sem-número de funcionalidades.<br />
Configuramos o Phing para alterar um arquivo de configuração, rodar nossa suíte de testes e construir um Phar ao final do processo.</p>
<p>Nosso servidor de Integração Contínua, que executou o Phing para nós, identificou que 2 testes não passaram com a nova configuração. Nosso <a class="bbli" href="http://sledge.boo-box.com/list/page/dGltZV8jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-56">time<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> fez o ajuste necessário, levantamos a nova revisão, o Jenkins (opa, já estou dizendo que usamos ele!) rodou a nova tentativa de build e &#8230; Funcionou! Agora temos um Phar, que o Jenkins/Phing pode se encarregar de entregar no servidor de Homologação se quisermos.</p>
<p>Facilita a vida? É lógico!</p>
<p>Mas lembrem este é só um exemplo, talvez nem o melhor &#8211; mas já dá para ter uma idéia do poder que a Integração Contínua pode dar para seu projeto.</p>
<p>Em breve (prometo <a title="Twitter da Natasha" href="http://twitter.com/nshgeek" target="_blank">@nshgeek</a> e <a title="Twitter do Thiago" href="http://twitter.com/thiagophx" target="_blank">@thiagophx</a>, muito em breve) falamos aqui sobre como fazer o Jenkins funcionar (e bem) com desenvolvimento PHP.</p>
<p>Abraço.</p>
<address>Referencias:<br />
[1] <a title="Artigo na Wikipedia sobre Integração Contínua (em inglês)" href="http://en.wikipedia.org/wiki/Continuous_integration" target="_blank">http://en.wikipedia.org/wiki/Continuous_integration</a></address>
]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/integracao-continua-e-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Seu ambiente de trabalho em 7 itens</title>
		<link>http://duodra.co/post/seu-ambiente-de-trabalho-em-7-itens/</link>
		<comments>http://duodra.co/post/seu-ambiente-de-trabalho-em-7-itens/#comments</comments>
		<pubDate>Thu, 16 Dec 2010 12:36:55 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[integração contínua]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://duodra.co/?p=181</guid>
		<description><![CDATA[Há quase um ano escrevi um artigo sobre meu ambiente de trabalho. Estou listando 7 itens e repassando para que mais algumas pessoas escrevam sobre seus ambientes também <a href="http://duodra.co/post/seu-ambiente-de-trabalho-em-7-itens/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Há quase um ano escrevi um artigo sobre <a title="Artigo sobre Ambiente de trabalho" href="http://duodra.co/post/meu-ambiente-de-trabalho/" target="_self">ambiente de trabalho</a>. O Augusto Pascutti jogou uma idéia no ar: &#8220;vamos fazer um meme sobre?&#8221; &#8230; e cá eu estou a realizar algo sobre. As regras são claras:<br />
1ª &#8211; escreva sobre 7 itens de seu <a class="bbli" href="http://sledge.boo-box.com/list/page/YW1iaWVudGVfIyNfYmFyXyMjX3RhZ2dpbmctdG9vbC13cF8jI18xNjAzODk0-60">ambiente<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> de trabalho &#8211; fale sobre qualquer ponto que quiser;<br />
2ª &#8211; indique de 3 a 5 pessoas para que possivelmente façam um artigo sobre seu ambiente.</p>
<p>Vamos lá?<span id="more-181"></span></p>
<ol>
<li><strong>OS: <em>Opensuse 11.3</em></strong>: A distribuição <a class="bbli" href="http://sledge.boo-box.com/list/page/bGludXhfIyNfYmFyXyMjX3RhZ2dpbmctdG9vbC13cF8jI18xNjAzODk0-56">linux<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> que melhor suporta o KDE, contando com o Zypper como gerenciador de pacotes&#8230; é simples instalar qualquer pacote, e reverter a uma versão anterior caso seja necessário, além de tudo o que o Yast oferece. <a title="Conheça o OpenSuse" rel="nofollow" href="http://opensuse.org" target="_blank">Conheça o opensuse</a>.</li>
<li><strong>IDE: <em>KDevelop4</em></strong>: Entre os que testei no meu ambiente, o <a title="Site do projeto Kdevelop" rel="nofollow" href="http://kdevelop.org" target="_blank">KDevelop</a> é de longe o IDE mais rápido. Infelizmente não conto com a integração com xdebug na versão atual, mas o <a class="bbli" href="http://sledge.boo-box.com/list/page/dGltZV8jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-56">time<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> de desenvolvimento &#8211; que também está empenhado em trazer o Quanta para o KDE4 &#8211; está fazendo grandes esforços para que tenhamos uma IDE completa muito em breve.</li>
<li><strong>Browser</strong>: Todos &#8211; Sim, uso praticamente todas a engines de navegador &#8211; hora uma, hora outra: Rekonq, Opera, Internet Explorer (sim, uso na VM &#8212; o debugger apesar de ser uma carroça ajuda bastante) e o que estou mais usando no momento: <em><strong>Firefox 4</strong></em> (beta) &#8230; e uso o lynx vez ou outra também.</li>
<li><strong>Versionamento: <em>Mercurial</em> e <em>Git</em></strong>: os dois são os mais conhecidos <acronym title="Version Control System">VCS</acronym>s descentralizados. Gosto muito do mercurial pela quantidade de <a class="bbli" href="http://sledge.boo-box.com/list/page/Y2xpZW50ZXNfIyNfYmFyXyMjX3RhZ2dpbmctdG9vbC13cF8jI18xNjAzODk0-60">clientes<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> e pela facilidade. Mas o Github não é algo a se menosprezar.</li>
<li><strong>Integração contínua: <em>Hudson</em></strong>: sim, a 8ª maravilha do mundo quando o assunto é Desenvolvimento de Software. Fácil de instalar, configurar e usar. Aí nele penduro phpunit, phpcpd, pdepend, phpmd &#8230; e estou para testar o php_codebrowser e o phpadd &#8211; <a title="Página do Hudson - Continuous Integration" rel="nofollow" href="http://hudson-ci.org/" target="_blank">confira o Hudson</a></li>
<li><strong>Gerenciador de projetos: <em>Redmine</em></strong>: é em ruby, eu sei&#8230; mas é uma <a class="bbli" href="http://sledge.boo-box.com/list/page/ZmVycmFtZW50YV8jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-64">ferramenta<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> bem completa e extensível. Dá um trabalhinho configurar o rails e as dependencias dos plugins que uso, como o Easy Agile. Também se integra a diversos VCSs. Trabalho com <a title="Site do projeto Redmine" rel="nofollow" href="http://www.redmine.org/" target="_blank">ele</a> faz um bom tempo e recomendo.</li>
<li><strong>Banco de Dados: <em>MongoDB</em></strong>: tá, vamos falar do projeto atual só, pois tenho MariaDB e PostgreSQL aqui, além do SQLServer no trabalho. Não dá pra explicar muito &#8230; <a title="Mongo DB" rel="nofollow" href="http://www.mongodb.org/" target="_blank">instale e teste</a>&#8230; você não vai se arrepender.</li>
</ol>
<p>Não precisava falar do PHP né? bom são esses meus 7 itens. Agora passo a bola para:</p>
<ul>
<li><a title="7 itens do Augusto Pascutti" rel="nofollow" href="http://blog.augustopascutti.com/PHP/2010/12/16/meu-ambiente.html" target="_blank">Augusto Pascutti</a></li>
<li><a title="7 itens do Ivo Nascimento" rel="nofollow" href="http://ianntech.com.br/2010/12/18/meu-ambiente-de-trabalho-em-7-itens/" target="_blank">Ivo Nascimento</a></li>
<li><a title="7 itens do Felipe Moura" rel="nofollow" href="http://felipenmoura.org/en/meu-ambiente-de-trabalho-em-7-itens/" target="_blank">Felipe Moura</a></li>
<li><a title="7 itens do Rafael Dohms" rel="nofollow" href="http://blog.rafaeldohms.com.br/2010/12/17/meme-seu-ambiente-de-desenvolvimento-em-7-items" target="_blank">Rafael Dohms</a></li>
<li><a title="7 itens do Elton Minetto" rel="nofollow" href="http://www.eltonminetto.net/meu-ambiente.htm" target="_blank">Elton Minetto</a></li>
</ul>
<p>Assim que os mesmos fizerem seus artigos, os links seguirão para os mesmos.</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "linux";
            bb_bid  = "1603894";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_width = "600";bb_limit = "6";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/seu-ambiente-de-trabalho-em-7-itens/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>KDE PIM, Google e Android</title>
		<link>http://duodra.co/post/kde-pim-google-e-android/</link>
		<comments>http://duodra.co/post/kde-pim-google-e-android/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 11:30:22 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[pim]]></category>
		<category><![CDATA[sync]]></category>

		<guid isPermaLink="false">http://duodra.co/?p=163</guid>
		<description><![CDATA[Salve Este artigo é especial para quem usa KDE e tem um smartphone rodando Android. Como comentado em um outro post possuo um aparelho Xperia X10, assim como o @galvao e o @ivonascimento. Nos ultimos dias fui rever minha lista &#8230; <a href="http://duodra.co/post/kde-pim-google-e-android/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Salve</p>
<p>Este artigo é especial para quem usa KDE e tem um smartphone rodando <a class="bbli" href="http://sledge.boo-box.com/list/page/QW5kcm9pZF8jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-60">Android<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>. Como comentado em um outro post possuo um aparelho <a class="bbli" href="http://sledge.boo-box.com/list/page/WHBlcmlhK1gxMF8jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-64">Xperia X10<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>, assim como o <a title="Site do Galvão" href="http://galvao.eti.br">@galvao</a> e o <a title="Site do Ivo" href="http://ianntech.com.br">@ivonascimento</a>. Nos ultimos dias fui rever minha lista de contatos pelo gmail e lembrei que o KDE possui uma execelente suíte de gerenciamento de informações pessoais (ou PIM) . Aí nossa história começa.<span id="more-163"></span>Bom, como é sabido os Androids sincronizam contatos, email, calendário, etc&#8230; com sua conta Google. Conseguimos editar nossa agenda de contatos no gmail, sincronizar e <em>pronto</em>: o X10 já está sincronizado. Aí me lembrei do <a title="Akonadi - KDE PIM (A página está bem desatualizada)" href="http://pim.kde.org/akonadi/">Akonadi</a> e os aplicativos que funcionam sobre sua estrutura. Seria bacana se ele fizesse sync como eu fazia com meus falecidos <a class="bbli" href="http://sledge.boo-box.com/list/page/bm9raWFfIyNfYmFyXyMjX3RhZ2dpbmctdG9vbC13cF8jI18xNjAzODk0-56">nokia<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> e windows mobile (sim, eu tive um e me envergonho disso <img src='http://duodra.co/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) via syncml. Mas o pessoal que cuida do Akonadi liberou desde o KDE 4.4 um feature interessante: usar o Google como fonte de dados para o PIM do KDE. Aí mora o grande barato da história: se você quiser ver seus compromissos pode tanto no Google Calendar como no Kontact, independente se você usa Android ou não. Aí vamos além: se você já sincroniza seu nokia, winmo, <a class="bbli" href="http://sledge.boo-box.com/list/page/aVBob25lXyMjX2Jhcl8jI190YWdnaW5nLXRvb2wtd3BfIyNfMTYwMzg5NA==-60">iPhone<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> ou qualquer outra coisa com o Google, você já ganha a sincronia com o KDE, e o melhor: sem plugar o smartphone no computador, usando só a rede/internet, fazendo a sincronia que você já faz com o Google.</p>
<p>Bom, vamos à mágica: Abra as configurações do KDE (systemsettings), procure na caixa de busca por akonadi &#8211; faça isso, pois o <a class="bbli" href="http://sledge.boo-box.com/list/page/YXBsaWNhdGl2b18jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-64">aplicativo<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> é diferente em cada versão do KDE4 &#8211; se você estiver usando o KDE4.6beta ele será <em>Personal Information</em>. Neste aplicativo acesse o item <em>KDE Resources</em>. Você será apresentado à view abaixo:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-170" title="pim" src="http://duodra.co/wp-content/uploads/2010/12/pim2-e1291858532403.png" alt="Configuração de recursos do Akonadi" width="600" height="444" />Aqui clique em <em>add</em> e em seguida em <em>Akonadi Address Books</em>. Na janela a seguir marque a caixa <em>Contacts</em> e clique em Manage Address Book Sources.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-168" title="pim1" src="http://duodra.co/wp-content/uploads/2010/12/pim1-e1291858240537.png" alt="Configuração dos recursos Akonadi e suas fontes" width="600" height="519" />Na nova janela selecione <em>add</em> e em seguida <em>Akonadi Google Contacts Resource</em>. São pedidos seu usuário e senha do Google. Clique em OK, feche a janela de seleção de recurso.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-172" title="pim3" src="http://duodra.co/wp-content/uploads/2010/12/pim3.png" alt="Lista de fontes de recursos, com o Recurso do Google para Contatos" width="424" height="379" /></p>
<p>Ative o <em>Synchronize Folder</em> (pode demorar um pouco) e dê Ok na janela de configuração do recurso. Pronto: quando você abrir o KAddressbook ou o Kontact, seus contatos do google estarão disponíveis.</p>
<p>Podemos fazer a mesma coisa com o Calendário, bastando selecionar Calendar ao invés de Contact, e realizando o mesmo procedimento, mas agora buscando os recursos de <a class="bbli" href="http://sledge.boo-box.com/list/page/Q2FsZW5kJUUxcmlvXyMjX2Jhcl8jI190YWdnaW5nLXRvb2wtd3BfIyNfMTYwMzg5NA==-68">Calendário<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> do Google.</p>
<p style="text-align: left;"><img class="aligncenter size-full wp-image-171" title="pim2" src="http://duodra.co/wp-content/uploads/2010/12/pim21-e1291858575395.png" alt="Seleção do Calendário" width="600" height="155" />Lembrando que se você utiliza o KDE em português, você deve procurar os <em>itens em itálico</em> na linguagem do <a class="bbli" href="http://sledge.boo-box.com/list/page/c2lzdGVtYV8jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-60">sistema<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>.</p>
<p>Se você encarar alguma dificuldade mande um comentário.</p>
<p>Por hora é só pessoal.</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "android, xperia";
            bb_bid  = "1603894";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_width = "600";bb_limit = "6";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/kde-pim-google-e-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP Conference Brasil 2010</title>
		<link>http://duodra.co/post/php-conference-brasil-2010/</link>
		<comments>http://duodra.co/post/php-conference-brasil-2010/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 00:31:12 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[eventos]]></category>
		<category><![CDATA[evento]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpconference]]></category>

		<guid isPermaLink="false">http://duodra.co/?p=150</guid>
		<description><![CDATA[Como é do conhecimento da maioria, na próxima semana (dias 25,26 e 27 de Novembro) acontece a quinta edição da PHP Conference Brasil, o maior evento de PHP da América Latina. Se não é de seu conhecimento, busque conhecimento. (valeu &#8230; <a href="http://duodra.co/post/php-conference-brasil-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://phpconference.com.br"><img class="aligncenter size-full wp-image-152" title="phpbanner_full" src="http://duodra.co/wp-content/uploads/2010/11/phpbanner_full.gif" alt="PHP Conference Brasil 2010" width="468" height="60" /></a>Como é do conhecimento da maioria, na próxima semana (dias 25,26 e 27 de Novembro) acontece a quinta edição da <a title="Site da PHP Conference Brasil" href="http://www.phpconference.com.br/" target="_blank">PHP Conference Brasil</a>, o maior evento de PHP da América Latina. Se não é de seu conhecimento, busque conhecimento. (valeu Bilu, pelo clichê).</p>
<p><span id="more-150"></span></p>
<p>O <a title="Grupo de Desenvolvedores PHP de São Paulo" href="http://phpsp.org.br" target="_blank">PHPSP</a> cuidou do conteúdo técnico, chamando gente de peso, que entende do assunto para palestrar. Guilherme Blanco, Elton Minetto, Flávio Lisboa&#8230; vale a pena conferir essa galera. Os Keynotes serão Christofer Jones &#8211; da Oracle, Maurice Kherlakian &#8211; da Zend, e Josh Holmes &#8211; da Microsoft. Não dá pra perder.</p>
<p>Eu apresentarei 3 palestras no Evento. Na sexta mostrarei um pouco do que virá no framework <a title="Symfony2" href="http://symfony-reloaded.org" target="_blank">Symfony2</a> &#8211; Fabien e cia. estão fazendo um belíssimo trabalho. No sábado volto com &#8220;A Arte do Desenvolvimento PHP&#8221; &#8211; em uma sessão atualizada; Também no sábado apresento &#8220;Javascript &#8211; no navegador e além&#8221;, mostrando boas práticas no desenvolvimento de Javascript, sendo no navegador como em qualquer lugar.</p>
<p>No Evento ainda haverá o Unconference: a conferência dentro da conferência; neste subevento haverão mesas redondas, lightning talks (eu particularmente me amarro nessas), e mais palestras de pessoas como você: acesse o <a title="Artigo sobre a Unconference" href="http://phpsp.org.br/2010/11/php-unconference-brazil-2010/" target="_blank">artigo no phpsp</a> e participe.</p>
<p>A grande sacada de ir a um evento desses é conhecer os mais diversos (e divertidos) tipos e níveis de Desenvolvedores &#8211; o sobrinho, o experiente, o estudioso, o sério, o que se acha fodão, enfim&#8230; é um acontecimento perfeito para trabalhar seu networking.</p>
<p>Então pessoal, recomendo que participem do evento, conheçam muita gente bacana, e colaborem com nossa festa do PHP. Espero vocês lá.</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "evento pessoas";
            bb_bid  = "1603894";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_width = "600";bb_limit = "6";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/php-conference-brasil-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSON &#8211; você não devia ter medo dele</title>
		<link>http://duodra.co/post/json-voce-nao-devia-ter-medo-dele/</link>
		<comments>http://duodra.co/post/json-voce-nao-devia-ter-medo-dele/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 14:30:49 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://duodra.co/?p=132</guid>
		<description><![CDATA[Ele te persegue há tempos; está alí, pronto para te matar facilitar a vida&#8230; sim o JSON está aí, há muito tempo para te ajudar. O JavaScript Object Notation (ou JSON)  segundo a wikipedia &#8220;&#8230; é um formato leve para &#8230; <a href="http://duodra.co/post/json-voce-nao-devia-ter-medo-dele/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ele te persegue há tempos; está alí, pronto para te <span style="text-decoration: line-through;">matar</span> facilitar a vida&#8230; sim o JSON está aí, há muito tempo para te ajudar. O JavaScript Object Notation (ou JSON)  segundo a wikipedia &#8220;&#8230; é um formato leve para intercâmbio de dados computacionais. <strong>JSON</strong> é um subconjunto da notação de objeto de JavaScript, mas seu uso não requer Javascript exclusivamente.&#8221;. Tem aplicação desde a manutenção de código javascript até em interface com bancos NoSQL, como o CouchDB e o MongoDB, e mais&#8230; <span id="more-132"></span></p>
<p>JSON é subconjunto do padrão ECMA-262 3ª edição (ou seja, desde Dezembro de 1999). o site json.org foi ao ar em 2002. Três anos depois o Yahoo disponibilizou alguns de seus serviços no formato; o Google um ano depois do concorrente com o GData.</p>
<p>Basicamente o JSON descreve informação. No Javascript você define suas variáveis com Json:</p>
<pre class="brush:js">var _boolean = true;
var _integer = 42;
var _float = 1.54;
var _string = "Esta é uma string";
var _null = null;
var _array = [1,2,3];
var _objeto = {
    "id":1234,
    "nome":"Duodraco",
    "telefones":[5252525,88833322],
    "ativo":true
}</pre>
<p>Sim, os dados escalares também são considerados JSON, afinal os inteiros e strings são objetos para o Javascript, e o JSON é simplesmente a notação. Veja que objetos e arrays podem conter em seus elementos/atributos outros tipos descritos no formato (strings, floats, outros arrays ou objetos, etc&#8230;).</p>
<p>Tendo o domínio do formato, a evolução da sua calvície vai desacelerar (não vai parar, até porque o IE está aí pra isso). Você tem em suas mãos uma ferramenta quase que divina para a organização e legibilidade, nativa e fácil de usar.</p>
<p>É humanamente compreensível e serve muito bem no PHP, seja como arquivo de configuração, transporte de dados ou qualquer outra coisa. Existem as seguintes funções desde o PHP 5.2: <a title="Documentação de json_encode" href="http://php.net/json_encode" target="_blank">json_encode</a> e <a title="Documentação de json_decode" href="http://php.net/json_decode" target="_blank">json_decode</a>, que retornam respectivamente uma string em formato JSON &#8211; dado um valor PHP &#8211; e o outro um valor PHP &#8211; dada uma string JSON. Vale lembrar que o json_decode interpretará o json de maneira estrita, ou seja, nada de atributos do objeto sem aspas, ou objetos com vírgulas a mais.<br />
A função <em>json_encode</em> tem um 2º parâmetro desde o PHP 5.3, que refere-se a opções para a &#8220;tradução&#8221; do valor php para a string json: com JSON_FORCE_OBJECT o retorno será sempre um objeto, caso o valor passado seja um array, por exemplo, e com JSON_HEX_QUOT sua string virá com possíveis aspas nos valores de atributos ou itens do array escapados.</p>
<pre class="brush:php">$obj = array(
'name' =&gt; 'Xpto é melhor que "foo"',
'id' =&gt; 256);
echo json_encode($obj,JSON_HEX_QUOT | JSON_FORCE_OBJECT);
//{"name":"Xpto é melhor que \u0022foo\u0022","id":256}</pre>
<p>JSON é também o formato da resposta que alguns bancos de dados orientados a documento, como MongoDB  e CouchDB, geralmente devolvem para seus clientes.</p>
<p>Só posso dizer: domine o formato, pois ele está aí para ser usado. É simples e rápido. No PHP você não precisa de nada a mais para interpretá-lo. Em aplicações web com HttpRequests que você utiliza XML aberto, prefira o JSON: é muito mais leve.</p>
<p>Não tenha medo!</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "javascript,json,desenvolvimento";
            bb_bid  = "1603894";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_width = "600";bb_limit = "6";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/json-voce-nao-devia-ter-medo-dele/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Post sobre Javascript no Ajaxianos</title>
		<link>http://duodra.co/post/post-sobre-javascript-no-ajaxianos/</link>
		<comments>http://duodra.co/post/post-sobre-javascript-no-ajaxianos/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 15:36:03 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[ajaxianos]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://duodra.co/?p=106</guid>
		<description><![CDATA[Você conhece o Ajaxianos [link]? É o blog iniciado pelo Alexandre Bevilacqua e Wender Lima sobre Javascript. Conteúdo de primeira qualidade. Eles me chamaram para blogar com eles lá e meu primeiro artigo no Ajaxianos acabou de sair do forno: &#8230; <a href="http://duodra.co/post/post-sobre-javascript-no-ajaxianos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Você conhece o Ajaxianos [<a title="Ajaxianos" href="http://ajaxianos.com.br" target="_blank">link</a>]? É o blog iniciado pelo Alexandre Bevilacqua e Wender Lima sobre Javascript. Conteúdo de primeira qualidade.</p>
<p>Eles me chamaram para blogar com eles lá e meu primeiro artigo no Ajaxianos acabou de sair do forno:<br />
<a title="Permanent Link: Boas Práticas ao desenvolver com Javascript" rel="bookmark" href="http://www.ajaxianos.com.br/2010/09/boas-praticas-ao-desenvolver-com-javascript/" target="_blank">Boas Práticas ao desenvolver com Javascript</a></p>
<p>Confiram!</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "ajaxianos";
            bb_bid  = "1603894";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_width = "600";bb_limit = "6";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/post-sobre-javascript-no-ajaxianos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consumindo um RSS com simplexml</title>
		<link>http://duodra.co/post/consumindo-um-rss-com-simplexml/</link>
		<comments>http://duodra.co/post/consumindo-um-rss-com-simplexml/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 19:30:57 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://duodra.co/?p=59</guid>
		<description><![CDATA[Essa semana precisei consumir um RSS do wordpress (UTF-8), para utilizar o conteúdo em outra aplicação (ISO-8859-1). Realizei rapidamente (sem frameworks ou firulas) e o fiz usando simplexml e um esquema de cache simples. O resultado  segue abaixo:O Simplexml é &#8230; <a href="http://duodra.co/post/consumindo-um-rss-com-simplexml/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Essa semana precisei consumir um <abbr title="Really Simple Syndication">RSS</abbr> do wordpress (UTF-8), para utilizar o conteúdo em outra aplicação (ISO-8859-1). Realizei rapidamente (sem frameworks ou firulas) e o fiz usando simplexml e um esquema de cache simples. O resultado  segue abaixo:<span id="more-59"></span>O <a title="Documentação do SimpleXML" href="http://php.net/simplexml" target="_blank">Simplexml</a> é uma das ferramentas embutidas no PHP para manipulação de xml. É leve e rápida, porém não tão robusta como XMLReader/Writer ou o DOM; ela é ideal para manipulação simples, como é o caso de um RSS. Sua interface é bem simples: a partir do nó pai, incluindo-o, todos os nós descendentes são instâncias de SimpleXMLElement. Cada nó filho é um atributo do elemento pai; atributos de nó são acessados como índice alfanumérico (texto) e nós filhos semelhantes são acessados como array, em índices numéricos; dados textuais dos elementos são acessados como texto. Dado o xml:</p>
<pre class="brush:xml">&lt;root&gt;
  &lt;persons&gt;
    &lt;person id="1"&gt;Bianca&lt;/person&gt;
    &lt;person id="2"&gt;Carolina&lt;/person&gt;
  &lt;/persons&gt;
&lt;/root&gt;</pre>
<p>podemos acessar os elementos assim:</p>
<pre class="brush:php">//$xml é uma string com o xml descrito acima
$sxe = simplexml_load_string($xml);
//$sxe é um SimpleXMLElement referente ao &lt;root&gt;
echo $sxe-&gt;persons-&gt;person[0];//Bianca
echo $sxe-&gt;persons-&gt;person[1]['id'];//2</pre>
<p>Bom, voltando ao problema: Armazenar o feed rss localmente em uma aplicação. A lógica seria simples: fiz um cache (para que não fosse feito um request a todo momento para o rss) atualizado de hora em hora. Segue o código:</p>
<pre class="brush:php">$cache = '/path/para/o/cache/';
$file = $cache.'feed-'.date('Y-m-d-H');
$feedurl = 'http://blog.com/feed';
$ns = 'http://purl.org/rss/1.0/modules/content/';
$collection = array();</pre>
<p>Criando variáveis para nosso uso. Em $file teremos algo como /path/para/o/cache/feed-2010-09-17-10. Em $ns guardamos a url do namespace de content do nosso XML</p>
<pre class="brush:php">if(!file_exists($file)){
  file_put_contents(
    $file,file_get_contents($feedurl)
  );
}</pre>
<p>Crio o cache do RSS</p>
<pre class="brush:php">$xml = simplexml_load_file($file);
if(!$xml){ exit();}</pre>
<p>Leitura do RSS no SimpleXML</p>
<pre class="brush:php">$getId = function($link){
  return str_replace(
    'p=','',array_pop(explode('?',$link))
  );
};
$replace = function($string){
  if (!preg_match("/([\200-\237])/", $string)
    &amp;&amp; !preg_match("/([\241-\377])/", $string)){
    return $string;
  }
  $string = preg_replace(
    "/([\340-\357])([\200-\277])([\200-\277])/e",
    "'&amp;#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64".
      "+ (ord('\\3')-128)).';'",
    $string);
  $string = preg_replace(
    "/([\300-\337])([\200-\277])/e",
    "'&amp;#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",
    $string);
  return $string;
};</pre>
<p>Funções utilizadas (5.3 Style <img src='http://duodra.co/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ). A primeira só faz o trabalho de pegar o id do post, enquanto que a segunda funciona como um adendo a htmlentities, que possui suporte a UTF-8, porém convertendo caracteres de mais de 2 bytes, os quais o wordpress usa e abusa, como aspas de início e fim.</p>
<pre class="brush:php">foreach($xml-&gt;channel-&gt;item as $post){
  $id = $getId($post-&gt;guid);
  $content = $post-&gt;children($ns);
  $collection[$id] = new stdClass;
  $collection[$id]-&gt;id = $id;
  $collection[$id]-&gt;title = $replace(
    (string)$post-&gt;title
  );
  $collection[$id]-&gt;description = $replace(
    (string)$post-&gt;description
  );
  $collection[$id]-&gt;content = $replace(
    (string) $content-&gt;encoded
  );
  if(!file_exists($cache.'feeds/'.$id)){
    file_put_contents(
      $cache.'feeds/'.$id,
      base64_encode(serialize($collection[$id]))
    );
  }
}</pre>
<p>Bom, creio que o código acima não é difícil de compreender. A lógica é simples:</p>
<ol>
<li>crio uma cópia do rss localmente no 1º request de cada hora</li>
<li>carrego esse arquivo em um simplexml</li>
<li>populo um objeto stdClass com os dados do post (só incluí atributos que utilizei, mas poderíamos usar qualquer um)</li>
<li>e faço um &#8220;cache&#8221; de cada objeto, serializado.</li>
</ol>
<p>Por que usar um stdClass e não o SimpleXMLElement para o cache direto? não é serializável, pelo menos não no PHP5.3</p>
<p>Por que não fazer de outra maneira? porque eu não quis. Era uma funcionalidade pontual, e (ainda) não estou numa estrutura que me facilite as coisas, então scripts estruturados ainda são comuns por aqui.</p>
<p>Ah Duodraco, boa sacada&#8230; posso por isso em meu projeto? NÃO. Esta era uma prova de conceito, e ela por sí só não trata uma série de questões, como segurança e performance, além de estar totalmente fora de qualquer padrão.</p>
<p>Por que então diabos você publicou isso? Um: porque quis <img src='http://duodra.co/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ; Dois: isoladamente temos algumas soluções para problemas frequentes:</p>
<ul>
<li>cache simples: existem aplicações por aí que podem usar cache, e ainda demoram valiosos segundos em páginas com pouca atualização, que já ganhariam em performance com algo assim; Lógico que se você quer uma solução efetiva de cache, procure por ferramentas como o <a title="Site do Memcached" href="http://memcached.org/" target="_blank">Memcached</a>.</li>
<li>conversão de caracteres UTF-8: Os RSS gerados pelo wordpress são por padrão UTF-8 mas utilizam caracteres de mais de 2bytes que o htmlentities não interpreta. A função que chamei de $replace mapeia boa parte desses caracteres; ela foi obtida nos comentários da documentação do PHP e adaptada para usar preg_replace</li>
<li>Parseamento com SimpleXML: nesse exemplo usamos inclusive a leitura dos namespaces, mostrando a facilidade do uso dessa ferramenta</li>
<li>Serialização de objetos: apesar do gargalo ser o IO no sistema de arquivos, a operação de leitura ficou bem rápida, pois quando recuperamos o objeto, não faço nenhum tratamento, ele está pronto para uso. Podemos utilizar, para o caso de armazenamento paralelo ao principal do sistema podemos usar o filesystem como no exemplo, SQLite, etc.</li>
</ul>
<p>Então, recomendo que NÃO use essa solução diretamente. Utilize isso para estudar os pontos-chave e estude individualmente os mecanismos utilizados. Em breve farei posts isolados sobre SimpleXML, Serialização, Cache e Encoding e Expressões Regulares.</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "xml";
            bb_bid  = "1603894";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_width = "600";bb_limit = "6";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/consumindo-um-rss-com-simplexml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meu Android</title>
		<link>http://duodra.co/post/meu-android/</link>
		<comments>http://duodra.co/post/meu-android/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 15:06:22 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://duodraco.com/?p=39</guid>
		<description><![CDATA[Vão se os celulares ficam os dedos. Foi assim que relatei no twitter o meu adeus ao nokia n900. Ele foi furtado na ultima virada cultural num arrastão. Tenho certeza que não foi só meu smartphone que foi levado lá, &#8230; <a href="http://duodra.co/post/meu-android/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vão se os celulares ficam os dedos. Foi assim que relatei no twitter o meu adeus ao nokia n900. Ele foi furtado na ultima virada cultural num arrastão. Tenho certeza que não foi só meu smartphone que foi levado lá, mas é claro que a mídia não divulga esse tipo de fato.</p>
<p>Mas não falemos de coisas tristes&#8230; agora estou munido de um android e vou dar meus pitacos sobre essa plataforma que vem arrancando sorrisos de seus proprietários.</p>
<p><span id="more-39"></span>Tudo começa com a escolha do modelo. Muitos fabricantes agora estão apostando na plataforma e temos androids para praticamente todos os gostos dos consumidores. Os mais conhecidos são HTC, que fez o primeiro android do mercado, Samsung, que fez a excelente série Galaxy, e Motorola, com o premiado Milestone, além do próprio google com o Nexus (que é fabricado pela HTC). Bom, como sou do contra não escolhi nenhum desses e enfim o visual do aparelho entrou na lista de requisitos (mesmo que em parte bem pequena) para a escolha: SonyEricsson X10<br />
<a href="http://www.sonyericsson.com/X10"><br />
</a><img class="aligncenter size-full wp-image-53" title="Sonyericsson X10" src="http://duodra.co/wp-content/uploads/2010/09/gsmarena_002.jpg" alt="Sonyericsson X10" width="642" height="325" /></p>
<p>Bom, vamos ao hardware: processador snapdragon 1GHz, tela capacitiva de 4 polegadas (854x480px) resistente a riscos, 1 GB de armazenamento (384 MB para RAM), slot microSD (ele vem com um cartão de 8GB), camera de 8.1 megapixel,  saída 3.5mm de áudio e bateria padrão de 1500 mAh &#8230; no mais tudo o que você já está careca de apreciar na maioria dos androids: 3g, bússola digital, GPS, acelerômetro, etc&#8230;</p>
<p>Software: nisso a Sony pecou &#8211; lançou um excelente aparelho, com Android 1.6 (que a mesma modificou e ficou bem bacana, mas longe de performar como um 2.x) . O update está previsto para o começo de novembro, mas para o 2.1 &#8211; froyo sabe-se lá quando. Mas a sony incrementou o brinquedo com o conceitualmente fantástico Timescape &#8230; que peca por ser exageradamente pesado. Tem também o Mediascape que gerencia fotos, música e vídeos &#8230; muito bom também, e nem tão pesado; A Sony também personalizou o app de SMS e o de contatos, para intergrá-lo melhor ao look&amp;feel geral, além de ser melhor utilizá-lo que os aplicativos padrão do Android. No mais temos o PlayNow, uma loja paralela de aplicativos.</p>
<p>Ao utilizar um android a primeira coisa que temos que fazer é uma visitinha ao AndroidMarket. De lá o primeiro aplicativo a instalar é o Advanced Task Cleaner Pro, que bem configurado vai deixar a RAM do seu aparelho com bastante espaço sempre, evitando engasgos. Antes que algum fanboy se manifeste, o android é de fato multitask desde o início, e gerencia bem as tarefas concorrentes, mas uma ajudinha não faz mal.<br />
Após isso vamos brincar com a facilidade de se instalar apps, customizar o aparelho, etc. Uma das principais vantagens do android é a customização: decidir qual interface o aparelho vai usar é divino. Atualmente uso o ADWLauncher que é um dos mais conceituados, considerando que a plataforma é a 1.6. Abaixo segue minha lista principal de aplicativos:</p>
<ul>
<li><strong>Twicca BETA</strong> &#8211; cliente para twitter</li>
<li><strong>Bluetooth File Transfer</strong> &#8211; não há no X10 um app especifico para</li>
<li><strong>K-9 Mail</strong> &#8211; cliente de e-mail(dã)</li>
<li><strong>SwiftKey Keyboard Beta</strong> &#8211; substituto ao teclado padrão, com sugestão inteligente</li>
<li><strong>CallFilter</strong> &#8211; auto descritivo <img src='http://duodra.co/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </li>
<li><strong>Foursquare, Facebook, Dropbox e WordPress</strong> (oficiais)</li>
<li><strong>3G Watchdog</strong> &#8211; monitor de tráfego de dados</li>
<li><strong>AppBrain App Market</strong> e<strong> FastWeb Installer</strong> &#8211; detalhes adiante</li>
<li><strong>Barcode Scanner</strong> &#8211; leitor de códigos de barra tradicionais e 2d</li>
<li><strong>HiAPN</strong> &#8211; widget para desabilitar o 3g</li>
<li><strong>HomeSwitcher</strong> &#8211; para ficar testando rapidamente novas &#8220;Home Replacements&#8221;</li>
</ul>
<p>Citei o AppBrain. É uma app market paralela. Você navega no desktop por exemplo e seleciona os aplicativos que deseja instalar, lê comentários, etc &#8230; e no aparelho você sincroniza com o serviço e instala um a um. Com o Fast Web Installer a brincadeira fica muito mais interessante. Você pede para instalar no site e o app já é automagicamente instalado no telefone.</p>
<p>O X10 é um excelente aparelho, com uma tela fantástica e que promete ficar muito melhor com a atualização. O Android é uma excelente plataforma, tanto que estão pipocando n dispositivos novos a todo momento, inclusive os aguardados tablets. Se você ainda não tem um android por achar que seu iQualquerCoisa é infinitamente superior a tudo, reveja seus conceitos. O Android veio para ficar.</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "android";
            bb_bid  = "1603894";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_width = "600";bb_limit = "6";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/meu-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Meu Ambiente de Trabalho</title>
		<link>http://duodra.co/post/meu-ambiente-de-trabalho/</link>
		<comments>http://duodra.co/post/meu-ambiente-de-trabalho/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 12:54:18 +0000</pubDate>
		<dc:creator>Duodraco</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://duodraco.dominiotemporario.com/?p=11</guid>
		<description><![CDATA[Cerca de um ano atrás eu fiz um post sobre ambiente de desenvolvimento. Dando uma olhada, mudou muito meu ambiente, desde hardware a IDE e Navegador. Quando desenvolvemos sistemas é imprescindível que tenhamos um bom ambiente (hardware + software) para &#8230; <a href="http://duodra.co/post/meu-ambiente-de-trabalho/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Cerca de um ano atrás eu fiz um post sobre <a class="bbli" href="http://sledge.boo-box.com/list/page/YW1iaWVudGVfIyNfYmFyXyMjX3RhZ2dpbmctdG9vbC13cF8jI18xNjAzODk0-60">ambiente<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> de desenvolvimento. Dando uma olhada, mudou muito meu ambiente, desde hardware a IDE e Navegador.</p>
<p>Quando desenvolvemos sistemas é imprescindível que tenhamos um bom ambiente (hardware + software) para que nosso trabalho flua da melhor maneira possível. Sistema Operacional, Linguagem, IDE e/ou Editores, etc. A seguir as minhas escolhas para o trabalho pessoal.</p>
<p><img class="size-full wp-image-30   alignnone" style="padding: 0pt; margin: 0px; border: 0pt none;" title="desktop do duodraco" src="http://duodra.co/wp-content/uploads/2010/01/snapshot22.png" alt="desktop do duodraco" width="480" height="300" /></p>
<p style="text-align: center;">
<p><span id="more-11"></span></p>
<p><strong>Hardware</strong><br />
Um bom hardware vai evitar que hajam problemas, como engasgos de processamento ou limitações idiotas como falta de memória para executar alguma tarefa, tirando sua atenção quando você tem que ficar focado em desenvolver direito.<br />
<a class="bbli" href="http://sledge.boo-box.com/list/page/Tm90ZWJvb2tfIyNfYmFyXyMjX3RhZ2dpbmctdG9vbC13cF8jI18xNjAzODk0-60">Notebook<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> HP Pavillion, Turion X2 2Mhz, com 4GB de Ram, HD sata de 250GB + 1HD externo eSata 160GB</p>
<p><strong>Sistema Operacional<br />
</strong>Minha opção pelo Linux/<a title="Opensuse" href="http://opensuse.org" target="_blank">Opensuse</a>, em substituição ao (k)ubuntu, foi basicamente por conta do <a title="KDE" href="http://kde.org" target="_blank">KDE</a>: O Opensuse é para o KDE, o que o Ubuntu é para o Gnome: a distribuição que melhor veste o ambiente gráfico. O Opensuse possui o Yast, uma excelente central de gerenciamento do <a class="bbli" href="http://sledge.boo-box.com/list/page/c2lzdGVtYV8jI19iYXJfIyNfdGFnZ2luZy10b29sLXdwXyMjXzE2MDM4OTQ=-60">sistema<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>. E o zypper (gestor de pacotes e repositórios RPM) é bem espertinho.<br />
Opensuse <span style="text-decoration: line-through;">11.2</span> 11.3 64bits, rodando KDE <span style="text-decoration: line-through;">4.4</span> 4.5+<span style="text-decoration: line-through;"><br />
</span></p>
<p><strong>Linguagem de Programação</strong><br />
O Pessoal de outras linguagens me pergunta: &#8216;porque diabos você abraça tanto o <a title="PHP Hypertext Preprocessor" href="http://php.net" target="_blank">PHP</a>?&#8217; É hoje a plataforma que domino, que me deu o pouco que tenho em bens materiais e o muito que tenho em conhecimento, que me levou a ser palestrante em diversos eventos, que me fez conhecer pessoas extraordinárias, o <a title="Grupo de Usuários PHP de São Paulo" href="http://phpsp.org.br" target="_blank">PHPSP</a>, e tanta coisa que se fosse agradecer precisaria de um post dedicado a isso (ta ái uma boa idéia). É uma linguagem madura, com gente experiente (infelizmente ainda não é maioria, mas estamos trabalhando pra isso), e tem excelente documentação e <a class="bbli" href="http://sledge.boo-box.com/list/page/cGVyZm9ybWFuY2VfIyNfYmFyXyMjX3RhZ2dpbmctdG9vbC13cF8jI18xNjAzODk0-64">performance<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>.<br />
PHP (Duh!) 5.3+, com um pack bom de extensões que serão citados em outro post</p>
<p><strong>Banco de Dados<br />
</strong>A opção pelo <a title="MySQL" href="http://mysql.com" target="_blank">MySQL</a> é pela maioria dos projetos, não por opção de qualidade. O <a title="PostgreSQL" href="http://postgresql.org" target="_blank">PostgreSQL</a> oferece um ambiente mais completo e estável, porém (ainda) é difícil achar bons hosts com suporte a ele&#8230; ou se paga por um servidor dedicado ou na nuvem.<br />
Mysql 5.1 , PostgreSQL 8.4 e SQLite3</p>
<p><strong>Controle de Versão</strong><br />
Dentre as diversas opções que temos hoje para este trabalho, se destacam pela liberdade que oferecem as de controle distribuído. Git, Bazaar &#8230; mas minha opção é pela simplicidade e quantidade e <a class="bbli" href="http://sledge.boo-box.com/list/page/cXVhbGlkYWRlXyMjX2Jhcl8jI190YWdnaW5nLXRvb2wtd3BfIyNfMTYwMzg5NA==-64">qualidade<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> de clientes disponíveis.<br />
<a title="Mercurial" href="http://http://mercurial.selenic.com/" target="_blank">Mercurial</a></p>
<p><strong>Browser</strong><br />
Estou na cruel dúvida: Chrome ou Opera? enquanto não decido vou brincando com os disponíveis. O firefox perdeu seu posto de navegador padrão: lento e pesado (boa parte é por executá-lo no KDE (que tem que carregar as libs do GTK para utilizá-lo)) fica lá no desktop pra fazer prova-real em testes de interface e usar o firebug; aliás, o firebug foi uma das coisas que me segurou no firefox tanto tempo.. o inspector do webkit (disponível no chrome, rekonq, midori, etc.) e o dragonfly do opera o substitui bem.<br />
Principal: Google Chrome(5.0+) e Opera (10.60+)<br />
Secundário: Firefox e Rekonq/Konqueror<br />
Outros: IE6/7 via wine e Midori</p>
<p><strong>IDE</strong><br />
Bom, já falei no outro artigo o porque da minha escolha do <a title="Netbeans" href="http://netbeans.org" target="_blank">Netbeans</a>. Roda sem problemas em qualquer plataforma&#8230; quando você se acostuma com os atalhos de teclado então&#8230; é uma IDE que sem dúvida te poupa muito trabalho.<br />
O <a title="Kdevelop" href="http://kdevelop.org" target="_blank">Kdevelop</a> por sua vez traz as melhorias do framework Qt4 em uma plataforma única: rápida, integrada ao KDE, e que promete (e já atende) muito.<br />
Netbeans 6.9+ com suporte a PHP<br />
Testando o Kdevelop 4</p>
<p><strong>Modeladores</strong><br />
Quem, além de codificar, precisa ou quer realizar análise não dispensa <a class="bbli" href="http://sledge.boo-box.com/list/page/YXBsaWNhdGl2b3NfIyNfYmFyXyMjX3RhZ2dpbmctdG9vbC13cF8jI18xNjAzODk0-64">aplicativos<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> para confecção de modelos ER e de diagramas UML. O ideal é que você tenha nessas aplicações para ter agilidade na confecção do documento, e que tenha boas opções de exportação, e que o resultado seja legível.<br />
<a title="Umbrello" href="http://uml.sourceforge.net/" target="_blank">Umbrello</a> e Netbeans (via plugin) para UML<br />
<a title="Mysql Workbench" href="http://wb.mysql.com/" target="_blank">Mysql Workbench</a> para ER</p>
<p><strong>MindMapping</strong><br />
Sim, uma ferramenta surpreendente quando bem usada. segundo a wikipedia o mapa mental é &#8220;&#8230;voltado para a gestão de  informações, de conhecimento e de capital intelectual; para a compreensão e solução de problemas;  na memorização e aprendizado; na criação de  manuais, livros e palestras; como ferramenta de <em>brainstorming</em> (tempestade de ideias); e no auxílio da gestão estratégica de uma  empresa ou <a class="bbli" href="http://sledge.boo-box.com/list/page/bmVnJUYzY2lvXyMjX2Jhcl8jI190YWdnaW5nLXRvb2wtd3BfIyNfMTYwMzg5NA==-64">negócio<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>.&#8221;. Há quem o cite como ferramenta ágil de documentação. O XMind é uma opção de fácil utilização e multiplataforma.<br />
<a title="XMind" href="http://www.xmind.net/" target="_blank">XMind</a></p>
<p>Bom pessoal, resumidamente é isso. Deixem suas opções nos comentários, inclusive se forem usuários de outras plataformas.</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "php";
            bb_bid  = "1603894";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_width = "600";bb_limit = "6";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->]]></content:encoded>
			<wfw:commentRss>http://duodra.co/post/meu-ambiente-de-trabalho/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

