<?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>Flávio Silveira &#187; Programação em geral</title>
	<atom:link href="http://flaviosilveira.com/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://flaviosilveira.com</link>
	<description>Tecnologia e Desenvolvimento</description>
	<lastBuildDate>Tue, 15 May 2012 03:05:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Screencast &#8211; Começando Bem com Zend Framework</title>
		<link>http://flaviosilveira.com/2011/screencast-comecando-bem-com-zend-framework/</link>
		<comments>http://flaviosilveira.com/2011/screencast-comecando-bem-com-zend-framework/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 21:05:16 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[frameworks]]></category>
		<category><![CDATA[Palestras]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend tool]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=449</guid>
		<description><![CDATA[Salve pessoal! Gravei esse screencast baseado no mini-curso/palestra que estive apresentando durante esse ano com o título de Começando bem com Zend Framework. O vídeo não tem edição, foi gravado direto, sem roteiro. Por isso peço desculpas se acabei atropelando alguma explicação ou se algo não ficar muito claro para alguém, principalmente para iniciantes. Da forma [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/34341638" width="600" height="500" frameborder="0"></iframe></p>
<p>Salve pessoal!</p>
<p>Gravei esse screencast baseado no mini-curso/palestra que estive apresentando durante esse ano com o título de <em>Começando bem com Zend Framework</em>.</p>
<p>O vídeo não tem edição, foi gravado direto, sem roteiro.<br />
Por isso peço desculpas se acabei atropelando alguma explicação ou se algo não ficar muito claro para alguém, principalmente para iniciantes. Da forma como foi finalizado acabou ficando mais voltado para quem já tem um conhecimento com outros frameworks ou um conhecimento legal de PHP.</p>
<p>Dúvidas? Perguntas? Sugestões? Estamos aí.<br />
Aguardo o feedback de todos.<br />
Grande Abraço!</p>
<p><strong>Alguns Links que aparecem no screencast</strong></p>
<ul>
<li><a title="Download Zend Framework" href="http://framework.zend.com/download/current/">Download Zend &#8211; http://framework.zend.com/download/current/</a><strong><br />
</strong></li>
<li><a title="SlideShare Flávio Silveira" href="http://www.slideshare.net/flavioaugustosilveira/minicurso-zend">Slideshare.net - http://www.slideshare.net/flavioaugustosilveira/minicurso-zend</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2011/screencast-comecando-bem-com-zend-framework/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Initializr &#8211; Começe seu projeto HTML5 em 15 segundos!</title>
		<link>http://flaviosilveira.com/2011/initializr-comece-seu-projeto-html5-em-15-segundos/</link>
		<comments>http://flaviosilveira.com/2011/initializr-comece-seu-projeto-html5-em-15-segundos/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 08:18:34 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programação em geral]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=370</guid>
		<description><![CDATA[Salve pessoal! Vocês já ouviram falar sobre o Initializr! ? Ele é um gerador de código que ajuda você a começar seu projeto em HTML5. Ele é baseado no Boilerplate e foi criado por Jonathan Verrecchia (@verekia) com o objetivo de ampliar o uso do HTML5. Em contato com o Jonathan, combinei com ele de traduzir [...]]]></description>
			<content:encoded><![CDATA[<p>Salve pessoal!</p>
<p>Vocês já ouviram falar sobre o <a title="Initializr!" href="http://initializr.com/">Initializr!</a> ?</p>
<p>Ele é um gerador de código que ajuda você a começar seu projeto em HTML5. Ele é baseado no <a title="oilerplate HTML5" href="http://html5boilerplate.com/">Boilerplate</a> e foi criado por Jonathan Verrecchia (<a title="Twitter Jonathan Verrecchia" href="http://twitter.com/#!/verekia">@verekia</a>) com o objetivo de ampliar o uso do HTML5.</p>
<p>Em contato com o Jonathan, combinei com ele de traduzir a documentação oficial do Initializr do francês para o português, para ajudar a divulgar ainda mais essa tremenda ferramenta e quem sabe com isso ver o uso do HTML5 mais e mais em novos projetos.</p>
<p>Segue a tradução da documentação abaixo.<br />
Você encontra a versão original em francês no seguinte link: <a title="Documentação oficial Initializr Francês" href="http://www.html5-css3.fr/html5/initializr-generateur-template-html5-boilerplate">http://www.html5-css3.fr/html5/initializr-generateur-template-html5-boilerplate</a>.</p>
<p>Conheça esses projetos e começe já a trabalhar com HTML5!<br />
Grande Abraço!</p>
<h3>Initializr &#8211; Um gerador baseado nos templates Boilerplate HTML5</h3>
<p><img class="aligncenter size-full wp-image-371" title="logo-initializr" src="http://flaviosilveira.com/wp-content/uploads/2011/07/logo-initializr.png" alt="Initializr!" width="600" height="285" /><br />
<span id="more-370"></span><br />
Initializr permite a você gerar um template baseado no Boilerplate, montando um rascunho de um HTML5 funcional em segundos.</p>
<p>Você pode customizar seus templates como precisar, para evitar começar um projeto com um código muito pesado. Todo o processo do projeto de design e as opções disponíveis estão detalhadas neste artigo.</p>
<p>Se você está começando agora com HTML5 e quer ter uma geral do que tem por trás dessa tecnologia, eu recomendo que você leia uma introdução ao HTML5 antes de seguir em frente.</p>
<h3>Boilerplate HTML5</h3>
<p>Boilerplate é uma poderosa e confiável ferramenta de templates criada e mantida por Paul Irish (Google) e Divya Manian.</p>
<p>Boilerplate consiste de um grupo de arquivos HTML, CSS e JavaScript, usados para iniciar com o pé direito em um projeto HTML5.</p>
<p>Ele também inclui ferramentas muito úteis, como o Modernizr, JQuery, e um reset CSS.</p>
<p><img class="aligncenter size-full wp-image-372" title="logo-boilerplate" src="http://flaviosilveira.com/wp-content/uploads/2011/07/logo-boilerplate.png" alt="Boilerplate" width="600" height="75" /></p>
<p>Também inclui outras ferramentas não tão necessárias como um Profiling JQuery, Código Google Analytics, Funções Javascript para loggin,</p>
<p>um arquivo de configuração para Flash cross domain, Configuração IIS server e Nginx, Páginas de teste, scripts ANT… Bem, quando você for iniciar seu projeto com Boilerplate, você vai precisar de algum tempo para selecionar as partes que você quer e não quer no seu projeto.</p>
<h3>Initializr &#8211; Um Boilerplate leve e personalizável</h3>
<p>A proposta com o initializr é ter o Boilerplate sem essas ferramentas raramente usadas com HTML5 para poder começar um projeto rápido e tão confiável quanto o Boilerplate. O código gerado pelo Initializr é totalmente baseado no Boilerplate, que tem uma força inegável. Initializr oferece diferentes opções para customizar seu template. Aqui estão os detalhes:</p>
<h3>HTML / CSS</h3>
<p>Por padrão, o Boilerplate entrega a você uma página em branco. Initializr permite a você gerear um conteúdo inicial como base, para te ajudar a começar rapidamente. A página exemplo trás o tema do site da Initializr, com uma página estruturada com um clássico cabeçalho, um rodapé, um menu para navegação, um bloco lateral, e uma estrutura similar a um blog com alguns posts.</p>
<p><img class="aligncenter size-full wp-image-373" title="initializr-html5-template" src="http://flaviosilveira.com/wp-content/uploads/2011/07/initializr-html5-template.jpg" alt="Site Initializr" width="510" height="391" /></p>
<h3>Javascript</h3>
<p>O Boilerplate inclui a excelente biblioteca de Javascript jQuery. E no Initializr nós também encontramos essa biblioteca, disponível em forma minimizada ou não. Ou também o direito de não incluir ela, ou não incluir nenhum Javascript. Vamos atentar para um ponto: Estamos falando do seu Javascript. Nada no Modernizr ou no HTML5shiv vai garantir uma compatibilidade 100% com todos os navegadores. Então não esqueça de testar isso posteriormente.</p>
<p><img class="aligncenter size-full wp-image-374" title="jquery-logo" src="http://flaviosilveira.com/wp-content/uploads/2011/07/jquery-logo.png" alt="JQuery" width="366" height="90" /></p>
<p>&nbsp;</p>
<h3>Compatibilidade</h3>
<p>&nbsp;</p>
<h3>Html5Shiv</h3>
<p>Navegadores modernos suportam totalmente as novas tags do HTML5. Mas versões do Internet Explorer 8, e anteriores a ele, precisam de uma ajudinha para exibir essas novas tags, que por padrão não são reconhecidas. Esta pequena ajuda é chamada HTML5shiv. Ele é um pequeno arquivo javascript que vai permitir ao Internet Explorer reconhecer essas tags graças a uma função createElement():</p>
<pre class="brush: jscript; title: ; notranslate">
document.createElement(&quot;header&quot;);
</pre>
<p>Todos os novos itens são automaticamente criados antes do conteúdo da página ser completamente exibido. Isso torna obrigatório colocar o HTML5shiv no <em>Head</em> da sua página ao invés de colocar no rodapé, que é o recomendado para todos os outros javascripts.</p>
<h3>Modernizr</h3>
<p><img class="aligncenter size-full wp-image-375" title="modernizr-logo" src="http://flaviosilveira.com/wp-content/uploads/2011/07/modernizr-logo.png" alt="Modernizr" width="222" height="50" /></p>
<p>O Modernizr, é um sensor de suporte das funcionalidades HTML5 e CSS3, que inclui o HTML5shiv. Ele é um arquivo javascript que irá criar um objeto contendo propriedades modernizr para cada funcionalidade, indicando se ela funciona ou não no seu navegador.</p>
<pre class="brush: jscript; title: ; notranslate">
if (Modernizr.geolocation){
  // A geolocalização é suportada
}
else {
  // A geolocalização não é suportada
}
</pre>
<p>Modernizr também adiciona classes CSS para o HTML, para que você possa facilmente indicar um estilo alternativo se certas propiedades CSS3 não forem suportadas.</p>
<pre class="brush: jscript; title: ; notranslate">
.multiplebgs header {
  /* Backgrounds múltiplos são suportados */
}
.no-multiplebgs header {
  /* Backgrounds múltiplos não são suportados */
}
</pre>
<p>Modernizr é bem abrangente na detecção de suporte a HTML5 e CSS3, mas é importante entender que ele não adiciona nenhuma característica faltante (como faz o HTML5shiv em relação as tags). Ele é a ferramenta selecionada por padrão para compatibilidade do Initializr.</p>
<h3>A configuração do servidor</h3>
<p>O Initializr traz um arquivo de configuração para o servidor, também gerado pelo Boilerplate. Portanto é possível selecionar um arquivo .htaccess para servidores Apache, web.config para Microsoft IIS, ou nginx.conf para Servidores NGinx. É importante notar que por padrão, esses arquivos vão re-escrever a URL da página, removendo o &#8220;www&#8221; para montar URLs curtas.</p>
<p>Se você preferir manter o seu &#8220;www&#8221;, você pode remover as seguintes linhas no caso do .htaccess:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;IfModule mod_rewrite.c&gt;
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
&lt;/IfModule&gt;
</pre>
<p><img class="aligncenter size-full wp-image-376" title="server" src="http://flaviosilveira.com/wp-content/uploads/2011/07/server.png" alt="" width="256" height="256" /></p>
<h3>É apenas um clique no botão!</h3>
<p>Após fazer suas escolhas com relação a configuração, um simples clique no botão Download! fará o download de seus arquivos.</p>
<p><img class="aligncenter size-full wp-image-377" title="initializr-download" src="http://flaviosilveira.com/wp-content/uploads/2011/07/initializr-download.png" alt="" width="400" height="157" /></p>
<p>Se você manter as configurações padrão, você terá uma estrutura de projeto completa e pronta para uso, como a mostrada abaixo:</p>
<p><img class="aligncenter size-full wp-image-378" title="html5-initializr-structure" src="http://flaviosilveira.com/wp-content/uploads/2011/07/html5-initializr-structure.png" alt="" width="224" height="250" /></p>
<p>Uma rápida olhada no arquivo index.html e você pode ver que o código traz muita coisa do Boilerplate:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;!--[if lt IE 7 ]&gt; &lt;html lang=&quot;en&quot; class=&quot;no-js ie6&quot;&gt; &lt;![endif]--&gt;
&lt;!--[if IE 7 ]&gt;    &lt;html lang=&quot;en&quot; class=&quot;no-js ie7&quot;&gt; &lt;![endif]--&gt;
&lt;!--[if IE 8 ]&gt;    &lt;html lang=&quot;en&quot; class=&quot;no-js ie8&quot;&gt; &lt;![endif]--&gt;
&lt;!--[if IE 9 ]&gt;    &lt;html lang=&quot;en&quot; class=&quot;no-js ie9&quot;&gt; &lt;![endif]--&gt;
&lt;!--[if (gt IE 9)|!(IE)]&gt;&lt;!--&gt; &lt;html lang=&quot;en&quot; class=&quot;no-js&quot;&gt; &lt;!--&lt;![endif]--&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;

  &lt;title&gt;Your website name&lt;/title&gt;

  &lt;meta name=&quot;description&quot; content=&quot;&quot;&gt;
  &lt;meta name=&quot;author&quot; content=&quot;&quot;&gt;

  &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge,chrome=1&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;link rel=&quot;shortcut icon&quot; href=&quot;favicon.ico&quot;&gt;
  &lt;link rel=&quot;apple-touch-icon&quot; href=&quot;apple-touch-icon.png&quot;&gt;

  &lt;link rel=&quot;stylesheet&quot; href=&quot;css/style.css?v=2&quot;&gt;

  &lt;script src=&quot;js/libs/modernizr-1.6.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;!-- Código da página exemplo do Initializr --&gt;

  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js&quot;&gt;&lt;/script&gt;
  &lt;script&gt;!window.jQuery &amp;&amp; document.write(unescape('%3Cscript src=&quot;js/libs/jquery-1.4.4.min.js&quot;%3E%3C/script%3E'))&lt;/script&gt;
  &lt;script src=&quot;js/script.js&quot;&gt;&lt;/script&gt;
  &lt;!--[if lt IE 7 ]&gt;
  &lt;script src=&quot;js/libs/dd_belatedpng.js&quot;&gt;&lt;/script&gt;
  &lt;script&gt; DD_belatedPNG.fix('img, .png_bg');&lt;/script&gt;
  &lt;![endif]--&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>O arquivo style.css traz em torno de 200 linhas, os primeiros 3 quartos disso um CSS Reset. Se você estiver procurando onde colocar os seus estilos no meio desse código CSS, role o arquivo para baixo até você encontrar o seguinte comentário:</p>
<pre class="brush: css; title: ; notranslate">
/*
    // ========================================== \\
   ||                                              ||
   ||               Your styles !                  ||
   ||                                              ||
    \\ ========================================== //
*/
</pre>
<p>Por último, o arquivo script.js contém um simples teste para ver se a biblioteca JQuery está sendo carregada. Nesse arquivo você pode escrever seu código JavaScript.</p>
<h3>TODO.txt</h3>
<p>Um arquivo todo.txt também é incluído para te mostrar que tarefas você tem de fazer para começar seu projeto e como usar alguns truques de HTML5 presentes no Boilerplate. Por exemplo, você e lembrado para não esquecer de substituir a linguagem se sua página não estiver em inglês, ou para criar uma  página 404.html no seu arquivo se configuração do servidor para fazer um redirecionamento em erros 404.</p>
<p><img class="aligncenter size-full wp-image-379" title="initializr-todo" src="http://flaviosilveira.com/wp-content/uploads/2011/07/initializr-todo.png" alt="" width="463" height="110" /></p>
<p>&nbsp;</p>
<h3>Indo mais longe</h3>
<p>A versão do Boilerplate que vem no Initializr é mais leve que a original. Se você precisa de um entendimento mais profundo do template ou de informações mais detalhadas de todos os arquivos, você pode ver a explicação oficial do Boilerplate em um vídeo feito por Paul Irish em inglês:</p>
<p><iframe width="425" height="349" src="http://www.youtube.com/embed/oDlsOyPKUTM" frameborder="0" allowfullscreen></iframe></p>
<p>Eu também lhe convido a visitar o <a title="Boilerplate" href="http://html5boilerplate.com/">site oficial do Boilerplate</a>, onde você vai encontrar algumas dicas para melhorar seu site , dicas de compatibilidade e performance.</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2011/initializr-comece-seu-projeto-html5-em-15-segundos/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Codeigniter 2 &#8211; Templates e Layouts</title>
		<link>http://flaviosilveira.com/2011/codeigniter-2-templates-e-layouts/</link>
		<comments>http://flaviosilveira.com/2011/codeigniter-2-templates-e-layouts/#comments</comments>
		<pubDate>Thu, 26 May 2011 18:51:28 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Layouts]]></category>
		<category><![CDATA[Template engine]]></category>
		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=350</guid>
		<description><![CDATA[Fala pessoal! O que mais gera acessos aqui no Blog são os artigos sobre Codeigniter, e principalmente a parte de layouts. É o artigo Habilitando Layouts no CodeIgniter (Template Engine) que está dividido em parte 1 e parte 2. Como esse artigo tem mais de um ano, resolvi dar um upgrade nele com algumas observações. Desde [...]]]></description>
			<content:encoded><![CDATA[<p>Fala pessoal!</p>
<p>O que mais gera acessos aqui no Blog são os artigos sobre Codeigniter, e principalmente a parte de layouts. É o artigo <em>Habilitando Layouts no CodeIgniter (Template Engine)</em> que está dividido em <a href="http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1/">parte 1</a> e <a href="http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/">parte 2</a>.</p>
<p>Como esse artigo tem mais de um ano, resolvi dar um upgrade nele com algumas observações.</p>
<p>Desde que ele foi escrito temos algumas novidades. A principal dela é  o lançamento de uma versão crítica do Codeigniter. Mas não se preocupe, a mecânica do artigo continua funcionando.<br />
Apenas atente para alguns detalhes.</p>
<p>Preste atenção para a parte do seu controller:</p>
<ul>
<li>Agora ele extende da classe CI_Controller e não mais da classe Controller.</li>
<li>Agora você não tem de ter mais um método construtor com o mesmo nome da classe. Pode arrancar fora aquilo sem medo.</li>
</ul>
<p>Outros:</p>
<ul>
<li>No tutorial anterior há uma correção porque eu tratava minha pasta system diferente do convencional. Com a ajuda e os comentários de vocês, foi feita uma correção que está no final do post. Agora na versão 2 está tudo ok. A pasta system vem separada da pasta application.</li>
<li>Na versão 2 temos agora arquivos .htaccess, arquivos de configuração, dentro das pastas application e da pasta system. Dentro deles há uma regra para recusar qualquer coisa que tentar acessar a pasta. Certifique-se que, em caso de colocar seus arquivos de estilo, ou seus arquivos javascript dentro de application por exemplo, alterar essa regra no .htaccess.</li>
</ul>
<p>Então você pode seguir normalmente o tutorial, apenas adapte os detalhes citados acima.<br />
Está com dificuldades ou preguiça? <a href="http://flaviosilveira.com/wp-content/uploads/2011/05/ci2exemplo1.zip">Clique aqui para baixar um exemplo com Layouts em cima do Codeigniter 2</a>.</p>
<p>É isso galera. Abraço!!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2011/codeigniter-2-templates-e-layouts/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Coding Dojo &#8211; O que é ? E como participar ?</title>
		<link>http://flaviosilveira.com/2011/coding-dojo-o-que-e-e-como-participar/</link>
		<comments>http://flaviosilveira.com/2011/coding-dojo-o-que-e-e-como-participar/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 22:37:09 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Coding Dojo]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[coding dojo]]></category>
		<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=307</guid>
		<description><![CDATA[Fala pessoal. Para quem não conhece, Coding dojo não se refere a um framework de linguagem ou a uma sessão de treinos do Bruce Lee. Coding Dojo é simplesmente uma reunião de programadores para treinar e aperfeiçoar seus talentos com algoritmos. Uma reunião para resolver um algoritmo. Estas reuniões estão sendo cada vez mais frequentes [...]]]></description>
			<content:encoded><![CDATA[<p>Fala pessoal.<br />
Para quem não conhece, Coding dojo não se refere a um framework de linguagem ou a uma sessão de treinos do Bruce Lee.<br />
Coding Dojo é simplesmente uma reunião de programadores para treinar e aperfeiçoar seus talentos com algoritmos.<br />
Uma reunião para resolver um algoritmo.<br />
Estas reuniões estão sendo cada vez mais frequentes no Brasil e no mundo.<br />
Veja abaixo porque isso está acontecendo e porque elas são interessantes.</p>
<h3>Porque participar?</h3>
<p><br style="clear: both;" /><br />
Os Dojos de programação foram criados para desafiar programadores com algoritmos complexos, diferente de algumas empresas ou trabalhos onde você acostuma com as lógicas e regras de negócio e com o tempo acaba apenas replicando aquilo onde você teve que pensar uma única vez.</p>
<p>Ele leva esse nome por ser baseado nos Dojos de artes marciais, onde no tatâme é feito um círculo e enquanto dois lutadores aprendem na prática, os demais aprendem olhando.<br />
Nos dojos de programação a idéia é a mesma, enquanto duas pessoas estão codificando na máquina as demais aprendem olhando o raciocínio e o caminho que essas pessoas estão seguindo.</p>
<p>É muito importante ressaltar que os dojos não são competições de quem programa melhor ou de quem resolve problemas mais rápidos.<br />
O espírito da coisa toda é ser colaborativo e se divertir. E claro aprender.</p>
<h3>Em que linguagem é programado e quais são os problemas propostos?</h3>
<p><br style="clear: both;" /><span id="more-307"></span><br />
Há Dojos de vários tipos e maneiras por aí.<br />
Algumas empresas estão montando Dojos internos para seus funcionários, nesses casos sempre seguindo a linguagem de desenvolvimento usada na empresa.</p>
<p>Outros Dojos específicos estão por aí, como de Java, Rails e etc.</p>
<p>Mas onde há programadores de várias linguagens, pode se decidir no dia do Dojo que linguagem utilizar, desde que tenha um especialista da linguagem presente para evitar maiores impasses do tipo <em>&#8220;como faz um if aqui?&#8221;</em>.<br />
Isso é bom para você se desligar daquela linguagem que você trabalha todo dia e olhar para alguma sintaxe diferente um pouco.</p>
<p>Os problemas de lógica são propostos por colaboradores de todo o mundo.<br />
Você pode ver alguns exemplo no <a href="http://dojopuzzles.com/">Dojo Puzzles</a>.<br />
Os problemas devem ser escolhidos minutos antes de começar o Dojo, evitando que ao escolher um dia ou dois antes, você começe a resolver o desafio na sua cabeça sem perceber.</p>
<h3>Como funciona?</h3>
<p><br style="clear: both;" /><br />
Cada dojo pode ter suas regras específicas de tempo ou funcionamento. Mas no geral eles seguem as seguintes premissas:</p>
<p><strong>Programação baseada em testes</strong></p>
<p>Antes de ser escrito uma implementação de código é escrito um teste. Isso é programação baseada em testes. TDD (Test-Driven Development).<br />
Se você não conhece  ou não imagina como é testar um resultado de uma função que ainda não foi criada, o Dojo pode ser uma forma de você se iniciar nessa metodologia e ver quais as vantagens ou desvantagens dela.</p>
<p><strong>Passos de bebê</strong></p>
<p>Quando um bebê está aprendendo a caminhar ele não arrisca dar passos grandes por aí. No Dojo acontece da mesma forma.<br />
O código vai saindo devagar, ajudando para que todos estejam entendendo o que está acontecendo e que rumo tudo está tomando.<br />
Sempre que alguém não estiver entendendo o que está acontecendo, esse tem o direito de perguntar e se encaixar nos trilhos novamente.</p>
<p><strong>Pair Programming &#8211; Programação em duplas</strong></p>
<p>A programação é feita em dupla. Um piloto e um co-piloto.<br />
O piloto, obviamente, coloca a mão na massa, digitando e identando código e testes.<br />
O co-piloto palpita ajuda olhando e apontando onde pode melhorar, o que está errado, etc.<br />
Quando esse piloto volta para a platéia após alguns minutos, o co-piloto se torna  piloto e alguém da platéia vem para ajudá-lo no papel de co-piloto.<br />
E assim segue.</p>
<p><strong>Fases</strong></p>
<p>Quando piloto e co-piloto estão sem idéias de como resolver o problema, é liberado que a platéia interaja e opine a respeito do código. Para demais casos há  fases onde a platéia pode opinar ou não. Quem dita essas fases são os testes.</p>
<p>Quando algum teste não estiver passando, não estiver dando um resultado correto, a dupla deve se concentrar em corrigir isso. Nessa fase a platéia não deve opinar, a menos que seja pedido.<br />
Quando os testes estão passando e tudo está ok, é liberado que a platéia de opiniões e sugestões para o piloto e co-piloto.</p>
<h3>Onde Acontece?</h3>
<p><br style="clear: both;" /><br />
Os Dojos tem se espalhado por toda parte e com certeza há um perto de você.<br />
O <a href="http://Codingdojo.org">Codingdojo.org</a> traz uma listagem de Dojos pelo mundo que você pode conferir <a href="http://maps.google.com/maps/ms?ie=UTF&amp;msa=0&amp;msid=116400871369678060090.000453a8d6ee3a6d3b8fe">clicando aqui</a>.<br />
Outra fonte de pesquisa, claro, é o <a href="http://www.google.com">google</a>. Pesquisando por Coding Dojo + o nome da sua cidade com certeza irá pintar alguma coisa.</p>
<p>Não encontrou nada?<br />
Ao Invés de reclamar que sua cidade é fraca e não tem nada, porque você não monta um grupo de dojo e chama seus conhecidos?</p>
<p>Então é isso pessoal. Quer se aperfeiçoar? Conhecer novas pessoas? Participar de um grupo bacana?<br />
Procure e participe dos Dojos.</p>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2011/coding-dojo-o-que-e-e-como-participar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>o FOR além do FOR &#8211; PHP</title>
		<link>http://flaviosilveira.com/2010/o-for-alem-do-for-php/</link>
		<comments>http://flaviosilveira.com/2010/o-for-alem-do-for-php/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 11:55:30 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[For]]></category>
		<category><![CDATA[laços de repetição]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=283</guid>
		<description><![CDATA[Salve pessoal! O Post que trago hoje trata de algo bem simples mas que pode não ser muito comum para algumas pessoas. São usos não muito populares de um de nossos laços de repetição, o FOR. Quando estamos aprendendo uma linguagem, bem no início, os manuais parecem mais nos confundir do que ajudar. O que [...]]]></description>
			<content:encoded><![CDATA[<p>Salve pessoal!</p>
<p>O Post que trago hoje trata de algo bem simples mas que pode não ser muito comum para algumas pessoas.<br />
São usos não muito populares de um de nossos laços de repetição, o FOR.</p>
<p>Quando estamos aprendendo uma linguagem, bem no início, os manuais parecem mais nos confundir do que ajudar.<br />
O que fazemos ??  Saímos em busca de uma comunicação mais direta em Blogs ou Sites.</p>
<p>Essas fontes resolvem nosso problema mais podem acabar deixando alguns vácuos quando se trata de estruturas básicas, como é o caso do FOR.</p>
<p>E sobre o FOR eu te pergunto o seguinte:<br />
Você sabia que os parâmetros passados para ele são opcionais ??<br />
Você sabia que pode passar quantas variáveis quiser para os parâmetros ??</p>
<p>Se já sabe maravilha, caso não, vamos ver como isso funciona.</p>
<p><span id="more-283"></span></p>
<p>Nesse primeiro exemplo temos nosso FOR comum, como todos aprendemos:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

        for($i = 0; $i &lt; 5; $i++)
        {
                echo $i;
                echo '&lt;br /&gt;';
        }
</pre>
<p>Nesse segundo exemplo, retiramos o primeiro parâmetro do FOR, e deixamos a variável $i definida fora do laço:<br />
Repare que o resultado que vai sair na tela, vai ser o mesmo do exemplo anterior.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

        $i = 0;

        for(; $i &lt; 5; $i++)
        {
                echo $i;
                echo '&lt;br /&gt;';
        }
</pre>
<p>Agora, vmaos tirar o terceiro parâmetro, e incrementar a variável dentro do laço.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

        $i = 0;

        for(; $i &lt; 5;)
        {
                echo $i;
                echo '&lt;br /&gt;';
                $i++;
        }
</pre>
<p>Por último, vamos retirar o segundo parâmetro.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

        $i = 0;

        for(; ; )
        {
                echo $i;
                echo '&lt;br /&gt;';

                if($i == 5)
                {
                        break;
                }

                $i++;
        }
</pre>
<p>Repare que em todos esses exemplos acima, fugimos do Loop infinito com alguma condição ou mecanismo que colocamos dentro do laço. Tome cuidado. Esse último exemplo se não for feito nada dentro do laço, gera facilmente um Loop infinito.</p>
<p>Outra opção que temos é usar mais de uma variável para cada parâmetro.<br />
Confira:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

        $w = 2;

        for($i = 1, $j = 9; $j &gt; 0; $j - $i, $w*=2)
        {
                echo $w;
                echo '&lt;br /&gt;';
        }
</pre>
<p>Vamos analisar o exemplo acima.<br />
Definimos para o loop a variável <em>$i</em> e a variável <em>$j</em>.<br />
O segundo parâmetro, que define até quando nosso loop vai rodar, nos mostra que será enquanto <em>$j</em> for maior que zero.<br />
E no último parâmetro, definimos que a cada volta <em>$j</em> vai diminuir o valor de <em>$i</em>, e que <em>$w</em>, que é uma variável que está definida fora do loop, será multiplicada por 2.<br />
Dentro do loop, pedimos para exibir <em>$w</em>.<br />
Faça o teste. Confira a saída.</p>
<p>Com esses exemplos acredito que já conseguimos absorver mais usos do que aquele que estamos acostumados do FOR. Todos eles são tratados na <a href="http://br.php.net/manual/pt_BR/control-structures.for.php">documentação</a> e também tem uns exemplos bem bacanas nos comentários dela que valem a pena olhar.</p>
<p>E aí você me pergunta… &#8220;E um uso prático disso?? Uma situação real ??&#8221;</p>
<p>De cara assim não consigo dar uma resposta, um exemplo.<br />
Mas com isso eu lembro de uma entrevista que um dos melhores guitarristas do mundo, Yngwie Malmsteen, deu há alguns anos para a Guitar Player americana. Ele disse:<br />
<em>&#8220;As pessoas falam que eu sou muito técnico e etc. Mas eu preciso conhecer a técnica para fazer virar música. Assim como um escritor deve conhecer várias palavras para escrever um livro&#8230;&#8221;</em></p>
<p>Pense nisso!<br />
Devemos conhecer as possibilidades que a linguagem nos dá, e assim ficamos preparados para montar as lógicas que cruzarem nosso caminho.</p>
<p>Grande Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/o-for-alem-do-for-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JQuery / JQuery Validation / Síncrono e Assíncrono / CPF único no banco de dados / Ajax Síncrono com JQuery</title>
		<link>http://flaviosilveira.com/2010/jquery-jquery-validation-sincrono-e-assincrono-cpf-unico-no-banco-de-dados-ajax-sincrono-com-jquery/</link>
		<comments>http://flaviosilveira.com/2010/jquery-jquery-validation-sincrono-e-assincrono-cpf-unico-no-banco-de-dados-ajax-sincrono-com-jquery/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 07:21:37 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[assíncrono]]></category>
		<category><![CDATA[cpf]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery validation]]></category>
		<category><![CDATA[síncrono]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=268</guid>
		<description><![CDATA[Salve pessoal. Hoje trago um artigo pesado e extenso, mas acredito que vá ajudar o pessoal que precisar em várias frentes. Vou Tratar aqui de JQuery, JQuery Validation, a diferença entre síncrono e assíncrono, como fazer ajax síncrono usando JQuery e também soluções para problemas em um dia de trabalho no mundo do desenvolvimento. Bom, [...]]]></description>
			<content:encoded><![CDATA[<p>Salve pessoal.</p>
<p>Hoje trago um artigo pesado e extenso, mas acredito que vá ajudar o pessoal que precisar em várias frentes. Vou Tratar aqui de JQuery, JQuery Validation, a diferença entre síncrono e assíncrono, como fazer ajax síncrono usando JQuery e também soluções para problemas em um dia de trabalho no mundo do desenvolvimento.</p>
<p>Bom, que o JQuery é um dos frameworks mais usados para javascript e que facilita muito a sua vida você já deve saber. E que o plugin para JQuery, JQuery Validation, é uma excelente maneira de validar seus formulários do lado cliente, você também deveria saber.</p>
<p>Veja um exemplo:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.validate.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;

function init()
{
	$(&quot;#form&quot;).validate({
		rules:
		{
			nome:{required: true},
			senha:{required: true, minlength: 5}
                }
	});
}

$(document).ready(init);

&lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;

&lt;form id=&quot;form&quot;&gt;

	&lt;p&gt;
		&lt;label for=&quot;nome&quot;&gt;Nome&lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;nome&quot; id=&quot;nome&quot; /&gt;
	&lt;/p&gt;

	&lt;p&gt;
		&lt;label for=&quot;senha&quot;&gt;Senha&lt;/label&gt;
		&lt;input type=&quot;password&quot; name=&quot;senha&quot; id=&quot;senha&quot; /&gt;
	&lt;/p&gt;

&lt;/form&gt;

&lt;/body&gt;
</pre>
<p><span id="more-268"></span><br />
Com essas poucas linhas você já tem um formulário com campo obrigatório para nome e campo obrigatório para senha exigindo um mínimo 5 caractéres.Ao não seguir qualquer uma das regras, o plugin insere uma Label com uma mensagem de erro.</p>
<p>Você tem opções para personalizar essa mensagem, além de outras várias opções oferecidas pelo plugin.<br />
Você pode dar uma conferida nessas opções pela <a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">documentação e exemplos no site oficial do plugin aqui</a>.</p>
<p><strong>Primeiro Problema</strong></p>
<p>O plugin JQuery Validation é gringo; Internacional se você preferir assim dizer.<br />
Na sua condição de estrangeiro, ele não conhece o que é CPF.<br />
Ele não tem um método para entrada e validação de CPF, o que é muito comum nos formulários de cadastro aqui no Brasil.</p>
<p>Por sorte, o JQuery validation tem uma maneira muito fácil de você inserir novos métodos a ele.<br />
Com uma rápida busca na internet chegamos em vários blogs que nos trazem a solução, como é o caso do <a href="http://www.tidbits.com.br/">TidBits</a>  escrito pelo <a href="http://twitter.com/maktuiu">Danilo Augusto</a>, que falou sobre isso em seu post <a href="http://www.tidbits.com.br/colecao-de-metodos-para-o-plugin-validate-do-jquery">Coleção de métodos para o plugin validate do Jquery</a>.</p>
<p>Primeiro vamos adicionar um campo para o CPF.<br />
Vamos também separar o arquivo .js para ficar mais organizado a coisa toda, separando o que é Html do que é javascript.</p>
<p>Nosso Html vai ficar assim:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;script src=&quot;jquery.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;jquery.validate.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;!-- default.js será o arquivo separado do javaScript --&gt;
&lt;script src=&quot;default.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;

&lt;form id=&quot;form&quot;&gt;

	&lt;p&gt;
		&lt;label for=&quot;nome&quot;&gt;Nome&lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;nome&quot; id=&quot;nome&quot; /&gt;
	&lt;/p&gt;

	&lt;p&gt;
		&lt;label for=&quot;senha&quot;&gt;Senha&lt;/label&gt;
		&lt;input type=&quot;password&quot; name=&quot;senha&quot; id=&quot;senha&quot; /&gt;
	&lt;/p&gt;

	&lt;p&gt;
		&lt;label for=&quot;cpf&quot;&gt;CPF&lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;cpf&quot; id=&quot;cpf&quot; /&gt;
	&lt;/p&gt;

&lt;/form&gt;
</pre>
<p>Ok, adicionamos o Input para o CPF em nosso HTML.<br />
Agora vamos adicionar o método para o Jquery Validation no nosso arquivo default.js, seguindo o exemplo que pegamos no <a href="http://www.tidbits.com.br/colecao-de-metodos-para-o-plugin-validate-do-jquery">Blog do Danilo</a>.</p>
<pre class="brush: jscript; title: ; notranslate">

function init()
{
	$(&quot;#form&quot;).validate({
		rules:
		{
			nome:{required: true},
			senha:{required: true, minlength: 5}
	       }
	});
}

jQuery.validator.addMethod(&quot;verificaCPF&quot;, function(value, element) {
value = value.replace('.','');
value = value.replace('.','');
cpf = value.replace('-','');
while(cpf.length &lt; 11) cpf = &quot;0&quot;+ cpf;
var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
var a = [];
var b = new Number;
var c = 11;
for (i=0; i&lt;11; i++){
	a[i] = cpf.charAt(i);
	if (i &lt; 9) b += (a[i] * --c);
}
if ((x = b % 11) &lt; 2) { a[9] = 0 } else { a[9] = 11-x }
b = 0;
c = 11;
for (y=0; y&lt;10; y++) b += (a[y] * c--);
if ((x = b % 11) &lt; 2) { a[10] = 0; } else { a[10] = 11-x; }
if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg)) return false;
return true;
}, &quot;Informe um CPF válido.&quot;);

$(document).ready(init);
</pre>
<p>Agora falta chamar o método para o seu campo.<br />
Para isso adicione a seguinte validação no seu código javascript:</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#form&quot;).validate({
	rules:
	{
		nome:{required: true},
		senha:{required: true, minlength: 5},
		cpf:{required: true, verificaCPF: true}
       }
});
</pre>
<p>Repare:<br />
Chamamos o método verificaCPF, e passamos o valor que queremos, no caso, true para que seja um CPF válido.<br />
Faça seus testes.</p>
<p><strong>Segundo Problema</strong></p>
<p>Legal! Temos o formulário validando, inclusive com um campo de CPF, sem muito trabalho pois estamos contando com o JQuery Validation. Mas então nos surgi outro problema. No seu banco de dados você tem um campo onde CPF tem de ser único.</p>
<p>E para ajudar seu usuário, além de mostrar se o CPF é válido ou não, você quer mostrar se é um CPF cadastrado ou não.<br />
E então, como fazemos ?</p>
<p>Para pesquisas no banco de dados sem refresh na página a resposta é fácil não? Ajax!<br />
Mas como juntar isso no Jquery validation?</p>
<p>Você conhecendo a <a href="http://api.jquery.com/category/ajax/">facilidade do Ajax no Jquery</a>, pode sair logo de cara transformando o seu método de validação de CPF para o seguinte:</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery.validator.addMethod(&quot;verificaCPF&quot;, function(value, element) {

value = value.replace('.','');
value = value.replace('.','');
cpf = value.replace('-','');

while(cpf.length &lt; 11) cpf = &quot;0&quot;+ cpf;
var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
var a = [];
var b = new Number;
var c = 11;

for (i=0; i&lt;11; i++)
{
	a[i] = cpf.charAt(i);
	if (i &lt; 9) b += (a[i] * --c);
}

if ((x = b % 11) &lt; 2) { a[9] = 0 } else { a[9] = 11-x }

b = 0;
c = 11;

for (y=0; y&lt;10; y++) b += (a[y] * c--);

if ((x = b % 11) &lt; 2) { a[10] = 0; } else { a[10] = 11-x; }

if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg)) return false;

var verifica = false;
$.get('verificaCpf.php', {cpf : cpf}, function(data){
	if(data == 0) verifica = true;
});

if(!verifica) return false;

return true;
}, &quot;CPF inválido ou já cadastrado!&quot;);
</pre>
<p>Vamos ver o que foi feito aqui. Acompanhe da linha 30 em diante.<br />
Adicionamos uma variável dentro do nosso método chamada <em>&#8220;verifica&#8221;</em>, e definimos o valor de false para ela.</p>
<p>Em seguida fazemos uma chamada para um arquivo PHP através de Ajax.<br />
Esse arquivo PHP deve fazer uma consulta no seu banco de dados pelo CPF digitado.<br />
Por ser algo simples de fazer e para não estender ainda mais esse post ,não vou tratar desse código PHP aqui.</p>
<p>Para entendimento, basta saber que nosso código PHP retorna o número de linhas onde encontrou aquele CPF.<br />
Esse valor vai vir para o javascript pela variável data.<br />
Repare que é feito uma comparação na resposta do Ajax, que, caso o número de linhas encontradas no banco seja 0, mudamos a variável para true. E fim do Ajax.</p>
<p>Em seguida, verificamos a variável <em>&#8220;verifica&#8221;</em>.<br />
Se ela for diferente de verdadeira, o método verificaCPF retorna false e será acusado erro em seu formulário.</p>
<p>Ufa! Certo. Vamos testar?<br />
Problemas acontecem não? Está sempre retornando erro.<br />
O que está acontecendo?</p>
<p><strong>Terceiro Problema</strong></p>
<p>Vamos entender:<br />
Seu código PHP é chamado. Ele vai lá no banco de dados, faz a consulta e está retonando o resultado.<br />
Mas enquanto isso, o código javascript já continuou sua execução, e quando a resposta do ajax chegar, a execução do método terá acabado. Com isso ele vai retornar o valor que tinha na variável, false.</p>
<p>Isso acontece, pois o ajax padrão do JQuery, como foi usado acima, é assíncrono.<br />
Você está se perguntando o que é isso? Vou tentar ser claro.<br />
É o fato de não importar quando a resposta do ajax vai vir. Não precisar de sincronismo, compreende?</p>
<p>Porém veja que esse é exatamente o nosso problema aqui. Precisamos desse sincronismo.<br />
Precisamos da resposta do nosso Ajax antes de continuar a execução do código.</p>
<p>Como fazer?<br />
Vamos fazer o Ajax Síncrono.<br />
A execução do javascript só pode continuar depois da resposta do ajax.</p>
<p>Procurando pela internet, achei alguns desenvolvedores falando que não é possível fazer ajax síncrono com JQuery. Isso não é verdade. É uma das primeiras coisas que <a href="http://api.jquery.com/jQuery.ajax/">encontramos na documentação</a>. </p>
<p>Veja como fazer:</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery.ajax({
	    url: 'verifica_cpf.php?cpf='+cpf,
	    async: false,
	    success: function(data) {
	       if(data == 0) verifica = true;
	   }});
</pre>
<p>Passando o valor false para a propiedade async do ajax, temos nosso ajax síncrono.<br />
Repare que o código segue o padrão JQuery e é fácil de entender.<br />
Ao invés de passar as variáveis em uma propiedade, as adicionei no padrão GET diretamente na url.<br />
Uma opção a isso seria usar a propiedade data.</p>
<p>Substituindo esse trecho de código no lugar do nosso ajax assíncrono anterior, temos nosso problema corrigido.</p>
<p>Uma observação importante, é você reparar que a execução dá página dá uma travada enquanto espera a resposta do javascript. Fique atento para não deixar de dar uma resposta em situações de erro ou sucesso. Caso contrário sua página vai ficar travada nesse ponto.</p>
<p><strong>Quarto problema</strong></p>
<p>Não não…brincadeira… hahaha</p>
<p>Legal! Acredito que chegamos finalmente ao final.<br />
Dúvidas? Dicas para melhorar todo esse processo? Não deixem de comentar pessoal…<br />
Grande Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/jquery-jquery-validation-sincrono-e-assincrono-cpf-unico-no-banco-de-dados-ajax-sincrono-com-jquery/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>JQuery e JQuery Price para formatar seus campos de valor monetário</title>
		<link>http://flaviosilveira.com/2010/jquery-e-jquery-price-para-formatar-seus-campos-de-valor-monetario/</link>
		<comments>http://flaviosilveira.com/2010/jquery-e-jquery-price-para-formatar-seus-campos-de-valor-monetario/#comments</comments>
		<pubDate>Sat, 16 Oct 2010 06:51:38 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[formatar preços]]></category>
		<category><![CDATA[jquery price]]></category>
		<category><![CDATA[preços]]></category>
		<category><![CDATA[valores monetários]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=261</guid>
		<description><![CDATA[Salve pessoal. Muita gente me manda emails ou mensagens no twitter achando que eu escrevi o Plugin JQuery Price para JQuery, que ajuda você a formatar seus campos de texto com valores monetários, valores de preço. Se você ler bem certinho na página oficial do Plugin (http://meiaduzia.com.br/cuducos2/priceformat), e também no código ao baixar ele, verá [...]]]></description>
			<content:encoded><![CDATA[<p>Salve pessoal.</p>
<p>Muita gente me manda emails ou mensagens no twitter achando que eu escrevi o Plugin JQuery Price para JQuery, que ajuda você a formatar seus campos de texto com valores monetários, valores de preço. Se você ler bem certinho na <a href="http://meiaduzia.com.br/cuducos2/priceformat/">página oficial do Plugin</a> (<a href="http://meiaduzia.com.br/cuducos2/priceformat/">http://meiaduzia.com.br/cuducos2/priceformat</a>), e também no código ao baixar ele, verá que eu apenas colaborei com uma nova função do plugin, uma necessidade minha no início do ano de 2009.</p>
<p>O Autor do Plugin é o <a href="http://www.meiaduzia.com.br/cuducos/">Eduardo Cuducos</a>, Um tremendo Designer e Desenvolvedor Web do estado de Santa Catarina que conheci por meio desse Plugin. <a href="http://www.meiaduzia.com.br/cuducos/">Aqui</a> você pode conhecer mais dele ou seguir seu <a href="http://twitter.com/cuducos">twitter</a> (<a href="http://twitter.com/cuducos">http://twitter.com/cuducos</a>) para pegar suas idéias, sejam de designer, política ou pensamentos de vida, que também valem a pena.</p>
<p>Para usar o Plugin é fácil.<br />
Na <a href="http://meiaduzia.com.br/cuducos2/priceformat/">página oficial</a> consta alguns exemplos bem explicativos.<br />
Mas se você ainda tem dúvidas vou reproduzí-los aqui.</p>
<p>Primeiro crie seu Html com o campo que quer formatar.<br />
Não preciso dizer para você carregar a JQuery e o Plugin JQuery Price preciso ?</p>
<pre class="brush: xml; title: ; notranslate">

&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jprice.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;

	function init()
	{

	}

	$(document).ready(init);

&lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;

	&lt;h1&gt;Exemplo&lt;/h1&gt;

	&lt;label for=&quot;price&quot;&gt;Valor:&lt;/label&gt;
	&lt;input type=&quot;text&quot; id=&quot;price&quot; /&gt;

&lt;/body&gt;
</pre>
<p><span id="more-261"></span><br />
Ok.<br />
Reparem que eu já acrescentei um código JavaScript para chamar a funcão init assim que a página terminar de carregar. Isso evita que o JavaScript tente fazer algo com algum campo do Html que não esteja criado ainda. Uma outra solução para isso poderia ser colocar esse código ao final do Html.</p>
<p>Para o uso básico do Plugin, basta fazer a chamada do campo (no meu caso chamei pelo id) e acrescentar o método priceFormat veja:</p>
<pre class="brush: jscript; title: ; notranslate">

function init()
{
	$('#price').priceFormat();
}

$(document).ready(init);
</pre>
<p>Com isso seu input já formata automaticamente os números inseridos nele para as configurações padrões do Jquery Price. Ah sim, ele impede que você digite letras e alfanuméricos nesse campo também.</p>
<p>Ficou legal não?<br />
Mas você não quer esse valor em doláres, você está lidando com o seu Brasil Brasileiro.<br />
Vamos personalizar isso então.</p>
<pre class="brush: jscript; title: ; notranslate">

function init()
{
	$('#price').priceFormat({
		prefix: 'R$ ',
		centsSeparator: ',',
		thousandsSeparator: '.'
	});
}
</pre>
<p>Passando parâmetros para funcão em formato de array, conseguimos personalizar nosso input conhecendo algumas propiedades do plugin.</p>
<p>Com a propiedade prefix, alteramos o que vem antes dos números.<br />
Repare que foi dado um espaço após o cifrão para ficar melhor visivelmente dentro do input.<br />
Em seguida foi modificado o separador de centavos para uma vírgula e o separador de milhar para um ponto.</p>
<p>Muito fácil não ??</p>
<p>E chegamos ao momento mais esperado (Ou não).<br />
Qual foi a minha colaboração com o Plugin ? Qual foi meu problema ?</p>
<p>Eu precisava limitar o valor que o usuário digitava.<br />
Se você testar os exemplos que fizemos até aqui, verá que você pode inserir números até cansar.</p>
<p>Na época fiz um código meio xulo para resolver o problema, porque estava começando com JQuery e não tinha muita desenvoltura para alterar seus plugins. Mandei o código para o Cuducos que fez as devidas adaptações, não estragando a facilidade de uso do plugin.<br />
Vamos a um exemplo:</p>
<pre class="brush: jscript; title: ; notranslate">

function init()
{
	$('#price').priceFormat({
		prefix: 'R$ ',
		centsSeparator: ',',
		thousandsSeparator: '.',
		limit: 6
	});
}
</pre>
<p>Passando mais uma propiedade para o método, chamada limit, agora você só pode inserir 6 numerais dentro do seu input.</p>
<p>Um outro limitador que temos é o de casas para os centavos.</p>
<pre class="brush: jscript; title: ; notranslate">

function init()
{
	$('#price').priceFormat({
		prefix: 'R$ ',
		centsSeparator: ',',
		thousandsSeparator: '.',
		limit: 6,
		centsLimit: 4
	});
}
</pre>
<p>Difícil ? Acredito que não certo ?<br />
Experimente outros valores e confira os resultados.</p>
<p>Por hoje é isso pessoal.<br />
Demos uma passada por todo o uso do plugin JQuery Price além de conhecer a história de como colaborei para o plugin. Espero ter tirado as dúvidas do pessoal que me manda emails e afins.</p>
<p>Agradecimentos imensos para o <a href="http://www.meiaduzia.com.br/cuducos/">Eduardo Cuducos</a> que adicionou meu nome dentro do projeto do plugin pela minha pequena colaboração, tornando o meu nome mais visível para a comunidade de desenvolvimento.</p>
<p>Qualquer coisa é só entrar em contato.<br />
Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/jquery-e-jquery-price-para-formatar-seus-campos-de-valor-monetario/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PodCast &#8211; Desenvolvimento Mobile Web</title>
		<link>http://flaviosilveira.com/2010/podcast-desenvolvimento-mobile-web/</link>
		<comments>http://flaviosilveira.com/2010/podcast-desenvolvimento-mobile-web/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 21:04:24 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[Desenvolvimento Mobile]]></category>
		<category><![CDATA[Jquery Mobile]]></category>
		<category><![CDATA[PHP Sc Conf]]></category>
		<category><![CDATA[PodCast]]></category>
		<category><![CDATA[Site Mobile]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=254</guid>
		<description><![CDATA[Salve Galera! Hoje deixo aqui o meu podcast relatando minha ida ao PHP SC Conf (http://www.phpsc.com.br/) neste ano de 2010, falando principalmente dos assuntos colocados pelo Bruno Fernandes (@porkaria) em sua palestra Desenvolvimento Mobile Web. No Podcast: PHP SC Conf Identificação do dispositivo mobile Disparo de SMS Novo Marketing QR Code Ferramentas Web para Mobile [...]]]></description>
			<content:encoded><![CDATA[<p>Salve Galera!<br />
Hoje deixo aqui o meu podcast relatando minha ida ao <a href="http://www.phpsc.com.br/">PHP SC Conf</a> (<a href="http://www.phpsc.com.br/">http://www.phpsc.com.br/</a>) neste ano de 2010, falando principalmente dos assuntos colocados pelo <a href="http://www.porkaria.com.br/">Bruno Fernandes</a> (@porkaria) em sua palestra <em>Desenvolvimento Mobile Web</em>.</p>
<p>No Podcast:</p>
<ul>
<li>PHP SC Conf</li>
<li>Identificação do dispositivo mobile</li>
<li>Disparo de SMS</li>
<li>Novo Marketing</li>
<li>QR Code</li>
<li>Ferramentas Web para Mobile</li>
<li>Conteúdo de um site Mobile</li>
<li>Outros</li>
</ul>
<p>A trilha sonora é da Banda <a href="http://www.myspace.com/auraaor">Auras</a> aqui de Curitiba.<br />
Mais abaixo você tem os links para acompanhar melhor o Cast.</p>
<p>Links:<br />
Tera-WURFL &#8211; <a href="http://www.tera-wurfl.com/wiki/index.php/Main_Page">http://www.tera-wurfl.com/wiki/index.php/Main_Page</a><br />
W3C Mobile &#8211; <a href="http://www.w3.org/Mobile">http://www.w3.org/Mobile</a><br />
Bruno @Porkaria &#8211; <a href="http://www.porkaria.com.br/">http://www.porkaria.com.br/</a><br />
Gerando QRCode com PHP -<a href="http://www.porkaria.com.br/2010/04/24/gerando-qr-code-com-php/">http://www.porkaria.com.br/2010/04/24/gerando-qr-code-com-php/</a><br />
PHP Mobile &#8211; <a href="http://www.phpmobile.com.br">http://www.phpmobile.com.br/</a><br />
JQuery Mobile &#8211; <a href="http://jquerymobile.com/">http://jquerymobile.com/</a><br />
WordPress Mobile &#8211; <a href="http://wordpress.org/extend/plugins/wordpress-mobile-edition/">http://wordpress.org/extend/plugins/wordpress-mobile-edition/</a></p>
<p><a href="http://wordpress.org/extend/plugins/wordpress-mobile-edition/"></a><br />
Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/podcast-desenvolvimento-mobile-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hello World em AIR com Adobe Flash Builder</title>
		<link>http://flaviosilveira.com/2010/hello-world-em-air-com-adobe-flash-builder/</link>
		<comments>http://flaviosilveira.com/2010/hello-world-em-air-com-adobe-flash-builder/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 18:48:13 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Adobe Flash Builder]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[Adobe Flex]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=232</guid>
		<description><![CDATA[Salve galera, Hoje vou mostrar um pequeno &#8220;Hello World!&#8221; no Adobe Air para quem quer começar a descobrir a ferramenta. Uma das grandes vantagens do Adobe Air é o fato de você construir programas para desktop e ele rodar em qualquer sistema operacional utilizando tecnologias conhecidas da Web como Html, Ajax e Flash. Não vou [...]]]></description>
			<content:encoded><![CDATA[<p>Salve galera,<br />
Hoje vou mostrar um pequeno &#8220;Hello World!&#8221; no Adobe Air para quem quer começar a descobrir a ferramenta.</p>
<p>Uma das grandes vantagens do Adobe Air é o fato de você construir programas para desktop e ele rodar em qualquer sistema operacional utilizando tecnologias conhecidas da Web como Html, Ajax e Flash.<br />
Não vou me ater a detalhes pequenos da ferramenta, como linguagem que usa, onde ficam os componentes, quais são, etc. Vou levar para um lado mais prático para construirmos o exemplo de maneira rápida. Caso passe algo em branco para quem está começando por favor, é só entrar em contato.</p>
<p>Vou usar Adobe Flash Builder, que é a nova versão do Adobe Flex lançada em Março desse ano.<br />
Você pode fazer o download da ferramenta no site da Adobe <a title="Download Flash Builder" href="http://www.adobe.com/products/flashbuilder/">neste Link</a>.<br />
O Flex traz a integração com desenvolvimento para o Adobe Air desde o Flex 3.</p>
<p>Crie um novo projeto Flex clicando com o botão direito do mouse dentro da janela Package explorer selecionando <em>New &gt; Flex Project</em> como na imagem abaixo.<br />
<span id="more-232"></span><br />
<img class="size-full wp-image-233" title="new flex project" src="http://flaviosilveira.com/wp-content/uploads/2010/08/imagem1.png" alt="" width="390" height="188" /><br />
<br style="clear: both;" /></p>
<p>É aberta uma janela onde você dá um nome de sua preferência para o seu projeto e seleciona o tipo da aplicação em Application type. Como nosso objetivo é o Air, selecione <em>Desktop (runs in Adobe Air)</em>. Veja a imagem.</p>
<p><img class="size-full wp-image-235" title="new project window" src="http://flaviosilveira.com/wp-content/uploads/2010/08/imagem2.png" alt="new project window" width="645" height="417" /><br style="clear: both;" /><br />
Se você já tem um pouco mais de experiência com a ferramenta pode alterar o caminho do projeto e outras opções, caso contrário mantenha o padrão para não ter dor de cabeça.<br />
Após clicar em <em>Finish</em>, é criado seu projeto e aberto o arquivo principal da sua aplicação que tem o mesmo nome que você deu ao projeto.</p>
<p>Você se depara com a Aba Source onde temos o código MXML usado pelo Flex e a Aba Design que vai facilitar na montagem da cara da sua aplicação. É para lá que vamos, onde no Centro, que chamamos de palco,  temos uma preview da sua aplicação (que está em branco), e do lado direito a janela de propriedades e de aparência.</p>
<p><img class="size-full wp-image-236" title="SourceDesign" src="http://flaviosilveira.com/wp-content/uploads/2010/08/imagem3.png" alt="SourceDesign" width="645" height="448" /><br />
<br style="clear: both;" /></p>
<p>Assim que você troca para o modo design na primeira vez, já vem selecionado o componente <em>Window Application</em>, que seria para o Air como a tag body para o HTML. Na lateral direita, a janela de propiedades mostra as cores do Background e do Preloader.</p>
<p>Primeiro vamos mudar a cor de fundo. Para isso, clique no branco que está na propriedade <em>Background</em>. Ao fazer isso é exibida uma color picker onde você pode escolher a cor de sua preferência. Eu fiquei com um preto.</p>
<p><img class="size-full wp-image-237" title="colorPickerWindow" src="http://flaviosilveira.com/wp-content/uploads/2010/08/imagem4.png" alt="colorPickerWindow" width="551" height="495" /><br style="clear: both;" /><br />
Ao clicar em Ok você já vê a cor mudar na parte do Design.</p>
<p>Certo. Na lateral esquerda, abaixo da janela Package Explorer, temos as opções dos componentes. Eles são organizados em pastas para facilitar sua localização. Dando uma rodada por eles você encontra dentro da pasta <em>Controls</em> o componente <em>Label</em>. Confira Imagem.</p>
<p><img class="size-full wp-image-238" title="ComponentLabel" src="http://flaviosilveira.com/wp-content/uploads/2010/08/imagem5.png" alt="ComponentLabel" width="317" height="392" /><br style="clear: both;" /><br />
Clique e arraste esse componente para cima da sua aplicação. Você verá um sinal de mais no Mouse indicando que será adicionado. Ao soltar o componente ali você vê um texto escrito em sua aplicação.</p>
<p>Dependendo a cor que você escolheu para o seu fundo, você não vai ver nada.<br />
A cor padrão da fonte do componente Label é preta. Você pode mudar essa cor na caixa de propriedades na lateral direita, da mesma forma que fez com o fundo. Atenção, o componente deve estar selecionado para que as propiedades dele apareçam.</p>
<p><img class="size-full wp-image-239" title="propertiesLabel" src="http://flaviosilveira.com/wp-content/uploads/2010/08/imagem6.png" alt="propertiesLabel" width="287" height="515" /><br style="clear: both;" /><br />
Após mudar a cor da fonte, para branco no meu caso, já alterei o tamanho da fonte para 36 para visualizar melhor.</p>
<p>Ficando assim, confira:<br />
<img class="size-full wp-image-240" title="PreApp1" src="http://flaviosilveira.com/wp-content/uploads/2010/08/imagem7.png" alt="PreApp1" width="645" height="486" /><br />
<br style="clear: both;" /></p>
<p>Agora só falta mudar o texto.<br />
Para isso você tem a opção de dar dois cliques em cima do componente ou usar a caixa <em>Text</em> na janela de propriedades. Escreva o texto de sua preferência. O componente será adaptado para o tamanho do seu texto, mas você pode facilmente alterar seu tamanho puxando seus cantos dentro do palco. Da mesma maneira você pode posicionar o componente dentro da aplicação como preferir arrastando ele com o Mouse. A minha ficou dessa forma.<br />
<img class="size-full wp-image-241" title="preApp2" src="http://flaviosilveira.com/wp-content/uploads/2010/08/Imagem-8.png" alt="preApp2" width="645" height="493" /><br />
<br style="clear: both;" /></p>
<p>Agora é salvar (Ctrl + s) e rodar a sua aplicação para ver como ela vai funcionar.<br />
Para isso Clique no botão Run (é como um Play) que fica acima da janela <em>Package Explorer</em>.</p>
<p><img class="size-full wp-image-242" title="RunApp" src="http://flaviosilveira.com/wp-content/uploads/2010/08/Imagem-9.png" alt="RunApp" width="393" height="211" /><br />
<br style="clear: both;" /><br />
Feito! O seu aplicativo irá abrir com o texto conforme você montou.</p>
<p><img class="size-full wp-image-243" title="AppWorks" src="http://flaviosilveira.com/wp-content/uploads/2010/08/imagem10.png" alt="AppWorks" width="645" height="396" /><br />
<br style="clear: both;" /></p>
<p>Está feito a sua aplicação em Air usando o Adobe Flash Builder.<br />
Procure experimentar outros componentes e suas propriedades para ver como ficam.</p>
<p>Dúvidas? Só entrar em contato.<br />
Abraços!!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/hello-world-em-air-com-adobe-flash-builder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formatando CPF no SQL com Expressões Regulares &#8211; RegexReplace</title>
		<link>http://flaviosilveira.com/2010/formatando-cpf-no-sql-com-expressoes-regulares-regexreplace/</link>
		<comments>http://flaviosilveira.com/2010/formatando-cpf-no-sql-com-expressoes-regulares-regexreplace/#comments</comments>
		<pubDate>Fri, 21 May 2010 15:22:32 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Expressões Regulares]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[Programação SQL]]></category>
		<category><![CDATA[Regex Replace]]></category>
		<category><![CDATA[Sql Server]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=209</guid>
		<description><![CDATA[Que as expressões regulares são bacanas e divertidas todo mundo já sabe. Elas estão presentes em várias linguagens e no SQL Server não poderia ser diferente. Se você é programador e ainda não sabe sobre as expressões regulares, não perca tempo. Você precisa se emocionar com o uso delas em seus códigos. Consulte os links [...]]]></description>
			<content:encoded><![CDATA[<p>Que as expressões regulares são bacanas e divertidas todo mundo já sabe.<br />
Elas estão presentes em várias linguagens e no SQL Server não poderia ser diferente.</p>
<p>Se você é programador e ainda não sabe sobre as expressões regulares, não perca tempo.<br />
Você precisa se emocionar com o uso delas em seus códigos.</p>
<p>Consulte os links abaixo para iniciar já esse aprendizado:<br />
Wikipedia &#8211; <a href="http://pt.wikipedia.org/wiki/Express%C3%A3o_regular">http://pt.wikipedia.org/wiki/Express%C3%A3o_regular</a><br />
Um excelente tutorial para começar do Rafael Jaques- <a href="http://www.phpit.com.br/artigos/entendendo-as-expressoes-regulares.phpit">http://www.phpit.com.br/artigos/entendendo-as-expressoes-regulares.phpit</a><br />
Aurélio Marinho Jargas &#8211; O guru das expressões regulares &#8211; <a href="http://aurelio.net/er/">http://aurelio.net/er/</a></p>
<p>Certo mas e o SQL Server ? Vamos voltar para ele..</p>
<p>Em um post antigo eu mostro como fazer a formatação de campos como CPF direto pelo SQL.</p>
<p>Mas digamos que alguns campos do CPF estejam com formatação correta com pontuação e dígitos e outras não.<br />
E ainda outras mais ou menos. Ex: <em>161.364.708-53, 16136470853, 161364708-53</em>.<br />
Você tem um problema e nesse caso um SubString não iria funcionar corretamente.</p>
<p>Solução? RegexReplace. Vamos ver como usar isso.<br />
<span id="more-209"></span><br />
Primeiro vamos montar a expressão regular.<br />
Vamos montar ela de maneira clara pensando apenas em como o CPF tem de ser exibido.<br />
Não vamos pensar no cálculo do dígito verificador nem nada desse tipo.</p>
<p>Bom o que queremos ?</p>
<ul>
<li>3 números seguidos de um ponto. Vamos lembrar que esse ponto pode existir ou não. Não sabemos como o dado foi salvo no banco.</li>
<li>Mais 3 números seguidos de outro ponto. Novamente não sabemos se esse ponto estará presente ou não.</li>
<li>Precisamos agora de 3 números seguidos por um hífen, que também não temos certeza se estará lá ou não.</li>
<li>Para fechar, dois números.</li>
</ul>
<p>Legal! Já sabemos o que queremos vamos agora começar a brincadeira.</p>
<p>Não vou explicar aqui cada operador e caracter. Isso é demorado e também não é meu objetivo aqui.<br />
Para começar com Expressões Regulares consulte os links que passei logo no início desse post.</p>
<p>Para trazer numerais na expressão regular usamos o seguinte</p>
<pre class="brush: bash; title: ; notranslate">
[0-9]
</pre>
<p>Mas isso vai me trazer apenas um numero, mas na verdade queremos 3 então fazemos da seguinte maneira</p>
<pre class="brush: bash; title: ; notranslate">
[0-9]{3}
</pre>
<p>Se você quisesse 2 números, bastava substituir o 3 pelo 2.</p>
<p>Legal, para pegar os números já temos todas as armas na mão.<br />
E agora os caracteres, o ponto e o hífen opcionais ??<br />
Vamos lá&#8230;</p>
<p>O ponto é um operador em expressão regular e não é o operador que vai trazer o que queremos.<br />
Nós precisamos de um ponto literalmente.<br />
Para isso vamos escapar o ponto, assim como escapamos aspas ou caracteres especiais em programação.<br />
Ficando assim:</p>
<pre class="brush: php; title: ; notranslate">
\.
/*Desconsidere umas das barras, acima
coloquei duas por conta do plugin de sintaxe do wordpress.*/
</pre>
<p>Agora para deixar isso opcional, basta colocar uma interrogação depois disso.</p>
<pre class="brush: bash; title: ; notranslate">
.?
</pre>
<p>Para o hífen, não é obrigatório escapar pois ele não é um operador em expressões regulares.<br />
Entretanto eu gosto de escapar ele. Para mim facilita a leitura.</p>
<pre class="brush: bash; title: ; notranslate">
-?
</pre>
<p>Certo. Temos como pegar os numerais, como pegar hífen e pontos. Agora é juntar tudo.<br />
Vamos usar parênteses para deixar tudo organizado e também para facilitar a nossa formatação mais para frente.</p>
<pre class="brush: bash; title: ; notranslate">
^([0-9]{3}).?([0-9]{3}).?([0-9]{3})-?([0-9]{2})$
</pre>
<p>Repare que coloquei um circunflexo(<em>^</em>) no início da expressão e um cifrão(<em>$</em>) no final.<br />
Isso indica que a String tem que ter um começo e um fim.<br />
Caso não tivesse isso poderia haver qualquer caractere antes ou depois do CPF.</p>
<p>Vejamos por partes então:</p>
<ul>
<li>^ &#8211; Inicia a string</li>
<li>([0-9]{3}) &#8211; 3 números</li>
<li>.? &#8211; Um ponto, que pode ter ou não, por isso a interrogação.</li>
<li>([0-9]{3}) &#8211; Novamente 3 números</li>
<li>.? &#8211; Mais um ponto, que pode ter ou não.</li>
<li>([0-9]{3}) &#8211; Mais 3 números</li>
<li>-? &#8211; Um hífen, que pode ter ou não. Não é obrigatório o escape nele.</li>
<li>([0-9]{2}) &#8211; Dois números.</li>
<li>$ &#8211; Finaliza a String.</li>
</ul>
<p>Agora vamos para a segunda parte, o RegexReplace do Sql Server.</p>
<p>A função RegexReplace tem 3 parâmetros obrigatórios.<br />
O primeiro é o seu campo, CPF nesse caso. O Segundo a expressão regular, e o terceiro o como queremos exibir.</p>
<p>Os dois primeiros parâmetros já temos.<br />
Para o modo de exibição funciona da seguinte forma.<br />
Quando usamos os parênteses em nossa expressão regular, elas se tornam variáveis que resgatamos com um cifrão e a ordem em que ela aparece na expressão. Então o primeiro parênteses seria o $1, o segundo o $2 e assim por diante.</p>
<p>Agora é só montar a função no Select.<br />
Ficando assim.</p>
<pre class="brush: sql; title: ; notranslate">
Select dbo.RegexReplace('161364.70853',
'^([0-9]{3}).?([0-9]{3}).?([0-9]{3})-?([0-9]{2})',
'$1.$2.$3-$4')
</pre>
<p>Entre as variáveis você pode colocar os caracteres para exibição como pontos, hífens, underline e qualquer coisa que queira.</p>
<p>Reparem que coloquei o CPF no primeiro parâmetro da função formatado de maneira errada propositalmente.<br />
Experimente modificar essa formatação, deixar só os números, só os pontos, enfim&#8230;<br />
Modifique também a exibição da formatação para ver o funcionamento.</p>
<p>É isso galera.</p>
<p>Agradeço ao meu grande brother Anderson Orso por me mostrar possível aprender expressões regulares facilmente.</p>
<p>Espero que tenham curtido.<br />
Qualquer dúvida só mandar.</p>
<p>Abraços!!</p>
<p><strong>UPDATE &#8211; 22 de maio</strong></p>
<p>Fala pessoal,<br />
não me dei conta ontem que esqueci um detalhe importantíssimo de todo essa papo aqui.</p>
<p>O RegexReplace e outras funções similares não são nativas no SQL Server ao contrário de outros bancos de dados. Para ter isso disponível nos seus Selects, Updates e etc, você deve compilar um assembly .NET e subir para o banco.</p>
<p>O código para compilar você pode <a title="User Defined Functions" href="http://flaviosilveira.com/wp-content/UserDefinedFunctions.cs.rar">baixar aqui</a>.<br />
Mais detalhes de como fazer e usar tudo isso você encontra <a href="http://justgeeks.blogspot.com/2008/08/adding-regular-expressions-regex-to-sql.html">nesse link</a>.</p>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/formatando-cpf-no-sql-com-expressoes-regulares-regexreplace/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

