<?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 &#187; PHP</title>
	<atom:link href="http://cauancabral.net/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://cauancabral.net</link>
	<description>Geek, nerd e apaixonado por tecnologia</description>
	<lastBuildDate>Fri, 25 Jun 2010 23:31:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<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/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/2008/01/17/sentiram-falta/" rel="bookmark" class="crp_title">Sentiram falta?</a></li><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/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</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/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><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/2010/04/05/comitiva-cuide-bem-do-seu-evento/" rel="bookmark" class="crp_title">Comitiva &#8211; Cuide bem do seu evento</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>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/05/08/voltando-a-ativa-no-bom-sentido/" rel="bookmark" class="crp_title">Voltando a ativa ( no bom sentido )</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>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/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/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>
		<item>
		<title>Joomla! 1.6 &#8211; O que está para chegar&#8230;</title>
		<link>http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/</link>
		<comments>http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 23:06:53 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[joomla 1.6]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=190</guid>
		<description><![CDATA[Em 21 de Janeiro de 2008 foi lançado a versão 1.5 deste excelente CMS, e desde então foram lançados 15 subversões (atualizações), envolvendo pequenas melhorias e correções de segurança. Desde meados de 2009 quem utiliza o Joomla! só pensa na &#8230; <a href="http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Em 21 de Janeiro de 2008 foi lançado a versão 1.5 deste excelente CMS, e desde então foram lançados 15 subversões (atualizações), envolvendo pequenas melhorias e correções de segurança.</p>
<p>Desde meados de 2009 quem utiliza o Joomla! só pensa na próxima grande atualização do CMS, a versão 1.6. Ela deve incluir alguns dos itens mais requisitados pela comunidade como:</p>
<ul>
<li>Sistema de permissões, com possibilidade de se criar novos grupos e definir o que cada grupo pode fazer;</li>
<li>União das Seções e Categorias, ao mesmo tempo que agora pode-se ter infinitas subcategorias;</li>
<li>Suporte a outros sistemas de banco de dados;</li>
<li>Assistente para adicionar link para um artigo enquanto estamos escrevendo outro artigo;<span id="more-190"></span></li>
</ul>
<p>Agora parece que estamos perto do lançamento da próxima grande atualização do Joomla!, e pensando nisso baixei a versão atual em desenvolvimento do SVN e tirei alguns screenshot da área administrativa dessa nova versão, mostrando alguns dos recursos novos:</p>

<a href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_dashboard/' title='joomla16_dashboard'><img width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_dashboard-150x150.png" class="attachment-thumbnail" alt="joomla16_dashboard" title="joomla16_dashboard" /></a>
<a href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_administracao_menu/' title='joomla16_administracao_menu'><img width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_administracao_menu-150x150.png" class="attachment-thumbnail" alt="joomla16_administracao_menu" title="joomla16_administracao_menu" /></a>
<a href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_grupos/' title='joomla16_grupos'><img width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_grupos-150x150.png" class="attachment-thumbnail" alt="joomla16_grupos" title="joomla16_grupos" /></a>
<a href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_nivel-de-acesso/' title='joomla16_nivel-de-acesso'><img width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_nivel-de-acesso-150x150.png" class="attachment-thumbnail" alt="joomla16_nivel-de-acesso" title="joomla16_nivel-de-acesso" /></a>
<a href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_categorias-conteudo/' title='joomla16_categorias-conteudo'><img width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_categorias-conteudo-150x150.png" class="attachment-thumbnail" alt="joomla16_categorias-conteudo" title="joomla16_categorias-conteudo" /></a>
<a href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_administracao-conteudo/' title='joomla16_administracao-conteudo'><img width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_administracao-conteudo-150x150.png" class="attachment-thumbnail" alt="joomla16_administracao-conteudo" title="joomla16_administracao-conteudo" /></a>
<a href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_edicao-artigo/' title='joomla16_edicao-artigo'><img width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_edicao-artigo-150x150.png" class="attachment-thumbnail" alt="joomla16_edicao-artigo" title="joomla16_edicao-artigo" /></a>

<p>As últimas informações sobre o planejamento (incluindo o que deve ser feito e o que já foi feito) podem ser vistas <a title="Feature Patches for Joomla! 1.6" href="http://developer.joomla.org/coordinator-blog/292-feature-patches-for-16.html" onclick="pageTracker._trackPageview('/outgoing/developer.joomla.org/coordinator-blog/292-feature-patches-for-16.html?referer=');">nesta notícia</a> e nesta <a title="Joomla! 1.6 status" href="http://www.joomla.org/component/content/article/5252.html" onclick="pageTracker._trackPageview('/outgoing/www.joomla.org/component/content/article/5252.html?referer=');">página de status</a>.</p>
<p>Podemos aguardar, na melhor das hipóteses, um release final do Joomla! 1.6 para março de 2010, o que não está muito longe, felizmente =]</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><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/01/17/sentiram-falta/" rel="bookmark" class="crp_title">Sentiram falta?</a></li><li><a href="http://cauancabral.net/2008/01/06/sem-assunto-parte-3/" rel="bookmark" class="crp_title">Sem assunto &#8211; parte 3</a></li><li><a href="http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/" rel="bookmark" class="crp_title">Trabalhando com PHP 5.2 no OpenSUSE 11.2 (Downgrade do PHP 5.3 para 5.2)</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></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dica Rápida &#8211; CakePHP &#8211; Personalizando as páginas de erros</title>
		<link>http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/</link>
		<comments>http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 21:46:58 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[personalização]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=185</guid>
		<description><![CDATA[A grosso modo, existem dois tipos de erros no CakePHP: Erros de codificação e configuração: Quando acessamos um endereço de nossa aplicação e está faltando alguma coisa, o CakePHP nos retorna uma mensagem avisando sobre o erro ocorrido e a &#8230; <a href="http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A grosso modo, existem dois tipos de erros no CakePHP:</p>
<p><strong>Erros de codificação e configuração:</strong></p>
<p>Quando acessamos um endereço de nossa aplicação e está faltando alguma coisa, o CakePHP nos retorna uma mensagem avisando sobre o erro ocorrido e a causa dele (o que falta fazer).</p>
<p><strong>Erros HTTP:<br />
</strong>Quando tentamos acessar um endereço inexistente (erro 404) e quando há falha no servidor (erro 500).</p>
<p>O primeiro tipo deixa de ser exibido quando você configura o debug para o valor zero. A partir deste momento todos os erros relacionados ao primeiro tipo serão mostrados como um erro 404.<br />
O segundo tipo é exibido não importando o valor do debug.</p>
<p><strong>Como personalizar essas mensagens?</strong></p>
<p>Caso queira usar o mesmo layou definido no arquivo<em> app/views/layouts/default.ctp</em>, você precisará apenas criar uma pasta chamada errors dentro da pasta views  (caso ela não exista) e depois criar um arquivo para cada erro, ficando mais ou menos assim:</p>
<pre>app/views/errors/error404.ctp
app/views/errors/error500.ctp
app/views/errors/missing_action.ctp
</pre>
<p>
Veja a lista completa de arquivos acessando o diretório <em>cake/libs/views/errors/</em><br />
Caso queira ir um pouco além, personalizando também o layout da mensagem, adicione um arquivo com o layout definido em <em>app/views/layouts/</em>. Vamos chamar esse arquivo de <em>errors.ctp</em>;<br />
Em seguida, vamos adicionar o seguinte código em nosso <em>AppController</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Caso já esteja usando o beforeRender, apenas adicione a linha interna abaixo ao seu beforeRender
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> beforeRender <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>_setErrorLayout<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> _setErrorLayout<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <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;">name</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'CakeError'</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;">layout</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'error'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto, agora é só personalizar o arquivo errors.ctp da forma que achar melhor =]<br />
Dica retirada do <a title="Teknoid - nuts and bolts of cakephp" href="http://teknoid.wordpress.com/2009/04/30/give-all-of-your-error-messages-a-different-layout/" onclick="pageTracker._trackPageview('/outgoing/teknoid.wordpress.com/2009/04/30/give-all-of-your-error-messages-a-different-layout/?referer=');">Teknoid</a></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/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/2010/01/27/dica-rapida/" rel="bookmark" class="crp_title">Dica rápida</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/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></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dica rápida</title>
		<link>http://cauancabral.net/2010/01/27/dica-rapida/</link>
		<comments>http://cauancabral.net/2010/01/27/dica-rapida/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 14:33:55 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[dica]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=180</guid>
		<description><![CDATA[Ontem estava aplicando algumas ideias encontrada no excelente Super Awesome Advanced CakePHP Tips e me deparei com um erro que ocorria na minha aplicação. PROBLEMA: Ao tentar usar a função file_exists do PHP dentro do arquivo config/bootstrap.php para incluir um &#8230; <a href="http://cauancabral.net/2010/01/27/dica-rapida/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ontem estava aplicando algumas ideias encontrada no excelente <a title="Super Maravilhosas Dicas Avançadas para CakePHP (essa foi minha péssima tradução para o  título)" href="http://www.scribd.com/doc/19344870/Super-Awesome-Advanced-CakePHP-Tips" onclick="pageTracker._trackPageview('/outgoing/www.scribd.com/doc/19344870/Super-Awesome-Advanced-CakePHP-Tips?referer=');"><em>Super Awesome Advanced CakePHP Tips</em></a> e me deparei com um erro que ocorria na minha aplicação.</p>
<p>PROBLEMA:<br />
Ao tentar usar a função <em>file_exists</em> do PHP dentro do arquivo config/bootstrap.php para incluir um outro arquivo do mesmo diretório sempre recebia como resposta o valor <em>FALSE</em></p>
<p>SOLUÇÃO:<br />
Descobri que ao usar o <em>file_exists</em> o PHP estava tomando como diretório corrente o webroot/ e não o diretório do <em>bootstrap.php</em> (arquivo atual), então tive de acrescentar o prefixo &#8216;../config/&#8217; para encontrar o arquivo que procurava.<br />
Após usar o <em>file_exists</em>, iria dar um <em>include</em> no arquivo, neste caso o comportamento é diferente: ele considera o diretório corrente como sendo o diretório do arquivo que está chamando a função ( no meu caso o config/), portanto não é preciso adicionar prefixo nenhum.</p>
<p>Ainda não consegui descobrir o motivo desses dois comportamentos no mesmo ambiente, porém imagino que o comportamento do <em>file_exists</em> está ligado ao arquivo <em>.htaccess</em> do CakePHP que seta para o Apache o diretório <em>webroot/</em> como sendo a raiz do domínio.</p>
<p>Se souber a resposta deixe-a no comentário que eu atualizo o post.</p>
<p>Até a próxima.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Atualizando conforme combinado &#8211; 27/01/2010<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>O Társis deu uma boa dica para evitar esse tipo de problema: utilizar as constantes do CakePHP, no caso da dica do post, a constante utilizada seria <em>CONFIGS</em>, ela contém o caminho completo para o diretório /config.</p>
<p>A chamada da função ficaria assim:</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: #990000;">file_exists</span><span style="color: #009900;">&#40;</span>CONFIGS <span style="color: #339933;">.</span> <span style="color: #0000ff;">'arquivo.php'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span> CONFIGS <span style="color: #339933;">.</span> <span style="color: #0000ff;">'arquivo.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Além da constante CONFIGS temos algumas outras, como a WWW_ROOT e IMAGES que seguem o mesmo princípio, mas para apontar o caminho completo do diretório /webroot e /webroot/img respectivamente.<br />
Veja a lista completa de constantes em <a title="Constantes pré-definidas do CakePHP" href="http://book.cakephp.org/view/122/Core-Definition-Constants" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/view/122/Core-Definition-Constants?referer=');">http://book.cakephp.org/view/122/Core-Definition-Constants</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/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/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/2009/01/14/ajax-com-prototype/" rel="bookmark" class="crp_title">AJAX com Prototype</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></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/01/27/dica-rapida/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CakePHP 1.3 quase assado</title>
		<link>http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/</link>
		<comments>http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 02:49:50 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[CakePHP-1.3]]></category>
		<category><![CDATA[desenvolvimento]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=178</guid>
		<description><![CDATA[Pouco mais de um ano após o lançamento da versão 1.2.0 do CakePHP, está para ser lançado, dia 13 de fevereiro, a versão 1.3 deste poderoso framework. Tenho feito alguns testes em cima dele, estou inclusive reescrevendo um pequeno CMS &#8230; <a href="http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pouco mais de um ano após o lançamento da versão 1.2.0 do CakePHP, está para ser lançado, dia 13 de fevereiro, a versão 1.3 deste poderoso framework.</p>
<p>Tenho feito alguns testes em cima dele, estou inclusive reescrevendo um pequeno CMS que possuímos na empresa em cima desta versão (árvore 1.3-dev do repositório do projeto) e apesar de alguns pequenos bugs (ainda é uma versão de desenvolvimento, né?) esta versão possui muitas melhorias na sintaxe &#8211; que agora está mais concisa &#8211;  e novas funcionalidades.</p>
<p>Para a migração de nossa aplicação, não foi preciso alterar muita coisa, porém para grandes aplicações, deve-se considerar a necessidade do upgrade.</p>
<p>Abaixo segue uma lista de links para algumas páginas com informações sobre esta nova versão do CakePHP (todas em inglês):</p>
<ul>
<li><a title="TODO list do CakePHP 1.3" href="http://cakephp.lighthouseapp.com/projects/42648/13-todo-list" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648/13-todo-list?referer=');">Lista de <em>TODO</em> (tudo que já foi realizado está riscado)</a></li>
<li><a title="Lista de novas funcionalidades/recursos do CakePHP 1.3" href="http://cakephp.lighthouseapp.com/projects/42648/13-new-features" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648/13-new-features?referer=');">Novas <em>features</em></a></li>
<li><a title="Guia de migração de uma aplicação utilizando CakePHP da versão 1.2 para a 1.3" href="http://cakephp.lighthouseapp.com/projects/42648/13-migration-guide" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648/13-migration-guide?referer=');">Guia de migração (upgrade de aplicação feita com o CakePHP 1.2 para 1.3)</a></li>
</ul>
<p>Caso tenha interesse em ajudar os desenvolvedores, baixe a <a title="Fonte do CakePHP 1.3 no GitHub" href="http://github.com/cakephp/cakephp1x/tree/1.3" onclick="pageTracker._trackPageview('/outgoing/github.com/cakephp/cakephp1x/tree/1.3?referer=');">versão em desenvolvimento</a> e faça alguns testes. Só não esqueça de <a title="Tickets do Cake 1.x" href="http://cakephp.lighthouseapp.com/projects/42648-cakephp-1x/tickets" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648-cakephp-1x/tickets?referer=');">reportar</a> eventuais problemas ou patchs que você venha a produzir. Não se preocupem com o tempo de resposta da equipe de desenvolvimento, eles realmente estão empenhados em fazer um bom trabalho, é possível que tenha feedback de seu ticket/patch em menos de 1 hora &#8211; experiência própria.</p>
<p>Logo que concluir algumas tarefas e tiver feito mais testes colocarei aqui meu &#8220;parecer&#8221; sobre a nova versão, enquanto isso <a title="Informações de desenvolvimento do CakePHP 1.x" href="http://cakephp.lighthouseapp.com/projects/42648-cakephp-1x/overview" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648-cakephp-1x/overview?referer=');">acompanhe a página de desenvolvimento</a> para ficar por dentro das atualizações.</p>
<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/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</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/01/30/joomla-1-6-o-que-esta-para-chegar/" rel="bookmark" class="crp_title">Joomla! 1.6 &#8211; O que está para chegar&#8230;</a></li><li><a href="http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/" rel="bookmark" class="crp_title">Trabalhando com PHP 5.2 no OpenSUSE 11.2 (Downgrade do PHP 5.3 para 5.2)</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Trabalhando com PHP 5.2 no OpenSUSE 11.2 (Downgrade do PHP 5.3 para 5.2)</title>
		<link>http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/</link>
		<comments>http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 12:42:33 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[opensuse]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php5.3]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=167</guid>
		<description><![CDATA[No final de 2009 foi lançado a versão 11.2 do OpenSUSE, e como de costume para esta distro, todos os seus pacotes foram atualizados para a última (ou uma das últimas) versão estável. Isso aconteceu como PHP (que no lançamento &#8230; <a href="http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>No final de 2009 foi lançado a versão 11.2 do OpenSUSE, e como de costume para esta distro, todos os seus pacotes foram atualizados para a última (ou uma das últimas) versão estável. Isso aconteceu como PHP (que no lançamento estava na versão 5.3) como o MySQL (versão 5.1) dentre vários outros.</p>
<p>Acontece que quem trabalha com Drupal, Joomla! ou CakePHP (última  versão estável é a 1.2) deve aguardar ainda para poder utilizar a versão 5.3 do PHP, que <a title="Artigo sobre o PHP 5.3 feito antes de seu lançamento" href="http://phpms.org/artigos/4-codigo/66-o-futuro-do-php" onclick="pageTracker._trackPageview('/outgoing/phpms.org/artigos/4-codigo/66-o-futuro-do-php?referer=');">incluí</a> <a title="Guia de migração para o PHP 5.3" href="http://br2.php.net/migration53" onclick="pageTracker._trackPageview('/outgoing/br2.php.net/migration53?referer=');">várias</a> <a title="Lista de incompatibilidades entre a versão 5.3 e 5.2" href="http://br2.php.net/manual/en/migration53.incompatible.php" onclick="pageTracker._trackPageview('/outgoing/br2.php.net/manual/en/migration53.incompatible.php?referer=');">mudanças</a>, caso contrário eles podem não funcionar ou apresentar vários avisos.</p>
<p>Pesquisando sobre o problema descobri que não há no repositório do OpenSUSE (os oficiais nem nos mais conhecidos) o PHP 5.2 disponível, então como fazer? Baixar o fonte e compila-lo? É uma saída, mas queria algo &#8220;OpenSUSU-like&#8221; (mais fácil).</p>
<p>Dando uma vasculhada no oráculo encontrei <a href="http://www.badzilla.co.uk/openSUSE-11.2-Downgrade-PHP-5.3-to-5.2" onclick="pageTracker._trackPageview('/outgoing/www.badzilla.co.uk/openSUSE-11.2-Downgrade-PHP-5.3-to-5.2?referer=');">openSUSE 11.2: Downgrade PHP 5.3 to 5.2</a></p>
<p>Resolvi adaptar algumas coisas e funcionou perfeitamente, vamos lá aos passos com minhas modificações:</p>
<ol>
<li>Abra o Gerenciador de Software;</li>
<li>Vá no menu &#8220;Configuração&#8221; -&gt; &#8220;Repositórios&#8221;;</li>
<li>Procure o repositório &#8220;Atualizações Para o OpenSUSE 11.2-0&#8243;, clique sobre ele e depois no botão editar, na parte inferior da janela;</li>
<li>No campo &#8220;Diretório do Servidor&#8221; altere o &#8220;11.2&#8243; para &#8220;11.1&#8243; e então clique em OK; Na versão 11.1 o PHP está na versão 5.2</li>
<li>Procure o repositório &#8220;OpenSUSE 11.2 OSS&#8221;, clique sobre ele e depois no botão editar; Este e o próximo passo são necessário caso você deseje fazer o downgrade do MySQL para versão 5.0 (eu recomendo isso para deixar tudo compatível, como era no OpenSUSE 11.1)</li>
<li>No campo &#8220;Diretório do Servidor&#8221; altere o &#8220;11.2&#8243; para &#8220;11.1&#8243; e então clique em OK;</li>
<li>Novamente clique em OK na listagem de repositórios;</li>
<li>De volta a janela de gerenciamento de software, pesquise por PHP5, caso você já tenha instalado o PHP 5.3 aproveite agora para remover tudo relativo a ele, caso contrário selecione os pacotes que precisar e tenha certeza de marcar a versão correta (para mim foi 5.2.11). Verifique a versão de cada pacote clicando sobre ele e em seguida na aba &#8220;Versões&#8221; da janela, se houver mais de uma, marque a relativa ao PHP 5.2.x (onde x for o maior disponível);</li>
<li>Agora, pesquise os pacotes relativos ao MySQL (utilize o termo &#8220;mysql&#8221; na caixa de busca);</li>
<li>Você deve marcar as opções &#8220;libmysqlclient15&#8243;, &#8220;mysql&#8221; e &#8220;mysqlclient&#8221; conferindo se todos estão com a versão selecionada para 5.0.x (onde x é o maior número disponível);</li>
<li>Clique agora em OK para instalar os pacotes, uma janela irá abrir informando a necessidade de instalar alguma dependência. Dê uma olhada se não há conflitos e clique em OK; Agora é só aguardar.</li>
<li>Abra agora o &#8220;Repositórios de Software&#8221; e volte os repositórios para sua configuração original (trocando o 11.1 para 11.2), caso contrário não receberá as últimas atualizações dos outros softwares. Recomendo também que vá ao &#8220;Gerenciador de Software&#8221; e bloqueie os pacotes que instalou, para que o OpenSUSE não tente atualiza-los (os pacotes do PHP e MySQL);</li>
<li>Depois de instalar os pacotes, reinicie seu Apache logando-se como root no terminal e executando o comando &#8220;rcapache2 restart&#8221;; Verifique se o PHP está funcionando corretamente. Deve estar;</li>
<li>No OpenSUSE 11.2 o <a href="http://en.opensuse.org/MySQL-5.1" onclick="pageTracker._trackPageview('/outgoing/en.opensuse.org/MySQL-5.1?referer=');">socket do MySQL mudou de endereço</a>, mas como instalamos a versão antiga do MySQL não teremos essa alteração, porém alguns aplicativos (além do PHP) usam o MySQL (como o meu Amarok), então vamos criar um link simbólico onde deveria ser o endereço novo apontando para o antigo para que não haja problema, faremos isso como root;</li>
<li>Crie o diretório que é padrão para o socket na versão 11.2 do OpenSUSE: mkdir /var/run/mysql</li>
<li>Entre no diretório criado e crie o link simbólico para o socket: ln -s mysql.sock /var/lib/mysql/mysql.sock</li>
<li>Reinicie seu OpenSUSE e bom proveito.</li>
</ol>
<p>Caso tenha alguma dúvida deixe-a nos comentários. Se necessário tiro alguns screenshots para ilustrar melhor.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2009/02/06/novidades-de-janeiro/" rel="bookmark" class="crp_title">Novidades de janeiro</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/01/30/joomla-1-6-o-que-esta-para-chegar/" rel="bookmark" class="crp_title">Joomla! 1.6 &#8211; O que está para chegar&#8230;</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/2008/01/04/sem-assunto-2/" rel="bookmark" class="crp_title">Sem assunto &#8211; parte 2</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latinoware 2009 &#8211; COLAPHP &#8211; Evento fantástico</title>
		<link>http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/</link>
		<comments>http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 14:56:24 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[latinoware]]></category>
		<category><![CDATA[mini-curso]]></category>
		<category><![CDATA[palestra]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=155</guid>
		<description><![CDATA[Eae pessoal, tudo tranquilo? Tenho andado bem corrido ultimamente e não tenho conseguido dar a atenção que queria ao blog. De agora em diante as coisas não devem melhorar muito, mas farei o possível para trazer coisas interessantes pra cá. &#8230; <a href="http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Eae pessoal, tudo tranquilo?</p>
<p>Tenho andado bem corrido ultimamente e não tenho conseguido dar a atenção que queria ao blog. De agora em diante as coisas não devem melhorar muito, mas farei o possível para trazer coisas interessantes pra cá.</p>
<p>Desde o dia 21/10/2009 estou em Foz do Iguaçu &#8211; PR, para participar do Latinoware 2009, um dos maiores eventos de software livre das Américas.<br />
Estou tendo a oportunidade de ministrar um minicurso e apresentar uma palestra no &#8220;subevento&#8221; COLAPHP &#8211; Congresso Latinoamericano de PHP, que possui uma trilha dedicada a linguagem dentro do  Latinoware.</p>
<p>A experiência não poderia estar sendo melhor. Pude conhecer excelentes profissionais e fazer muitas amizades.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; fim do rascunho 1 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Nos dias 23 e 24 de outubro tive a oportunidade de ministrar um minicurso e uma palestra dentro da trilha COLAPHP do Latinoware.</p>
<p>Ambos tratavam do CakePHP, no caso do minicurso fizemos uma introdução no framework, falando um pouco de seu funcionamento, suas convenções e criamos rapidamente uma aplicação simples utilizando o terminal com o Bake.</p>
<p>O slides utilizado no minicurso foi este:</p>
<p><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2474507&amp;doc=cakephp-091111083152-phpapp01" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2474507&amp;doc=cakephp-091111083152-phpapp01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" wmode="transparent"></embed></object></p>
<p>No caso da palestra, falei novamente sobre a integração de aplicações escritas em CakePHP e Flex, dando uma revisada na apresentação. Ela ficou assim:</p>
<p><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2928697&amp;doc=flexphp-100116083159-phpapp02" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2928697&amp;doc=flexphp-100116083159-phpapp02" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" wmode="transparent"></embed></object></p>
<p>Aproveito o espaço (e a disponibilidade de tempo) para agradecer todos que participaram do evento como um todo, seja na organização, apoio ou assistindo, perguntando, corrigindo e ajudando a gente durante as apresentações. Obrigado a todos.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;- fim do rascunho 2 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>O texto do rascunho 1 foi escrito em 23/10/2009, o do rascunho 2 logo após o evento, hoje é 16/01/2010 e o textos ainda estevam como rascunho para ser publicado no blog. Pois é, esse final de ano foi realmente muito corrido, mas valeu a pena.</p>
<p>Agora é hora de se organizar para poder ter um 2010 ainda mais proveitoso (de começo ele já está sendo muito melhor).</p>
<p>Até breve.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><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/2009/09/24/2%c2%ba-workshop-phpms/" rel="bookmark" class="crp_title">2º Workshop PHPMS</a></li><li><a href="http://cauancabral.net/2008/09/21/software-freedom-day-08-sucesso/" rel="bookmark" class="crp_title">Software Freedom Day 08 &#8211; Sucesso!</a></li><li><a href="http://cauancabral.net/2008/05/08/voltando-a-ativa-no-bom-sentido/" rel="bookmark" class="crp_title">Voltando a ativa ( no bom sentido )</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/01/16/latinoware-2009-colaphp-evento-fantastico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
