<?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/"
		xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>PHPSP.org.br &#187; Mão na massa</title>
	<atom:link href="http://phpsp.org.br/category/cursos/mao-na-massa/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpsp.org.br</link>
	<description>Grupo de Desenvolvedores de PHP de São Paulo</description>
	<lastBuildDate>Thu, 26 Jan 2012 16:08:17 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<copyright>2006-2009 </copyright>
	<managingEditor>admin@phpsp.org.br (PHPSP.org.br)</managingEditor>
	<webMaster>admin@phpsp.org.br (PHPSP.org.br)</webMaster>
	<category>php</category>
	<ttl>1440</ttl>
	<image>
		<url>http://phpsp.org.br/wp-content/uploads/2009/03/phpspcast-cover-art-144x144.gif</url>
		<title>PHPSP.org.br</title>
		<link>http://phpsp.org.br</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle>PHP à Paulista!</itunes:subtitle>
	<itunes:summary>Um podcast bem humorado sobre PHP e assuntos relacionados. Baseado no PHPSP, em cada episódio do Podcast são reunidos convidados novos para conversar sobre um assunto relacionado ao PHP de forma descontraida e informativa.</itunes:summary>
	<itunes:keywords>php, phpsp, brasil</itunes:keywords>
	<itunes:category text="Technology" />
	<itunes:category text="Technology">
		<itunes:category text="Software How-To" />
	</itunes:category>
	<itunes:category text="Technology">
		<itunes:category text="Podcasting" />
	</itunes:category>
	<itunes:author>PHPSP.org.br</itunes:author>
	<itunes:owner>
		<itunes:name>PHPSP.org.br</itunes:name>
		<itunes:email>admin@phpsp.org.br</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://phpsp.org.br/wp-content/uploads/2009/03/phpspcast-coverart-generic.png" />
		<item>
		<title>Cortesias PHP Conf &#8217;09</title>
		<link>http://phpsp.org.br/2009/10/cortesias-php-conf-09/</link>
		<comments>http://phpsp.org.br/2009/10/cortesias-php-conf-09/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 20:41:40 +0000</pubDate>
		<dc:creator>Ivan Rosolen</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Cursos]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Mão na massa]]></category>
		<category><![CDATA[Notícias]]></category>

		<guid isPermaLink="false">http://phpsp.org.br/?p=908</guid>
		<description><![CDATA[O PHPSP recebeu 8 inscrições para o PHP Conference &#8217;09 e vai &#8220;sortear&#8221; para a comunidade. Quer ganhar uma delas? Envie uma frase descrevendo a foto abaixo para promo@phpsp.org.br com assunto &#8220;PHP Conf 09&#8243;. Resultdo será divulgado dia 22/10/2009. São 3 cortesias  SILVER, que a inscrição é gratuita e 5 cortesias que permitem inscrição por [...]]]></description>
			<content:encoded><![CDATA[<p>O PHPSP recebeu 8 inscrições para o PHP Conference &#8217;09 e vai &#8220;sortear&#8221; para a comunidade.</p>
<p>Quer ganhar uma delas?</p>
<p>Envie uma frase descrevendo a foto abaixo para  <a href="mailto:conf09@phpsp.org.br"></a><a href="mailto:promo@phpsp.org.br">promo@phpsp.org.br</a> com assunto &#8220;PHP Conf 09&#8243;. Resultdo será divulgado dia 22/10/2009.</p>
<p style="text-align: center;"><img class="size-full wp-image-911 aligncenter" title="torre.elephpant" src="http://phpsp.org.br/wp-content/uploads/2009/10/torre.elephpant.jpg" alt="torre.elephpant" /></p>
<p>São 3 cortesias  SILVER, que a inscrição é gratuita e 5 cortesias que permitem inscrição por apenas  R$ 50,00 reais.</p>
<p>Essas cortesias permitem acesso ao PHP Conference &#8217;09 nos dias 27 e 28.</p>
<p style="text-align: center;"><img class="size-full wp-image-928 aligncenter" title="PHP Conf 09" src="http://phpsp.org.br/wp-content/uploads/2009/10/phpconf09.png" alt="PHP Conf 09" /></p>
<p>Se você ainda não sabe o que é o PHP Conference acesse <a title="PHP Conference Brasil 2009" href="http://www.phpconf.com.br" target="_blank">www.phpconf.com.br</a> para maiores informações sobre o principal evento de PHP da América Latina.</p>
<p>Esse ano os destaques do evento são:</p>
<p>Eli White &#8211; Community Manager da Zend<br />
Co-autor do livro &#8220;PHP 5 in Practice&#8221; e trabalha com Internet há mais de 13 anos, sendo os últimos 9 investidos exclusivamente em PHP. Já trabalhou em diversos projetos no passado, incluindo TravelPod, Digg e o Programa Telescópio Espacial Hubble, além de já ter se apresentado em diversas conferências.</p>
<p>Sebastian Bergmann &#8211; Criador da PHPUnit<br />
É o criador e mantenedor da PHPUnit, Core Developer da linguagem PHP e um dos fundadores da The PHP Consulting Company, empresa que presta consultoria visando a redução de custos de TI com a adoção de ferramentas de Software Livre e PHP em particular.</p>
<p>GRADE COMPLETA: <a title="Grade PHP Conf 09" href="http://www.phpconf.com.br/grid/index/day/1" target="_blank">http://www.phpconf.com.br/grid/index/day/1</a><br />
INSCRIÇÕES: <a title="Inscrições PHP Conf 09" href="http://www.phpconf.com.br/subscribe" target="_blank">http://www.phpconf.com.br/subscribe</a><br />
LOCAL: <a title="Local PHP Conf 09" href="http://www.phpconf.com.br/about" target="_blank">http://www.phpconf.com.br/about</a></p>
<p><sub>ps.: copiado da Lista PHP (valeu Mari)</sub></p>
<p>Lembrando que o evento tem patrocinadores de &#8220;peso&#8221;, como <a title="Zend" href="http://www.zend.com/" target="_blank">Zend</a>, <a title="SourceForge" href="http://sourceforge.net/" target="_blank">SourceForge</a>, <a title="UOL Host" href="http://www.uolhost.com.br/" target="_blank">UOL Host</a>, <a title="Locaweb" href="http://www.locaweb.com.br" target="_blank">Locaweb</a>, <a title="MSDN" href="http://msdn.microsoft.com/pt-br/default.aspx" target="_blank">MSDN</a>, keynotes internacionais e uma grade de palestrantes do Brasil inteiro.</p>
<p>Tag oficial do evento: phpconfbr</p>
<div class="wp-about-author-containter-top" style="background-color:#FFF;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/bac2411b47e4c7a68900b6ffb810ed3b?s=100&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D100&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://phpsp.org.br/author/ivanrosolen/' title='Ivan Rosolen'>Ivan Rosolen</a></h3><p></p><p><a href='http://www.ivanrosolen.com/' title='Ivan Rosolen'>Website</a> - <a href='http://phpsp.org.br/author/ivanrosolen/' title='More posts by Ivan Rosolen'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://phpsp.org.br/2009/10/cortesias-php-conf-09/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Curso Webservices em PHP</title>
		<link>http://phpsp.org.br/2009/08/curso-webservices-em-php/</link>
		<comments>http://phpsp.org.br/2009/08/curso-webservices-em-php/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 12:04:41 +0000</pubDate>
		<dc:creator>Ivan Rosolen</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[Mão na massa]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[tempo real eventos]]></category>
		<category><![CDATA[tre]]></category>
		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://phpsp.org.br/?p=868</guid>
		<description><![CDATA[Em Agosto, dia 29, acontecerá em São Paulo o Mão na Massa &#8220;Webservice em PHP&#8221; Ensinar as definições de um webservice, sua tipagem, as tecnologias envolvidas em sua construção e consumo, seus benefícios e a como desenvolver utilizando as ferramentas existentes para php. Após o treinamento, os participantes estarão aptos a escolher qual tecnologia deseja [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Em Agosto, dia 29, acontecerá em São Paulo o Mão na Massa &#8220;Webservice em PHP&#8221;</p>
<p>Ensinar as definições de um webservice, sua tipagem, as tecnologias envolvidas em sua construção e consumo, seus benefícios e a como  desenvolver utilizando as ferramentas existentes para php.</p>
<p>Após o treinamento, os participantes estarão aptos a escolher qual tecnologia deseja utilizar para desenvolver e também criar webservices para integração de sistemas, além de conhecer as questões de segurança e performance.</p>
<p>Tópicos:</p>
<ul>
<li>Entendendo webservices</li>
<li>Como criar webservices</li>
<li>Desenvolvendo webservices</li>
<li>Utilizando Objetos externos em um Webservice</li>
<li>Desenvolvendo webservices mais robustos</li>
<li>Conectando-se ao banco dados</li>
<li>Segurança em webservice</li>
<li>Outras práticas de segurança.</li>
</ul>
<p>Maiores informações e Inscrições</p>
<p><a title="Webservice em PHP" href="http://www.temporealeventos.com.br/?area=66" target="_blank">http://www.temporealeventos.com.br/?area=66</a></p>
<p><strong>Inscreva-se até este dia 27 com o seguinte código promocional “55c1s4” no valor de R$ 249,00</strong></p>
<div class="wp-about-author-containter-top" style="background-color:#FFF;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/bac2411b47e4c7a68900b6ffb810ed3b?s=100&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D100&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://phpsp.org.br/author/ivanrosolen/' title='Ivan Rosolen'>Ivan Rosolen</a></h3><p></p><p><a href='http://www.ivanrosolen.com/' title='Ivan Rosolen'>Website</a> - <a href='http://phpsp.org.br/author/ivanrosolen/' title='More posts by Ivan Rosolen'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://phpsp.org.br/2009/08/curso-webservices-em-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Curso Orientação a Objetos na prática</title>
		<link>http://phpsp.org.br/2009/05/curso-orientacao-a-objetos-na-pratica/</link>
		<comments>http://phpsp.org.br/2009/05/curso-orientacao-a-objetos-na-pratica/#comments</comments>
		<pubDate>Sat, 16 May 2009 00:00:17 +0000</pubDate>
		<dc:creator>Augusto Pascutti</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[Mão na massa]]></category>

		<guid isPermaLink="false">http://phpsp.org.br/?p=466</guid>
		<description><![CDATA[Senhores, senhoras e coisas ! Sábado (23/05/2009), semana que vem. Estarei ministrando um curso pela Tempo Real Eventos sobre Orientação a Objetos. O meu intuito com o curso é mostrar ela na prática, sem exemplos fora do contexto do desenvolvimento para web, ou seja, sem feijoadas, cachorros, etc. O público alvo do curso são os [...]]]></description>
			<content:encoded><![CDATA[<p>Senhores, senhoras e coisas !</p>
<p>Sábado (23/05/2009), semana que vem. Estarei ministrando um curso pela Tempo Real Eventos sobre Orientação a Objetos. O meu intuito com o curso é mostrar ela na prática, sem exemplos fora do contexto do desenvolvimento para web, ou seja, sem feijoadas, cachorros, etc.</p>
<p>O público alvo do curso são os desenvolvedores que conhecem um mínimo do conceito sobre Orientação a Objetos (mesmo assim, vou passar algumas horas explicando tudo que for importante sobre OO) mas nunca aplicaram ela no dia a dia. Vamos ver como alguns frameworks hoje utilizam a OO e organizam as coisas, design patterns e reflexão.</p>
<p>Se você se sente inseguro em utilizar OO, este curso é para você! Vamos rumo a des-sobrinhação !</p>
<p>Link: <a href="http://www.temporealeventos.com.br/?area=139">http://www.temporealeventos.com.br/?area=139</a></p>
<div class="wp-about-author-containter-top" style="background-color:#FFF;"><div class="wp-about-author-pic"><img alt='' src='http://0.gravatar.com/avatar/89de242e444d231e9928320af0417571?s=100&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D100&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://phpsp.org.br/author/augusto/' title='Augusto Pascutti'>Augusto Pascutti</a></h3><p>Augusto Pascutti é desenvolvedor PHP a 5 anos, trabalhou em projetos Open Source como CakePHP, Zend Framework e Habari. É evangelista PHP e de boas práticas, Zend Certified Engineer para PHP 5, fundador/coordenador do PHPSP, host do PHPSPCast e headbanger nas horas vagas.</p><p><a href='http://www.augustopascutti.com' title='Augusto Pascutti'>Website</a> - <a href='http://phpsp.org.br/author/augusto/' title='More posts by Augusto Pascutti'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://phpsp.org.br/2009/05/curso-orientacao-a-objetos-na-pratica/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Smarty e caching &#8211; parte 4</title>
		<link>http://phpsp.org.br/2008/07/smarty-e-caching-parte-4/</link>
		<comments>http://phpsp.org.br/2008/07/smarty-e-caching-parte-4/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 18:33:22 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Mão na massa]]></category>
		<category><![CDATA[artigo]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.phpsp.org.br/?p=17</guid>
		<description><![CDATA[Até agora temos visto como funciona a parte de caching do Smarty com exemplos que parecem vir da documentação(muitos na verdade são bem parecidos). Ainda existem mais algumas coisas que não são tão obvias assim para se se estudar. Esse pedaço final do artigo visa explicar essas. Se você navegar até os outros artigos, perceberá [...]]]></description>
			<content:encoded><![CDATA[<p style="0in;">Até agora temos visto como funciona a parte de caching do Smarty com exemplos que parecem vir da documentação(muitos na verdade são bem parecidos). Ainda existem mais algumas coisas que não são tão obvias assim para se se estudar. Esse pedaço final do artigo visa explicar essas.</p>
<p style="0in;">Se você navegar até os outros artigos, perceberá que até o momento trabalhamos somente com um template (arquivo.tpl). Uma das propriedades mais interessantes do cache do Smarty é a capacidade dele trabalhar de forma independente com vários arquivos.</p>
<p style="0in;">Vamos voltar um pouco ao Smarty para ter certeza de que entendemos o que eu acabei de dizer:</p>
<p style="0in;">O Smarty gerencia templates, assim, você pode separar seu template em blocos. Vamos dizer que você tenha a seguinte estrutura:</p>
<p style="0in;">Cabeçalho, menu da esquerda, chamada de artigos, chamada de eventos, rodapé.</p>
<p style="0in;">Embora sua página seja uma só, você pode monta-la a partir de vários bloquinhos no Smarty.</p>
<p style="0in;">Você teria arquivos como:</p>
<p style="0in;">cabecalho.tpl, menu.tpl, chamadaArtigos.tpl, chamadaEventos.tpl e rodapé.tpl.</p>
<p style="0in;">Note que não estamos usando um index.tpl neste exemplo. Muita gente iria criar um index.tpl e incluir as diretrizes de include nele. No nosso caso todos controles de exibição são feitos no index.php usando o metodo display().</p>
<p style="0in;">Voltando ao caching, como já deve ser imaginável, se você está controlando o display de cada área, você também pode controlar o cache de cada área de forma independente. Por exemplo, o cabecalho.tpl, rodarpá.tpl e menu.tpl podem ter um cache de longa duração, os eventos podem ser atualizados a cada hora e os artigos podem ser atualizados manualmente a cada vez que se insere um novo.</p>
<p style="0in;">Desta forma, temos uma única página, que sozinha tem vários controles de cache diferentes.</p>
<p style="0in;">Não vou mostrar o exemplo completo de um código como esse, porque ele vai bem além do escopo deste artigo, mas vamos mostrar algumas das partes relacionadas ao cache.</p>
<p style="0in;"><strong>O site de artigos e eventos.</strong></p>
<p style="0in;">Temos nossos TPLs montados e funcionando. Por preferência pessoal, gosto de separar os arquivos que controlam cada TPL em arquivos independentes. Assim, para cada TPL tenho um arquivo PHP que faz todas as buscas de banco, controle de cache, etc&#8230;</p>
<p style="0in;">
<p style="0in;">Nosso index.php vai acabar ficando +- assim:</p>
<p style="0in;">&lt;?php<br />
/* includes diversos para que tudo funcione direito<br />
* incluindo o include do Smarty, banco, etc&#8230;<br />
*/</p>
<p style="0in;">include(&#8216;cabecalho.php&#8217;);<br />
include(&#8216;menu.php&#8217;);<br />
include(&#8216;chamadaArtigo.php&#8217;);<br />
include(&#8216;chamadaEventos.php&#8217;);<br />
include(&#8216;rodape.php&#8217;);</p>
<p style="0in;">?&gt;</p>
<p style="0in;">Bem simples na verdade. A index essêncialmente se encarrega de chamar todos os objetos e métodos necessários para que tudo funcione corretamente (que eu geralmente separo em um único arquivo para que eu possa fazer somente um include na Index).</p>
<p style="0in;">Cada arquivo controla sua própria exibição, por exemplo o cabecalho:</p>
<p style="0in;">$Smarty-&gt;cache_lifetime = 3600;<br />
if(!$smarty-&gt;is_cached(&#8216;cabecalho.tpl&#8217;)){<br />
//&#8230;<br />
}<br />
$Smarty-&gt;display(&#8216;cabecalho.tpl&#8217;);</p>
<p style="0in;">
<p style="0in;">E assim por diante.</p>
<p>Um bloco um pouco diferente é o bloco de artigos. Você pode notar na descrição da funcionalidade acima que eu disse que o bloco deveria ser renovado somente quando um artigo novo é publicado. Assim, o controlador do template não tem controle sobre a renovação do artigo, não usamos o lifetime para determinar quando o template deve ser limpo.</p>
<p style="0in;">O que de fato fazemos é, no admin, quando rodamos a rotina de publicar o artigo, forçamos a limpeza do cache desse bloco.</p>
<p style="0in;">No arquivo de publicarMateria.php, colocaríamos além de todos os controles de insert em banco e etc&#8230;, também uma chamada de Smarty similar a essa:</p>
<p style="0in;">$Smarty-&gt;clear_cache(&#8216;chamadaArtigo.tpl&#8217;);</p>
<p style="0in;">(note que a página publicar matéria não precisa estar sendo controlada via Smarty para usar o objeto Smarty, basta que ele tenha uma referência ao objeto).</p>
<p style="0in;">
Bom, falamos muito sobre o cache, mas ainda não concluímos todas as coisas que existem. Como este artigo visa apenas melhorar o seu entendimento de como utilizar o cache do Smarty, não vou entrar em detalhes de tudo que é possível e nem de todas as outras funcionalidades associadas ao cache do Smarty. De uma forma geral, com o conhecimento que você adquiriu nesses artigos, você já tem a faca e o queijo na mão.</p>
<p style="0in;">A regra básica de programação ainda permanece verdadeira, planeje suas ações. Desenhe, pense, estude , teste e só depois, faça.</p>
<p style="0in;">
Bom galera, qualquer coisa, só me mandar suas dúvidas ou sugestões. O LiveJournal não tem form de e-mail, então basta ir pro <a class="snap_shots" href="http://bugz.doutromundo.com/" class="snap_shots">http://bugz.doutromundo.com<img class="snap_preview_icon" style="inline;" src="http://i.ixnp.com/images/v3.37/t.gif" alt="" /> </a> e usar o de lá.</p>
<div class="wp-about-author-containter-top" style="background-color:#FFF;"><div class="wp-about-author-pic"><img alt='' src='http://0.gravatar.com/avatar/4c678b5f99c982a1acf01be4b37efb8d?s=100&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D100&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://phpsp.org.br/author/rdohms/' title='Rafael Dohms'>Rafael Dohms</a></h3><p>Rafael Dohms é um Evangelista PHP e membro ativo da Comunidade PHP. Ele ajudou na fundação de dois Grupos de Usuários de PHP ao longo do tempo e hoje compatilha a coordenação do PHPSP. Desenvolvedor, gamer e apaixonado por código ele também é host do primeiro podcast de PHP do Brasil: PHPSPCast.

Atualmente ele trabalha na equipe SWAT do grupo MIH, uma equipe de experts que fornecem conhecimento técnico para o grupo além de trabalhar com P&amp;D buscando novos nichos da internet e tecnologia. Seu papel como Desenvolvedor Sênior é codar, treinar e auxiliar outras empresas e se divertir enquanto faz isso.</p><p><a href='http://www.rafaeldohms.com.br' title='Rafael Dohms'>Website</a> - <a href='http://www.twitter.com/rdohms' title='Rafael Dohmson Twitter'>Twitter</a> - <a href='http://phpsp.org.br/author/rdohms/' title='More posts by Rafael Dohms'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://phpsp.org.br/2008/07/smarty-e-caching-parte-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smarty e caching &#8211; Parte 3</title>
		<link>http://phpsp.org.br/2008/07/smarty-e-caching-parte-3/</link>
		<comments>http://phpsp.org.br/2008/07/smarty-e-caching-parte-3/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 15:17:36 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Mão na massa]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.phpsp.org.br/?p=16</guid>
		<description><![CDATA[Antes de entrarmos de cabeça em uma das partes que eu acho mais interessante do Smarty Cache, uma coisa que deveria ter sido apresentada no último artigo era como limpar o cache. Por falta de um lugar melhor, aqui vai. &#60;? require('Smarty.class.php'); $Smarty = new Smarty; $Smarty-&#62;caching = true; // OPCAO 1 - Limpar todos [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de entrarmos de cabeça em uma das partes que eu acho mais interessante do Smarty Cache, uma coisa que deveria ter sido apresentada no último artigo era como limpar o cache.<br />
Por falta de um lugar melhor, aqui vai.</p>
<pre>&lt;?
require('Smarty.class.php');
$Smarty = new Smarty;
$Smarty-&gt;caching = true;

// OPCAO 1 - Limpar todos o cache
$smarty-&gt;clear_all_cache();

// OPCAO 2 - Limpar somente o cache de um template
$smarty-&gt;clear_cache('aleatorio.tpl');
$smarty-&gt;display('index.tpl');
?&gt;</pre>
<p>Como você pode ver temos duas possibilidades, opção 1 permite limpar todos os caches do site em um único comando, e a opção 2 permite que você limpe o cache de um template individual.<br />
Sugiro que você tome um certo cuidado ao utilizar o comando cleal_all_cache() pois em servidores com alta visitação, você repentinamente ter que gerar todos os arquivos de cache pode causar um impacto indesejado no site. Planeje suas mudanças de cache cuidadosamente. Mais nesse assunto depois.</p>
<p>Muitos caches, um template.</p>
<p>Uma das perguntas que eu mais ouvi ser feita (não somente com relação ao artigo mas nas empresas onde trabalhei com Smarty) foi em relação ao controle de de exibição do cache. Vou exemplificar usando o cenário similar ao explicado em um comentário no meu primeiro artigo:</p>
<p>Um template de Menu (menu.tpl) entra no cache. Quando o usuário está logado, o menu muda para não incluir os campos de login e senha, substituindo-os por um link de &#8220;logoff&#8221;.<br />
Uma típica solução para um cenário desses seria algo assim:</p>
<pre>&lt;?
// includes e instancia do Smarty

// Checa se o usuario está logado
$logadoID = isset($_SESSION['id_logado'])?$_SESSION['id_logado']:false;
if (!$logado){
    $Smarty-&gt;clear_cache('menu.tpl');
    $Smarty-&gt;assign('mostraLogin',true);
    $Smarty-&gt;assign('usuarioNome','Visitante');
}else{
    $Smarty-&gt;clear_cache('menu.tpl');
    $Smarty-&gt;assign('mostraLogin',false);
    $Smarty-&gt;assign('usuarioNome',$_SESSION['nome_logado']);
}
$Smarty-&gt;display('menu.tpl');
?&gt;</pre>
<p>(eu resumi um pouco os códigos, pois já presumo que você saiba fazer o include do Smarty, setar o cache=1 etc&#8230;.)</p>
<p>O código acima deveria funcionar relativamente bem, porém, ele tem não tão obvio.<br />
O menos obvio é que toda vez que rodamos esse PHP, checamos por uma sessão chamada &#8220;id_logado&#8221; e decidimos o que fazer a partir dela. Vamos fazer um simulado pra ver o que acontece:<br />
1 &#8211; Visitante<br />
- entra ná pagina, ele não tem id_logado, limpa o cache, monta o menu, mostra o display<br />
2 &#8211; Novo Visitante<br />
- entra ná pagina, ele tbm não tem &#8220;id&#8221;, limpamos o cache, monta o menu, e mostra o display<br />
3 &#8211; usuario logado &#8211; o usuario tá logado, limpamos o cahce, montamos o menu, e mostrams o display.</p>
<p>Bom sem continuar, vemos que de fato, embora estamos usando o cache, na realidade, estamos apenas gerando mais trabalho para o processador, sendo que toda vez estamos limpando o cache. Esquecemos de utilizar o is_cached para checar se o template está cacheado ou não. Então vamos lá:</p>
<pre>&lt;?
// includes e instancia do Smarty

// Checa se o usuario está logado
$logadoID = isset($_SESSION['id_logado'])?$_SESSION['id_logado']:false;
if (!$logado){
	if (!$Smarty-&gt;is_cached('menu.tpl')){
		$Smarty-&gt;clear_cache('menu.tpl');
		$Smarty-&gt;assign('mostraLogin',true);
		$Smarty-&gt;assign('usuarioNome','Visitante');
	}
}else{
	if (!$Smarty-&gt;is_cached('menu.tpl')){
		$Smarty-&gt;clear_cache('menu.tpl');
		$Smarty-&gt;assign('mostraLogin',false);
		$Smarty-&gt;assign('usuarioNome',$_SESSION['nome_logado']);
	}
}
$Smarty-&gt;display('menu.tpl');
?&gt;</pre>
<p>Agora geramos outro problema: De novo aos testes:<br />
1 &#8211; visitante &#8211; não tem id, não tem cache, seta valores, mostra display<br />
2 &#8211; visitante &#8211; nao tem id, o cache existe, mostra display<br />
3 &#8211; visitante &#8211; nao tem id, o cache existe, mostra display<br />
(legal com o visitante funcionou)<br />
4 &#8211; usuario &#8211; tem ID, cache existe!, mostra display<br />
&#8230;</p>
<p>Pronto como resolvemos isso? O Smarty guarda o primeiro cache, independente de termos logado ou não&#8230; assim todo mundo ve a página com o formulário de login.</p>
<p>Eu demorei, mas é importante que você entenda em detalhe a lógica por trás do Smarty para evitar problemas enquanto desenvolve. É muito comum você(eu ou qualquer um) fazer esse tipo de erro ao desenvolver, e por isso, fazer simulados com pequenos pedaços de código enquanto você desenvolve é importante.</p>
<p>Como resolvemos esse problema? Com cache dinâmico.</p>
<p>O cache dinâmico (por falta de melhor nome), permite você levar em consideração variáveis na hora de cachear seus arquivos. Vamos ao código, depois a explicação:</p>
<pre>&lt;?
// includes e instancia do Smarty

// Checa se o usuario está logado
$logadoID = isset($_SESSION['id_logado'])?$_SESSION['id_logado']:false;
if (!$logado){
	if (!$Smarty-&gt;is_cached('menu.tpl',$logadoID)){
                // Não vamos limpar o cache pq não tem cache
		//$Smarty-&gt;clear_cache('menu.tpl',$logadoID);
		$Smarty-&gt;assign('mostraLogin',true);
		$Smarty-&gt;assign('usuarioNome','Visitante');
	}
}else{
	if (!$Smarty-&gt;is_cached('menu.tpl',$logadoID)){
                // Não vamos limpar o cache pq não tem
		//$Smarty-&gt;clear_cache('menu.tpl',$logadoID);
		$Smarty-&gt;assign('mostraLogin',false);
		$Smarty-&gt;assign('usuarioNome',$_SESSION['nome_logado']);
	}
}
$Smarty-&gt;display('menu.tpl',$logadoID);
?&gt;</pre>
<p>Tá onde que mudamos? Eu adicionei a variável $logadoID como parâmetro dos metodos is_cached(), clear_cache() e display().<br />
Agora vamos lá aos testes:</p>
<p>1 &#8211; visitante &#8211; não tem id, não tem cache menu.tpl0, seta valores, mostra display<br />
2 &#8211; visitante &#8211; nao tem id, o cache menu.tpl0 existe, mostra display<br />
3 &#8211; visitante &#8211; nao tem id, o cache menu.tpl0 existe, mostra display<br />
4 &#8211; usuario 5 &#8211; tem ID = 5, o cache menu.tpl5 não existe, seta valores, mostra display<br />
5 &#8211; usuario 5 &#8211; tem ID = 5, o cache menu.tpl5 existe, mostra display<br />
6 &#8211; visitante &#8211; nao tem id, o cache menu.tpl0 existe, mostra display<br />
7 &#8211; usuario 9 &#8211; tem ID = 9, o cache menu.tpl9 não existe, seta valores, mostra display<br />
8 &#8211; usuario 5 &#8211; tem ID = 5, o cache menu.tpl5 existe, mostra display<br />
8 &#8211; usuario 9 &#8211; tem ID = 9, o cache menu.tpl9 existe, mostra display</p>
<p>Pelos testes, parece que tudo funcionou!<br />
Eu deixei a linha comentada do clear_cache porque é importante que você veja que no minuto que se usa o cache dinâmico, as funções que trabalham os templates precisam ter o &#8220;ID&#8221; associadas a elas.<br />
Agora você deve estar perguntando porque eu demorei tanto para explicar algo que tão simples.<br />
Usar o cache dinâmico em certos casos é imprescindível, você não tem como fazer algo assim sem ele, mas um &#8220;erro&#8221; muito comum dos desenvolvedores de Smarty é sair colocando ID em tudo que é cache.  È importante lembrar que todo cache é um arquivo em disco, e que usando o cache dinâmico, você aumenta o número de arquivos existente no seu HD.<br />
Isso pode não parecer um problema muito sério, mas depois de algum tempo, e em um site grande, você pode ter literalmente milhões de arquivos cache. Se você cachear uma página que não muda com um ID, você acabará tendo centenas de milhares de cópias do mesmo arquivo, gastando espaço desnecessariamente.</p>
<p>O Cache dinâmico tem uma funcionalidade bem interessante. É possível apagar todos os caches com um ID=X. Usando o nosso exemplo acima, poderíamos apagar dodos os caches do usuário com ID=9.<br />
Para tal, basta executar o comando:</p>
<p>$Smarty-&gt;clear_cache(null, $logadoID);</p>
<p>Bom é isso. No próximo artigo, eu explicarei como funciona o agrupamento de caches, e se der darei alguns casos de uso para vocês terem na cabeça na hora de sair desenvolvendo.</p>
<div class="wp-about-author-containter-top" style="background-color:#FFF;"><div class="wp-about-author-pic"><img alt='' src='http://0.gravatar.com/avatar/4c678b5f99c982a1acf01be4b37efb8d?s=100&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D100&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://phpsp.org.br/author/rdohms/' title='Rafael Dohms'>Rafael Dohms</a></h3><p>Rafael Dohms é um Evangelista PHP e membro ativo da Comunidade PHP. Ele ajudou na fundação de dois Grupos de Usuários de PHP ao longo do tempo e hoje compatilha a coordenação do PHPSP. Desenvolvedor, gamer e apaixonado por código ele também é host do primeiro podcast de PHP do Brasil: PHPSPCast.

Atualmente ele trabalha na equipe SWAT do grupo MIH, uma equipe de experts que fornecem conhecimento técnico para o grupo além de trabalhar com P&amp;D buscando novos nichos da internet e tecnologia. Seu papel como Desenvolvedor Sênior é codar, treinar e auxiliar outras empresas e se divertir enquanto faz isso.</p><p><a href='http://www.rafaeldohms.com.br' title='Rafael Dohms'>Website</a> - <a href='http://www.twitter.com/rdohms' title='Rafael Dohmson Twitter'>Twitter</a> - <a href='http://phpsp.org.br/author/rdohms/' title='More posts by Rafael Dohms'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://phpsp.org.br/2008/07/smarty-e-caching-parte-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Smarty e Caching &#8211; Parte 2</title>
		<link>http://phpsp.org.br/2008/07/smarty-e-caching-parte-2/</link>
		<comments>http://phpsp.org.br/2008/07/smarty-e-caching-parte-2/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 16:31:27 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Mão na massa]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.phpsp.org.br/?p=15</guid>
		<description><![CDATA[Agora que aprendemos um pouco sobre o chaching de uma forma geral, vamos olhar mais a fundo o mundo dentro do Smarty. Eu geralmente trabalho com um arquivo de configuração geral para o Smarty. Um “smarty.config.php” que eu deixo em algum lugar acessível e fácil. Não vou entrar no mérito de organização de arquivos ou [...]]]></description>
			<content:encoded><![CDATA[<p style="0in;">Agora que aprendemos um pouco sobre o chaching de uma forma geral, vamos olhar mais a fundo o mundo dentro do Smarty.</p>
<p style="0in;">Eu geralmente trabalho com um arquivo de configuração geral para o Smarty. Um “smarty.config.php” que eu deixo em algum lugar acessível e fácil. Não vou entrar no mérito de organização de arquivos ou nomenclaturas, padrões de código etc&#8230; é apenas uma dica para facilitar a vida.</p>
<p style="0in;">Bom você já deve estar usando o Smarty e está interessado em habilitar o cache. Para isso, basta setar a variavel “caching” para 1 com a seguinte linha:</p>
<p style="0in;"><span style="#3366ff;">$Smarty-&gt;caching = 1;</span></p>
<p style="0in;">Onde $Smarty é o objeto Smarty que você instanciou antes.</p>
<p style="0in;">Essa variavelzinha avisa o Smarty que você quer guardar as versões rendidas dos TPLs que você tem.</p>
<p style="0in;">Vamos ver o que isso significa na prática:</p>
<p style="0in;">TPL – Arquivo template (aleatorio.tpl):</p>
<pre>&lt;html&gt;
&lt;head&gt;&lt;title&gt;Exemplo 1&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;</pre>
<pre>O número escolhido é: <span style="#ff9900;"><span style="#ff9900;">{$aleatorio}</span>

</span></pre>
<pre>&lt;/body&gt;
&lt;/html&gt;</pre>
<p style="0in;">
<p style="0in;">O arquivo PHP (aleatorio.php):</p>
<pre><code>&lt;?php</code></pre>
<pre>// incluir a class smarty</pre>
<pre>require('Smarty.class.php');</pre>
<pre>// criar nova instância</pre>
<pre>$Smarty = new Smarty;</pre>
<pre>// habilitar o cache</pre>
<pre>$Smarty-&gt;caching = 1; // atribuir um numero aleatorio para variavel aleatorio</pre>
<pre>$Smarty-&gt;assign('aleatorio',rand(1,100));</pre>
<pre>$Smarty-&gt;display('aleatorio.tpl');</pre>
<pre>?&gt;</pre>
<p style="0in;">
<p style="0in;">Ao rodar essa página a primeira vez, teremos um resultado parecido com esse:</p>
<p style="0in;"><span style="#008000;">O número escolhido é: 45</span></p>
<p style="0in;">Agora toda vez que você rodar sua página no browser, você terá o mesmo resultado (se não, verifique a configuração do seu Smarty, permissão de escrita nos diretórios, etc&#8230;)</p>
<p style="0in;">Com esse simples exemplo, vemos a essência do funcionamento mais básico de cache no Smarty.</p>
<p style="0in;">Vamos complicar as coisas um pouco. Vamos supor (só por conveniência) que este numero aleatório deve ser alterado a cada 5 minutos. Como que se faz isso?</p>
<p style="0in;">Uma opção seria caçar o arquivo no cache e apagá-lo manualmente, mas imagino que isso seja um pouco trabalhoso demais.</p>
<p style="0in;">A outra opção seria avisar o Smarty, que esse cache tem uma vida útil de 5 minutos.</p>
<p style="0in;">
<p style="0in;">O arquivo PHP (aleatorio5min.php):</p>
<pre>&lt;?php</pre>
<pre>// incluir a class smarty</pre>
<pre>require('Smarty.class.php');</pre>
<pre>$Smarty = new Smarty;</pre>
<pre>$Smarty-&gt;caching = 1;</pre>
<pre>// LINHA NOVA
$Smarty-&gt;cache_lifetime = 300;</pre>
<pre>// LINHA NOVA
$Smarty-&gt;assign('aleatorio',rand(1,100));</pre>
<pre>$Smarty-&gt;display('aleatorio.tpl');</pre>
<pre>?&gt;</pre>
<p style="0in;">Agora atribuimos um valor ao atributo “cache_lifetime” (traduzindo: vida util do cache).</p>
<p style="0in;">Esse parametro recebe um número de segundos que deve ser cacheada uma página.</p>
<p style="0in;">Agora se rodarmos esse exemplo 4 vezes em intervalos de 4 minutos, teremos:</p>
<p style="0in;">
<p style="0in;"><span style="#008000;">0:00 &#8211; O número escolhido é: 32</span></p>
<p style="0in;"><span style="#008000;">0:04 &#8211; O número escolhido é: 32</span></p>
<p style="0in;"><span style="#008000;">0:08 &#8211; O número escolhido é: 78</span></p>
<p style="0in;"><span style="#008000;">0:12 &#8211; O número escolhido é: 19</span></p>
<p style="0in;">
<p style="0in;">(lembrem-se – os números são aleatórios e provavelmente serão diferentes)</p>
<p style="0in;">
<p style="0in;">Vou entrar em lifetime com mais detalhes em um outro artigo mais avançado, aqui meramente demos uma illustrada na utilidade do conceito.</p>
<p style="0in;">
<p style="0in;"><strong>Importante para o desenvolvedor.</strong></p>
<p style="0in;">
<p style="0in;">Um dos atributos importantes quando se está usando o Smarty e o Cache, é o atributo:</p>
<p style="0in;"><span style="#3366ff;">compile_check</span></p>
<p style="0in;">
<p style="0in;">Ele basicamente verifica todos os arquivos envolvidos no template em questão. Se algum deles sofrer alguma modificação, o template é recompilado do Zero.</p>
<p style="0in;">Isso é importante quando se faz modificações nos templates (tpl). Muitas vezes você irá ter situações onde você faz uma modificação em seu TPL e ela não é refletida no ambiente. Cheque sempre se você tem esse atributo ligado.</p>
<p style="0in;">Ele é setado usando a linha:</p>
<p style="0in;">
<p style="0in;"><span style="#3366ff;">$Smarty-&gt;compile_check = true;</span></p>
<p style="0in;">Controle de fluxo:</p>
<p style="0in;">Se você já tem uma certa experiência em programação, você deve ter percebido que do ponto de vista do PHP, nada mudou (peguemos o arquivo aleatorio5min.php)</p>
<p style="0in;">
<pre><code>1. &lt;?php</code></pre>
<pre>2. // incluir a class smarty</pre>
<pre>3. require('Smarty.class.php');</pre>
<pre>4. $Smarty = new Smarty;</pre>
<pre>5. $Smarty-&gt;caching = 1;</pre>
<pre>6. $Smarty-&gt;cache_lifetime = 300;</pre>
<pre>7. $Smarty-&gt;assign('aleatorio',rand(1,100));</pre>
<pre>8. $Smarty-&gt;display('aleatorio.tpl');</pre>
<pre>9. ?&gt;</pre>
<p style="0in;">
<p style="0in;">O fluxo permanece o mesmo com e sem o cache. Isso, consequentemente não alivia nosso servidor caso ao invés de buscarmos um numero aleatório, tivessmos fazendo uma conta num banco MySQL ou fazendo um parse de um arquivo XML ou CSV.</p>
<p style="0in;">Assim, será necessário fazer algumas mudanças no código para usufruir completamente do controle de cache do Smarty.</p>
<p style="0in;">O que precisamos é verificar se o arquivo tem um cache válido, se ele não o ter, precisamos executar as funções necessárias para popular o template. Caso ele já tenha um arquivo de cache, podemos simplesmente exibir o arquivo cacheado, sem ter que preparar todas as variáveis.</p>
<p style="0in;">
<pre><code>1. &lt;?php</code></pre>
<pre>2. // incluir a class smarty</pre>
<pre>3. require('Smarty.class.php');</pre>
<pre>4. $Smarty = new Smarty;</pre>
<pre>5. $Smarty-&gt;caching = 1;</pre>
<pre>6. $Smarty-&gt;cache_lifetime = 300;</pre>
<pre>7. if (!$Smarty-&gt;is_cached('aleatorio.tpl')){</pre>
<pre>8.     $Smarty-&gt;assign('aleatorio',rand(1,100));</pre>
<pre>9. }</pre>
<pre>10. $Smarty-&gt;display('aleatorio.tpl');</pre>
<pre>11. ?&gt;</pre>
<p style="0in;">Como voce pode ver, incluimos uma nova chamada – is_cached(&#8216;arquivo.tpl&#8217;).</p>
<p style="0in;">Essa chamada checa se o nosso cache é válido. Se ele não for (ela retornar false), executamos o nosso assign – no caso o gerador de números aleatórios.</p>
<p style="0in;">
<p style="0in;">Bom acho que já temos bastante para ir brincando.</p>
<p style="0in;">Lembrem-se de algumas coisas para manter a vida fácil:</p>
<p style="0in;"><span style="#3366ff;">$Smarty-&gt;caching = 0;</span> // não faz cache</p>
<p style="0in;"><span style="#3366ff;">$Smarty-&gt;is_cached(&#8216;arquivo.tpl&#8217;)</span> – é importante para controlar o fluxo de dados no servidor</p>
<p style="0in;">No próximo artigo, vamos ver em mais detalhes como cachear resultados dinâmicos. Isso é algo que já me perguntaram, mas o assunto é muito comprido para deixar em um só artigo.</p>
<p style="0in;">
<div class="wp-about-author-containter-top" style="background-color:#FFF;"><div class="wp-about-author-pic"><img alt='' src='http://0.gravatar.com/avatar/4c678b5f99c982a1acf01be4b37efb8d?s=100&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D100&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://phpsp.org.br/author/rdohms/' title='Rafael Dohms'>Rafael Dohms</a></h3><p>Rafael Dohms é um Evangelista PHP e membro ativo da Comunidade PHP. Ele ajudou na fundação de dois Grupos de Usuários de PHP ao longo do tempo e hoje compatilha a coordenação do PHPSP. Desenvolvedor, gamer e apaixonado por código ele também é host do primeiro podcast de PHP do Brasil: PHPSPCast.

Atualmente ele trabalha na equipe SWAT do grupo MIH, uma equipe de experts que fornecem conhecimento técnico para o grupo além de trabalhar com P&amp;D buscando novos nichos da internet e tecnologia. Seu papel como Desenvolvedor Sênior é codar, treinar e auxiliar outras empresas e se divertir enquanto faz isso.</p><p><a href='http://www.rafaeldohms.com.br' title='Rafael Dohms'>Website</a> - <a href='http://www.twitter.com/rdohms' title='Rafael Dohmson Twitter'>Twitter</a> - <a href='http://phpsp.org.br/author/rdohms/' title='More posts by Rafael Dohms'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://phpsp.org.br/2008/07/smarty-e-caching-parte-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mão na massa &#8211; Zend Framework</title>
		<link>http://phpsp.org.br/2008/06/mao-na-massa-zend-framework/</link>
		<comments>http://phpsp.org.br/2008/06/mao-na-massa-zend-framework/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 14:20:55 +0000</pubDate>
		<dc:creator>PHPSP Administrator</dc:creator>
				<category><![CDATA[Mão na massa]]></category>

		<guid isPermaLink="false">http://www.phpsp.org.br/?p=6</guid>
		<description><![CDATA[A Tempo Real Eventos promoverá no dia 12 de julho o treinamento &#8220;Mão na Massa&#8221; de Zend Framework. Zend Framework faz parte do PHP Collaboration Project da Zend, um esforço para criar padrões para o PHP no mundo e facilitar o compartilhamento e reaproveitamento de código. Ele ocorrerá das 9h00min às 17h00min em laboratório com [...]]]></description>
			<content:encoded><![CDATA[<p>A Tempo Real Eventos promoverá no dia 12 de julho o treinamento &#8220;Mão<br />
na Massa&#8221; de Zend Framework.</p>
<p>Zend Framework faz parte do PHP Collaboration Project da Zend, um<br />
esforço para criar padrões para o PHP no mundo e facilitar o<br />
compartilhamento e reaproveitamento de código.</p>
<p>Ele ocorrerá das 9h00min às 17h00min em laboratório com 1 pessoa por<br />
máquina.</p>
<p>O treinamento será dado por Flávio Gomes da Silva Lisboa, do SERPRO,<br />
autor do livro &#8220;Zend Framework: desenvolvendo em PHP 5 orientado a<br />
objetos com MVC&#8221;.</p>
<p>O endereço para inscrições é:</p>
<p><a href="http://www.temporealeventos.com.br/?area=107" target="_blank">http://www.temporealeventos.com.br/?area=107</a></p>
<div class="wp-about-author-containter-top" style="background-color:#FFF;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/9f4c420045691d8b9ec16638a5c13f92?s=100&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D100&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://phpsp.org.br/author/admin/' title='PHPSP Administrator'>PHPSP Administrator</a></h3><p></p><p><a href='http://www.phpsp.org.br' title='PHPSP Administrator'>Website</a> - <a href='http://phpsp.org.br/author/admin/' title='More posts by PHPSP Administrator'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://phpsp.org.br/2008/06/mao-na-massa-zend-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

