<?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>Renan Lima &#187; Programação</title>
	<atom:link href="http://www.renanlima.com/blog/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.renanlima.com/blog</link>
	<description>Um pouco do que gosto, faço e crio</description>
	<lastBuildDate>Fri, 30 Apr 2010 14:41:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Embed válido pelo W3C</title>
		<link>http://www.renanlima.com/blog/embed-valido-pelo-w3c/</link>
		<comments>http://www.renanlima.com/blog/embed-valido-pelo-w3c/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 12:57:17 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[embed valid]]></category>
		<category><![CDATA[embed válido]]></category>
		<category><![CDATA[w3c]]></category>
		<category><![CDATA[webstandard]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=1244</guid>
		<description><![CDATA[Hoje trabalhando em um projeto normal, tive que incluir um pequeno vídeo em flash e como estou meio que neurótico com SEO, já que estou estudando diariamente, veja minha estante. Enfim, segue abaixo a maneira correta e incorreta de se fazer. Invalido &#60;object classid=&#8221;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&#8243; width=&#8221;950&#8243; height=&#8221;224&#8243; codebase=&#8221;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&#8243;&#62;&#60;param name=&#8221;quality&#8221; value=&#8221;high&#8221; /&#62;&#60;param name=&#8221;src&#8221; value=&#8221;http://www.site.com.br/img/site/video.swf&#8221; /&#62;&#60;embed type=&#8221;application/x-shockwave-flash&#8221; width=&#8221;950&#8243; [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje trabalhando em um projeto normal, tive que incluir um pequeno vídeo em flash e como estou meio que neurótico com SEO, já que estou estudando diariamente, <a href="http://skoob.com.br/meus_livros/estante/8/2/page:1">veja minha estante</a>.</p>
<p>Enfim, segue abaixo a maneira correta e incorreta de se fazer.</p>
<p><span style="color: #ff0000;"><strong>Invalido</strong></span></p>
<blockquote><p>&lt;object classid=&#8221;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&#8243; width=&#8221;950&#8243; height=&#8221;224&#8243; codebase=&#8221;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&#8243;&gt;&lt;param name=&#8221;quality&#8221; value=&#8221;high&#8221; /&gt;&lt;param name=&#8221;src&#8221; value=&#8221;http://www.site.com.br/img/site/video.swf&#8221; /&gt;&lt;embed type=&#8221;application/x-shockwave-flash&#8221; width=&#8221;950&#8243; height=&#8221;224&#8243; src=&#8221;http://www.site.com.br/img/site/video.swf&#8221; quality=&#8221;high&#8221;&gt;&lt;/embed&gt;&lt;/object&gt;</p></blockquote>
<p><span style="color: #99cc00;"><strong>Válido</strong></span></p>
<blockquote><p>&lt;object type=&#8221;application/x-shockwave-flash&#8221; width=&#8221;950&#8243; height=&#8221;224&#8243; data=&#8221;http://www.site.com.br/img/site/site.swf&#8221;&gt;<br />
&lt;param name=&#8221;movie&#8221; value=&#8221;http://www.site.com.br/img/site/site.swf&#8221; /&gt;<br />
Instale o Flash Player para ver este vídeo. &lt;a href=&#8221;http://get.adobe.com/br/flashplayer/&#8221; title=&#8221;Instalar player de flash&#8221; style=&#8221;font-weight:bold;&#8221;&gt; Cliquei aqui para instalar &lt;/a&gt;<br />
&lt;/object&gt;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/embed-valido-pelo-w3c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>8 aplicações incríveis usando o processing.js</title>
		<link>http://www.renanlima.com/blog/8-aplicacoes-incriveis-usando-processin/</link>
		<comments>http://www.renanlima.com/blog/8-aplicacoes-incriveis-usando-processin/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 21:05:19 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=1079</guid>
		<description><![CDATA[Aplicações que mostram o potencial incrível. Obs: Abra as aplicações no firefox, pois o IE ainda não compreende. TWITCH É um pequeno e simples game onde você vai guiando uma bolinha até seu destino. Há diversos modos de jogo. Ball Droppings Este é meio viciante, já ví algo parecido pro iPhone. As bolinhas vão caindo [...]]]></description>
			<content:encoded><![CDATA[<p>Aplicações que mostram o potencial incrível.</p>
<p><em><strong>Obs:</strong> Abra as aplicações no firefox, pois o IE ainda não compreende. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
</em></p>
<div id="exhibitions">
<div><span><a href="http://reas.com/twitch/"><img src="http://processingjs.org/content/exhibition/twitch.gif" alt="Twitch" /></a> <a href="http://reas.com/twitch/">TWITCH</a> É um pequeno e simples game</span> onde você vai guiando uma bolinha até seu destino. Há diversos modos de jogo.</div>
<div>
<p><span id="more-1079"></span></div>
<div><span><a href="http://balldroppings.com/js/"><img src="http://processingjs.org/content/exhibition/balldroppings.gif" alt="Ball Droppings" /></a> <a href="http://balldroppings.com/js/">Ball Droppings</a> Este é meio viciante</span>, já ví algo parecido pro iPhone. As bolinhas vão caindo e você vai desenhando linhas e assim cercando as bolinhas. Você pode guiar as bolinhas como quiser, além de poder alterar a gravidade.</div>
<div>
<p><!--more--></div>
<div>
<div><a href="http://www.mattryall.net/blog/2008/11/wiki-visualisations-with-javascript"><img src="http://processingjs.org/content/exhibition/wikivisualizations.gif" alt="Wiki Visualizations" /></a> <a href="http://www.mattryall.net/blog/2008/11/wiki-visualisations-with-javascript">Wiki Visalizations</a> Simplesmente incrível.</div>
<p><!--more--></div>
<div>
<div><a href="http://www.tree-axis.com/shop/"><img src="http://processingjs.org/content/exhibition/shop.gif" alt="Shop" /></a> <a href="http://www.tree-axis.com/shop/">Shop</a> Bacana e pesado de mais</div>
<p>.<!--more--></div>
<div>
<div><a href="http://hyper-metrix.com/processing-js/docs/?page=A%20mouse-driven%20graphic%20equalizer"><img src="http://processingjs.org/content/exhibition/mousedrivengraphicequalizer.gif" alt="Graphic Equalizer" /></a> <a href="http://hyper-metrix.com/processing-js/docs/?page=A%20mouse-driven%20graphic%20equalizer">Mouse Equalizer</a> Bem interessante a captura de movimentos do mouse.</div>
</div>
<div>
<p><!--more--></div>
<div>
<div><a href="http://willarson.com/code/processing/ptd.html"><img src="http://processingjs.org/content/exhibition/towerofdefense.gif" alt="Tower of Defense" /></a> <a href="http://willarson.com/code/processing/ptd.html">Tower of Defence</a> Um clássico do genero</div>
<p>.<!--more--></div>
<div><span><a href="http://grad.icmc.usp.br/%7Efelipc/processing_js/chaostheory.htm"><img src="http://processingjs.org/content/exhibition/chaostheory.gif" alt="Chaos Theory" /></a> <a href="http://grad.icmc.usp.br/%7Efelipc/processing_js/chaostheory.htm">Chaos Theory</a> Rápido, mas com efeitos incríveis.</span></div>
<p><!--more--></div>
<div><span><a href="http://hyper-metrix.com/processing-js/docs/?page=UI%20Dial%20with%20Snaps"><img src="http://processingjs.org/content/exhibition/uidial.gif" alt="Sparklines" /></a> <a href="http://hyper-metrix.com/processing-js/docs/?page=UI%20Dial%20with%20Snaps">UI Dial with AJAX</a> </span>Esta interface de marcação tem pontos de encaixe magnético.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/8-aplicacoes-incriveis-usando-processin/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Paleta de cores &#8211; Javascript</title>
		<link>http://www.renanlima.com/blog/paleta-de-cores-javascript/</link>
		<comments>http://www.renanlima.com/blog/paleta-de-cores-javascript/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 21:03:26 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[paleta de cores]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=561</guid>
		<description><![CDATA[Hoje estive procurando por um script desses e ralei um pouquinho, tem muita coisa capenga disponível na web, mas esse é de primeira. Atual, simples de usar e acessível em todos os navegadores (decentes). Site: http://jscolor.com]]></description>
			<content:encoded><![CDATA[<p>Hoje estive procurando por um script desses e ralei um pouquinho, tem muita coisa capenga disponível na web, mas esse é de primeira. Atual, simples de usar e acessível em todos os navegadores (decentes).</p>
<p style="padding-left: 30px;">Site: <a title="jscolor.com" href="http://jscolor.com" target="_blank">http://jscolor.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/paleta-de-cores-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Trabalhando como root no Shell via php</title>
		<link>http://www.renanlima.com/blog/trabalhando-como-root-no-shell-via-php/</link>
		<comments>http://www.renanlima.com/blog/trabalhando-como-root-no-shell-via-php/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 03:22:26 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[script shell]]></category>
		<category><![CDATA[shell com php]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=554</guid>
		<description><![CDATA[Recentemente precisei trabalhar com comandos Shell para controlar uma rotina no Cent&#8217;Os instalado no servidor da empresa, apanhei um pouco até conseguir executar com sucesso os procedimentos, mas depois que consegui fiquei rindo de mim mesmo. Vamos lá! Se você rodar algo assim por exemplo, vai funcionar perfeitamente: &#60;?php shell_exec("mkdir /var/spool/mail/exemplo"); ?&#62; No código acima [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-555" title="shell" src="http://www.renanlima.com/blog/wp-content/uploads/2009/02/shell.jpg" alt="shell" width="292" height="259" /></p>
<p>Recentemente precisei trabalhar com comandos Shell para controlar uma rotina no Cent&#8217;Os instalado no servidor da empresa, apanhei um pouco até conseguir executar com sucesso os procedimentos, mas depois que consegui fiquei rindo de mim mesmo.</p>
<p>Vamos lá!<br />
Se você rodar algo assim por exemplo, vai funcionar perfeitamente:</p>
<p><code>&lt;?php<br />
shell_exec("mkdir /var/spool/mail/exemplo");<br />
?&gt;<br />
</code><br />
No código acima estou criando uma pasta dentro de /var/spool/mail/<br />
Agora se você executar um comando tipo este abaixo, irá precisar estar como super-usuario, caso contrário o script não irá funcionar adequadamente:<br />
<code><br />
shell_exec("chown mail.mail /var/spool/mail/exemplo");<br />
</code><br />
Para resolver este problema de forma simples, você pode colocar apenas um sudo na frente da instrução, veja abaixo:</p>
<p><code>shell_exec("<span style="color: #ff0000;">sudo</span> chown mail.mail /var/spool/mail/exemplo");</code></p>
<p style="padding-left: 30px;"><strong>Observação: </strong>A função <a href="http://www.php.net/manual/pt_BR/function.shell-exec.php" target="_blank">shell_exec</a> do php não trabalha como super-usuario por padrão, cheguei a ver algumas pessoas falarem isso nos foruns, mas não é verdade.<strong></strong></p>
<p style="padding-left: 30px;"><strong>Observação2: </strong>Esta não é a solução para todos os problemas parecidos, há diversas formas de resolver isto, essa foi uma forma que funcionou para mim, mas talvez não funcione para o seu caso, mas tenho certeza que poderá tirar proveito desta experiência.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/trabalhando-como-root-no-shell-via-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Operação anulada!</title>
		<link>http://www.renanlima.com/blog/operacao-anulada/</link>
		<comments>http://www.renanlima.com/blog/operacao-anulada/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 04:28:41 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Jquery]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[ie8]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=549</guid>
		<description><![CDATA[Pois é, as vezes o Internet Explorer me dá medo. Falo sério. Certa vez  percebi este erro no site de um cliente da empresa, pensei: É simples, e realmente é, agora. Esse erro só acontece no internet explorer. Isso ocorre quando um código javascript modifica o Dom antes do término da página. Pergunta: O IE [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-550" title="operacao-anulada" src="http://www.renanlima.com/blog/wp-content/uploads/2009/02/operacao-anulada.jpg" alt="operacao-anulada" width="518" height="151" /></p>
<p>Pois é, as vezes o Internet Explorer me dá medo. Falo sério.</p>
<p>Certa vez  percebi este erro no site de um cliente da empresa, pensei: É simples, e realmente é, agora. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Esse erro só acontece no internet explorer. Isso ocorre quando um código javascript modifica o Dom antes do término da página.</p>
<p style="padding-left: 30px;">Pergunta: <em>O IE não poderia ignorar isso e deixar rolar a página? Tem mesmo que mostrar este erro e travar a pagina?</em></p>
<p>Enfim, encontrei duas soluções.</p>
<ol>
<li><strong>Caso use jquery</strong>, acerte a forma que você escreve script em jquery. Passe a colocar toda instrução dentro do Ready, veja um exemplo:
<pre><span style="color: #333399;">$(document).ready(function()
{
	// Seu código aqui
});</span></pre>
</li>
<li><strong>Este foi o meu caso.</strong><br />
Em um portal que desenvolvi, precisei utilizar mais de uma biblioteca, na verdade 3. Então para saber qual estava dando este problema, fui comentando cada linha até descobrir a biblioteca que estava dando pau.</p>
<p>Descobri a biblioteca que estava conflitando, mas o site não poderia ficar sem esta biblioteca, então tive que fazer uma pequena adaptação.</p>
<p>Como a biblioteca rebelde estava conflitando, criei um iframe e joguei tudo dela lá dentro, separando o comportamento da biblioteca rebelda das outras, assim, fazendo ambas funcionarem, cada uma no seu espaço, mas para o usuario final, trabalhando harmoniosamente.</li>
</ol>
<p>Julgo importante essas dicas porque perdi algumas horas em pesquisas e testes.<br />
Divirta-se!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/operacao-anulada/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Framework de CSS? Sim, acredite!</title>
		<link>http://www.renanlima.com/blog/framework-de-css-sim-acredite/</link>
		<comments>http://www.renanlima.com/blog/framework-de-css-sim-acredite/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 01:40:25 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[ProgramaÃ§Ã£o]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=407</guid>
		<description><![CDATA[Interessante a idéia de framework de CSS. O curioso que eu mesmo já montei um &#8220;framework&#8217;zinho&#8221; pessoal, no qual uso na maioria dos trabalhos e me poupa bastante tempo. Vou testar esse aí, parece ser bem completo. Link: www.bluetrip.org]]></description>
			<content:encoded><![CDATA[<p>Interessante a idéia de framework de CSS. O curioso que eu mesmo já montei um &#8220;framework&#8217;zinho&#8221; pessoal, no qual uso na maioria dos trabalhos e me poupa bastante tempo. Vou testar esse aí, parece ser bem completo.</p>
<p>Link: <a href="http://bluetrip.org/" target="_blank">www.bluetrip.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/framework-de-css-sim-acredite/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Divs com cantos aredondados</title>
		<link>http://www.renanlima.com/blog/divs-com-cantos-aredondados/</link>
		<comments>http://www.renanlima.com/blog/divs-com-cantos-aredondados/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 01:20:55 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Jquery]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=403</guid>
		<description><![CDATA[Descobri uma maneira simples de tornar os cantos das divs arredondados. Com este plugin para o Jquery você consegue isso facilmente, veja no link abaixo. http://www.atblabs.com/jquery.corners.html Abra o codigo fonte, pegue o JS incluido e siga as instruções do site. Muito simples.]]></description>
			<content:encoded><![CDATA[<p>Descobri uma maneira simples de tornar os cantos das divs arredondados. Com este plugin para o Jquery você consegue isso facilmente, veja no link abaixo.</p>
<p style="padding-left: 30px;"><a href="http://www.atblabs.com/jquery.corners.html" target="_blank">http://www.atblabs.com/jquery.corners.html</a></p>
<p>Abra o codigo fonte, pegue o JS incluido e siga as instruções do site. Muito simples.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/divs-com-cantos-aredondados/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Plugins Jquery</title>
		<link>http://www.renanlima.com/blog/plugins-jquery/</link>
		<comments>http://www.renanlima.com/blog/plugins-jquery/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 12:14:41 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Jquery]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=300</guid>
		<description><![CDATA[Alguem aí conhece o Jquery? Para quem não conhece, Jquery é um framework que nos fornece uma gama muito grande de ferramentas, você pode conhecer melhor neste link: www.jquery.com Vou deixar para vocês que tenho certeza que irá ser uma mão na roda em seu trabalho, tem de tudo. plugins.jquery.com Para usar estes plugins, primeiro [...]]]></description>
			<content:encoded><![CDATA[<p>Alguem aí conhece o Jquery? <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Para quem não conhece, Jquery é um framework que nos fornece uma gama muito grande de ferramentas, você pode conhecer melhor neste link: <a href="http://www.jquery.com" target="_blank">www.jquery.com</a></p>
<p>Vou deixar para vocês que tenho certeza que irá ser uma mão na roda em seu trabalho, tem de tudo.</p>
<p><a href="http://plugins.jquery.com" target="_blank">plugins.jquery.com</a></p>
<p>Para usar estes plugins, primeiro você deve <a href="http://http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.min.js&amp;downloadBtn=" target="_blank">baixar o script jquery</a>.</p>
<p>Logo mais estarei postando tutoriais de como usar os plugins.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/plugins-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programador ninja. Ninja?</title>
		<link>http://www.renanlima.com/blog/programador-ninja/</link>
		<comments>http://www.renanlima.com/blog/programador-ninja/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 17:07:27 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[programador ninja]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=248</guid>
		<description><![CDATA[A filosofia de vida dos ninjas era chamada de Ninpō (Ninjutsu), envolvendo a adaptação, a liberdade e a perseverança férrea como princípios basilares.(Wikipédia) E então um amigo recebeu o seguinte email: &#8220;Procuramos um desenvolvedor ninja (experiente e versátil) voltado para o desenvolvimento de aplicativos desktop para a plataforma windows. A aplicação é desenvolvida em Powerbuilder [...]]]></description>
			<content:encoded><![CDATA[<p>A filosofia de vida dos ninjas era chamada de Ninpō (Ninjutsu), envolvendo a <span style="text-decoration: underline;">adaptação</span>, a <span style="text-decoration: underline;">liberdade</span> e a <span style="text-decoration: underline;">perseverança</span> férrea como princípios basilares.(Wikipédia)</p>
<p class="MsoNormal">E então um amigo recebeu o seguinte email:</p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="color: #808080;">&#8220;Procuramos um desenvolvedor ninja (experiente e versátil) voltado para o desenvolvimento de aplicativos desktop para a plataforma windows. A aplicação é desenvolvida em Powerbuilder 10 e 11, mas encorajamos o contato de ninjas que dominem outras tecnologias de desenvolvimento de aplicações desktop. Acreditamos que um verdadeiro ninja poderá estudar a plataforma Powerbuilder e dominá-la com velocidade e maestria &#8220;</span></p>
<p class="MsoNormal">Legal,<span> </span>powerbuilder&#8230; hã?</p>
<p class="MsoNormal">
<p class="MsoNormal">Um programador ninja não é conhecido como um programador php, nem programador Java, é simplesmente um programador ninja, ou um cara que codifica, maneja códigos.</p>
<p class="MsoNormal">Um programador ninja se adapta ao seu ambiente, portanto se um ninja trabalha com php e depois vai para uma empresa que requer Java ee, o ninja, versátil e experiente, aprende com seu novo ambiente e se torna brilhante naquilo.</p>
<p class="MsoNormal">É uma tendência se formando, onde o programador quebra barreiras, cria liberdade profissional e expande sua experiência técnica.</p>
<p class="MsoNormal">Então percebemos que mão precisamos ficar presos à uma ferramenta ou linguagem de programação. Hoje, empresas como Google não procuram programadores php e sim programadores ninjas brilhantes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/programador-ninja/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Como mostrar erros relevantes em um sistema</title>
		<link>http://www.renanlima.com/blog/como-mostrar-erros-relevantes-em-um-sistema/</link>
		<comments>http://www.renanlima.com/blog/como-mostrar-erros-relevantes-em-um-sistema/#comments</comments>
		<pubDate>Mon, 05 May 2008 19:11:55 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[programação saudável]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=231</guid>
		<description><![CDATA[Erro não é só mostrar uma mensagem informando que o usuário fez algo errado, devemos informar o que ele fez de errado e o que ele deverá fazer para solucionar o problema. Isso se chama programação saudável e é isso que veremos neste post. Certa vez eu estava usando uma aplicação e ao submeter um [...]]]></description>
			<content:encoded><![CDATA[<p><em>Erro não é só mostrar uma mensagem informando que o usuário fez algo errado, devemos informar o que ele fez de errado e o que ele deverá fazer para solucionar o problema. Isso se chama programação saudável e é isso que veremos neste post.<br />
</em></p>
<p>Certa vez eu estava usando uma aplicação e ao submeter um formulário apareceu uma mensagem informando o seguinte: ERRO! Cadastro inválido!</p>
<p>De cara a máquina grita comigo, acredito que esta mensagem tenha sido feita para me intimidar, não sei pra que tanta exclamação. Já me sentir inferior sendo chamado atenção por uma máquina, nada pessoal, mas e agora, o que tenho que fazer para solucionar o problema?</p>
<p>Perceberam quantas dúvidas? A mensagem de erro não me informou nada, apenas disse que eu estava errado, e gritando. rs Esta não é uma programação saudável.</p>
<p>Outro caso é quando nos deparamos com o <em>ERRO 00359</em>, ou ainda <em>ERRO B15647</em>.<br />
Neste caso até faz sentido, não para o usuário, mas sim para o programador. As vezes existe um sistema gigantesco que segue uma seqüência hierárquica de erros e isso facilita os desenvolvedores a identificar o problema. Mas mesmo assim, o usuário continua sem saber o porque do erro.</p>
<p>Bem, com base em minha humilde experiência como desenvolvedor web, sigo um modelo simples para orientar o usuário durante o erro.</p>
<p><strong>Modelo de erro</strong></p>
<p style="padding-left: 30px;">- Informe exatamente o erro acontecido, não mostre a menos que esta informação seja restrita, ou seja, uma informação de segurança.</p>
<p style="padding-left: 30px;">- Informe o usuário o que ele deve fazer para se livrar deste erro.</p>
<p>Vamos a um exemplo prático. Imagine que um usuário está fazendo um cadastro com 15 campos. O usuário esquece de uma informação obrigatória, nesta suposição será o campo <strong>País</strong>. O que devemos mostrar ao usuário?</p>
<p><strong>Resposta</strong>: <em>Você não informou o campo <strong>PAÍS</strong>. Este campo é obrigatório, preencha-o para continuar seu cadastro.</em></p>
<p>Para tornar a mensagem informal, podemos fazer o seguinte:</p>
<p><strong>Resposta</strong>: <em>Ops! Você esqueceu de informar seu <strong>PAÍS</strong>. Para contornar este problema informa seu <strong>país</strong>.</em></p>
<p>Observe que eu dei ênfase no campo de erro, ou seja, dei um destaque neste caso na palavra <strong>PAÍS</strong>, para o usuário ver logo de inicio onde ocorreu o problema. Isso sim é uma programação saudável.</p>
<p>Outra coisa interessante é você não culpar o usuário. Se ele não preencher um campo, diga-o que esqueceu ou de alguma outra forma, mas não o culpe. O usuário não se sente bem com uma máquina culpando ele. Eu não gostaria.</p>
<p>São coisas simples que realmente fazem a diferença. Vale a pena você usar alguns segundos a mais elaborando uma boa mensagem de erro, além do mais, depois que você acostumar com isso, se tornará um habito, um hábito saudável, uma programação saudável, tanto para você quanto para o usuário.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/como-mostrar-erros-relevantes-em-um-sistema/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cakephp e seus acumulos de cache. SOLUÇÃO!</title>
		<link>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-solucao/</link>
		<comments>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-solucao/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 19:20:04 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[beforeSave]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/2008/03/07/cakephp-e-seus-acumulos-de-cache-solucao/</guid>
		<description><![CDATA[Lembra do pog que usei para resolver uma situação no cake? Se não lembra veja aqui: Bem galera, descobri a solução! Não contente em usar o POG resolvi pesquisar e encontrei um recurso que o cake disponibiliza chamado beforeSave. O beforeSave faz nada mais que executar uma instrução antes de salvar um dado no banco. [...]]]></description>
			<content:encoded><![CDATA[<p>Lembra do pog que usei para resolver uma situação no cake? Se não lembra <a href="http://www.renanlima.com/blog/2008/03/06/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/" target="_blank">veja aqui</a>:</p>
<p>Bem galera, descobri a solução!</p>
<p>Não contente em usar o POG resolvi pesquisar e encontrei um recurso que o cake disponibiliza chamado beforeSave.</p>
<p>O beforeSave faz nada mais que executar uma instrução antes de salvar um dado no banco. Assim como ele, tem o afterSave, beforeFind e afterFind. O after tem o efeito oposto do before.</p>
<p>É muito simples de usar, veja os códigos abaixo:</p>
<p><strong>Sem o before:</strong></p>
<blockquote><p> $conditions    = array(&#8216;mes&#8217;=&gt;$mes,&#8217;ano&#8217;=&gt;$ano);<br />
$this-&gt;CoorporativoLigacoes-&gt;find($conditions);<br />
&#8230;<br />
&#8230;<br />
$this-&gt;CoorporativoLigacoes-&gt;save($this-&gt;data());</p></blockquote>
<p>Isso resultava em um erro, pois o resultado da consulta sempre será o mesmo, o ultimo dado cadastrado. Isso porque o cake salva no banco antes de fazer a consulta, ou melhor, ele executa as duas instruções ao mesmo tempo, mas o save é mais rápido.</p>
<p><strong>Agora veja a solução usando o beforeSave</strong></p>
<blockquote><p> function beforeSave()<br />
{<br />
$conditions    = array(&#8216;mes&#8217;=&gt;$mes,&#8217;ano&#8217;=&gt;$ano);<br />
$result = $this-&gt;CoorporativoLigacoes-&gt;find($conditions);<br />
return $result;<br />
}</p>
<p>function index()<br />
{<br />
$result = $this-&gt;beforeSave();  // este será executado primeiro<br />
$this-&gt;CoorporativoLigacoes-&gt;save($this-&gt;data()); // Este só será executado depois do beforeSave<br />
}</p></blockquote>
<p>O mesmo uso deste você pode aplicar no afterSave, beforeFind, afterFind, etc.</p>
<p>Qualquer dúvida, só postar aqui.</p>
<p><em><u>PS: Nada de POG.</u></em> <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-solucao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cakephp e seus acúmulos de cache. Problemas</title>
		<link>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/</link>
		<comments>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 22:57:38 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[cache]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/2008/03/06/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/</guid>
		<description><![CDATA[Encontrei a solução deste problema e postei no blog, veja aqui. Cakephp e seus acúmulos de cache. Algo a ser melhorado. A partir de hoje vou começar a falar da minha experiência com o CakePHP, para os íntimos somente Cake. Tentarei passar a você o máximo de dicas. Hoje perdi algumas horas tentando resolver uma [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><em>Encontrei a solução deste problema e postei no blog, <a href="http://www.renanlima.com/blog/2008/03/07/cakephp-e-seus-acumulos-de-cache-solucao/" target="_blank">veja aqui</a>.</em></p>
<p>Cakephp e seus acúmulos de cache.  <strike>Algo a ser melhorado. </strike></p>
<p>A partir de hoje vou começar a falar da minha experiência com o <a href="http://pt.wikipedia.org/wiki/Cakephp" target="_blank">CakePHP</a>, para os íntimos somente Cake. Tentarei passar a você o máximo de dicas. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hoje perdi algumas horas tentando resolver uma questão no Cake. Tá rindo? Foi sinistro.</p>
<p>Estava precisando realizar as seguintes instruções dentro de um loop:</p>
<blockquote><p>- Verificar se o dado existe no banco<br />
- Se não existir, grava o dado no banco</p></blockquote>
<p>Bem, é uma coisa bem simples dentro de uma aplicação meio complexa, mas enfim, acontece que o cake armazena os dados buscados no banco em cache, isso melhora a performance do processo mas as vezes atrapalha.</p>
<p>Com o cash abastecido, mesmo que tivesse dado preenchido no banco, o cake não o encontrava, pois usava o cache do Find anterior e não me retornava nada.</p>
<p>Tentei usar o $cacheSources=false, getInsertId, execute, mas por incrível que pareça não funcionou.</p>
<p>Depois de algumas horas de tentativas resolvi usar uma espécie de <a href="http://desciclo.pedia.ws/wiki/POG" target="_blank">POG</a>. Eu não queria, mas pog sempre resolve.:)</p>
<p>Então eu coloquei a query &#8211; <em>como diz um amigo aqui do trabalho</em> – na mão. E lá fui eu “mysql_query(select &#8230;&#8230;&#8230;.);”.</p>
<p>Ual! Foi impressionante, mas funcionou. Isso mesmo, com o POG.</p>
<p>Depois ainda fiquei pesquisando o porque disso, será que é um bug do cake, eu não acredito, eu é que não devo estar sabendo usar isso adequadamente.</p>
<p>Bem, até agora eu não sei, se você souber, gostaria de saber. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Perdi algumas horas mas adquiri conhecimento, isso vale mais.</p>
<p>Uma vez um amigo aqui do trabalho consegui resolver o mesmo problema simplesmente com o cacheSources, mas hoje, não foi o caso.</p>
<p>Até a próxima!</p>
<p align="center"><em>Encontrei a solução deste problema e postei no blog, <a href="http://www.renanlima.com/blog/2008/03/07/cakephp-e-seus-acumulos-de-cache-solucao/" target="_blank">veja aqui</a>.</em></p>
<p align="center">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Todas as versões do Internet Explorer no seu PC</title>
		<link>http://www.renanlima.com/blog/todas-as-versoes-do-internet-explorer-no-seu-pc/</link>
		<comments>http://www.renanlima.com/blog/todas-as-versoes-do-internet-explorer-no-seu-pc/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 15:53:03 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[IE3]]></category>
		<category><![CDATA[IE4]]></category>
		<category><![CDATA[IE5]]></category>
		<category><![CDATA[simulador de IE6]]></category>
		<category><![CDATA[teste com navegadores]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/2008/01/22/todas-as-versoes-do-internet-explorar-no-seu-pc/</guid>
		<description><![CDATA[Este software está obsoleto, existe um melhor, clique aqui para ser redirecionado ao post. Qual desenvolvedor nunca teve problemas com os navegadores? Que atire a primeira pedra! Muitas vezes (sempre) precisamos testar um site em diversos navegadores, e isso não tem problema algum, porem, se você tiver instalado o IE7 não dá para instalar o [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><span style="color: #339966;"><a href="http://www.renanlima.com/blog/2009/10/01/antigas-versoes-do-internet-explorer-no-seu-pc/" target="_blank"><em>Este software está obsoleto, existe um melhor, clique aqui para ser redirecionado</em> ao post.</a></span></p>
<p>Qual desenvolvedor nunca teve problemas com os navegadores?<br />
Que atire a primeira pedra! <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Muitas vezes (<em>sempre</em>) precisamos testar um site em diversos navegadores, e isso não tem problema algum, porem, se você tiver instalado o IE7 não dá para instalar o IE6 e é aí que está o verdadeiro problema.</p>
<p>O IE7 está parecido (nem tanto) com o firefox, então nosso problema continua sendo o IE6, pois este é o navegador mais usado no mundo e precisamos adaptar nossos sites.<br />
Uma solução seria desinstalar o IE7 e usar somente o IE6, mas aí quando precisar testar o IE7 novamente, como fica?</p>
<p>Pensando nisso a empresa <a title="Tredosoft" href="http://tredosoft.com/" target="_blank">TredoSoft</a> desenvolveu um software chamado <strong>IE multiple</strong>. É exatamente como o nome diz, o programa instala em seu computador as versões <strong>3</strong>, <strong>4.1</strong>, <strong>5.1</strong>, <strong>5.5 </strong>e <strong>6</strong> no seu sistema, mas para isso é preciso ter instalado o IE7.</p>
<p>Eu instalei na empresa onde trabalho e está correndo tudo certo, em minha casa também, este software é maior mão na roda.</p>
<p>Alguns relatam que há bugs no software, mas a empresa garante que já foram solucionados.</p>
<blockquote><p>Veja na pagina oficial do site e baixe o programa: <a title="Multiple IE" href="http://tredosoft.com/Multiple_IE" target="_blank">http://tredosoft.com/Multiple_IE</a></p></blockquote>
<blockquote><p>Baixe o programa direto neste link (<em>Recomendo que leia a pagina do link a cima</em> antes de baixar): <a title="Download" href="http://tredosoft.com/files/multi-ie/multiple-ie-setup.exe" target="_blank">http://tredosoft.com/files/multi-ie/multiple-ie-setup.exe</a></p></blockquote>
<p align="center">
<p align="center"><span style="color: #339966;"><a href="http://www.renanlima.com/blog/2009/10/01/antigas-versoes-do-internet-explorer-no-seu-pc/" target="_blank"><em>Este software está obsoleto, existe um melhor, clique aqui para ser redirecionado</em> ao post.</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/todas-as-versoes-do-internet-explorer-no-seu-pc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Algoritmo de um gerador de CPF</title>
		<link>http://www.renanlima.com/blog/algoritmo-de-um-gerador-de-cpf/</link>
		<comments>http://www.renanlima.com/blog/algoritmo-de-um-gerador-de-cpf/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 16:21:15 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[algoritmo de cpf]]></category>
		<category><![CDATA[gerador de cpf]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/2007/11/09/algoritmo-de-um-gerador-de-cpf/</guid>
		<description><![CDATA[Para exemplificar o processo vamos gerar um CPF válido, calculando os dígitos verificadores de um número hipotético, 111.444.777-XX. Calculando o Primeiro Dígito Verificador O primeiro dígito verificador do CPF é calculado utilizando-se o seguinte algoritmo. 1) Distribua os 9 primeiros dígitos em um quadro colocando os pesos 10, 9, 8, 7, 6, 5, 4, 3, [...]]]></description>
			<content:encoded><![CDATA[<p>Para exemplificar o processo vamos gerar um CPF válido, calculando os    dígitos verificadores de um número hipotético, 111.444.777-XX.</p>
<p><strong><em>Calculando o Primeiro Dígito Verificador</em></strong></p>
<p>O primeiro dígito verificador do CPF é calculado utilizando-se o seguinte    algoritmo.</p>
<p><strong>1)</strong> Distribua os 9 primeiros dígitos em um quadro colocando os pesos    10, 9, 8, 7, 6, 5, 4, 3, 2 abaixo da esquerda para a direita, conforme    representação abaixo:</p>
<p align="center">
<table border="1" cellpadding="0" cellspacing="1" width="80%">
<tr>
<td width="11%">
<p align="center">1</p>
</td>
<td width="11%">
<p align="center">1</p>
</td>
<td width="11%">
<p align="center">1</p>
</td>
<td width="11%">
<p align="center">4</p>
</td>
<td width="11%">
<p align="center">4</p>
</td>
<td width="11%">
<p align="center">4</p>
</td>
<td width="11%">
<p align="center">7</p>
</td>
<td width="11%">
<p align="center">7</p>
</td>
<td width="12%">
<p align="center">7</p>
</td>
</tr>
<tr>
<td width="11%">
<p align="center">10</p>
</td>
<td width="11%">
<p align="center">9</p>
</td>
<td width="11%">
<p align="center">8</p>
</td>
<td width="11%">
<p align="center">7</p>
</td>
<td width="11%">
<p align="center">6</p>
</td>
<td width="11%">
<p align="center">5</p>
</td>
<td width="11%">
<p align="center">4</p>
</td>
<td width="11%">
<p align="center">3</p>
</td>
<td width="12%">
<p align="center">2</p>
</td>
</tr>
</table>
<p><strong>2)</strong> Multiplique os valores de cada coluna:
</p>
<p align="center">&nbsp;</p>
<p align="center">
<table border="1" cellpadding="0" cellspacing="1" width="80%">
<tr>
<td width="11%">
<p align="center">1</p>
</td>
<td width="11%">
<p align="center">1</p>
</td>
<td width="11%">
<p align="center">1</p>
</td>
<td width="11%">
<p align="center">4</p>
</td>
<td width="11%">
<p align="center">4</p>
</td>
<td width="11%">
<p align="center">4</p>
</td>
<td width="11%">
<p align="center">7</p>
</td>
<td width="11%">
<p align="center">7</p>
</td>
<td width="12%">
<p align="center">7</p>
</td>
</tr>
<tr>
<td width="11%">
<p align="center">10</p>
</td>
<td width="11%">
<p align="center">9</p>
</td>
<td width="11%">
<p align="center">8</p>
</td>
<td width="11%">
<p align="center">7</p>
</td>
<td width="11%">
<p align="center">6</p>
</td>
<td width="11%">
<p align="center">5</p>
</td>
<td width="11%">
<p align="center">4</p>
</td>
<td width="11%">
<p align="center">3</p>
</td>
<td width="12%">
<p align="center">2</p>
</td>
</tr>
<tr>
<td width="11%">
<p align="center">10</p>
</td>
<td width="11%">
<p align="center">9</p>
</td>
<td width="11%">
<p align="center">8</p>
</td>
<td width="11%">
<p align="center">28</p>
</td>
<td width="11%">
<p align="center">24</p>
</td>
<td width="11%">
<p align="center">20</p>
</td>
<td width="11%">
<p align="center">28</p>
</td>
<td width="11%">
<p align="center">21</p>
</td>
<td width="12%">
<p align="center">14</p>
</td>
</tr>
</table>
<p><strong>3)</strong> Calcule o somatório dos resultados (10+9+&#8230;+21+14) = 162</p>
<p><strong>4)</strong> O resultado obtido (162) será divido por 11. Considere como    quociente apenas o valor inteiro, o resto da divisão será responsável pelo    cálculo do primeiro dígito verificador.</p>
<p>Vamos acompanhar: 162 dividido por 11 obtemos 14 como quociente e 8 como    resto da divisão. Caso o resto da divisão seja menor que 2, o nosso primeiro    dígito verificador se torna 0 (zero), caso contrário subtrai-se o valor    obtido de 11, que é nosso caso. Sendo assim nosso dígito verificador é 11-8,    ou seja, 3 (três). Já temos portanto parte do CPF, confira: 111.444.777-<strong>3</strong>X.</p>
<p><strong><em>Calculando o Segundo Dígito Verificador</em></strong></p>
<p><strong>1)</strong> Para o cálculo do segundo dígito será usado o primeiro dígito    verificador já calculado. Montaremos uma tabela semelhante a anterior só que    desta vez usaremos na segunda linha os valores 11,10,9,8,7,6,5,4,3,2 já que    estamos incorporando mais um algarismo para esse cálculo. Veja:
</p>
<p align="center">&nbsp;</p>
<p align="center">
<table border="1" cellpadding="0" cellspacing="1" width="80%">
<tr>
<td width="10%">
<p align="center">1</p>
</td>
<td width="10%">
<p align="center">1</p>
</td>
<td width="10%">
<p align="center">1</p>
</td>
<td width="10%">
<p align="center">4</p>
</td>
<td width="10%">
<p align="center">4</p>
</td>
<td width="10%">
<p align="center">4</p>
</td>
<td width="10%">
<p align="center">7</p>
</td>
<td width="10%">
<p align="center">7</p>
</td>
<td width="10%">
<p align="center">7</p>
</td>
<td width="10%">
<p align="center">3</p>
</td>
</tr>
<tr>
<td width="10%">
<p align="center">11</p>
</td>
<td width="10%">
<p align="center">10</p>
</td>
<td width="10%">
<p align="center">9</p>
</td>
<td width="10%">
<p align="center">8</p>
</td>
<td width="10%">
<p align="center">7</p>
</td>
<td width="10%">
<p align="center">6</p>
</td>
<td width="10%">
<p align="center">5</p>
</td>
<td width="10%">
<p align="center">4</p>
</td>
<td width="10%">
<p align="center">3</p>
</td>
<td width="10%">
<p align="center">2</p>
</td>
</tr>
</table>
<p><strong>2)</strong> Na próxima etapa faremos como na situação do cálculo do primeiro    dígito verificador, multiplicaremos os valores de cada coluna e efetuaremos o    somatório dos resultados obtidos: (11+10+&#8230;+21+6) = 204.
</p>
<p align="center">&nbsp;</p>
<p align="center">
<table border="1" cellpadding="0" width="80%">
<tr>
<td width="10%">
<p align="center">1</p>
</td>
<td width="10%">
<p align="center">1</p>
</td>
<td width="10%">
<p align="center">1</p>
</td>
<td width="10%">
<p align="center">4</p>
</td>
<td width="10%">
<p align="center">4</p>
</td>
<td width="10%">
<p align="center">4</p>
</td>
<td width="10%">
<p align="center">7</p>
</td>
<td width="10%">
<p align="center">7</p>
</td>
<td width="10%">
<p align="center">7</p>
</td>
<td width="10%">
<p align="center">3</p>
</td>
</tr>
<tr>
<td width="10%">
<p align="center">11</p>
</td>
<td width="10%">
<p align="center">10</p>
</td>
<td width="10%">
<p align="center">9</p>
</td>
<td width="10%">
<p align="center">8</p>
</td>
<td width="10%">
<p align="center">7</p>
</td>
<td width="10%">
<p align="center">6</p>
</td>
<td width="10%">
<p align="center">5</p>
</td>
<td width="10%">
<p align="center">4</p>
</td>
<td width="10%">
<p align="center">3</p>
</td>
<td width="10%">
<p align="center">2</p>
</td>
</tr>
<tr>
<td width="10%">
<p align="center">11</p>
</td>
<td width="10%">
<p align="center">10</p>
</td>
<td width="10%">
<p align="center">9</p>
</td>
<td width="10%">
<p align="center">32</p>
</td>
<td width="10%">
<p align="center">28</p>
</td>
<td width="10%">
<p align="center">24</p>
</td>
<td width="10%">
<p align="center">35</p>
</td>
<td width="10%">
<p align="center">28</p>
</td>
<td width="10%">
<p align="center">21</p>
</td>
<td width="10%">
<p align="center">6</p>
</td>
</tr>
</table>
<p><strong>3)</strong> Realizamos novamente o cálculo do módulo 11. Dividimos o total    do somatório por 11 e consideramos o resto da divisão.</p>
<p>Vamos acompanhar: 204 dividido por 11 obtemos 18 como quociente e 6 como    resto da divisão.</p>
<p><strong>4)</strong> Caso o valor do resto da divisão seja menor que 2, esse valor    passa automaticamente a ser zero, caso contrário (como no nosso caso) é    necessário subtrair o valor obtido de 11 para se obter o dígito verificador.    Logo, 11-6= 5, que é o nosso segundo dígito verificador.</p>
<p>Neste caso chegamos ao final dos cálculos e descobrimos que os dígitos    verificadores do nosso CPF hipotético são os números <strong>3</strong> e <strong>5</strong>,    portanto o CPF ficaria assim: 111.444.777-35.</p>
<p>O gerador de CPF apresentado neste site funciona com base neste algoritmo.    A rotina de gerar CPF &#8216;s válidos, inicialmente sorteia 9 números. Calcula-se    o 1o dígito verificador e integra-se o mesmo aos 9 números iniciais.    Prossegue-se com o cálculo do segundo dígito verificador como ensinado. Ao    final, o criador de CPF emite um número de CPF válido.</p>
<p>Esta explicação pertence ao site <a href="http://www.geradorcpf.com/" title="gerador de CPF" target="_blank">Gerador de CPF</a>, onde por ele mesmo você pode gerar CPF para estudo.</p>
<p>Eu vou passar esse algoritmo para a linguagem PHP e posto em seguida aqui no blog. Acredito ser útil para muita gente.<br />
Até a próxima.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/algoritmo-de-um-gerador-de-cpf/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Iniciando em PHP &#8211; Instalando servidor e rodando scripts</title>
		<link>http://www.renanlima.com/blog/iniciando-em-php-instalando-servidor-e-rodando-scripts/</link>
		<comments>http://www.renanlima.com/blog/iniciando-em-php-instalando-servidor-e-rodando-scripts/#comments</comments>
		<pubDate>Mon, 29 Oct 2007 09:30:31 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[aprendendo php]]></category>
		<category><![CDATA[aprender php]]></category>
		<category><![CDATA[easyphp]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[script php]]></category>
		<category><![CDATA[servidor php]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/2007/10/29/iniciando-em-php-instalando-servidor-e-rodando-scripts/</guid>
		<description><![CDATA[Vamos estudar PHP do básico até o avançado, mas hoje, vamos nos limitar somente a instalação do servidor php, o que é suficiente para rodar arquivos PHP. Bom, primeiramente você precisa baixar o servidor. Na verdade é um software que simula um servidor em sua máquina, possibilitando que a mesma rode PHP. Download: http://sourceforge.net/project/showfiles.php?group_id=14045 Em [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">Vamos estudar PHP do básico até o avançado, mas hoje, vamos nos limitar somente a instalação do servidor php, o que é suficiente para rodar arquivos PHP.</p>
<p class="MsoNormal">Bom, primeiramente você precisa baixar o servidor. Na verdade é um software que simula um servidor em sua máquina, possibilitando que a mesma rode PHP.</p>
<p class="MsoNormal"><span lang="EN-US">Download: <span style="text-decoration: underline">http://sourceforge.net/project/showfiles.php?group_id=14045</span><a href="http://www.easyphp.org/telechargements.php3"></a></span></p>
<p class="MsoNormal"><span lang="EN-US"></span>Em Current version, tem duas opções para baixar, a 2.0 que roda php 5 e a versão 1.8 que roda PHP 4,3 e &#8230;</p>
<p class="MsoNormal">Sugiro que baixe a versão 1.8, pois vamos começar a estudar PHP 4.</p>
<p class="MsoNormal">Ao terminar o download, instale o software.</p>
<p class="MsoNormal">A instalação é muito simples, é daquelas que só precisa dar next, next e next.</p>
<p class="MsoNormal">Terminando a instalação, vamos testar um código PHP.</p>
<p class="MsoNormal">Vá a Arquivos de programas &gt; EasyPHP1-8.</p>
<p class="MsoNormal">Dentro da pasta EasyPHP1-8 há uma pasta chamada www. Todos os arquivos php deverão ficar dentro desta pasta, caso contrário, não funciona.</p>
<p class="MsoNormal">Uma dica é você criar um atalho na área de trabalho que ligue você direto a esta pasta, a www.</p>
<p class="MsoNormal">Clique na pasta www com o botão direito, depois em Enviar Para e clique em Área de trabalho (Criar atalho). Pronto, agora você já fica fácil o acesso a esta pagina.</p>
<p>Agora vamos fazer um código PHP funcionar.</p>
<p class="MsoNormal">Abra seu bloco de notas ou qualquer outro editor de código. Um dos melhores são o Dreamweaver e o Zend.</p>
<p class="MsoNormal">Abrindo seu editor, escreva</p>
<blockquote>
<p class="MsoNormal">&lt;?</p>
<blockquote>
<p class="MsoNormal">echo &#8220;Aprendendo PHP&#8221;;</p>
</blockquote>
<p class="MsoNormal">?&gt;</p>
</blockquote>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"> Salve o arquivo com o nome <em><strong>teste.php</strong></em> . Se tiver usando o bloco de notas, certifique-se de não estar salvando-o como tipo texto, veja na imagem abaixo como você deve salvar:</p>
<p class="MsoNormal" align="center"><img src="http://www.renanlima.com/blog/imgs/php/01.jpg" alt="Salvando arquivo php" height="109" width="434" /></p>
<p class="MsoNormal">Tendo salvo este arquivo na pasta <em><strong>www</strong></em>, já podemos testar o script. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p class="MsoNormal">Ative o EasyPHP clicando em seu icone na área de trabalho. O ícone de atalho e não o de instalação.<br />
Onde fica o reloginho do <em>Ruindows</em>, ops, windows <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  veja se o icone do easy php está piscando.
</p>
<p class="MsoNormal">Isso mesmo, piscando, igual essa imagem aqui: <img src="http://www.renanlima.com/blog/imgs/php/phpAtivo.gif" alt="PHP Ativo" /></p>
<p class="MsoNormal">Abra seu navegador, digite no endereço <em><strong>127.0.0.1</strong></em> ou <em><strong>localhost</strong></em>. Eu particularmente prefiro usar o <em><strong>1</strong><strong>27.0.0.1</strong></em>, é bem mais pratico.</p>
<p class="MsoNormal">Feito isso, irá aparecer o arquivo que você criou chamado teste.php, clique nele para executar.</p>
<p>O resultado é:</p>
<blockquote><p> aprendendo PHP</p></blockquote>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">Simples não?</p>
<p class="MsoNormal">Qualquer dúvida é só comentar no blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/iniciando-em-php-instalando-servidor-e-rodando-scripts/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
