<?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>Edwilson Sousa</title>
	<atom:link href="http://edwilson.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://edwilson.com.br</link>
	<description></description>
	<lastBuildDate>Fri, 11 May 2012 02:46:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Cotação do dólar com C#</title>
		<link>http://edwilson.com.br/2012/05/cotacao-do-dolar-com-c/</link>
		<comments>http://edwilson.com.br/2012/05/cotacao-do-dolar-com-c/#comments</comments>
		<pubDate>Fri, 11 May 2012 02:28:01 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Desenvolvimento]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=218</guid>
		<description><![CDATA[Há alguns dias precisei desenvolver um pequeno programa para um trabalho da faculdade, nesse programa (que basicamente era uma calculadora) o meu desafio era encontrar o valor do dólar. Encontrei um site interessante que disponibiliza um XML com a cotação, o código, disponibilizado por Felipe Olivaes, pode ser encontrado na República Virtual, onde também são [...]]]></description>
			<content:encoded><![CDATA[<p>Há alguns dias precisei desenvolver um pequeno programa para um trabalho da faculdade, nesse programa (que basicamente era uma calculadora) o meu desafio era encontrar o valor do dólar.</p>
<p>Encontrei um site interessante que disponibiliza um XML com a cotação, o código, disponibilizado por Felipe Olivaes, pode ser encontrado na <a title="Cotação - Exemplos" href="http://www.republicavirtual.com.br/cotacao/exemplos.php" target="_blank">República Virtual</a>, onde também são encontrados alguns outros serviços interessantes, como busca de CEP e alguns utilitários de manipulação de texto.</p>
<p>Infelizmente, o código não segue o padrão de um webservice, com uma descrição WSDL, o que inviabiliza o uso em alguns sistemas, então resolvi procurar uma outra solução. Depois de algumas buscas acabei encontrando a informação que precisava no primeiro lugar que deveria ter buscado, no site do Banco Central. O BACEN disponibiliza um webservice com informações completas sobre a cotação do dólar, além de possiblitar a consulta por séries anteriores. Você encontra o wsdl do webservice nesse link: <a href="https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl" target="_blank">https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl<span id="more-218"></span></a></p>
<p>Para utilizar o webservice do BACEN, adicone uma referencia de projeto para a WSDL acima, o Visual Studio automaticamente irá obter as informações sobre os métodos disponibilizados no webservice, após isso precisamos apenas utilizá-lo.</p>
<p><a href="http://edwilson.com.br/wp-content/uploads/add_reference.jpg"><img class="aligncenter size-full wp-image-223" title="add_reference" src="http://edwilson.com.br/wp-content/uploads/add_reference.jpg" alt="" width="250" height="105" /></a></p>
<p>Veja abaixo um exemplo de código.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">  <span style="color: #0600FF; font-weight: bold;">try</span>
  <span style="color: #008000;">&#123;</span>
    var webservice <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> FachadaWSSGSClient<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    var valores <span style="color: #008000;">=</span> webservice<span style="color: #008000;">.</span><span style="color: #0000FF;">getUltimosValoresSerieVO</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">1</span>, <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    var ultimo <span style="color: #008000;">=</span> valores<span style="color: #008000;">.</span><span style="color: #0000FF;">valores</span><span style="color: #008000;">&#91;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
    MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;O dólar agora vale: &quot;</span> <span style="color: #008000;">+</span> ultimo<span style="color: #008000;">.</span><span style="color: #0000FF;">svalor</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #008000;">&#125;</span>
  <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception exception<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
    MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>exception<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #008000;">&#125;</span></pre></div></div>

<p>Observe que passamos 1 e 1 como parametros do método getUltimosValoresSerieVO(), esses parametros representam a quantidade de valores que você deseja obter, como nesse exemplo apenas o último me interessa, estou buscando apenas do valor 1 até o valor 1. O array valores nesse momento possui a última cotação disponível (na posição 0), sinta-se à vontade para utilizar o webservice para obter também outras informações. Apesar de possuir algumas limitações (como um limite de 20 valores ao obter a cotação), o este webservice do Banco Central é muito útil, e simples de utilizar, sem falar que vem da fonte mais confiável possível. <img src='http://edwilson.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/05/cotacao-do-dolar-com-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CRUD com Zend Framework</title>
		<link>http://edwilson.com.br/2012/04/crud-com-zend-framework/</link>
		<comments>http://edwilson.com.br/2012/04/crud-com-zend-framework/#comments</comments>
		<pubDate>Sat, 28 Apr 2012 22:54:46 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=197</guid>
		<description><![CDATA[Um dos grandes benefícios de utilizar um framework para desenvolver um projeto PHP é o gerenciamento de banco de dados, no ZF esse tipo de tarefa fica extremamente simples e traz benefícios como a possibilidade de trabalhar com vários tipos de banco de dados sem ser necessário fazer grandes alterações no código. Nesse exemplo, irei [...]]]></description>
			<content:encoded><![CDATA[<p>Um dos grandes benefícios de utilizar um framework para desenvolver um projeto PHP é o gerenciamento de banco de dados, no ZF esse tipo de tarefa fica extremamente simples e traz benefícios como a possibilidade de trabalhar com vários tipos de banco de dados sem ser necessário fazer grandes alterações no código.</p>
<p>Nesse exemplo, irei utilizar o arquivo de configuração para conectar à uma base de dados MySQL, em caso de dúvidas sobre arquivos de configuração, leia o <a title="Hello World com Zend Framework" href="http://edwilson.com.br/2012/01/hello-world-com-zend-framework/" target="_blank">post anterior</a>.</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">; /application/configs/application.ini</span>
database.adapter <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> pdo_mysql</span>
 database.params.host <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 127.0.0.1</span>
 database.params.username <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> usuario</span>
 database.params.password <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 123</span>
 database.params.dbname <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> bd_teste</span></pre></div></div>

<p><span id="more-197"></span>Após inserir as informações no arquivo .ini, o próximo passo é tornar essas informações disponíveis para toda a aplicação, para isso usaremos o componente Zend_Registry.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// /application/Bootstrap.php</span>
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> _initDb<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Config_Ini<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'configs/application.ini'</span><span style="color: #339933;">,</span> APPLICATION_ENV<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Zend_Registry<span style="color: #339933;">::</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'db'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>database<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span></pre></div></div>

<p>No Bootstrap podemos executar comandos no momento da inicialização de cada componente do Zend Framework, as funções _init* são responsáveis por isso. Nesse exemplo, estamos obtendo as configurações que foram definidas no arquivo application.ini e tornando-as disponíveis no Zend_Registry, para que possamos utilizar na nossa aplicação.</p>
<p>Agora, como realizar as tarefas básicas de manipulação de banco de dados nos nossos controllers? Eis a resposta:</p>
<p>Primeiramente, precisamos obter as informações do registro. Sempre que precisar manipular banco de dados em uma action, você deve criar uma instancia de Zend_Db.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// /application/controllers/indexController.php</span>
    <span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> Zend_Db<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span>Zend_Registry<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'db'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>adapter<span style="color: #339933;">,</span> Zend_Registry<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'db'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>params<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Observe que utilizo o factory do Zend_Db, e passamos como parâmetro o tipo de banco de dados (pdo_mysql) que foi definido no arquivo .ini e os parametros de conexão.</p>
<p>Agora, supondo que temos uma tabela chamada produtos, com os seguintes campos: id, nome, fabricante e preco. iremos inserir um registro nessa tabela, veja o exemplo completo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// /application/controllers/indexController.php</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> IndexController <span style="color: #000000; font-weight: bold;">extends</span> Zend_Application_Action<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> indexAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> Zend_Db<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span>Zend_Registry<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'db'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>adapter<span style="color: #339933;">,</span> Zend_Registry<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'db'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>params<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$db</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>insert<span style="color: #009900;">&#40;</span>
      <span style="color: #0000ff;">'produtos'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'nome'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'Lumia 800'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'fabricante'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'Nokia'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'preco'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'1799.00'</span>
      <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A função insert() recebe como parâmetro uma string com o nome da tabela e um array associativo com os dados a inserir, o código acima é equivalente à seguinte expressão SQL:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> produtos <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;nome&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;fabricante&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;preco&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Lumia 800&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;Nokia&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;1799.00&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>Com as funções de update, delete e select, podemos utilizar um importante recurso chamado de binding, que consiste basicamente em utilizar o caractere curinga ? como parâmetro, isso permite que o próprio ZF se encarregue de tratar as entradas  da forma apropriada.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$id_editar</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>
  update<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;produtos&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;preco&quot;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">&quot;1699.00&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
  <span style="color: #0000ff;">&quot;id = ?&quot;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$id_editar</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O código abaixo seria equivalente à seguinte expressão SQL:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">UPDATE</span> produtos <span style="color: #993333; font-weight: bold;">SET</span> <span style="color: #66cc66;">&#40;</span>preco <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;1699.00&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #66cc66;">&#40;</span>id <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>Método delete:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$id_excluir</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>
  delete<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;produtos&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;id = ?&quot;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$id_excluir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Com a expressão select, a sintaxe não muda, exceto pelo fato de que teremos de atribuir o resultado para uma variável, e passar esses dados para a camada view da nossa aplicação.<br />
Você pode escolhar que formato deseja obter os dados (array associativo, objeto, string, etc), veja os exemplos a seguir:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$query_select</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$db</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>select<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>
  from<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;produtos&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>
  where<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;preco &amp;gt; ?&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;999.00&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//Nesse momento a variável $query_select = &quot;SELECT * FROM produtos WHERE preco &amp;gt; &quot;999.00&quot;</span>
<span style="color: #666666; font-style: italic;">//O próximo passo é atribuir o resultado a uma variável</span>
<span style="color: #000088;">$resultados</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$db</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>fetchAll<span style="color: #009900;">&#40;</span><span style="color: #000088;">$$query_select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//Agora passamos o array $resultados para a camada view:</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>view<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>resultados <span style="color: #339933;">=</span> <span style="color: #000088;">$resultados</span><span style="color: #339933;">;</span></pre></div></div>

<p>Para mais informações e exemplos de querys mais complexas, visite o <a href="http://framework.zend.com/manual/en/zend.db.adapter.html" target="_blank">manual oficial do Zend Framework</a>, ou deixe sua dúvida nos comentários abaixo, nos vemos no próximo artigo. <img src='http://edwilson.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/04/crud-com-zend-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Love is in the air</title>
		<link>http://edwilson.com.br/2012/02/love-is-in-the-air/</link>
		<comments>http://edwilson.com.br/2012/02/love-is-in-the-air/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 02:36:55 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Internet Explorer 9]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=190</guid>
		<description><![CDATA[Vejam esse interessante teste de performance que a galera do IE9 fez em homenagem ao dia dos namorados (Valentine´s day).. O amor está no ar, pelo menos lá nos EUA..  ]]></description>
			<content:encoded><![CDATA[<p>Vejam esse interessante <a title="Love is in the air" href="http://ie.microsoft.com/testdrive/performance/loveisintheair/" target="_blank">teste de performance</a> que a galera do IE9 fez em homenagem ao dia dos namorados (Valentine´s day).. O amor está no ar, pelo menos lá nos EUA..</p>
<p style="text-align: center;"> <a href="http://ie.microsoft.com/testdrive/performance/loveisintheair/"><img class="aligncenter  wp-image-191" title="ie9" src="http://edwilson.com.br/wp-content/uploads/ie9.jpg" alt="" width="428" height="350" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/02/love-is-in-the-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Fourth Screen</title>
		<link>http://edwilson.com.br/2012/02/the-fourth-screen/</link>
		<comments>http://edwilson.com.br/2012/02/the-fourth-screen/#comments</comments>
		<pubDate>Sat, 11 Feb 2012 01:37:52 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Nokia]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=187</guid>
		<description><![CDATA[Navegando pela internet encontrei esse vídeo muito interessante, um comercial de 2008 da Nokia. Na ocasião a Nokia estava lançando os celulares da Série N (Nseries), mas o interessante mesmo é ver como a Nokia tratou nesse vídeo a evolução das tecnologias, mostrando como elas tem mudado a forma de interação na sociedade. Apesar desse [...]]]></description>
			<content:encoded><![CDATA[<p>Navegando pela internet encontrei esse vídeo muito interessante, um comercial de 2008 da Nokia.</p>
<p>Na ocasião a Nokia estava lançando os celulares da Série N (Nseries), mas o interessante mesmo é ver como a Nokia tratou nesse vídeo a evolução das tecnologias, mostrando como elas tem mudado a forma de interação na sociedade.</p>
<p>Apesar desse vídeo ser de apenas 4 anos atrás, não deixa de ser nostaugico, afinal a tecnologia evoluiu pra caramba de 2008 pra cá... Espero que você goste <img src='http://edwilson.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: center;"><iframe src="http://www.youtube.com/embed/-Da6apABBJE" frameborder="0" width="560" height="315"></iframe></p>
<p>&nbsp;</p>
<p>/p</p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/02/the-fourth-screen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Você conhece o Less Framework?</title>
		<link>http://edwilson.com.br/2012/02/voce-conhece-o-less-framework/</link>
		<comments>http://edwilson.com.br/2012/02/voce-conhece-o-less-framework/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 01:49:32 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Análises]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Desenvolvimento Mobile]]></category>
		<category><![CDATA[Frameworks]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=179</guid>
		<description><![CDATA[Trata-se de mais uma ferramenta que existe para facilitar a nossa vida e ajudar a tornar o mundo um lugar melhor para se viver... O Less Framework basicamente é um framework (¬¬ jura ?) CSS que torna mais simples o desenvolvimento de layouts para diversos tamanhos de tela, com ele você pode tornar a visualização das [...]]]></description>
			<content:encoded><![CDATA[<p>Trata-se de mais uma ferramenta que existe para facilitar a nossa vida e ajudar a tornar o mundo um lugar melhor para se viver... <img src='http://edwilson.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>O Less Framework basicamente é um framework (¬¬ jura ?) CSS que torna mais simples o desenvolvimento de layouts para diversos tamanhos de tela, com ele você pode tornar a visualização das páginas do seu site otimizada tanto para telas grandes, com resoluções acima de 1280 x 1024 quanto para telas de dispositivos móveis (como meu pobre celular com resolução de 240x320 pixels).</p>
<p style="text-align: center;"><a href="http://edwilson.com.br/wp-content/uploads/lessframework.jpg"><img class=" wp-image-180  aligncenter" title="lessframework" src="http://edwilson.com.br/wp-content/uploads/lessframework.jpg" alt="Less Framework" width="404" height="221" /></a></p>
<p><span id="more-179"></span>Com seu sistema em forma de grade dividido em 13 colunas o Less Framework torna extremamente simples a reutilização da composição original do website para reorganizar os elementos quando a tela em que for visualizada não comportar as 13 colunas, em situações em que não é necessária uma interface completamente diferente para dispositivos móveis, o Less Framework é uma excelente alternativa.</p>
<p>Para browsers antigos, como o IE6, o Less não reconhece corretamente o tamanho da tela e exibe o padrão de 768 pixels, ou 9 colunas, mas para browsers recentes, incluindo o navegador do Android, Opera Mobile, Opera Mini, e Internet Explorer 9 Mobile as media querys do CSS3 funcionam e fazem a mágica acontecer.</p>
<p>Com o Less Framework matamos uma ninhada de coelhos com uma cajadada só, e utilizamos na web o conceito WORA (Write Once, Run Anwhere), famoso entre quem desenvolve software.</p>
<p>Para quem quiser conhecer mais, visite o <a title="Less Framework 3" href="http://lessframework.com/v3/" target="_blank">site do Less Framework</a>, sugiro que você veja primeiro a base da versão 3, e quando compreender passe para a versão 4 que é a mais recente.</p>
<p>Recomendo estudá-lo, é um investimento de tempo bastante valioso, e o retorno compensatório: ter seus projetos web otimizados para telas de PCs, smartphones, ipods, tablets, e qualquer outro dispositivo que vir a surgir... Bom para quem desenvolve, e melhor ainda para quem utiliza.</p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/02/voce-conhece-o-less-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ponto de vista: Usuário Linux que fala mal de usuário Windows</title>
		<link>http://edwilson.com.br/2012/01/ponto-de-vista-usuarios-linux-que-falam-mal-de-usuario-windows/</link>
		<comments>http://edwilson.com.br/2012/01/ponto-de-vista-usuarios-linux-que-falam-mal-de-usuario-windows/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 02:46:40 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=169</guid>
		<description><![CDATA[Tá aí algo que me intriga: fans de Linux criticando usuários Windows. Chega a ser nojento ver isso... Em qualquer site em que se veja alguma notícia relacionada ao Linux ou ao Windows basta olhar nos comentários  e ver aquelas crianças fanáticas por um dos sistemas defendendo com unhas e dentes o seu predileto. "Linux [...]]]></description>
			<content:encoded><![CDATA[<p>Tá aí algo que me intriga: fans de Linux criticando usuários Windows. Chega a ser nojento ver isso...</p>
<p>Em qualquer site em que se veja alguma notícia relacionada ao Linux ou ao Windows basta olhar nos comentários  e ver aquelas crianças fanáticas por um dos sistemas defendendo com unhas e dentes o seu predileto. "Linux é complicado, se fosse fácil todo mundo usava", "Windows é a pior coisa que existe", "Lixux", "Rwindows", e por aí vai...</p>
<p>Já encheu o saco ver sempre a mesma coisa, a eterna guerra entre usuários, se você é um desses bizarros usuários Linux que costuma falar mal de quem usa Windows, esse post é dedicado especialmente a você.</p>
<p>Antes de dizer qualquer coisa, leia esse post até o final.<span id="more-169"></span><strong></strong></p>
<h3><strong>Primeira observação:</strong></h3>
<p><strong>Se você usa Linux isso de forma alguma torna você melhor do que quem usa Windows.</strong></p>
<p>Muita gente quando começa a usar Linux e vê que consegue fazer tudo o que fazia no Windows acha que agora é um ser superior, é um pokemon evoluído e agora pode falar mal do Windows, que na verdade nunca prestou pra nada... Isso só tem um nome: babaquice.</p>
<h3>Segunda observação:</h3>
<p>Linux não é o melhor sistema operacional que existe (pelo menos não para todos)</p>
<p>O melhor sistema operacional é aquele em que o usuário consegue executar sem problemas as suas tarefas. E quando falo "sem problemas" me refiro a não ter dificuldades para executar essas tarefas, e não ter qualquer impedimento que o atrapalhe.</p>
<p>Se você tem maior domínio do Linux, provavelmente pra VOCÊ o melhor SO que existe é o Linux, se alguém domina o Windows e desempenha melhor as suas tarefas nele, então esse será o melhor sistema operacional para ele, e ponto final.</p>
<h3>Terceira observação:</h3>
<p>Você sabe qual o marketshare do Linux? Tem noção de qual a porcentagem de computadores no mundo que rodam Linux (computadores pessoais)?</p>
<p><strong>Eu respondo: Algo em torno de menos de 2%.</strong></p>
<p>Você já se perguntou: se Linux realmente é o bicho da goiaba, é gratuito e "não pega vírus", porque as pessoas insistem em usar Windows, mesmo que muitas vezes seja pirateado? A resposta é simples: porque Linux hoje é SO para programador ou pessoas ligadas em tecnologia.</p>
<p>Não adianta vir com aquele velho blá blá blá sobre todas as vantagens do Linux (eu as conheço muito bem), o fato é que o usuário comum não tá ligando pra filosofia do software livre e da "comunidade". O usuário comum (esse que a "comunidade" Linux faz questão de esculachar) só quer algo simples e que funcione.</p>
<p>Um exemplo é o OS X, que também é baseado em Unix, é um grande sucesso entre qualquer usuário leigo, e é completamente diferente do Windows. Imaginam o motivo do sucesso entre os usuários? Porque é simples. Porque o usuário consegue fazer tudo o que tenta. Ninguém compra um Macbook e depois pede pra instalar o Windows porque não se ajustou ao sistema operacional.</p>
<h3>Quarta (e última) observação</h3>
<p><strong>Falar mal dos usuários Windows é bom para a "comunidade" Linux?</strong></p>
<p>Sempre me pergunto se a "comunidade" deseja, que mesmo após 30 anos, o Linux continue com sua participação praticamente irrelevante na área de computadores pessoais. Me pergunto se é do desejo da "comunidade" continuar tendo um magnífico S.O. (leia-se: kernel), mas continuar com seus menos de 2% de participação entre usuários domésticos.</p>
<p>O comportamento dessa "comunidade" mostra que sim. Mostra que as centenas de  milhões de usuários Windows não são interessantes para a "comunidade" Linux. Ter essa fatia de usuários não é importante, a "comunidade" mostra, através do comportamento dos seus usuários, que  o Linux deve continuar sempre sendo algo exclusivo de programador e entusiastas que se identificam com a filosofia de software livre.</p>
<p>Eu, que não faço parte dessa "comunidade" mas gosto e simpatizo com o Linux torço para que um dia alguma distro esteja disputando de igual para igual com o Windows, não digo em aspectos técnicos, mas que um dia uma distro Linux consiga fazer o que o Firefox fez com o IE... Mas enquanto a "comunidade" continuar a desprezar esses usuários em potencial isso nunca irá acontecer. Um usuário Windows desprezado, poderia ser mais um disseminador da cultura Linux... Poderia...</p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/01/ponto-de-vista-usuarios-linux-que-falam-mal-de-usuario-windows/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Devo usar algum framework para desenvolver meus projetos PHP?</title>
		<link>http://edwilson.com.br/2012/01/devo-usar-algum-framework-para-desenvolver-meus-projetos-php/</link>
		<comments>http://edwilson.com.br/2012/01/devo-usar-algum-framework-para-desenvolver-meus-projetos-php/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 01:58:17 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Cake PHP]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Yii]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=163</guid>
		<description><![CDATA[Quanto mais se ganha experiência no desenvolvimento com a linguagem de programação PHP mais nós vamos criando a nossa própria biblioteca de classes e funções, e a cada dia ficamos mais familiarizados com as particularidades não só da linguagem PHP quanto do ambientes em que essa linguagem é executado. Mas vamos à resposta para a [...]]]></description>
			<content:encoded><![CDATA[<p>Quanto mais se ganha experiência no desenvolvimento com a linguagem de programação PHP mais nós vamos criando a nossa própria biblioteca de classes e funções, e a cada dia ficamos mais familiarizados com as particularidades não só da linguagem PHP quanto do ambientes em que essa linguagem é executado.</p>
<p>Mas vamos à resposta para a pergunta que fiz no título do post:<strong> Devo usar um framework para desenvolver meus projetos PHP? - SIM!</strong></p>
<p>Quando digo que você deve usar um framework para desenvolver os seus projetos eu não me refiro necessariamente a você usar frameworks já desenvolvidos, como Yii, CakePHP, <a title="Começando com Zend Framework" href="http://edwilson.com.br/2012/01/comecando-com-zend-framework/">Zend Framework</a>, CodeIgniter, etc. Quando digo que SIM, estou me referindo a você utilizar uma biblioteca bem definida de funcionalidades, classes, e soluções para aqueles problemas macabros que sempre temos no nosso dia a dia. Ou seja, você pode criar o seu próprio framework e utilizá-lo como base para todos os seus projetos.</p>
<p>Criar nosso próprio framework não é uma tarefa fácil,  principalmente no começo, e possivelmente será uma tarefa sem fim. Sempre terá algo a ser aprimorado, novas funcionalidades a serem implementadas, bugs a serem corrigidos, novas tecnologias a serem adaptadas, etc.. É como um filho, que iremos criar e ver ele crescendo e dando bons resultados.<span id="more-163"></span></p>
<p><strong>Mas sempre há uma outra alternativa (a resposta para o título do post continua sendo: SIM)</strong></p>
<p>Apesar de ser uma tarefa bastante <del>complexa</del> divertida, criar um framework e utilizá-lo em todos os projetos é complicado e leva bastante tempo, além de que, em muitas situações utilizar o nosso próprio framework não será possível.</p>
<p>Nesses casos podemos também utilizar frameworks já consolidados e poupar um enorme tempo, a comunidade de desenvolvedores PHP mantém alguns excelentes frameworks, algumas empresas mantém outros, mas de qualquer forma utilizá-los pode nos ajudar a poupar um tempo valioso, e economizar dinheiro e neurônios.</p>
<p>Me arriscaria a resumir a ideia de utilizar frameworks "prontos" em uma frase: Pra que querer reinventar a roda?</p>
<p>Os mesmos problemas que você passa horas para resolver já foram em algum momento resolvidos por um outro programador em outra parte do mundo (e provavelmente ele resolveu o problema melhor que você). É triste adimitir, mas é verdade. Os frameworks de desenvolvimento php disponíveis possuem inúmeros componentes, muitos deles solucionando de maneira mais eficiente os problemas que costumamos ter ao desenvolver nossas aplicações, então, porque não utilizar esses componentes prontos?</p>
<p>Outra grande vantagem desses frameworks é a utilização de boas práticas de programação para desenvolvê-los, sempre há uma grande preocupação para desenvolver código limpo, conciso e eficiente, até porque quem for utilizar quer ver algo bem feito, e que inspire criar algo também bem feito.</p>
<p>Há uma grande variedade de frameworks disponíveis na internet, alguns utilizam o padrão MVC, alguns utilizam templates, outros utilizam scaffolding... A variedade de frameworks com diferentes funcionalidades, padrões e formatos me faz pensar que para cada desenvolvedor tem um framework ideal, e caso não haja, faça um favor para você mesmo e desenvolva o seu.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/01/devo-usar-algum-framework-para-desenvolver-meus-projetos-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O seu browser &#8220;guenta o tranco&#8221;?</title>
		<link>http://edwilson.com.br/2012/01/o-seu-browser-guenta-o-tranco/</link>
		<comments>http://edwilson.com.br/2012/01/o-seu-browser-guenta-o-tranco/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 23:40:23 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=146</guid>
		<description><![CDATA[Separei alguns links com testes de renderização utilizando animações em HTML5 e JavaScript, e outros testes interessantes, será se o seu navegador "guenta o tranco"? Se você (assim como eu) tem vários browsers instalados no PC é uma brincadeira interessante testar como cada um se comporta. Isso não quer dizer que você deveria usar o [...]]]></description>
			<content:encoded><![CDATA[<p>Separei alguns links com testes de renderização utilizando animações em HTML5 e JavaScript, e outros testes interessantes, será se o seu navegador "guenta o tranco"?</p>
<p>Se você (assim como eu) tem vários browsers instalados no PC é uma brincadeira interessante testar como cada um se comporta. Isso não quer dizer que você deveria usar o que tem a melhor performance, afinal existem outros aspectos a se considerar ao usar um browser, mas é interessante ver a evolução dos engines JavaScript e da capacidade de processamento gráfico.</p>
<h3>Performance gráfica: <a title="Let it Snow" href="http://ie.microsoft.com/testdrive/performance/letitsnow/" target="_blank">Let it Snow</a></h3>
<p style="text-align: center;"><a href="http://ie.microsoft.com/testdrive/performance/letitsnow/"><img class="aligncenter  wp-image-147" title="20111220-lis-image1" src="http://edwilson.com.br/wp-content/uploads/20111220-lis-image1.png" alt="" width="486" height="364" /></a></p>
<p><span id="more-146"></span>Nesse teste desenvolvido pela equipe do Internet Explorer 10, a taxa de frames por segundo (fps) a velocidade do processamento JavaScript são avaliados.</p>
<p>Na minha máquina o Internet Explorer 9 e Firefox 9 tiveram um desempenho nitidamente superior.</p>
<h3>JavaScript: <a title="RunSpider" href="http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/driver.html" target="_blank">SunSpider</a></h3>
<p style="text-align: center;"><a href="http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/driver.html" target="_blank"><img class="aligncenter  wp-image-148" title="js" src="http://edwilson.com.br/wp-content/uploads/js.jpg" alt="" width="407" height="391" /></a></p>
<p>O RunSpider é um teste JavaScript, e testa a capacidade de processamento dos browsers. Nesse teste (na minha máquina) os melhores resultados foram obtidos pelo Internet Explorer 9, seguido do Google Chrome 16 e do Firefox 9</p>
<h3>HTML5 Parser - <a href="http://html5test.com/" target="_blank">The HTML5 test</a></h3>
<p style="text-align: center;"><a href="http://html5test.com/"><img class="aligncenter  wp-image-149" title="htl" src="http://edwilson.com.br/wp-content/uploads/htl.jpg" alt="" width="257" height="277" /></a></p>
<p>A capacidade de processar os novos elementos do HTML5 não deveria entrar em uma lista de testes de performance, mas já que estamos fazendo teste, não custa nada fazer esse também. Na internet existem dezenas de testes de compatibilidade com HTML5, nesse teste o destaque vai parao Chrome 16, seguido de Firefox 9 e Opera 11.60.</p>
<h3>Performance Gráfica 2 - <a title="Particle Acceleration" href="http://ie.microsoft.com/testdrive/Performance/ParticleAcceleration/" target="_blank">Particle Acceletarion</a></h3>
<p style="text-align: center;"><a href="http://ie.microsoft.com/testdrive/Performance/ParticleAcceleration/"><img class="aligncenter  wp-image-151" title="pa" src="http://edwilson.com.br/wp-content/uploads/pa.jpg" alt="" width="404" height="262" /></a></p>
<p>Outro teste do pessoal da Microsoft, e como era de se esperar o Internet Explorer 9 também se mostra bastante superior, mas o Firefox 9 e o Google Chrome 16 não ficaram muito para trás.</p>
<p>E aí, qual o seu navegador predileto? Ele se saiu bem nesses testes? Fique à vontade para deixar seus comentários...</p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/01/o-seu-browser-guenta-o-tranco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello World com Zend Framework</title>
		<link>http://edwilson.com.br/2012/01/hello-world-com-zend-framework/</link>
		<comments>http://edwilson.com.br/2012/01/hello-world-com-zend-framework/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 14:23:17 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=108</guid>
		<description><![CDATA[No post anterior mostrei a estrutura de diretórios recomendada para se utilizar o Zend Framework, agora iremos criar as primeiras linhas de código, e fazer o software mais famoso entre nós programadores, o Hello World. Se você ainda não utilizou frameworks de desenvolvimento deve estar pensando: "ok, mas o hello world em php se resume [...]]]></description>
			<content:encoded><![CDATA[<p>No <a title="Começando com Zend Framework" href="http://edwilson.com.br/2012/01/comecando-com-zend-framework/">post anterior</a> mostrei a estrutura de diretórios recomendada para se utilizar o Zend Framework, agora iremos criar as primeiras linhas de código, e fazer o software mais famoso entre nós programadores, o Hello World.</p>
<p>Se você ainda não utilizou frameworks de desenvolvimento deve estar pensando: "ok, mas o hello world em php se resume a <code>&lt;?php echo 'Hello World!'; ?&gt;</code>", pois bem, usaremos esse exemplo de uma simples saída de string mas usando a estrutura MVC (Model View Controller) implementada em Zend Framework para gerar esse mesmo resultado, e a medida em que você for seguindo no seu projeto você verá as inúmeras vantagens de utilizar essa arquitetura.</p>
<p>Observe que até o momento o nosso projeto não possui sequer um arquivo no nosso diretório público (public_html, httpdocs, www, etc), nós precisaremos apenas de um arquivo .php no diretório público, e a única coisa que ele fará é disparar o inicializador do projeto (Bootstrap). Então, vamos ao que interessa...</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// httpdocs/index.php</span>
<span style="color: #990000;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'APPLICATION_PATH'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'APPLICATION_PATH'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'/home/zend/application/projeto/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'APPLICATION_ENV'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'APPLICATION_ENV'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'testing'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">set_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span>PATH_SEPARATOR<span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>APPLICATION_PATH<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/home/zend/library/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Zend/Application.php'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$application</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Application<span style="color: #009900;">&#40;</span>APPLICATION_ENV<span style="color: #339933;">,</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/configs/application.ini'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$application</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bootstrap</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">run</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><span id="more-108"></span><br />
6 linhas de código. É o que normalmente você precisa ter no seu arquivo index.php, aproveitamos para criar duas constantes (APPLICATON_PATH e APPLICATION_ENV), que serão usadas posteriormente pela nossa aplicação.</p>
<p>A constante APPLICATION_PATH contém o caminho absoluto para o seu projeto, conforme a estrutura de arquivos definida no post anterior, no meu caso, o projeto se chama "projeto" e está localizada em "<strong>/home/zend/application/projeto/</strong>", não esqueça de alterar esse caminho para o caminho exato no seu servidor.</p>
<p>Agora algo interessante, a constante APPLICATION_ENV, onde nós configuramos o ambiente da nossa aplicação (de teste, produção, ou desenvolvimento). Apenas alterando esse valor da constante no nosso arquivo index.php poderemos modificar completamente o comportamento da nossa aplicação, ocultando as mensagens de erro do php, conectando a uma base de dados diferente, etc, isso é muito útil quando se quer ter uma aplicação rodando em ambiente de produção e em ambiente de testes, sem que uma interfira na outra, e sem que se precise alterar inúmeras configurações para rodar no seu servidor de testes.</p>
<p>Configuramos também o<em> include path</em> do php, tudo para facilitar o nosso trabalho. Quando o php precisar incluir algum arquivo irá buscar também no APPLICATION_PATH e no diretório "<strong>/home/zend/library/</strong>", lembrando que esse último contém os arquivos do próprio framework.</p>
<p>Nas últimas 3 linhas a mágica começa a acontecer. Fazemos a inclusão do arquivo "<strong>Zend/Application.php</strong>", este se encarregará de chamar os outros arquivos necessários.  No próximo passo instanciamos a classe Zend_Application passando como parametro o ambiente atual (APPLICATION_ENV) e o caminho para o arquivo de configuração da nossa aplicação, que criaremos a seguir.</p>
<p>Antes de criarmos o arquivo de configuração da nossa aplicação, vamos apenas cuidar de mais um importantíssimo detalhe na pasta pública, o ".htaccess". Queremos que todas as nossas requisições sejam enviadas para o arquivo index.php, exceto (é lógico) as requisições de imagem, arquivos CSS e JavaScript.</p>
<p>Crie um arquivo .htaccess na pasta pública  com o seguinte conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">; /httpdocs/.htaccess
<span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">on</span>
&nbsp;
<span style="color: #00007f;">RewriteRule</span> !\.(js|ico|txt|gif|jpg|png|css)$ index.php</pre></div></div>

<p>Até o momento isso é tudo que precisaremos no diretório público.</p>
<p>Voltando à parte divertida, agora criaremos o arquivo de configuração da nossa aplicação com o seguinte conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">; /home/zend/application/projeto/configs/application.ini</span>
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>production<span style="">&#93;</span></span>
<span style="color: #666666; font-style: italic;">;isso é um comentário</span>
phpSettings.display_startup_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 0</span>
phpSettings.display_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 0</span>
includePaths.library <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/library/&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; Bootstrap</span>
bootstrap.path <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/Bootstrap.php&quot;</span>
bootstrap.class <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;Bootstrap&quot;</span>
<span style="color: #666666; font-style: italic;">; Controller</span>
resources.frontController.controllerDirectory <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/controllers&quot;</span>
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>staging : production<span style="">&#93;</span></span>
&nbsp;
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>testing : production<span style="">&#93;</span></span>
phpSettings.display_startup_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 1</span>
phpSettings.display_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 1</span></pre></div></div>

<p>Não se desespere (ainda), o arquivo application.ini define as configurações da nossa aplicação, nela iremos salvar as configurações de acesso ao banco de dados, o layout utilizado pela aplicação, configurações do php, etc.</p>
<p>Observe que a sintaxe do arquivo, apesar de não familiar a muitos, é bastante simples. Começamos com [production]. Essa tag define que essa será a sessão que define as configurações da aplicação em modo de produção, nessa sessão nós desativamos a saída de erros do PHP, e definimos algumas outras opções, das quais vale a pena destacar a chamada para o arquivo de inicalização do projeto, o Bootstrap.php.</p>
<p>Deixaremos a sessão staging em branco, por enquanto, e apenas iremos tornar os erros visíveis na última sessão, a "testing".</p>
<p>Nas duas úttimas sessões do arquivo .ini nós temos a seguinte sintaxe: [env : production] , isso apenas quer dizer que a sessão irá herdar da sessão production, isso evita ter que repetir algumas partes do código para cada sessão.</p>
<p>Voltaremos ao arquivo .ini posteriormente, agora iremos a mais uma etapa: o Bootstrap.</p>
<p>Talvez você não seja habituado ao termo (ou talvez sim), mas o bootstrap irá nos fornecer métodos para configurar a aplicação em sua inicialização, ou seja, permite que eu defina certos comportamentos e realize algumas operações enquanto carrego a aplicação, em resumo iremos "dar o boot" no nosso sistema, vamos à ele:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//home/zend/application/projeto/Boostrap.php</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Zend/Loader/Autoloader.php'</span><span style="color: #339933;">;</span>
&nbsp;
Zend_Loader_Autoloader<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Bootstrap <span style="color: #000000; font-weight: bold;">extends</span> Zend_Application_Bootstrap_Bootstrap <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//That´s all</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto, esse é o nosso Boostrap (por enquanto).</p>
<p>No momento, para facilitar ao máximo, iremos deixar de lado o que podemos fazer no Boostrap, mas, observe que nesse arquivo nós incluimos mais um arquivo do ZF, o Autoloader.php, e fazemos isso para não ter que incluir mais arquivos manualmente, a instancia dessa classe se encarrega de incluir os arquivos que precisamos, à medida em que precisamos.</p>
<p>Ok, tudo configurado, agora estamos prontos para iniciar (iniciar? o_O OMG!)</p>
<p>O que fizemos até o momento foi cuidar das configurações da aplicação, agora iremos realmente fazer o que queremos: o Hello World.</p>
<p>Lembre-se que utilizaremos o padrao MVC, se já está familiarizado com ele sabe que teremos que implementar a lógica separadamente da saída para o usuário.</p>
<p>Como não entraremos em detalhes sobre banco de dados, até o momento, iremos dispensar a parte de Model, e utilizar apenas o View e o Controller.</p>
<p>Pois bem, os controladores da nossa aplicação deverão seguir a um padrão de nomenclatura estabelecido pelo ZF, esse padrão determina a composição do nome do arquivo e a composição da classe.</p>
<p>Os nossos controladores serão criados na pasta "<strong>/home/zend/application/projeto/controllers/</strong>" e o seu nome será composto por "NomeControlador" (camel cased) + Controller.php. Exemplo: para o controlador teste, o nome do arquivo seria: TesteController.php, para o controller "alterar aparencia" o nome do arquivo seria AlterarAparenciaController.php, e assim sucessivamente.</p>
<p>O controller será chamado quando o usuário acessar o seu nome (minúsculo) no navegador. Por exemplo: para acessar o controller teste o usuário utilizaria o endereço: http://projeto.local/teste, para acessar o controlador AlterarAparenciaController.php o usuário utilizaria o endereço: http://projeto.local/alterar_aparencia, etc.</p>
<p>O contolador chamado por default quando o usuário acessa a raiz do site é o IndexController.php, e será esse o arquivo que iremos criar:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// home/zend/application/projeto/controllers/IndexController.php</span>
<span style="color: #000000; font-weight: bold;">class</span> IndexController <span style="color: #000000; font-weight: bold;">extends</span> Zend_Controller_Action <span style="color: #009900;">&#123;</span>
     <span style="color: #000000; font-weight: bold;">function</span> indexAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        Zend_Layout<span style="color: #339933;">::</span><span style="color: #004000;">getMvcInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">disableLayout</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hello</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Hello World!&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Todos os nossos controladores deverão herdar da classe Zend_Controller_Action. Cada ação deverá iniciar com letras minúsculas, e seguidas de Action. O endereço para o acesso à uma ação será: http://projeto.local/controlador/action, exemplo: o controlador teste tem a ação andar, o usuário acessaria http://projeto.local/teste/andar e o controlador TesteController.php iria executar a ação andarAction(). No nosso caso, por se tratar do controlador index e da ação index, o usuári o pode acessar http://projeto.local/index/index/ ou simplesmente http://projeto.local/</p>
<p>Desativamos o layout (utilizaremos layouts depois), e logo depois enviamos para a camada View do modelo MVC a string "Hello World" .</p>
<p>Portanto, a última etapa será mostrar o resultado, para isso criaremos a nossa primeira view.</p>
<p>As views deverão ser criadas na pasta "<strong>/home/zend/application/projeto/views/scripts</strong> ", cada controlador "ganha" uma pasta com seu nome (minúsculo, e sem o "Controller"), e cada ação ganha um arquivo com o seu nome (minúsculo e sem o action). Exemplo: para o controlador teste com a ação andar iriamos criar a pasta  "<strong>/home/zend/application/projeto/views/scripts/teste</strong> " e dentro dessa pasta criaríamos o arquivo "andar.phtml" (observe a extensão: .phtml).</p>
<p>Para o nosso código, nós iremos criar a pasta   "<strong>/home/zend/application/projeto/views/scripts/index</strong>" e dentro dessa pasta criaremos o arquivo "index.phtml". Por último, iremos exibir o que foi enviado pelo controlador.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
 <span style="color: #666666; font-style: italic;">// home/zend/application/projeto/views/scripts/index/index.phtml</span>
 <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hello</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Pronto, depois de percorrer esse longo caminho, ao acessar http://projeto.local/ teremos como resultado o nosso esperado "Hello World"<br />
O próximo passo será conectar e manipular uma base de dados, usar layouts e conhecer um pouco mais do Boostrap do ZF. Espero que você volte em breve para acompanhar os próximos posts.<br />
Não esqueça de deixar suas críticas, sugestões, dúvidas, etc. Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/01/hello-world-com-zend-framework/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Começando com Zend Framework</title>
		<link>http://edwilson.com.br/2012/01/comecando-com-zend-framework/</link>
		<comments>http://edwilson.com.br/2012/01/comecando-com-zend-framework/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 02:26:59 +0000</pubDate>
		<dc:creator>edwilson</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://edwilson.com.br/?p=40</guid>
		<description><![CDATA[Se você está lendo esse artigo é porque provavelmente já leu um pouco a respeito de Zend Framework e pensa em começar a utilizá-lo em seus projetos, pouparei maiores detalhes sobre o que é ZF e quais as suas vantagens em relação a outros frameworks PHP, aqui estou considerando que você já está decidido a [...]]]></description>
			<content:encoded><![CDATA[<p>Se você está lendo esse artigo é porque provavelmente já leu um pouco a respeito de Zend Framework e pensa em começar a utilizá-lo em seus projetos, pouparei maiores detalhes sobre o que é ZF e quais as suas vantagens em relação a outros frameworks PHP, aqui estou considerando que você já está decidido a usá-lo.</p>
<p>Caso ainda tenha muitas dúvidas sobre o framework em si, deixe um recado ao final do post que providencio um outro texto sobre as noções básicas de ZF. E por falar em noções básicas, vamos ao B+A=BA da configuração do Zend Framework...</p>
<p><span id="more-40"></span> <a href="http://edwilson.com.br/wp-content/uploads/zf.gif"><img class="alignleft size-full wp-image-100" title="zf" src="http://edwilson.com.br/wp-content/uploads/zf.gif" alt="" width="233" height="132" /></a></p>
<p>A primeira dúvida que os iniciantes em ZF podem ter é ao fazer o <a href="http://framework.zend.com/download/latest" target="_blank">download do framework</a>, pois encontrarão várias edições, são elas:</p>
<p><strong>Zend Framework + Zend Server Community Edition(CE) </strong></p>
<p>Versão completa do Zend Framework integrada ao Zend Server, que já possui um ambiente totalmente configurado e otimizado.</p>
<p><strong>Zend Framework Full Package</strong></p>
<p>Essa edição vem com algumas outras ferramentas inclusas, como  o framework JavaScript Dojo, jQuery, além de traduções, códigos de exemplo e documentação.</p>
<p><strong>Zend Framework Minimal Package </strong></p>
<p>Esse é o pacote recomendado para você que está iniciando, possui apenas os arquivos do próprio ZF e pode evitar confusão com excesso de arquivos que você não vai usar nesse primeiro momento.</p>
<p>O conteúdo central do Zend Framework,  fica localizado na pasta library, que é a pasta que deveremos <del>upar</del> enviar para o servidor. Antes de enviá-la, aqui vai um detalhe: Não envie essa pasta para dentro da sua pasta pública (public_html, ou httpdocs). Por que? Primeiro porque não há necessidade, e em segundo lugar porque o Zend Framework trabalha de uma forma que instrua o programador a utilizar boas práticas, e não é uma boa prática fazer isso, quando você estiver mais a frente no seu projeto você verá que isso não é apenas uma questão de comodidade, e sim uma dica muito valiosa de segurança.</p>
<p>Vamos começar com a <a title="Recommended Project Directory Structure" href="http://framework.zend.com/manual/en/project-structure.project.html" target="_blank">estrutura de arquivos recomendada</a> pelo próprio manual oficial do ZF:</p>
<p><a href="http://edwilson.com.br/wp-content/uploads/diretorios.gif"><img class="alignleft size-full wp-image-103" title="diretorios" src="http://edwilson.com.br/wp-content/uploads/diretorios.gif" alt="" width="241" height="403" /></a>  A estrutura ao lado deverá ser criada fora da pasta pública do servidor, criaremos a pasta "zend" e iremos fazer copiar os arquivos da pasta "library" que foi baixada do site oficial.</p>
<p>Os outros deverão ser criados e podem variar de acordo com o seu gosto, vamos à uma breve descrição dos principais diretórios que o manual oficial sugere:</p>
<p><strong><em>"application/"</em></strong> - será o diretório que irá conter todos os arquivos de todos os seus projetos</p>
<p><strong><em>"application/projeto"</em></strong>  - esse diretório contém um esqueleto tradicional de uma aplicação no ZF, e você deve trocá-lo pelo nome do seu projeto. Os outros projetos conterão o mesmo esqueleto, e serão colocados na pasta "application", cada uma com o nome que você escolher.</p>
<p><strong><em>"application/projeto/configs"</em></strong>  - iremos utilizá-la para guardar os arquivos de configuração desse projeto. O Zend Framework trabalha com arquivos de configuração em diversos formatos, como XML, ini e arrays.</p>
<p><strong>"application/projeto/controllers"</strong> - se você já costuma desenvolver segundo o padrão MVC, já deve ter notado que essa será a pasta utilizada para armazenar os controladores, ou seja, os arquivos que conterão a lógica para a execução da aplicação.</p>
<p><em><strong>"application/projeto/layouts"</strong></em> - armazenaremos aqui os arquivos que definem o layout da nossa aplicação. Não estamos falando de CSS/HTML, e sim do arquivo que conterá o modelo padrão de exibição, o layout onde todo o conteúdo de saída do nosso porjeto será executado.</p>
<p><em><strong>"application/projeto/models"</strong></em> - onde ficarão os arquivos relacionados à camada "model" do modelo MVC, os esqueletos de classe, e arquivos com a lógica de abstração da base de dados serão armazenados nessa pasta.</p>
<p><em><strong>"application/projetos/views"</strong></em> - aqui iremos configurar os "views" da nossa aplicação, ou seja, a saída para o usuário, os arquivos .phtml serão criados nesse diretório.</p>
<p><strong><em>"library"</em></strong> - lembre-se que nesse diretório iremos armazenar o núcleo do ZF, ou seja, o conteúdo do framework, que você baixou do site oficial. Não estranhe se dentro da pasta "library" tiver apenas a pasta "Zend", e não diretamente o conteúdo do framework, isso ocorre porque dentro da pasta library também podemos inserir outras bibliotecas.</p>
<p>O primeiro passo para você não se perder ao utilizar Zend Framework é ter uma estrutura de diretórios bem definida, nesse ponto o manual oficial mandou bem ao fazer essa sugestão. Entender bem essa estrutura é fundamental antes de criarmos o nosso primeiro arquivo .php, o que faremos no <a title="Hello World com Zend Framework" href="http://edwilson.com.br/2012/01/hello-world-com-zend-framework/">próximo post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://edwilson.com.br/2012/01/comecando-com-zend-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

