<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Advogato blog for acs</title>
    <link>http://www.advogato.org/person/acs/</link>
    <description>Advogato blog for acs</description>
    <language>en-us</language>
    <generator>mod_virgule</generator>
    <pubDate>Fri, 10 Feb 2012 14:43:29 GMT</pubDate>
    <item>
      <pubDate>Fri, 21 Aug 2009 06:09:13 GMT</pubDate>
      <title>Testando a aplicacao em um iPhone/iTouch com Jailbreak sem o certificado da Apple</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=50</link>
      <guid>http://jumpi.wordpress.com/2009/08/21/testando-a-aplicacao-em-um-iphoneitouch-com-jailbreak-sem-o-certificado-da-apple/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Well, aqui estou eu de volta, postando sobre um problema que j&#xE1; tive no passado e devido a escassa documenta&#xE7;&#xE3;o e inclusive, hoje me deparei com a mesma pergunta que fiz no passado em uma das listas na qual participo.&lt;/p&gt;
&lt;p&gt;&amp;#8220;Eu tenho um device (iPhone/iTouch) com jailbreak, porem eu quero testar as minhas aplicacoes que desenvolvi com tanto suor no XCode diretamente no device, afinal de contas, estou cansado de testes no simulador, no simulador tudo funciona, tudo e tao simples, eu quero mesmo e testar no Hardware!!! &amp;#8220;comofas&amp;#8221;??&lt;/p&gt;
&lt;p&gt;Simples, porem nem tanto, por isso que criei uma lista passo-a-passo de como executar essa tarefa tao &#xE1;rdua!!!  &lt;/p&gt;
&lt;p&gt;1) Certificar-se de que voc&#xEA; tem o SSH instalado e habilitado para poder jogar a partir do SCP a sua aplica&#xE7;&#xE3;o, como fazer isso??? Basta acessar o cydia que tem um guia passo-a-passo de como fazer&lt;/p&gt;
&lt;p&gt;2) Usar o xcode para compilar a sua aplica&#xE7;&#xE3;o, lembrando-se de alguns fatores importantes&lt;/p&gt;
&lt;p&gt;  &amp;#8211; Mudar para Device&lt;br /&gt;
  &amp;#8211; Observar a vers&#xE3;o (2.2, 2.2.1 ou 3.0), lembrando que tem que ser a mesma vers&#xE3;o que esta rodando no seu iPod/iPhone&lt;br /&gt;
  &amp;#8211; Decidir se quer em modo debug ou release, como voc&#xEA; n&#xE3;o vai poder debugar no device dessa maneira, recomendo compilar em release&lt;/p&gt;
&lt;p&gt;3) O xcode vai acusar erro porque voc&#xEA; n&#xE3;o possui o certificado, porem n&#xE3;o se preocupe, basta seguir os passos abaixo: &lt;/p&gt;
&lt;p&gt;- Acessar o  &lt;code&gt;diretorio_da_sua_aplicacao/build/Debug-iphoneos&lt;/code&gt; ou &lt;code&gt;diretorio_da_sua_aplicacao/build/Release-iphoneos &lt;/code&gt;&lt;br /&gt;
- Verificar a exist&#xEA;ncia do arquivo com o &lt;code&gt;nome_da_sua_aplicacao.app&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
4) Eu costumo dentro do device, ate por organiza&#xE7;&#xE3;o e recomenda&#xE7;&#xE3;o da grande padroeira dos usu&#xE1;rios/desenvolvedores de aplica&#xE7;&#xF5;es em modo de jailbreak Erica Sadun, realizar os seguintes passos:&lt;/p&gt;
&lt;p&gt;- Acessar o device: &lt;code&gt;ssh root@ip_do_device&lt;/code&gt; (ele vai pedir a senha, caso n&#xE3;o tenha mudado, 99% das pessoas n&#xE3;o mudam, ela sera alpine)&lt;br /&gt;
- Criar um diret&#xF3;rio dentro de &lt;code&gt;/var&lt;/code&gt;, por exemplo, crio um &lt;code&gt;/var/Applications&lt;/code&gt; para jogar os meus testes la, portanto se quer seguir o meu conselho, antes acesse o device e crie um diret&#xF3;rio dentro de var: &lt;code&gt;mkdir /var/Applications&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;4) Mas Alan,  eu n&#xE3;o sei como eu verifico qual o IP do meu device para acessar??? O que eu faco??? Well, vou passar aqui 2 formas de como realizar essa tarefa &lt;/p&gt;
&lt;p&gt;- Instale o programa bossprefs, ele esta dispon&#xED;vel no seu reposit&#xF3;rio Cydia, ele e bem interessante pois permite controlar diversas coisas e ate mesmo dar um reboot no springboard, passo necess&#xE1;rio para reconhecimento da nossa aplica&#xE7;&#xE3;o&lt;br /&gt;
- Tente acessar via settings ou preferencias &amp;#8211; wi-fi &amp;#8211; e clique na rede que voc&#xEA; estiver conectado, vai ter o IP Address la, basta anotar&lt;/p&gt;
&lt;p&gt;5) Ent&#xE3;o agora, j&#xE1; sabemos onde esta a aplica&#xE7;&#xE3;o, j&#xE1; criamos o diret&#xF3;rio e temos o IP, hora de copiar o app para o device, voc&#xEA; vai fazer agora um scp para o seu device (iPhone/iTouch) da seguinte maneira: &lt;code&gt;scp sua_aplicacao.app root@ip_que_detectamos:/var/Applications&lt;/code&gt; e ele vai pedir a senha, como quase 99% dos usu&#xE1;rios n&#xE3;o modificam a senha, a senha default e alpine&amp;#8230; acredito que eu j&#xE1; havia dito isso la em cima, n&#xE3;o??? &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;6) Agora hora de acessar o device, voce vai dar um ssh no seu device, e executar as seguintes tarefas:&lt;/p&gt;
&lt;p&gt; &amp;#8211; Seguindo o primeiro item do passo 4, voce vai dar um ssh e acessar a pasta &lt;code&gt;/var/Applications&lt;/code&gt;&lt;br /&gt;
 &amp;#8211; Agora voc&#xEA; vai dar um ls para ter certeza de que a aplica&#xE7;&#xE3;o que voc&#xEA; copiou esta la, ela esta la?&lt;br /&gt;
 &amp;#8211; Se sim, vamos agora criar uma &amp;#8220;assinatura fake&amp;#8221;, para isso voc&#xEA; vai usar o programinha ldid que gera uma assinatura fake na sua app: &lt;code&gt;ldid -s sua_aplicacao.app&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;7) Terminadas as verifica&#xE7;&#xF5;es e assinaturas, hora de acessar a pasta &lt;code&gt;/Applications&lt;/code&gt;, verificando o conte&#xFA;do dela, voc&#xEA; vai perceber que existem varias aplica&#xE7;&#xF5;es nessa pasta, agora e hora de acrescentar a sua tamb&#xE9;m, ai voc&#xEA; pode me perguntar, mas Alan? A gente j&#xE1; n&#xE3;o copiou para o &lt;code&gt;/var/Applications&lt;/code&gt;, e eu te respondo, sim, porem agora e que vem o pulo-do-gato, lembra das aulinhas de linux/unix??? do tal do ln para criar link simb&#xF3;lico ??? Exatamente ele que voc&#xEA; vai utilizar agora: &lt;code&gt;ln -sf /var/Applications/sua_aplicacao.app . &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pronto, ele vai criar um link simb&#xF3;lico para a sua aplica&#xE7;&#xE3;o no diret&#xF3;rio de leitura do springboard. Quem e o springboard??? E o cara que gerencia todas as suas aplica&#xE7;&#xF5;es ai no seu &amp;#8220;mobile desktop&amp;#8221;&amp;#8230; &lt;/p&gt;
&lt;p&gt;8 ) Mas Alan, o que acontece que a minha aplica&#xE7;&#xE3;o ainda n&#xE3;o apareceu no springboard??? E que agora tem uma coisinha b&#xE1;sica, o springboard n&#xE3;o e plug-in-play, ou seja, voc&#xEA; tem que dar um restart no menino, existem 2 formas de se fazer isso, &lt;/p&gt;
&lt;p&gt;- Ou voc&#xEA; instala uma app que faz isso, eu por exemplo utilizo o Respring que se encontra no cydia&lt;br /&gt;
- Ou ent&#xE3;o voc&#xEA; reboota o seu iPhone/iPod.&lt;/p&gt;
&lt;p&gt;9) Apos o restart, voc&#xEA; vai perceber que a sua aplica&#xE7;&#xE3;o aparece na tela e agora e s&#xF3; executar!!!! &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;E com esses passos, enfim, agora da testar a aplica&#xE7;&#xE3;o que voc&#xEA; acabou de desenvolver em um aparelho com jailbreak efetuado e sem pagar pelo certificado da apple&amp;#8230; &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Ta vendo s&#xF3;??? Se voc&#xEA; n&#xE3;o fosse tao p&#xE3;o-duro, compraria o certificado da Apple por apenas 99 doletas e n&#xE3;o passaria por esse parto, pois o XCode faria tudo para voc&#xEA;, s&#xF3; faltaria o cafezinho b&#xE1;sico&amp;#8230; &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Espero ter ajudado na sua divers&#xE3;o, lembrando que qualquer falha de sua parte, n&#xE3;o e de minha responsabilidade, &lt;/p&gt;
&lt;p&gt;Abra&#xE7;os e ate a pr&#xF3;xima !!!&lt;/p&gt;
  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/66/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/66/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/66/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/66/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/66/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/66/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/66/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/66/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/66/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/66/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=66&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 14 Jan 2009 16:09:18 GMT</pubDate>
      <title>Visualizing Floats</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=49</link>
      <guid>http://jumpi.wordpress.com/2009/01/14/visualizing-floats/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Continuing the posts about data types and your characteristics, I read a nice article about Floating point numbers published by gamasutra:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.gamasutra.com/view/feature/1965/visualizing_floats.php?print=1" &gt;http://www.gamasutra.com/view/feature/1965/visualizing_floats&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See ya!!!&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/63/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/63/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/63/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/63/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/63/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/63/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/63/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/63/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/63/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/63/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=63&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 7 Jan 2009 14:07:47 GMT</pubDate>
      <title>Numeros complexos vs NaN (Not-a-Number)</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=48</link>
      <guid>http://jumpi.wordpress.com/2009/01/06/numeros-complexos-vs-nan-not-a-number/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Lendo uma &lt;a href="http://groups.google.com/group/ccppbrasil/browse_thread/thread/e5363e2c6db650f" &gt;thread&lt;/a&gt; em uma &lt;a href="http://groups.google.com/group/ccppbrasil" &gt;lista de discuss&#xE3;o&lt;/a&gt; que acompanho, surgiu uma duvida bem interessante sobre NaN e em uma das mensagens me deparei com a seguinte afirma&#xE7;&#xE3;o.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;N&#xFA;meros imagin&#xE1;rios s&#xE3;o um exemplo, sqrt (-1) retorna NaN. Outro &#xE9; dividir zero ou +/- infinito por zero.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Vamos analisar essa frase come&#xE7;ando pelo fim.&lt;/p&gt;
&lt;p&gt;De acordo com a IEEE 754, se eu tenho uma vari&#xE1;vel a = 0 e divido a mesma por 0, vai dar um NaN, porem se eu tenho em a um valor positivo que tende ao infinito, o valor vai ser positivo e se o valor de a for negativo, logo essa divis&#xE3;o vai resultar em um valor negativo. &lt;/p&gt;
&lt;p&gt;Ok, at&#xE9; aqui nenhuma obje&#xE7;&#xE3;o, tudo nos conformes. Por&#xE9;m, por&#xE9;m&amp;#8230; agora vamos a primeira afirma&#xE7;&#xE3;o.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#8220;N&#xFA;meros imagin&#xE1;rios s&#xE3;o um exemplo, sqrt (-1) retorna NaN.&amp;#8221;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ooopss&amp;#8230;. Sinto que houve um equivoco ai, pois n&#xE3;o foi definido pelo autor da frase em qual conjunto num&#xE9;rico ele est&#xE1; trabalhando, penso que ele se limitou a qualquer conjunto no qual sqrt(-1) realmente n&#xE3;o tem solu&#xE7;&#xE3;o (Q, R, Z&amp;#8230;), por&#xE9;m, existe tamb&#xE9;m o conjunto dos complexos e nesse conjunto, existe solu&#xE7;&#xE3;o para sqrt(-1). E vamos provar isso utilizando o nosso velho amigo C++, pois ele possui uma classe/template por padr&#xE3;o que trabalha com n&#xFA;meros complexos usando tipos de ponto flutuante, ou seja, utilizando o nosso amigo, podemos provar que existe sim solu&#xE7;&#xE3;o para sqrt(-1) no campo dos complexos&lt;/p&gt;
&lt;p&gt;Listarei logo abaixo um c&#xF3;digo simples que demonstra a nossa teoria em C++, ou seja, provar que existe sim resposta para sqrt(-1) e que ela &#xE9; diferente de NaN&lt;/p&gt;
&lt;p&gt;(jumpi@Painkiller:~)$ vi complex.cpp &lt;/p&gt;
&lt;pre name="code" class="cpp"&gt;

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;complex&amp;gt;

using namespace std;

int main(int argc, char **argv)
{
    complex&amp;lt;float&amp;gt; res = sqrt(complex&amp;lt;float&amp;gt;(-1));
    cout &amp;lt;&amp;lt; res &amp;lt;&amp;lt; endl;
    return(0);
}
&lt;/pre&gt;
&lt;p&gt;(jumpi@Painkiller:~)$ ./complex&lt;br /&gt;
(0,1)&lt;br /&gt;
(jumpi@Painkiller:~)$ &lt;/p&gt;
&lt;p&gt;Antes recapitulando, a forma geral de um numero complexo no seu plano obedece a forma a + b*i, onde a representa o numero real e b um numero imagin&#xE1;rio, ou seja, o retorno do tipo complex em C++ retorna as coordenadas de um numero complexo no plano. &lt;/p&gt;
&lt;p&gt;No nosso caso, substituindo na f&#xF3;rmula, teremos a + b*i == 0 + 1*i que equivale a i.&lt;/p&gt;
&lt;p&gt;Vamos fazer o teste para confirmar?? Utilizando o google, sim&amp;#8230; o google, pois a busca serve como uma excelente calculadora e vai nos ajudar com a prova, digite sqrt(-1), qual a resposta??? Sim&amp;#8230; sim&amp;#8230; sqrt(-1) equivale a i, mesmo resultado apresentado pelo nosso simples programinha em C++. &lt;/p&gt;
&lt;p&gt;Q.E.D.&lt;/p&gt;
&lt;p&gt;Logo, sqrt(-1) = i e n&#xE3;o um NaN conforme foi dito na thread.&lt;/p&gt;
&lt;p&gt;Essa foi apenas uma demonstra&#xE7;&#xE3;o de que n&#xE3;o podemos esquecer da base matem&#xE1;tica para formular uma resposta, principalmente no que envolve recursos que podem ser representados pela linguagem. &lt;/p&gt;
&lt;p&gt;Maiores informa&#xE7;&#xF5;es podem ser encontradas nos seguintes sites: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://mathworld.wolfram.com/ComplexNumber.html" &gt;Wolfram Complex Number&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://mathworld.wolfram.com/ComplexPlane.html" &gt;Wolfram Complex Plane&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.cplusplus.com/reference/std/complex/complex/" &gt;C plus plus complex reference&lt;/a&gt;&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/55/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/55/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/55/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/55/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/55/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/55/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/55/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/55/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/55/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/55/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=55&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 7 Jan 2009 14:07:47 GMT</pubDate>
      <title>When SHA-3 collides</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=47</link>
      <guid>http://jumpi.wordpress.com/2008/11/06/when-sha-3-collides/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Caramba&amp;#8230; &lt;/p&gt;
&lt;p&gt;N&#xE3;o sei se todos os leitores sabem, por&#xE9;m, o NIST esta fazendo um campeonato para promover um novo algoritmo de hash para incorporar o padr&#xE3;o SHA-3 e j&#xE1; temos algumas submiss&#xF5;es de algoritmos de hash, para ser mais exato, 64 submiss&#xF5;es ate o presente momento, sendo que algumas das submiss&#xF5;es podem ser encontradas &lt;a href="http://ehash.iaik.tugraz.at/index.php/The_SHA-3_Zoo" &gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bizarro isso, em 2 papers/prototipos postados para o novo padr&#xE3;o SHA-3, 2 j&#xE1; foram quebrados&amp;#8230; isso mesmo!! Colis&#xF5;es j&#xE1; foram encontradas&amp;#8230; no Sg&#xE0;il e no WaMM e o mais engra&#xE7;ado &#xE9; que no caso do Sg&#xE0;il, foi o pr&#xF3;prio autor que conseguiu detectar a colis&#xE3;o no hash.&lt;/p&gt;
&lt;p&gt;Seguem os links para quem estiver interessado em mais detalhes:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://web.mit.edu/dwilson/www/hash/wamm.html" &gt;WaMM Collision&lt;/a&gt; e &lt;a href="http://www.allicient.co.uk/2008/11/05/aww-psh/" &gt;Sg&#xE0;il Collision&lt;/a&gt; e as respectivas propostas do &lt;a href="http://washburnresearch.org/cryptography/index.htm" &gt;WaMM&lt;/a&gt; e do &lt;a href="http://www.allicient.co.uk/files/sgail/" &gt;Sg&#xE0;il&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para quem curte, vale a pena dar uma olhada nas propostas, at&#xE9; mesmo nas que j&#xE1; foram quebradas e em seus prot&#xF3;tipos de implementa&#xE7;&#xE3;o.&lt;/p&gt;
&lt;p&gt;Ate a pr&#xF3;xima&amp;#8230; &lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/51/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/51/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/51/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/51/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/51/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/51/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/51/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/51/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/51/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/51/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=51&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 7 Jan 2009 14:07:47 GMT</pubDate>
      <title>Atalhos no MacOS X</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=46</link>
      <guid>http://jumpi.wordpress.com/2008/10/21/atalhos-no-macos-x/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Hail pessoas,&lt;/p&gt;
&lt;p&gt;Conforme prometido, estou voltando a postar aqui novamente&lt;/p&gt;
&lt;p&gt;Dessa vez o post vem para abrir uma nova se&#xE7;&#xE3;o em meu blogue, que e a se&#xE7;&#xE3;o apple e vem com algo que acredito que assim como tem enorme utilidade para mim, tamb&#xE9;m vai ter para outras pessoas.&lt;/p&gt;
&lt;p&gt;Bem, vamos ao que interessa, todos que mexemos constantemente com o computador, adoramos atalhos de teclado, pois eles otimizam e facilitam muito a vida da gente quando aprendemos, correto??? Enfim&amp;#8230; estarei aqui postando alguns atalhos que acredito que sejam uteis no MacOS (sistema que eu utilizo no dia-a-dia)&lt;/p&gt;
&lt;p&gt;Enfim, vamos as explica&#xE7;&#xF5;es b&#xE1;sicas, e que tinha muitas duvidas no comeco de tudo&lt;/p&gt;
&lt;p&gt;&#x2318; = Command, e como se fosse a tecla windows do seu PC, sim&amp;#8230; aquela com o desenho da janelinha.&lt;br /&gt;
&#x2325; = Option ou Alt.&lt;br /&gt;
&#x21E7; = Shift&lt;br /&gt;
^ = Control&lt;/p&gt;
&lt;p&gt;E agora segue a lista com os atalhos b&#xE1;sicos e que eu frequentemente utilizo no meu dia-a-dia.&lt;/p&gt;
&lt;p&gt;&#x2318; + Q = Sai da aplica&#xE7;&#xE3;o&lt;br /&gt;
&#x2028;&#x2318; + W = Fecha a janela&lt;br /&gt;
&#x2318; + O = Abre um arquivo&#x2028;&lt;br /&gt;
&#x2318; + P = Imprime&lt;br /&gt;
&#x2028;&#x2318; + C = Copia (o CTRL+C do mac)&lt;br /&gt;
&#x2028;&#x2318; + V = Cola (o CTRL+V do mac)&lt;br /&gt;
&#x2028;&#x2318; + X = Recorta&lt;br /&gt;
&#x2028;&#x2318; + S = Salva&lt;br /&gt;
&#x2028;&#x2318; + Z = Desfaz a ultima altera&#xE7;&#xE3;o&lt;br /&gt;
&#x2318; + A = Seleciona todo o texto&lt;br /&gt;
&#x2028;&#x2318; + Y or Space = Quicklook&#x2028;&lt;br /&gt;
&#x2318; + Tab = Alterna entre as janelas&lt;/p&gt;
&lt;p&gt;E para completar esse post, criei uma lista simples, porem usual em pdf a partir desse &lt;a href="http://www.mactricksandtips.com/2008/10/mac-101-56-useful-mac-shortcuts.html" &gt;post&lt;/a&gt; que estarei disponibilizando &lt;a href="http://rapidshare.com/files/156135647/macosxshortcuts.pdf.html" &gt;aqui no rapidshare&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ate a pr&#xF3;xima!!! &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/48/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/48/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/48/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/48/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/48/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/48/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/48/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/48/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/48/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/48/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=48&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 7 Jan 2009 14:07:47 GMT</pubDate>
      <title>Quinto Encontro de Programadores C/C++ Brasil</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=45</link>
      <guid>http://jumpi.wordpress.com/2008/10/06/quinto-encontro-de-programadores-cc-brasil/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Ol&#xE1; pessoas,&lt;/p&gt;
&lt;p&gt;Ap&#xF3;s muito tempo ausente, resolvi atualizar esse blogue&amp;#8230;&lt;/p&gt;
&lt;p&gt;Bem&amp;#8230; posso dizer que foi uma aus&#xEA;ncia significativa, afinal de contas, aconteceram diversas coisas que n&#xE3;o me deixaram ter mais tempo para atualizar esse blogue&amp;#8230;&lt;/p&gt;
&lt;p&gt;Enfim&amp;#8230; vamos deixar de &amp;#8220;chorumelas&amp;#8221; (ser&#xE1; que e assim que escreve isso???) e vamos ao que interessa&amp;#8230;&lt;/p&gt;
&lt;p&gt;Ontem tive um dia bem divertido, ao lado de grandes amigos programadores de C e C++, sim&amp;#8230; fui em um evento muito legal na Microsoft, onde s&#xF3; tinham caras muito bons e pessoas de alt&#xED;ssimo n&#xED;vel palestrando e nesse post irei fazer um pequeno resumo do que foi o nosso encontro.&lt;/p&gt;
&lt;p&gt;Logo pela manha, tivemos a abertura com o Otavio Pecego da Microsoft que deu uma boa introdu&#xE7;&#xE3;o sobre a sua experi&#xEA;ncia e seu contato inicial com C e C++ e foi ilustrando toda a sua caminhada com os livros que foram importantes na jornada&amp;#8230; inclusive, ate peguei algumas sugest&#xF5;es como o livro do &lt;a href="http://www.amazon.com/Large-Scale-Software-Addison-Wesley-Professional-Computing/dp/0201633620/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1223250686&amp;amp;sr=1-1" &gt;John Lakos&lt;/a&gt; e o &lt;a href="http://www.amazon.com/C-Standard-Template-Library/dp/0134376331/ref=sr_1_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1223250730&amp;amp;sr=1-3" &gt;livro do Plauger de STL&lt;/a&gt; que eu n&#xE3;o conhecia, tenho o &lt;a href="http://www.amazon.com/Standard-C-Library-P-J-Plauger/dp/0131315099/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1223250730&amp;amp;sr=1-1" &gt;C Standard Library&lt;/a&gt; que gosto muito&amp;#8230; &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Em seguida, foi a vez do Rodrigo Strauss, um velho conhecido da comunidade falar sobre as ferramentas utilizadas por ele para facilitar o processo de programa&#xE7;&#xE3;o e detec&#xE7;&#xE3;o de problemas, ele comentou desde as ferramentas da sysinternals ate o windbg, tirando os problemas que ocorreram com o microfone (dizem que foi sabotagem dos programadores C#) a palestra foi muito produtiva, principalmente para o pessoal que era mais iniciante.&lt;/p&gt;
&lt;p&gt;Depois tivemos uma verdadeira aula de Concepts com o Leandro, enfim, posso dizer que j&#xE1; havia tentado ler o &lt;a href="http://www.amazon.com/Modern-Design-Programming-Patterns-Depth/dp/0201704315/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1223250636&amp;amp;sr=1-1" &gt;livro do Alexandrescu&lt;/a&gt; e quando vi isso, fiquei meio aterrorizado, porem, como o tempo era curto, n&#xE3;o deu para o palestrante demonstrar tudo o que sabia sobre o assunto, enfim, percebi que preciso ler e dar uma pesquisada melhor nisso.&lt;/p&gt;
&lt;p&gt;Well&amp;#8230; hora do almo&#xE7;o&amp;#8230; e logo apos o mesmo, tivemos uma palestra bem diferente e interessante com o Felipe Almeida, que nos falou sobre Linguagens Embutidas em C++, confesso que a palestra foi bem interessante, porem, achei o exemplo meio que inusitado para a ferramenta especificada, mais enfim&amp;#8230; e bom saber que existe esse tipo de coisa na boost&amp;#8230;&lt;/p&gt;
&lt;p&gt;Depois foi a vez do &amp;#8220;meu irm&#xE3;o&amp;#8221; a.k.a. Fabio Galuppo dar uma palestra sobre C++ Nativo no Windows Vista e Server 2008 e mostrar coisas bem legais como NTFS Transacional e Thread Pools&amp;#8230; e claro, se tratando do nosso amigo Galuppo, n&#xE3;o poderia terminar sem o interop de C++, porem, um assunto que muito me interessa e que ele tratou na palestra e que me fez correr atr&#xE1;s das palestras do Gamefest, afinal, j&#xE1; tinha guardado o link aqui e n&#xE3;o tinha visto, foi o lance do PPL (Parallel Pattern Library) que e a nova lib de paralelismo que substitui a antiga TPL. Isso pareceu ser bem interessante&amp;#8230; &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;E para terminar o set de palestras com chave de ouro, foi a vez do nosso amigo e grande colaborador do grupo, Bas&#xED;lio Miranda falar sobre File Mapping no Windows em C++ e demonstrar exemplos interessantes sobre o assunto&amp;#8230; &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Em seguida, foi a vez dos lighting talks onde o Andre e o Lamar&#xE3;o falaram sobre os seus respectivos projetos em conjunto com a comunidade, sendo que o foco principal foi a otimiza&#xE7;&#xE3;o da pixman pelo Andr&#xE9; e a convoca&#xE7;&#xE3;o ao publico para trabalharmos em conjunto.&lt;/p&gt;
&lt;p&gt;Logo ap&#xF3;s, houveram os sorteios e dessa vez quem levou a premia&#xE7;&#xE3;o de ajuda a comunidade foi o Pedro Lamar&#xE3;o que ganhou o &lt;a href="http://www.amazon.com/More-Exceptional-Engineering-Programming-Depth/dp/020170434X" &gt;livro autografado do Sutter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;E apos isso, fomos ao bar para poder dialogar sobre o que mais gostamos e um fato curioso foi que pela primeira vez, apareceu uma garota na nossa ida ao bar&amp;#8230; sim!!! Para mostrar que nessa comunidade tamb&#xE9;m existem mulheres!!! Porem, o fato mais interessante foi que compareceram varias pessoas novas e as mulheres dessa vez estavam em um numero bem admir&#xE1;vel no evento, espero que aumente ainda mais e que as mulheres realmente mostrem a sua forca e parem com esses bla-bla-bla e autopromo&#xE7;&#xF5;es&amp;#8230; &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Enfim, que venha o pr&#xF3;ximo encontro&amp;#8230; que vai ser o encontro de Embarcados&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;See ya in the next event!!! &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/strong&gt;&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/45/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/45/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/45/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/45/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/45/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/45/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/45/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/45/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/45/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/45/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=45&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 7 Jan 2009 14:07:47 GMT</pubDate>
      <title>Mais Fibonacci: Usando Memoize com map em C++</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=44</link>
      <guid>http://jumpi.wordpress.com/2008/01/23/mais-fibonacci-usando-memoize-com-map-em-c/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;H&#xE1; alguns dias atr&#xE1;s, novamente em uma discuss&#xE3;o em um dos coffeetime que normalmente ocorrem na empresa, que por sinal s&#xE3;o muito produtivas, est&#xE1;vamos eu e mais &lt;a href="http://www.caloni.com.br/blog" target="_blank" title="Blog do Vandeco" &gt;dois&lt;/a&gt; &lt;a href="http://marcioandreyoliveira.blogspot.com" title="Blog do Tio" target="_blank" &gt;amigos&lt;/a&gt; programadores discutindo sobre a t&#xE9;cnica de &lt;a href="http://en.wikipedia.org/wiki/Tail_recursion" title="Artigo sobre Tail Recursion" target="_blank" &gt;tail recursion&lt;/a&gt;, que ajuda bastante na otimiza&#xE7;&#xE3;o de fun&#xE7;&#xF5;es recursivas, porem, estava matutando e me lembrei que existe uma outra t&#xE9;cnica, tamb&#xE9;m muito utilizada, principalmente em programas que exigem recursividade e implementam &lt;a href="http://en.wikipedia.org/wiki/Dynamic_programming" title="Artigo sobre Programa&#xE7;&#xE3;o Din&#xE2;mica" &gt;Programa&#xE7;&#xE3;o Din&#xE2;mica&lt;/a&gt;, que &#xE9; a t&#xE9;cnica do &lt;a href="http://en.wikipedia.org/wiki/Memoization" title="Artigo sobre Memoization" &gt;&amp;#8220;Memoization&amp;#8221;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mais, resumindo, o que seria esse tal de memoization??? como a pr&#xF3;pria palavra diz, memoize e um termo que deriva do latim memorandum, ou seja, relembrando, exatamente como essa t&#xE9;cnica faz, ela armazena em cache as chamadas de fun&#xE7;&#xE3;o que s&#xE3;o repetidas em varias vezes, economizando assim um tempo precioso no acesso dessas informa&#xE7;&#xF5;es.&lt;/p&gt;
&lt;p&gt;Exemplos cl&#xE1;ssicos de demonstra&#xE7;&#xE3;o dessa t&#xE9;cnica s&#xE3;o as implementa&#xE7;&#xF5;es recursivas de Fibonacci e calculo de fatorial, no nosso caso, iremos utilizar Fibonacci, por estarmos mais familiarizados com essa fun&#xE7;&#xE3;o nesse humilde blog.&lt;/p&gt;
&lt;p&gt;Suponha, que temos uma implementa&#xE7;&#xE3;o recursiva de Fibonacci:&lt;/p&gt;
&lt;pre&gt;int fib( int n )
{
   if ( n &amp;lt;2 )
     return 1;
   else
     return fib( n - 1 ) + fib( n - 2 );
}&lt;/pre&gt;
&lt;p&gt;Implementaremos o memoization nessa fun&#xE7;&#xE3;o, utilizando uma implementa&#xE7;&#xE3;o com map da seguinte maneira:&lt;/p&gt;
&lt;pre&gt;std::map&amp;lt;int,int&amp;gt; resultado;
int fib( int n )
{
  if ( n == 0 || n == 1 )
    return 1;
  std::hash_map&amp;lt;int,int&amp;gt;::iterator it = resultado.find( n );
  if ( it != resultado.end() )
    return it.second;
  else
    return resultado[ n ] = fib( n -1 ) + fib( n - 2 );
}&lt;/pre&gt;
&lt;p&gt;Ou seja, na primeira vez que esse c&#xF3;digo for executado, por exemplo, para um fib(4), ele vai ter que calcular respectivamente o fib(2) e fib(3), porem, quando eu chamar um fib(5), como os resultados anteriores ja estar&#xE3;o armazenados no map e o valor ser&#xE1; retornado sem nenhum calculo adicional, e com isso, teremos um bom ganho no tempo de execu&#xE7;&#xE3;o.&lt;/p&gt;
&lt;p&gt;Esse pode ser um recurso muito &#xFA;til quando estamos lidando com algoritmos que lidam com recursividade, onde a programa&#xE7;&#xE3;o din&#xE2;mica pode ser aplicada, como por exemplo, uma multiplica&#xE7;&#xE3;o de cadeia de matrizes, um alinhamento de sequ&#xEA;ncia ou ate mesmo um algoritmo de otimiza&#xE7;&#xE3;o para busca em arvores bin&#xE1;rias.&lt;/p&gt;
&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jumpi.wordpress.com/40/" /&gt; &lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jumpi.wordpress.com/40/" /&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/40/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/40/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/40/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/40/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/40/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/40/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/40/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/40/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/40/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/40/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=40&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Fri, 11 Jan 2008 04:05:44 GMT</pubDate>
      <title>O Python e a sua misteriosa otimiza&#xE7;&#xE3;o de chamada de fun&#xE7;&#xE3;o</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=43</link>
      <guid>http://jumpi.wordpress.com/2008/01/11/o-python-e-a-sua-misteriosa-otimizacao-de-chamada-de-funcao/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Continuando a saga de Fibonacci, eu e meu amigo &lt;a href="http://marcioandreyoliveira.blogspot.com" title="Marcio's Blog" target="_blank" &gt;Marcio&lt;/a&gt; fizemos algumas corre&#xE7;&#xF5;es e tcharam&amp;#8230; devo reconhecer&amp;#8230; o script python quando faz chamada de fun&#xE7;&#xE3;o consegue ser incrivelmente mais r&#xE1;pido que o script perl, tamb&#xE9;m fazendo chamada de fun&#xE7;&#xE3;o. Porem descobrimos uma coisa muito bizarra e que nos chamou a aten&#xE7;&#xE3;o enquanto realiz&#xE1;vamos os testes e por isso foco a minha aten&#xE7;&#xE3;o em rela&#xE7;&#xE3;o ao teste feito com python&amp;#8230;&lt;/p&gt;
&lt;p&gt;Rodando o seguinte c&#xF3;digo, feito inline em python:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
for i in range(1000000):&lt;br /&gt;
a, b = 0, 1&lt;br /&gt;
for j in range(71):&lt;br /&gt;
a, b = b, a+b&lt;br /&gt;
return b&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Profiling do c&#xF3;digo com chamada de fun&#xE7;&#xE3;o:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
alan@desenv:~$ python -m cProfile fibo.py&lt;br /&gt;
1000005 function calls in 86.083 CPU seconds&lt;br /&gt;
Ordered by: standard name&lt;br /&gt;
ncalls  tottime  percall  cumtime  percall filename:lineno(function)&lt;br /&gt;
1    0.000    0.000   86.083   86.083 :1()&lt;br /&gt;
1   57.280   57.280   86.083   86.083 fibo.py:7()&lt;br /&gt;
1    0.000    0.000   86.083   86.083 {execfile}&lt;br /&gt;
1    0.000    0.000    0.000    0.000 {method &amp;#8216;disable&amp;#8217; of &amp;#8216;_lsprof.Profiler&amp;#8217; objects}&lt;br /&gt;
1000001   28.802    0.000   28.802    0.000 {range}&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;E agora o mesmo c&#xF3;digo, s&#xF3; que realizando chamada de fun&#xE7;&#xE3;o:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
import sys&lt;br /&gt;
#import psyco&lt;br /&gt;
def fib(n):&lt;br /&gt;
a, b = 0, 1&lt;br /&gt;
for j in range(n):&lt;br /&gt;
a, b = b, a+b&lt;br /&gt;
return b&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;x = int(sys.argv[1])&lt;br /&gt;
y = int(sys.argv[2])&lt;br /&gt;
for i in range(x):&lt;br /&gt;
fib(y)&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Profiling do c&#xF3;digo com chamada de fun&#xE7;&#xE3;o:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
alan@desenv:~$ python -m cProfile fibo.py&lt;br /&gt;
2000005 function calls in 35.174 CPU seconds&lt;br /&gt;
Ordered by: standard name&lt;br /&gt;
ncalls  tottime  percall  cumtime  percall filename:lineno(function)&lt;br /&gt;
1    0.000    0.000   35.174   35.174 :1()&lt;br /&gt;
1    4.785    4.785   35.173   35.173 fibo.py:6()&lt;br /&gt;
1000000   25.671    0.000   30.327    0.000 fibo.py:6(fib)&lt;br /&gt;
1    0.000    0.000   35.174   35.174 {execfile}&lt;br /&gt;
1    0.000    0.000    0.000    0.000 {method &amp;#8216;disable&amp;#8217; of &amp;#8216;_lsprof.Profiler&amp;#8217; objects}&lt;br /&gt;
1000001    4.718    0.000    4.718    0.000 {range}&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ou seja, tirando o tempo de overhead do profile, o programa que realiza a chamada de fun&#xE7;&#xE3;o, consegue ser incrivelmente mais r&#xE1;pido que o programa inline, mesmo efetuando mais chamadas.&lt;/p&gt;
&lt;p&gt;Bem&amp;#8230; achei isso muito bizarro, sendo que, teoricamente o esperado era que o inline fosse mais r&#xE1;pido. Bem, se algu&#xE9;m puder me explicar isso eu agrade&#xE7;o bastante, pois a &#xFA;nica conclus&#xE3;o que consegui tirar ate aqui, e que o python, mesmo sem usar otimizadores, vide &lt;a href="http://psyco.sourceforge.net/" title="Python JIT" target="_blank" &gt;psyco&lt;/a&gt;, j&#xE1; tem uma otimiza&#xE7;&#xE3;o natural de fun&#xE7;&#xF5;es, o que torna as chamadas de fun&#xE7;&#xE3;o extremamente r&#xE1;pidas, porem eu queria entender essa otimiza&#xE7;&#xE3;o de chamada de fun&#xE7;&#xF5;es, pois gostei bastante e fiquei interessado em saber como tal feature funciona.&lt;/p&gt;
&lt;p&gt;E agora a minha conclus&#xE3;o em rela&#xE7;&#xE3;o ao que eu aprendi com esse teste ate aqui, se voc&#xEA; precisa fazer um programa bem r&#xE1;pido para testar qualquer coisa, use perl, resolve na maioria dos casos, agora se voc&#xEA; precisa de um teste mais elaborado, com chamada de fun&#xE7;&#xE3;o, vou come&#xE7;ar a pensar em usar o python&amp;#8230;&lt;/p&gt;
&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jumpi.wordpress.com/39/" /&gt; &lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jumpi.wordpress.com/39/" /&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/39/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/39/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/39/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/39/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/39/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/39/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/39/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/39/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/39/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/39/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=39&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 9 Jan 2008 04:09:03 GMT</pubDate>
      <title>Fibonacci Series Test (Perl and Python)</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=42</link>
      <guid>http://jumpi.wordpress.com/2008/01/09/fibonacci-series-test-perl-and-python/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Post in portuguese about my tests with Fibonacci Series using perl and python&amp;#8230;&lt;/p&gt;
&lt;p&gt;Esses dias, para ser mais exato, na segunda-feira, o meu colega de trabalho &lt;a href="http://marcioandreyoliveira.blogspot.com" &gt;marcio&lt;/a&gt; a.k.a. tio estava falando sobre a sua escolha para criar um projeto de site que ele esta fazendo e para testar ele implementou o algor&#xED;timo de Fibonacci usando C, C++, Ruby e Python e mediu o tempo utilizando o comando time&amp;#8230; C e C++ entraram na lista so para ele poder criar um par&#xE2;metro. E ent&#xE3;o ele decidiu escolher pelo python devido ao tempo, porem, ele esqueceu do nosso velho amigo Perl e eu disse a ele que perl executava o mesmo teste mais r&#xE1;pido que python e ele me desafiou, ou seja, estou fazendo esse teste para demonstrar que o nosso velho amigo perl pode ser bom, lembrando que n&#xE3;o sou um bom programador python, mais tentei deixar o c&#xF3;digo o mais pr&#xF3;ximo poss&#xED;vel entre ambas as linguagens para que nenhum &lt;a href="http://www.google.com.br/search?q=boi+corneta+site%3Asualingua.com.br" &gt;boi-corneta&lt;/a&gt; (como diria o meu amigo &lt;a href="http://www.caloni.com.br/blog" &gt;Caloni&lt;/a&gt;, gostei da express&#xE3;o, por isso a utilizei aqui tamb&#xE9;m) venha se espantar aqui&amp;#8230;&lt;/p&gt;
&lt;p&gt;Bem&amp;#8230; para a realiza&#xE7;&#xE3;o desse teste, utilizei o meu laptop, um macbook com perl 5.8.8 e python 2.5.1 como podem ver abaixo:&lt;/p&gt;
&lt;pre&gt;[jumpi@Painkiller]~/Sources: perl -v&lt;/pre&gt;
&lt;pre&gt;This is perl, v5.8.8 built for darwin-thread-multi-2level (with 1 registered patch, see perl -V for more detail)&lt;/pre&gt;
&lt;pre&gt;Copyright 1987-2006, Larry Wall&lt;/pre&gt;
&lt;pre&gt;[jumpi@Painkiller]~/Sources: python -V Python 2.5.1&lt;/pre&gt;
&lt;p&gt;Para fazer os testes, utilizei uma vers&#xE3;o iterativa do algor&#xED;timo de Fibonacci (afinal de contas, poderia apelar para a recursiva, porem achei melhor utilizar essa para o teste), segue abaixo o c&#xF3;digo:&lt;/p&gt;
&lt;p&gt;Em perl:&lt;/p&gt;
&lt;pre&gt;#!/usr/bin/perl  use strict; my $n = shift; my ($a,$b)=(1,2);

print "$a\n$b\n";

for(1..$n-2) {

  ($a,$b) = ($b,$a+$b);

  print "$b\n"

}&lt;/pre&gt;
&lt;p&gt;Em python:&lt;/p&gt;
&lt;pre&gt;#!/usr/bin/python import sys def fib(n):

 a, b = 0, 1

 for i in range(n):

 	print b

 	a, b = b, a+b n = int(sys.argv[1])

fib(n)&lt;/pre&gt;
&lt;p&gt;E executei ambos os c&#xF3;digos, fazendo 10000 itera&#xE7;&#xF5;es e medindo o tempo usando o comando time, onde obtive o seguinte resultado:&lt;/p&gt;
&lt;p&gt;Em perl:&lt;/p&gt;
&lt;pre&gt;real	0m0.188s

user	0m0.054s

sys	0m0.047s&lt;/pre&gt;
&lt;p&gt;Em python:&lt;/p&gt;
&lt;pre&gt;real	0m10.778s

user	0m8.104s

sys	0m0.231s&lt;/pre&gt;
&lt;p&gt;Well&amp;#8230; ai esta a prova, pelo que posso ver o nosso velho amigo rabugento perl terminou a sua tarefa em um tempo menor que o python, pelo que posso enxergar, 10x mais r&#xE1;pido???&lt;/p&gt;
&lt;p&gt;Brincadeiras a parte, atrav&#xE9;s desse teste simples, podemos perceber que o perl, mesmo estando ultrapassado na vis&#xE3;o de muitos, ainda executa muito bem o servi&#xE7;o, logico que poder&#xED;amos utilizar n t&#xE9;cnicas em ambas as linguagens. Porem, como eu disse no principio, tentei simplificar ao m&#xE1;ximo para n&#xE3;o criar vantagens para nenhum dos lados.&lt;/p&gt;
&lt;p&gt;Hey tio, esse post vai em sua homenagem&amp;#8230; se quiser, te ajudo a utilizar perl com catalyst para criar o site&amp;#8230;&lt;/p&gt;
&lt;p&gt;Brincadeirinha&amp;#8230; ;D&lt;/p&gt;
&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jumpi.wordpress.com/37/" /&gt; &lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jumpi.wordpress.com/37/" /&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/37/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/37/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/37/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/37/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/37/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/37/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/37/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/37/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/37/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/37/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=37&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Sun, 6 Jan 2008 21:08:24 GMT</pubDate>
      <title>The Practice of Perl II</title>
      <link>http://www.advogato.org/person/acs/diary.html?start=41</link>
      <guid>http://jumpi.wordpress.com/2008/01/06/the-practice-of-perl-ii/</guid>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Upon requesting made and continuing my posts about perl practicality, show here a very elaborated code, extract from classic book that I have reading again, Pike &amp;amp; Kerninghan Practice of Programming.&lt;/p&gt;
&lt;p&gt;Yes, this book have a very interesting example of Markov Chains in perl.&lt;/p&gt;
&lt;p&gt;For those that dont knowing about Markov Chains, this is a particular case in stochastic process, where previous states are irrelevant for prediction of following states, since that actual state is knowing. This technique is very used for generate random text, as in the book example, but, the author uses only cases that envolve two-word prefixes, for test effects.&lt;/p&gt;
&lt;p&gt;The code used in the example, written in perl language:&lt;/p&gt;
&lt;p&gt;$MAXGEN = 10000;&lt;br /&gt;
$NONWORD = &amp;#8220;\n&amp;#8221;;&lt;br /&gt;
$wl = $w2 = $NONWORD;&lt;br /&gt;
while (&amp;lt;&amp;gt;) {&lt;br /&gt;
foreach (split) {&lt;br /&gt;
push(@{$statetab{$w1}{$w2}}, $_);&lt;br /&gt;
($w1, $w2) = ($w2, $_);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
push(@($statetab{$w1}{$w2}}, $NONWORD);&lt;br /&gt;
$w1 = $w2 = $NONWORD;&lt;br /&gt;
for ($i = 0; $i &amp;lt; $MAXGEN; $i++) {&lt;br /&gt;
$suf = $statetab{$w1}{$w2};&lt;br /&gt;
$r = int(rand @$suf);&lt;br /&gt;
exit if(($t = $suf-&amp;gt;[$r]) eq $NONWORD);&lt;br /&gt;
print &amp;#8220;$t\n&amp;#8221;;&lt;br /&gt;
($w1, $w2) = ($w2, $t);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;And more impressive is what the result is make of simple and rapid form, very rapid, in the final of chapter has a performance table where perl losing only for C implementation, other implementations are written in Java, C++/STL/Deque, C++/STL/List and AWK, being that have 150 lines of code in C versus only 18 in perl.&lt;/p&gt;
&lt;p&gt;Well, I dont make apologies to perl, because I love C too, but, as the author says and define in the final of paragraph, scripting languages (perl, in this case) are a good choice for experimental programming and making prototypes, and I conclude, for rapid tasks and tests, perl is again language of my choice.&lt;/p&gt;
&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jumpi.wordpress.com/36/" /&gt; &lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jumpi.wordpress.com/36/" /&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jumpi.wordpress.com/36/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jumpi.wordpress.com/36/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jumpi.wordpress.com/36/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jumpi.wordpress.com/36/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jumpi.wordpress.com/36/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jumpi.wordpress.com/36/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jumpi.wordpress.com/36/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jumpi.wordpress.com/36/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jumpi.wordpress.com/36/" &gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jumpi.wordpress.com/36/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jumpi.wordpress.com&amp;blog=658253&amp;post=36&amp;subd=jumpi&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
    </item>
  </channel>
</rss>

