<?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>Marcelo Rodrigo &#187; Marcelo Rodrigo</title>
	<atom:link href="http://marcelorodrigo.com/author/marcelo/feed" rel="self" type="application/rss+xml" />
	<link>http://marcelorodrigo.com</link>
	<description>Quer moleza? Senta no pudim!</description>
	<lastBuildDate>Mon, 19 Jul 2010 19:36:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Controllers no Kohana</title>
		<link>http://marcelorodrigo.com/controllers-no-kohana.html</link>
		<comments>http://marcelorodrigo.com/controllers-no-kohana.html#comments</comments>
		<pubDate>Sun, 18 Jul 2010 18:35:05 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=505</guid>
		<description><![CDATA[Um controller é um arquivo que contém uma classe que vai gerenciar todo o fluxo da aplicação.Se você não conhece MVC, é uma boa hora para estudar porque o Kohana é todo MVC. Os controllers comunicam-se diretamente com os models enviando e recebendo informações, muitas das informações recebidas são repassadas as views para serem renderizadas [...]]]></description>
			<content:encoded><![CDATA[<p>Um <strong><em>controller</em></strong> é um arquivo que contém uma classe que vai gerenciar todo o fluxo da aplicação.Se você não conhece <acronym title="Model View Controller">MVC</acronym>, é uma boa hora para <a title="MVC" rel="nofollow" href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" target="_blank">estudar </a>porque o Kohana é todo MVC.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/ModelViewControllerDiagram2.svg/500px-ModelViewControllerDiagram2.svg.png" alt="MVC" width="500" height="228" /></p>
<p>Os <em>controllers</em> comunicam-se diretamente com os <em>models</em> enviando e recebendo informações, muitas das informações recebidas são repassadas as <em>views</em> para serem renderizadas no navegador do usuário, e podem também ser recebidas das <em>views</em> dentro dos controllers para serem processadas pelos <em>models</em> novamente.</p>
<p>Enfim, deu pra perceber que o <strong><em>controller</em></strong> é quem <strong>controla</strong> o fluxo de informações e da aplicação :)<br />
Trabalhar com Controllers no Kohana é muito fácil, vamos ver como:</p>
<h3>Convenções para Controllers</h3>
<ul>
<li> O arquivo deve ser gravado em <strong><em>application/controllers</em></strong></li>
<li> O nome do arquivo deve ter o mesmo nome da classe, em <strong>minúsculo</strong>.<br />
Exemplo: <em>artigos.php</em></li>
<li> O nome da classe deve conferir com o nome do arquivo, iniciada de <em><strong>Controller_</strong> </em>e com a p<strong>rimeira letra em maiúsculas</strong>.<br />
Exemplo: <em>Controller_Artigos</em></li>
<li>A classe deve ser extendida do Controller base (ou de outro controller).<br />
Exemplo: <em>Controller_Artigos extends Controllers</em></li>
<li>Os métodos que serão acessíveis pela URL devem ser públicos e precedidos por <strong>_action</strong>.<br />
Exemplo: <em>public function action_todos()<br />
</em></li>
</ul>
<h3>Acessando e Requisitando um Controller</h3>
<p>Por padrão, o acesso a um controller é feito da seguinte forma:</p>
<pre>http://dominio.com/index.php/<em>&lt;controller&gt;</em>/<em>&lt;action&gt;</em></pre>
<p>Então para acessarmos o controller <strong><em>artigos</em></strong> e a action <strong><em>todos</em></strong>, nosso exemplo ficaria assim:</p>
<pre>http://dominio.com/index.php/<strong><em>artigos</em></strong>/<strong><em>todos
</em></strong></pre>
<h3>Criando um Controller</h3>
<p>Seguindo nosso exemplo, vamos criar um controller <em>artigos</em>:</p>
<pre>application/controllers/artigos.php</pre>
<pre class="brush: php;">class Controller_Artigos extends Controller
{
  public function action_index()
  {
    $this-&gt;request-&gt;response = &quot;A resposta para a vida, o universo e tudo mais é 42!;
  }
}</pre>
<p>Acessando <em>http://dominio.com/index.php/artigos/index</em> (ou <em>dominio.com/artigos/</em> porque a action_index é a padrão, por default) teremos o seguinte resultado:</p>
<pre>A resposta para a vida, o universo e tudo mais é 42!</pre>
<h3>Recebendo Parâmetros via URL</h3>
<p>Como o controller é responsável pelo fluxo de informações dentro da aplicação, uma das grandes utilidades é receber informações. Uma das formas mais simples é via URL. Vamos aprimorar nosso exemplo, solicitando artigos pelo seu número:</p>
<pre class="brush: php;">class Controller_Artigos extends Controller
{
  public function action_index()
  {
    $this-&gt;request-&gt;response = 'A resposta para a vida, o universo e tudo mais é 42!';
  }

  public function action_ver($numero=0)
  {
    // Rotina para pesquisar artigos
    // {...}
    $this-&gt;request-&gt;response = &quot;Você solicitou o artigo número $numero&quot;;
  }
}</pre>
<p>No exemplo acima, acessando <em>http://dominio.com/artigos/ver/12</em> teremos o seguinte retorno:</p>
<pre>Você solicitou o artigo número 12</pre>
<p>Um exemplo mais bacana, somando 2 números passados via URL:</p>
<pre class="brush: php;">class Controller_Artigos extends Controller
{
  public function action_soma($a=0,$b=0)
  {
    $this-&gt;request-&gt;response = &quot;A soma de $a e $b é igual a &quot;.$a+$b;
  }
}</pre>
<p>Acessando <em>http://dominio.com/artigos/soma/40/2</em> temos como retorno:</p>
<pre>A soma de 40 e 2 é igual a 42</pre>
<h3>Funções Privadas em Controllers</h3>
<p>Em determinadas situações precisamos manter algumas funções disponíveis como public mas não queremos que elas sejam acessadas pela URL, neste caso é só não usar o prefixo action_ no nome da function.</p>
<pre class="brush: php;">class Controller_Artigos extends Controller
{
  public function megasena()
  {
    $this-&gt;request-&gt;response = 'Os números da megasena são ...';
  }
}</pre>
<p>E assim se tentarmos acessar <em>http://dominio.com/artigos/megasena</em> não teremos acesso a esta função dentro do controller, como esperado!</p>
<h3>Conclusão</h3>
<p>Nos próximos tutoriais vamos trabalhar com Views, Models e depois a troca de informações entre eles.<br />
Qualquer problema ou dúvida, fique a vontade nos comentários.</p>
<p>Simples, não? É <strong>Kohana</strong>!<br />
E é por isso que eu gosto :)</p>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/controllers-no-kohana.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Windows não encontrou um volume de sistema que atenda aos critérios de instalação</title>
		<link>http://marcelorodrigo.com/windows-nao-encontrou-um-volume-de-sistema-que-atenda-aos-criterios-de-instalacao.html</link>
		<comments>http://marcelorodrigo.com/windows-nao-encontrou-um-volume-de-sistema-que-atenda-aos-criterios-de-instalacao.html#comments</comments>
		<pubDate>Sat, 10 Jul 2010 14:52:57 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Ubuntu / Linux]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=498</guid>
		<description><![CDATA[Se você está tentando instalar um Windows Server, e encontrou o erro &#8230; O Windows não encontrou um volume de sistema que atenda aos critérios de instalação .. e por mais que você tente dedicar uma partição a ele e ele não aceite instalar, sugiro você fazer o boot com o CD Live do Ubuntu, [...]]]></description>
			<content:encoded><![CDATA[<p>Se você está tentando instalar um Windows Server, e encontrou o erro &#8230;</p>
<p><code>O Windows não encontrou um volume de sistema que atenda aos critérios de instalação</code></p>
<p>.. e por mais que você tente dedicar uma partição a ele e ele não aceite instalar, sugiro você fazer o boot com o CD Live do Ubuntu, abrir a partição que deseja usar no gParted e marcar a flag &#8216;boot&#8217; na partição, salve e pronto :)</p>
<p style="text-align: center;"><a title="Bill Gates at CES 2007" href="http://www.flickr.com/photos/27096787@N00/350043329/" target="_blank"><img src="http://farm1.static.flickr.com/133/350043329_f8f70034ea.jpg" border="0" alt="Bill Gates at CES 2007" /></a><br />
<small><a title="Attribution License" href="http://creativecommons.org/licenses/by/2.0/" target="_blank"><img src="http://marcelorodrigo.com/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="Domain Barnyard" href="http://www.flickr.com/photos/27096787@N00/350043329/" target="_blank">Domain Barnyard</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/windows-nao-encontrou-um-volume-de-sistema-que-atenda-aos-criterios-de-instalacao.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netbeans + Tema Twilight + Fonte Monaco</title>
		<link>http://marcelorodrigo.com/netbeans-tema-twilight-fonte-monaco-ttf.html</link>
		<comments>http://marcelorodrigo.com/netbeans-tema-twilight-fonte-monaco-ttf.html#comments</comments>
		<pubDate>Sun, 02 May 2010 18:15:40 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Ubuntu / Linux]]></category>
		<category><![CDATA[monado]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[ttf]]></category>
		<category><![CDATA[twilight]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=449</guid>
		<description><![CDATA[Programar é uma coisa que exige do programador bom conhecimento na linguagem que ele programa. Chega um momento que as coisas começam a se tornar repetitivas e você adota um framework (ou não!) para deixar que tudo o que for chato e repetitivo seja feito por ele. Tudo vai bem até que outro momento você [...]]]></description>
			<content:encoded><![CDATA[<p>Programar é uma coisa que exige do programador bom conhecimento na linguagem que ele programa. Chega um momento que as coisas começam a se tornar repetitivas e você adota um framework (ou não!) para deixar que tudo o que for chato e repetitivo seja feito por ele. Tudo vai bem até que outro momento você pensa em otimizar melhor ainda seu trabalho (ou o seu ambiente de programação) e decide repensar melhor o editor/IDE que usa para programar.</p>
<p>Todo mero mortal programador vai passar por isso, se você está lendo este texto com certeza está ou já esteve próximo esse pensamento. Poupando melhor o seu tempo, ano passado passei por este mesmo período e fiz o dever de casa avaliando inúmeros editores de uso livre/gratuito para minha plataforma de trabalho e &#8230; minha escolha caiu sobre o <strong>NetBeans</strong>.</p>
<p style="text-align: center;"><a title="Rails Code" href="http://www.flickr.com/photos/22290083@N06/2157396025/" target="_blank"><img class="aligncenter" src="http://farm3.static.flickr.com/2375/2157396025_5a492ec362.jpg" border="0" alt="Rails Code" /></a><br />
<small><a title="Attribution-NonCommercial-ShareAlike License" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" target="_blank"><img src="http://marcelorodrigo.com/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="davestfu" href="http://www.flickr.com/photos/22290083@N06/2157396025/" target="_blank">davestfu</a></small></p>
<p>Se você esperava um post te convencendo a usar o NetBeans, se deu mal. Sim, ele tem suporte a edição de CSS, geração quase automática de testes unitários, documentação baseada no phpDocumentor, projetos remotos, refatoração de código, trabalho em equipe com SVN/CVS, autocomplete de funções e variáveis e muitos outros inúmeros recursos.</p>
<div id="attachment_462" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-462" title="Netbeans com Tema Twilight e Fonte Monaco" src="http://marcelorodrigo.com/wp-content/uploads/2010/05/netbeans-twilight.png" alt="" width="600" height="199" /><p class="wp-caption-text">Netbeans com Tema Twilight e Fonte Monaco</p></div>
<p style="text-align: center;">
<p>Gosto muito de usar o NetBeans com uma fonte que vem no Mac, chamada Monaco e o tema Twilight. Porém sempre encontro problemas ao habilitar diversas versões desta fonte por ela não ser Unicode e por ai vai. Neste cenário, eu escrevi este post para ter guardado para o futuro meu setup pessoal para o NetBeans:</p>
<ol>
<li>Instalar o <a title="Download NetBeans" href="http://netbeans.org/downloads/" target="_blank">NetBeans</a> (eu instalo somente a versão PHP no meu Ubuntu)</li>
<li>Instalar o tema <a href="http://dl.dropbox.com/u/31531/marcelorodrigo.com/Netbeans_Twilight_Theme.zip" target="_blank">Twilight for NetBeans</a> (inspirado no disponível para textmate)
<ul>
<li><em>Ferramentas » Opções » Importar</em></li>
</ul>
</li>
<li>Instalar a fonte <a href="http://dl.dropbox.com/u/31531/marcelorodrigo.com/Monaco-convertida.ttf" target="_blank">Monaco Unicode em TTF</a> no Ubuntu
<ul>
<li>Copiar para <em>~/.fonts</em></li>
<li>Executar <em>fc-cache -fv</em></li>
</ul>
</li>
<li>Configurar o NetBeans para usar a fonte Monaco
<ul>
<li><em>Ferramentas  Opções » Fontes &amp; Cores  Sintaxe » Categoria » Padrão</em></li>
</ul>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/netbeans-tema-twilight-fonte-monaco-ttf.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Técnica Pomodoro: foco e produtividade sem procrastinação</title>
		<link>http://marcelorodrigo.com/tecnica-pomodoro-foco-e-produtividade-sem-procrastinacao.html</link>
		<comments>http://marcelorodrigo.com/tecnica-pomodoro-foco-e-produtividade-sem-procrastinacao.html#comments</comments>
		<pubDate>Fri, 30 Apr 2010 18:42:43 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[foco]]></category>
		<category><![CDATA[organização]]></category>
		<category><![CDATA[pomodoro]]></category>
		<category><![CDATA[procrastinação]]></category>
		<category><![CDATA[procrastinar]]></category>
		<category><![CDATA[produtividade]]></category>
		<category><![CDATA[técnica]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=429</guid>
		<description><![CDATA[Se eu falar que a partir de hoje você vai produzir o dobro que produz, trabalhando com períodos de 25 minutos e descansando 5 minutos entre eles, você acredita? Espere, e se eu acrescentar que a cada 4 períodos completados você pode descansar um período também de 25 minutos? Estranho não? Mas basicamente é isso [...]]]></description>
			<content:encoded><![CDATA[<p>Se eu falar que a partir de hoje você vai produzir o dobro que produz, trabalhando com períodos de 25 minutos e descansando 5 minutos entre eles, você acredita? Espere, e se eu acrescentar que a cada 4 períodos completados você pode descansar um período também de 25 minutos?</p>
<p>Estranho não?<br />
Mas basicamente é isso que a <strong>Pomodoro Technique</strong> ensina.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-446" style="margin-top: 6px; margin-bottom: 6px;" title="pomodoro-marcelorodrigo" src="http://marcelorodrigo.com/wp-content/uploads/2010/04/pomodoro-marcelorodrigo.jpg" alt="Pomodoro" width="580" height="160" /></p>
<h3>Facilidade</h3>
<p>Por tempos todos procuramos soluções eficazes para melhorar nossa produtividade, todas elas muito complexas, difíceis de colocar em prática e que no fim acabavam só virando siglas para a nossa sopa de letrinhas.</p>
<p>Há aproximadamente 45 dias venho usando a técnica Pomodoro diariamente quando estou desenvolvendo, e acabei me surpreendendo com a quantidade de pomodoros que são concluídas x interrupções.</p>
<h3>Como Funciona?</h3>
<ul>
<li>No início do dia, reserve 1 pomodoro (25 minutos, lembra?) para organizar seu dia. Parece bobeira <em><span style="text-decoration: line-through;">eu pensei isso</span></em> mas depois você vê que faz muito sentido.</li>
<li>Trabalhe focado por 25 minutos em uma mesma tarefa sem interrupções. Eu falei sem interrupções?</li>
<li>Finalizando seu pomodoro, vá curtir um intervalo de cinco  minutos (Twitter? Yeah!)</li>
<li>Ao final de 4 pomodoros, faça um intervalo mais longo porque ninguém é de ferro. Eu levo isso a sério e uso 1 pomodoro pra descansar (sem interrupções, yeah!)</li>
</ul>
<p style="text-align: center;"><a title="Tomato sauce" href="http://www.flickr.com/photos/29635150@N00/563603670/" target="_blank"><img class="aligncenter" src="http://farm2.static.flickr.com/1149/563603670_ff35abd4b0.jpg" border="0" alt="Tomato sauce" /></a><br />
<small><a title="Attribution-NonCommercial-ShareAlike License" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" target="_blank"><img src="http://marcelorodrigo.com/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="funadium" href="http://www.flickr.com/photos/29635150@N00/563603670/" target="_blank">funadium</a></small></p>
<p>Você precisa de:</p>
<ul>
<li> papel</li>
<li>caneta</li>
<li>algo que marque o tempo</li>
</ul>
<p>A cada pomodoro,<strong> marque um X</strong> ao lado da  tarefa. Muita gente fala em timer de cozinha pra controlar o tempo. Eu gosto de usar o <a href="http://focusboosterapp.com">FocusBooster</a></p>
<h3>Interrupções</h3>
<p>A cada interrupção, anote a tarefa/urgência em questão, e coloque-a numa  lista chamada URGENTES NÃO PLANEJADOS.<br />
Faça um pomodoro com  TODAS estas tarefas, assim que possível, e resolva suas pendências, uma a  uma.</p>
<h3>Vantagens</h3>
<p>Sensação de dever cumprido e um domínio sobre uma coisa difícil de manusear: O SEU TEMPO. Sua percepção sobre o tempo gasto e tempo disponível vai mudar completamente do que você tenha hoje em mente.</p>
<h3>Desvantagens</h3>
<p>Nem todos são adeptos desta técnica, e muitos dias você verá que teve o tripo de interrupções dos pomodoros completados. Invariavelmente você vai trocar o termo &#8220;horas&#8221; por &#8220;pomodoros&#8221; para qualquer atividade que irá calcular tempo necessário.</p>
<h3>Conclusão</h3>
<p>Enfim &#8230; é uma técnica maravilhosa que é fácil de colocar em prática e que no mesmo dia vai te mostrar que é possível ser produtivo em ciclos de 25 minutos, com a sensação de dever cumprido.</p>
<p>No <a href="http://www.pomodorotechnique.com/" target="_blank">site oficial</a> tem materiais disponíveis, como o <a href="http://www.pomodorotechnique.com/resources/cirillo/ThePomodoroTechnique_v1-3.pdf" target="_blank">livro oficial</a>, folha de <a href="http://www.pomodorotechnique.com/downloads/pomodoro_todo.pdf" target="_blank">TODO</a> e o meu preferido <a href="http://www.pomodorotechnique.com/downloads/pomodoro_cheat_sheet.pdf" target="_blank">Cheat Sheet</a>.</p>
<p><em>Ps: Esse post foi escrito num Pomodoro de descanso, agora me dê licença que eu quero completar mais pomodoros :)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/tecnica-pomodoro-foco-e-produtividade-sem-procrastinacao.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Usando Memcache com Kohana PHP</title>
		<link>http://marcelorodrigo.com/memcache-com-framework-kohana-php.html</link>
		<comments>http://marcelorodrigo.com/memcache-com-framework-kohana-php.html#comments</comments>
		<pubDate>Thu, 01 Apr 2010 16:56:09 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=224</guid>
		<description><![CDATA[O Memcache é um sistema de cache de memória distribuída de alta performance, que permite acesso rápido a objetos que são armazenados em seu cache. A utilização vai da criatividade e necessidade do programador, que pode armazenar resultados de consultas, imagens, objetos, códigos para rápido acesso posterior. photo credit: JohnSeb O uso de Memcache normalmente [...]]]></description>
			<content:encoded><![CDATA[<p>O Memcache é um sistema de cache de memória distribuída de alta performance, que permite acesso rápido a objetos que são armazenados em seu cache. A utilização vai da criatividade e necessidade do programador, que pode armazenar resultados de consultas, imagens, objetos, códigos para rápido acesso posterior.</p>
<p style="text-align: center;"><a title="Servers" href="http://www.flickr.com/photos/69875617@N00/3425464/" target="_blank"><img class="aligncenter" src="http://farm1.static.flickr.com/2/3425464_068a1e6124.jpg" border="0" alt="Servers" /></a><br />
<small><a title="Attribution-ShareAlike License" href="http://creativecommons.org/licenses/by-sa/2.0/" target="_blank"><img src="http://marcelorodrigo.com/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="JohnSeb" href="http://www.flickr.com/photos/69875617@N00/3425464/" target="_blank">JohnSeb</a></small></p>
<p>O uso de Memcache normalmente segue um padrão:</p>
<ol>
<li>O aplicativo recebe uma consulta do usuário ou do aplicativo.</li>
<li>O aplicativo verifica se os dados necessários para satisfazer a consulta estão no cache de memória.</li>
<li>Se os dados estiverem no cache de memória, o aplicativo utiliza os dados.</li>
<li>Se os dados não estiverem no cache de memória, o aplicativo consulta o armazenamento de dados e armazena os resultados no cache de memória para solicitações futuras.</li>
</ol>
<h2>Legal, e no Kohana?</h2>
<p>Primeiro passo, vamos copiar o arquivo /system/config/cache.php para /application/config/cache.php<br />
Configure o arquivo para que fique desta forma:</p>
<pre class="brush: php;">
$config['default'] = array(
  'driver'   =&gt; 'memcache',
  'params'   =&gt; '',
  'lifetime' =&gt; 3600,
  'requests' =&gt; 1000
);
</pre>
<p>Você pode alterar os parâmetros como precisa, onde sugiro:</p>
<p>lifetime = 3600 segundos (1h de timeout)<br />
requests = 1000 (mil requisições de timeout)</p>
<h2>E se o MemCache estiver em outro servidor?</h2>
<p>Ai está, uma dica importante! Se você não executa o MemCache no mesmo servidor do Kohana, você precisa alterar o arquivo cache_memcache.php  em application/config. Se você tiver mais de um servidor memcached, você pode adicioná-las ao array $config['servers']. Veja um exemplo:</p>
<pre class="brush: php;">
$config['servers'] = array(
  array(
    'host' =&gt; '127.0.0.1',
    'port' =&gt; 1234,
    'persistent' =&gt; FALSE
  )
);
</pre>
<h2>Exemplos</h2>
<p>Pronto as configurações, agora é a hora tão esperada em usar o cache, e realmente é a etapa <strong>mais fácil</strong>:</p>
<pre class="brush: php;">
// Instancia o cache
$cache = Cache::instance();

// Tentando obter dados do cache
$retorno = $cache-&gt;get('item');

if(!$retorno)
{
  // Dados não retornaram, obtendo dados da origem
  $retorno = ORM::Factory('teste')-&gt;dados();

  // Gravando novo cache
  $cache-&gt;set('item',$retorno);
}
</pre>
<p>Simples, não? É <strong>Kohana</strong> e é por isso que eu gosto!</p>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/memcache-com-framework-kohana-php.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Instalando fontes da Microsoft no Ubuntu</title>
		<link>http://marcelorodrigo.com/instalando-fontes-microsoft-no-ubuntu.html</link>
		<comments>http://marcelorodrigo.com/instalando-fontes-microsoft-no-ubuntu.html#comments</comments>
		<pubDate>Fri, 05 Mar 2010 23:17:58 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Ubuntu / Linux]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[truetype]]></category>
		<category><![CDATA[ttf]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=404</guid>
		<description><![CDATA[Por mais que no Ubuntu temos a disposição o OpenOffice, você ainda vai acabar precisando as fontes TrueType da Microsoft para que os documentos que você criar sejam apresentados corretamente. Para quem desenvolve pra web, ter fontes como Arial, Tahoma e Verdana instaladas são fundamentais, porque são usadas em 90% dos projetos. photo credit: imjustcreative [...]]]></description>
			<content:encoded><![CDATA[<p>Por mais que no Ubuntu temos a disposição o OpenOffice, você ainda vai acabar precisando as fontes TrueType da Microsoft para que os documentos que você criar sejam apresentados corretamente. Para quem desenvolve pra web, ter fontes como Arial, Tahoma e Verdana instaladas são fundamentais, porque são usadas em 90% dos projetos.</p>
<p style="text-align: center;"><a title="100% Helvetica 0% Arial Typographic Poster" href="http://www.flickr.com/photos/49734147@N00/3533598378/" target="_blank"><img class="aligncenter" src="http://farm4.static.flickr.com/3415/3533598378_799c797f93.jpg" border="0" alt="100% Helvetica 0% Arial Typographic Poster" /></a><br />
<small><a title="Attribution-NonCommercial-NoDerivs License" href="http://creativecommons.org/licenses/by-nc-nd/2.0/" target="_blank"><img src="http://marcelorodrigo.com/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="imjustcreative" href="http://www.flickr.com/photos/49734147@N00/3533598378/" target="_blank">imjustcreative</a></small></p>
<p>No Ubuntu, é só instalar o pacote <strong>ttf-mscorefonts-installer</strong> usando o <strong>apt-get:</strong></p>
<pre class="brush: plain;">sudo apt-get install ttf-mscorefonts-installer</pre>
<p>Fontes Truetype que são instaladas neste pacote:</p>
<ul>
<li> Andale Mono</li>
<li>Arial Black</li>
<li>Arial (Bold, Italic, Bold Italic)</li>
<li>Comic Sans MS (Bold)</li>
<li>Courier New (Bold, Italic, Bold Italic)</li>
<li>Georgia (Bold, Italic, Bold Italic)</li>
<li>Impact</li>
<li>Times New Roman (Bold, Italic, Bold Italic)</li>
<li>Trebuchet (Bold, Italic, Bold Italic)</li>
<li>Verdana (Bold, Italic, Bold Italic)</li>
<li>Webdings</li>
</ul>
<p>Após instalar o pacote ttf-mscorefonts-installer, vocẽ precisa limpar e refazer o cache de fontes no seu Ubuntu:</p>
<pre class="brush: plain;">sudo fc-cache -fv</pre>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/instalando-fontes-microsoft-no-ubuntu.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Conhecendo o framework Kohana PHP</title>
		<link>http://marcelorodrigo.com/conhecendo-o-framework-kohana-php.html</link>
		<comments>http://marcelorodrigo.com/conhecendo-o-framework-kohana-php.html#comments</comments>
		<pubDate>Thu, 28 Jan 2010 21:19:13 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=330</guid>
		<description><![CDATA[Kohana é um framework PHP 5 que utiliza orientada a objeto (OOP) e o modelo de arquitetura MVC (Model View Controller). Ele é um framework que é baseado no CodeIgniter e quando algumas coisas não iam bem na evolução do CodeIgniter e a comunidade achou que poderia contribuir de forma efetiva no andamento do projeto de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://marcelorodrigo.com/wp-content/uploads/2010/01/kohana.png"><img class="alignnone size-medium wp-image-337" title="Kohana PHP" src="http://marcelorodrigo.com/wp-content/uploads/2010/01/kohana-300x119.png" alt="Kohana PHP" width="300" height="119" /></a></p>
<p><strong>Kohana</strong> é um framework <strong>PHP 5</strong> que utiliza orientada a objeto (<strong>OOP</strong>) e o modelo de  arquitetura <strong>MVC </strong>(Model View Controller).</p>
<p>Ele é um framework que é baseado no <a href="http://codeigniter.com" target="_blank"><strong>CodeIgniter</strong></a> e quando algumas coisas não iam bem na evolução do CodeIgniter e a comunidade achou que poderia contribuir de forma efetiva no andamento do projeto de forma livre, foi criado o Kohana. No começo ele era chamado de <a href="http://codeigniter.com/forums/viewthread/53347/" target="_blank"><em>Blue Flame</em></a>, e por infringir algumas patentes, posteriormente seu nome foi alterado para Kohana.</p>
<p>Bom, chega de papo e vamos ao que interessa.<br />
<strong>O que o Kohana tem de melhor?</strong></p>
<p><strong><br />
</strong></p>
<p><strong>Liberdade no desenvolvimento</strong></p>
<p>O Kohana é projetado e mantido pela comunidade e não por uma empresa <span style="text-decoration: line-through;">como é o CodeIgniter</span>. O desenvolvimento do Kohana é dirigido por um time de pessoas dedicadas que necessitam de um framework para solucões rápidas e poderosas.<strong> </strong></p>
<p><strong><br />
Praticidade</strong><br />
Nada de precisar ficar configurando bootstraps mirabolosos ou fazendo mil configurações em arquivos XML/YAML/whatever.<br />
Instale, configure pouca coisa e vá trabalhar. O trabalho sujo já foi feito pra você, use o que ele tem de melhor</p>
<p><strong><br />
Strict PHP 5 OOP</strong><br />
PHP4 já era! PHP5 com orientação a objetos oferecem muitos benefícios e maior segurança: visibility protection, carregamento automático de classes, sobrecarregamento, interfaces, classes abstratas e singletons.</p>
<p><strong><br />
Extremamente leve</strong><br />
Kohana não possui dependências de extensões PECL ou bibliotecas da PEAR. Bibliotecas gigantescas e monolíticas são evitadas a favor de otimizar as solucões desenvolvidas.</p>
<p><strong><br />
GET, POST, COOKIE e SESSION funcionam como esperado</strong><br />
Kohana não limita seu acesso aos dados globais, mas oferece filtros e protecão contra XSS (Cross Site Scripting). Ele oferece formas seguras e limpas de acessar estes dados, sem precisar ficar ficar dando voltas no palheiro.</p>
<p><strong><br />
Carregamento automático de classes</strong><br />
Estas são carregadas sob demanda, de acordo com a necessidade da sua aplicação. Sem precisar ficar dando loading em bootstraps, sem precisar ficar declarando em controllers quais classes do framework vá utilizar.</p>
<p><strong><br />
Não existem conflitos de namespace</strong><br />
Todas as classes estão adequadas para permitir componentes com nomes similares, a favor de uma API mais coerente.</p>
<p><strong><br />
Recursos em Cascata / Extensibilidade</strong><br />
Quase todo o Kohana pode ser sobrecarregado por métodos que você mesmo pode escrever sem precisar editar os arquivos do core do framework. Além de permitir qualquer customização, resulta em atualizaçãoes mais seguras e organização de forma transparente no desenvolvimento.</p>
<p><strong><br />
Biblioteca baseada em &#8220;Drivers&#8221; e API consistente</strong><br />
Bibliotecas podem ter diferentes &#8220;drivers&#8221; para manipular diferentes APIs transparentemente. Por exemplo, múltiplas opcões de armazenamento dos dados de sessão estão disponíveis (banco de dados, cookie e nativo), visto que a interface é uniforme. Isso permite que novos &#8220;drivers&#8221; sejam desenvolvidos para bibliotecas de terceiros já existentes, mantendo a API consistente e transparente.</p>
<p><strong><br />
Manipulacão de Eventos</strong><br />
Handlers de Eventos baseados no padrão Observador permitem uma maior customizacão.</p>
<p><strong><br />
Módulos Extras</strong><br />
Com todas as características acima, vários módulos foram escritos por entusiastas e pela comunidade. Hoje o Kohana permite integrações com várias bibliotecas, incluindo qualquer biblioteca do Zend Framework. É o que eu sempre falo: Kohana + Zend Framework = Killer Combo</p>
<p><strong><br />
Simplesmente faça o upload</strong><br />
Kohana não tem necessidade de mil configurações a parte no seu provedor, e executa muito bem em qualquer provedor de hospedagem de respeito que tenha PHP 5, sem paranóias. Desenvolva e faça o upload!</p>
<p><strong><br />
Rápido ciclo de desenvolvimento</strong><br />
Resultados de desenvolvimento rápido em uma resposta mais rápida aos erros do usuário e alterações no software.</p>
<p><strong><br />
Curva de aprendizado pequena</strong><br />
O tempo para aprender a utilizar framework é bem menor do que em relação a outras frameworks. Realmente, isto é incomparável!</p>
<p><strong><br />
E agora?<br />
</strong></p>
<p></p>
<p>Se você gostou do que leu, convido a baixar o <strong>Kohana </strong>e brincar um pouco com ele.<br />
Em poucas horas estará usando ele no seu próximo projeto!<br />
<a title="Site oficial do Kohana" href="http://kohanaphp.com.br/" target="_blank"> http://kohanaphp.com.br</a></p>
<p>Confira também várias publicações da comunidade brasileira no <a title="Planet Kohana Brasil" href="http://planet.kohanaphp.com.br" target="_blank">http://planet.kohanaphp.com.br</a></p>
<p>No próximo post: como instalar e configurar o Kohana<br />
É Kohana! E é por isso que eu gosto!</p>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/conhecendo-o-framework-kohana-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atualizar data e hora automaticamente no Ubuntu</title>
		<link>http://marcelorodrigo.com/atualizar-data-e-hora-automaticamente-no-ubuntu.html</link>
		<comments>http://marcelorodrigo.com/atualizar-data-e-hora-automaticamente-no-ubuntu.html#comments</comments>
		<pubDate>Thu, 31 Dec 2009 13:30:46 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Ubuntu / Linux]]></category>
		<category><![CDATA[ntp]]></category>
		<category><![CDATA[timezone]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=312</guid>
		<description><![CDATA[Ter data e hora ajustados com um servidor de precisão de hora já é um recurso que está disponível a todos, e muito fácil de implementar no Ubuntu (ou qualquer ambiente Gnome), siga os seguintes passos: Sistemas &#62; Administração &#62; Data e Hora Vá em Clique para efetuar alterações &#62; Senha do usuário Em Servidores [...]]]></description>
			<content:encoded><![CDATA[<p>Ter data e hora ajustados com um servidor de precisão de hora já é um recurso que está disponível a todos, e muito fácil de implementar no Ubuntu (ou qualquer ambiente Gnome), siga os seguintes passos:</p>
<ol>
<li><em>Sistemas</em> &gt; <em>Administração</em> &gt; <em>Data e Hora</em></li>
<li>Vá em <em>Clique para efetuar alterações</em> &gt; Senha do usuário</li>
<li>Em <em>Servidores de Horário</em>, clique em <em>Selecionar servidores</em></li>
<li>Adicione as seguintes opções
<pre class="brush: plain;">
br.pool.ntp.org
southamerica.pool.ntp.org
</pre>
</li>
<li>Deixe as duas opções que acabamos de inserir marcadas e feche todas as janelas</li>
</ol>
<p>Porque usar os servidores da ntp.org?<br />
Mais de <a title="Conheça o ntp.org :)" href="http://www.pool.ntp.org/en/" target="_blank">1800 servidores</a> de precisão em tempo espalhados pelo mundo! <a title="Conheça o ntp.org :)" href="http://www.pool.ntp.org/" target="_blank"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/atualizar-data-e-hora-automaticamente-no-ubuntu.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TortoiseGit: Cliente GUI para Git no Windows</title>
		<link>http://marcelorodrigo.com/tortoisegit-cliente-gui-para-git-no-windows.html</link>
		<comments>http://marcelorodrigo.com/tortoisegit-cliente-gui-para-git-no-windows.html#comments</comments>
		<pubDate>Sun, 13 Sep 2009 20:36:55 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=278</guid>
		<description><![CDATA[Eu sempre fui um cara que gostei de utilizar linha de comando, te dá segurança e você realmente sabe o que está acontecendo, você tem o controle da situação. Porém, há momentos em que uma interface GUI te dá muito mais produtividade, isto é fato! Quando utilizo SVN, o TortoiseSVN é uma mão na roda. [...]]]></description>
			<content:encoded><![CDATA[<p>Eu sempre fui um cara que gostei de utilizar linha de comando, te dá segurança e você realmente sabe o que está acontecendo, <strong>você tem o controle da situação</strong>. Porém, há momentos em que uma interface GUI te dá muito mais produtividade, isto é fato!</p>
<p>Quando utilizo SVN, o <strong>TortoiseSVN</strong> é uma mão na roda. Chegou um momento que precisei usar o Git e quem vai me ajudar na produtividade é o <strong>TortoiseGit</strong>.</p>
<p><a href="http://code.google.com/p/tortoisegit/" target="_blank"><img class="aligncenter size-full wp-image-279" title="TortoiseGit" src="http://marcelorodrigo.com/wp-content/uploads/2009/09/tortoise-logo.png" alt="TortoiseGit" width="95" height="55" /></a></p>
<p>Sim, é um port do maravilhoso Tortoise para o Git, e você pode baixar gratuitamente no <a href="http://code.google.com/p/tortoisegit/" target="_blank">site do projeto</a> no Google Code.</p>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/tortoisegit-cliente-gui-para-git-no-windows.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Kohana PHP &#8211; ORM Conventions</title>
		<link>http://marcelorodrigo.com/kohana-php-orm-conventions.html</link>
		<comments>http://marcelorodrigo.com/kohana-php-orm-conventions.html#comments</comments>
		<pubDate>Tue, 01 Sep 2009 14:34:21 +0000</pubDate>
		<dc:creator>Marcelo Rodrigo</dc:creator>
				<category><![CDATA[Kohana]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://marcelorodrigo.com/?p=253</guid>
		<description><![CDATA[No Kohana temos a facilidade de trabalhar com convenções em vez de configurações, isto dá agilidade e comodidade ao desenvolvedor que não precisa ficar configurando inúmeros arquivos de mapeamento de banco de dados para que sua aplicação funcione perfeitamente. Porém, quando vamos trabalhar com databases que não seguem estas convenções (o que pra mim é [...]]]></description>
			<content:encoded><![CDATA[<p>No Kohana temos a facilidade de trabalhar com <a href="http://pt.wikipedia.org/wiki/Conven%C3%A7%C3%A3o_sobre_configura%C3%A7%C3%A3o" target="_blank">convenções em vez de configurações</a>, isto dá agilidade e comodidade ao desenvolvedor que não precisa ficar configurando inúmeros arquivos de mapeamento de banco de dados para que sua aplicação funcione perfeitamente.</p>
<p>Porém, quando vamos trabalhar com databases que não seguem estas convenções (o que pra mim é algo muito comum) ou que já atendem a outros sistemas tambéme e não podem ser modificadas, temos de configurar somente as excessões para que tudo continue funcionando perfeitamente.</p>
<p>Algumas destas convenções, e suas excessões:</p>
<h3>Nomes de tabelas no plural</h3>
<p>Nomes de tabelas devem estar no plural. Por padrão o <a href="http://docs.kohanaphp.com/libraries/orm" target="_blank">ORM</a> obtém o nome da tabela e determina seu plural com ajuda do helper <a href="http://docs.kohanaphp.com/helpers/inflector" target="_blank"><em>inflector</em></a>.<br />
Convenção: Ex: <em>users</em>, <em>invoices</em>.<br />
Excessão: Declarar a propriedade <em>table_name</em></p>
<pre class="brush: php;">protected $table_name = 'usuarios';</pre>
<h3>Models no singular</h3>
<p>Enquanto pela convenção as tabelas no banco devem ter seu nome no plural, o nome do arquivo e do model deve ser no singular.<br />
Convenção: <em>NomedaTabela</em> seguido de <em>_Model</em></p>
<pre class="brush: php;">class User_Model extends ORM {}</pre>
<h3>Autoincrement</h3>
<p>Toda tabela deve ter um campo <em>autoincrement + primary key</em> chamado <strong>id<em><br />
</em></strong> Excessão: No model, declarar a propriedade primary_key</p>
<pre class="brush: php;">protected $primary_key = 'meucampoid';</pre>
<h3>Foreign Keys</h3>
<p>Chaves estrangeiras devem ser nomeadas no banco de dados como <strong>nomeDoModel</strong> seguido de <strong>_id<em><br />
</em></strong> Exemplo: <em>invoice_id</em>, <em>user_id</em><br />
Excessão: No exemplo abaixo, a tabela <em>invoices </em>esteja relacionada a <em>users</em>, porém na tabela <em>invoices </em>a chave estrangeira chame-se<em> user_fk</em> (que não segue o padrão sugerido)</p>
<div id="attachment_268" class="wp-caption alignnone" style="width: 336px"><a href="http://marcelorodrigo.com/wp-content/uploads/2009/09/kohana-orm-fk-exemplo.JPG"><img class="size-full wp-image-268 " title="Relacionamento entre Users e Invoices" src="http://marcelorodrigo.com/wp-content/uploads/2009/09/kohana-orm-fk-exemplo.JPG" alt="Relacionamento entre Users e Invoices" width="326" height="191" /></a><p class="wp-caption-text">Relacionamento entre Users e Invoices</p></div>
<p>No model <em>Invoice_Model</em>, declare a propriedade foreign_key</p>
<pre class="brush: php;">class Invoice_Model extends ORM {
    protected $foreign_key = array('user' =&gt; 'user_fk');
}</pre>
<h3>Tabelas Pivôs</h3>
<p>Tabelas pivôs devem ser nomeadas pelos nomes das tabelas pais na ordem alfabética (legal e organizado não?), nesta forma<em> tabela1_tabela2</em>. Vamos usar como exemplo o relacionamento de muitos-para-muitos entre a tabela <em>users</em> e as tabelas de <em>functions</em>, tabela de junção deve ser nomeada no banco como <em>functions_users</em></p>
<p>Simples, não? É <strong>Kohana</strong>!<br />
E é por isso que eu gosto.</p>
]]></content:encoded>
			<wfw:commentRss>http://marcelorodrigo.com/kohana-php-orm-conventions.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
