<?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>Rogério Lino</title>
	<atom:link href="http://rogeriolino.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://rogeriolino.com</link>
	<description>Desenvolvimento Web, tecnologia, jogos e etcetera</description>
	<lastBuildDate>Wed, 01 Feb 2012 19:22:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>PHP: Easy SQL date time formatting</title>
		<link>http://rogeriolino.com/2012/02/01/php-easy-sql-date-time-formatting/</link>
		<comments>http://rogeriolino.com/2012/02/01/php-easy-sql-date-time-formatting/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 18:26:03 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[array_reverse]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[datetime]]></category>
		<category><![CDATA[easy]]></category>
		<category><![CDATA[explode]]></category>
		<category><![CDATA[format]]></category>
		<category><![CDATA[formatação]]></category>
		<category><![CDATA[hora]]></category>
		<category><![CDATA[implode]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[strtotime]]></category>
		<category><![CDATA[time]]></category>
		<category><![CDATA[timestamp]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=478</guid>
		<description><![CDATA[<p>SQL to Human:</p> /* * date */ $format = 'm/d/Y'; // en-US // $format = 'd/m/Y'; // pt-BR $date = '2012-02-01'; echo date($format, strtotime($date)); /* * datetime */ $format .= ' H:i:s'; $datetime = '2012-02-01 11:33:59'; echo date($format, strtotime($datetime)); <p>Human to SQL:</p> /* * date */ $sqlFormat = 'Y-m-d'; $date = '02/01/2012'; // en-US echo [...]]]></description>
			<content:encoded><![CDATA[<p><strong>SQL to Human:</strong></p>
<pre name="code" class="php">
/*
 * date
 */
$format = 'm/d/Y'; // en-US
// $format = 'd/m/Y'; // pt-BR
$date = '2012-02-01';
echo date($format, strtotime($date));

/*
 * datetime
 */
$format .= ' H:i:s';
$datetime = '2012-02-01 11:33:59';
echo date($format, strtotime($datetime));
</pre>
<p><strong>Human to SQL:</strong></p>
<pre name="code" class="php">
/*
 * date
 */
$sqlFormat = 'Y-m-d';
$date = '02/01/2012';

// en-US
echo date($sqlFormat, strtotime($date));
// pt-BR
echo join('-', array_reverse(explode('/', $date)));

/*
 * datetime
 */
$sqlFormat = 'Y-m-d H:i:s';

// en-US
$datetime = '02/01/2012 11:33:59';
echo date($sqlFormat, strtotime($datetime));

// pt-BR
$datetime = '01/02/2012 11:33:59';
$datetime = explode(' ', $datetime);
$date = join('-', array_reverse(explode('/', $datetime[0])));
echo $date . ' ' . $datetime[1];
</pre>
<p><strong>Reference:</strong></p>
<p><a href="http://php.net/strtotime" title="PHP.net">strtotime</a><br />
The function expects to be given a string containing an English date format and will try to parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC), relative to the timestamp given in now, or the current time if now is not supplied.</p>
<p><a href="http://php.net/date" title="PHP.net">date</a><br />
Returns a string formatted according to the given format string using the given integer timestamp or the current time if no timestamp is given. In other words, timestamp is optional and defaults to the value of <a href="http://php.net/time" title="PHP.net">time()</a>.</p>
<p><a href="http://php.net/explode" title="PHP.net">explode</a><br />
Returns an array of strings, each of which is a substring of string formed by splitting it on boundaries formed by the string delimiter.</p>
<p><a href="http://php.net/array_reverse" title="PHP.net">array_reverse</a><br />
Takes an input array and returns a new array with the order of the elements reversed.</p>
<p><a href="http://php.net/join" title="PHP.net">join / implode</a><br />
Join array elements with a glue string.</p>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2012/02/01/php-easy-sql-date-time-formatting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery: Vertical Scroller Plugin</title>
		<link>http://rogeriolino.com/2012/01/23/jquery-vertical-scroller-plugin/</link>
		<comments>http://rogeriolino.com/2012/01/23/jquery-vertical-scroller-plugin/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 19:44:50 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[Quickpost]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[scroller]]></category>
		<category><![CDATA[vertical]]></category>
		<category><![CDATA[vscroller]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=461</guid>
		<description><![CDATA[<p><a href="https://github.com/rogeriolino/vscroller/"><br /> <br /> </a></p> <p>Hoje criei um novo projeto no Github, para um plugin para jQuery (1.7+) que desenvolvi (estou e estarei desenvolvendo). Trata-se um scroller vertical que pode ser aplicado a qualquer tag block.</p> $('#news').vScroller({ width: 300, height: 400 }); <p>Conforme surgir demanda, necessidade de mais funcionalidades, callbacks, eu irei incrementando o [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/rogeriolino/vscroller/"><br />
    <img src="http://rogeriolino.com/wp-content/uploads/2012/01/vscroller.png" alt="" title="vScroller" width="600" height="100" class="aligncenter size-full wp-image-462" /><br />
</a></p>
<p>Hoje criei um novo projeto no Github, para um plugin para jQuery (1.7+) que desenvolvi (estou e estarei desenvolvendo). Trata-se um scroller vertical que pode ser aplicado a qualquer tag block.</p>
<pre name="code" class="js">
    $('#news').vScroller({
        width: 300,
        height: 400
    });
</pre>
<p>Conforme surgir demanda, necessidade de mais funcionalidades, callbacks, eu irei incrementando o projeto. Embora simples, está funcional, e serve como estudo.</p>
<p><em>[update 2012-01-24]</em><br />
<strong>Features:</strong></p>
<ul>
<li>MouseWheel</li>
<li>Drag&#038;Drop</li>
<li>Keys (UP, DOWN, PG_UP, PG_DOWN, HOME, END)</li>
</ul>
<p><strong>Compatibility (tested):</strong></p>
<ul>
<li>Chrome 12+</li>
<li>Firefox 8+</li>
<li>Opera 11+</li>
</ul>
<p><em>[/update]</em></p>
<p><strong>Demo:</strong><br />
<a href="http://dev.rogeriolino.com/js/vscroller.html" title="vScroller - Demo">http://dev.rogeriolino.com/js/vscroller.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2012/01/23/jquery-vertical-scroller-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quickpost: Instant documentation search</title>
		<link>http://rogeriolino.com/2011/12/07/quickpost-instant-documentation-search/</link>
		<comments>http://rogeriolino.com/2011/12/07/quickpost-instant-documentation-search/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 14:47:27 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Quickpost]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[dochub]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[instant]]></category>
		<category><![CDATA[mdn]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[quickpost]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=397</guid>
		<description><![CDATA[<p><a href="http://dochub.io/"></a></p> <p><a title="dochub" href="http://dochub.io/">dochub</a> concentra de maneira fácil e rápida as documentações de CSS, HTML, Javascript e DOM. No qual tem o seu conteúdo retirado da <a title="MDN" href="https://developer.mozilla.org/en-US/">Mozilla Developer Network</a>.</p> <p>Excelente ferramente para tirar aquela dúvida ou refrescar a memória.</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://dochub.io/"><img class="size-full wp-image-407" title="dochub" src="http://rogeriolino.com/wp-content/uploads/2011/12/dochub.png" alt="" width="840" height="450" /></a></p>
<p><a title="dochub" href="http://dochub.io/">dochub</a> concentra de maneira fácil e rápida as documentações de CSS, HTML, Javascript e DOM. No qual tem o seu conteúdo retirado da <a title="MDN" href="https://developer.mozilla.org/en-US/">Mozilla Developer Network</a>.</p>
<p>Excelente ferramente para tirar aquela dúvida ou refrescar a memória.</p>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2011/12/07/quickpost-instant-documentation-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quickpost: Javascript Resource Loader</title>
		<link>http://rogeriolino.com/2011/12/05/quickpost-javascript-resource-loader/</link>
		<comments>http://rogeriolino.com/2011/12/05/quickpost-javascript-resource-loader/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 19:55:32 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Quickpost]]></category>
		<category><![CDATA[loader]]></category>
		<category><![CDATA[modernizr]]></category>
		<category><![CDATA[quickpost]]></category>
		<category><![CDATA[resource]]></category>
		<category><![CDATA[yepnope]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=390</guid>
		<description><![CDATA[<p><a href="http://yepnopejs.com/" title="yepnope.js">yepnope</a> is an asynchronous conditional resource loader that&#8217;s super-fast, and allows you to load only the scripts that your users need.</p> <p>Good Things</p> yepnope.js is only 1.6kb &#8211; smaller than most and certainly a good size for its functionality set. yepnope.js is called a &#8220;resource loader&#8221; because it can work with both JavaScript [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><a href="http://yepnopejs.com/" title="yepnope.js">yepnope</a> is an asynchronous conditional resource loader that&#8217;s super-fast, and allows you to load only the scripts that your users need.</p>
<p><strong>Good Things</strong></p>
<ul>
<li>yepnope.js is only 1.6kb &#8211; smaller than most and certainly a good size for its functionality set.</li>
<li>yepnope.js is called a &#8220;resource loader&#8221; because it can work with both JavaScript and CSS.</li>
<li>yepnope.js has a full test suite in QUnit that you can run in your set of supported browsers to make sure it works. (We run it via TestSwarm in every browser we can get our hands on)</li>
<li>yepnope.js fully decouples preloading from execution. This means that you have ultimate control of when your resource is executed and you can change that order on the fly.</li>
<li>The yepnope.js api is friendly and encourages logical grouping of resources.</li>
<li>yepnope.js is modular. It has a whole system for adding your own functionality and a couple examples of how you might do that. (Prefixes and filters).</li>
<li>The yepnope.js api encourages you to only load the resources that you need. This means that even when it&#8217;s slower than another script loader, it still can come out on top, because you could avoid an entire resource.</li>
<li>yepnope.js is integrated into <a href="http://www.modernizr.com/" title="Modernizr">Modernizr</a>.</li>
<li>yepnope.js always executes things in the order they are listed. This is a pro for some, and a con for others. We think it&#8217;s a friendly default.</li>
<li>yepnope.js has the capability to do resource fallbacks and still download dependent scripts in parallel with the first.</li>
</ul>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2011/12/05/quickpost-javascript-resource-loader/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Manga Framework</title>
		<link>http://rogeriolino.com/2011/09/20/php-manga-framework/</link>
		<comments>http://rogeriolino.com/2011/09/20/php-manga-framework/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 18:35:56 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[facelets]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[ioc]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[lithium]]></category>
		<category><![CDATA[manga]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[playframework]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[vraptor]]></category>
		<category><![CDATA[yii]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=364</guid>
		<description><![CDATA[<p>Criado o projeto para o framework <a href="https://github.com/rogeriolino/manga-framework" title="Manga Framework">Manga, no Github</a> (PHP 5.3+).</p> <p>Entre algumas funcionalidades, destaca-se o seu template engine baseado no <a href="http://facelets.java.net/" title="Facelets">Facelets</a>.</p> <p>Os arquivos de configuração poderão ser escritos em mais de um formato, inicialmente suporte a XML e YAML. Annotations são utilizadas para enxugar esses arquivos de configuração, deixando [...]]]></description>
			<content:encoded><![CDATA[<p>Criado o projeto para o framework <a href="https://github.com/rogeriolino/manga-framework" title="Manga Framework">Manga, no Github</a> (PHP 5.3+).</p>
<p>Entre algumas funcionalidades, destaca-se o seu template engine baseado no <a href="http://facelets.java.net/" title="Facelets">Facelets</a>.</p>
<p>Os arquivos de configuração poderão ser escritos em mais de um formato, inicialmente suporte a XML e YAML. Annotations são utilizadas para enxugar esses arquivos de configuração, deixando o código mais intuitivo.</p>
<p>O próximo passo é implementar suporte à <a href="http://en.wikipedia.org/wiki/Inversion_of_control" title="Inversion of Control">IoC</a>, que inicialmente pode ser simulado pelo arquivo de configuração de rotas (com suporte <a href="http://en.wikipedia.org/wiki/Representational_state_transfer" title="Representational State Transfer">REST</a>).</p>
<p>A intenção não é desenvolver um framework revolucionário, e sim adaptar as ideias e metodologias já utilizadas por outros em um único framework afim de aumentar a produtividade. Servem como inspiração os seguintes frameworks:</p>
<p><strong>Ruby</strong></p>
<ul>
<li><a href="http://rubyonrails.org/" title="Ruby on Rails">RoR</a></li>
</ul>
<p><strong>Java</strong></p>
<ul>
<li><a href="http://javaserverfaces.java.net/" title="Java Server Faces">JSF2</a></li>
<li><a href="http://www.springsource.org/" title="Spring">Spring 3</a></li>
<li><a href="http://vraptor.caelum.com.br/" title="VRaptor">VRaptor</a></li>
<li><a href="www.playframework.org" title="Play Framework">Play Framework</a></li>
</ul>
<p><strong>PHP</strong></p>
<ul>
<li><a href="http://lithify.me/" title="Lithium">Lithium</a></li>
<li><a href="http://symfony.com/" title="Symfony">Symfony</a></li>
<li><a href="http://www.yiiframework.com/" title="Yii">Yii</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2011/09/20/php-manga-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP: Layout Inheritance</title>
		<link>http://rogeriolino.com/2011/03/16/cakephp-layout-inheritance/</link>
		<comments>http://rogeriolino.com/2011/03/16/cakephp-layout-inheritance/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 18:37:26 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[inheritance]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=356</guid>
		<description><![CDATA[<p>Para quem está utilizando o CakePHP ou já utilizou e também sentiu falta de herança nos layouts. Segue abaixo uma dica para ajudar na criações de templates utilizando o CakePHP.</p> &#60;?php // sublayout.ctp ob_start(); ?&#62; &#60;?php eco $content_for_layout; ?&#62; &#60;?php $content = ob_get_contents(); ob_end_clean(); echo $this->renderLayout( $content, 'default' // parent layout ); &#60;?php // controller [...]]]></description>
			<content:encoded><![CDATA[<p>Para quem está utilizando o CakePHP ou já utilizou e também sentiu falta de herança nos layouts. Segue abaixo uma dica para ajudar na criações de templates utilizando o CakePHP.</p>
<pre name="code" class="php">
&lt;?php
// sublayout.ctp

ob_start();

?&gt;
 <!-- html content -->
 &lt;?php eco $content_for_layout; ?&gt;
 <!-- html content -->
&lt;?php

$content = ob_get_contents();
ob_end_clean();

echo $this->renderLayout(
        $content,
        'default' // parent layout
);
</pre>
<pre name="code" class="php">
&lt;?php
// controller class
class MyController extends AppController {

    function test() {
        $this->layout = 'sublayout';
    }

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2011/03/16/cakephp-layout-inheritance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Template Engines</title>
		<link>http://rogeriolino.com/2010/09/09/php-template-engines/</link>
		<comments>http://rogeriolino.com/2010/09/09/php-template-engines/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 21:22:29 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[dwoo]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[facelets]]></category>
		<category><![CDATA[flexy]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[fxl]]></category>
		<category><![CDATA[h2o]]></category>
		<category><![CDATA[inheritance]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jinja]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[quickskin]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[tinybutstrong]]></category>
		<category><![CDATA[vemplator]]></category>
		<category><![CDATA[vlib]]></category>
		<category><![CDATA[xtemplate]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=315</guid>
		<description><![CDATA[<p>Todo mundo que programa em PHP sente falta de uma boa alternativa para separar o código PHP do visual (HTML). Nessas horas vale a pena estudar algumas template engines para PHP disponíveis para saber qual que melhor se adapta à suas necessidades e projeto. Alguns frameworks MVC possuem sua própria engine, outros tentam.</p> <p><a href="http://www.smarty.net/">Smarty</a></p> [...]]]></description>
			<content:encoded><![CDATA[<p>Todo mundo que programa em PHP sente falta de uma boa alternativa para separar o código PHP do visual (HTML). Nessas horas vale a pena estudar algumas template engines para PHP disponíveis para saber qual que melhor se adapta à suas necessidades e projeto. Alguns frameworks MVC possuem sua própria engine, outros tentam.</p>
<p><a href="http://www.smarty.net/">Smarty</a></p>
<p>O mais famoso e usado como inspiração por muitos outros projetos. Robusto (possuindo blocos condicionais/loops e várias funções próprias) e rápido (&#8220;compilando&#8221; suas páginas para arquivos PHP).</p>
<pre name="code" class="html">
&lt;ul&gt;
{foreach from=$myArray item=foo}
    &lt;li&gt;{$foo}&lt;/li&gt;
{/foreach}
&lt;/ul&gt;
</pre>
<pre name="code" class="php">
$smarty = new Smarty;
$arr = array(1000, 1001, 1002);
$smarty->assign ('myArray', $arr);
$smarty->display ('HelloWorld.tpl');
</pre>
<p><a href="http://vlib.clausvb.de/vlibtemplate.php">vlibtemplate</a></p>
<p>Com esta engine saímos de um problema e entramos em outro, é necessário aprender (lembrar) algumas palavras reservadas para sinalizar variáveis, além do uso dos limitadores das expressões.</p>
<pre name="code" class="html">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;{tmpl_var name='title_text'}&lt;/title&gt;
&lt;meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;{tmpl_var name='body_text'}&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<pre name="code" class="php">
$tmpl = new vlibTemplate('tmpl/basic.htm');
$tmpl->setvar('title_text', 'TITLE: This is the vLIB basic example ...');
$tmpl->setvar('body_text', 'BODY: This is the message set using setvar()');
$tmpl->pparse();
</pre>
<p><a href="http://www.feverxl.org/template/">FXL Template</a></p>
<p>Muito pouco usual, o FXL faz uso dos blocos de comentário HTML para definir os loops. Outros semelhantes e nada melhores são: <a href="http://quickskin.worxware.com/">QuickSkin</a> e <a href="http://xtemplate.sourceforge.net/">XTemplate</a>.</p>
<pre name="code" class="html">
 &lt;table&gt;
     &lt;!-- START row --&gt;
         &lt;tr&gt;
             &lt;!-- START cell --&gt;
             &lt;td &gt;{td_value} &lt;/td&gt;
             &lt;!-- END cell --&gt;
         &lt;/tr&gt;
     &lt;!-- END row --&gt;
 &lt;/table&gt;
</pre>
<pre name="code" class="php">
$fxlt = new fxl_template('example.tpl');
$fxlt_row = $fxlt->get_block('row');
$fxlt_cell = $fxlt_row->get_block('cell');
for ($tr = 1; $tr <= 3; $tr++) {
    for ($td = 1; $td <= 3; $td++) {
        $fxlt_cell->assign('td_value', $tr.':'.$td);
        $fxlt_row->assign('cell', $fxlt_cell);
        $fxlt_cell->clear();
    }
    $fxlt->assign('row', $fxlt_row);
    $fxlt_row->clear();
}
$fxlt->display();
</pre>
<p><a href="http://www.greaterscope.net/projects/Vemplator">Vemplator</a></p>
<p>Mais do mesmo, mas com alterações de sintaxe.</p>
<pre name="code" class="html">
 &lt;h1&gt;{if:logged} Welcome {username} {else:} User not logged {end:} &lt;/h1&gt;
&lt;ul&gt;
{foreach:rows,row}
    &lt;li&gt;
    {row['name']}
    &lt;/li&gt;
{end:}
&lt;/ul&gt;
</pre>
<pre name="code" class="php">
$t = new vemplator();
// if/else
$t->assign('logged', true);
$t->assign('username', 'Rogerio');
// loop
$items = array(
	array('name' => 'Laptop'),
	array('name' => 'Memory Stick')
);
$t->assign('rows', $rows);
echo $t->output('example.template.html');
</pre>
<p><a href="http://www.tinybutstrong.com/">TinyButStrong</a></p>
<p>Uma alternativa ao estilo Smarty de muitos, porém é mais confuso e segue um padrão de nomenclatura bem particular.</p>
<pre name="code" class="html">
 &lt;table &gt;
 &lt;tr&gt;&lt;td&gt;[blk.val;block=tr]&lt;/td&gt;&lt;/tr&gt;
 &lt;/table &gt;
</pre>
<pre name="code" class="php">
$TBS =&#038; new clsTinyButStrong ;
$TBS->LoadTemplate('template.htm') ;
$list = array('X','Y','Z') ;
$TBS->MergeBlock('blk',$list) ;
$TBS->Show();
</pre>
<p><a href="http://dwoo.org/">Dwoo</a></p>
<p>Possui como diferencial um <a href="http://wiki.dwoo.org/index.php/TemplateInheritance">Template Inheritance</a>, o que facilita muito a vida na construção de templates.</p>
<pre name="code" class="html">
 &lt;html&gt;
 &lt;head&gt;
 &lt;title&gt;{block "title"}My site name{/block} &lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
     &lt;h1&gt;{block "page-title"}Default page title{/block} &lt;/h1&gt;
     &lt;div id="content"&gt;
      {block "content"}
        Welcome to my amazing homepage
      {/block}
     &lt;/div&gt;
 &lt;/body&gt;
 &lt;/html&gt;
</pre>
<pre name="code" class="html">
{extends "base.html"}
{block "title"}
Gallery
{/block}
{foreach $images img}
    <img src="{$img.url}" alt="{$img.description}" />
  {/foreach}
</pre>
<pre name="code" class="php">
$dwoo = Dwoo();
$images = array(
    array('url' => 'img1.jpg', 'description' => 'Ferrari'),
    array('url' => 'img2.jpg', 'description' => 'BMW')
);
$params = array();
$params['images'] = $images;
echo $dwoo->get("gallery.tpl", $params);
</pre>
<p><a href="http://www.h2o-template.org/">h2o</a></p>
<p>Baseado no Smarty, <a href="http://www.djangoproject.com/">Django Templates</a> e <a href="http://jinja.pocoo.org/">Jinja</a> (os dois últimos para Python).</p>
<pre name="code" class="html">
 &lt;html&gt;
 &lt;head&gt;
 &lt;title&gt;{{ page.title }}&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
     {{ page.content }}
 &lt;/body&gt;
 &lt;/html&gt;
</pre>
<pre name="code" class="php">
$h2o = new h2o('index.html');
$page = array(
  'title' => 'title of a page',
  'body' => 'Hello world'
);
echo $h2o->render(compact('page'));
</pre>
<p><a href="http://pear.php.net/package/HTML_Template_Flexy/">PEAR Flexy</a></p>
<p>Entre os projetos disponíveis no PEAR (<a href="http://pear.php.net/package/HTML_Template_PHPLIB/">PHPLIB</a>, <a href="http://pear.php.net/package/HTML_Template_Sigma/">Sigma</a> e <a href="http://pear.php.net/package/HTML_Template_IT/">IT</a>) esse é o melhor. </p>
<p>Tem como desvantagem o fato de ter que definir as propriedades da sua classe como public (pelo menos dá para trabalhar com classes), linhas de includes e configurações exageradas (não presentes no exemplo abaixo), e algumas automações que precisam ser bem explicadas senão o programador (usuário) fica doido. Além de ter que codificar muito mais linhas se compararmos com os demais exemplos. </p>
<pre name="code" class="html">
 &lt;html&gt;
 &lt;head&gt;
 &lt;title&gt;{title}&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
    &lt;!-- o valor do input será adicionado em $element['input'] --&gt;
    Input Box: &lt;input name="input" /&gt;
    &lt;ul&gt;
        &lt;!-- isso é o mesmo que foreach ($numbers as $number => $string) --&gt;
        &lt;li flexy:foreach="numbers,number,string" &gt;
            &lt;a href="mypage.html?id={number}"&gt;{string}&lt;/a&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;!-- chamando o método da classe --&gt;
    {someMethod()}
 &lt;/body&gt;
 &lt;/html&gt;
</pre>
<pre name="code" class="php">
class controller_test  {

    var $title;
    var $numbers = array();
    var $elements = array();

    function controller_test() {
        $this->start();
        $this->output();
    }

    function start() {
        $this->title = "Hello World";
        // create an HTML Element for the form element.
        $this->elements['input'] = new HTML_Template_Flexy_Element;
        $this->elements['input']->setValue('Hello');

        for ($i = 1;$i< 5;$i++) {
            $this->numbers[$i] = "Number $i";
        }
    }

    function output() {
        $output = new HTML_Template_Flexy();
        $output->compile("home.html");
        $output->outputObject($this,$this->elements);
    }

    function someMethod() {
        return "Hello From A Method";
    }

}
new controller_test();
</pre>
<p><em>Todos os exemplos a cima foram retirados dos próprios sites dos projetos, sofrendo alterações afim de minimizar as linhas e focar em suas caracterísicas, vantagens e desvantagens.</em></p>
<p>Em meados do ano passado comecei escrever uma engine baseada no <a href="https://javaserverfaces.dev.java.net/">JSF</a>+<a href="https://facelets.dev.java.net/">Facelets</a> (Java) e nesse mês voltei a trabalhar nela e espero que no próximo ano (2011) já tenha uma versão liberada (farei um post sobre).</p>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2010/09/09/php-template-engines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS: Footer always in bottom</title>
		<link>http://rogeriolino.com/2010/06/17/css-footer-always-in-bottom/</link>
		<comments>http://rogeriolino.com/2010/06/17/css-footer-always-in-bottom/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 14:51:50 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[always]]></category>
		<category><![CDATA[baixo]]></category>
		<category><![CDATA[bottom]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[footer]]></category>
		<category><![CDATA[posicao]]></category>
		<category><![CDATA[position]]></category>
		<category><![CDATA[relative]]></category>
		<category><![CDATA[rodape]]></category>
		<category><![CDATA[sempre]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=303</guid>
		<description><![CDATA[<p>É muito comum vermos pessoas procurando saber como deixar um elemento HTML sempre no final da página, mas caso a página seja redimensionada criando rolagem, esse elemento continue no final dela. Ou seja, não apenas colocar o elemento com position fixed.</p> <p>Para tal exemplo vamos precisar de um HTML simples:</p> &#60;html&#62; &#60;head&#62; &#60;/head&#62; &#60;body&#62; &#60;div [...]]]></description>
			<content:encoded><![CDATA[<p>É muito comum vermos pessoas procurando saber como deixar um elemento HTML sempre no final da página, mas caso a página seja redimensionada criando rolagem, esse elemento continue no final dela. Ou seja, não apenas colocar o elemento com position fixed.</p>
<p>Para tal exemplo vamos precisar de um HTML simples:</p>
<pre name="code" class="html">
&lt;html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="page"&gt;
        &lt;div id="content"&gt;
            &lt;h1&gt;Footer always in bottom&lt;/h1&gt;
            &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla aliquet imperdiet justo, quis congue velit egestas quis. Suspendisse ac tellus vitae est ultrices imperdiet eget at dolor. Donec sit amet viverra arcu. Aenean pulvinar vehicula justo, tincidunt congue nisi pharetra eu. Suspendisse potenti. Sed libero quam, lacinia at facilisis eu, egestas sodales dolor. Duis gravida, diam interdum cursus dictum, ligula libero pellentesque lacus, vitae viverra nulla metus id erat. Suspendisse fermentum aliquam hendrerit. Sed vulputate massa ut felis sagittis molestie. Suspendisse facilisis condimentum diam, a hendrerit urna venenatis sit amet. Cras orci diam, aliquam quis fringilla ac, euismod vel orci. Quisque ac pharetra nisi. Quisque et orci ligula. Praesent lacus felis, bibendum ac varius ac, eleifend in nulla. Aliquam sodales porttitor iaculis. Aliquam pretium risus ac neque egestas convallis. Sed dignissim massa ut odio vestibulum gravida ut vel nulla.&lt;/p&gt;
            &lt;p&gt;Sed non lacus in nibh lobortis imperdiet. Aliquam auctor tellus quis elit adipiscing consequat. Ut in elit at orci dapibus gravida interdum eget sapien. Sed lobortis, massa nec aliquet aliquet, nulla mi tincidunt quam, id iaculis turpis nibh interdum leo. Curabitur in lorem et risus ultrices pharetra. Mauris adipiscing eros vitae diam sodales et rutrum velit consequat. Fusce adipiscing congue ultrices. Nullam fermentum ullamcorper urna a malesuada. Sed sit amet congue tortor. Nulla accumsan blandit diam sed feugiat. Morbi lobortis fermentum metus, ac pulvinar dui commodo ut.&lt;/p&gt;
        &lt;/div&gt;
        &lt;div id="footer"&gt;
            &lt;p&gt;footer here&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>E o CSS abaixo:</p>
<pre name="code" class="css">
* {
    padding: 0px;
    margin: 0px;
}

html, body {
    height: 100%;
}

#page {
    min-height: 100%;
    position: relative;
}

#footer {
    width: 100%;
    bottom: 0;
    position: absolute;
}
</pre>
<p>O <a href="http://www17.brinkster.com/chivalrous/exemplos/footer.html" title="Example">exemplo funcionando você confere aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2010/06/17/css-footer-always-in-bottom/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Javascript Game Engine for HTML5 Canvas</title>
		<link>http://rogeriolino.com/2010/05/06/javascript-game-engine-for-html5-canvas/</link>
		<comments>http://rogeriolino.com/2010/05/06/javascript-game-engine-for-html5-canvas/#comments</comments>
		<pubDate>Thu, 06 May 2010 19:04:35 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Jogos]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[scenegraph]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=292</guid>
		<description><![CDATA[<p>Comecei escrever um pequeno projeto para facilitar a criação de jogos em Javascript utilizando HTML5 Canvas para isso. Baseado em <a href="http://en.wikipedia.org/wiki/Scene_graph">scenegraph</a> podendo criar nós dependentes, relativos ao nó pai. Por enquanto a estrutura da engine é composta por:</p> <p> Canvas: para encapsular a tag canvas, pegando automaticamente o context e fornecendo algumas funções a [...]]]></description>
			<content:encoded><![CDATA[<p>Comecei escrever um pequeno projeto para facilitar a criação de jogos em Javascript utilizando HTML5 Canvas para isso. Baseado em <a href="http://en.wikipedia.org/wiki/Scene_graph">scenegraph</a> podendo criar nós dependentes, relativos ao nó pai. Por enquanto a estrutura da engine é composta por:</p>
<blockquote><p>
<strong>Canvas:</strong> para encapsular a tag canvas, pegando automaticamente o context e fornecendo algumas funções a mais.</p>
<p><strong>Game:</strong> o jogo em sí, possui uma ou muitas cenas (Scene). Contém o loop principal para atualizações do canvas. Necessita de uma instância do Canvas.</p>
<p><strong>Scene:</strong> deve ser estendida para criar cenas customizadas, deve implementar o método update(interval).</p>
<p><strong>CanvasNode:</strong> um nó do grafo, possui as coordenadas e ângulo de rotação do elemento no canvas.</p>
<p><strong>CanvasNodeGroup:</strong> um grupo de nós. Estende CanvasNode.</p>
<p><strong>Graphics:</strong> um nó &#8220;printável&#8221;, quem for estendê-lo deve implementar o método draw(). Possui como subclasses: Rectangle, Triangle, Circle, Text, Image2d e Line.</p>
<p><strong>GraphicsGroup:</strong> estende CanvasNodeGroup, possui um grupo de graphics. Scene é um GraphicsGroup.</p>
</blockquote>
<p>Os próximos passos serão a implementação de TileMap, Scene Intro, Menu e botões. Agora é só aguardar até o próximo exemplo.</p>
<p><strong>[update 2010-05-06]</strong><br />
Added mouse and button support.<br />
See example above.<br />
<strong>[/update]</strong></p>
<p><strong>[update 2010-05-06]</strong><br />
Examples in <a href="http://mangame.rogeriolino.com/">http://mangame.rogeriolino.com/</a><br />
<strong>[/update]</strong></p>
<p><strong>[update 2011-11-11]</strong><br />
Source now available in <a href="https://github.com/rogeriolino/mangame" title="Mangame in Github">GitHub</a>!<br />
<strong>[/update]</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2010/05/06/javascript-game-engine-for-html5-canvas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP: Socket Class</title>
		<link>http://rogeriolino.com/2010/04/22/php-socket-class/</link>
		<comments>http://rogeriolino.com/2010/04/22/php-socket-class/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 19:19:03 +0000</pubDate>
		<dc:creator>Rogério Alencar Lino Filho</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[connection]]></category>
		<category><![CDATA[license]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[udp]]></category>

		<guid isPermaLink="false">http://rogeriolino.com/?p=284</guid>
		<description><![CDATA[<p>Muitas linguagens oferecem suporte a <a href="http://en.wikipedia.org/wiki/Internet_socket">Sockets</a>, e com <a href="http://php.net/manual/en/book.sockets.php">PHP</a> não é diferente, porém a falta de orientação a objetos nas funções do PHP pode ser um inconveniente para algumas pessoas. E como eu me incluo entre essas pessoas, quando precisei utilizar sockets em PHP acabei criando um classe para englobar essas funções soltas [...]]]></description>
			<content:encoded><![CDATA[<p>Muitas linguagens oferecem suporte a <a href="http://en.wikipedia.org/wiki/Internet_socket">Sockets</a>, e com <a href="http://php.net/manual/en/book.sockets.php">PHP</a> não é diferente, porém a falta de orientação a objetos nas funções do PHP pode ser um inconveniente para algumas pessoas. E como eu me incluo entre essas pessoas, quando precisei utilizar sockets em PHP acabei criando um classe para englobar essas funções soltas e fornecer tratamento a erros.</p>
<pre name="code" class="php">/**
 * Copyright 2010 Rogerio Alencar Lino Filho
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Socket
 *
 * @author rogeriolino
 */
class Socket {

    private $port     = 3000;
    private $address  = "localhost";
    private $blocking = true;

    private $buffer   = 2048;
    private $backlog  = 5;

    private $type     = SOCK_STREAM;
    private $family   = AF_INET;
    private $protocol = SOL_TCP;

    private $resource;

    /**
     * Socket constructor
     * @param  $resource
     */
    public function  __construct($resource = null) {
        if ($resource == null) {
            $this-&gt;resource = socket_create($this-&gt;family, $this-&gt;type, $this-&gt;protocol);
        } else {
            $this-&gt;resource = $resource;
        }
    }

    /**
     * Returns the socket port
     * @return int
     */
    public function get_port() {
        return $this-&gt;port;
    }

    /**
     * Define the socket port
     * @param int $port
     */
    public function set_port($port) {
        $this-&gt;port = $port;
    }

    /**
     *
     * @return string
     */
    public function get_address() {
        return $this-&gt;address;
    }

    public function set_address($address) {
        $this-&gt;address = $address;
    }

    /**
     * Returns if the socket is blocking mode
     * @return boolean
     */
    public function is_blocking() {
        return $this-&gt;blocking;
    }

    /**
     * Defines whether the socket is blocking or nonblocking mode
     * @param boolean $block
     */
    public function set_blocking($blocking) {
        $this-&gt;blocking = ($blocking == true);
        $this-&gt;update_blocking_mode();
    }

    /**
     * Returns the socket communication type
     * @return int
     */
    public function get_type() {
        return $this-&gt;type;
    }

    /**
     * Define the socket communication type
     * @param int $type
     */
    public function set_type($type) {
        if ($type == SOCK_STREAM || $type == SOCK_DGRAM || $type == SOCK_SEQPACKET || $type == SOCK_RAW || $type == SOCK_RDM) {
            $this-&gt;type = $type;
        } else {
            throw new Socket_Exception("Invalid socket communication type");
        }
    }

    /**
     * Returns the socket protocol family
     * @return int
     */
    public function get_family() {
        return $this-&gt;family;
    }

    /**
     * Define the socket protocol family
     * @param int $family
     */
    public function set_family($family) {
        if ($family == AF_INET || $family == AF_INET6 || $family == AF_UNIX) {
            $this-&gt;family = $family;
        } else {
            throw new Socket_Exception("Invalid socket protocol family");
        }
    }

    /**
     * Returns the socket protocol
     * @return int
     */
    public function get_protocol() {
        return $this-&gt;protocol;
    }

    /**
     * Define the socket protocol, must be compatible whit the protocol family
     * @param int $protocol
     */
    public function set_protocol($protocol) {
        if ($protocol == SOL_TCP || $protocol == SOL_UDP || $protocol == SOL_SOCKET) {
            $this-&gt;protocol = $protocol;
        } else {
            throw new Socket_Exception("Invalid socket protocol");
        }
    }

    /**
     * Binds to a socket
     * @throws Socket_Exception
     */
    public function bind() {
        if (socket_bind($this-&gt;resource, $this-&gt;address, $this-&gt;port) === false) {
            throw new Socket_Exception("Socket bind failed: " . $this-&gt;error());
        }
    }

    /**
     * Listens for a connection on a socket
     * @throws Socket_Exception
     */
    public function listen() {
        if (socket_listen($this-&gt;resource, $this-&gt;backlog) === false) {
            throw new Socket_Exception("Socket listen failed: " . $this-&gt;error());
        }
    }

    /**
     * Accepts a connection
     * @throws Socket_Exception
     * @return Socket
     */
    public function accept() {
        $sock = socket_accept($this-&gt;resource);
        if ($sock === false) {
            throw new Socket_Exception("Socket accept failed: " . $this-&gt;error());
        }
        return new Socket($sock);
    }

    /**
     * Reads data from the connected socket
     * @return string
     */
    public function read() {
        $data = "";
        while (($m = socket_read($this-&gt;resource, $this-&gt;buffer)) != "") {
            $data .= $m;
        }
        return $data;
    }

    /**
     * Write the data to connected socket
     * @param string $message
     */
    public function write($data) {
        socket_write($this-&gt;resource, $data, strlen($data));
    }

    /**
     * Initiates a connection on a socket
     * @throws Socket_Exception
     * @return boolean
     */
    public function connect() {
        try {
            return socket_connect($this-&gt;resource, $this-&gt;address, $this-&gt;port);
        } catch (Socket_Exception $e) {
            return false;
        }
    }

    /**
     * Close the socket connection
     */
    public function close() {
        socket_close($this-&gt;resource);
    }

    private function update_blocking_mode() {
        if ($this-&gt;blocking) {
            socket_set_block($this-&gt;resource);
        } else {
            socket_set_nonblock($this-&gt;resource);
        }
    }

    private function error() {
        return socket_strerror(socket_last_error($this-&gt;resource));
    }

}
</pre>
<p>Classe para as exceções:</p>
<pre name="code" class="php">/**
 * Copyright 2010 Rogerio Alencar Lino Filho
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Socket_Exception
 *
 * @author rogeriolino
 */
class Socket_Exception extends Exception {

    public function  __construct($message, $code = 0, $previous = null) {
        $this-&gt;message = $message;
        $this-&gt;code = $code;
        $this-&gt;message = $previous;
    }

}
</pre>
<p>Espero que seja de bom aproveito.</p>
]]></content:encoded>
			<wfw:commentRss>http://rogeriolino.com/2010/04/22/php-socket-class/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

