<?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>Roberson</title>
	<atom:link href="http://www.roberson.com.br/feed" rel="self" type="application/rss+xml" />
	<link>http://www.roberson.com.br</link>
	<description>Blog sobre linguagens de programação e bancos de dados.</description>
	<lastBuildDate>Tue, 22 Nov 2011 16:27:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Convertendo campos em url amigável pelo Mysql</title>
		<link>http://www.roberson.com.br/mysql/convertendo-campos-em-url-amigavel-pelo-mysql</link>
		<comments>http://www.roberson.com.br/mysql/convertendo-campos-em-url-amigavel-pelo-mysql#comments</comments>
		<pubDate>Tue, 22 Nov 2011 16:27:21 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[procedure]]></category>
		<category><![CDATA[trigger]]></category>
		<category><![CDATA[url-amigavel]]></category>
		<category><![CDATA[valicações]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=202</guid>
		<description><![CDATA[Function+Trigger MySql para converter o nome dos produtos, categorias, páginas e demais seções de um site em "nomes" para serem usados em url's amigaveis
Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-%e2%80%93-parte-02' rel='bookmark' title='Validando dados inseridos no banco MySql – Parte 02'>Validando dados inseridos no banco MySql – Parte 02</a></li>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01' rel='bookmark' title='Validando dados inseridos no banco MySql &#8211; Parte 01'>Validando dados inseridos no banco MySql &#8211; Parte 01</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Hoje vou mostrar uma <em>Function</em> para converter o nome dos produtos, categorias, páginas e demais seções de um site em &#8220;nomes&#8221; para serem usados na url amigável do seu site.</p>
<p>Para quem não saber, url amigável é utilizado para deixar as url&#8217;s de um site mais &#8220;<em>bonitas</em>&#8220;. Exemplo: temos um produto <strong>TÊNIS</strong>, sem url amigável o seu sistema provavelmente iria ter como url algo como (http://www.seusite.com.br/index.php?product_id=123) que iria indicar o <em>ID</em> do produto para que você possa encontrar qual produto exibir na tela do usuário. Usando url amigável você transforma a url em algo que diz um pouco mais sobre o produto (http://www.seusite.com.br/produto/tenis) dessa forma conseguimos deixar uma url mais facil de decorar, entender e divulgar, sem contar que melhora a <strong>indexação </strong>do seu site em <strong>SEO</strong>(Search Engine Optimization), pois da mesma forma que fica mais fácil para um usuário entender do que se trata a url, também fica mais fácil para o Google ou qualquer outro sistema de busca <strong>categorizar as suas páginas</strong>.</p>
<p>Existem várias maneiras de fazer url amigável, a maneira que utilizo é guardando no banco de dados o nome que desejo para o produto como url. Então se o nome do produto é <strong>TÊNIS MARCA X PRETO</strong> no campo Url Amigável eu preencho <strong>tenis_marca_x_preto </strong>que será utilizado na url. No meu sistema eu deixo esse campo a ser preenchido pelo <strong>Cliente</strong>(olha o perigo rss)<strong> </strong>na própria adminstração do produto, porém como se é de imaginar, o cliente não tem visão de que esse é um campo importante e acaba deixando em branco ou pior, quando travo como um campo obrigatório e valido o campo para não permitir espaços, acentos e outros caracteres especiais o <strong>cliente simplesmente não consegue cadastrar o produto,</strong> pois não consegue gerar uma<strong> url válida</strong>.</p>
<p>Sendo assim resolvi criar uma <em>FUNCTION</em> em <em>MySql</em> que converta automaticamente o nome do produto, categoria, etc em uma url amigável válida. Também criei uma <em>TRIGGER</em> que valida se o usuário preencheu o campo, caso não tenha preenchido a <em>trigger</em> dispara a <em>function</em> convertendo o nome e gravando o campo url amigável.</p>
<p>Bom chega de histórinhas e vamos ao que interessa, como criar a tal função e o tal gatilho.</p>
<p>A <em>FUCNTION</em> funciona de uma maneira bem simples, basicamente troco os caracteres indesejádos por caracteres válidos para uma url e retorno o nome já convertido para ser usado.</p>
<pre name="code" class="sql">
CREATE FUNCTION urlAmigavel(name VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
	DECLARE campo VARCHAR(255);
	SET campo = TRIM(UCASE(name));
	SET campo = REPLACE(campo ,'Á','A');
	SET campo = REPLACE(campo ,'À','A');
	SET campo = REPLACE(campo ,'Ã','A');
	SET campo = REPLACE(campo ,'Â','A');
	SET campo = REPLACE(campo ,'É','E');
	SET campo = REPLACE(campo ,'È','E');
	SET campo = REPLACE(campo ,'Ê','E');
	SET campo = REPLACE(campo ,'Í','I');
	SET campo = REPLACE(campo ,'Ì','I');
	SET campo = REPLACE(campo ,'Î','I');
	SET campo = REPLACE(campo ,'Ó','O');
	SET campo = REPLACE(campo ,'Ò','O');
	SET campo = REPLACE(campo ,'Ô','O');
	SET campo = REPLACE(campo ,'Õ','O');
	SET campo = REPLACE(campo ,'Ú','U');
	SET campo = REPLACE(campo ,'Ù','U');
	SET campo = REPLACE(campo ,'Û','U');
	SET campo = REPLACE(campo ,'Ü','U');
	SET campo = REPLACE(campo ,'Ç','C');
	SET campo = REPLACE(campo ,'  ','_');
	SET campo = REPLACE(campo ,' ','_');
	SET campo = REPLACE(campo ,'+','');
	SET campo = REPLACE(campo ,'_-_','-');
	SET campo = REPLACE(campo ,'/','');
	SET campo = REPLACE(campo ,'\\','');
	SET campo = REPLACE(campo ,'?','');
	SET campo = REPLACE(campo ,'&amp;','');
	SET campo = REPLACE(campo ,'__','_');
	RETURN LCASE(campo);
END;
</pre>
<p>OBS: Caso queria alterar a <em>FUNCTION</em> depois de já ter criado ela no seu banco de dados, é necessário apagar a função e criar novamente. O comando para apagar seria o (<em>DROP FUNCTION `nomeDaFuncao`;</em>)</p>
<p>Após criada a função podemos testar, executando a função na tabela de produtos e no campo nome, assim é possível visualizar como vai ficar os nomes antes de atualizar.</p>
<pre name="code" class="sql">
SELECT urlAmigavel(campoNomeProduto) FROM tabelaProduto
</pre>
<p>Veja que o retorno desta <em>query </em>é o nome do produto já retirando os espaços, acentos e caracteres especiais. Neste exemplo coloquei os caracteres que achei necessário, caso tenha necessidade de substituir mais algum outro caracter que não conste nessa lista, você pode adicionar seguindo como exemplo os outros caracteres que foram tratados na função.</p>
<p>No meu caso o <em>data base</em> do cliente já estáva com vários produtos cadastrados então tive que atualizar o campo url_amigavel do meu banco com o nome dos produtos antes de gerar a trigger que irá fazer isso automaticamente. Para atualizar todos os registro a sintaxe fica mais ou menos como mostrado abaixo, bastando trocar pelo nome dos seus campos e tabelas.</p>
<pre name="code" class="sql">
UPDATE tabelaProduto SET campo_url_amigavel = urlAmigavel(campo_nome_produto) WHERE campo_url_amigavel IS NULL
</pre>
<p>Dessa forma iremos atualizar os produtos já existentes. No meu caso as url&#8217;s ficam separadas em uma tabela e o nome do produto fica em outra tabela, mas por essa query vocês podem entender o funcionamento e adaptar para as suas necessidades.</p>
<p>Agora vamos criar a <em>TRIGGER</em> no evento <em>BEFORE INSERT</em>, ou seja, toda vez que um novo produto for cadastrado.</p>
<pre name="code" class="sql">
DELIMITER $$
CREATE TRIGGER trgGeraUrlAmigavel BEFORE INSERT ON tabela_produto
FOR EACH ROW
BEGIN
	IF(NEW.campo_url_amigavel IS NULL) THEN
		SET NEW.campo_url_amigavel = urlAmigavel(NEW.campo_nome_produto);
	END IF;
END$$
</pre>
<p>Conforme pode ser visto na <em>trigger</em>, é validado se o campo veio nulo, caso sim, insere o retorno da função para ser inserido como valor para a url amigável.</p>
<p>Espero que tenham gostado do post, qualquer <strong>sugestão</strong>, <strong>dúvida </strong>ou até <strong>crítica </strong>sobre o conteúdo, fiquem a vontade para <strong>comentar</strong>, a medida do possível vou respondendo os comentário. <strong>Toda contribuição é válida</strong>.</p>
<p>Caso tenha uma <strong>sugestão </strong>para novos <strong>posts </strong>sobre <em>MySql, ORACLE, PHP, CSS, Ajax</em> ou <em>Jquery</em> por favor mandem e-mail para <a href="mailto:blog@roberson.com.br" target="_blank">blog@roberson.com.br</a> que se eu tiver domínio do assunto em questão, com certeza irei criar um post sobre, e se não tiver domínio sobre o assunto, provavelmente vou estudar sobre e postar meus comentários, quem saber até um post mais complexo.</p>
<p>Até o próximo post.</p>
<p>Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-%e2%80%93-parte-02' rel='bookmark' title='Validando dados inseridos no banco MySql – Parte 02'>Validando dados inseridos no banco MySql – Parte 02</a></li>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01' rel='bookmark' title='Validando dados inseridos no banco MySql &#8211; Parte 01'>Validando dados inseridos no banco MySql &#8211; Parte 01</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/mysql/convertendo-campos-em-url-amigavel-pelo-mysql/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validando dados inseridos no banco MySql – Parte 02</title>
		<link>http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-%e2%80%93-parte-02</link>
		<comments>http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-%e2%80%93-parte-02#comments</comments>
		<pubDate>Wed, 14 Apr 2010 13:18:31 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[estudos]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[tratamento de erros]]></category>
		<category><![CDATA[trigger]]></category>
		<category><![CDATA[valicações]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=176</guid>
		<description><![CDATA[Agora vou falar como criar a validação de CPF usando um gatilho(trigger) e uma função(function) em MySQL. 
Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01' rel='bookmark' title='Validando dados inseridos no banco MySql &#8211; Parte 01'>Validando dados inseridos no banco MySql &#8211; Parte 01</a></li>
<li><a href='http://www.roberson.com.br/mysql/convertendo-campos-em-url-amigavel-pelo-mysql' rel='bookmark' title='Convertendo campos em url amigável pelo Mysql'>Convertendo campos em url amigável pelo Mysql</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Olá galera, dando continuidade à série de validação de dados. Agora vou falar como criar a validação de CPF usando um gatilho(<em>trigger</em>) e uma função(<em>function</em>) em <strong><em>MySQL</em></strong>. Para esse post eu usei o script de validação de CPF <a title="Função para validar CPF no SQL Server" href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=2723" target="_blank">deste artigo aqui</a> escrito pelo <a title="Cristiano Martins Alves" href="http://www.devmedia.com.br/space.asp?id=52918" target="_blank">Cristiano Martins Alves</a>, no artigo do Cristiano ele mostra uma função para validação em <strong><em>SQL Server</em></strong>, eu apenas adaptei o código dele para que rode em<strong><em> MySQL</em></strong>, as mudanças foram poucas, quase todas foram em função da diferença de sintaxe(ponto e virgula e <em>loops</em>), da função <em>CONVERT </em>para <em>CAST </em>e da função <em>LEN</em> para <em>LENGTH</em>. Depois das alterações o código ficou da seguinte maneira.</p>
<pre name="code" class="sql">-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` FUNCTION `validarCpf`(CPF CHAR(11)) RETURNS double
BEGIN
	DECLARE INDICE INT;
	DECLARE SOMA INT;
	DECLARE DIG1 INT;
	DECLARE DIG2 INT;
	DECLARE CPF_TEMP VARCHAR(11);
	DECLARE DIGITOS_IGUAIS CHAR(1);
	DECLARE RESULTADO CHAR(1);

	SET RESULTADO = FALSE;

	/*
	Verificando se os dígitos são iguais
	A Principio CPF com todos o números iguais são Inválidos
	apesar de validar o Calculo do digito verificado
	EX: O CPF 00000000000 é inválido, mas pelo calculo
	Validaria
	*/

	SET CPF_TEMP = SUBSTRING(CPF,1,1);

	SET INDICE = 1;
	SET DIGITOS_IGUAIS = 'S';

	WHILE (INDICE &lt;= 11) DO
		IF (SUBSTRING(CPF,INDICE,1) &lt;&gt; CPF_TEMP) Then
			SET DIGITOS_IGUAIS = 'N';
		END IF;
		SET INDICE = INDICE + 1;
	END WHILE;

	/*Caso os dígitos não sejam todos iguais Começo o calculo do dígitos*/
	IF (DIGITOS_IGUAIS = 'N') THEN
		/*Cálculo do 1º dígito*/
		SET SOMA = 0;
		SET INDICE = 1;
		WHILE (INDICE &lt;= 9) DO 			SET Soma = Soma + CAST(SUBSTRING(CPF,INDICE,1) AS UNSIGNED) * (11 - INDICE); 			SET INDICE = INDICE + 1; 		END WHILE; 		SET DIG1 = 11 - (SOMA % 11); 		IF (DIG1 &gt; 9) THEN
			SET DIG1 = 0;
		END IF;

		-- Cálculo do 2º dígito }
		SET SOMA = 0;
		SET INDICE = 1;
		WHILE (INDICE &lt;= 10) DO 			SET Soma = Soma + CAST(SUBSTRING(CPF,INDICE,1) AS UNSIGNED) * (12 - INDICE); 			SET INDICE = INDICE + 1; 		END WHILE; 		SET DIG2 = 11 - (SOMA % 11); 		IF DIG2 &gt; 9 THEN
			SET DIG2 = 0;
		END IF;

		-- Validando
		IF (DIG1 = SUBSTRING(CPF,LENGTH(CPF)-1,1)) AND (DIG2 = SUBSTRING(CPF,LENGTH(CPF),1)) THEN
			SET RESULTADO = TRUE;
		ELSE
			SET RESULTADO = FALSE;
		END IF;

	END IF;
	RETURN RESULTADO;
END</pre>
<p>Executando esse código naquela nossa base de testes (<a title="Validando dados inseridos no banco MySQL - Parte 01" href="http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01" target="_blank">download e leitura da parte 01</a>) a função <em>validaCpf()</em> vai ser criada no seu banco de dados, para executar a função basta executar um <em>SELECT </em>normal chamando a função <em>validaCpf()</em>, como no exemplo abaixo.</p>
<pre name="code" class="sql">SELECT validarCpf('02452345798') FROM dual</pre>
<p>Nesse caso irá retornar 0(zero) que corresponde a false/falso, caso você coloque um cpf válido no teste ele irá retornar 1(um) que corresponde a true/verdadeiro. Sendo assim agora basta colocarmos na nossa <em>trigger</em> essa chamada para a validação.</p>
<pre name="code" class="sql">-- Trigger DDL Statements
DELIMITER $$

USE `testes_roberson`$$CREATE DEFINER=`root`@`localhost` TRIGGER trgValidacaoEmail BEFORE INSERT ON clientes
FOR EACH ROW BEGIN
    -- Declaro variável para identificar se está válido ou não
    DECLARE email DOUBLE DEFAULT FALSE;
    DECLARE cpf DOUBLE DEFAULT FALSE;

    -- Verificar se e-mail é válido
	IF (NOT EXISTS (SELECT NULL FROM Clientes WHERE  NEW.Email REGEXP '^[a-zA-Z0-9]{1}([\._a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+){1,3}$')) THEN
        -- Caso seja inválido atribuo true para a variável email
        SET email = TRUE;
	END IF;

	IF ((SELECT validarCpf(NEW.Cpf) FROM dual) = 0 ) THEN
        -- Caso seja inválido atribuo true para a variável cpf
		SET cpf = TRUE;
	END IF;

    -- Verifico se as duas variaveis (email e cpf) estão como true, e mostro o erro
	IF (email &amp;&amp; cpf) THEN
        SELECT 0 FROM `Não foi possível inserir os dados! E-mail e CPF inválidos`INTO @error;
    END IF;
    -- Verifico se a variável email está como true, e mostro o erro
    IF (email) THEN
        SELECT 0 FROM `Não foi possível inserir os dados! E-mail inválido`INTO @error;
    END IF;
    -- Verifico se a variável cpf está como true, e mostro o erro
    IF (cpf) THEN
        SELECT 0 FROM `Não foi possível inserir os dados! CPF inválido`INTO @error;
	END IF;
END$$</pre>
<p>Criando essa <em>trigger </em>ou alterando a existente do exemplo anterior, a <em>trigger </em>será disparada todas as vezes que algum dado for ser inserido no banco e verificará tanto e-mail quanto CPF. Eu gostaria de ter feito esse exemplo de uma maneira um pouco diferente, queria armazenar em uma variável a string com o erro a cada verificação, e ao final concatenar elas e exibir o erro, porem não consegui que o <em>CONCAT </em>funciona-se dentro da clausula <em>FROM</em>. Caso alguem consiga algo do tipo, por favor me envie que eu atualizo aqui no script, e eu também vou continuar tentando fazer essa alteração.</p>
<p>O exemplo php da parte 01 continua funcionando da mesma maneira, para testarmos basta mudar no insert para um cpf inválido. Quando o E-mail e/ou CPF forem inválidos o erro será mostrado.</p>
<p>Espero ter contribuido com algo, sugestões, criticas ou elogios são muito bem aceitos. Espero que aproveitem e sucesso a todos.</p>
<p>Veja também:<br />
<a href="http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01" target="_self">Validando dados inseridos no banco MySql – Parte 01</a></p>
<p>Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01' rel='bookmark' title='Validando dados inseridos no banco MySql &#8211; Parte 01'>Validando dados inseridos no banco MySql &#8211; Parte 01</a></li>
<li><a href='http://www.roberson.com.br/mysql/convertendo-campos-em-url-amigavel-pelo-mysql' rel='bookmark' title='Convertendo campos em url amigável pelo Mysql'>Convertendo campos em url amigável pelo Mysql</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-%e2%80%93-parte-02/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Validando dados inseridos no banco MySql &#8211; Parte 01</title>
		<link>http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01</link>
		<comments>http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01#comments</comments>
		<pubDate>Tue, 13 Apr 2010 20:44:16 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[estudos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tratamento de erros]]></category>
		<category><![CDATA[trigger]]></category>
		<category><![CDATA[valicações]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=165</guid>
		<description><![CDATA[Neste post pretendo mostrar como fazer o tratamento dos dados inseridos e atualizados no banco de dados. A idéia inicial é que o próprio mysql verifique alguns tipos de dados antes de aceitar a inserção ou alteração dos dados.
Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-%e2%80%93-parte-02' rel='bookmark' title='Validando dados inseridos no banco MySql – Parte 02'>Validando dados inseridos no banco MySql – Parte 02</a></li>
<li><a href='http://www.roberson.com.br/mysql/convertendo-campos-em-url-amigavel-pelo-mysql' rel='bookmark' title='Convertendo campos em url amigável pelo Mysql'>Convertendo campos em url amigável pelo Mysql</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Neste post pretendo mostrar como fazer o tratamento dos dados inseridos e atualizados no banco de dados. A idéia inicial é que o próprio mysql verifique alguns tipos de dados antes de aceitar a inserção ou alteração dos dados. Isso pode ser útil em empresas onde o DBA(Administrador de banco de dados) não é a mesma pessoa que vai programar o sistema, ou simplesmente quer garantir que todos os dados só entraram no banco se estiverem consistentes. Colocando as verificações diretamente no banco de dados, não dependemos do programa nos enviar dados já validados, não somos reféns do que vem da interface. Para o programador iremos retornar um erro &#8220;amigável&#8221; dizendo que o dado não foi inserido pois continha erro no campo X ou Y.</p>
<p>Para o exemplo estou disponibilizando para download <a title="Arquivos Exemplos MySql" href="http://www.roberson.com.br/wp-content/uploads/2010/04/exemplos-blog-roberson-mysql.zip" target="_self">aqui </a>o script para criação e população de um banco de dados teste (Schema testes_roberson), nos outros posts relacionados a banco de dados também irei utilizar essa base, conforme eu for modificando a base vou atualizando o script de criação e publicando uma notificação de atualização aqui mesmo no blog.</p>
<p>A validação que vou mostrar é bem simples, mas pode dar uma idéia de como criar validações mais completas (pretendo ir colocando aos poucos outras validações mais complexas). Neste exemplo vou mostrar como criar uma <em><strong>Trigger </strong></em>para validar <em>E-mail</em>.</p>
<p>Primeiro faça o <a title="Arquivos Exemplos MySql" href="http://www.roberson.com.br/wp-content/uploads/2010/04/exemplos-blog-roberson-mysql.zip" target="_self">download</a> do arquivo .zip onde você encontrará o arquivo testes_roberson.sql e o arquivo leiame.txt(algumas refências sobre o arquivo). Execute o arquivo sql em seu SGBD(Sistema Gerenciador de Banco de Dados), eu uso o MySQL Workbench Tools onde é possível administrar, interagir e modelar bases MySQL, mas pode utilizar qualquer SGBD de sua preferência.</p>
<p>Com o banco, tabelas e dados já criados agora vamos para a análise de possíveis validações que podemos fazer.</p>
<div id="attachment_168" class="wp-caption aligncenter" style="width: 439px"><a href="http://www.roberson.com.br/wp-content/umploads/2010/04/modelageTestesRoberson.png"><img class="size-full wp-image-168" title="Fig. 01 - Modelagem Data Base testes_roberson (schema)" src="http://www.roberson.com.br/wp-content/uploads/2010/04/modelagemTestesRoberson.png" alt="Fig. 01 - Modelagem Data Base testes_roberson (schema)" width="429" height="227" /></a><p class="wp-caption-text">Fig. 01 - Modelagem Data Base testes_roberson (schema)</p></div>
<p>Olhando as tabelas podemos concluir que:</p>
<ol>
<li>Trata-se de um banco simples (para estudos) de um cadastro de clientes.</li>
<li>Podemos criar uma rotina para validar CPF, E-mail e talvez ainda o CEP (validar se veio somente numeros e se são 8 caracteres)</li>
<li>Podemos criar tabelas de Cidades e Estados para evitar duplicidade de dados.</li>
</ol>
<p>Nosso objetivo neste post é criar uma<em> trigger</em> para validar e permitir somente e-mails válidos. Segue a baixo código para criação da<em> trigger</em>.</p>
<pre name="code" class="sql">-- Trigger DDL Statements
DELIMITER $$

-- Selecionamos o database desejado e criamos a trigger
-- Usando o BEFORE validamos o dado antes de inserir na tabela e AFTER depois de inserir na tabela
-- INSERT significa que a trigger será disparada quando ocorrer um INSERT na tabela, pode ser usado também o UPDATE e DELETE
USE `testes_roberson`$$CREATE DEFINER=`root`@`localhost` TRIGGER trgValidacaoEmail BEFORE INSERT ON clientes
  FOR EACH ROW BEGIN
    -- Verificamos se o NEW.Email (e-mail que está vindo no INSERT) é válido segundo a expressão regular usado com a função REGEXP
    IF (NOT EXISTS (SELECT NULL FROM Clientes WHERE  NEW.Email REGEXP '^[a-zA-Z0-9]{1}([\._a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+){1,3}$')) THEN
        -- caso entre no IF disparamos um SELECT com nome de tabela inválido descrevendo o erro que será retornado.
        SELECT 0 FROM `Erro ao inserir dados! E-mail Inválido!` INTO @error;
    -- Fechamos o IF
    END IF;
  -- Fechamos a criação da trigger
  END$$</pre>
<p>Com isso a validação já deve estar funcionar. É possível prever uma pequena &#8220;gambiarra&#8221; (prefiro chamar de ajuste técnico) somente olhando esse script. Quando tentarmos inserir um e-mail inválido ele irá nos retornar o seguinte erro:</p>
<pre name="code" class="xml">Error Code: 1146
Table 'testes_roberson.Erro ao inserir dados! E-mail Inválido!' doesn't exist</pre>
<p>Este erro está nos dizendo que a tabela &#8216;Erro ao inserir dados! E-mail Inválido!&#8217; não existe nessa base de dados. Isso acontece devido ao fato de o nosso querido MySQL não ter nada expecífico para tratamento de erros ou de exceção (<em>Exception</em>). Isso realmente é muito triste, mas pelo menos estamos notificando ao usuário/programador que o dado não foi inserido e que o erro está no e-mail. Se tivermos a possibilidade de conversar com o programador ou programar uma rotina de tratamento de erros na própria linguagem que estiver sendo usada, esse mesmo erro pode ser exibido para o usuário. Para isso basta resgatar esse erro e passar ele por uma função que retire o inicio do erro &#8220;Error Code: 1146 &#8211; Table &#8216;testes_roberson.Erro ao inserir dados!&#8221; e o final do erro &#8220;&#8216; doesn&#8217;t exist&#8221;, com isso ficaremos somente com o erro que queremos <img src='http://www.roberson.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Reconheço que o erro retornado não é a melhor coisa do mundo, mas com algumas poucas linhas podemos deixar ele mais limpos, a baixo coloco um script PHP de como poderiamos tratar esse erro e mostrar para o cliente.</p>
<pre name="code" class="php">//trigger_email.php
// Função para tratamento dos erros
function tratarErrosMysql($numError, $error){
	//identificamos que o erro é no nome da tabela error 1146
	if($numError == '1146'){
		//executamos a decodificação de utf8 para que o erro não apresente problemas com os acentos.
		$error = utf8_decode($error);
		//retiramos o inicio e o fim do erro.
		$error = substr($error, 23 , -15);
		//retornamos o erro que veio do banco
		return $error;
	}else{
		//caso o erro não seja no nome da tabela(retorno de nossa trigger) retornamos o erro do mysql intacto
		return $error;
	}
}
// criamos a conexão com o banco de dados no nosso caso, MySql
$conn = mysqli_connect("localhost", "root", "","testes_roberson");  

//executamos nosso comando sql
$sql = "INSERT INTO Clientes SET Cpf = '05332754906', Nome='Teste', Sobrenome='Teste', Email='isso não é um email válido',sexo='M';"; // query (comando sql)
$result = mysqli_query($conn, $sql);
//verificamos se ouve algum erro
if(mysqli_error($conn)){
	// apresentamos o erro para o cliente;
	echo tratarErrosMysql(mysqli_errno($conn),mysqli_error($conn));
}</pre>
<p>Assim teremos o erro tratado, assim teremos uma base de dados bem mais consistente e livre de falhas de verificação na aplicação e erros dos usuários. E não esqueçam de criar uma <em>trigger </em>que valide o dado quando houver uma atualização <em>BEFORE UPDATE</em>.</p>
<p>Em próximos posts pretendo mostrar a validação de CPF usando <em>trigger </em>e <em>stored procedure</em>.</p>
<p>Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-%e2%80%93-parte-02' rel='bookmark' title='Validando dados inseridos no banco MySql – Parte 02'>Validando dados inseridos no banco MySql – Parte 02</a></li>
<li><a href='http://www.roberson.com.br/mysql/convertendo-campos-em-url-amigavel-pelo-mysql' rel='bookmark' title='Convertendo campos em url amigável pelo Mysql'>Convertendo campos em url amigável pelo Mysql</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dia mundial da água e o site da UOL</title>
		<link>http://www.roberson.com.br/layout-fail/dia-mundial-da-agua-e-o-site-da-uol</link>
		<comments>http://www.roberson.com.br/layout-fail/dia-mundial-da-agua-e-o-site-da-uol#comments</comments>
		<pubDate>Mon, 22 Mar 2010 17:24:29 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[Layout Fail]]></category>
		<category><![CDATA[Dia mundial da água]]></category>
		<category><![CDATA[Fail]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[UOL]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=157</guid>
		<description><![CDATA[Dia mundial da água. Trata-se de uma grande campanha para mobilizar a sociedade sobre a importância do uso consciente dessa riqueza natural. O sonho da AmBev é um só: cuidar da água do planeta. O pessoal da Uol resolveu entrar nessa e modificar um pouco o seu site para contribuir e chamar atenção para essa [...]
Não há posts relacionados.]]></description>
			<content:encoded><![CDATA[<p><a title="Dia mundial da água" href="http://www.movimentocyan.com.br/" target="_blank">Dia mundial da água.</a></p>
<blockquote><p>Trata-se de uma grande campanha para mobilizar a sociedade sobre a  importância do uso consciente dessa riqueza natural. O sonho da AmBev é  um só: cuidar da água do planeta.</p></blockquote>
<p>O pessoal da <a title="UOL" href="http://www.uol.com.br" target="_blank">Uol</a> resolveu entrar nessa e modificar um pouco o seu site para contribuir e chamar atenção para essa campanha.</p>
<p><img class="alignnone size-full wp-image-158" title="Uol dia mundial da água" src="http://www.roberson.com.br/wp-content/uploads/2010/03/uol-dia-mundial-da-agua.gif" alt="Uol dia mundial da água" width="590" height="371" /></p>
<p>Vamos ser sinceros, ficou muito ruim essa modificação no UOL. <strong><em>Layout #Fail</em></strong>. Quando comentei com meu amigo Samuel(para seguir ele no  <a title="Twitter Samuel" href="http://twitter.com/samueldu" target="_blank">Twitter</a> ou para mais videos <a title="You Tube Samuel" href="http://www.youtube.com/user/samueldu" target="_blank">YouTube</a> click sobre os links hehehe), rapidamente ele agilizou um vídeo e me enviou. Acho que exemplificou muito bem o conceito de<em> layout #fail</em>. Confiram o vídeo.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/e6zIQ6VzsMY&amp;hl=pt_BR&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/e6zIQ6VzsMY&amp;hl=pt_BR&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Obs: Que fique claro que julgo esse movimento/campanha pró água muito importante, este post se refere ao layout não muito bem elaborado montado pela equipe do Uol. Lógico que ainda assim a Uol merece os parabéns por divulgar e participar da campanha.</p>
<p>Não há posts relacionados.</p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/layout-fail/dia-mundial-da-agua-e-o-site-da-uol/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ecommerce com Magento</title>
		<link>http://www.roberson.com.br/magento/ecommerce-com-magento</link>
		<comments>http://www.roberson.com.br/magento/ecommerce-com-magento#comments</comments>
		<pubDate>Tue, 16 Mar 2010 19:06:57 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[Ecommerce]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Loja Virtual]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=150</guid>
		<description><![CDATA[O Magento é um framework desenvolvido pela Varien, um pequeno grupo que desmotivado com as soluções Open Source para ecommerce, decidiram colocar a mão na massa e desenvolver uma ferramenta completamente Open Source e com todos os recursos necessários para uma boa e completa loja virtual.
Não há posts relacionados.]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-151 alignleft" title="Logo Magento" src="http://www.roberson.com.br/wp-content/uploads/2010/03/magento-logo.jpg" mce_src="http://www.roberson.com.br/wp-content/uploads/2010/03/magento-logo.jpg" alt="Logo Magento" height="147" width="160"></p>
<p>Olá pessoal, faz algum tempo que não escrevo mas isso tem uma boa explicação. Sai da empresa em que trabalhava e comecei a atuar como autónomo na área de <b>desenvolvimento para web</b>. Além de prospectar novos clientes também estou estudando muito, e um desses meus estudos é a poderosa ferramenta<i><b> <a title="Magento Ecommerce" href="http://www.magentocommerce.com/" mce_href="http://www.magentocommerce.com/" target="_blank">Magento Ecommerce</a></b></i>.</p>
<p>O Magento é um<i> framework </i>desenvolvido pela <i>Varien</i>, um pequeno grupo que desmotivado com as soluções <i>Open Source</i> para ecommerce, decidiram colocar a mão na massa e desenvolver uma ferramenta completamente <i>Open Source </i>e com todos os recursos necessários para uma boa e completa <b>loja virtual</b>.</p>
<p>Em sua versão atual 1.4, o Magento conta com uma infinidade de recursos, tudo o que é necessário para se ter uma <b>loja virtual</b> completa e segura, a ferramenta disponibiliza incorporado ao seu <i>core</i>(coração do sistema) ou em forma de <i>plugin </i>e módulos disponíveis no seu próprio site, várias soluções para ecommerce como por exemplo: indique a um amigo, lista de presentes, comparação de produtos, formas de envio e pagamento, agrupamento/relação/sugestão de produtos, controle total do design da loja, controle de estoque, categorias e subcategorias, e mais uma infinidade de relatórios e recursos. O sistema é totalmente customizável e configurável, dando maior flexibilidade ao lojista.</p>
<p>Em próximos posts pretendo esclarecer alguns recursos que acho importantes, ensinar num passo a passo como implementar ou configurar as ferramentas para ficarem da maneira como o lojista precisa.</p>
<p>Um lugar onde estou aprendendo muita coisa sobre o Magento é o <a title="Blog Magento Mario S.A.M." href="http://magento.mariosam.com" mce_href="http://magento.mariosam.com" target="_blank">blog do Mario S.A.M</a>. nele é possivel encontrar muitos posts sobre diversas ferramentas do Magento. Se você é um programador ou entende de programação, com as dicas expostas nesse blog, é bem provável que você consiga montar uma loja sem maiores problemas.</p>
<p>Só para complementar com uma informação, tem um post da Folha Online mostra numeros sobre as vendas na internet, para conferir <a target="_blank" title="Vendas pela internet movimentam R$ 10,6 bi em 2009 e crescem 30%" mce_href="http://www1.folha.uol.com.br/folha/dinheiro/ult91u707493.shtml" href="http://www1.folha.uol.com.br/folha/dinheiro/ult91u707493.shtml">click aqui</a>.</p>
<p>Mas aproveitando o post para fazer um pequeno <i>Merchandising</i> pessoal,<i> </i>interessados em sistemas ou sites para web, bem como ecommerce, favor entrar em contato pelo email <i><b>contato@roberson.com.br</b></i>.</p>
<p>É isso ai pessoal, em breve estarei escrevendo novamente sobre essa maravilhosa ferramenta. Até a próxima.</p></p>
<p>Não há posts relacionados.</p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/magento/ecommerce-com-magento/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mudanças no blog</title>
		<link>http://www.roberson.com.br/novidades-blog/mudancas-no-blog</link>
		<comments>http://www.roberson.com.br/novidades-blog/mudancas-no-blog#comments</comments>
		<pubDate>Tue, 02 Feb 2010 22:42:28 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[Novidades Blog]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Google Reader]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[videos]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=139</guid>
		<description><![CDATA[Como podem perceber adicionei 2 novos Plugins/Widgets ao blog (fora outros que não aparecem e que mais tarde, depois de bem testados, venho lhes apresentar e comentar), estes dois plugins são para o Twitter e para os Itens Compartilhados do meu Google Reader, basicamente resolvi coloca-los para evitar de postar vídeos, frazes ou links repetidos (cópias de outros sites).
Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/wordpress/plugins-utilizados-nesse-blog' rel='bookmark' title='Plugins utilizados nesse blog.'>Plugins utilizados nesse blog.</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="attachment_143" class="wp-caption alignleft" style="width: 110px"><img class="size-full wp-image-143" title="logo_twitter_google_rader" src="http://www.roberson.com.br/wp-content/uploads/2010/02/logo_twitter_google_rader1.png" alt="logo_twitter_google_rader" width="100" height="124" /><p class="wp-caption-text">Twitter &amp; Google Reader</p></div>
<p>Como podem perceber adicionei 2 novos<strong> Plugins/Widgets</strong> ao blog (fora outros que não aparecem e que mais tarde, depois de bem testados, apresentarei), estes dois plugins são para o <a href="http://www.twitter.com/robersonfaria" target="_blank">Twitter</a> e para os <a href="http://www.google.com/reader/shared/06381329398304243792" target="_blank">Itens Compartilhados do meu Google Reader</a>, basicamente resolvi colocá-los para evitar de postar vídeos, frazes ou links repetidos (cópias de outros sites).<span id="more-139"></span></p>
<p>Sendo assim no meu Twitter costumo escrever e retwitar coisas que acho interessantes e de alguma relevância. Quando acessar o blog, dê uma olhada no Widget do Twitter, muito provável que tenha algo interessante, se preferir pode me <a href="http://www.twitter.com/robersonfaria">seguir no Twitter</a>, você com certeza será muito bem vindo, assim como no blog.</p>
<p>Nos itens compartilhados do<a href="http://reader.google.com.br"> Google (Google Reader) </a>você irá encontrar posts de blogs/sites/portais que assino RSS e que, ao meu ver, são engraçados, novidades, fundamentais ou simplesmente boas ideias. Hoje assino o conteúdo de 13 sites ,o que da na média de uns 20 a 30 posts diários, aos quais eu leio e caso ache que pode interessar a outras pessoas eu compartilho. Os últimos 3 posts que eu compartilhar sempre estarão no Widget de Itens Compartilhados na barra lateral</p>
<p>Falando sobre estas ferramentas, gostaria de indicar elas a todos. O <em>Twitter</em> é uma ótima ferramenta para estar por dentro de novidades e interagir de maneira simples e rápida com os seus amigos.</p>
<p>Hoje fiquei sabendo que o ET, da dupla Rodolfo e ET, havia falecido, antes mesmo de aparecer a notícia em portais como <a href="http://www.uol.com.br" target="_blank">UOL</a>, <a href="http://www.terra.com.br" target="_blank">TERRA</a>, <a href="http://g1.globo.com/" target="_blank">G1</a>, <a href="http://www.r7.com/" target="_blank">R7</a>, etc. Não que esta notícia tenha mudado algo em minha vida hehehe, porém soube antes de os grandes canais brasileiros divulgarem, assim como outras muitas notícias que surgem no <em>Twitter</em> antes de aparecerem na imprensa, como o caso da morte do <em>Michael Jackson</em>, lançamento de novas ferramentas do<em> Google</em> e outras empresas, promoções expecíficas para <em>Twitter</em> e uma infinidade de outras coisas, basta saber quem seguir (quem pode ter algo a lhe acrescentar).</p>
<p>Google Reader é um leitor de RSS, isso significa que todo site que tiver as suas notícias publicadas em um arquivo/endereço RSS, você pode adicionar esta referência ao leitor e ao invés de visitar milhares de sites para ler o que eles tem de novo, você simplesmente acessa o seu leitor de RSS (no caso <em>Google Reader</em>) e confere tudo o que foi postado de novo. Possui a opção de marcar como <strong>lido</strong> e <strong>não lido</strong>, exatamente como um e-mail, assim você sabe o que já leu e o que é novo, além de muitas outras ferramentas como o compartilhamento de conteúdo, gostar da notícia, comentar, mandar por e-mail e criar tags de identificação do item. Para usar o <em>Google Reader</em> basta ter uma conta do <em>Google</em>, mas existem muitos outros leitores de RSS, esse foi o qual me identifiquei.</p>
<p>Com essas novas ferramentas no blog irei direcionar o conteúdo que publico para a real finalidade do blog, tecnologia. Os vídeos engraçados que tenho postado, só serão postados caso realmente sejam muito bons e os vídeos &#8220;legais&#8221; estarão no <em>Twitter</em> ou nos Itens Compartilhados. Assim consigo focar o blog na real proposta dele.</p>
<p>Aproveitando o post, gostaria de pedir que quem tiver uma dica, conselho, elogios, críticas ou qualquer outra coisa sobre o blog para comentar, que deixe um comentário neste post, pois será muito válido para o crescimento do blog e do autor que vos escreve.</p>
<p>Ahhh antes que eu me esqueça os dois plugins são <a href="http://ja.meswilson.com/blog/2007/05/26/wordpress-google-reader-widget/" target="_blank">Google Reader Widget</a> e o <a href="http://alexking.org/projects/wordpress" target="_blank">Twitter Tools</a>, para o <em>Google Reader</em> e para o <em>Twitter</em> respectivamente.</p>
<p>Revisão por Jali</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 171px; width: 1px; height: 1px;">
<div id="attachment_143" class="wp-caption alignleft" style="width: 110px"><img class="size-full wp-image-143" title="logo_twitter_google_rader" src="http://www.roberson.com.br/wp-content/uploads/2010/02/logo_twitter_google_rader1.png" alt="logo_twitter_google_rader" width="100" height="124" /><p class="wp-caption-text">Twitter &amp; Google Reader</p></div>
<p>Como podem perceber adicionei 2 novos<strong> Plugins/Widgets</strong> ao blog (fora outros que não aparecem e que mais tarde, depois de bem testados, apresentarei), estes dois plugins são para o <a href="http://www.twitter.com/robersonfaria" target="_blank">Twitter</a> e para os <a href="http://www.google.com/reader/shared/06381329398304243792" target="_blank">Itens Compartilhados do meu Google Reader</a>, basicamente resolvi colocá-los para evitar de postar vídeos, frazes ou links repetidos (cópias de outros sites).<!--more--></p>
<p>Sendo assim no meu <em>Twitter</em> costumo escrever e retwitar coisas que acho interessantes e de alguma relevância, quando acessar o blog da uma olhada no Widget do <em>Twitter </em>muito provável que tenha algo interessante, se preferir pode me <a href="http://www.twitter.com/robersonfaria" target="_blank">seguir no Twitter</a>, você com certeza será muito bem vindo, assim como no blog.</p>
<p>Nos itens compartilhados do <a href="http://reader.google.com.br">Google (Google Reader)</a> você irá encontrar posts de blogs/sites/portais que assino RSS e que ao meu ver são engraçados, novidades, fundamentais ou simplesmente boas ideias. Hoje assino o conteúdo de 13 sites o que da na média de uns 20 a 30 posts diários ao quais eu leio e caso ache que pode interessar a outras pessoas eu compartilho. Os últimos 3 posts que eu compartilhar sempre estarão no Widget de Itens Compartilhados na barra lateral.</p>
<p>Falando sobre estas ferramentas, gostaria de indicar elas a todos. O <em>Twitter</em> é uma ótima ferramenta para estar por dentro de novidades e interagir de maneira simples e rápida com os seus amigos. Hoje fiquei sabendo que o ET, da dupla Rodolfo e ET, havia falecido, antes mesmo de aparecer a notícia em portais como <a href="http://www.uol.com.br" target="_blank">UOL</a>, <a href="http://www.terra.com.br" target="_blank">TERRA</a>, <a href="http://g1.globo.com/" target="_blank">G1</a>, <a href="http://www.r7.com/" target="_blank">R7</a>, etc. Não que esta notícia tenha mudado algo em minha vida hehehe, porém soube antes de os grandes canais brasileiros divulgarem, assim como outras muitas notícias que surgem no <em>Twitter</em> antes de aparecerem na imprensa, como o caso da morte do <em>Michael Jackson</em>, lançamento de novas ferramentas do<em> Google</em> e outras empresas, promoções expecíficas para <em>Twitter</em> e uma infinidade de outras coisas, basta saber quem seguir (quem pode ter algo a lhe acrescentar).</p>
<p>O <em>Google Reader</em> é um leitor de RSS, isso significa, todo site que tiver as suas notícias publicadas em um arquivo/endereço RSS, você pode adicionar esta referência ao leitor e ao invés de visitar milhares de sites para ler o que eles tem de novo, você simplesmente acessa o seu leitor de RSS (no caso <em>Google Reader</em>) e confere tudo o que foi postado de novo. Possui a opção de marcar como <strong>lido</strong> e <strong>não lido</strong>, exatamente como um e-mail, assim você sabe o que já leu e o que é novo, além de muitas outras ferramentas como o compartilhamento de conteúdo, gostar da notícia, comentar, mandar por e-mail e criar tags de identificação do item. Para usar o <em>Google Reader</em> basta ter uma conta do <em>Google</em>, mais existem muitos outros leitores de RSS, esse foi o que me identifiquei.</p>
<p>Com essas novas ferramentas no blog irei direcionar o conteúdo que publico para a real finalidade do blog, tecnologia. Os vídeos engraçados que tenho postado, só serão postados caso realmente sejam muito bons e os vídeos &#8220;legais&#8221; estarão no <em>Twitter</em> ou nos Itens Compartilhados. Assim consigo focar o blog na real proposta dele.</p>
<p>Aproveitando o post, gostaria de pedir que quem tiver uma dica, conselho, elogios, criticas ou qualquer outra coisa sobre o blog para comentar, que deixe um comentário neste post, pois será muito válido para o crescimento do blog e do autor que vos escreve.</p>
<p>Ahhh antes que eu me esqueça os dois plugins são <a href="http://ja.meswilson.com/blog/2007/05/26/wordpress-google-reader-widget/" target="_blank">Google Reader Widget</a> e o <a href="http://alexking.org/projects/wordpress" target="_blank">Twitter Tools</a>, para o <em>Google Reader</em> e para o <em>Twitter</em> respectivamente.</div>
<p>Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/wordpress/plugins-utilizados-nesse-blog' rel='bookmark' title='Plugins utilizados nesse blog.'>Plugins utilizados nesse blog.</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/novidades-blog/mudancas-no-blog/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O OFEC voltou!!!</title>
		<link>http://www.roberson.com.br/campeonato-paranaense/o-ofec-voltou</link>
		<comments>http://www.roberson.com.br/campeonato-paranaense/o-ofec-voltou#comments</comments>
		<pubDate>Thu, 21 Jan 2010 23:43:52 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[Campeonato Paranaense]]></category>
		<category><![CDATA[Fantasma]]></category>
		<category><![CDATA[OFEC]]></category>
		<category><![CDATA[Operario]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=126</guid>
		<description><![CDATA[Para quem não conhece, o OFEC (Operario Ferroviário Esporte Clube) é o time de futebol da cidade de Ponta Grossa - PR, cidade onde este blogueiro que vós escreve nasceu, fundado em 01/05/1912. Irei citar alguns sites para contar um pouco sobre a história do time.
Não há posts relacionados.]]></description>
			<content:encoded><![CDATA[<div id="attachment_130" class="wp-caption alignleft" style="width: 175px"><img class="size-full wp-image-130" title="OFEC - Operario Ferroviario Esporte Clube" src="http://www.roberson.com.br/wp-content/uploads/2010/01/image1.png" alt="OFEC - Operario Ferroviario Esporte Clube" width="165" height="145" /><p class="wp-caption-text">OFEC - Operario Ferroviario Esporte Clube</p></div>
<p>Para quem não conhece, o <a href="http://operario.com/" target="_blank">OFEC (Operario Ferroviário Esporte Clube)</a> é o time de futebol da cidade de Ponta Grossa &#8211; PR, cidade onde este blogueiro que vós escreve nasceu, fundado em 01/05/1912. Irei citar alguns sites para contar um pouco sobre a história do time.</p>
<p><span id="more-126"></span></p>
<blockquote><p>Grandes Campanhas</p>
<p>Entre altos e baixos em suas campanhas dentro do futebol profissional, o Operário Ferroviário, desde os anos 50 e 60 é conhecido como &#8220;Fantasma da Vila&#8221;, por assombrar os grandes clubes da Capital. Em 1979, aproveitando o inchaço de clubes no Campeonato Brasileiro promovido pela antiga CBD, o clube participou pela primeira vez de uma competição nacional. Em 1981, o Operário participou do quadrangular final do Campeonato Paranaense, com grande campanha. Em 1989, voltou a disputar o Campeonato Brasileiro, na segunda divisão e em 1990 ficado em 3º lugar, faltando pouco para chegar à Primeira Divisão. Entre 1990 e 1992 o clube ficou entre os três primeiros colocados no Campeonato Paranaense, assustando novamente os grandes da Capital. <a href="http://pt.wikipedia.org/wiki/Oper%C3%A1rio_Ferrovi%C3%A1rio_Esporte_Clube" target="_blank">wikipédia</a></p></blockquote>
<blockquote><p>O nome do seu Estádio é Germano Krüger pelo fato deste senhor ser um dos chefes na Rede Ferroviária na época. Este atuou para que a Rede cedesse o terreno pertencente a ela, como também liberava os funcionários ao final do expediente para que estes auxiliassem nos trabalhos da construção. <a href="http://operarioferroviario.wordpress.com/" target="_blank">Blog Operario Ferroviario</a></p></blockquote>
<p><a href="http://operarioferroviario.wordpress.com/2009/09/28/operario-ferroviario-esporte-clube-ofec/" target="_blank">Neste Post</a> temos com um grande nível de detalhes a trajetória inicial do operário, alguns titulos conquistados e um pouco da história da fundação do clube.</p>
<p>Não consegui encontrar exatamente a data de quando o time acabou, mas em 1996 ele voltou a disputar o campeonato estadual em parceria com <a href="http://pt.wikipedia.org/wiki/Ponta_Grossa_Esporte_Clube" target="_blank">Ponta Grossa Esporte Clube</a>, apartir de então o time vem disputando o Campeonato Paranaense subindo para a 1ª divisão este ano. Segue citação sobre a trajetória do time de 1996 até hoje.</p>
<blockquote><p>Com o afastamento do futebol profissional pela situação econômica difícil, o clube procurou se reestruturar financeiramente. Em 1996 surgiu a parceria com o Ponta Grossa Esporte Clube e a formação do Operário/Ponta Grossa, colocou novamente o nome do clube em evidência no cenário esportivo. A parceria foi renovada para o Campeonato Paranaense 2000 e com isto o clube procurava novos caminhos, mas a parceria foi desfeita logo após a desclassificação da equipe logo na primeira fase, analisando que esta só estava sendo benéfica para um lado, o do Ponta Grossa Esporte Clube de Mikulis. O objetivo da diretoria foi o de investir em sua estrutura social para poder viabilizar sua manutenção e estudar novas possibilidades para o futuro. Em 2004 surge uma nova parceria, desta vez com a Prefeitura Municipal, que restaurou o Estádio. Foi formado um grupo gestor entre a diretoria do OFEC e a prefeitura. O time disputou a série prata e não passou da primeira fase. Em 2005, depois de duas parcerias frustradas, o Operário voltou a disputar a série prata, pensando mais uma vez em subir a elite do futebol paranaense. Em 2008, um novo Grupo Gestor assumiu o departamento esportivo do clube, comandado por Chico da Bracol. O grupo se comprometeu a dividir todas as receitas vindas do futebol, com o Clube, além de manter até outubro de 2010, as categorias de base, além do time profissional, no final do campeonato, o grupo gestor, agora comandado por Franco Menezes, renovou o contrato ate 2012, ano do centenário do clube. No final de 2008 o Clube lutou na justiça desportiva, contra a punição sofrida (1 ano de suspensão), em função do incidente ocorrido no último jogo da segunda divisão do campeonato paranaense de 2008. Felizmente para a torcida Operariana, o clube foi absolvido e participou do campeonato da divisão de acesso, conseguindo uma vaga para o campeonato paranaense da 1ª divisão com 1 rodada de antecedencia e conquistou também o vice campeonato da divisão de acesso. <a href="http://pt.wikipedia.org/wiki/Oper%C3%A1rio_Ferrovi%C3%A1rio_Esporte_Clube" target="_blank">wikipedia</a></p></blockquote>
<p>Já se passaram as duas primeiras rodadas do Campeonato Paranaense 2010 e o OFEC já conquistou duas vitórias:</p>
<p>- Operario 1 X 0 Cascavel <a href="http://operario.korvo.com.br/tag/17012010/" target="_blank">detalhes</a></p>
<p>- Operario 2 X 1 Atlético-PR <a href="http://operario.korvo.com.br/tag/20012010/" target="_self">detalhes</a></p>
<p>Abaixo a tabela do campeonato disponibilizada pelo<a href="http://operario.korvo.com.br/" target="_blank"> Blog Operário</a></p>
<p><!--Tabela Korvo--><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="160" height="200" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowScriptAccess" value="sameDomain" /><param name="src" value="http://operario.korvo.com.br/korvotabela.swf" /><param name="bgcolor" value="#ffffff" /><embed type="application/x-shockwave-flash" width="160" height="200" src="http://operario.korvo.com.br/korvotabela.swf" bgcolor="#ffffff" allowscriptaccess="sameDomain"></embed></object></p>
<p>E como não podia faltar, os vídeos dos golss até agora:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/tX6iVa3XOG4&amp;hl=pt_BR&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/tX6iVa3XOG4&amp;hl=pt_BR&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="392" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="FlashVars" value="midiaId=1195243&amp;autoStart=false&amp;width=480&amp;height=392" /><param name="src" value="http://video.globo.com/Portal/videos/cda/player/player.swf" /><param name="flashvars" value="midiaId=1195243&amp;autoStart=false&amp;width=480&amp;height=392" /><embed type="application/x-shockwave-flash" width="480" height="392" src="http://video.globo.com/Portal/videos/cda/player/player.swf" flashvars="midiaId=1195243&amp;autoStart=false&amp;width=480&amp;height=392" quality="high"></embed></object></p>
<p>Não há posts relacionados.</p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/campeonato-paranaense/o-ofec-voltou/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trabalhando com xml e mysql juntos.</title>
		<link>http://www.roberson.com.br/mysql/trabalhando-com-xml-e-mysql-juntos</link>
		<comments>http://www.roberson.com.br/mysql/trabalhando-com-xml-e-mysql-juntos#comments</comments>
		<pubDate>Thu, 10 Dec 2009 02:19:06 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=78</guid>
		<description><![CDATA[Em muitos momentos no desenvolvimento de um sistema necessitamos trocar informações com outros sistemas (integração entre sistemas). Existem várias formas de conseguirmos essa troca de dados, sendo uma delas a troca de arquivos XML. Nesse post pretendo mostrar uma forma simples de transformar os dados do banco de dados (MySql) em arquivos xml. Vamos supor [...]
Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01' rel='bookmark' title='Validando dados inseridos no banco MySql &#8211; Parte 01'>Validando dados inseridos no banco MySql &#8211; Parte 01</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Em muitos momentos no desenvolvimento de um sistema necessitamos trocar informações com outros sistemas (integração entre sistemas). Existem várias formas de conseguirmos essa troca de dados, sendo uma delas a troca de arquivos <a title="Wikipedia XML" href="&quot;http://pt.wikipedia.org/wiki/XML" target="_blank">XML</a>. Nesse post pretendo mostrar uma forma simples de transformar os dados do banco de dados (<a title="Site MySql" href="http://www.mysql.com/" target="_blank">MySql</a>) em arquivos xml.</p>
<p>Vamos supor uma estrutura de banco de dados assim:</p>
<pre name="code" class="sql">
--Criamos a base de dados (schema)
CREATE DATABASE IF NOT EXISTS mysql_xml;

--Selecionamos a base para usar
USE mysql_xml;

--Criamos a tabela, nesse exemplo para guardar dados de usuários
CREATE TABLE 'mysql_xml'.'usuarios' (
        'idUsuario' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
        'login' VARCHAR(45) NOT NULL,
        'senha' VARCHAR(45) NOT NULL,
        PRIMARY KEY ('idUsuario')
)ENGINE = InnoDB;

--Inserimos alguns dados na tabela
INSERT INTO usuarios VALUES ('', 'usuario1','senha1');
INSERT INTO usuarios VALUES ('', 'usuario2','senha2');
INSERT INTO usuarios VALUES ('', 'usuario3','senha3');
INSERT INTO usuarios VALUES ('', 'usuario4','senha4');
INSERT INTO usuarios VALUES ('', 'usuario5','senha5');
</pre>
<p>Com o banco/tabela populado podemos ir para o nosso script <a title="Site PHP" href="http://www.php.net/" target="_blank">PHP</a>.<br />
Abaixo vou demonstrar como o php pode pegar esses dados e utilizando a lib <a title="Manual SimpleXML" href="http://php.net/manual/en/book.simplexml.php" target="_blank">SimpleXML</a> do php, podemos transformar os dados em um arquivo xml.</p>
<pre name="code" class="php">
//mysql_xml.php
// criamos a conexao com o banco de dados no nosso caso, MySql
$conn = mysqli_connect("localhost", "root", "","mysql_xml");

//exacutamos nosso comando sql
$sql = "select * from usuarios"; // query (comando sql)
$result = mysqli_query($conn, $sql);

// criamos um objeto do tipo SimpleXMLElement
$xml = new SimpleXMLElement("&lt;resultset/&gt;");

// criamos um loop para recuperar todos os dados da tabela usuarios
// os dados sao retornados como um objeto
while ($dados = mysqli_fetch_object($result))
{
        // criamos um um novo node para abrigar as linhas
        $line = $xml-&gt;addChild("line");

        //No proximo loop adicionamos os nodes para cada um dos registros de cada linha
        foreach ( $dados as $colName =&gt; $value )
                $line-&gt;addChild($colName, $value);
}

// finalmente criamos o xml com todos os dados que estavam na tabela.
echo $xml-&gt;asXML();
</pre>
<p>Executando o arquivo acima temos o seguinte resultado.</p>
<pre name="code" class="xml">
<resultset>
<line>
		<idUsuario>1</idUsuario>
		<login>usuario1</login>
		<senha>senha1</senha>
	</line>
<line>
		<idUsuario>2</idUsuario>
		<login>usuario2</login>
		<senha>senha2</senha>
	</line>
<line>
		<idUsuario>3</idUsuario>
		<login>usuario3</login>
		<senha>senha3</senha>
	</line>
<line>
		<idUsuario>4</idUsuario>
		<login>usuario4</login>
		<senha>senha4</senha>
	</line>
<line>
		<idUsuario>5</idUsuario>
		<login>usuario5</login>
		<senha>senha5</senha>
	</line>
</resultset>
</pre>
<p>E é isso galera, simples assim, esses scripts foram baseados em um tutorial que li há algum tempo atrás, desde então venho utilizando essa maneira de gerar xml para exportação, integração, etc, em meus sistemas. Infelizmente não lembro e não encontrei a referência para o artigo que li, caso alguem ache ele, por favor me informe que atualizo aqui.</p>
<p>Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/mysql/validando-dados-inseridos-no-banco-mysql-parte-01' rel='bookmark' title='Validando dados inseridos no banco MySql &#8211; Parte 01'>Validando dados inseridos no banco MySql &#8211; Parte 01</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/mysql/trabalhando-com-xml-e-mysql-juntos/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Praia do forte &#8211; 14/11/2009</title>
		<link>http://www.roberson.com.br/viagens/praia-do-forte-14112009</link>
		<comments>http://www.roberson.com.br/viagens/praia-do-forte-14112009#comments</comments>
		<pubDate>Fri, 20 Nov 2009 01:57:06 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[Viagens]]></category>
		<category><![CDATA[Florianópolis]]></category>
		<category><![CDATA[Passeios]]></category>
		<category><![CDATA[videos]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=66</guid>
		<description><![CDATA[No último fim de semana (14/11/2009) em Florianópolis, essas cenas do vídeo abaixo são da Praia do Forte +- as 7:00 Hrs da noite, vale a pena conferir as imagens. Narração by Deini Porto. Não há posts relacionados.
Não há posts relacionados.]]></description>
			<content:encoded><![CDATA[<p>No último fim de semana (14/11/2009) em Florianópolis, essas cenas do vídeo abaixo são da Praia do Forte +- as 7:00 Hrs da noite, vale a pena conferir as imagens. Narração by <a href="http://blogdoporto.com.br" target="_blank">Deini Porto</a>.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Myy70fIvC08&amp;hl=pt_BR&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/Myy70fIvC08&amp;hl=pt_BR&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Não há posts relacionados.</p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/viagens/praia-do-forte-14112009/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plugins utilizados nesse blog.</title>
		<link>http://www.roberson.com.br/wordpress/plugins-utilizados-nesse-blog</link>
		<comments>http://www.roberson.com.br/wordpress/plugins-utilizados-nesse-blog#comments</comments>
		<pubDate>Wed, 07 Oct 2009 03:40:47 +0000</pubDate>
		<dc:creator>Roberson Faria</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[sitemap]]></category>
		<category><![CDATA[Sobre o blog]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[WEB]]></category>

		<guid isPermaLink="false">http://www.roberson.com.br/?p=61</guid>
		<description><![CDATA[Hoje vou falar um pouco sobre os plugins que instalei no meu blog. A maioria dos plugins são para SEO(Search engine optimization) e as instruções de como usa-las  corretamente e como instalar foram retiradas da seção de wordpress do blog www.mestreseo.com.br.
Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/novidades-blog/mudancas-no-blog' rel='bookmark' title='Mudanças no blog'>Mudanças no blog</a></li>
<li><a href='http://www.roberson.com.br/novidades-blog/desbravando-o-wordpress' rel='bookmark' title='Desbravando o WordPress'>Desbravando o WordPress</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-63 alignleft" title="Wordpress Plugin" src="http://www.roberson.com.br/wp-content/uploads/2009/10/wordpress-plugin.jpg" alt="Wordpress Plugin" width="385" height="151" /></p>
<p>Hoje vou falar um pouco sobre os plugins que instalei no meu blog. A maioria dos plugins são para SEO(<em>Search engine optimization</em>) e as instruções de como usa-las  corretamente e como instalar foram retiradas da seção de wordpress do blog <a title="Mestre SEO" href="http://www.mestreseo.com.br/category/wordpress-seo" target="_blank">www.mestreseo.com.br</a>. Com todo o auxilio de ótimos posts no Mestre SEO, resolvi fazer algumas considerações sobre os plugins que utilizo.<span id="more-61"></span></p>
<p><a href="http://www.dagondesign.com/articles/sitemap-generator-plugin-for-wordpress/"><strong>Dagon Design Sitemap Generator</strong></a> &#8211; Plugin para gerar o mapa do site no seu blog, pagina com uma estrutura em árvore para mapear todas as paginas do seu blog. Muito fácil utilização, no próprio site do plugin já temos informações de como instalar e configurar.</p>
<p><a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/"><strong>Google XML Sitemaps</strong></a> &#8211; Plugin para gerar o XML Sitemap, ao contrario do que diz o nome do plugin, ele pode e deve ser usado não só com o google mas também com o Bing e Yahoo. Após algumas configurações personalizadas para o seu blog, o plugin gera um arquivo sitemap.xml que deve ser cadastrado nos sistemas de busca na parte de webdevelopers. As ferramentas de Webdeveloper dos buscadores podem ser a melhor forma de se analizar o como seu site está sendo visto pelas outras pessoas. Então uma boa atenção nesse Sitemap, pode ser fundamental para a vida do seu blog.</p>
<p><a href="http://techblissonline.com/platinum-seo-pack/"><strong>Platinum SEO Pack</strong></a> &#8211; Plugin totalmente voltado a SEO, nele você possui muitas opções como: redirecionamento automático para redirects 301 (uma das principais causas do google banir sites), é possível definir formatos personalizados da tag title para cada uma das seções  do seu blog, dentre outros recursos muito interessantes que ele possui.</p>
<p><a href="http://blog.victoriac.net/blog/twitter-updater/"><strong>Twitter updater</strong></a> &#8211; Como o próprio nome já diz, publica no seu twitter toda vez que um novo post for adicionado ou uma nova pagina for criada.</p>
<p><a href="http://wordpress.org/extend/plugins/user-photo/"><strong>User Photo</strong></a><strong> -</strong> Permite que usuários logados no seu blog possuam um avatar.</p>
<p><a href="http://imthi.com/wp-pda"><strong>WordPress PDA &amp; iPhone</strong></a><strong> &#8211; </strong>Outro plugin muito interessante, ele gera dois templates adicionais para o seu blog, um para SmartPhones/PDA e outra para iPhone. Em todos os aparelhos móveis que eu testei até hoje o plugin funcionou muito bem. É uma ótima opção para que o leitor do seu blog consiga visualizar, ler e comentar no seu blog via celulares e dispositivos móveis.</p>
<p>É isso ai pessoal, ainda estou analisando alguns outros plugins para wordpress. Sempre que encontrar algo que eu ache relevante de comentar sobre o wordpress eu com certeza irei postar por aqui.</p>
<p>Nos próximos posts pretendo falar um pouco sobre as ferramentas de Developer dos sistemas de busca Google, Yahoo e Bing e ainda sobre algumas ferramentas do Google Analytics que também podem ajudar muito para a evolução do seu blog.</p>
<p><strong><br />
</strong></p>
<p>Posts relacionados:<ol>
<li><a href='http://www.roberson.com.br/novidades-blog/mudancas-no-blog' rel='bookmark' title='Mudanças no blog'>Mudanças no blog</a></li>
<li><a href='http://www.roberson.com.br/novidades-blog/desbravando-o-wordpress' rel='bookmark' title='Desbravando o WordPress'>Desbravando o WordPress</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.roberson.com.br/wordpress/plugins-utilizados-nesse-blog/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
  
