<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>ADEMIR GABARDO - XHTML, Javascript, PHP e MySQL, CodeIgniter Framework PHP</title>
	<atom:link href="http://ademirgabardo.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ademirgabardo.wordpress.com</link>
	<description>XHTML, Javascript e PHP Simples e direto - CodeIgniter Framework PHP</description>
	<lastBuildDate>Tue, 06 Sep 2011 17:26:12 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ademirgabardo.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/0f87c888f1a24f35c1ab3af8fed56dee?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>ADEMIR GABARDO - XHTML, Javascript, PHP e MySQL, CodeIgniter Framework PHP</title>
		<link>http://ademirgabardo.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ademirgabardo.wordpress.com/osd.xml" title="ADEMIR GABARDO - XHTML, Javascript, PHP e MySQL, CodeIgniter Framework PHP" />
	<atom:link rel='hub' href='http://ademirgabardo.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Pré-visualizando uma tabela do banco de dados com 3 linhas de código no CodeIgniter 2.0</title>
		<link>http://ademirgabardo.wordpress.com/2011/09/05/pre-visualizando-uma-tabela-do-banco-de-dados-com-3-linhas-de-codigo-no-codeigniter-2-0/</link>
		<comments>http://ademirgabardo.wordpress.com/2011/09/05/pre-visualizando-uma-tabela-do-banco-de-dados-com-3-linhas-de-codigo-no-codeigniter-2-0/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 13:52:31 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false">http://ademirgabardo.wordpress.com/?p=120</guid>
		<description><![CDATA[Existe uma necessidade comum durante o processo de desenvolvimento, que é pré-visualizar dados que venham de um objeto ou array. Podemos ter a necessidade de inspecionar um retorno de uma função, uma lista, um retorno de uma consulta ou até mesmo uma tabela do banco de dados, etc. Essa tarefa comum pode ser efetuada dando [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=120&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>
<p>Existe uma necessidade comum durante o processo de desenvolvimento, que é pré-visualizar dados que venham de um objeto ou array.</p>
<p>Podemos ter a necessidade de inspecionar um retorno de uma função, uma lista, um retorno de uma consulta ou até mesmo uma tabela do banco de dados, etc. Essa tarefa comum pode ser efetuada dando um <strong>print_r()</strong> na variável desejada e um <strong>exit()</strong> caso seja necessário parar a aplicação.</p>
<p>Outras vezes é interessante poder formatar esse retorno em dados tabulares de modo prático para a visualização.</p>
<p>E já que o CodeIgniter nos provê um classe para auxiliar na geração de tabelas HTML, decidi criar um pequeno helper capaz de mostrar esses dados de modo mais organizado.</p>
<p>Acrescentando uma função de pré-visualização simples, adicionando a tag &lt;pre&gt;&lt;/pre&gt; do HTML e passando como parâmetro 0 ou 1 para controlar se a aplicação deve parar depois de exibir as informações. Zero, ou omitindo o parâmetro não para, 1 para parar.</p>
<p>Criei também duas funções simples para gerar tabelas a partir de uma Array ou de um objeto com os respectivos nomes <strong>arr_tabela()</strong> e <strong>obj_tabela()</strong>.</p>
<p>O código-fonte do helper ficou o seguinte.</p>
<pre>&lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
function pre($var,$parar = null){
  echo "&lt;hr&gt;&lt;pre&gt;";
  print_r($var);
  echo "&lt;/pre&gt;&lt;hr&gt;";   
  if($parar!=null)
    echo exit();
}

function obj_tabela($object,$parar = null){ 
  $CI = &amp; get_instance();
  $CI-&gt;load-&gt;library('table');

  $arr = array();
  for ($i = 0; $i &lt; count($object); $i++)
      $arr[] = get_object_vars($object[$i]);

  $CI-&gt;table-&gt;clear();
  echo $CI-&gt;table-&gt;generate($arr);

  if($parar!=null)
    echo exit();
}

function arr_tabela($arr,$parar = null){ 
  $CI = &amp; get_instance();
  $CI-&gt;load-&gt;library('table');
  $CI-&gt;table-&gt;clear();
  echo $CI-&gt;table-&gt;generate($arr);
  if($parar!=null)
    echo exit();
}</pre>
<p>Um exemplo de uso é para recuperar os dados de uma tabela no do banco de dados, no controlador basta chamar da seguinte forma:</p>
<pre>&lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller {

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
    $this-&gt;load-&gt;helper('pre');
      $data['categorias']  = $this-&gt;db-&gt;get('categorias')-&gt;result();
        //$this-&gt;load-&gt;view('home',$data);
        pre($data['categorias']);
        //obj_tabela($data['categorias']);
    }
}</pre>
<p>Note a facilidade em exibir os dados vindos da tabela categorias. Na figura abaixo, temos a tabela do banco de dados.</p>
<p><img src="http://conteudo.imasters.com.br/19768/33131.jpg" alt="Tabela do banco de dados" /></p>
<p>Na sequência, veja o resultado gerado pela função <strong>obj_tabela();</strong></p>
<p><strong><img src="http://conteudo.imasters.com.br/19768/33132.jpg" alt="Obj_tabela" /></strong></p>
<p>E o mesmo objeto do banco de dados sendo exibido pelo uso da função <strong>pre()</strong>;</p>
<p><img src="http://conteudo.imasters.com.br/19768/33134.jpg" alt="" /></p>
<p>O mais simplificado possível, temos a exibição de uma tabela ou view do nosso banco de dados com 3 linhas de código no controller.</p>
<p>Espero que os benefícios oferecidos pelo CodeIgniter 2.0 ajudem vocês nesse processo. Em caso de dúvida ou até mesmo troca de ideia, não deixe de postar seus comentários abaixo.</p>
<p>Até a próxima!</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/120/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=120&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2011/09/05/pre-visualizando-uma-tabela-do-banco-de-dados-com-3-linhas-de-codigo-no-codeigniter-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>

		<media:content url="http://conteudo.imasters.com.br/19768/33131.jpg" medium="image">
			<media:title type="html">Tabela do banco de dados</media:title>
		</media:content>

		<media:content url="http://conteudo.imasters.com.br/19768/33132.jpg" medium="image">
			<media:title type="html">Obj_tabela</media:title>
		</media:content>

		<media:content url="http://conteudo.imasters.com.br/19768/33134.jpg" medium="image" />
	</item>
		<item>
		<title>Otimização de Javascript e CSS com CodeIgniter e Minfy, minimizando e unindo arquivos css e js.</title>
		<link>http://ademirgabardo.wordpress.com/2011/09/05/otimizacao-de-javascript-e-css-com-codeigniter-e-minfy-minimizando-e-unindo-arquivos-css-e-js/</link>
		<comments>http://ademirgabardo.wordpress.com/2011/09/05/otimizacao-de-javascript-e-css-com-codeigniter-e-minfy-minimizando-e-unindo-arquivos-css-e-js/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 13:50:50 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ademirgabardo.wordpress.com/?p=117</guid>
		<description><![CDATA[Não é necessário discorrer sobre a importância do Javascript e do CSS bastando apenas citar alguns poucos exemplos como a validação de formulários, criação de elementos de interface como acordions e menus e citar alguns dos muitos plug-ins para desenvolvimento que agregam funcionalidades como geração de gráficos e data-grids para que fique clara a importância [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=117&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>
<p>Não é necessário discorrer sobre a importância do Javascript e do CSS bastando apenas citar alguns poucos exemplos como a validação de formulários, criação de elementos de interface como acordions e menus e citar alguns dos muitos plug-ins para desenvolvimento que agregam funcionalidades como geração de gráficos e data-grids para que fique clara a importância de manter uma boa estrutura destes arquivos em sua aplicação ou página da web.</p>
<p>Quando mais funcionalidades desejadas, mais arquivos .js e .css teremos, tomemos por exemplo uma página que contenha o arquivo compactado da JQuery, um plugin de calendário da JQuery UI e mais um arquivo .js para funções gerais do website, somados os arquivos .css necessários para o website e para a geração do calendário. Este exemplo nos daria pelo menos 5 arquivos distintos para compactar e carregar.</p>
<p>Há tempos vem sendo usada a técnica de compactar os arquivos javascript e css removendo comentários, linhas em branco, espaços desnecessários e quebras de linha com a finalidade de diminuir o tempo de carregamento on-line.</p>
<p>É interessante também diminuir o número de requisições http feitas ao servidor pelo browser, sendo que, se possível unir todos os arquivos .js em um único arquivo diminuiremos a quantidade de requisições, fazendo o mesmo com o .css estaremos contribuindo para um carregamento mais ágil.</p>
<p>Toda vez que iniciamos um projeto teremos que escolher quais são as bibliotecas e plug-ins que iremos utilizar bem como referenciar em nosso header html estes arquivos.</p>
<p>Cansado desta tarefa repetitiva fui buscar uma solução que fosse a mais simples e menos trabalhosa possível, gostaria de uma solução que “encontrasse” os arquivos .css e .js em uma pasta e fizesse o restante do trabalho para mim.  Acabei encontrando o Minify e melhor que isso, já existe um Driver * (Library) para o CodeIgniter 2.0.x.</p>
<p>Neste artigo estou descrevendo a forma como eu uso, mas é claro que existem muitas outras maneiras de integrar seus arquivos com esta solução.</p>
<h4>Passo 1 &#8211; Baixando a biblioteca</h4>
<p>O primeiro passo é baixar o CI-Minify, você encontrará o link (e também mais informações sobre como usar) <a href="http://codeigniter.com/wiki/CI-Minify/">aqui</a>.</p>
<p>Então descompacte o arquivo e copie a pasta “Minify” que está dentro da pasta “libraries” do arquivo .zip para a sua pasta application/libraries conforme mostrado na figura 1.0</p>
<p><img src="http://conteudo.imasters.com.br/21521/38812.gif" alt="Copiando arquivos para o seu projeto" /></p>
<p>A partir deste momento já é possível utilizar a biblioteca Minify, contudo é importante observar que, por se tratar de um Driver, não será possível carregar pelo autoload, você precisará carregar este driver a partir de um controlador.</p>
<h4>Passo 2 &#8211; Organizando os arquivos</h4>
<p>Vamos analisar a estrutura das pastas e arquivos que serão utilizadas neste exemplo. Na figura 2.0 está a estrutura de pastas que contém os arquivos .css e .js  que estou utilizando em meu projeto.</p>
<p><img src="http://conteudo.imasters.com.br/21521/38813.gif" alt="Estrutura de pastas" /></p>
<p>Note que tenho um pasta chamada assets na raiz da aplicação com as seguintes subpastas .</p>
<p><strong>js</strong> – Esta pasta contem os arquivos Javascript originais sem compactação, estes arquivos podem ser editados facilmente, caso existam arquivos compactados aqui dentro, também não tem problema.</p>
<p><strong>css</strong> – É a pasta onde estão os arquivos .css originais, eles estão identados e organizados para facilitar a edição.</p>
<p><strong>ie_css</strong> – Esta é uma pasta auxiliar onde deixo os arquivos css específicos para corrigir problemas com o IE. Não quero estes arquivos carregando o tempo todo, portanto, não os adiciono ao arquivo final compactado.</p>
<p><strong>min</strong> – Que irá guardar os dois arquivos gerados pelo Minify, um css e um js. Nesta pasta eu armazeno também a JQuery já compactada, tive que utilizar esta abordagem porque preciso que ela seja carregada antes dos outros scripts e tive como quero compactar a pasta js toda de uma vez não é possível definir a ordem dos arquivos a compactar.</p>
<p><strong>imgs</strong> – A pasta de imagens da minha aplicação (não relevante para nosso exemplo).</p>
<p>O que vai ocorrer é que a Minify irá buscar todos os arquivos na pasta css e na pasta js e compactar criando apenas duas saídas na pasta min.</p>
<h4>Passo 3 &#8211; Gerando os arquivos compactados</h4>
<p>Para efetuar esta ação estamos colocando o seguido código no construtor da minha classe “home” que é a classe que defini  em default_controller no arquivo de configuração routes.php. De modo que cada vez que a aplicação for carregada serão gerados dois novos arquivos com o CSS e JS. Se você preferir (ou achar mais semântico) poderá criar um método para isto.</p>
<pre>&lt;?php if(!defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller {
       function __construct(){
             parent::__construct();
             $this-&gt;load-&gt;driver('minify');
             $csss = $this-&gt;minify-&gt;combine_directory('assets/css/');
             $this-&gt;minify-&gt;save_file($csss,'assets/min/minified.css');
             $jss =$this-&gt;minify-&gt;combine_directory('assets/js/');
             $this-&gt;minify-&gt;save_file($jss,'assets/min/minified.js'); 
     }
}</pre>
<p>Chamei meus arquivos respectivamente de <strong>minfied.css</strong> e <strong>minified.js<br />
</strong></p>
<h4>Passo 4 &#8211; Utilizando os arquivos compactados</h4>
<p>Para utilizar os arquivos você simplesmente irá incluí-los em suas views conforme faria com qualquer outro arquivo .css e .js. Para simplificar esta tarefa eu construí uma view parcial e salvei em uma pasta chamada libraries dentro da pasta views com o nome de arquivo html-header.html. Veja a seguir o método no controlador que chama a minha tela de login.</p>
<pre>function index(){
    $this-&gt;load-&gt;view('libraries/html-header');
    $this-&gt;load-&gt;view('login');
    $this-&gt;load-&gt;view('libraries/html-footer');
}</pre>
<p>Desta forma posso compartilhar o mesmo cabeçalho html em todo o website me preocupando apenas em construir o corpo das paginas propriamente dito.</p>
<p>A seguir está o código da view parcial html-header que carrega os arquivos compactados.</p>
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="pt-BR"&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html;charset=utf-8"/&gt;
        &lt;link rel="stylesheet" href="&lt;?php echo base_url();?&gt;assets/min/minified.css" type="text/css" media="screen"/&gt;
        &lt;!--[if IE]&gt;
            &lt;link rel="stylesheet" href="&lt;?php echo base_url();?&gt;assets/ie_css/ie.css" type="text/css" media="screen"/&gt;
        &lt;![endif]--&gt;
        &lt;!--[if IE 7]&gt;
        &lt;link rel="stylesheet" href="&lt;?php echo base_url();?&gt;assets/ie_css/ie7.css" type="text/css" media="screen"/&gt;
        &lt;![endif]--&gt;
        &lt;!--[if IE 6]&gt;
        &lt;link rel="stylesheet" href="&lt;?php echo base_url();?&gt;assets/ie_css/ie6.css" type="text/css" media="screen"/&gt;
        &lt;![endif]--&gt;
        &lt;script type="text/javascript" language="JavaScript"&gt;
            var base_url = "&lt;?php echo base_url();?&gt;";
        &lt;/script&gt;
        &lt;script type="text/javascript" src="&lt;?php echo base_url();?&gt;assets/min/jquery.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="&lt;?php echo base_url();?&gt;assets/min/minified.js"&gt;&lt;/script&gt;    
        &lt;title&gt;SISTEMA DE GESTÃO DE PEDIDOS&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;</pre>
<p>Note que a JQuery está sendo carregada separadamente e todos os outros arquivos .js vem do resultado da compactação pelo Driver Minify que gerou o arquivo minified.js. Desta forma, quando quisermos uma nova funcionalidade javascript ou houver a necessidade de incluir um novo arquivo .css basta incluir na pasta e na próxima vez que o sistema for carregado ele será automaticamente incluído no arquivo compactado.</p>
<p>Os arquivos relativos as correções do IE continuam sendo carregados do modo tradicional e poderão ser minimizados separadamente se desejado.</p>
<p>Em meu header html incluo uma variável global JavaScript camada base_url onde guardo a o caminho base da aplicação ou website para utilizar em requisições Ajax etc.</p>
<p>Espero que tenha sido útil. Abraço e até a próxima!</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/117/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=117&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2011/09/05/otimizacao-de-javascript-e-css-com-codeigniter-e-minfy-minimizando-e-unindo-arquivos-css-e-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>

		<media:content url="http://conteudo.imasters.com.br/21521/38812.gif" medium="image">
			<media:title type="html">Copiando arquivos para o seu projeto</media:title>
		</media:content>

		<media:content url="http://conteudo.imasters.com.br/21521/38813.gif" medium="image">
			<media:title type="html">Estrutura de pastas</media:title>
		</media:content>
	</item>
		<item>
		<title>Magic Methods PHP 5 &#8211; Orientação a Objetos com PHP + CodeIgniter</title>
		<link>http://ademirgabardo.wordpress.com/2010/10/18/magic-methods-php-5-orientacao-a-objetos-com-pep-codeigniter/</link>
		<comments>http://ademirgabardo.wordpress.com/2010/10/18/magic-methods-php-5-orientacao-a-objetos-com-pep-codeigniter/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 15:20:32 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Classes]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Magic Methods]]></category>
		<category><![CDATA[Métodos Mágicos]]></category>
		<category><![CDATA[OO]]></category>

		<guid isPermaLink="false">http://www.ademirgabardo.com.br/?p=117</guid>
		<description><![CDATA[Algum tempo atrás li a seguinte frase Programação OO em PHP está se resumindo a programação orientada a métodos (Não lembro mais onde vi isto, se alguém souber me avise), aquela frase me impactou para uma reflexão sobre os códigos que vinha e venho escrevendo em PHP. Salvo pelo uso de frameworks que acabam inevitavelmente [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=163&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="corpo">
<div id="colA">
<div id="strConteudo">
<p>Algum tempo atrás li a seguinte frase</p>
<blockquote><p><em>Programação OO em PHP está se resumindo a programação orientada a métodos</em></p></blockquote>
<p>(Não lembro mais onde vi isto, se alguém souber me avise), aquela  frase me impactou para uma reflexão sobre os códigos que vinha e venho  escrevendo em PHP.</p>
<p>Salvo pelo uso de frameworks que acabam inevitavelmente herdando  características e métodos de suas classes principais, muitos scripts PHP  acabam se tornando um agrupamento de métodos e funções agregados em uma  classe.</p>
<p>Criar uma classe simplesmente para dar include em arquivos externos ou chamar funções não é orientação a objetos.<br />
Este  artigo objetiva apresentar de uma forma bastante simplificada a  representação de uma classe pessoa através da criação de dois objetos  pessoa distintos aplicando esta metodologia ao framework CodeIgniter.</p>
<p>Desta forma teremos um controlador chamado pessoa que é também a  nossa classe e uma view para apresentar os dados. Tudo muito simples.</p>
<p>O foco do artigo está nos &#8220;<strong>Magic Methods</strong>&#8221; do PHP5. Vamos utilizar apenas 3 dos 14 Magic Methods num primeiro momento, o<strong> __get()</strong>,o<strong> __set()</strong> e o <strong>__construct()</strong>. Em uma continuação trabalharemos com os demais métodos.</p>
<p>O PHP não permite herança múltipla, por isto não poderemos herdar  propriedades de mais de uma classe, e como nossa classe pessoa já herda  as propriedades da classe controller precisaremos criar nossa classe  pessoa seguindo o modelo real de uso, ou seja, a representação da nossa  classe concreta.</p>
<p>Vamos ao código do controlador <strong>pessoa.php</strong></p>
<div>
<pre><code>&lt;?php
class Pessoa extends Controller {
    private $nome;
    private $cpf;
    private $sexo;

    function __construct() {
        parent :: Controller();
    }

    public function __set($campo, $valor) {
        $this-&gt; $campo = $valor;
    }

    public function __get($campo) {
        return $this-&gt; $campo;
    }

    function index() {
        $data = array ();
        $joao = new pessoa();
        $joao-&gt;nome = "JOAO";
        $joao-&gt;sexo = "M";
        $joao-&gt;cpf = "123.456.789-00";

        $leticia = new pessoa();
        $leticia-&gt;nome = "LETICIA";
        $leticia-&gt;sexo = "F";
        $leticia-&gt;cpf = "987.654.321-99";

        $data['joao']['nome'] = $joao-&gt;nome;
        $data['joao']['sexo'] = $joao-&gt;sexo;
        $data['joao']['cpf'] = $joao-&gt;cpf;

        $data['leticia']['nome'] = $leticia-&gt;nome;
        $data['leticia']['sexo'] = $leticia-&gt;sexo;
        $data['leticia']['cpf'] = $leticia-&gt;cpf;

        $this-&gt;load-&gt;view('pessoa', $data);
    }
}</code></pre>
</div>
<p>É importante a observar neste código que estamos utilizando o<strong> __construct()</strong> e não repetindo o nome da classe para o construtor, igualmente também poderemos ter um método<strong> __destruct()</strong> que, por exemplo, poderia limpar uma sessão de login após o envio de  uma determinada resposta ou página ou ainda limpar um carrinho de  compras ao final do seu processamento.</p>
<p>Os métodos <strong>__get()</strong> e <strong>__set()</strong> que  permitem ajustarmos e recuperarmos qualquer atributo público da classe  sem a necessidade de construir os &#8220;getters&#8221; e &#8220;setters&#8221; um a um.</p>
<p>Isto faz com que possamos acessar atributos privados de nossas  classes de maneira mais segura e semântica e com muito menos trabalho.  Da para perceber que o PHP fica a cada dia mais parecido com o Java e o  C# neste sentido, reservadas as proporções.<br />
Vamos as explicações</p>
<p><strong>O método mágico __set().</strong></p>
<div>
<pre><code>public function __set($campo,$valor){
        $this-&gt;$campo = $valor;
}</code></pre>
</div>
<p>É muito simples de compreender de que forma estamos acessando cada  atributo, ao receber dois parâmetros sendo o primeiro o atributo e o  segundo o valor atribuído, o método ajusta automaticamente estes  valores.<br />
E isto é acessado no seguinte código.</p>
<div>
<pre><code>$joao-&gt;nome = "JOAO";</code></pre>
</div>
<p><strong>O método mágico __get().</strong></p>
<p>O método<strong> __get()</strong> é ainda mais simples pois apenas  retorna o valor de um atributo, onde $this é o próprio objeto concreto, a  instância da classe, apontando para o valor atribuído aquela variável.</p>
<div>
<pre><code>public function get($campo){
     return $this-&gt;$campo;
}</code></pre>
</div>
<p>Ou seja, para recuperar um valor, basta apontar para ele da seguinte maneira.</p>
<div>
<pre><code>$joao-&gt;nome;</code></pre>
</div>
<p>Levando em consideração que $joao é a instância do objeto e não a classe em si.<br />
Para visualizar os valores atribuídos a variável $data podemos criar uma view chamada <strong>pessoa.php</strong> com o seguinte código fonte.</p>
<div>
<pre><code>&lt;?php
    echo "&lt;pre&gt;";
    print_r($joao);
    print_r($leticia);
?&gt;</code></pre>
</div>
<p>A seguir vamos tratar da abstração da classe pessoa, criando uma  classe abstrata e a partir desta criando duas outras classes concretas,  uma para representar uma pessoa física e uma para representar uma pessoa  jurídica. Este é um exemplo recorrente encontrado bastante na web por  ser muito simples de compreender. O atributo que distingue uma classe  concreta da outra é apenas a diferença entre CNPJ e CPF.</p>
<p>Neste exemplo as classes foram montadas da forma mais simples  possível, poderíamos acrescentar para cada classe seus métodos  específicos.<br />
Observe que ambas as classes <strong>PessoaFisica</strong> e <strong>PessoaJuridica</strong> herdam as propriedades da classe Pessoa.</p>
<p>O PHP não permite herança múltipla, por isso não podemos herdar nas classes <strong>PessoaFisica</strong> e <strong>PessoaJuridica</strong> também de Controller, porém, podemos herdar as propriedades de Controler na classe Pessoa, desta forma, <strong>PessoaFisica</strong> e <strong>PessoaJuridica</strong> também possuem os atributos e métodos do controlador.</p>
<p>Os<strong> Métodos Mágicos</strong> necessariamente <strong>precisam ser públicos e não podem ser acessados estaticamente</strong>.</p>
<p>Além da abstração da classe também criei dois métodos com propósito de estudo que são o <strong>checarCpf()</strong> e o <strong>checarCnpj()</strong> que neste exemplo apenas medem o comprimento da string verificando se corresponde a um CPF ou um CNPJ válidos.<br />
Vejamos como ficou então este código fonte.</p>
<div>
<pre><code>&lt;?php
class Pessoa extends Controller{
  private $nome;
  private $endereco;
    function __construct(){  �
    }

  function index(){
  /*
  * Instanciando uma pessoa física.
  */
�
  $pFisica = new PessoaFisica();
  $pFisica-&gt;nome = "Joaozinho";
  $pFisica-&gt;endereco = "Rua ABC";
  $pFisica-&gt;cpf = $pFisica-&gt;checarCpf("123.456.789-00");

   /*
   * Instanciando uma pessoa jurídica.
   */
   $pJuridica = new PessoaJuridica();
   $pJuridica-&gt;nome = "Industrias X";
   $pJuridica-&gt;endereco = "Rua DEF";
   $pJuridica-&gt;cnpj = $pJuridica-&gt;checarCnpj("12.345.678-0001/00");

   /*
   * Mostrando o conteúdo dos objetos.
   */    

   echo $pFisica-&gt;nome;
   echo "&lt;br/&gt;";
   echo $pFisica-&gt;endereco;
   echo "&lt;br/&gt;";
   echo $pFisica-&gt;cpf;�
   echo "&lt;hr&gt;"; �
   echo $pJuridica-&gt;nome;
   echo "&lt;br/&gt;";
   echo $pJuridica-&gt;endereco;
   echo "&lt;br/&gt;";
   echo $pJuridica-&gt;cnpj;
  }
}

class PessoaFisica extends Pessoa{
    �
      /*
      * Classe Concreta PessoaFisica.
      * Cpf é um atributo que está relacionado somente a esta classe.
      * É este atributo que torna esta classe concreta.
      */

   private $cpf;
   public function __get($campo){  �
      return $this-&gt;$campo;
   }

   public function __set($campo,$valor){
        $this-&gt;$campo = $valor;
   }

   protected function checarCpf($cpf){
        if(strlen($cpf)==14){
          return $cpf;
        }
        else{
          return "CPF INVALIDO";
        }
      }
  }

  class PessoaJuridica extends Pessoa{
      /*
      * Classe Concreta PessoaFisica.
      * Cnpj é um atributo que está relacionado somente a esta classe.
      * É este atributo que torna esta classe concreta.
      */
      private $cnpj;  �
      public function __get($campo){  �
        return $this-&gt;$campo;
      }  �
      public function __set($campo,$valor){
        $this-&gt;$campo = $valor;
      }    �
      protected function checarCnpj($cnpj){
        if(strlen($cnpj)==18){
          return $cnpj;
        }
        else{
          return "CNPJ INVALIDO";
        }
      }
}</code></pre>
</div>
<p>O resultado da execução desta classe será o exibido na figura 1.0</p>
<p><img src="http://conteudo.imasters.com.br/18473/artigo2.jpg" alt="" /></p>
<p>Figura 1.0  Resultado do método índex da classe pessoa.<br />
O PHP5 melhorou em muito o suporte a orientação a objetos e em  muitos momentos se assemelha com o Java e o C#, herança e encapsulamento  são efetivos. Outro modo de acessar os métodos checarCpf() e  chegarCnpj() e fazendo o acesso estático aos métodos.</p>
<div>
<pre><code>echo PessoaJuridica::checarCnpj("12.345.678-0001/00");</code></pre>
</div>
<p>Desta forma podemos utilizar métodos sem a necessidade de instanciar  as classes, deste modo poupando recursos de processamento e memória no  servidor. Neste caso, estes métodos estão disponíveis na classe pessoa  porque definimos sua visibilidade como protected e não como private.</p>
<p><strong>Considerações</strong>: Normalmente se trabalha cada classe  em um arquivo separado, por diversas razões, principalmente organização,  é possível melhorar este exemplo. O guia do usuário do CodeIgniter não  cita estas possíveis situações, mas particularmente não vejo prejuízo em  utilizar o código desta forma. Este é um exemplo com fins didáticos  apenas, nos próximos artigos veremos como trabalhar com os outros  métodos mágicos.</p>
</div>
</div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=163&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2010/10/18/magic-methods-php-5-orientacao-a-objetos-com-pep-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="" />
		<media:content url="" medium="image">
			<media:title type="html">Code Igniter PHP, compre aqui!</media:title>
		</media:content>

		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>

		<media:content url="http://conteudo.imasters.com.br/18473/artigo2.jpg" medium="image" />
	</item>
		<item>
		<title>Ler conteudo de pasta e forcar download de arquivos com PHP e CodeIgniter</title>
		<link>http://ademirgabardo.wordpress.com/2010/09/08/ler-conteudo-de-pasta-e-forcar-download-de-arquivos-com-php-e-codeigniter/</link>
		<comments>http://ademirgabardo.wordpress.com/2010/09/08/ler-conteudo-de-pasta-e-forcar-download-de-arquivos-com-php-e-codeigniter/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 14:09:45 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ademirgabardo.wordpress.com/?p=75</guid>
		<description><![CDATA[É cada vez mais comum a utilização do website como uma área para troca de arquivos, encaminhar catálogos em PDF, backups, tabelas de preço etc. Este uso vem crescendo muito e os empresários tem descoberto que solicitar ao cliente e ou parceiro comercial para que acesse seu website é mais vantajoso em alguns casos do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=75&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>É cada vez mais comum a utilização do website como uma área para troca de arquivos, encaminhar catálogos em PDF, backups, tabelas de preço etc.</p>
<p>Este uso vem crescendo muito e os empresários tem descoberto que solicitar ao cliente e ou parceiro comercial para que acesse seu website é mais vantajoso em alguns casos do que encaminhar arquivos soltos por e-mail.</p>
<p>Talvez seja preciso proteger algumas coisas com login e senha, mas tem outras que quanto mais visualizadas forem, melhor, seja a situação A ou B, ler arquivos em pastas é uma tarefa a cada dia mais rotineira.</p>
<p>Muitas vezes será necessário forçar o donwload porque alguns usuários não sabem como salvar um arquivo .TXT ou de imagem contidos em um link na web.</p>
<p>O CodeIgniter provê dois ajudantes para solucionar esta tarefa, veja no código fonte abaixo como fazer leitura e forçar download de arquivos até mesmo de extensões que abririam no browser por padrão em uma pasta pré-determinada.</p>
<pre>&lt;?php
class Downloads extends Controller {

 function __construct()
 {
 parent::Controller();
 $this-&gt;load-&gt;helper('url');
 $this-&gt;load-&gt;helper('directory');
 $this-&gt;load-&gt;helper('download');
 }

 function index()
 {  �
 $map = directory_map('../arquivos',TRUE);
 foreach($map as $file){
 echo  $file;
 echo " - ";
 echo "&lt;a href='".base_url()."/downloads/baixar/".$file."'&gt;BAIXAR&lt;/a&gt;";
 echo " | ";
 echo "&lt;a href='".base_url()."/arquivos/".$file."'&gt;VER&lt;/a&gt;&lt;br/&gt;";
 }
 }

 function baixar($arquivo){
 $data = file_get_contents("../arquivos/".$arquivo);
 $name = $arquivo;     �
 force_download($name, $data);   �
 }
}
?&gt;</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=75&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2010/09/08/ler-conteudo-de-pasta-e-forcar-download-de-arquivos-com-php-e-codeigniter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:thumbnail url="" />
		<media:content url="" medium="image" />

		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>
	</item>
		<item>
		<title>Gerenciamento de Projetos e o mundo da Imaginação.</title>
		<link>http://ademirgabardo.wordpress.com/2010/09/03/gerenciamento-de-projetos-e-o-mundo-da-imaginacao/</link>
		<comments>http://ademirgabardo.wordpress.com/2010/09/03/gerenciamento-de-projetos-e-o-mundo-da-imaginacao/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 18:19:42 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Gerenciamento de Projetos]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://ademirgabardo.wordpress.com/?p=70</guid>
		<description><![CDATA[A história do gato! Formulando software. Porque seguir metodologias e gerenciar os projetos em uma empresa de software (ou outras)? O que seguir? Scrum? XP? Misturar tudo? Partir para as metodologias clássicas? O fato é que muitas vezes os stackholders alocados em um projeto nem mesmo sabem que são stackholders, e talvez você diga que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=70&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A história do gato! Formulando software.</p>
<p>Porque seguir metodologias e gerenciar os projetos em uma empresa de software (ou outras)?<br />
O que seguir? Scrum? XP? Misturar tudo? Partir para as metodologias clássicas? O fato é que muitas vezes os stackholders alocados em um projeto nem mesmo sabem que são stackholders, e talvez você diga que não é necessário que eles saibam desde que estejam sendo coordenados por um gerente de projetos que saiba. Talves o gerente de projetos nem saiba que ele o é. E talvez a equipe nem enxergue a atividade que estão desenvolvendo como um projeto.<br />
O que? Está achando isso absurdo? Pois saiba que não é.<br />
Estudando gestão de projetos no curso de Bacharelado em Sistemas de Informação pela UDESC neste semestre lembrei-me de uma pergunta que um amigo desenvolvedor sempre faz aos clientes que perguntam sobre preço. (De acordo com o PMI os três tópicos mais considerados em gerenciamento de projetos são respectivamente: prazo, custo e escopo). A pergunta é a seguinte:<br />
- Amigo, se eu te pedir para salvar um gato preso em uma árvore, você cobraria quanto?<br />
Normalmente a primeira resposta é: Como assim?<br />
Se faz necessário um complementando então:<br />
- Quanto você cobraria para salvar um gato dócil de uma arvore com 1,5mts de altura?<br />
Aí o cliente quase sempre responde: “Não cobraria, o faria por gentileza.”<br />
Quando então se faz necessário a réplica:<br />
- E quanto você cobraria para salvar um gato não domesticado com as garras compridas preso na varanda do 14o andar, pelo lado de fora do prédio, utilizando uma escada do corpo de bombeiros?<br />
Bem, aí quase sempre a resposta era o silêncio. A moral da história do gato é que o objetivo final é o mesmo. “Salvar o gato”, contudo, as variáveis envolvidas no problema é que mudaram da situação A para a B.<br />
No mundo de desenvolvimento de software é exatamente assim, muitas vezes o projeto que começa pequeno, como um gatinho dócil se transforma em uma fera incontrolável na qual ninguém quer colocar as mãos e fica lá abandonado no alto de uma varanda no 14o andar do predio até que alguém seja corajoso ou maluco o suficiente para resgatá-lo.<br />
Bem, esta é a relevância em compreender o projeto, entender com clareza as necessidades e expectativas do cliente. E documentar o máximo possível estas necessidades e expectativas antes de começar o desenvolvimento.</p>
<p>Analisar riscos e custos talvez seja a parte mais complicada desta equação e quanto melhor conseguirmos compreender estes procedimentos mais longe estaremos de sistuações desastrosas como as que levam a famosa frase “e agora? Quem vai consertar isso?”.<br />
Em administração de empresas tive um professor que afirmava repetidas vezes que não importa o quão motivado um funcionário esteja ele não vai cumprir uma tarefa a contento até que a tenha compreendido completamente.<br />
Esta máxima pode ser aplicada a projetos, se o objetivo final do projeto não for compreendido com plenitude dificilmente ele será alcançado. Isso parece bastante óbvio, mas no decorrer das reuniões de levantamento de informações junto ao cliente nem sempre as perguntas ficam claras, o cliente muitas vezes não sabe detalhar o que ele quer, e quando sabe, por vezes não consegue passar isso claramente para o gerente de projetos ou para a equipe que está elaborando o projeto.<br />
Neste ponto entra o conheciemento e experiência do gerente de projetos em conseguir coletar dados suficientes para que seja possível gerar as informações pertinentes ao projeto.<br />
E como fazer isto? Utilizando-se de técnicas, métodos, procedimentos e documentos capazes de ajudar a “descobrir” as necessidades do cliente e ou projeto e mensurar os recursos necessários a empregar. Determinar quanto tempo será necessário para a conclusão daquela atividade.<br />
Conseguir avaliar os riscos envolvidos no projeto e obter uma resposta de antemão à possíveis situações de risco, incluir um plano “B” ou mesmo abortar um projeto em casos mais extremados.<br />
No próximo artigo abordarei as técnicas utilizadas em entrevistas, principais documentos gerados necessários ao gerênciamento de projetos e como montar um projeto.</p>
<p>Sobre o autor:<br />
Ademir Gabardo é Bacharelando em Sistema de Informação pela UDESC. Autor, Professor e Instrutor, Desenvolvedor web, entusiasta PHP e de software livre.<br />
Atualmente desenvolvendo sistemas baseados em PHP e MySQL com apoio em frameworks MVC e orientação a objetos.<br />
Também ministra cursos nas áreas de Software livre, BrOffice.org e plataforma MS Office.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/70/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=70&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2010/09/03/gerenciamento-de-projetos-e-o-mundo-da-imaginacao/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="" />
		<media:content url="" medium="image" />

		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>
	</item>
		<item>
		<title>Arquivos do livro disponíveis para download</title>
		<link>http://ademirgabardo.wordpress.com/2010/09/03/arquivos-do-livro-disponiveis-para-download/</link>
		<comments>http://ademirgabardo.wordpress.com/2010/09/03/arquivos-do-livro-disponiveis-para-download/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 14:09:15 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ademirgabardo.wordpress.com/?p=67</guid>
		<description><![CDATA[Os códigos fonte de exemplos do livro foram disponibilizados no website da Novatec. http://www.novatec.com.br/livros/codeigniter Para aqueles que estão lendo o livro e desejam implementar os códigos de modo mais rápido, basta fazer o download. São duas versões do catálogo de produtos com carrinho de compras. Uma utilizando recursos de AJAX com JQuery e outra “tradicional?” [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=67&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Os códigos fonte de exemplos do livro foram disponibilizados no website da Novatec.</p>
<p><a href="http://www.novatec.com.br/livros/codeigniter">http://www.novatec.com.br/livros/codeigniter</a></p>
<p>Para aqueles que estão lendo o livro e desejam implementar os códigos de modo mais rápido, basta fazer o download.</p>
<p>São duas versões do catálogo de produtos com carrinho de compras.<br />
Uma utilizando recursos de AJAX com JQuery e outra “tradicional?” com refresh nas páginas.<br />
Obrigado a todos os leitores que entraram em contato. Qualquer dúvida, crítica, elogio, ideia, será sempre bem vinda.</p>
<p>Abraços a todos, e muito obrigado.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/67/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=67&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2010/09/03/arquivos-do-livro-disponiveis-para-download/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="" />
		<media:content url="" medium="image" />

		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>
	</item>
		<item>
		<title>Enviando e-mail por SMTP autenticado com o CodeIgniter</title>
		<link>http://ademirgabardo.wordpress.com/2010/08/21/enviando-e-mail-por-smtp-autenticado-com-o-codeigniter/</link>
		<comments>http://ademirgabardo.wordpress.com/2010/08/21/enviando-e-mail-por-smtp-autenticado-com-o-codeigniter/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 01:32:13 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Livre]]></category>

		<guid isPermaLink="false">http://ademirgabardo.wordpress.com/?p=60</guid>
		<description><![CDATA[Olá pessoal, recentemente precisei atulizar um website onde o servidor não permitia o envio de e-mail direto pela função mail do PHP, só era possível utilizando o servidor SMTP com autenticação de conta do usuário. Já tinha visto no guia do usuário que a biblioteca “email” fazia isso, mas nunca tinha tentado utilizar por SMTP [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=60&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, recentemente precisei atulizar um website onde o servidor não permitia o envio de e-mail direto pela função mail do PHP, só era possível utilizando o servidor SMTP com autenticação de conta do usuário.<br />
Já tinha visto no guia do usuário que a biblioteca “email” fazia isso, mas nunca tinha tentado utilizar por SMTP com autenticação.<br />
Ao fazer isso o CodeIgniter retornou um erro.<br />
A PHP Error was encountered<br />
Severity: Notice<br />
Message: Undefined index: Subject<br />
Filename: libraries/Email.php<br />
Line Number: 940<br />
Consertei o problema com o “subjetc” e testei, novo erro, com o “to” , fiquei um tanto frustrado, fui ao fórum e ví que vários outros usuários tinham encontrado a mesma dificuldade. Foi então que decidi montar uma library a parte para fazer o envio, peguei uma classe pronta sugerida pelo provedor onde o website está hospedado e ficou da seguinte maneira.</p>
<p>&lt;?php  if (!defined(&#8216;BASEPATH&#8217;)) exit(&#8216;No direct script access allowed&#8217;);<br />
class MySmtp{</p>
<p>var $conn;<br />
var $user;<br />
var $pass;<br />
var $debug;</p>
<p>function MySmtp(){<br />
conn = fsockopen(&#8220;localhost&#8221;, 25, $errno, $errstr, 30);<br />
$this-&gt;Put(&#8220;EHLO localhost&#8221;);<br />
}</p>
<p>function Auth(){<br />
$this-&gt;Put(&#8220;AUTH LOGIN&#8221;);<br />
$this-&gt;Put(base64_encode($this-&gt;user));<br />
$this-&gt;Put(base64_encode($this-&gt;pass));<br />
}</p>
<p>function Send($to, $from, $subject, $msg){<br />
$this-&gt;Auth();<br />
$this-&gt;Put(&#8220;MAIL FROM: &#8221; . $from);<br />
$this-&gt;Put(&#8220;RCPT TO: &#8221; . $to);<br />
$this-&gt;Put(&#8220;DATA&#8221;);<br />
$this-&gt;Put($this-&gt;toHeader($to, $from, $subject));<br />
$this-&gt;Put(&#8220;\r\n&#8221;);<br />
$this-&gt;Put($msg);<br />
$this-&gt;Put(&#8220;.&#8221;);<br />
$this-&gt;Close();<br />
if(isset($this-&gt;conn)){<br />
return true;<br />
}else{<br />
return false;<br />
}<br />
}</p>
<p>function Put($value){<br />
return fputs($this-&gt;conn, $value . &#8220;\r\n&#8221;);<br />
}</p>
<p>function toHeader($to, $from, $subject){<br />
$header = &#8220;Message-Id: &lt;&#8221;. date(&#8216;YmdHis&#8217;).&#8221;.&#8221;. md5(microtime()).&#8221;.&#8221;. strtoupper($from) .&#8221;&gt; \r\n&#8221;;<br />
$header .= &#8220;From: &lt;&#8221; . $from . &#8220;&gt; \r\n&#8221;;<br />
$header .= &#8220;To: &lt;&#8221;.$to.&#8221;&gt; \r\n&#8221;;<br />
$header .= &#8220;Subject: &#8220;.$subject.&#8221; \r\n&#8221;;<br />
$header .= &#8220;Date: &#8220;. date(&#8216;D, d M Y H:i:s O&#8217;) .&#8221; \r\n&#8221;;<br />
$header .= &#8220;X-MSMail-Priority: High \r\n&#8221;;<br />
$header .= &#8220;Content-Type: Text/HTML&#8221;;<br />
return $header;<br />
}</p>
<p>function Close(){<br />
$this-&gt;Put(&#8220;QUIT&#8221;);<br />
if($this-&gt;debug == true){<br />
while (!feof ($this-&gt;conn)) {<br />
fgets($this-&gt;conn) . &#8220;&lt;br&gt;\n&#8221;;<br />
}<br />
}<br />
return fclose($this-&gt;conn);<br />
}</p>
<p>}</p>
<p>E para utilizar</p>
<p><code>$texto = "O rato roeu a roupa do rei de roma";<br />
$smtp = new MySmtp();<br />
$smtp-&gt;user = "usuario@servidor.com.br";<br />
$smtp-&gt;pass = "suasenha";<br />
$smtp-&gt;debug =true;<br />
$from = "usuario@servidor.com.br";<br />
$to = "destino@servidor.com.br";<br />
$subject = "Título do e-mail";<br />
$smtp-&gt;Send($to, $from, $subject, $texto);</code></p>
<p>Simples assim, se tudo correr bem, o e-mail chegará.<br />
Abraços a todos.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/60/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=60&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2010/08/21/enviando-e-mail-por-smtp-autenticado-com-o-codeigniter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:thumbnail url="" />
		<media:content url="" medium="image" />

		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>
	</item>
		<item>
		<title>Usando o formato Timestamp no Javascript. UNIX x Javascript x PHP x MySQL</title>
		<link>http://ademirgabardo.wordpress.com/2010/08/13/usando-o-formato-timestamp-no-javascript-unix-x-javascript-x-php-x-mysql/</link>
		<comments>http://ademirgabardo.wordpress.com/2010/08/13/usando-o-formato-timestamp-no-javascript-unix-x-javascript-x-php-x-mysql/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 16:38:19 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://ademirgabardo.wordpress.com/?p=47</guid>
		<description><![CDATA[Usando o formato Timestamp no Javascript. Esta é uma função simples, mas capsciosa e não lá muito bem documentada, por isso resolvi postar. O formato timestamp é uma contagem de tempo apartir de uma data (1, Jan 1970 &#8211; Unix) que vai crescendo conforme a passagem do tempo. Muitas vezes precisamos a partir deste formato [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=47&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Usando o formato Timestamp no Javascript.</p>
<p>Esta é uma função simples, mas capsciosa e não lá muito bem documentada, por isso resolvi postar.<br />
O formato timestamp é uma contagem de tempo apartir de uma data (1, Jan 1970 &#8211; <a title="UNIX TIMESTAMP" href="http://www.unixtimestamp.com/index.php">Unix</a>) que vai crescendo conforme a passagem do tempo.</p>
<p>Muitas vezes precisamos a partir deste formato criar uma função de comparação entre datas e ou horários.</p>
<p>Recentemente com a <a title="JQuery" href="http://jquery.com/">JQuery </a>utilizei a biblioteca Javascript para gerar gráficos chamada <a href="http://people.iola.dk/olau/flot/examples/time.html">Flot </a>com a necessidade de comparar datas. (http://people.iola.dk/olau/flot/examples/time.html)<br />
Para fazer estas comparações a Flot utiliza o formato Timestamp do Javascript que é diferente do padrão de Timestamp to UNIX e também do MySQL a diferença é que o UNIX conta os segundos e o Javascript conta os Milisegundos.</p>
<p>Procurei referência na web e encontrei diversos métodos para fazer, o mais óbvio seria simplesmente multiplicar um Timestamp UNIX ou MySQL por 1000 para obter o timestamp em Javscript.</p>
<p>Contudo na hora de passar do PHP para o JavaScript as vezes ocorriam discrepâncias (Não consegui localizar o porquê) nos TimeStamps gerados.<br />
Depois de bater a cabeça um bocado tentando gerar o Timestamp correto no PHP me dei conta de que é muito mais fácil deixar com que o Javascript gere este timestamp da seguinte forma.<br />
Para gerar o timestamp atual.</p>
<p>&lt;script&gt;<br />
Var meuTimestamp = new  new Date().getTime();<br />
&lt;/script&gt;</p>
<p>E para gerar um timestamp de uma data específica recebendo o valor do PHP basta incluir a data. Como por exemplo.</p>
<p>&lt;script&gt;<br />
Var meuTimestamp = new  new Date(&lt;?php echo(‘2010/1/3 12:45:00’);?&gt;).getTime();<br />
&lt;/script&gt;</p>
<p>Para aplicar em outras situações basta alterar a data que foi mostrada implicitamente com o “echo”. Para uma data vinda do Banco de dados por exemplo (Que foi o meu caso).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=47&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2010/08/13/usando-o-formato-timestamp-no-javascript-unix-x-javascript-x-php-x-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>
	</item>
		<item>
		<title>Capa do Livro Atualizada</title>
		<link>http://ademirgabardo.wordpress.com/2010/08/10/capa-do-livro-atualizada/</link>
		<comments>http://ademirgabardo.wordpress.com/2010/08/10/capa-do-livro-atualizada/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 17:10:23 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Livre]]></category>

		<guid isPermaLink="false">http://ademirgabardo.wordpress.com/?p=43</guid>
		<description><![CDATA[Olá amigos. Ficou pronta a capa atualizada do livro. Mais alguns dias e será lançado. Já disponível para a pré-venda aqui: http://www.novatec.com.br/livros/codeigniter/ 20% de desconto para este livro e para outros da Novatec aqui<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=43&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Olá amigos.<br />
Ficou pronta a capa atualizada do livro.<br />
Mais alguns dias e será lançado.</p>
<p><a href="http://www.novatec.com.br/"><img class="aligncenter size-full wp-image-44" title="CodeIgniter" src="http://ademirgabardo.files.wordpress.com/2010/08/p_capa_livro_codeigniter_final.jpg?w=490" alt=""   /></a></p>
<p>Já disponível para a pré-venda aqui:</p>
<p><a href="http://www.novatec.com.br/livros/codeigniter/" target="_blank">http://www.novatec.com.br/livros/codeigniter/</a></p>
<p>20% de desconto para este livro e para outros da Novatec <a href="http://www.pinceladasdaweb.com.br/blog/2010/08/20/livros-com-20-de-desconto-na-editora-novatec/" target="_blank">aqui</a></p>
<p><img class="alignleft size-full wp-image-55" title="banner_livro" src="http://ademirgabardo.files.wordpress.com/2010/08/banner_livro.jpg?w=490" alt=""   style='display:none;' /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=43&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2010/08/10/capa-do-livro-atualizada/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>

		<media:content url="http://ademirgabardo.files.wordpress.com/2010/08/p_capa_livro_codeigniter_final.jpg" medium="image">
			<media:title type="html">CodeIgniter</media:title>
		</media:content>

		<media:content url="http://ademirgabardo.files.wordpress.com/2010/08/banner_livro.jpg" medium="image">
			<media:title type="html">banner_livro</media:title>
		</media:content>
	</item>
		<item>
		<title>Microsoft Office 2010 lançado no Brasil hoje</title>
		<link>http://ademirgabardo.wordpress.com/2010/07/28/microsoft-office-2010-lancado-no-brasil-hoje/</link>
		<comments>http://ademirgabardo.wordpress.com/2010/07/28/microsoft-office-2010-lancado-no-brasil-hoje/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 14:45:46 +0000</pubDate>
		<dc:creator>ademirgabardo</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Office]]></category>

		<guid isPermaLink="false">http://ademirgabardo.wordpress.com/?p=39</guid>
		<description><![CDATA[Apensar de já ser possível baixar o MS Office 2010 a algum tempo da web, hoje foi anunciado o lançamento oficial do pacote de aplicativos da Microsoft. Muitas melhorias e enfase no uso do Ribbon menu. Mais uma vez a Microsoft se reafirma neste segmento de mercado depois de ter perdido uma fatia para o [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=39&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Apensar de já ser possível baixar o MS Office 2010 a algum tempo da web, hoje foi anunciado o lançamento oficial do pacote de aplicativos da Microsoft. Muitas melhorias e enfase no uso do Ribbon menu.</p>
<p>Mais uma vez a Microsoft se reafirma neste segmento de mercado depois de ter perdido uma fatia para o gratuíto e livre OpenOffice.org que apesar de tão eficiente quanto o MS Office não oferece uma interface tão rica e atrativa para seus usuários.</p>
<p>Para quem não abre mão do Word e Excel no seu cotidiano vale a pena dar uma olhada nas novidades listadas aqui: <a href="http://office.microsoft.com/pt-br/products/recursos-e-beneficios-do-office-2010-HA101812297.aspx">http://office.microsoft.com/pt-br/products/recursos-e-beneficios-do-office-2010-HA101812297.aspx</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ademirgabardo.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ademirgabardo.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ademirgabardo.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ademirgabardo.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ademirgabardo.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ademirgabardo.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ademirgabardo.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ademirgabardo.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ademirgabardo.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ademirgabardo.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ademirgabardo.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ademirgabardo.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ademirgabardo.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ademirgabardo.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ademirgabardo.wordpress.com&amp;blog=10820892&amp;post=39&amp;subd=ademirgabardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ademirgabardo.wordpress.com/2010/07/28/microsoft-office-2010-lancado-no-brasil-hoje/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/45af7eb5c52245c70bf1bae628eeaf5e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ademirgabardo</media:title>
		</media:content>
	</item>
	</channel>
</rss>
