<?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>Cauan Cabral - Geek</title>
	<atom:link href="http://cauancabral.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://cauancabral.net</link>
	<description>Geek, nerd e apaixonado por tecnologia</description>
	<lastBuildDate>Fri, 13 Aug 2010 20:45:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>Dica Rápida &#8211; Evitando problemas com uso de jQuery e imagens</title>
		<link>http://cauancabral.net/2010/08/13/dica-rapida-evitando-problemas-com-uso-de-jquery-e-imagens/</link>
		<comments>http://cauancabral.net/2010/08/13/dica-rapida-evitando-problemas-com-uso-de-jquery-e-imagens/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 20:45:09 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[dica]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=243</guid>
		<description><![CDATA[Algumas vezes precisamos recuperar, em tempo de execução, o tamanho de uma determinada imagem para aplica-la corretamente ao layout da página, porém essa verificação pode acontecer antes da hora, o que geraria erros inesperados. Todo mundo que trabalha com a &#8230; <a href="http://cauancabral.net/2010/08/13/dica-rapida-evitando-problemas-com-uso-de-jquery-e-imagens/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Algumas vezes precisamos recuperar, em tempo de execução, o tamanho de uma determinada imagem para aplica-la corretamente ao layout da página, porém essa verificação pode acontecer antes da hora, o que geraria erros inesperados.</p>
<p>Todo mundo que trabalha com a biblioteca jQuery conhece a chamada:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">//seu código javascript</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ela diz ao browser para executar o bloco interno somente quando o <strong>DOM</strong> do seu documento tiver sido totalmente carregado, isso permite que ele faça o <em>parser</em> de seu documento utilizando os seletores sem esquecer de nenhum item. Porém quando carregamos estruturas externas ao DOM, como uma imagem, não temos garantia de que o código dentro do bloco anterior será executado quando a imagem já tiver sido carregada.<br />
Dessa maneira, caso você precise de informações sobre a imagem, seu script falhará.</p>
<p>Para contornar isso, podemos utilizar uma outra chamada, que é disparada somente quando <strong>TODO</strong> o documento tiver sido carregado:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">//seu código javascript</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>As duas diferenças, além do comportamento são:</p>
<ol>
<li>Saí o &#8216;seletor&#8217; <strong>document</strong> para a entrada do <strong>window</strong>;</li>
<li>Saí o evento <strong>ready</strong> para a entrada do <strong>load</strong>;</li>
</ol>
<p>A primeira alteração ocorre por conta da segunda, já que o evento <em>load</em> não pode ser associado a um <em>document</em>.</p>
<p>Com essa pequena alteração você garante que seu script rodará apenas quando todo o documento tiver sido carregado &#8211; o que é essencial em algumas situações, como a citada anteriormente, porém dispensável na maioria das vezes.</p>
<p>Fonte: <a title="documentação do jQuery" href="http://api.jquery.com/load-event/" onclick="pageTracker._trackPageview('/outgoing/api.jquery.com/load-event/?referer=');">http://api.jquery.com/load-event/</a></p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP &#8211; Personalizando as páginas de erros</a></li><li><a href="http://cauancabral.net/2008/10/22/usar-google-analytics-para-paginas-em-flash-ou-ajax-e-mole/" rel="bookmark" class="crp_title">Usar Google Analytics para páginas em Flash ou Ajax? É mole&#8230;</a></li><li><a href="http://cauancabral.net/2009/01/14/ajax-com-prototype/" rel="bookmark" class="crp_title">AJAX com Prototype</a></li><li><a href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/" rel="bookmark" class="crp_title">[Comitiva] Como utilizar controle de permissão no sistema</a></li><li><a href="http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP 1.3, link com prefixo</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/08/13/dica-rapida-evitando-problemas-com-uso-de-jquery-e-imagens/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Comitiva] Como utilizar controle de permissão no sistema &#8211; quase tudo mudou</title>
		<link>http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/</link>
		<comments>http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 02:12:01 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[comitiva]]></category>
		<category><![CDATA[phpms]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=239</guid>
		<description><![CDATA[No último post falei um pouco sobre o sistema de permissões que implantamos no Comitiva. Acontece que após a adição de uma nova funcionalidade (submissão de trabalhos) aquele sistema de permissão começou a ficar ineficiente, e apesar de eu ter &#8230; <a href="http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>No <a href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/" title="[Comitiva] Como utilizar controle de permissão no sistema">último post</a> falei um pouco sobre o sistema de permissões que implantamos no Comitiva.</p>
<p>Acontece que após a adição de uma nova funcionalidade (submissão de trabalhos) aquele sistema de permissão começou a ficar ineficiente, e apesar de <a href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/comment-page-1/#comment-298">eu ter dito</a> nos comentários que o ideal era implementar o <a href="http://api.cakephp.org/class/acl-component" onclick="pageTracker._trackPageview('/outgoing/api.cakephp.org/class/acl-component?referer=');">Acl</a> para este controle no sistema, acabei por implementar a <a href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/comment-page-1/#comment-297">solução sugerida</a> pelo grande <a href="http://twitter.com/begnini" onclick="pageTracker._trackPageview('/outgoing/twitter.com/begnini?referer=');">Humberto</a> &#8211; que, tomando como ponto inicial o que tínhamos, era o jeito mais simples de solucionar os problemas.</p>
<p><strong>Então o que mudou?</strong></p>
<ul>
<li>Os usuários não possuem mais um &#8220;tipo&#8221;, agora eles pertencem a &#8220;grupos&#8221; (um ou mais);</li>
<li>A verificação de permissão é feita na classe AppController, de forma genérica, o que elimina a necessidade de reescrever a função de autorização a cada controlador;</li>
<li>Os grupos que um usuário pertence ficam definidos em um campo &#8220;groups&#8221;, do tipo varchar e são guardados codificados no formato <em>json</em></li>
<li>Defini um método protegido no AppController para verificar se o usuário logado pertence a um grupo qualquer, facilitando essa operação quando necessário. (o método chama-se <strong><a href="http://github.com/CauanCabral/Comitiva/blob/master/app_controller.php#L246" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Comitiva/blob/master/app_controller.php_L246?referer=');">AppController::__checkGroup($string)</a></strong> )</li>
</ul>
<p><strong>O que não mudou?</strong></p>
<ul>
<li>As ações continuam tendo como prefixo o grupo que pode acessa-la, sendo assim, a ação <em>ProposalsController::participant_add()</em> está disponível a todos os usuários que pertençam ao grupo &#8220;participant&#8221;</li>
<li>Todos os usuários registrados pertencem inicialmente ao grupo &#8216;participant&#8217;, porém podem vir a pertencer a outros grupos posteriormente (em adição ao grupo &#8216;participant&#8217;)</li>
<li>Continua sendo muito fácil saber se o  usuário logado pode ou não efetuar uma ação, basta usar o método supracitado <em>__checkGroup.</em></li>
</ul>
<p>Exemplo de como verificar se o usuário é administrador</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>__checkGroup<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'O usuário logado é administrador'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'O usuário logado não é administrador'</span><span style="color: #339933;">;</span></pre></div></div>

<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/" rel="bookmark" class="crp_title">[Comitiva] Como utilizar controle de permissão no sistema</a></li><li><a href="http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP 1.3, link com prefixo</a></li><li><a href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/" rel="bookmark" class="crp_title">Obrigado pelos peixes SVN</a></li><li><a href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/" rel="bookmark" class="crp_title">Comitiva &#8211; Cuide bem do seu evento</a></li><li><a href="http://cauancabral.net/2008/01/03/validacao-de-dados-em-php5-parte-2/" rel="bookmark" class="crp_title">Validação de dados em PHP5 &#8211; Parte 2</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Comitiva] Como utilizar controle de permissão no sistema</title>
		<link>http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/</link>
		<comments>http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 16:14:10 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[comitiva]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=235</guid>
		<description><![CDATA[Como escrevi anteriormente, o PHPMS mantém um sistema para gerenciar eventos &#8211; desde a divulgação de informações, cadastro de eventos, inscrições, pagamentos, envio de mensagens para inscritos e check-in. Mas o objetivo deste post não é dizer o que já &#8230; <a href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Como <a title="Comitiva - Cuide bem do seu evento" href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/">escrevi anteriormente</a>, o PHPMS mantém um sistema para gerenciar eventos &#8211; desde a divulgação de informações, cadastro de eventos, inscrições, pagamentos, envio de mensagens para inscritos e check-in.</p>
<p>Mas o objetivo deste post não é dizer o que já foi dito, quero iniciar uma série de posts onde vou explicar o funcionamento de alguns recursos dentro do <em><a href="http://github.com/CauanCabral/Comitiva" title="Pegue uma cópia do Comitiva e contribua" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Comitiva?referer=');">Comitiva</a></em>, convidando todos os desenvolvedores a opinar sobre implementação e contribuir com o projeto.</p>
<p>O assunto de hoje é controle de acesso, então vamos ao que interessa.</p>
<p><strong>Como funciona o controle de acesso no Comitiva?</strong></p>
<p>Utilizamos o componente <em>Auth</em> do CakePHP para cuidar da autenticação (efetuar login, verificar se o usuário está logado e efetuar logout).<br />
Mas precisávamos ir um pouco além da configuração básica, definindo diferentes opções para diferentes tipos de usuários. Para isso, consideramos duas opções iniciais: usar também o <strong>Acl</strong> <em>Behavior</em> ou ficar apenas com o AuthComponent e criar diferentes <em>actions</em> para diferentes tipos de usuários.</p>
<p>Como possuímos apenas dois tipos de usuários (<em>admin</em> e <em>participant</em>) decidimos pela que seria mais simples inicialmente &#8211; mesmo sabendo que a manutenção no futuro poderia ser mais complicada &#8211; que foi criar diferentes <em>actions</em> para os tipos de usuários.</p>
<p>Para criar essa funcionalidade, definimos inicialmente um prefixo para cada tipo de usuário (prefixos &#8216;<em>admin</em>&#8216; e &#8216;<em>participant</em>&#8216;). Em seguida configuramos o <strong>AuthComponent</strong> desta maneira (código extraído do <em>AppController</em>):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Configure AuthComponent</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Auth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">authorize</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'controller'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prefix'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prefix'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> Configure<span style="color: #339933;">::</span><span style="color: #004000;">read</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Routing.prefixes'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// all non-prefixed actions are allowed</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Auth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allow</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'*'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ou seja, toda ação que não tiver prefixo ou o prefixo não estiver definido nas configurações de rota serão públicas (assim é possível, por exemplo, deixar uma página com instruções acessível à qualquer usuário).</p>
<p>Mas como fica essa verificação de tipos no controlador? Como definimos o método de autorização do Auth como &#8216;controller&#8217;, precisamos definir em todos os controladores o método <strong>isAuthorized</strong> que deve retornar <em>true</em> quando o acesso é aprovado e <em>false</em> caso contrário.<br />
Seguindo a ideia de que cada tipo de usuário possui um prefixo próprio nas ações, nosso método <em>isAuthorized</em> fica desta forma:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">userLogged</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">TRUE</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prefix'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> User<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span></pre></div></div>

<p>Onde o atributo <em>$this->userLogged</em> pertence a classe <em>AppController</em> e sua função é reduzir chamada ao método <em>$Auth->login()</em> e na segunda parte da condição temos uma comparação entre o prefixo da url acessada e o tipo do usuário &#8211; se ambos forem iguais, então o acesso está liberado.</p>
<p>Por fim, devemos criar nossas ações para cada tipo de usuário, onde o prefixo será usado para validar o acesso à aquela ação, veja o exemplo da ação &#8220;listar pagamentos&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// ação exclusiva para admin - tem acesso aos pagamentos de todos os outros usuários</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> admin_index<span style="color: #009900;">&#40;</span><span style="color: #000088;">$event_id</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Subscription</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">recursive</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">is_numeric</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$event_id</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginate</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'conditions'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
				<span style="color: #0000ff;">'event_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$event_id</span>
			<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">compact</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'event_id'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'subscriptions'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// ação exclusiva para participant - tem acesso somente aos próprios pagamentos</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> participant_index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Subscription</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">recursive</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'subscriptions'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginate</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'user_id'</span> <span style="color: #339933;">=&gt;</span> User<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como podem ver, isso permite a criação de diferentes regras de negócio para os diferentes tipos de usuários e embora aumente a quantidade de código &#8220;redundante&#8221; por repetir alguns procedimentos para todos os tipos de usuários, a leitura e entendimento do código é facilitada &#8211; basta ver o prefixo do método (ação) para saber quem terá acesso a ele.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP 1.3, link com prefixo</a></li><li><a href="http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/" rel="bookmark" class="crp_title">[Comitiva] Como utilizar controle de permissão no sistema &#8211; quase tudo mudou</a></li><li><a href="http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP &#8211; Personalizando as páginas de erros</a></li><li><a href="http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/" rel="bookmark" class="crp_title">CakePHP &#8211; Dúvidas Comuns #2</a></li><li><a href="http://cauancabral.net/2008/01/03/validacao-de-dados-em-php5-parte-2/" rel="bookmark" class="crp_title">Validação de dados em PHP5 &#8211; Parte 2</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Delivery Fácil &#8211; Pedir comida na internet é muito fácil</title>
		<link>http://cauancabral.net/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/</link>
		<comments>http://cauancabral.net/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 23:30:25 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[Projetos]]></category>
		<category><![CDATA[noticias]]></category>
		<category><![CDATA[deliveryfacil.net]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=229</guid>
		<description><![CDATA[Há mais ou menos três semanas foi lançado um novo serviço para o pessoal de Campo Grande/MS, o Delivery Fácil. Através dele você pode conferir o cardápio de diversos estabelecimentos em Campo Grande que fazem entrega de comida e pedir &#8230; <a href="http://cauancabral.net/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Há mais ou menos três semanas foi lançado um novo serviço para o pessoal de Campo Grande/MS, o <a title="Delivery Fácil - Pedir comida na internet é muito fácil" href="http://deliveryfacil.net" onclick="pageTracker._trackPageview('/outgoing/deliveryfacil.net?referer=');">Delivery Fácil</a>. Através dele você pode conferir o cardápio de diversos estabelecimentos em Campo Grande que fazem entrega de comida e pedir seu prato pelo próprio site &#8211; simples assim.<br />
Você não se preocupa com telefone ocupado, não precisa ficar perguntando o que tem no cardápio, quanto custa cada prato nem se atendem em sua região.<br />
Além disso, todo pedido realizado pelo sistema te da pontos para trocar por prêmios.</p>
<p style="text-align: left;">No lado do restaurante, o serviço cria mais um canal de venda sem a necessidade de se investir um grande volume de dinheiro para criar um e-commerce.</p>
<p style="text-align: left;">O serviço é resultado de uma parceria entre a <a title="Radig - Soluções em TI" href="http://radig.com.br" onclick="pageTracker._trackPageview('/outgoing/radig.com.br?referer=');">Radig (onde tenho prazer em trabalhar)</a> e dois grandes amigos, Samuel e Habib.</p>
<p style="text-align: left;"><a title="Delivery Fácil - Pedir comida na internet é muito fácil" href="http://deliveryfacil.net" onclick="pageTracker._trackPageview('/outgoing/deliveryfacil.net?referer=');"><img class="aligncenter size-medium wp-image-231" title="Delivery Fácil - Pedir pela internet é muito fácil" src="http://cauancabral.net/wp-content/uploads/2010/06/banner_deliveryfacil.png" alt="Banner de divulgação do Delivery Fácil" width="600" height="417" /></a><a href="http://deliveryfacil.net" onclick="pageTracker._trackPageview('/outgoing/deliveryfacil.net?referer=');">Faça uma visita</a>, cadastre-se e peça sua comida preferida com todo o conforto que a internet lhe oferece.</p>
<p style="text-align: left;">Não deixe de seguir o Delivery Fácil no twitter para acompanhar as novidades e promoções que realizarmos: <a title="Twitter do Delivery Fácil" href="http://twitter.com/deliveryfacil" onclick="pageTracker._trackPageview('/outgoing/twitter.com/deliveryfacil?referer=');">@deliveryfacil</a></p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2008/07/16/software-freedom-day-08/" rel="bookmark" class="crp_title">Software Freedom Day 08</a></li><li><a href="http://cauancabral.net/2009/03/29/fisl-10-eu-vou/" rel="bookmark" class="crp_title">FISL 10 &#8211; Eu vou!</a></li><li><a href="http://cauancabral.net/2009/01/13/25-erros-mais-graves/" rel="bookmark" class="crp_title">25 erros de programação mais graves</a></li><li><a href="http://cauancabral.net/2008/11/02/hoje-tem-final-da-f1-vai-la-massa/" rel="bookmark" class="crp_title">Hoje tem final da F1&#8230; vai lá Massa!</a></li><li><a href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Obrigado pelos peixes SVN</title>
		<link>http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/</link>
		<comments>http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 13:08:59 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[CakePHP-1.3]]></category>
		<category><![CDATA[comitiva]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[swiftmailer]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=220</guid>
		<description><![CDATA[Há alguns anos descobri o fantástico mundo do controle de versão, naquele momento me perguntei &#8220;como vivi sem isso até hoje?&#8221;. Dali em diante podia alterar arquivos sem medo, qualquer erro era só voltar uma versão e tudo certo. Trabalhar &#8230; <a href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Há alguns anos descobri o fantástico mundo do controle de versão, naquele momento me perguntei &#8220;como vivi sem isso até hoje?&#8221;. Dali em diante podia alterar arquivos sem medo, qualquer erro era só voltar uma versão e tudo certo. Trabalhar em equipe finalmente se tornava algo fácil, graças ao <a title="Página do Subversion SCM" href="http://subversion.apache.org/" onclick="pageTracker._trackPageview('/outgoing/subversion.apache.org/?referer=');">Subversion &#8211; SVN</a>.</p>
<p>Porém os anos passaram e algumas coisas começaram a fazer falta: como faço quando estou desenvolvendo algo grande, fico sem commitar até ter algo estável/usável? crio um branch para isso? mas e depois para unir os branches, e os conflitos? além disso, se só eu estou trabalhando em cima disso, porque commitar para todo mundo algo não pronto?</p>
<p>Foi aí que descobri o <a title="Página com documentação do Git SCM" href="http://git-scm.com/" onclick="pageTracker._trackPageview('/outgoing/git-scm.com/?referer=');">GIT</a>, um sistema de controle de versão distribuído, open source e gratuito. Ok, ele é gratuito e open source, mas isso não é motivo suficiente. Como disse, ele é um sistema de controle de versão distribuído, isso quer dizer que cada um que tem uma cópia do repositório tem de fato uma cópia dele, e pode servir outras pessoas, ver histórico, tudo localmente.</p>
<p>Então de quebra, ele resolve o problema de ter de criar um branch para desenvolver uma funcionalidade que só eu vou mexer, posso controlar cada alteração minha localmente, e quando quiser &#8211; se quiser &#8211; posso sincronizar meu repositório local com um outro central (que eu considero central, já que essa figura não existe no GIT). E mais, ele é <strong>MUITO RÁPIDO</strong>. Acho que para ajudar na argumentação de que é rápido basta dizer que ele foi feito por alguns desenvolvedores do Kernel Linux, e gerencia todo o código trabalhado por eles &#8211; e não é pouca coisa.</p>
<p>Ainda estou caminhando com o <a href="http://git-scm.com/" onclick="pageTracker._trackPageview('/outgoing/git-scm.com/?referer=');">GIT</a>, tenho aproveitado minha ânsia de aprende-lo junto com a de contribuir com softwares open source para criar e disponibilizar projetos no <a title="Plataforma para centralização de repositórios Git" href="http://github.com" onclick="pageTracker._trackPageview('/outgoing/github.com?referer=');">GitHub</a>.</p>
<p>A grande maioria dos projetos é voltado ao <a title="CakePHP Framework" href="http://cakephp.org" onclick="pageTracker._trackPageview('/outgoing/cakephp.org?referer=');">CakePHP</a>, mas há outras coisas também. Alguns projetos que podem interessar são:</p>
<ul>
<li><a title="Sistema de gerenciamento de eventos escrito em CakePHP" href="http://github.com/CauanCabral/Comitiva" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Comitiva?referer=');">Comitiva</a> &#8211; Sistema construído em CakePHP 1.3 para gerenciamento de eventos;</li>
<li><a title="Plugin que serve de wrapper para utilização da biblioteca SwiftMailer dentro do CakePHP" href="http://github.com/CauanCabral/Mailer" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Mailer?referer=');">Plugin Mailer</a> &#8211; Um plugin que ajuda na utilização da biblioteca PHP <a title="Página da lib SwiftMailer" href="http://swiftmailer.org" onclick="pageTracker._trackPageview('/outgoing/swiftmailer.org?referer=');">SwiftMailer</a> dentro do CakePHP;</li>
<li><a title="Behavior para transformação de dados" href="http://github.com/CauanCabral/CakePHP-Locale-Behavior" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/CakePHP-Locale-Behavior?referer=');">Behavior Locale</a> &#8211; Um behavior para transformar dados vindo do usuário de seu padrão local para um padrão internacional (de banco de dados)</li>
<li><a title="Classes de apoio em PHP" href="http://github.com/CauanCabral/libs" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/libs?referer=');">Libs</a> &#8211; uma coleção de pequenos scripts PHP que fui fazendo ao longo da vida. Há coisas boas, coisas úteis, coisas não tão úteis, mas tudo pode ser usado ao menos como ponto inicial para uma implementação mais elaborada.</li>
</ul>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/" rel="bookmark" class="crp_title">Comitiva &#8211; Cuide bem do seu evento</a></li><li><a href="http://cauancabral.net/2008/01/17/sentiram-falta/" rel="bookmark" class="crp_title">Sentiram falta?</a></li><li><a href="http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/" rel="bookmark" class="crp_title">CakePHP 1.3 quase assado</a></li><li><a href="http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/" rel="bookmark" class="crp_title">[Comitiva] Como utilizar controle de permissão no sistema &#8211; quase tudo mudou</a></li><li><a href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/" rel="bookmark" class="crp_title">[Comitiva] Como utilizar controle de permissão no sistema</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dica Rápida &#8211; CakePHP 1.3, link com prefixo</title>
		<link>http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/</link>
		<comments>http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 03:11:40 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[CakePHP-1.3]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[prefixos]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=217</guid>
		<description><![CDATA[Quando estávamos criando o Comitiva, decidimos utilizar o novo recurso do CakePHP que permite definir diferentes prefixos. Em nosso caso, cada prefixo representa um tipo de usuário. A ideia ia bem, até termos que criar um link explicitando uma rota. &#8230; <a href="http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Quando estávamos criando o Comitiva, decidimos utilizar o novo recurso do CakePHP que permite definir diferentes prefixos.</p>
<p>Em nosso caso, cada prefixo representa um tipo de usuário.</p>
<p>A ideia ia bem, até termos que criar um link explicitando uma rota.</p>
<p>Por padrão, a classe Router reconhece o prefixo em uso no momento e adiciona ele na url que você está construindo, desta forma se eu estiver acessando um endereço http://comitiva/participant/events  e quiser criar um link para a url http://comitiva/admin/users  eu terei um problema (não documentado): a segunda url ficaria http://comitiva/partipant/users , por causa da página que está ativa no momento.</p>
<p>A solução foi me apresentada no IRC, canal #cakephp-pt pelo padeiro <strong>Danielpk</strong>: adicione um índice com o nome do prefixo associado ao valor TRUE no array de endereço.  Fica algo assim:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Html</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Administre os usuários'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'users'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'index'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'admin'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// ou, caso queira forçar o prefixo participant</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Html</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Veja os usuários'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'users'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'index'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'participant'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/" rel="bookmark" class="crp_title">[Comitiva] Como utilizar controle de permissão no sistema</a></li><li><a href="http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/" rel="bookmark" class="crp_title">[Comitiva] Como utilizar controle de permissão no sistema &#8211; quase tudo mudou</a></li><li><a href="http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP &#8211; Personalizando as páginas de erros</a></li><li><a href="http://cauancabral.net/2010/01/27/dica-rapida/" rel="bookmark" class="crp_title">Dica rápida</a></li><li><a href="http://cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/" rel="bookmark" class="crp_title">Valida&#231;&#227;o de dados em PHP5 &#8211; final</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comitiva &#8211; Cuide bem do seu evento</title>
		<link>http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/</link>
		<comments>http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 02:48:18 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[CakePHP-1.3]]></category>
		<category><![CDATA[comitiva]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=215</guid>
		<description><![CDATA[Na última semana o PHPMS realizou seu 3º Workshop, que mais uma vez, foi um sucesso. Como comentei no post anterior, dessa vez minha participação foi focada em um ponto: criar uma solução para gerenciar as inscrições do evento. Dessa &#8230; <a href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Na última semana o <a title="Grupo de Desenvolvedores PHP de MS" href="http://phpms.org" onclick="pageTracker._trackPageview('/outgoing/phpms.org?referer=');">PHPMS</a> realizou seu <a title="3º Workshop promovido pelo PHPMS" href="http://phpms.org/workshops/19-workshops/225-3d-workshop-do-phpms-inscricoes-abertas" onclick="pageTracker._trackPageview('/outgoing/phpms.org/workshops/19-workshops/225-3d-workshop-do-phpms-inscricoes-abertas?referer=');">3º Workshop</a>, que mais uma vez, foi um sucesso.</p>
<p>Como comentei no post anterior, dessa vez minha participação foi focada em um ponto: criar uma solução para gerenciar as inscrições do evento.</p>
<p>Dessa necessidade surgiu o <a title="Casa do Comitiva" href="http://phpms.lighthouseapp.com/projects/49894-comitiva/overview" onclick="pageTracker._trackPageview('/outgoing/phpms.lighthouseapp.com/projects/49894-comitiva/overview?referer=');">Comitiva</a>, um sistema de gerenciamento de eventos, que nasceu a pouco e já passou pela sua primeira prova de teste (o próprio workshop).</p>
<p>No momento ele pode ser usado para cadastrar um evento, permitir que usuários se cadastrem e se inscrevam nos eventos cadastrados, mas vários outros recursos já estão em andamento.</p>
<p>A parte boa é que o sistema é livre &#8211; sim, open source, é gratuito e feito em <a title="CakePHP home page" href="http://www.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/www.cakephp.org?referer=');">CakePHP</a> 1.3. Estamos utilizando o <a title="Baixe o código e contribua com ele por aqui" href="http://github.com/CauanCabral/Comitiva" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Comitiva?referer=');">Github</a> para gerenciar o código e hoje criei uma conta no <a title="Reporte bugs e sugira recursos aqui!" href="http://phpms.lighthouseapp.com/projects/49894-comitiva/overview" onclick="pageTracker._trackPageview('/outgoing/phpms.lighthouseapp.com/projects/49894-comitiva/overview?referer=');">LighthouseApp</a> para gerenciar as tarefas. Aliás, queria agradecer e recomendar ambos os serviços que suportam, sem custos, projetos open source. Valeu =]</p>
<p>Veja um demo na versão instalada para o PHPMS: <a title="Gerenciamento de eventos do PHPMS" href="http://comitiva.phpms.org" onclick="pageTracker._trackPageview('/outgoing/comitiva.phpms.org?referer=');">http://comitiva.phpms.org</a></p>
<p>Bom, como uma andorinha só não faz verão, o Comitiva contou com alguns colaboradores/apoiadores que gostaria de citar e agradecer aqui:</p>
<p><a title="Blog do José Agripino Duarte" href="http://agripinoduarte.radig.com.br/" onclick="pageTracker._trackPageview('/outgoing/agripinoduarte.radig.com.br/?referer=');">Zé Agripino</a>: fez boa parte do trabalho sujo, hehehe. Criar as views, traduzir textos, corrigir bugs. Ajudou em todo o sistema, é O cara;<br />
<a title="linkei o currículo, nerd sem blog é foda" href="http://br.linkedin.com/in/felipevargasrigo/pt" onclick="pageTracker._trackPageview('/outgoing/br.linkedin.com/in/felipevargasrigo/pt?referer=');">Felipe V. Rigo</a>: começando a trabalhar com CakePHP agora, apanhou um pouco para conseguir rodar o sistema em sua máquina, mas graças a isso e sua persistência descobrimos e corrigimos vários bugs do sistema;<br />
<a title="Blog do Zehzinho" href="http://www.josericardo.eti.br/" onclick="pageTracker._trackPageview('/outgoing/www.josericardo.eti.br/?referer=');">José Ricardo</a>: estava ocupado no inicio do projeto, porém após o workshop ficou animadão e já fez algumas contribuições importantes, como a configuração do Migrations para o sistema;<br />
<a title="Blog do Bruno Porkaria" href="http://porkaria.com.br" onclick="pageTracker._trackPageview('/outgoing/porkaria.com.br?referer=');">Bruno Porkaria</a>: também estava bem corrido e cuidando de outras coisas do workshop, mas testou bastante o sistema e teve a paciência de reportar problemas e sugestões sempre que estas apareciam.</p>
<p>É isso aí, espero trazer mais novidades em breve, principalmente sobre o projeto =]</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2010/03/20/3%c2%ba-workshop-do-phpms/" rel="bookmark" class="crp_title">3º Workshop do PHPMS</a></li><li><a href="http://cauancabral.net/2009/07/11/1%c2%ba-workshop-phpms-php-extremo-sucesso/" rel="bookmark" class="crp_title">1º Workshop PHPMS &#8211; PHP Extremo, SUCESSO</a></li><li><a href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/" rel="bookmark" class="crp_title">Obrigado pelos peixes SVN</a></li><li><a href="http://cauancabral.net/2009/09/24/2%c2%ba-workshop-phpms/" rel="bookmark" class="crp_title">2º Workshop PHPMS</a></li><li><a href="http://cauancabral.net/2009/06/14/workshop-php-extremo/" rel="bookmark" class="crp_title">Workshop PHP Extremo</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>3º Workshop do PHPMS</title>
		<link>http://cauancabral.net/2010/03/20/3%c2%ba-workshop-do-phpms/</link>
		<comments>http://cauancabral.net/2010/03/20/3%c2%ba-workshop-do-phpms/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 19:18:34 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[phpms]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=212</guid>
		<description><![CDATA[Tenho dado uma pausa nos posts aqui do blog por 3 motivos: estou na reta final da faculdade, a Radig esta indo muito bem obrigado e o PHPMS esta organizando seu 3º Workshop. E este último é motivo para este &#8230; <a href="http://cauancabral.net/2010/03/20/3%c2%ba-workshop-do-phpms/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tenho dado uma pausa nos posts aqui do blog por 3 motivos: estou na reta final da <a title="Faculdade de Computação / UFMS" href="http://facom.ufms.br" onclick="pageTracker._trackPageview('/outgoing/facom.ufms.br?referer=');">faculdade</a>, a <a title="Radig Soluções em TI" href="http://www.radig.com.br" onclick="pageTracker._trackPageview('/outgoing/www.radig.com.br?referer=');">Radig</a> esta indo muito bem obrigado e o <a title="Página do Grupo de Desenvolvedores PHP de Mato Grosso do Sul" href="http://phpms.org" onclick="pageTracker._trackPageview('/outgoing/phpms.org?referer=');">PHPMS</a> esta organizando seu <a title="3º Workshop do PHPMS" href="http://phpms.org/workshop" onclick="pageTracker._trackPageview('/outgoing/phpms.org/workshop?referer=');">3º Workshop</a>. E este último é motivo para este post.</p>
<p>Para quem me acompanha há algum tempo, sabe que participo do grupo e sempre ajudo de alguma forma no evento, dessa vez não seria diferente.<br />
O evento terá 4 excelentes palestras, sendo duas de nossa celebridade convidada,<a href="http://br.linkedin.com/in/guilhermeblanco" onclick="pageTracker._trackPageview('/outgoing/br.linkedin.com/in/guilhermeblanco?referer=');"> Guilherme Blanco</a>.</p>
<p>Tenho ajudado bastante no desenvolvimento de uma ferramenta para a gestão de eventos do grupo, que terá seu código liberado tão breve quanto fique pronto (ou seja, sem data, mas não deve demorar muito, hehehe). O nome dele é <a href="http://comitiva.phpms.org" onclick="pageTracker._trackPageview('/outgoing/comitiva.phpms.org?referer=');">Comitiva</a>.</p>
<p><strong>Confira abaixo o release oficial:</strong></p>
<p>O 3° Workshop do PHPMS será realizado no dia 27 de março no <a href="http://www.ms.senac.br/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.ms.senac.br/?referer=');">SENAC/MS</a>, das 08:30  até 17:50. O evento vai contar com a presença de <a href="http://twitter.com/guilhermeblanco" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.com/guilhermeblanco?referer=');"><strong>Guilherme  Blanco</strong></a> que hoje trabalha na empresa sul-africana MIH/SWAT,  desenvolvedor do core do projeto Doctrine, bem como nas frameworks Zend  e Symfony. Ele vai apresentar duas palestras, “Overview do Doctrine  2.0″ e “Usando o Doctrine 2.0 com Zend Framework 1.10″.</p>
<p>Vamos ter também duas palestras sobre WordPress, a ferramenta de blog  mais usada no mundo, <a href="http://twitter.com/flavioricardo" onclick="pageTracker._trackPageview('/outgoing/twitter.com/flavioricardo?referer=');"><strong>Flávio  Ricardo</strong></a> irá apresentar o tema “Gerenciando blogs e  websites de forma flexível com WordPress MU” e em seguida <strong><a href="http://twitter.com/onovaes" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.com/onovaes?referer=');">Gabriel Novaes</a></strong> aborda o tema “WordPress SEO: Práticas e plugins para robos de busca”.</p>
<p>Sem falar na tradicional mesa-redonda para debater assuntos de  interesse da comunidade de desenvolvedores PHP do estado, que vem nesse  workshop com o tema “Perfil do programador PHP no estado de MS”.</p>
<p>Informações para inscrição no evento, grade completa, você encontra  no hotsite do evento <a href="http://www.phpms.org/workshop/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.phpms.org/workshop/?referer=');">http://www.phpms.org/workshop/</a></p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2009/09/24/2%c2%ba-workshop-phpms/" rel="bookmark" class="crp_title">2º Workshop PHPMS</a></li><li><a href="http://cauancabral.net/2009/06/14/workshop-php-extremo/" rel="bookmark" class="crp_title">Workshop PHP Extremo</a></li><li><a href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/" rel="bookmark" class="crp_title">Comitiva &#8211; Cuide bem do seu evento</a></li><li><a href="http://cauancabral.net/2009/06/13/ultimas-novidades-2/" rel="bookmark" class="crp_title">Últimas Novidades #2</a></li><li><a href="http://cauancabral.net/2008/03/11/quem-ta-vivo-sempre-aparece/" rel="bookmark" class="crp_title">Quem ta vivo sempre aparece&#8230;</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/03/20/3%c2%ba-workshop-do-phpms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>X.ORG (XORG): Utilizando dois monitores com driver NVidia no Linux</title>
		<link>http://cauancabral.net/2010/03/10/x-org-xorg-utilizando-dois-monitores-com-driver-nvidia-no-linux/</link>
		<comments>http://cauancabral.net/2010/03/10/x-org-xorg-utilizando-dois-monitores-com-driver-nvidia-no-linux/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 03:26:00 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[opensuse]]></category>
		<category><![CDATA[nvidia]]></category>
		<category><![CDATA[xorg]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=207</guid>
		<description><![CDATA[Há pouco mais de 3 anos troquei meu desktop por um notebook para lazer e trabalho, e mais ou menos um ano atrás comprei um monitor para trabalhar. Desde o primeiro momento fiquei pensando em como fazer meu notebook e &#8230; <a href="http://cauancabral.net/2010/03/10/x-org-xorg-utilizando-dois-monitores-com-driver-nvidia-no-linux/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Há pouco mais de 3 anos troquei meu desktop por um notebook para lazer e trabalho, e mais ou menos um ano atrás comprei um monitor para trabalhar.</p>
<p>Desde o primeiro momento fiquei pensando em como fazer meu notebook e sua placa de video NVidia 8400M trabalhar com a tela de 1440&#215;900 do notebook juntamente com a tela de 1920&#215;1080 do monitor, sem perda de perfomance.</p>
<p>Por quase um ano utilizei os dois em conjunto abrindo mão da aceleração de hardware (efeitos 3d, performance e etc), acreditando que esta era a única maneira. Qual era minha configuração? Eu usava o Xinerama do X.org, e neste caso, não há aceleração por hardware. Aliás, pelo que me parece é uma tecnologia abandonada e defasada.</p>
<p>Depois de várias pesquisas e tentativas, achei uma configuração ideal, trocando o Xinerama pelo Twinview e XRand. Agora tenho aceleração de hardware, detecção de resolução e não preciso me preocupar ao utilizar só a tela do notebook (antes precisava editar o xorg.conf para ajustar a resolução).</p>
<p>Para quem estiver na mesma situação, aqui está meu xorg.conf<span id="more-207"></span></p>
<pre>Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 0 0
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
    Option         "Xinerama" "0"
EndSection

Section "Files"
EndSection

Section "InputDevice"

    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"

    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Samsung"
    ModelName      "Samsung SyncMaster"
    HorizSync       30.0 - 81.0
    VertRefresh     56.0 - 60.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 8400M GS"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "1"
    Option         "TwinViewOrientation" "RightOf"
    Option         "metamodes" "CRT: 1920x1080, DFP: 1440x900; CRT: NULL  DFP: 1440x900; CRT: 1280x720, DFP: 1440x900"
    SubSection     "Display"
        Depth       24
        Modes       "3360x1080" "2720x900"  "1920x1080" "1440x900" "1280x720"
    EndSubSection
EndSection
</pre>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2008/05/15/vida-pos-vista/" rel="bookmark" class="crp_title">Vida pós-Vista</a></li><li><a href="http://cauancabral.net/2008/05/14/diario-de-bordo/" rel="bookmark" class="crp_title">Diário de bordo</a></li><li><a href="http://cauancabral.net/2009/06/13/ultimas-novidades-2/" rel="bookmark" class="crp_title">Últimas Novidades #2</a></li><li><a href="http://cauancabral.net/2009/05/24/ultimas-novidades/" rel="bookmark" class="crp_title">Últimas novidades</a></li><li><a href="http://cauancabral.net/2009/02/06/novidades-de-janeiro/" rel="bookmark" class="crp_title">Novidades de janeiro</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/03/10/x-org-xorg-utilizando-dois-monitores-com-driver-nvidia-no-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dica Rápida &#8211; Otimizando código</title>
		<link>http://cauancabral.net/2010/02/08/dica-rapida-otimizando-codigo/</link>
		<comments>http://cauancabral.net/2010/02/08/dica-rapida-otimizando-codigo/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 01:12:36 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[otimização]]></category>
		<category><![CDATA[qualidade]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=203</guid>
		<description><![CDATA[Há um bom tempo atrás rolou uma discussão na lista do PHPMS sobre um comparativo de performance entre PHP x Python x Ruby x Perl. Bom, a conclusão que tirei do comparativo foi de que a velocidade de execução é &#8230; <a href="http://cauancabral.net/2010/02/08/dica-rapida-otimizando-codigo/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Há um bom tempo atrás rolou uma discussão na lista do PHPMS sobre um <a title="PHP x Python x Ruby x Perl" href="http://groups.google.com/group/phpms/browse_thread/thread/f4e76f4d94763866/f76cb1b77f28a25b" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/phpms/browse_thread/thread/f4e76f4d94763866/f76cb1b77f28a25b?referer=');">comparativo de performance</a> entre PHP x Python x Ruby x Perl.</p>
<p>Bom, a conclusão que tirei do comparativo foi de que a velocidade de execução é importante, mas mais do que isso, o programador é essencial. No exemplo da thread supracitada, o PHP perdia feio para as outras linguagens, mas olhando para o código escrito em PHP, dava para notar  vários erros de uso da linguagem e suas funções (ponto para o <a href="http://twitter.com/begnini" onclick="pageTracker._trackPageview('/outgoing/twitter.com/begnini?referer=');">Begnini</a> que viu o código antes de todos).</p>
<p>Então a dica de hoje é: estude bem a linguagem. Procure a saber o funcionamento das funções e construções da linguagem, isso é essencial para se tornar um bom programador.</p>
<p>Exemplos de código</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//uso comum</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
  <span style="color: #339933;">...</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//forma mais adequada</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #339933;">++</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//outro caso, ao invés de forçar várias verificações</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//use a estrutura adequada</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
<span style="color: #b1b100;">else</span> <span style="color: #666666; font-style: italic;">//não precisa fazer o último teste</span>
 <span style="color: #339933;">...</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// esse último caso que me inspirou a fazer o post</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// a pessoa só queria saber se o array $var tava vazio, e para isso contou todos os seus elementos</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// enquanto ela poderia ter usado uma verificação direta como</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span></pre></div></div>

<p>Este último caso, que motivou o post foi visto no changelog da versão 1.2.6 do CakePHP. Neste caso o &#8220;erro&#8221; foi encontrado e corrigido pelo brasileiro <a title="Blog do Juan Basso" href="http://blog.cakephp-brasil.org/" onclick="pageTracker._trackPageview('/outgoing/blog.cakephp-brasil.org/?referer=');">Juan Basso</a> neste <a title="Commit do Juan Basso para o CakePHP 1.2.6 - otimizações" href="http://github.com/cakephp/cakephp1x/commit/a96c157d948e2f3c1fa55b5d422121c323859626" onclick="pageTracker._trackPageview('/outgoing/github.com/cakephp/cakephp1x/commit/a96c157d948e2f3c1fa55b5d422121c323859626?referer=');">commit</a>.</p>
<p>O intuito do post não é meter o dedo na cara de ninguém, apenas alertar para situações onde culpamos uma determinada linguagem pelo desempenho de nossa aplicação quando o problema na verdade é o mal uso que estamos fazendo.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/" rel="bookmark" class="crp_title">CakePHP &#8211; Dúvidas Comuns #2</a></li><li><a href="http://cauancabral.net/2008/01/23/validao-de-dados-em-php5-parte-3/" rel="bookmark" class="crp_title">Valida&#231;&#227;o de dados em PHP5 &#8211; Parte 3</a></li><li><a href="http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/" rel="bookmark" class="crp_title">CakePHP &#8211; dúvidas comuns #1</a></li><li><a href="http://cauancabral.net/2010/08/13/dica-rapida-evitando-problemas-com-uso-de-jquery-e-imagens/" rel="bookmark" class="crp_title">Dica Rápida &#8211; Evitando problemas com uso de jQuery e imagens</a></li><li><a href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/02/08/dica-rapida-otimizando-codigo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.372 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-03 16:10:50 -->
