<?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"
	>

<channel>
	<title>Alex Florentino</title>
	<atom:link href="http://www.alexflorentino.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alexflorentino.com</link>
	<description>KISS - Keep It Simple, Stupid</description>
	<pubDate>Tue, 23 Feb 2010 14:46:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Truth - Verdade</title>
		<link>http://www.alexflorentino.com/truth-verdade/</link>
		<comments>http://www.alexflorentino.com/truth-verdade/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:41:10 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[Pessoal]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=227</guid>
		<description><![CDATA[
All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident.

Arthur Schopenhauer, German philosopher (1788 – 1860)
]]></description>
			<content:encoded><![CDATA[<blockquote>
All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident.
</p></blockquote>
<p>Arthur Schopenhauer, German philosopher (1788 – 1860)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/truth-verdade/feed/</wfw:commentRss>
		</item>
		<item>
		<title>O Problema P Versus NP</title>
		<link>http://www.alexflorentino.com/o-problema-p-versus-np/</link>
		<comments>http://www.alexflorentino.com/o-problema-p-versus-np/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 11:34:26 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[Matemática]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=223</guid>
		<description><![CDATA[1. Introdução
 A Matemática não é uma ciência pronta e acabada conforme muitas pessoas poderiam pensar, pelo contrario existe uma quantidade significativa de trabalhos sendo produzidos que exploram tanto conhecimentos antigos aplicados para novos problemas como novos conhecimentos matemáticos aplicados para antigos problemas.
 Clay Mathematics Institute é uma instituição privada estabelecida por um bem sucedido [...]]]></description>
			<content:encoded><![CDATA[<p style="margin: 0pt 0pt 14pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">1. Introdução</span></strong></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">A Matemática não é uma ciência pronta e acabada conforme muitas pessoas poderiam pensar, pelo contrario existe uma quantidade significativa de trabalhos sendo produzidos que exploram tanto conhecimentos antigos aplicados para novos problemas como novos conhecimentos matemáticos aplicados para antigos problemas.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> Clay Mathematics Institute é uma instituição privada estabelecida por um bem sucedido homem de negocio e sua esposa em 1998, nos  EUA  com a missão de “Desenvolver e disseminar o conhecimento matemático”, e para comemorar o inicio de um novo milênio o Clay Institute criou um concurso chamado “Millennium Problems” que é composto por sete problemas matemáticos, que são listados a seguir :</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">1.</span></span> <span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Conjectura de Birch e Swinnerton-Dyer</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">2.</span></span> <span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Conjectura Hodge</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">3.</span></span> <span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Equações de Navier-Strokes</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">4.</span></span> <span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">P vs NP</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">5.</span></span> <span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Conjectura de Poincaré</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">6.</span></span> <span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Hipótese Riemann</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">7.</span></span> <span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Teoria de Yang-Mills</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Cada um destes 7 problemas tratam de temas de grande relevância para a matemática moderna todos eles já eram conhecidos a anos, mais ninguém tinha sido capaz de prova-los.</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Como incentivo o Clay Institute oferece um prêmio de um milhão de dólares para cada problema resolvido.</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Uma curiosidade desta lista de sete problemas é complexidade envolvida até mesmo para entender a questão, na verdade acredito que mesmo um professor de matemática experiente pode ter grande dificuldade para entender todos eles.</span></span></p>
<p style="margin: 0pt 0pt 14pt 18pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Com base nesses dados autor desta obra teve iniciativa de escolher o problema que trata P vs NP como tema , este problema tem um aspecto prático para o homem moderno e uma possível solução pode ter conseqüência no dia-a-dia homem moderno.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Por isso esse texto tenta de maneira simples e não formalista enunciar a questão P vs NP, numa tentativa de tornar claro a todos do que se trata o problema e suas implicações.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Um aspecto interessante do problema </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">P</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> versus </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">NP</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">, é que ele esta relacionado não só a matemática, mas também a computação. </span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">2. P versus NP</span></strong></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Complexidade computacional é um ramo da ciência da computação que visa classificar </span></span> <span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">problemas computacionais de acordo com o nivel de dificuldade do problema.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">A </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">complexidade </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">é medida conforme</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">,</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> independente</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">mente</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> do algoritmo</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">,</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> qual é quantidade necessarias de recursos,</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> mas especificamente de tempo que é necessário para executar um algoritmo.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Para se realizar esta medida são coletados dados de uma execução b</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">á</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">sica</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">, com menor entrada de dados possível,</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> do algoritmo que resolve dado problema, </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">c</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">om base neste tempo analiza se este tempo cresce de forma exponencial ou polinômial, caso o tempo cresça de forma polin</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">o</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">mial a solução é considerada r</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">á</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">pida de outra forma ela é considerada lenta.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">É necessário notar que mesmo um algoritmo que cresce em tempo exponencial e portanto é considerado rápido, com uma entrada significativa pode levar um tempo realmente grande para ser executado, então, portanto entenda que o rápido citado pode não significar o rápido do senso comum.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Digamos que em um computador a soma de dois algarismos, 7 + 3, seja realizado com apenas duas operação básica do processador do computador, então: </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> </span></span><br />
<span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> </span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: center;"><img style="border: medium none ;" src="http://docs.google.com/File?id=ddnvkkrp_24cwf5kncr_b" alt="" width="191" height="78" /></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">A soma acima precisa de 2</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">n</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> operações(não é exatamente 2</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">n</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> operações, valor utilizado apenas para uma simplificação), onde </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">n</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> é número de algarismos das parcelas, para ser realizada computacionalmente, o que significa dizer que o tempo gasto para processar uma operação de adição computacionalmente tem um crescimento representado por uma função polinomial, normalmente é expresso por O(</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">n</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">) passos.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Outro exemplo de um algoritmo que é executado em tempo polinomial é o algoritmo da multiplicação requer </span></span><img style="border: medium none ;" src="http://docs.google.com/File?id=ddnvkkrp_25gwr2bhf2_b" alt="" width="27" height="21" /><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> operações , ou seja, a complexidade é de O(</span></span><img style="border: medium none ;" src="http://docs.google.com/File?id=ddnvkkrp_26f8xd8fc8_b" alt="" width="19" height="21" /><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">) passos. </span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Com </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">as informações acima podemos definir : Um </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">algoritmo de tempo polinomial</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> é um algoritmo que resolve o problema para todas as entradas possíveis em um tempo polinomial, os algoritmos de soma e multiplicação são exemplos destes tipos de algoritmos.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">A partir disso dizemos que: </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><em><span style="font-size: x-small;">a classe </span></em></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><em><span style="font-size: x-small;">P </span></em></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><em><span style="font-size: x-small;">de problemas é o conjunto de todos os problemas polinomiais</span></em></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> [PF].</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Podemos definir também de maneira informal, o que é um problema chamado razoável(feasible problem) : um problema é dito </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><em><span style="font-size: x-small;">razoável</span></em></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> [PF] :</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><em><span style="font-size: x-small;">Se for possível em tempo polinomial verificar se uma suposta solução é realmente uma solução para o problema. </span></em></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">[PF]</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Como exemplo somar dois números é um problema razoável, pois dado dois números e o soma deles é fácil verificar se a soma esta realmente correta, na verdade essa verificação também pode ser feita em tempo polinomial.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Vamos chamar este conjunto de problemas de </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">NP</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">(</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><em><span style="font-size: x-small;">Non</span></em></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><em><span style="font-size: x-small;"> nondeterministic polynomial</span></em></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">), </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">é evidente que na verdade a classe </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">P</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> esta inserida dentro de </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">NP</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">, pois todo problema que pode ser resolvido em tempo polinomial pode também ser verificado em um tempo polinomial.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Então a questão </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">P</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> = </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">NP </span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">poderia ser lida assim:</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">É verdade que todo problema cujas repostas podem ser checadas em tempo polinomial também podem ser resolvidos em tempo polinomial?</span></strong></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Quem conseguir resolver a questão </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">P</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> = </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">NP</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">, na verdade estará respondendo a esta pergunta. Dito assim o problema parece mais fácil do que realmente é, e também não parece ter uma implicação prática. </span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Um exemplo da relevância do problema é na criptografia, pois os principais algoritmos de criptografias atuais que são utilizados nas transações seguras da internet(SSL), baseiam-se na decomposição em fatores primos de números absurdamente grandes, números com mais 200 algarismos, pois atualmente não se tem conhecimento de um algoritmo que possa decompor em fatores primos números tão grande em um tempo razoável, ou seja, o algoritmo que soluciona o problema de decomposição em fatores tem um custo exponencial. </span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Uma conseqüência da prova de que realmente </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">P</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> = </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">NP</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">, seria que todos os algoritmos de criptografia baseado na decomposição em fatores primos estariam realmente em perigo.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Uma outra conseqüência de uma possível demonstração afirmativa </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">P </span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">=</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;"> NP </span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">teria repercusão na própria matemática e lógica, pois afirmaria que é computacionalmente possível a construção de um algoritmo capaz de provar qualquer teorema matemático.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff; text-align: justify;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">A questão </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">P</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> = </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">NP </span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">, já foi tratada pelos melhores matemáticos do mundo por varias décadas, e parece que nada de definitivo foi realmente provado sobre o tema, mas </span></span><span style="font-family: Verdana; color: #000000;"><span style="font-size: x-small;">William I. Gasarch</span></span> <span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">conduziu uma pesquisa com os melhores cientistas da computação e matemáticos do mundo sobre o tema, a maioria acha que na verdade </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">P</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;"> é diferente </span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">NP</span></strong></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">.</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><strong><span style="font-size: x-small;">3. Referência</span></strong></span></p>
<p style="margin: 0pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">[PF]</span></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><em><span style="font-size: x-small;">. </span></em></span><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">Paulo Feofiloff</span></span> <a href="http://www.ime.usp.br/%7Epf/"><span style="background-color: #ffffff; font-family: Verdana; color: #0000ff;"><span style="text-decoration: underline;"><span style="font-size: x-small;">http://www.ime.usp.br/~pf/</span></span></span></a></p>
<p style="margin: 0pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">1. http://www.claymath.org</span></span></p>
<p style="margin: 0pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: Verdana; color: #000000;"><span style="font-size: x-small;">2. http://www.claymath.org/millennium/P_vs_NP/</span></span></p>
<p style="margin: 0pt; background-color: #ffffff;"><span style="font-family: CMR8; color: #000000;"><span style="font-size: xx-small;">3. STEPHEN COOK, http://www.claymath.org/millennium/P_vs_NP/pvsnp.pdf</span></span></p>
<p style="margin: 0pt 0pt 14pt; background-color: #ffffff;"><span style="background-color: #ffffff; font-family: 'Times New Roman'; color: #000000;"><span style="font-size: x-small;">4. http://www.cs.umd.edu/~gasarch/papers/poll.pdf</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/o-problema-p-versus-np/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Arquivos do Sun Tech Day 2009</title>
		<link>http://www.alexflorentino.com/arquivos-do-sun-tech-day-2009/</link>
		<comments>http://www.alexflorentino.com/arquivos-do-sun-tech-day-2009/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 19:55:50 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=218</guid>
		<description><![CDATA[As palestras do Sun Tech Day 2009 podem ser baixadas em :  
http://developers.sun.com/events/techdays/presentations/2009/saopaulo.jsp
]]></description>
			<content:encoded><![CDATA[<p>As palestras do Sun Tech Day 2009 podem ser baixadas em : <a href="http://developers.sun.com/events/techdays/presentations/2009/saopaulo.jsp"> </a></p>
<p><a href="http://developers.sun.com/events/techdays/presentations/2009/saopaulo.jsp">http://developers.sun.com/events/techdays/presentations/2009/saopaulo.jsp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/arquivos-do-sun-tech-day-2009/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP Zend Framework - Instalando</title>
		<link>http://www.alexflorentino.com/php-zend-framework-instalando/</link>
		<comments>http://www.alexflorentino.com/php-zend-framework-instalando/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 19:44:06 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[Pessoal]]></category>

		<category><![CDATA[uw]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=193</guid>
		<description><![CDATA[Nos últimos 2 anos o desenvolvimento WEB vem mudando muito, na minha opinão melhorando muito, uns dos motivos disso foi o surgimento do framework Ruby On Rails que mudou a maneira de pensar de muita gente pois mesmo sendo um framework MVC completo consegue manter a simplicidade e rapidez no desenvolvimento, ao contrario da maioria [...]]]></description>
			<content:encoded><![CDATA[<p>Nos últimos 2 anos o desenvolvimento WEB vem mudando muito, na minha opinão melhorando muito, uns dos motivos disso foi o surgimento do framework <a href="http://rubyonrails.org/">Ruby On Rails</a> que mudou a maneira de pensar de muita gente pois mesmo sendo um framework MVC completo consegue manter a simplicidade e rapidez no desenvolvimento, ao contrario da maioria dos frameworks web java com seus excesso de XML e configurações.</p>
<p>Umas das vantages de <a href="http://rubyonrails.org/">Ruby on Rails</a> sobre  <a href="http://www.php.net">PHP</a> é a elegância  e modulariedade das aplicações feita em ROR , ao contrario do <a href="http://www.php.net">PHP</a> que utilizado sem um bom conhecimento de arquitetura de software pode resultar em uma aplicação muito difícil de manter.</p>
<p>Uma maneira que se encontrou para melhorar a qualidade de sites feitos PHP foi a criação do Zend Framework, projeto liderado pela <a href="http://www.zend.com">Zend</a> principal mantenedora do <a href="http://www.php.net">PHP</a>.</p>
<p><a href="http://framework.zend.com">ZendFramework </a>esta no mercado a um bom tempo  e se mostrou excelente, é feito utilizando OOP e padrões de desenvolvimento, além de contar com uma documentação razoável , por isso é a minha escolha quando o assunto é framework PHP.</p>
<p><strong>1. Baixando</strong></p>
<p>Acesse <a href="http://zendframework.com/">http://zendframework.com</a> e faça o download da versão mais recente, neste tutorial utlizarei a versão 1.9 Beta.</p>
<p><strong>2. Configurando</strong></p>
<p>Para quem esta começando essa é uma parte muito importante, pois é necessario configurar o Zend Framework corretamente para conseguir trabalhar de forma &#8220;pacifíca&#8221; com o framework PHP.</p>
<p>o primeiro passo é descompactar o arquivo baixado no item 1 e copiar este novo diretorio ,por exemplo, para C:\ZendFramework-1.9.0b1 de modo que fique parecido com a estrutura abaixo.</p>
<p><a href="http://www.alexflorentino.com/wp-content/uploads/2009/07/zend_folders.jpg"><img class="alignnone size-medium wp-image-200" title="zend_folders" src="http://www.alexflorentino.com/wp-content/uploads/2009/07/zend_folders.jpg" alt="" width="218" height="164" /></a></p>
<p>agora vá para seu php.ini normalmente no c:\windows e modifique seu arquivo para que fique parecido :</p>
<p><a href="http://www.alexflorentino.com/wp-content/uploads/2009/07/php_include_path.gif"><img class="alignnone size-full wp-image-199" title="php_include_path" src="http://www.alexflorentino.com/wp-content/uploads/2009/07/php_include_path.gif" alt="" width="500" height="39" /></a></p>
<p>basicamente descomentar o include_path caso esteja comentado e adicionar um novo path para library do diretório do Zend Framework.</p>
<p>Falta ainda duas coisas, adicionar dois executaveis no path para isso, clique com botão direito no icone meu computador no desktop -&gt; Advanced System settings -&gt; aba Advanced -&gt; Environment variables(variaveis de ambiente), escolha a variavel Path, e adicione no final o endereço completo do executavel PHP na sua maquina e endereço completo zf.bat(presenta na pasta <strong>bin</strong>, do Zend Framework), exemplo abaixo :</p>
<p><a href="http://www.alexflorentino.com/wp-content/uploads/2009/07/zend_instalacao.jpg"><img class="alignnone size-medium wp-image-201" title="zend_instalacao" src="http://www.alexflorentino.com/wp-content/uploads/2009/07/zend_instalacao-270x300.jpg" alt="" width="270" height="300" /></a></p>
<p>Pronto, agora para testar , abra o prompt de comando e execute.</p>
<pre name="code" class="xml">

zf show version
</pre>
<p>pronto, se  como resposta do comando acima, conseguiu a resposta abaixo, o ZendFramework esta instalado corretamente e pronto para ser usado.</p>
<p style="text-align: center;"><a href="http://www.alexflorentino.com/wp-content/uploads/2009/07/zf_command.jpg"><img class="size-medium wp-image-205 aligncenter" title="zf_command" src="http://www.alexflorentino.com/wp-content/uploads/2009/07/zf_command-300x21.jpg" alt="" width="300" height="21" /></a></p>
<p><strong>Observação :</strong> os procedimentos para alterar a variavel de ambiente, PATH,  funcionou em um Windows XP, já no Windows Vista, mesmo reiniciando, não funcionou. Para funcionar copiei o conteúdo do diretorio <strong>bin</strong> do diretorio do Zend Framework para pasta c:\windows, o copiei também o executavel e dlls do php para basta c:\windows, depois disso funcionou, talvez não seja a melhor solução, mais fica registrado a dica.</p>
<p><strong>3. Criando sua primeira aplicação</strong></p>
<p>Basta ir para Document Root do apache,ou seja, o diretorio onde fica seus sites no apache e por linha de comando execute.</p>
<pre name="code" class="xml">

zf create project sample1
</pre>
<p>agora acesse http://localhost/sample1/public/</p>
<p>e deverá encontrar esta tela.</p>
<p><a href="http://www.alexflorentino.com/wp-content/uploads/2009/07/zend_hello_world.jpg"><img class="alignnone size-medium wp-image-206" title="zend_hello_world" src="http://www.alexflorentino.com/wp-content/uploads/2009/07/zend_hello_world-300x259.jpg" alt="" width="300" height="259" /></a></p>
<p>é onde sua aplicação Zend FrameWork deve estar rodando.</p>
<p>em futuros posts pretendo cobrir outros topicos deste fantastico FrameWork!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/php-zend-framework-instalando/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rsync - Atualizando seu site de maneira inteligente</title>
		<link>http://www.alexflorentino.com/rsync-atualizando-seu-site-de-maneira-inteligente/</link>
		<comments>http://www.alexflorentino.com/rsync-atualizando-seu-site-de-maneira-inteligente/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 14:14:06 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=189</guid>
		<description><![CDATA[RSYNC é um software feito para aqueles que tem necessidade de transferir arquivos de um local para outro, exemplo da sua pasta local de desenvolvimento para seu servidor WEB.
Ele tem varias vantagens sobre fazer isso por FTP, pois ele utiliza varias tecnicas para saber realmente quais arquivos enviar.
É comum como desenvolvedor PHP fazer pequenas alterações [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.samba.org/rsync/">RSYNC</a> é um software feito para aqueles que tem necessidade de transferir arquivos de um local para outro, exemplo da sua pasta local de desenvolvimento para seu servidor WEB.</p>
<p>Ele tem varias vantagens sobre fazer isso por FTP, pois ele utiliza varias tecnicas para saber realmente quais arquivos enviar.</p>
<p>É comum como desenvolvedor PHP fazer pequenas alterações em site com varios arquivos , o problema que na hora de atualizar o site do cliente, acabo enviando todos os arquivos novamente, não seria muito mais inteligente enviar somente os arquivos que realmente foram alterados ? o Rsync trata isso.</p>
<p>Para instala-lo no linux é bem simples basta :</p>
<pre name="code" class="xml">

apt-get install rsync
</pre>
<p>para instala-lo no windows, você precisa baixar a versão compilada para esta plataforma em  :</p>
<p><a href="http://sourceforge.net/projects/sereds/files/cwRsync/1.2.4/cwRsync_1.2.4_Installer.zip/download">http://sourceforge.net/projects/sereds/files/cwRsync/1.2.4/cwRsync_1.2.4_Installer.zip/download</a></p>
<p>Logo após a instalação realizada, eu precisei copiar todo o conteúdo da pasta</p>
<pre name="code" class="xml">

C:\Program Files\cwRsync\bin
</pre>
<p>para a pasta do c:\windows, com isso conseguimos executar rsync pelo prompt de comando.</p>
<p>Agora o comando que sempre utilizo para atualizar meus sites, rodando sempre do diretorio raiz do meu site:</p>
<pre name="code" class="xml">

rsync  --exclude &quot;.svn&quot; --exclude &quot;conecta.php&quot; --exclude &quot;*.swp&quot; --exclude=&quot;nbproject&quot; -e ssh -Prvzc .  userreomote@host:/path/remote
</pre>
<p>com isso minhas atualizações ficaram mais rapidas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/rsync-atualizando-seu-site-de-maneira-inteligente/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Meu Primeiro Evento Ruby On Rails</title>
		<link>http://www.alexflorentino.com/meu-primeiro-evento-ruby-on-rails/</link>
		<comments>http://www.alexflorentino.com/meu-primeiro-evento-ruby-on-rails/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 13:57:31 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=176</guid>
		<description><![CDATA[Participei do meu primeiro evento Ruby On Rails, conforme minhas expectativas o evento foi bom, valeu apena o dinheiro e o tempo investido.
O Evento foi o Ruby e Rails no mundo Real 2009 confesso que o termo &#8220;mundo real&#8221; ficou mais no nome do que nas palestras.
1. Criando um Instant Messenger usando Rails
Palestra foi razoavel, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Participei do meu primeiro evento Ruby On Rails, conforme minhas expectativas o evento foi bom, valeu apena o dinheiro e o tempo investido.</p>
<p style="text-align: left;">O Evento foi o <a href="http://www.temporealeventos.com.br/?area=130"><span style="font-family: Arial,Helvetica,sans-serif; color: #000000;"><strong><span style="font-family: Arial,Helvetica,sans-serif; color: #00ccff;">Ruby e Rails no mundo Real 2009</span></strong></span></a> confesso que o termo &#8220;mundo real&#8221; ficou mais no nome do que nas palestras.</p>
<pre style="text-align: left;"><strong>1. Criando um Instant Messenger usando Rails</strong></pre>
<p style="text-align: left;">Palestra foi razoavel, falou sobre Jabber e XMPP de forma bem rapido afinal não da para apresentar um tema deste em 1 hora.</p>
<p><strong>2. Ruby, Rails e empreendedorismo </strong></p>
<p style="text-align: left;">Essa palestra sobre empreendedorismo ficou muito solta no evento, mais gostei, na verdade sempre gosto deste tema.</p>
<p><strong>3. Ruby Desktop</strong></p>
<p style="text-align: left;">Eu particularmente não gostei deste assunto, Ruby para Desktop ? é bom ter uma idéia sim, mas se vc realmente precisa desenvolver para desktop(windows) é melhor usar Delphi(.Net), ou java!</p>
<p><strong>4. Outsorcing, ou como trabalhar para empresas gringas</strong></p>
<p style="text-align: left;">Na minha opinião a melhor apresentação, salvou o evento e deu mais sentido no termo &#8220;Mundo Real&#8221; no nome do evento.</p>
<p><strong>5. GlassFish on Rails: Escalabilidade e Confiabilidade</strong></p>
<p style="text-align: left;">Palestra muito rapida, sobre um tema pesado! mais foi uma palestra e pesquisando na web você descobre que rodar sua aplicação no JRails + Glassfish pode ser uma boa saida.</p>
<p><strong>6. Só os imaturos não testam</strong></p>
<p style="text-align: left;">Uma das melhores palestras, Com bastante exemplos de utilização de testes e sobre a evolução dos desenvolvedores.</p>
<p><strong>7. O que é e como funciona o RubyLearning </strong></p>
<p style="text-align: left;">Uma palestra informativa sobre o projeto e como funciona, gostei!</p>
<p><strong>8. Ruby, muito mais do que reflexivo!</strong></p>
<p style="text-align: left;">Apresentada pelo Fabio Kung, realmente muito boa apresentação! Ele mostrou tecnicas para manipulação da linguagem usando ParseTree, ele deu exemplo de como usar essa ferramenta gerar métricas de qualidade do seu código.</p>
<p style="text-align: left;">Em resumo foi um bom evento, e compensou o investimento(R$50)<br />
os organizadores estão de parabéns.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/meu-primeiro-evento-ruby-on-rails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Css Framework</title>
		<link>http://www.alexflorentino.com/css-framework/</link>
		<comments>http://www.alexflorentino.com/css-framework/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 13:52:22 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Pessoal]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=170</guid>
		<description><![CDATA[Se você já teve que montar um layout de um site com css usando tableless, você já deve saber como essa simples tarefa pode se torna um pesadelo para um iniciante.
É comum problemas, uma propriedade funciona na versão 7 do IE outra não.
Com base nisso esta surgindo o idéia de CSS Framework, basicamente eles fornecem [...]]]></description>
			<content:encoded><![CDATA[<p>Se você já teve que montar um layout de um site com css usando tableless, você já deve saber como essa simples tarefa pode se torna um pesadelo para um iniciante.</p>
<p>É comum problemas, uma propriedade funciona na versão 7 do IE outra não.</p>
<p>Com base nisso esta surgindo o idéia de CSS Framework, basicamente eles fornecem toda essa infra-estrutura de CSS para você, como por exemplo definir fontes padrões, e claro montar o layout, ou grid do seu site.</p>
<p>Abaixo irei explicar como utilizar o <a href="http://www.blueprintcss.org/">Blue Print CSS</a> e construir uma estrutura basica de um site, header, footer e menu esquerdo.</p>
<p><strong>1.</strong> Faça o download do framework em <a href="http://www.blueprintcss.org/">http://www.blueprintcss.org/</a></p>
<p><strong>2.</strong> Descompacte o arquivo e copie a pasta blueprint para o diretorio raiz do seu site, neste exemplo irei utilizar c:\trabalho\site1</p>
<p><strong>3.</strong> Vamos carregar o nosso framework em nosso site</p>
<p>index.html</p>
<pre name="code" class="html">

&lt;!DOCTYPE html PUBLIC &quot;-/W3c/DTD HTML 4.01/EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;blueprint/screen.css&quot; type=&quot;text/css&quot; media=&quot;screen,projection&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;blueprint/print.css&quot; type=&quot;text/css&quot; media=&quot;print&quot;&gt;
&lt;!--[uf IE]&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;blueprint/ie.css&quot; type=&quot;text/css&quot; media=&quot;screen, projection&quot;&gt;
&lt;![endif]--&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>pronto o nosso CSS Framework esta instalando agora vamos começar a usa-lo.</p>
<p><strong>4.</strong> Definindo o nosso layout completo:</p>
<pre name="code" class="html">

&lt;!DOCTYPE html PUBLIC &quot;-/W3c/DTD HTML 4.01/EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;blueprint/screen.css&quot; type=&quot;text/css&quot; media=&quot;screen,projection&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;blueprint/print.css&quot; type=&quot;text/css&quot; media=&quot;print&quot;&gt;
&lt;!--[uf IE]&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;blueprint/ie.css&quot; type=&quot;text/css&quot; media=&quot;screen, projection&quot;&gt;
&lt;![endif]--&gt;
&lt;/head&gt;
&lt;div id=&quot;container&quot;&gt;
&lt;h1&gt; Aqui é conteúdo do header. &lt;/h1&gt;
&lt;hr&gt;
&lt;h2 class=&quot;alt&quot;&gt; Simples teste &lt;/h2&gt;
&lt;hr&gt;

&lt;div class=&quot;span-15 prepend=1 colborder&quot;&gt;
&lt;p&gt; Um simples texto para conteúdo &lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;span-7 last&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt; MENU 1 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt; MENU 2 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt; Um simples rodapé &lt;/p&gt;

&lt;/div&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>é essa uma estrutura basica de um layout em html, bom com isso já é possivel ter uma ideia do framework, mais é necessario um aprofundamento maior para entender toda logica do framework.</p>
<p>Baixe os arquivos utilizados acima junto com framework <a href="http://www.alexflorentino.com/site1.zip">AQUI</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/css-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Autenticação com ruby on rails - restful authentication + OpenID</title>
		<link>http://www.alexflorentino.com/autenticacao-com-ruby-on-rails-restful-authentication-openid/</link>
		<comments>http://www.alexflorentino.com/autenticacao-com-ruby-on-rails-restful-authentication-openid/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 23:02:35 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=157</guid>
		<description><![CDATA[Todo programador  já deve ter escrito varios e varios sistemas onde exista a necessidade de proteger algumas paginas, qual é a solução mais comum ? escrever mais uma vez código para login de usuario, acabando por duplicar código entre projetos.
Outro efeito ruim disso é que acaba duplicando informações de acesso de usuarios, exemplo cada sistema [...]]]></description>
			<content:encoded><![CDATA[<p>Todo programador  já deve ter escrito varios e varios sistemas onde exista a necessidade de proteger algumas paginas, qual é a solução mais comum ? escrever mais uma vez código para login de usuario, acabando por duplicar código entre projetos.</p>
<p>Outro efeito ruim disso é que acaba duplicando informações de acesso de usuarios, exemplo cada sistema tem sua própria base de dados de usuario, para resolver(ou tentar) este problema foi criado OpenID.</p>
<p>O funcionamento do <a href="http://openid.net/">OpenID</a>, em linhas gerais, é o seguinte: usuario é dono de uma url digamos http://ualex.myopenid.com e  este usuario deseja logar no meu sistema que suporta autenticação por OpenID, ele simplesmente digita sua url na tela de login do meu sistema e logo depois é direcionado para um OpenID provider, neste caso myopenid.com, no site do <a href="http://openid.net/">OpenID</a> provider o usuario digita sua  senha e comprova que é dono da URL, logo após isso ele é redirecionado para minha aplicação e continua navegando normalmente.</p>
<p>Parece complicado não é ?  <a href="http://openid.net/">OpenID</a> tem uma especificação bem clara e existe varios frameworks em varias liguagens para tratar o processo de autenticação, existe até frameworks para criar seu próprio <a href="http://openid.net/">OpenID</a> <a href="http://www.myopenid.com/">Provider</a>, este útil para centralizar autenticação de usuarios de aplicações web dentro de uma empresa.</p>
<p>Neste tutorial irei aproveitar aplicação construida no post sobre <a href="http://www.alexflorentino.com/autenticacao-com-ruby-on-rails-restful-authentication/">restful authentication</a> para implementar autenticação por OpenID, vamos la.</p>
<p><strong>1. Instalar a biblioteca openid-ruby</strong></p>
<pre name="code" class="ruby">

gem install ruby-openid
</pre>
<p><strong> 2. Instalar o plugin open_id_authentication</strong></p>
<pre name="code" class="ruby">

git clone git://github.com/rails/open_id_authentication.git vendor/plugins/open_id_authentication
</pre>
<p><strong> 3. Criar as migrations do open_id_authentication<br />
</strong></p>
<pre name="code" class="ruby">

rake open_id_authentication:db:create
</pre>
<p><strong> 4. Criar uma migration para alterar nossa tabela users</strong></p>
<pre name="code" class="ruby">

ruby script\generate migration add_identity_url_for_users
</pre>
<p>Nossa nova migration irá conter :</p>
<pre name="code" class="ruby">

class AddIdentityUrlForUsers &lt; ActiveRecord::Migration
def self.up
add_column :users, :identity_url, :string
end

def self.down
remove_column :users, :identity_url
end
end
</pre>
<p><strong>5. Alterar nosso controller Session para permitir autenticação por OpenID ou por password</strong></p>
<p>Com certeza essa é umas das partes mais &#8220;complicadas&#8221; do processo, você irá precisar fazer as seguintes alterações no seu controller session(criado pelo restful_authentication).</p>
<pre name="code" class="ruby">

def create
if using_open_id?
open_id_authentication()
else
password_authentication()
end
end

def open_id_authentication
authenticate_with_open_id do |result, identity_url|
if result.successful?
if @current_user = User.find_by_identity_url(identity_url)
success_login()
else
failed_login &quot;Sorry, no user by that identity URL exists (#{identity_url})&quot;
end
else
failed_login result.message
end
end
end

def success_login
session[:user_id] = @current_user.id
redirect_to(root_url)
flash[:notice] = &quot;Sucesso&quot;
end

def  failed_login(message)
flash[:notice] = message
redirect_to(new_session_url)

end

def password_authentication
logout_keeping_session!
user = User.authenticate(params[:login], params[:password])
if user
# Protects against session fixation attacks, causes request forgery
# protection if user resubmits an earlier form using back
# button. Uncomment if you understand the tradeoffs.
# reset_session
self.current_user = user
new_cookie_flag = (params[:remember_me] == &quot;1&quot;)
handle_remember_cookie! new_cookie_flag
redirect_back_or_default('/')
flash[:notice] = &quot;Logged in successfully&quot;
else
note_failed_signin
@login       = params[:login]
@remember_me = params[:remember_me]
render :action =&gt; 'new'
end
end
</pre>
<p>altere seu arquivo conforme o código acima.</p>
<p><strong>6. Adicionando a opção OpenID na tela de login</strong></p>
<p><strong></strong>vamos adicionar em nossa tela de login um field para usuario entrar com sua url, e caso esta url estiver presente autenticar por OpenID.</p>
<pre name="code" class="ruby">

//arquivo: sessions/new.html.erb
&lt;p&gt;&lt;%= label_tag &quot;OpenID URL&quot; %&gt;
&lt;p&gt;&lt;%= text_field_tag 'openid_identifier' %&gt;&lt;/p&gt;
</pre>
<p><strong> 7. Alterar nossa view para permitir o cadastro de nossa url de autenticação</strong></p>
<pre name="code" class="ruby">

adicione o novo field identity_url para quando o usuario estiver no processo de signup, ele possa entrar com a OpenID url.

//arquivo: users/new.html.erb

&lt;p&gt;&lt;%= label_tag 'Identity url' %&gt;&lt;br/&gt;
&lt;%= f.text_field :identity_url %&gt;&lt;/p&gt;
</pre>
<p><strong> 8. Corrigindo um  detalhe para torna nosso site mais seguro</strong></p>
<pre name="code" class="ruby">

//arquivo models/user.rb

attr_accessible :login, :email, :name, :password, :password_confirmation, :identity_url
</pre>
<p>note foi adicionado o :identity_url no final da listagem.</p>
<p><strong> 9. Finalizando</strong></p>
<p><strong></strong>Pronto, se você chegou até aqui é hora de testar, para criar um OpenID(free) acesse o http://www.myopenid.com e faça o seu cadastro, uma dica é utilize o rails 2.2 e tentei inicialmente o rails 2.1.1 mais existe uma incompatibilidade entre os frameworks nessa versão.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/autenticacao-com-ruby-on-rails-restful-authentication-openid/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Autenticação com ruby on rails - restful authentication</title>
		<link>http://www.alexflorentino.com/autenticacao-com-ruby-on-rails-restful-authentication/</link>
		<comments>http://www.alexflorentino.com/autenticacao-com-ruby-on-rails-restful-authentication/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 18:39:15 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=149</guid>
		<description><![CDATA[1. Criando novo projeto de exemplo

 rails -d mysql todo

2. gerando um scaffold simples, com o propósito demonstrar como funciona restful authentication

 ruby script\generate scaffold todo descricao:text prazo:date feito:boolean

vamos criar também nosso banco de dados para isso não se esqueça de configurar seu arquivo config\database.yml (development)

 rake db:create

e executa nossa migration para ele criar a [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1.</strong> Criando novo projeto de exemplo</p>
<pre name="code" class="ruby">
 rails -d mysql todo
</pre>
<p><strong>2.</strong> gerando um scaffold simples, com o propósito demonstrar como funciona restful authentication</p>
<pre name="code" class="ruby">
 ruby script\generate scaffold todo descricao:text prazo:date feito:boolean
</pre>
<p>vamos criar também nosso banco de dados para isso não se esqueça de configurar seu arquivo config\database.yml (development)</p>
<pre name="code" class="ruby">
 rake db:create
</pre>
<p>e executa nossa migration para ele criar a tabela todos:</p>
<pre name="code" class="ruby">
 rake db:migrate
</pre>
<p>agora é um bom momento para você startar sua aplicação e fazer alguns testes:</p>
<pre name="code" class="ruby">
 ruby script/server
</pre>
<p><strong>3.</strong> Baixando restful authentication</p>
<p>no diretorio raíz do seu do seu projeto</p>
<pre name="code" class="ruby">
 git clone git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful_authentication
</pre>
<p>para rodar esse comando você irá precisar instalar um cliente git</p>
<p><strong>4.</strong> Rodar um generate que irá criar uma estrutura de autenticação em nosso projeto</p>
<pre name="code" class="ruby">
 ruby script\generate authenticated user sessions
</pre>
<p>Este generate irá criar o user model para você que nada mais é que sua tabela de usuarios<br />
e também irá criar o controlador sessions, que será usado para login e logout.</p>
<p>novamente precisamos executar uma migration para atualizar nosso banco de dados</p>
<pre name="code" class="ruby">
 rake db:migrate
</pre>
<p>e precisamos incluir o modulo AuthenticatedSystem em nosso application controler (app\controllers\application.rb) para que a nossa infra-estrutura de autenticação fique disponivel para nossa aplicação.</p>
<pre name="code" class="ruby">
 include AuthenticatedSystem
</pre>
<p><strong>5.</strong> vamos alterar  no nosso controller todo para pedir autenticação,<br />
para isso basta adicionar a linha:</p>
<pre name="code" class="ruby">
 before_filter :login_required , :except =&gt; [:index]
</pre>
<p>lembre se para cadastrar um novo usuario http://localhost:3000/signup</p>
<p>Pronto esta feito! implementamos nosso sistema de autenticação.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/autenticacao-com-ruby-on-rails-restful-authentication/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Reset da senha do mysql</title>
		<link>http://www.alexflorentino.com/reset-da-senha-do-mysql/</link>
		<comments>http://www.alexflorentino.com/reset-da-senha-do-mysql/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 19:34:01 +0000</pubDate>
		<dc:creator>comercial</dc:creator>
		
		<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.alexflorentino.com/?p=145</guid>
		<description><![CDATA[Por um acaso já aconteceu de você esquecer a senha de root do mysql, para corrigir é muito simples basta iniciar o servidor mysql com a opção &#8211;skip-grant-tables e logo apoós logar sem senha e dar um update na tabela user, exemplo.


mysqld-nt.exe --skip-grant-tables



c:&#62; mysql

use mysql

update user set password='' where user='root' and host='localhost'

pronto com isso você [...]]]></description>
			<content:encoded><![CDATA[<p>Por um acaso já aconteceu de você esquecer a senha de root do mysql, para corrigir é muito simples basta iniciar o servidor mysql com a opção &#8211;skip-grant-tables e logo apoós logar sem senha e dar um update na tabela user, exemplo.</p>
<pre name="code" class="ruby">

mysqld-nt.exe --skip-grant-tables
</pre>
<pre name="code" class="ruby">

c:&gt; mysql

use mysql

update user set password='' where user='root' and host='localhost'
</pre>
<p>pronto com isso você remove o password do root para o localhost.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexflorentino.com/reset-da-senha-do-mysql/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
