<?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>cleiver.com &#187; dicas</title>
	<atom:link href="http://blog.cleiver.com/tag/dicas/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cleiver.com</link>
	<description>blog</description>
	<lastBuildDate>Wed, 18 Nov 2009 00:37:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Qual navegador vocÃª usa?</title>
		<link>http://blog.cleiver.com/2009/09/25/qual-navegador-voce-usa/</link>
		<comments>http://blog.cleiver.com/2009/09/25/qual-navegador-voce-usa/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 01:57:22 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[Devaneios]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[boas prÃ¡ticas]]></category>
		<category><![CDATA[bowa]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[opiniÃ£o]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=279</guid>
		<description><![CDATA[Fui dar uma olhada nos capÃ­tulos dessa semana na novela O Mundo de Joana no blog do beonthe.net (Vai lÃ¡! TÃ¡ legal!) e me deparei com um artigo Â bem simples e didÃ¡tico sobre a questÃ£o dos navegadores. NÃ£o vou ficar entrando em detalhes aqui sobre isso. Eu, como qualquer desenvolvedor web, nÃ£o suporto o Internet [...]]]></description>
			<content:encoded><![CDATA[<p>Fui dar uma olhada nos capÃ­tulos dessa semana na novela <a title="O Mundo de Joana" href="http://blog.beonthe.net/tagged/o_mundo_de_joana" target="_blank">O Mundo de Joana</a> no blog do <a title="Be on the Net!" href="http://blog.beonthe.net/" target="_blank">beonthe.net</a> (Vai lÃ¡! TÃ¡ legal!) e me deparei com<a title="Qual Ã© o navegador que vocÃª usa?" href="http://blog.beonthe.net/post/193336961/qual-e-o-navegador-que-voce-usa" target="_blank"> um artigo Â bem simples e didÃ¡tico sobre a questÃ£o dos navegadores</a>. NÃ£o vou ficar entrando em detalhes aqui sobre isso. Eu, como qualquer desenvolvedor web, nÃ£o suporto o Internet Explorer.</p>
<p>A questÃ£o aqui Ã© simplesmente a indicaÃ§Ã£o <a title="Qual Ã© o navegador que vocÃª usa?" href="http://blog.beonthe.net/post/193336961/qual-e-o-navegador-que-voce-usa" target="_blank">do artigo</a> para quem ainda nÃ£o conhecia o <a title="Be on the Net!" href="http://blog.beonthe.net/" target="_blank">blog </a>deles. E claro, lamentar um bocado o fato de na empresa onde trabalho, o Ãºnico navegador suportado ser justamente o Internet Explorer 6 (Use a versÃ£o 7 por sua conta e risco).</p>


<p>Posts Relacionados:<ol><li><a href='http://blog.cleiver.com/2009/09/20/software-livre-e-padroes-abertos-no-desenvolvimento-web/' rel='bookmark' title='Permanent Link: Software livre e padrÃµes abertos no desenvolvimento Web'>Software livre e padrÃµes abertos no desenvolvimento Web</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2009/09/25/qual-navegador-voce-usa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CakePHP e o Auth Component</title>
		<link>http://blog.cleiver.com/2009/03/31/cakephp-e-o-auth-component/</link>
		<comments>http://blog.cleiver.com/2009/03/31/cakephp-e-o-auth-component/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 20:06:34 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=201</guid>
		<description><![CDATA[O Auth deve ser o componente mais conhecido do CakePHP. Sua funÃ§Ã£o Ã© bem simples: Autenticar um usuÃ¡rio no sistema e gerenciar quais pÃ¡ginas sÃ£o de acesso restrito.
HÃ¡ umas semanas atrÃ¡s eu estava configurando a framework pra um projeto que vou fazer com a Bruna e tive alguns problemas com esse componente. Ele faz muito [...]]]></description>
			<content:encoded><![CDATA[<p>O <a title="Manual do Auth Component" href="http://book.cakephp.org/view/172/Authentication" target="_blank">Auth</a> deve ser o componente mais conhecido do <a title="CakePHP Framework" href="http://cakephp.org/" target="_blank">CakePHP</a>. Sua funÃ§Ã£o Ã© bem simples: Autenticar um usuÃ¡rio no sistema e gerenciar quais pÃ¡ginas sÃ£o de acesso restrito.</p>
<p>HÃ¡ umas semanas atrÃ¡s eu estava configurando a framework pra um projeto que vou fazer com a <a title="Blog da Bruna" href="http://www.brunamorato.com/blog" target="_blank">Bruna</a> e tive alguns problemas com esse componente. Ele faz muito mais do que eu preciso e de uma forma que nÃ£o me agrada muito: nÃ£o me deixando no controle do que acontece.</p>
<p>EntÃ£o comecei a desenvolver um componente pra fazer exatamente que eu quero, ou seja, definir quais pÃ¡ginas serÃ£o acessÃ­veis por usuÃ¡rios deslogados. E sÃ³.</p>
<p>Com 110 linhas de cÃ³digos, incluindo linhas em branco e comentÃ¡rios inÃºteis, ele estÃ¡ funcionando e me atendendo atÃ© agora. Vou dar mais um tempo, usar mais um pouco, ver se nÃ£o to esquecendo de nada, quando estiver mais maduro, disponibilizo aqui.</p>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2009/03/31/cakephp-e-o-auth-component/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Inflection em PortuguÃªs do Brasil para o CakePHP</title>
		<link>http://blog.cleiver.com/2009/03/27/inflection-em-portugues-do-brasil-para-o-cakephp/</link>
		<comments>http://blog.cleiver.com/2009/03/27/inflection-em-portugues-do-brasil-para-o-cakephp/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 20:45:02 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=203</guid>
		<description><![CDATA[Resumidamente, no CakePHP, inflections sÃ£o as regras para pluralizaÃ§Ã£o utilizada pela framework, de modo que ele consiga ir do model para o controller sem problemas segundo suas convenÃ§Ãµes.
Como tenho preguiÃ§a de fazer coisas que certamente jÃ¡ foram feitas e atÃ© melhor que eu faria, resolvi procurar o arquivo pronto. E encontrei na pasta do Gabriel [...]]]></description>
			<content:encoded><![CDATA[<p>Resumidamente, no <a title="CakePHP" href="http://cakephp.org" target="_blank">CakePHP</a>, inflections sÃ£o as regras para pluralizaÃ§Ã£o utilizada pela framework, de modo que ele consiga ir do model para o controller sem problemas segundo suas convenÃ§Ãµes.</p>
<p>Como tenho preguiÃ§a de fazer coisas que certamente jÃ¡ foram feitas e atÃ© melhor que eu faria, resolvi procurar o arquivo pronto. E encontrei na <a href="http://github.com/gabrielgilini/cake_ptbr/blob/master/config/inflections.php" target="_blank">pasta do Gabriel</a> no <a title="Github!" href="http://github.com" target="_blank">Github</a>. NÃ£o sei qual a frequencia de atualizaÃ§Ã£o nem se contem muitos erros, mas se tiver algum, atualizar Ã© moleza, basta olhar o arquivo que dÃ¡ pra entender a lÃ³gica.</p>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2009/03/27/inflection-em-portugues-do-brasil-para-o-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Jedi</title>
		<link>http://blog.cleiver.com/2009/03/11/php-jedi/</link>
		<comments>http://blog.cleiver.com/2009/03/11/php-jedi/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 12:32:48 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=198</guid>
		<description><![CDATA[Mais uma Ã³tima apresentaÃ§Ã£o do Felipe Ribeiro no PHP-PB!
PHP Jedi &#8211; Boas PrÃ¡ticas e Alta Performance
View more presentations from Felipe Ribeiro.



Nenhum post relacionado.]]></description>
			<content:encoded><![CDATA[<p>Mais uma Ã³tima apresentaÃ§Ã£o do <a title="Blog do Felipe Ribeiro" href="http://blog.feliperibeiro.com" target="_blank">Felipe Ribeiro</a> no PHP-PB!</p>
<div id="__ss_1114399" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="PHP Jedi - Boas PrÃ¡ticas e Alta Performance" href="http://www.slideshare.net/felipernb/php-jedi-boas-prticas-e-alta-performance?type=powerpoint">PHP Jedi &#8211; Boas PrÃ¡ticas e Alta Performance</a><object width="425" height="355" data="http://static.slideshare.net/swf/ssplayer2.swf?doc=phpjedi-090307090434-phpapp01&amp;rel=0&amp;stripped_title=php-jedi-boas-prticas-e-alta-performance" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=phpjedi-090307090434-phpapp01&amp;rel=0&amp;stripped_title=php-jedi-boas-prticas-e-alta-performance" /><param name="allowfullscreen" value="true" /></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/felipernb">Felipe Ribeiro</a>.</div>
</div>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2009/03/11/php-jedi/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>O que o Ruby tem de legal?</title>
		<link>http://blog.cleiver.com/2009/02/12/o-que-o-ruby-tem-de-legal/</link>
		<comments>http://blog.cleiver.com/2009/02/12/o-que-o-ruby-tem-de-legal/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 23:36:51 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=187</guid>
		<description><![CDATA[Sabe no PHP (por exemplo) quando vocÃª quer definir um valor para uma variÃ¡vel caso ela nÃ£o exista ainda, algo do tipo:

$name = &#40;isset&#40;$name&#41;&#41; ? $name : 'Cleiver';

No Ruby pode ser feito assim:

name &#124;&#124;= 'Cleiver'

Ou quando vocÃª quer dar uma de Bart e escrever no quadro vÃ¡rias vezes a mesma coisa, assim:

for &#40; $i = [...]]]></description>
			<content:encoded><![CDATA[<p>Sabe no PHP (por exemplo) quando vocÃª quer definir um valor para uma variÃ¡vel caso ela nÃ£o exista ainda, algo do tipo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$name</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'Cleiver'</span><span style="color: #339933;">;</span></pre></div></div>

<p>No Ruby pode ser feito assim:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">name <span style="color:#006600; font-weight:bold;">||</span>= <span style="color:#996600;">'Cleiver'</span></pre></div></div>

<p>Ou quando vocÃª quer dar uma de Bart e escrever no quadro vÃ¡rias vezes a mesma coisa, assim:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><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;">$i</span> <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">10</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: #009900;">&#123;</span>
   <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">'NÃ£o vou mais sacanear o Homer!'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>No Ruby, fica muito mais legÃ­vel e bem mais legal:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">10.<span style="color:#9900CC;">times</span> <span style="color:#9966CC; font-weight:bold;">do</span>
   <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'NÃ£o vou mais sacanear o Homer!'</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>O <a title="Ruby Learning" href="http://www.rubylearning.org" target="_blank">curso</a> ainda estÃ¡ no basicÃ£o, mas certamente posso dizer que a linguagem ganhou um novo adepto!</p>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2009/02/12/o-que-o-ruby-tem-de-legal/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Scrum e XP direto das Trincheiras</title>
		<link>http://blog.cleiver.com/2009/02/04/scrum-e-xp-direto-das-trincheiras/</link>
		<comments>http://blog.cleiver.com/2009/02/04/scrum-e-xp-direto-das-trincheiras/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 23:09:00 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[Livros]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[opiniÃ£o]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=182</guid>
		<description><![CDATA[Â 
Acabei hoje de ler o livro Scrum e XP direto das Trincheiras. Livro altamente recomendado, principalmente para quem trabalha ou se interessa por gerÃªncia de projetos de software.
O autor, Henrik Kniberg, nÃ£o &#8220;perde tempo&#8221; entrando em detalhes e conceitos sobre Scrum e XP, ele vai direto ao ponto e diz como ele trabalha com essas [...]]]></description>
			<content:encoded><![CDATA[<p>Â </p>
<div id="attachment_183" class="wp-caption alignleft" style="width: 259px"><a href="http://www.infoq.com/br/minibooks/scrum-xp-from-the-trenches"><img class="size-full wp-image-183 " title="Scrum e XP direto das Trincheiras" src="http://blog.cleiver.com/wp-content/uploads/2009/02/capa_378_250.png" alt="Scrum e XP direto das Trincheiras" width="249" height="378" /></a><p class="wp-caption-text">Scrum e XP direto das Trincheiras</p></div>
<p>Acabei hoje de ler o livro <a title="Scrum e XP direto das Trincheiras" href="http://www.infoq.com/br/minibooks/scrum-xp-from-the-trenches" target="_blank">Scrum e XP direto das Trincheiras</a>. Livro altamente recomendado, principalmente para quem trabalha ou se interessa por gerÃªncia de projetos de software.</p>
<p>O autor, <a title="Blog do Henrik" href="http://www.crisp.se/henrik.kniberg" target="_blank">Henrik Kniberg</a>, nÃ£o &#8220;perde tempo&#8221; entrando em detalhes e conceitos sobre <a title="Scrum segundo a Wikipedia" href="http://pt.wikipedia.org/wiki/Scrum" target="_blank">Scrum</a> e <a title="XP segundo a Wikipedia" href="http://pt.wikipedia.org/wiki/ProgramaÃ§Ã£o_extrema" target="_blank">XP</a>, ele vai direto ao ponto e diz como ele trabalha com essas ferramentas em sua empresa.</p>
<p>No livro ele nÃ£o diz o que Ã© certo e o que Ã© errado nem diz como as coisas sÃ£o. Ele mostra exatamente o que ele tentou e funcionou e o que nÃ£o funcionou para ele, e procura explicar o porque de nÃ£o ter funcionado no caso dele.</p>
<p>O livro tem uma leitura fÃ¡cil e rÃ¡pida e vem com vÃ¡rias ilustraÃ§Ãµes e fotos que ajudam a explicar o funcionamento das coisas.</p>
<p>O livro Ã© gratuito e pode ser baixado no site da <a title="InfoQ" href="http://www.infoq.com/br/minibooks/scrum-xp-from-the-trenches">InfoQ</a> (Ã© preciso se cadastrar).</p>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2009/02/04/scrum-e-xp-direto-das-trincheiras/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lista de blogs em portuguÃªs sobre desenvolvimento web e TI</title>
		<link>http://blog.cleiver.com/2009/01/08/lista-de-blogs-em-portugues-sobre-desenvolvimento-web-e-ti/</link>
		<comments>http://blog.cleiver.com/2009/01/08/lista-de-blogs-em-portugues-sobre-desenvolvimento-web-e-ti/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 08:29:43 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[Devaneios]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=167</guid>
		<description><![CDATA[O casal do TidBits fez uma lista com vÃ¡rios blogs sobre desenvolvimento web e TI escritos em portuguÃªs. Qual nÃ£o foi minha surpresa a ver o meu blog listado lÃ¡? AtÃ© me animei a me dedicar mais ao blog!
Eu acrescento ainda os blogs de dois amigos que trabalharam comigo na 3Jane:

Pedro Mendes
Rafael Dx7



Nenhum post relacionado.]]></description>
			<content:encoded><![CDATA[<p>O casal do <a title="TidBits!" href="http://www.tidbits.com.br" target="_blank">TidBits</a> fez uma lista com vÃ¡rios <a title="Lista de blogs em portuguÃªs sobre desenvolvimento web e TI" href="http://www.tidbits.com.br/lista-de-blogs-brasileiros-sobre-desenvolvimento-web-e-ti#comment-311" target="_blank">blogs sobre desenvolvimento web e TI escritos em portuguÃªs</a>. Qual nÃ£o foi minha surpresa a ver o meu blog listado lÃ¡? AtÃ© me animei a me dedicar mais ao blog!</p>
<p>Eu acrescento ainda os blogs de dois amigos que trabalharam comigo na <a title="3Jane" href="http://www.3jane.com" target="_blank">3Jane</a>:</p>
<ul>
<li><a title="Blog do Pedrinho" href="http://www.blogdopedro.net/" target="_blank">Pedro Mendes</a></li>
<li><a title="Rafael Dx7" href="http://www.dx7lab.com/" target="_blank">Rafael Dx7</a></li>
</ul>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2009/01/08/lista-de-blogs-em-portugues-sobre-desenvolvimento-web-e-ti/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP nÃ£o Ã© coisa de moleque!</title>
		<link>http://blog.cleiver.com/2008/12/17/php-nao-e-coisa-de-moleque/</link>
		<comments>http://blog.cleiver.com/2008/12/17/php-nao-e-coisa-de-moleque/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 11:18:17 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=155</guid>
		<description><![CDATA[Muito boa a palestra do Felipe Ribeiro sobre PHP no Encontro de Desenvolvedores na ParaÃ­ba. Como jÃ¡ disse algumas vezes, o problema nÃ£o Ã© a linguagem, Ã© o &#8220;programador&#8221;. Enfim.

Vi no blog do Igor Escobar (Dois blogs &#8220;feedados&#8221; numa cajadada sÃ³).


Nenhum post relacionado.]]></description>
			<content:encoded><![CDATA[<p>Muito boa a palestra do <a title="Blog do Felipe Ribeiro" href="http://blog.feliperibeiro.com/" target="_blank">Felipe Ribeiro</a> sobre PHP no Encontro de Desenvolvedores na ParaÃ­ba. Como jÃ¡ disse algumas vezes, o problema nÃ£o Ã© a linguagem, Ã© o &#8220;programador&#8221;. Enfim.</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=slides-1228060166778844-9&amp;stripped_title=php-no-coisa-de-moleque-presentation" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=slides-1228060166778844-9&amp;stripped_title=php-no-coisa-de-moleque-presentation" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><img style="visibility: hidden; width: 0px; height: 0px;" src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMjk1MTYxOTQyMjImcHQ9MTIyOTUxNjIxMzM2MyZwPTEwMTkxJmQ9Jmc9MiZ*PSZvPTg*MmJjOTc4YTFjMjRjOTFhMWJmNzExZDIwNGIwOGVi.gif" border="0" alt="" width="0" height="0" />Vi no blog do <a title="Blog do Igor Escobar" href="http://www.igorescobar.com/blog/" target="_blank">Igor Escobar</a> (Dois blogs &#8220;feedados&#8221; numa cajadada sÃ³).</p>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2008/12/17/php-nao-e-coisa-de-moleque/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Boas prÃ¡ticas com formulÃ¡rios</title>
		<link>http://blog.cleiver.com/2008/12/04/boas-praticas-com-formularios/</link>
		<comments>http://blog.cleiver.com/2008/12/04/boas-praticas-com-formularios/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 18:48:34 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[Devaneios]]></category>
		<category><![CDATA[boas prÃ¡ticas]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[formulÃ¡rios]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=145</guid>
		<description><![CDATA[Bem interessante esses slides sobre boas prÃ¡ticas no desenvolvimento de formulÃ¡rios:
Best Practices for Form Design
View SlideShare presentation or Upload your own. (tags: form design)


Vi no Pinceladas da Web.


Posts Relacionados:Qual navegador vocÃª usa?
]]></description>
			<content:encoded><![CDATA[<p>Bem interessante esses slides sobre boas prÃ¡ticas no desenvolvimento de formulÃ¡rios:</p>
<div style="width:425px;text-align:left" id="__ss_37570"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/psykoreactor/best-practices-for-form-design?type=powerpoint" title="Best Practices for Form Design">Best Practices for Form Design</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=best-practices-for-form-design-12059&#038;stripped_title=best-practices-for-form-design" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=best-practices-for-form-design-12059&#038;stripped_title=best-practices-for-form-design" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/psykoreactor/best-practices-for-form-design?type=powerpoint" title="View Best Practices for Form Design on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/form">form</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/design">design</a>)</div>
</div>
<p><img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMjg*MjAwMDQ5MzYmcHQ9MTIyODQyMDAyNTk*NiZwPTEwMTkxJmQ9Jmc9MiZ*PSZvPTg*MmJjOTc4YTFjMjRjOTFhMWJmNzExZDIwNGIwOGVi.gif" /></p>
<p>Vi no <a href="http://www.pinceladasdaweb.com.br">Pinceladas da Web</a>.</p>


<p>Posts Relacionados:<ol><li><a href='http://blog.cleiver.com/2009/09/25/qual-navegador-voce-usa/' rel='bookmark' title='Permanent Link: Qual navegador vocÃª usa?'>Qual navegador vocÃª usa?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2008/12/04/boas-praticas-com-formularios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpGACL</title>
		<link>http://blog.cleiver.com/2008/09/23/phpgacl/</link>
		<comments>http://blog.cleiver.com/2008/09/23/phpgacl/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 18:53:18 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=90</guid>
		<description><![CDATA[Um dia depois de eu atualizar o blog, o Rafael me mandou um link pro phpGACL, uma ferramente GenÃ©rica de controle de acessos em PHP. Sendo genÃ©rica, nÃ£o importa se vocÃª utiliza alguma framework ou se desenvolve PHP na unha, Ã© sÃ³ incluir a classe e utilizar.
Ao contrÃ¡rio da ACL do Cake, ela Ã© muito [...]]]></description>
			<content:encoded><![CDATA[<p>Um dia depois de eu <a title="utilizando ACL no CakePHP" href="http://blog.cleiver.com/2008/09/18/utilizando-o-acl-no-cakephp/" target="_blank">atualizar</a> o blog, o <a title="rafael Dx7" href="http://www.dx7lab.com" target="_blank">Rafael</a> me mandou um link pro <a title="phpGACL" href="http://phpgacl.sourceforge.net/" target="_blank">phpGACL</a>, uma ferramente <strong>G</strong>enÃ©rica de controle de acessos em PHP. Sendo genÃ©rica, nÃ£o importa se vocÃª utiliza alguma framework ou se desenvolve PHP na unha, Ã© sÃ³ incluir a classe e utilizar.</p>
<p>Ao contrÃ¡rio da ACL do <a title="CakePHP Framework" href="http://cakephp.org/" target="_blank">Cake</a>, ela Ã© muito melhor documentada e bem mais complexa, mas nem por isso menos simples. Vem com instalador, suporta praticamente todos os bancos de dados (foi desenvolvido utilizando o ADOdb) e ainda possui uma interface de administraÃ§Ã£o.</p>
<p>No pacote vem um manual explicando o conceito da ACL (aqui eles utilizam os personagens de Star Wars) e a documentaÃ§Ã£o da API das classes para referÃªncia.</p>
<p><a title="phpGACL plugin" href="http://dev.sypad.com/installing-phpgacl-plugin-cakephp" target="_blank">Nesse link</a> tem um tutorial de instalaÃ§Ã£o de um pacote para integrar o <a title="phpGACL" href="http://phpgacl.sourceforge.net/" target="_blank">phpGACL</a> no <a title="CakePHP Framework" href="http://cakephp.org/" target="_blank">CakePHP</a>. Particularmente nÃ£o fui com a cara desse plugin/componente (talvez pelo fato de ser argentino :P) e preferi fazer a integraÃ§Ã£o na mÃ£o e criei meu prÃ³prio componente.</p>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2008/09/23/phpgacl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Utilizando o ACL no CakePHP</title>
		<link>http://blog.cleiver.com/2008/09/18/utilizando-o-acl-no-cakephp/</link>
		<comments>http://blog.cleiver.com/2008/09/18/utilizando-o-acl-no-cakephp/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 14:43:22 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=84</guid>
		<description><![CDATA[Estamos comeÃ§ando um novo projeto aqui na empresa e para ele decidimos usar o CakePHP como framework de desenvolvimento. Desde semana passada estou estudando a utilizaÃ§Ã£o do ACL para controle de acesso Ã s pÃ¡ginas do sistema, mas como muitos devem saber, o book do site do Cake nÃ£o Ã© tÃ£o explicativo quanto deveria. :P
Quer [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cakephp.org" target="_blank"><img class="size-full wp-image-85" title="CakePHP" src="http://blog.cleiver.com/wp-content/uploads/2008/09/cake-logo.png" alt="CakePHP" width="180" height="180" align="left" /></a>Estamos comeÃ§ando um novo projeto aqui na empresa e para ele decidimos usar o <a title="CakePHP Framework" href="http://cakephp.org" target="_blank">CakePHP</a> como framework de desenvolvimento. Desde semana passada estou estudando a utilizaÃ§Ã£o do ACL para controle de acesso Ã s pÃ¡ginas do sistema, mas como muitos devem saber, o <a title="Cook Book" href="http://book.cakephp.org/" target="_blank">book</a> do site do Cake nÃ£o Ã© tÃ£o explicativo quanto deveria. :P</p>
<p>Quer dizer, o <a title="The Lord of the Rings baking a cake! :P" href="http://book.cakephp.org/view/465/Understanding-How-ACL-Works" target="_blank">exemplo do conceito sendo explicado utilizando os personagens d&#8217;O Senhor dos AnÃ©is</a> Ã© sensacional! Mas sÃ³ serve pra isso mesmo, explicar o conceito. Por que na prÃ¡tica, a coisa Ã© um pouco mais complexa.</p>
<p>Pra tentar entender o funcionamento, criei o <a title="Exemplo simples de blog com CakePHP" href="http://book.cakephp.org/view/219/Blog" target="_blank">blog de exemplo</a> do prÃ³prio &#8220;<a title="Cook Book :P" href="http://book.cakephp.org/" target="_blank">Livro de Receitas</a>&#8221; do CakePHP. PorÃ©m ele Ã© simples demais e nem tem usuÃ¡rios. EntÃ£o criei uma tabela para armazenar somente um login e senha de acesso. Nada muito difÃ­cil para quem jÃ¡ mexeu com o  Cake pelo menos uma vez.</p>
<p>AÃ­ vem outro problema: por padrÃ£o, o ACL vem pronto pra trabalhar com CRUD, e dificilmente teremos um sistema que sÃ³ utilize os mÃ©todos do CRUD. O que fazer entÃ£o? Depois de dias lendo documentaÃ§Ã£o sobre o assunto, chegou atÃ© mim um texto (perdi o link, desculpem. :/) que dizia, resumidamente, que era sÃ³ associar os actions como ACOs normalmente, e na hora de salvar no banco, dar acesso total nos</p>
<p>EntÃ£o, supondo que esteja tudo pronto, vamos resolver o grande problema que encontrei nos blogs que li: Os mÃ©todos de criaÃ§Ã£o dos AROs e dos ACOs, bem como seus relacionamentos, <span style="text-decoration: underline;"><em><strong>nÃ£o devem ficar espalhados pela aplicaÃ§Ã£o</strong></em></span>. Crie um arquivo PHP separado para executar somente quando vocÃª precisar popular o banco de dados com as informaÃ§Ãµes de acesso.</p>
<p>EntÃ£o vamos comeÃ§ar criando um pequeno script que cria os AROs do nosso &#8220;sistema&#8221;:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$aro</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> aro<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$groups</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
   <span style="color: #cc66cc;">0</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Admins'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
   <span style="color: #cc66cc;">1</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Authors'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
   <span style="color: #cc66cc;">2</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Spammers'</span> <span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$groups</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$group</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$aro</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$aro</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$group</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Esse script vai gerar grupos de usuÃ¡rios do sistema. temos os administradores, os autores do blog e spammers, que sÃ£o usuÃ¡rios que nÃ£o terÃ£o acesso a nada.</p>
<p>Agora vamos criar alguns usuÃ¡rios:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$aro</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> aro<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$users</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
   <span style="color: #cc66cc;">0</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> Pedro<span style="color: #339933;">,</span> <span style="color: #0000ff;">'parent_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'model'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'User'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'foreign_key'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
   <span style="color: #cc66cc;">1</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> Rafael<span style="color: #339933;">,</span> <span style="color: #0000ff;">'parent_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'model'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'User'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'foreign_key'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">2</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
   <span style="color: #cc66cc;">2</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> Adriana<span style="color: #339933;">,</span> <span style="color: #0000ff;">'parent_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">3</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'model'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'User'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'foreign_key'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">3</span> <span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$users</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$user</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$aro</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$aro</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$user</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Acima estou criando 3 usuÃ¡rios apenas, um para cada grupo. O campo <strong>parent_id</strong> aponta para o grupo que o usuÃ¡rio faz parte. O campo <strong>model</strong>, como o prÃ³prio nome diz, especifica um modelo. No caso, ele guarda o nome do modelo que o id armazenado em <strong>foreign_key</strong> pertence. EntÃ£o no exemplo acima, o id do Pedro na tabela User Ã© 1.</p>
<p>Agora vamos criar algumas ACOs:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$aco</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> aco<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$group</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Post'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$aco</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$aco</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$group</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$actions</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
   <span style="color: #cc66cc;">0</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'index'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'parent_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
   <span style="color: #cc66cc;">1</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'view'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'parent_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
   <span style="color: #cc66cc;">2</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'add'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'parent_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
   <span style="color: #cc66cc;">3</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'delete'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'parent_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
   <span style="color: #cc66cc;">4</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'alias'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'edit'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'parent_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$actions</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$action</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$aco</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$aco</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$action</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>O processo para criaÃ§Ã£o Ã© exatamente o mesmo do utilizado no ARO. Aqui, primeiro criei um grupo com o nome do prÃ³prio controller, assim fica mais fÃ¡cil organizar. Depois, criei uma ACO para cada action do controller e as relacionei com o grupo criado anteriormente.</p>
<p>Se vocÃª nÃ£o definir nenhum tipo de permissÃ£o de acesso, por padrÃ£o, Ã© tudo negado. EntÃ£o vamos definir algumas permissÃµes:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td 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;">Acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allow</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Admins'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'Post'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'*'</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;">Acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allow</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Authors'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'Post'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'*'</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;">Acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deny</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Authors'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'Post/delete'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'*'</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;">Acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deny</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Spammers'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'Post'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'*'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Na primeira linha, dei acesso total Ã  todas as actions do controller Post para os usuÃ¡rios que fizerem parte do grupo Admins. Na segunda linha, dei acesso total tambÃ©m aos autores do blog, mas na terceira eu tirei a permissÃ£o deles de deletar algum post, ou seja, eles podem tudo, menos deletar o texto que escreveram. Assim Ã© mais fÃ¡cil do que ficar fazendo um allow para cada action do controller. Na quarta linha tirei a permissÃ£o de acesso Ã  todas as actions do controller para quem for do grupo spammers.</p>
<p>Para verificar quem tem acesso ou nÃ£o, dentro do seu controller, no mÃ©todo beforeFilter por exemplo, basta fazer o seguinte:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td 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;">Acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">check</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Authors'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'Post/delete'</span> <span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>No nosso caso vai retornar FALSE.</p>
<p>Basicamente Ã© isso. Tem outras coisas interessantes para se trabalhar junto com o ACL, como o <a title="ACL Behavior" href="http://lemoncake.wordpress.com/2007/07/15/using-aclbehavior-in-cakephp-12/" target="_blank">ACLBehavior</a> e o <a title="ACL Management Plugin" href="http://jeff.loiselles.com/wordpress/?p=28" target="_blank">ACL Management Plugin</a>. Uma boa leitura que pode ajudar um bocado Ã© esse <a href="http://aranworld.com/article/161/cakephp-acl-tutorial-what-is-it" target="_blank">tutorial</a> de utilizaÃ§Ã£o que um cara fez pro caso dele, tem atÃ© um sitezinho de exemplo.</p>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2008/09/18/utilizando-o-acl-no-cakephp/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>InstalaÃ§Ã£o bÃ¡sica do Debian 4 (Etch)</title>
		<link>http://blog.cleiver.com/2008/08/30/instalacao-basica-do-debian-4-etch/</link>
		<comments>http://blog.cleiver.com/2008/08/30/instalacao-basica-do-debian-4-etch/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 05:42:04 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=58</guid>
		<description><![CDATA[
HÃ¡ duas semanas estou fazendo um curso de linux. HÃ¡ anos nÃ£o mexia de verdade com o sistema do pinguim entÃ£o estava (e ainda estou, confesso) meio enferrujado, mas agora ando empolgado com ele de novo! EntÃ£o pra quem for meio perdido, que nem eu, segue um passo a passo simples de uma instalaÃ§Ã£o e [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://blog.cleiver.com/wp-content/uploads/2008/08/debian_install.jpg" alt="" width="400" height="164" /></p>
<p>HÃ¡ duas semanas estou fazendo um curso de linux. HÃ¡ anos nÃ£o mexia de verdade com o sistema do pinguim entÃ£o estava (e ainda estou, confesso) meio enferrujado, mas agora ando empolgado com ele de novo! EntÃ£o pra quem for meio perdido, que nem eu, segue um passo a passo simples de uma instalaÃ§Ã£o e configuraÃ§Ã£o bÃ¡sica do Debian 4 &#8220;Etch&#8221;.</p>
<p>Para comeÃ§ar, vocÃª pode baixar a <a title="Debian Netinst" href="http://www.debian.org/distrib/netinst" target="_blank">versÃ£o mÃ­nima</a> (netinst) mais recente no site da prÃ³pria <a title="Debian Linux" href="http://www.debian.org/" target="_blank">Debian</a>. ApÃ³s baixar, basta gravar a imagem em um cd, colocar no drive e dar boot na mÃ¡quina. Na tela de instalaÃ§Ã£o que surgir, digite o seguinte comando para uma instalaÃ§Ã£o grÃ¡fica bÃ¡sica:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #007800;">vga</span>=<span style="color: #000000;">788</span></pre></div></div>

<p>O comando vga=788 cria um buffer de video durante o boot. A instalaÃ§Ã£o Ã© bem simples e auto-explicativa, nÃ£o vou me ater a esses detalhes por enquanto. ApÃ³s concluir a instalaÃ§Ã£o, vocÃª vai ter um sistema extremamente bÃ¡sico e sem nada instalado. EntÃ£o vamos comeÃ§ar algumas configuraÃ§Ãµes iniciais.</p>
<h2><strong>ConfiguraÃ§Ãµes do terminal</strong></h2>
<p>Vamos comeÃ§ar retirando esse beep extremamente irritante que toca quase sempre que vocÃª aperta uma tecla. :P EntÃ£o, abra o arquivo ~/.bashrc e acrescente a seguinte linha no final do arquivo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">setterm</span> <span style="color: #660033;">-bfreq</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-store</span></pre></div></div>

<p>Esse comando desliga o som do beep, se quiser aumentar ou diminuir o barulho, basta alterar o valor de 0. Aproveitando que o arquivo estÃ¡ aberto, acrescente a seguinte linha para incrementar o auto-completar do TAB:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">source</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>bash_completion</pre></div></div>

<p>TambÃ©m Ã© nesse arquivo que vocÃª pode deixar o comando <strong>ls</strong> com resultados coloridos,<br />
bastando descomentar as linhas:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LS_OPTIONS</span>=<span style="color: #ff0000;">'--color=auto'</span>
<span style="color: #7a0874; font-weight: bold;">eval</span> <span style="color: #ff0000;">&quot;<span style="color: #780078;">`dircolors`</span>&quot;</span>
<span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;"><span style="color: #c20cb9; font-weight: bold;">ls</span></span>=<span style="color: #ff0000;">'ls $LS_OPTIONS'</span></pre></div></div>

<p>Eu, particularmente, acrescento o parÃ¢metro <strong>-h</strong> apÃ³s o <strong>&#8211;color=auto</strong>, para que o tamanho dos arquivos seja legÃ­vel por humanos, ficando dessa forma (como se algum outro tipo de animal utiliza-se computadores :P):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LS_OPTIONS</span>=<span style="color: #ff0000;">'--color=auto -h'</span></pre></div></div>

<p>Nesse arquivo Ã© sÃ³ isso. Lembrando que essas alteraÃ§Ãµes vÃ£o afetar somente o usuÃ¡rio com o qual vocÃª realizou a alteraÃ§Ã£o. Para que elas ocorram com todos os usuÃ¡rios do sistema, basta coloca-las no arquivo <strong>/etc/profile</strong>.</p>
<h2><strong>Configurando uma conexÃ£o com a internet via Velox</strong></h2>
<p>Como estamos totalmente desconectados do mundo, o Ãºnico repositÃ³rio disponÃ­vel na lista do apt-get vai ser o prÃ³prio CD-ROM (o instalador comenta a linha do repositÃ³rio da Debian durante a instalaÃ§Ã£o). Para utiliza-lo, execute o seguinte comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">apt-cdrom add</pre></div></div>

<p>Depois disso, vamos instalar o pacote pppoeconf para configurar nossa conexÃ£o.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> pppoeconf</pre></div></div>

<p>Terminando a instalaÃ§Ã£o, basta executar o aplicativo (comando <em>pppoeconf</em>) e responder as perguntas que o programa solicitar. Ele vai criar uma conexÃ£o chamada dsl-provider (no meu caso, pelo menos). Como esse nome Ã© meio longo, vamos renomea-lo para algo melhor e mais fÃ¡cil:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ppp<span style="color: #000000; font-weight: bold;">/</span>peers<span style="color: #000000; font-weight: bold;">/</span>dsl-provider <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ppp<span style="color: #000000; font-weight: bold;">/</span>peers<span style="color: #000000; font-weight: bold;">/</span>velox</pre></div></div>

<p>Com o comando <strong>pon velox</strong>, vocÃª conecta ao seu provedor. JÃ¡ com o <strong>poff</strong> vocÃª desconecta o computador da rede. E com o <strong>plog</strong> vocÃª pode ver o status da conexÃ£o.</p>
<p>Agora que estamos na rede, podemos atualizar o apt-get e instalar os programas que quiser. EntÃ£o abra o arquivo <strong>/etc/apt/sources.list</strong> e descomente as linhas dos repositÃ³rios padrÃ£o. Infelizmente, muitos dos aplicativos que eu quis instalar nÃ£o foram localizados nesses dois repositÃ³rios, mas apÃ³s acrescentar os dois seguintes, nÃ£o tive mais problemas. Basta acrescentar ao final do arquivo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">deb <span style="color: #c20cb9; font-weight: bold;">ftp</span>:<span style="color: #000000; font-weight: bold;">//</span>ftp.us.debian.org<span style="color: #000000; font-weight: bold;">/</span>debian<span style="color: #000000; font-weight: bold;">/</span> stable main contrib non-free
deb http:<span style="color: #000000; font-weight: bold;">//</span>www.backports.org<span style="color: #000000; font-weight: bold;">/</span>debian etch-backports main contrib</pre></div></div>

<p>Depois execute o update (apt-get update) e quando terminar, Ã© sÃ³ comeÃ§ar a instalar seus pacotes. :P De cara instalei 6. Comecei instalando o <a title="Homepage do Vim!" href="http://www.vim.org/" target="_blank">Vim</a> (ninguÃ©m merece o Vi &#8220;puro&#8221;):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">vim</span></pre></div></div>

<p>Depois instalei o logo do Debian que ilustra o inÃ­cio desse post:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> linuxlogo</pre></div></div>

<p>ApÃ³s instalado, basta renomear o arquivo <em>/etc/issue.linuxlogo</em> para <em>/etc/issue</em>. Mas antes, faÃ§a um backup do arquivo existente, nunca se sabe. ;P</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>issue <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>issue.bkp
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>issue.linuxlogo <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>issue</pre></div></div>

<p>Depois disso, instalei o <a title="X.org" href="http://www.x.org/" target="_blank">X.org</a> para poder ter uma interface grÃ¡fica (nunca se sabe quando vai precisar):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> xorg</pre></div></div>

<p>E depois instalei o gerenciador de janelas <a title="Xfce Window Manager" href="http://www.xfce.org/" target="_blank">Xfce</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> xfce4</pre></div></div>

<p>Escolhi ele por ser muito mais leve que o gnome ou o kde. Para inicia-lo, basta executar o comando <strong>startx</strong> e pronto! Se por um acaso seu mouse ficou extremamente &#8220;lento&#8221;, Saia do modo grÃ¡fico e abra o arquivo<em> /etc/X11/xorg.conf</em> e localize o bloco com informaÃ§Ãµes sobre seu mouse. No meu caso, como instalei no notebook, o bloco era o da Synaptics Touchpad. Abaixo da Ãºltima opÃ§Ã£o acrescente a seguinte linha:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Option <span style="color: #ff0000;">&quot;Min Speed&quot;</span> <span style="color: #ff0000;">&quot;0.3&quot;</span></pre></div></div>

<p>Se quiser mais rÃ¡pido, aumente o valor. SenÃ£o, diminua. No final, meu bloco ficou da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Section <span style="color: #ff0000;">&quot;InputDevice&quot;</span>
Identifier    <span style="color: #ff0000;">&quot;Synaptics Touchpad&quot;</span>
Driver        <span style="color: #ff0000;">&quot;synaptics&quot;</span>
Option        <span style="color: #ff0000;">&quot;SendCoreEvents&quot;</span>    <span style="color: #ff0000;">&quot;true&quot;</span>
Option        <span style="color: #ff0000;">&quot;Device&quot;</span>            <span style="color: #ff0000;">&quot;/dev/psaux&quot;</span>
Option        <span style="color: #ff0000;">&quot;Protocol&quot;</span>          <span style="color: #ff0000;">&quot;auto-dev&quot;</span>
Option        <span style="color: #ff0000;">&quot;HorizScrollDelta&quot;</span>  <span style="color: #ff0000;">&quot;0&quot;</span>
Option        <span style="color: #ff0000;">&quot;Min Speed&quot;</span>         <span style="color: #ff0000;">&quot;0.3&quot;</span>
EndSection</pre></div></div>

<p>Salve, feche o arquivo e inicie novamente o modo grÃ¡fico. Pra finalizar, instalei o <a title="Baixe o Firefox!" href="http://www.getfirefox.com" target="_blank">Firefox</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> firefox</pre></div></div>

<p>E tambÃ©m instalei logo o <a title="Flash player" href="http://www.adobe.com/go/gntray_dl_getflashplayer" target="_blank">plugin do Flash Player</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> flashplugin-nonfree</pre></div></div>

<p>&#8220;Resumidamente&#8221;, Ã© isso. =]</p>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2008/08/30/instalacao-basica-do-debian-4-etch/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dicas de Vim</title>
		<link>http://blog.cleiver.com/2008/08/22/dicas-de-vim/</link>
		<comments>http://blog.cleiver.com/2008/08/22/dicas-de-vim/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 21:56:42 +0000</pubDate>
		<dc:creator>Cleiver</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://blog.cleiver.com/?p=38</guid>
		<description><![CDATA[Desde que comecei o curso de linux, to meio viciado nesse editor. Antigamente sÃ³ sabia entrar e sair dele, mas agora que peguei o jeito, nÃ£o custa nada compartilhar, muita gente ainda pode se enrolar um bocado. ;P
Para copiar e colar linhas no vi, basta estar no modo de comando (pressione ESC caso esteja em [...]]]></description>
			<content:encoded><![CDATA[<p>Desde que comecei o curso de linux, to meio viciado nesse editor. Antigamente sÃ³ sabia entrar e sair dele, mas agora que peguei o jeito, nÃ£o custa nada compartilhar, muita gente ainda pode se enrolar um bocado. ;P</p>
<p>Para copiar e colar linhas no vi, basta estar no modo de comando (pressione ESC caso esteja em dÃºvida) e ir para a linha desejada:</p>
<p><strong>yy </strong>= Copia toda a linha<br />
<strong>3yy </strong>= Copia 3 linhas a partir do cursor<br />
<strong>p</strong> = Cola a linha copiada<br />
<strong>5p </strong>= Cola cinco vezes a linha copiada<br />
<strong>dd </strong>= Recorta a linha<br />
<strong>4dd </strong>= Recorta quatro linhas a partir do cursor</p>
<p>Caso vocÃª deseje copiar apenas uma palavra ou trecho da linha, basta entrar no modo visual. Para isso, vÃ¡ para o primeiro caractere do trecho desejado e pressione a tecla <strong>v</strong>, depois, mova o cursor com as teclas de direÃ§Ã£o para selecionar o que vocÃª deseja. ApÃ³s selecionar, basta digitar <strong>y</strong> para copiar, <strong>d</strong> para recortar e <strong>p</strong> para colar.</p>
<p>Caso tenha feito alguma coisa errada, basta pressionar <strong>u</strong> para cada aÃ§Ã£o que vocÃª deseja desfazer. Caso tenha desfeito mais aÃ§Ãµes que o necessÃ¡rio, basta refazer, pressionando <strong>ctrl+r</strong>.</p>
<p>TÃ¡ fazendo um script e deu erro na linha 1387 e tÃ¡ cansado de pressionar a seta pra baixo e pensar na vida? Digite <strong>:1387</strong> e seja feliz. Ou entÃ£o vocÃª quer ir direto pra Ãºltima linha do arquivo mas nÃ£o quer ter que digitar :10000000 e ainda correr o risco de nÃ£o funcionar, basta pressionar <strong>shift+g</strong>.</p>
<p>Se o que vocÃª quer Ã© procurar por uma palavra especÃ­fica no arquivo, basta digitar <strong>/ </strong>seguido da palavra desejada (sem o :), por exemplo: <strong>/todo</strong>. Se a ocorrÃªncia encontrada nÃ£o for a que vocÃª queria, basta ir pressionando <strong>n</strong> atÃ© chegar na que vocÃª quiser, se na pressa vocÃª passou direto pela palavra, basta pressionar <strong>shift+n</strong> que o vi vai voltando para ocorrÃªncias anteriores.</p>
<p>Mas se ao invÃ©s de somente localizar, vocÃª quiser substituir a ocorrÃªncia de uma palavra, basta executar o seguinte comando (supondo que vocÃª queira substituir &#8220;todo&#8221; por &#8220;done&#8221;): <strong>:s/todo/done/</strong>. Sem espaÃ§os e com a barra no final! Mas esse comando funciona somente na linha onde estÃ¡ o cursor. para substituir todas as ocorrÃªncias do texto, basta digitar <strong>:%s/todo/done/g</strong>. Esse <em>g</em> no final do comando que diz que vai trocar <span style="text-decoration: underline;">todas</span> as ocorrÃªncias. Sem ele, o vi troca <span style="text-decoration: underline;">somente a primeira ocorrÃªncia de cada linha</span>. Resumindo entÃ£o: <span style="text-decoration: underline;">Sem</span> o sinal de <strong>%</strong>, troca somente na linha onde estÃ¡ o cursor. <span style="text-decoration: underline;">Com</span> o sinal de <strong>%</strong>, troca em todo o arquivo. <span style="text-decoration: underline;">Sem</span> o <strong>g</strong> no final troca somente a primeira ocorrÃªncia de cada linha. <span style="text-decoration: underline;">Com</span> o <strong>g</strong> no final, troca todas as ocorrÃªncias de cada linha.</p>
<p>Se por algum motivo, no meio da ediÃ§Ã£o do arquivo vocÃª precisar executar algum comando no shell do linux, mas nÃ£o quer fechar o editor nem usar outro terminal, basta digitar o comando desejado dessa forma, por exemplo: <strong>:!date</strong>. O vi vai executar o comando e voltar para a ediÃ§Ã£o do arquivo como se nada tivesse acontecido. Caso vocÃª queira colocar o resultado do comando dentro do seu arquivo, basta colocar o cursor no local desejado para a inserÃ§Ã£o e digitar seu comando com um <em>ponto</em> antes da <em>exclamaÃ§Ã£o</em>, assim: <strong>:.!date</strong>. O vi executarÃ¡ o comando date e escreverÃ¡ a data atual dentro do seu arquivo.</p>
<p>Agora vamos supor que vocÃª queira copiar o conteÃºdo de um outro arquivo dentro do seu. Digite <strong>/split arquivo</strong>. Por exemplo, <strong>:split /etc/motd</strong>. O vi vai dividir a tela em dois blocos e vocÃª poderÃ¡ editar os dois arquivos normalmente. para trocar entre os paineis, basta pressionar <strong>ctrl+ww</strong>. VocÃª pode abrir vÃ¡rios arquivos dessa forma, mas a Ã¡rea de ediÃ§Ã£o de cada um vai diminuindo, claro. :P</p>
<p>Caso vocÃª esteja pensando &#8220;PÃ´, bem que o vi poderia ter abas tambÃ©m, todo mundo tem abas hoje em dia!&#8221; fique feliz, desde a versÃ£o 7 o vi possui esse recurso. Para abrir uma nova aba, basta digitar <strong>:tabnew arquivo</strong>. Para navegar atravÃ©s delas, basta usar os comandos: <strong>:tabnext</strong>, <strong>:tabprev</strong>, <strong>:tabfirst</strong>, <strong>:tablast</strong> ou <strong>:tab n</strong>, onde n Ã© o nÃºmero da tab desejada.</p>
<p>De forma similar, quando vocÃª abrir vÃ¡rios arquivos simultÃ¢neos no vi ($vi arq1 arq2 arq3, por exemplo), para navegar entre esses arquivos basta usar os comandos: <strong>:next</strong>, <strong>:previous</strong>, <strong>:first</strong>, <strong>:last</strong> ou <strong>:3next</strong> ou <strong>:5prev</strong>. Nos dois Ãºltimos casos, o vi vai pular tantos arquivos quanto for o valor do nÃºmero antes do comando (se tiver isso tudo de arquivo, claro).</p>
<p>E finalmente para sair do editor, alÃ©m do famigerado <strong>:wq</strong> para salvar e sair, vocÃª tambÃ©m pode pressionar <strong>shift+zz</strong>.</p>
<p>Dois comandos que eu aconselho colocar direto no arquivo de configuraÃ§Ã£o do Vim para ele jÃ¡ abrir com essas funcionalidades Ã© o syntax highlight e a numeraÃ§Ã£o de linhas.</p>
<p>Para fazer isso, basta editar o arquivo <strong>/etc/vim/vimrc</strong> e descomentar a linha <strong>syntax on</strong> para habilitar o highlight e incluir o comando <strong>set number</strong> para numerar as linhas.</p>
<p>AlÃ©m desses, o Vim possui milhares de outros comandos e formas de fazer essas mesmas aÃ§Ãµes que falei aqui. Para saber mais, basta ler a documentaÃ§Ã£o do programa.</p>


<p>Nenhum post relacionado.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cleiver.com/2008/08/22/dicas-de-vim/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
