<?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>Pedro Jannotti</title>
	<atom:link href="http://www.pedrojannotti.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pedrojannotti.com/blog</link>
	<description>Desenvolvimento Web</description>
	<lastBuildDate>Thu, 14 Apr 2011 12:25:23 +0000</lastBuildDate>
	<language>pt</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Habilitar mod_rewrite</title>
		<link>http://www.pedrojannotti.com/blog/habilitar-mod_rewrite/</link>
		<comments>http://www.pedrojannotti.com/blog/habilitar-mod_rewrite/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 12:25:23 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[redirecionamento]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=310</guid>
		<description><![CDATA[Este post é uma dica para quem utiliza Ubuntu (no meu caso 10.04) e precisa habilitar o mod_rewrite do apache. Se você instalou o seu apache pelo gerenciador de pacotes do linux, seja pelo synaptic ou via apt-get faça o seguinte: sudo cp /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/ Este comando irá copiar o módulo rewrite da pasta de [...]]]></description>
			<content:encoded><![CDATA[<p>Este post é uma dica para quem utiliza Ubuntu (no meu caso 10.04) e precisa habilitar o mod_rewrite do apache.</p>
<p>Se você instalou o seu apache pelo gerenciador de pacotes do linux, seja pelo synaptic ou via apt-get faça o seguinte:</p>
<pre class="brush: bash; title: ;">
sudo cp /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/
</pre>
<p>Este comando irá copiar o módulo rewrite da pasta de módulos disponíveis para os habilitados, depois faça o seguinte:</p>
<pre class="brush: bash; title: ;">
sudo gedit /etc/apache2/sites-available/default
</pre>
<p>Este arquivo que estamos editando, o default, possui as configurações relacionadas a pasta raiz do seu servidor. Para habilitar o mod_rewrite para a raiz encontre a configuração referente a pasta /var/www e altere a linha abaixo:</p>
<blockquote><p>Options Indexes FollowSymLinks MultiViews<br />
AllowOverride None</p></blockquote>
<p>para:</p>
<blockquote><p>Options Indexes FollowSymLinks MultiViews<br />
AllowOverride All</p></blockquote>
<p>Pronto, já é o suficiente para habilitar o mod_rewrite. Agora basta reiniciar o apache:</p>
<pre class="brush: bash; title: ;">
sudo /etc/init.d/apache2 restart
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/habilitar-mod_rewrite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Um pouco mais sobre Ruby</title>
		<link>http://www.pedrojannotti.com/blog/um-pouco-mais-sobre-ruby/</link>
		<comments>http://www.pedrojannotti.com/blog/um-pouco-mais-sobre-ruby/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 02:41:18 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[linguagem]]></category>
		<category><![CDATA[padrão]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=305</guid>
		<description><![CDATA[No artigo anterior nós iniciamos o estudo de Ruby com um pouco de sua história, seu uso e um pouco de sua escrita. Já neste artigo falarei mais sobre sua sintaxe e semântica através de alguns exemplos e imagens. Utilizarei, neste artigo, Ruby na versão 1.8.7 e a IDE NetBeans com suporte à Ruby. Linguagem [...]]]></description>
			<content:encoded><![CDATA[<p>No artigo anterior nós iniciamos o estudo de Ruby com um pouco de sua história, seu uso e um pouco de sua escrita.</p>
<p>Já neste artigo falarei mais sobre sua sintaxe e semântica através de alguns exemplos e imagens.</p>
<p>Utilizarei, neste artigo, Ruby na versão 1.8.7 e a IDE NetBeans com suporte à Ruby.</p>
<div id="attachment_306" class="wp-caption aligncenter" style="width: 318px"><img class="size-full wp-image-306" title="ruby-version" src="http://www.pedrojannotti.com/blog/wp-content/uploads/2011/03/ruby-version.png" alt="" width="308" height="25" /><p class="wp-caption-text">versão do ruby</p></div>
<p style="text-align: center;">
<h2>Linguagem</h2>
<p>Para programar em Ruby você precisa ter em mente o motivo de sua concepção. Ruby foi desenvolvido para ser legível, tanto para programadores como para leigos. Com isso ele possui uma flexibilidade de escrita muito grande, mas vamos começar pelo básico:</p>
<h3>Ponto-e-vírgula</h3>
<p>O ponto-e-vírgula (;) é o separador clássico de instruções, em linguagens tradicionais cada fim de instrução é terminado com ponto-e-vírgula, mas qual a real necessidade disto?</p>
<p>Em geral separamos nossas instruções por quebra de linha. Como o Ruby é uma linguagem que privilegia a leitura, nada mais justo do que permitir que os ponto-e-vírgulas sejam retirados.</p>
<p>No começo pode parecer muito estranho, mas quando você começa a programar um pouco mais na linguagem você começa a pensar como isto não foi adotado em outras linguagens. E isso acontece em várias outras características de Ruby.</p>
<pre class="brush: ruby; title: ;">

minha_string = nil

minha_string = &quot;uma string qualquer&quot;

puts minha_string

# uma string qualquer
</pre>
<p>No código acima, você pode perceber que no fim das instruções não existe ponto-e-vírgula, se você executar o código e a saída será o valor da string instanciada: uma string qualquer.</p>
<p>É claro que você ainda poderá usar o ponto-e-vírgula, caso você tenha a necessidade de colocar várias instruções na mesma linha, depende de sua convenção de código. Você pode codificar da seguinte forma:</p>
<pre class="brush: ruby; title: ;">

minha_string = nil; minha_string = &quot;uma string qualquer&quot;

puts minha_string

# uma string qualquer
</pre>
<h3>Parentesis</h3>
<p>Por ser uma linguagem que tenta se aproximar bastante da linguagem natural as chamadas de método se tornam bastante flexíveis.</p>
<p>No exemplo abaixo criei uma classe Pessoa onde informo o nome e o sobrenome. Abaixo a chamada de método em sua forma normal:</p>
<div id="attachment_307" class="wp-caption aligncenter" style="width: 444px"><img class="size-full wp-image-307" title="class-mothod1" src="http://www.pedrojannotti.com/blog/wp-content/uploads/2011/03/class-mothod1.png" alt="" width="434" height="206" /><p class="wp-caption-text">Trecho de código 1</p></div>
<p>Para melhorar a leitura, podemos retirar os parentesis. Da seguinte forma:</p>
<div id="attachment_308" class="wp-caption aligncenter" style="width: 451px"><a href="http://www.pedrojannotti.com/blog/wp-content/uploads/2011/03/class-method2.png"><img class="size-full wp-image-308" title="class-method2" src="http://www.pedrojannotti.com/blog/wp-content/uploads/2011/03/class-method2.png" alt="" width="441" height="205" /></a><p class="wp-caption-text">Trecho de código 2</p></div>
<p>Viu, muito mais simples desta forma, certo!?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/um-pouco-mais-sobre-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Distribuição de projetos</title>
		<link>http://www.pedrojannotti.com/blog/distribuicao-de-projetos/</link>
		<comments>http://www.pedrojannotti.com/blog/distribuicao-de-projetos/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 01:18:08 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[distribuição]]></category>
		<category><![CDATA[phar]]></category>
		<category><![CDATA[Projeto]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=274</guid>
		<description><![CDATA[Para facilitar a distribuição de sistemas, arquivos e o deploy de aplicações, as linguagens de programação costumam implementar uma forma de “compactação” de arquivos. Os casos mais conhecidos são os jar&#8217;s e war&#8217;s do java para, no caso do jar, executar aplicações e distribuir bibliotecas e o war para facilitar o deploy no servidor web. [...]]]></description>
			<content:encoded><![CDATA[<p>Para facilitar a distribuição de sistemas, arquivos e o deploy de aplicações, as linguagens de programação costumam implementar uma forma de “compactação” de arquivos.</p>
<p>Os casos mais conhecidos são os jar&#8217;s e war&#8217;s do java para, no caso do jar, executar aplicações e distribuir bibliotecas e o war para facilitar o deploy no servidor web.</p>
<p>Também podemos citar os gems do ruby que é uma forma de distribuir bibliotecas e aplicações.</p>
<p>O PHP não é diferente. Na versão 5.3 foi implementado nativamente o suporte aos arquivos phar (coincidência?), antes disso uma extensão da pecl era utilizada para criar os arquivos.</p>
<p>Com os arquivos phar, podemos criar bibliotecas, compactá-las e aproveitar as mesmas em nossos projetos de uma maneira mais clara e inteligente, afinal, em um projeto não precisamos saber onde as classes de terceiros (ou não) estão, apenas precisamos saber que estão lá e como chamá-las para atender nossas necessidades.</p>
<p>Diferente do java em que a IDE, ao fazer o build, automaticamente gera um jar com os fontes e as bibliotecas necessárias (graças ao ant). No PHP temos que criar nosso próprio script para que o phar seja gerado. Em outras palavras, o phar será gerado manualmente. Estes passos podem ser automatizados, claro.</p>
<p>Neste exemplo usarei uma classe simples para gerar o phar, trata-se de uma classe que armazena uma string para encriptação. O código da classe é esse:</p>
<pre class="brush: php; title: ;">
&lt;?php
namespace com\pedrojannotti\model;

/**
 * Description of MD5
 *
 * @access public
 * @package model
 * @subpackage security
 * @version 1.0
 *
 * @author Pedro Jannotti &lt;http://pedrojannotti.com&gt;
 * @see http://pedrojannotti.com
 * @since 13/02/2010
 */
class MD5 {
    private $encriptedString;
    public function __construct($string) {
        $this-&gt;setEncriptedString(md5($string));
    }

    public function getEncriptedString() {
        return $this-&gt;encriptedString;
    }

    private function setEncriptedString($encriptedString) {
        $this-&gt;encriptedString = $encriptedString;
    }
}
</pre>
<p>Bom, com a classe base para o nosso phar pronta, vamos criar agora o script que permite que o arquivo phar seja gerado.</p>
<p>Criarei um arquivo chamado create.php que poderá ser acessado tanto via apache como por linha de comando.</p>
<pre class="brush: php; title: ;">
$phar = new Phar('aplicacao.phar');
$phar-&gt;startBuffering();
$phar-&gt;buildFromDirectory('/var/www/phar1');
$phar-&gt;stopBuffering();
</pre>
<p>O script acima cria um objeto do tipo Phar que recebe em seu construtor o nome do arquivo phar a ser gerado.  A extensão .phar deve ser informada, pois esta compactação também pode gerar arquivos de outros formatos.</p>
<p>A segunda linha do script inicia a gravação iniciando o buffer.</p>
<p>Na terceira linha é onde definimos quais arquivos deveremos incluir no phar. No meu caso, para facilitar, estou criando o meu arquivo phar baseado em um diretório. Utilizando o método buildFromDirectory o objeto busca os outros arquivos de forma recursiva.</p>
<p>A criação do phar pode utilizar vários outros métodos, como addFile, addEmptyDir. Para conhecer todos basta acessar a documentação do phar em <a href="http://php.net/manual/en/book.phar.php" target="_blank">http://php.net/manual/en/book.phar.php</a>.</p>
<p>Após a execução do script o arquivo será gerado. Para incluir o arquivo phar em sua aplicação, basta usar o comando require da seguinte forma:</p>
<pre class="brush: php; title: ;">
require_once 'phar://aplicacao.phar/';
</pre>
<p>Se você executar este arquivo em um browser ou em linha de comando você deverá ver a mensagem “hello world” impressa na tela. Isto acontece pois quando estávamos criando o phar não informamos qual seria o arquivo de inicialização do phar, ou seja, qual arquivo deverá ser chamado ao importar o phar no projeto (bootstrap).</p>
<p>Para fazer isso, nosso script de geração do phar mudará um pouco:</p>
<pre class="brush: php; title: ;">
$phar = new Phar('aplicacao.phar');
$phar-&gt;startBuffering();
$phar-&gt;buildFromDirectory('/var/www/phar1');
$phar-&gt;setDefaultStub('src/main/php/com/pedrojannotti/model/MD5.php');
$phar-&gt;stopBuffering();
</pre>
<p>O stub do phar é o arquivo de boot ao importar o phar, é ele que será chamado ao importar o phar em seu projeto.</p>
<p>Gere novamente o arquivo e tente requerer novamente o arquivo. Você verá que nenhuma mensagem será exibida em tela.</p>
<p>Para usar a classe agora basta instanciá-la:</p>
<pre class="brush: php; title: ;">
&lt;?php
require_once 'phar://aplicacao.phar/';

$md5 = new \com\pedrojannotti\model\MD5(&quot;teste&quot;);
echo $md5-&gt;getEncriptedString();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/distribuicao-de-projetos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução ao Ruby</title>
		<link>http://www.pedrojannotti.com/blog/introducao-ao-ruby/</link>
		<comments>http://www.pedrojannotti.com/blog/introducao-ao-ruby/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 20:40:10 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=247</guid>
		<description><![CDATA[Ruby é uma linguagem de programação que foi desenvolvida nos anos 1990 no Japão. Desde então vem ganhando grande visibilidade, principalmente nos últimos tempos com a grande adesão dos profissionais que trabalham com metodologias ágeis e também de muitos profissionais que trabalham com a linguagem Java. A linguagem Ruby é simples e bastante intuitiva. Sua [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_248" class="wp-caption alignleft" style="width: 310px"><a href="http://www.pedrojannotti.com/blog/wp-content/uploads/2011/02/ruby-language.png"><img class="size-medium wp-image-248" title="ruby-language" src="http://www.pedrojannotti.com/blog/wp-content/uploads/2011/02/ruby-language-300x97.png" alt="" width="300" height="97" /></a><p class="wp-caption-text">Ruby</p></div>
<p>Ruby é uma linguagem de programação que foi desenvolvida nos anos 1990 no Japão. Desde então vem ganhando grande visibilidade, principalmente nos últimos tempos com a grande adesão dos profissionais que trabalham com metodologias ágeis e também de muitos profissionais que trabalham com a linguagem Java.</p>
<p>A linguagem Ruby é simples e bastante intuitiva. Sua sintaxe foi desenvolvida primeiramente para facilitar a leitura do código, tornando dessa forma uma linguagem bastante flexível à escrita.</p>
<p>Ao abrir códigos-fonte Ruby você irá notar que em muitos casos existem ausências de parêntesis e chaves, estruturas de controles mais simples e fáceis de entender, ausência dos famosos ponto-e-vírgulas (;) para término de sentenças. Tudo isto para deixar a linguagem mais parecida com a linguagem do mundo real.</p>
<p>Ruby é uma linguagem totalmente orientada à objetos, desde o mais simples operador tudo gira em torno de objetos:</p>
<div id="attachment_249" class="wp-caption aligncenter" style="width: 404px"><a href="http://www.pedrojannotti.com/blog/wp-content/uploads/2011/02/ruby-lang1.png"><img class="size-full wp-image-249" title="ruby lang1" src="http://www.pedrojannotti.com/blog/wp-content/uploads/2011/02/ruby-lang1.png" alt="" width="394" height="363" /></a><p class="wp-caption-text">Código-fonte Ruby</p></div>
<p>No exemplo acima se pode ver uma string sendo impressa no formato de letra maiúscula (puts imprime a saída). A classe de um número comum (Fixnum) e uma lista de todos os métodos do número, podendo dar destaque aos operadores de soma (+), subtração (-), multiplicação (*), entre outros métodos.</p>
<div id="attachment_250" class="wp-caption alignright" style="width: 196px"><img class="size-full wp-image-250 " title="rails" src="http://www.pedrojannotti.com/blog/wp-content/uploads/2011/02/rails.jpg" alt="" width="186" height="228" /><p class="wp-caption-text">Ruby on Rails</p></div>
<p>No ano de 2005 foi lançada a primeira versão do framework para desenvolvimento web Rails. Esse framework foi fundamental para a grande aceitação da linguagem por toda comunidade. Trouxe consigo um novo padrão de desenvolvimento com sua ideia de “Convention over configuration” (Convenção sobre configuração) que influenciou grande parte das linguagens de programação atual.</p>
<p>Rails ganhou o carisma dos profissionais que trabalham com metodologias ágeis pela sua facilidade e rapidez no desenvolvimento de aplicações web.</p>
<h2>Instalando Ruby</h2>
<p>Ruby é uma linguagem de fácil instalação tanto em ambiente windows como Linux. Como tenho preferência pelo ambiente Linux, instalarei a linguagem e o seu interpretador no Ubuntu 10.04. Utilizarei a versão recomendada da linguagem, a versão 1.8.</p>
<p>No Ubuntu, esta versão do Ruby pode ser encontrada no repositório da distribuição. Então basta usar o comando apt-get install para instalar o Ruby.</p>
<p>Este comando pode ser encontrado também no site da linguagem nas instruções de instalação: <a href="http://www.ruby-lang.org/pt">http://www.ruby-lang.org/pt</a>.</p>
<pre class="brush: bash; title: ;">
sudo apt-get install ruby irb rdoc
</pre>
<p>Para verificar se a instalação foi concluída com sucesso basta digitar no terminal:</p>
<pre class="brush: bash; title: ;">
ruby –version
</pre>
<p>Se for impresso no terminal a versão do Ruby 1.8.x quer dizer que a instalação foi completada com sucesso.</p>
<p>Nos próximos posts falarei mais sobre a programação com Ruby.</p>
<p>Até</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} --> <!--[endif]--></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">[img:logo ruby.png]</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Ruby é uma linguagem de programação que foi desenvolvida nos anos 1990 no Japão. Desde então vem ganhando grande visibilidade, principalmente nos últimos tempos com a grande adesão dos profissionais que trabalham com metodologias ágeis e também de muitos profissionais que trabalham com a linguagem Java.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">A linguagem Ruby é simples e bastante intuitiva. Sua sintaxe foi desenvolvida primeiramente para facilitar a leitura do código, tornando dessa forma uma linguagem bastante flexível à escrita.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Ao abrir códigos-fonte Ruby você irá notar que em muitos casos existem ausências de parêntesis e chaves, estruturas de controles mais simples e fáceis de entender, ausência dos famosos ponto-e-vírgulas (;) para término de sentenças. Tudo isto para deixar a linguagem mais parecida com a linguagem do mundo real.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Ruby é uma linguagem totalmente orientada à objetos, desde o mais simples operador tudo gira em torno de objetos:</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">[print:ruby lang1.png]</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">No exemplo acima se pode ver uma string sendo impressa no formato de letra maiúscula (puts imprime a saída). A classe de um número comum (Fixnum) e uma lista de todos os métodos do número, podendo dar destaque aos operadores de soma (+), subtração (-), multiplicação (*), entre outros métodos.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">No ano de 2005 foi lançada a primeira versão do framework para desenvolvimento web Rails. Esse framework foi fundamental para a grande aceitação da linguagem por toda comunidade. Trouxe consigo um novo padrão de desenvolvimento com sua ideia de “Convention over configuration” (Convenção sobre configuração) que influenciou grande parte das linguagens de programação atual.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Rails ganhou o carisma dos profissionais que trabalham com metodologias ágeis pela sua facilidade e rapidez no desenvolvimento de aplicações web.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">[image:logo rails.png]</span></p>
<h2>Instalando Ruby</h2>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Ruby é uma linguagem de fácil instalação tanto em ambiente windows como Linux. Como tenho preferência pelo ambiente Linux, instalarei a linguagem e o seu interpretador no Ubuntu 10.04. Utilizarei a versão recomendada da linguagem, a versão 1.8.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">No Ubuntu, esta versão do Ruby pode ser encontrada no repositório da distribuição. Então basta usar o comando apt-get install para instalar o Ruby.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Es</span></p>
<p>[img:logo ruby.png]</p>
<p>Ruby é uma linguagem de programação que foi desenvolvida nos anos 1990 no Japão. Desde então vem ganhando grande visibilidade, principalmente nos últimos tempos com a grande adesão dos profissionais que trabalham com metodologias ágeis e também de muitos profissionais que trabalham com a linguagem Java.</p>
<p>A linguagem Ruby é simples e bastante intuitiva. Sua sintaxe foi desenvolvida primeiramente para facilitar a leitura do código, tornando dessa forma uma linguagem bastante flexível à escrita.</p>
<p>Ao abrir códigos-fonte Ruby você irá notar que em muitos casos existem ausências de parêntesis e chaves, estruturas de controles mais simples e fáceis de entender, ausência dos famosos ponto-e-vírgulas (;) para término de sentenças. Tudo isto para deixar a linguagem mais parecida com a linguagem do mundo real.</p>
<p>Ruby é uma linguagem totalmente orientada à objetos, desde o mais simples operador tudo gira em torno de objetos:</p>
<p>[print:ruby lang1.png]</p>
<p>No exemplo acima se pode ver uma string sendo impressa no formato de letra maiúscula (puts imprime a saída). A classe de um número comum (Fixnum) e uma lista de todos os métodos do número, podendo dar destaque aos operadores de soma (+), subtração (-), multiplicação (*), entre outros métodos.</p>
<p>No ano de 2005 foi lançada a primeira versão do framework para desenvolvimento web Rails. Esse framework foi fundamental para a grande aceitação da linguagem por toda comunidade. Trouxe consigo um novo padrão de desenvolvimento com sua ideia de “Convention over configuration” (Convenção sobre configuração) que influenciou grande parte das linguagens de programação atual.</p>
<p>Rails ganhou o carisma dos profissionais que trabalham com metodologias ágeis pela sua facilidade e rapidez no desenvolvimento de aplicações web.</p>
<p>[image:logo rails.png]</p>
<h2>Instalando Ruby</h2>
<p>Ruby é uma linguagem de fácil instalação tanto em ambiente windows como Linux. Como tenho preferência pelo ambiente Linux, instalarei a linguagem e o seu interpretador no Ubuntu 10.04. Utilizarei a versão recomendada da linguagem, a versão 1.8.</p>
<p>No Ubuntu, esta versão do Ruby pode ser encontrada no repositório da distribuição. Então basta usar o comando apt-get install para instalar o Ruby.</p>
<p>Este comando pode ser encontrado também no site da linguagem nas instruções de instalação: <a href="http://www.ruby-lang.org/pt">http://www.ruby-lang.org/pt</a>.</p>
<p>[cmd:$ sudo apt-get install ruby irb rdoc]</p>
<p>Para verificar se a instalação foi concluída com sucesso basta digitar no terminal:</p>
<p>[cmd:$ ruby –version]</p>
<p>Se for impresso no terminal a versão do Ruby 1.8.x quer dizer que a instalação foi completada com sucesso.</p>
<p>Nos próximos posts falarei mais sobre a programação com Ruby.</p>
<p>Até</p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">te comando pode ser encontrado também no site da linguagem nas instruções de instalação: </span><a href="http://www.ruby-lang.org/pt"><span style="font-family: Calibri;">http://www.ruby-lang.org/pt</span></a><span style="font-size: 11pt; font-family: Calibri;">.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;" lang="EN-US">[cmd:$ sudo apt-get install ruby irb rdoc]</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Para verificar se a instalação foi concluída com sucesso basta digitar no terminal:</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">[cmd:$ ruby –version]</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Se for impresso no terminal a versão do Ruby 1.8.x quer dizer que a instalação foi completada com sucesso.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;"> </span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Nos próximos posts falarei mais sobre a programação com Ruby.</span></p>
<p class="MsoBodyText"><span style="font-size: 11pt; font-family: Calibri;">Até</span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/introducao-ao-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sobrecarga de método em php</title>
		<link>http://www.pedrojannotti.com/blog/sobrecarga-de-metodo-em-php/</link>
		<comments>http://www.pedrojannotti.com/blog/sobrecarga-de-metodo-em-php/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 01:41:42 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[método]]></category>
		<category><![CDATA[progrmação]]></category>
		<category><![CDATA[sobrecarga]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=231</guid>
		<description><![CDATA[Sobrecarga é um conceito de polimorfismo, um dos fundamentos da orientação à objetos, ou seja, sobrecarga significa que um elemento pode se comportar como outros e desempenhar várias funções. Sobrecarga é um polimorfismo Ad-hoc, onde vários métodos possuem o mesmo nome mas a sua assinatura é diferente. Para saber mais sobre o conceito de polimorfismo consulte [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;">Sobrecarga é um conceito de polimorfismo, um dos fundamentos da orientação à objetos, ou seja</span>, sobrecarga significa que um elemento pode se comportar como outros e desempenhar várias funções.</p>
<p><em>Sobrecarga é um polimorfismo Ad-hoc, onde vários métodos possuem o mesmo nome mas a sua assinatura é diferente. Para saber mais sobre o conceito de polimorfismo consulte o link: <a href="http://pt.wikipedia.org/wiki/Polimorfismo" target="_blank">http://pt.wikipedia.org/wiki/Polimorfismo</a>.</em></p>
<p>Este é um conceito bastante útil e interessante, sua utilização, porém, gera sempre polêmica e deve ser usado com muito cuidado, pois o uso exagerado pode deixar o seu código complicado de se entender.</p>
<p>A<span style="color: #000000;"> implementação dessa especificação (sobrecarga) da orientação à objetos não é realizado em todas as linguagens e como é de se esperar o PHP também não a implementa, muito por causa de sua natureza bastante dinâmica combinado co</span>m sua tipagem fraca.</p>
<p>Mas então, se esta especificação não é implementada no PHP como poderemos utilizar?</p>
<p><em>Gostaria de lembrar que isto não é nenhuma novidade e já foi largamente abordado em outros blogs e fontes de dados pela internet a fora então, não se decepcionem.</em></p>
<p>Bom, o PHP nos dá três métodos que &#8220;auxiliam&#8221; a criação de uma sobrecarga. Ela não é natural, mas ainda assim pode ser realizada. Os métodos são: <strong>func_get_arg</strong>, <strong>func_get_args</strong>, <strong>func_num_args</strong>.</p>
<h2>func_get_arg</h2>
<p>Esta função permite que você recupere o valor de um argumento passado como parâmetro na chamada do método.</p>
<pre class="brush: php; title: ;">
public function sobrecarga() {
    return $argumento = func_get_arg(0);
}
</pre>
<h2>func_get_args</h2>
<p>Esta função retorna um vetor com todos os argumentos passados como parâmetro na chamada do método.</p>
<pre class="brush: php; title: ;">
public function sobrecarga() {
    var_dump(func_get_args());
}
</pre>
<h2>func_num_args</h2>
<p>Esta função retorna um inteiro que representa a quantidade de argumentos passados como parâmetro ao seu método.</p>
<pre class="brush: php; title: ;">
public function sobrecarga() {
    return $quantidade = func_num_args();
}
</pre>
<h2>Bom, e agora? Vamos à sobrecarga</h2>
<p>Agora que já foram mostrados as funções que serão utilizadas vou mostrar, por código, como se implementa a sobrecarga no PHP.</p>
<p>A sobrecarga que irei mostrar será de dois tipo: sobrecarga por quantidade de parâmetros e sobrecarga por tipo de parâmetros.</p>
<h3>Sobrecarga por quantidade</h3>
<p>Para implementar este tipo de sobrecarga, basta escrever um método (sem argumentos) e na implementação deste método o método <em>func_num_args</em> será chamado para verificarmos com quantos parâmetros estamos trabalhando.</p>
<pre class="brush: php; title: ;">
class Sobrecarga {
    public function sobrecargaUm() {
        if (func_num_args() == 2) {
            $this-&gt;_metodoChamadoComDoisArgumenos(
                func_get_arg(0), func_get_arg(1)
            );
        } else if (func_num_args() == 3) {
            $this-&gt;_metodoChamadoComTresArgumentos(
                func_get_arg(0), func_get_arg(1), func_get_arg(2)
            );
        } else {
            throw new Exception(&quot;Número de argumentos inválido&quot;);
        }
    }
}
$sobrecarga = new Sobrecarga();
$sobrecarga-&gt;sobrecargaUm(&quot;Hello&quot;,&quot;World&quot;);
$sobrecarga-&gt;sobrecargaUm(&quot;Hello&quot;,&quot;World&quot;, &quot;Again&quot;);
</pre>
<h3>Sobrecarga por tipo</h3>
<p>Para implementar este tipo de sobrecarga basta recuperar os argumentos passados por parâmetros e testar o tipo de cada um deles.</p>
<pre class="brush: php; title: ;">
class Sobrecarga {
    public function sobrecargaDois() {
        if (func_num_args() == 1) {
            if (is_numeric(func_get_arg(0)) {
                $this-&gt;_metodoSeArgumentoNumerico(func_get_arg(0));
            } else {
                $this-&gt;_metodoSeArgumentoString(func_get_arg(0));
            }
        } else {
            throw new Exception(&quot;Número de argumentos inválido&quot;);
        }
    }
}
$sobrecarga = new Sobrecarga();
$sobrecarga-&gt;sobrecargaDois(&quot;Hello&quot;);
$sobrecarga-&gt;sobrecargaDois(21);
</pre>
<h2>Devemos usar?</h2>
<p>Bom, como vocês podem notar, isto não é uma implementação natural. Foram utilizados meios para fazer com que a sobrecarga seja válida, a opção para o uso é de quem programa e com certeza a linguagem deve ser aproveitada em todo seu potencial.</p>
<p>Mas ao mesmo tempo, como é bastante perceptível, a implementação de uma sobrecarga deixa o código &#8220;feio&#8221; e difícil de ser compreendido, além de existir a necessidade de fazer vários testes para a chamada de um simples método. Isto faz com que sua aplicação fique mais propensa à erros.</p>
<p>A recomendação em geral é para que cada método possua sua própria assinatura única, este tipo de sobrecarga deve ser usado somente em casos extremamente necessários (isso varia com o bom senso do programador).</p>
<p>Mas fica uma dica importante, em caso de utilização de sobrecarga (ou mesmo sem utilizá-la) comente seu código com docblocks. Já que a assinatura do método não é completa (os argumentos não são descritos), facilita, com a leitura do comentário, descobrir o comportamento do método.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/sobrecarga-de-metodo-em-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primeiro dia do ano</title>
		<link>http://www.pedrojannotti.com/blog/primeiro-dia-do-ano/</link>
		<comments>http://www.pedrojannotti.com/blog/primeiro-dia-do-ano/#comments</comments>
		<pubDate>Sat, 01 Jan 2011 22:18:55 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[Assunto Qualquer]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=229</guid>
		<description><![CDATA[Feliz ano novo para todos que lêem o blog. Sei que estou meio em falta, muito tempo que não posto nada, mas estes tempos tem sido de muito aprendizado, novas linguagens (ruby e java), novas propostas e novas oportunidades. Espero que este novo ano seja muito proveitoso para todos e traga muitos desafios a serem [...]]]></description>
			<content:encoded><![CDATA[<p>Feliz ano novo para todos que lêem o blog.</p>
<p>Sei que estou meio em falta, muito tempo que não posto nada, mas estes tempos tem sido de muito aprendizado, novas linguagens (ruby e java), novas propostas e novas oportunidades.</p>
<p>Espero que este novo ano seja muito proveitoso para todos e traga muitos desafios a serem vencidos, pois sem desafios todos paramos de nos mover e todos queremos evoluir, certo?</p>
<p>Um abraço a todos e prometo que vou tentar postar mais que no ano que passou.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/primeiro-dia-do-ano/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Visualizando a evolução do desenvolvimento</title>
		<link>http://www.pedrojannotti.com/blog/visualizando-a-evolucao-do-desenvolvimento/</link>
		<comments>http://www.pedrojannotti.com/blog/visualizando-a-evolucao-do-desenvolvimento/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 13:27:47 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[code swarm]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=223</guid>
		<description><![CDATA[Em buscas pela internet encontrei um site sobre escalabilidade onde o Edmar Ferreira comenta sobre uma ferramenta que mostra visualmente o desenvolvimento de um projeto de software atráves dos commits em controles de versão. Bem interessante, segue uma pequena prévia do texto dele e o link para seu site: Projetos de desenvolvimento de software são [...]]]></description>
			<content:encoded><![CDATA[<p>Em buscas pela internet encontrei um site sobre escalabilidade onde o Edmar Ferreira comenta sobre uma ferramenta que mostra visualmente o desenvolvimento de um projeto de software atráves dos commits em controles de versão. Bem interessante, segue uma pequena prévia do texto dele e o link para seu site:</p>
<blockquote><p>Projetos de desenvolvimento de software são complexos. Anos de  engenharia de software nos ensinaram que fazer e gerenciar grandes  volumes de código é uma tarefa de grande dificuldade. Um dos motivos  pelos quais desenvolvimento de sotware é uma atividade complexa se deve  ao fato de ser uma atividade social, sim social. Grandes projetos são  construidos pela colaboração de muitos desenvolvedores e os maiores  avanços que em metodologias de software nos últimos anos se originam da  aceitação de que se queremos melhores softwares devemos prestar maior  atenção nas pessoas e não apenas no código.Uma maneira de entendermos a complexidade envolvida é visualizar a  evolução de grandes projetos open source. Os logs de controle de versão  são uma mina de ouro de informações para começarmos a entender as  interações entre os desenvolvedores envolvidos e os projetos.</p>
<p>Code Swarm é um projeto open source para gerar visualizações de  projetos de software pela análise dos logs de controle de versão. veja  alguns exemplos:</p>
<p><a href="http://vimeo.com/1076588">code_swarm &#8211; Apache</a> from <a href="http://vimeo.com/michaelogawa">Michael Ogawa</a> on <a href="http://vimeo.com">Vimeo</a>.</p></blockquote>
<p><iframe src="http://player.vimeo.com/video/1076588" width="400" height="302" frameborder="0"></iframe></p>
<p>Fonte em: http://escalabilidade.com/2010/10/11/visualizando-o-desenvolvimento-de-software/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/visualizando-a-evolucao-do-desenvolvimento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Troncos, ramos e etiquetas: controlando seu projeto</title>
		<link>http://www.pedrojannotti.com/blog/troncos-ramos-e-etiquetas-controlando-seu-projeto/</link>
		<comments>http://www.pedrojannotti.com/blog/troncos-ramos-e-etiquetas-controlando-seu-projeto/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 18:22:50 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[Projeto]]></category>
		<category><![CDATA[branches]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[tags]]></category>
		<category><![CDATA[trunk]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=214</guid>
		<description><![CDATA[Durante o desenvolvimento de um projeto uma grande e importante questão é como lidar com os fontes do projeto e a criação de novas versões. Pensando neste problema é que foram adotadas algumas formas para deixar o desenvolvimento mais simples e separado das versões finais criadas da aplicação. Muita gente utiliza este formato de desenvolvimento [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-220" style="margin-left: 5px; margin-right: 5px;" title="svndirs" src="http://www.pedrojannotti.com/blog/wp-content/uploads/2010/09/svndirs-209x300.png" alt="" width="209" height="300" />Durante o desenvolvimento de um projeto uma grande e importante questão é como lidar com os fontes do projeto e a criação de novas versões.</p>
<p>Pensando neste problema é que foram adotadas algumas formas para deixar o desenvolvimento mais simples e separado das versões finais criadas da aplicação.</p>
<p>Muita gente utiliza este formato de desenvolvimento e é o padrão utilizado por diversas empresas do setor e também o padrão de versionamento do google code. Para quem não conhece clique no link: <a href="http://code.google.com" target="_blank">code.google.com</a>.</p>
<p>Este padrão de desenvolvimento trata-se da separação de toda criação em 3 simples pastas: trunk, tags e branches ou tronco, etiqueta e ramo como está descrito no título do post.</p>
<p>O que é para que servem estas pastas está descrito logo abaixo:</p>
<p><strong>branches:</strong> branches (ramos) é utilizado para o desenvolvimento livre, é um espaço onde você pode pegar o projeto que está desenvolvendo e aplicar novas idéias para ver no que acontece, pode ser fora do escopo do projeto inclusive. Normalmente são modificações feitas pelo próprio programador com funcionalidades que acreditam ser úteis ou pretendem testar em um projeto.</p>
<p><strong>trunk: </strong>trunk (tronco) é utilizado quando o desenvolvimento do branches (ou não) já se torna mais sério ou atigindo mais o escopo do projeto. São versões, digamos, &#8220;mais profissionais&#8221; onde a idéia da implementação já está melhor definida e existe um caminho a seguir.</p>
<p><strong>tags:</strong> tags (etiqueta) é destinado ao código-fonte final, a aplicação que está rodando no ambiente de produção do cliente. Esta versão deve ficar inalterada assim que uma nova versão é lançada, pois este representa o histórico de desenvolvimento da aplicação e não é destinada ao desenvolvimento.</p>
<h2>Tags, trunk e branches na prática</h2>
<p>Na prática esta estrutura de pastas são combinadas à um software que controla as versões geradas no sistema, existem vários no mercado, porém o que desponta é o Subversion. Para que não conhece: <a href="http://subversion.apache.org/" target="_blank">http://subversion.apache.org/</a>.</p>
<p>Este software mapeia toda o seu código-fonte e salva em um repositório, quando você está em ambiente de desenvolvimento você só mexe em uma cópia de trabalho e depois envia ao servidor, o que torna bem mais simples o desenvolvimento colaborativo de aplicações.</p>
<p>Em outro post falarei mais sobre o controle de versão e seus principais comandos e funções.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/troncos-ramos-e-etiquetas-controlando-seu-projeto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Command Pattern</title>
		<link>http://www.pedrojannotti.com/blog/command-pattern/</link>
		<comments>http://www.pedrojannotti.com/blog/command-pattern/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 17:36:22 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=196</guid>
		<description><![CDATA[Command é um padrão de projeto comportamental utilizado para melhorar o fluxo da aplicação encapsulando as requisições feitas como objetos. No command não é importante como os objetos são chamados, pois todos os objetos são parametrizados implementando uma interface OO. Implementando Command em PHP A implementação do command é bem simples, seguindo os moldes da [...]]]></description>
			<content:encoded><![CDATA[<p>Command é um padrão de projeto comportamental utilizado para melhorar o fluxo da aplicação encapsulando as requisições feitas como objetos.</p>
<p>No command não é importante como os objetos são chamados, pois todos os objetos são parametrizados implementando uma interface OO.</p>
<h2>Implementando Command em PHP</h2>
<p>A implementação do command é bem simples, seguindo os moldes da arquitetura MVC ele estará situado no controller e cada ação será chamado por um objeto que implementa uma interface Action.</p>
<h3>Interface:</h3>
<pre class="brush: php; title: ;">
&lt;?php
interface Action {
    public function execute();
}
</pre>
<p>Esta interface é responsável por parametrizar todas as ações do controller. Já que como não é importante saber sobre a instanciação da classe nós precisamos, ao menos, ter um ponto de partida padrão para que seja chamada nossa ação.</p>
<p>Esta nossa interface define o escopo da classe que implementará a interface, isto quer dizer que sempre que criarmos uma classe que implementa Action, a classe deverá possuir o método público execute().</p>
<h3>Ação:</h3>
<pre class="brush: php; title: ;">
&lt;?php
require_once 'Action.php';

class NovoUsuarioAction implements Action {
    public function execute() {
        // implementação da ação do método execute
        require_once 'view/FormNovoUsuario.php';
    }
}
</pre>
<p>Nossa classe que implementa o método execute realiza uma ação qualquer de fluxo e chama uma view correspondente.</p>
<h3>Instanciando e controlando o fluxo das Actions</h3>
<p>Agora vamos ver como faremos para instanciar nossas actions. Volto a repetir que como as actions são instanciadas não é importante, elas serão instanciadas automaticamente durante a execução da aplicação, mas, por não ser importante como são instanciadas, precisamos estabelecer um padrão para uma instanciação automática.</p>
<p>Para fazer isto vamos implementar uma classe Command (neste exemplo).</p>
<pre class="brush: php; title: ;">
&lt;?php
class Command {
    public function __construct($action) {
        require_once $action.'Action.php';
        $action .= 'Action';
        $obj = new $action;
        $obj-&gt;execute();
    }
}
</pre>
<p>Como podemos observar, a nossa classe Command recebe uma action e é ela que é responsável por fazer um require importando a classe e também instanciando e executanto o método execute que foi implementado anteriormente.</p>
<p>Para a action ser instanciada precisamos passar ao Command a action que deverá ser realizada, podemos fazer isto no index.php através de uma query string:</p>
<pre class="brush: php; title: ;">
&lt;?php
require_once 'Command.php';

$action = $_GET['action'];
$command = new Command($action);
</pre>
<p>Desta forma então, quando acessarmos a url http://seu.domínio/index.php?action=NovoUsuario a aplicação instanciará automaticamente nossa action, realizando as ações determinadas e chamando a view específica.</p>
<p>Neste caso estou utilizando a super-global $_GET para pegar a query string, para uma melhor segurança você poderia utilizar os filtros do php para sanitizar esta string e evitar problemas com quebra de segurança. Se você não conhece estas funções, basta dar uma olhada no manual do PHP na parte de <a href="http://php.net/manual/en/book.filter.php" target="_blank">Data Filtering</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/command-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problema com geração do Feed do WordPress</title>
		<link>http://www.pedrojannotti.com/blog/problema-com-geracao-do-feed-do-wordpress/</link>
		<comments>http://www.pedrojannotti.com/blog/problema-com-geracao-do-feed-do-wordpress/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 15:31:37 +0000</pubDate>
		<dc:creator>Pedro Jannotti</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[feed]]></category>

		<guid isPermaLink="false">http://www.pedrojannotti.com/blog/?p=177</guid>
		<description><![CDATA[Recentemente tive um problema para conseguir gerar o feed do wordpress. Ao acessar o xml do feed era acusado um problema na geração devido à um espaço antes da marcação xml. Existem plugins próprios para este tipo de verificação e algumas técnicas disponíveis na internet para retirar este espaço. Nenhuma destas alternativas deu certo. A [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente tive um problema para conseguir gerar o feed do wordpress.</p>
<p>Ao acessar o xml do feed era acusado um problema na geração devido à um espaço antes da marcação xml.</p>
<p>Existem plugins próprios para este tipo de verificação e algumas técnicas disponíveis na internet para retirar este espaço. Nenhuma destas alternativas deu certo.</p>
<p>A solução para este problema esta no próprio arquivo do tema do wordpress, mais precisamente no functions.php.</p>
<p>O problema eram sucessões de tags php abrindo e fechando (o problema era na tag de fechamento), como é documentado pelo PHP o fechamento de tag php pode acabar gerando um caracter em branco que, no meu caso, estava dando problema na geração do feed.</p>
<p>Bastou normalizar este arquivo que o feed voltou a ser gerado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedrojannotti.com/blog/problema-com-geracao-do-feed-do-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

