<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Planeta PythonBrasil</title>
	<link rel="self" href="http://www.python.org.br/planet/atom.xml"/>
	<link href="http://www.python.org.br/planet/"/>
	<id>http://www.python.org.br/planet/atom.xml</id>
	<updated>2012-02-04T18:44:31+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<entry xml:lang="pt-br">
		<title type="html">Mailson Lira apresentando seu trabalho com OpenCv + python</title>
		<link href="http://pugpe.wordpress.com/2012/01/31/resumo-xviii-encontro-python-pernambuco/"/>
		<id>http://pugpe.wordpress.com/?p=830</id>
		<updated>2012-01-31T03:06:59+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225; pessoal,&lt;/p&gt;
&lt;p&gt;Neste &#250;ltimo s&#225;bado (28.01.2012) realizamos o primeiro encontro do ano de 2012: O&lt;strong&gt;&lt;a href=&quot;http://pug-pe.python.org.br/encontro/xviii/&quot;&gt; XVIII Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&lt;/a&gt;&lt;/strong&gt;. Este foi sediado no &lt;strong&gt;Anfiteatro do Centro de Inform&#225;tica da Universidade Federal de Pernambuco&lt;/strong&gt; com a presen&#231;a moderada de v&#225;rios membros e um novo p&#250;blico presente. Contamos com as palestras principais de T&#250;lio Caraciolo da Manifesto Games Studio, Marcel Caraciolo da Orygens e v&#225;rias palestras-rel&#226;mpago.&lt;/p&gt;
&lt;p&gt;Algumas fotos do p&#250;blico presente:&lt;/p&gt;
&lt;div id=&quot;attachment_835&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_132301.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-835&quot; title=&quot;P&#250;blico no Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_132301.jpg?w=300&amp;h=225&quot; alt=&quot;P&#250;blico no Encontro do PUG-PE&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;P&#250;blico no Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;div id=&quot;attachment_831&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_132346.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-831&quot; title=&quot;P&#250;blico no XVIII Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_132346.jpg?w=300&amp;h=225&quot; alt=&quot;P&#250;blico no XVIII Encontro do PUG-PE&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;P&#250;blico no XVIII Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Antes de come&#231;armos o resumo do evento, gostar&#237;amos de agradecer aos membros que ajudaram a organizar o evento, n&#227;o precisarei citar nomes, ent&#227;o todos que ajudaram ou contribu&#237;ram, muito obrigado! Quero destacar um agradecimento especial ao membro Renato Oliveira do Departamento Acad&#234;mico do CIN/UFPE que est&#225; fazendo um excelente trabalho divulgando as comunidades open-source em Pernambuco dentro do CIN, gra&#231;as ao D.A. pudemos realizar este encontro novamente no CIN/UFPE. E por fim aos nossos patrocinadores: as empresas Idealizza (@&lt;a href=&quot;http://twitter.com/idealizza&quot;&gt;idealizza&lt;/a&gt;), Orygens (@&lt;a href=&quot;http://twitter.com/orygens&quot;&gt;orygens&lt;/a&gt;) e a Hostech&#160;pelo apoio e ajuda de custos para os brindes e coffee-break! &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;A primeira palestra do dia foi ministrada por Marcel Caraciolo (@&lt;a href=&quot;http://twitter.com/marcelcaraciolo&quot;&gt;marcelcaraciolo&lt;/a&gt;) com a apresenta&#231;&#227;o intitucional &amp;#8220;O que &#233; o PUG-PE&amp;#8221;. Nesta palestra ele apresentou o grupo aos novos membros e tamb&#233;m apresentou algumas m&#233;tricas de uma enquete realizada em 2011 do perfil de desenvolvedores Python em Pernambuco. Vale a pena dar uma olhada nos slides da apresenta&#231;&#227;o para entender um pouco melhor o cen&#225;rio de Python em Pernambuco!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/palestra-institucional-pugpe&quot;&gt;Slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A pr&#243;xima palestra foi ministrada por T&#250;lio Caraciolo (@&lt;a href=&quot;http://twitter.com/tuliocaraciolo&quot;&gt;tuliocaraciolo&lt;/a&gt; ) que apresentou &amp;#8220;Como Python auxilia na constru&#231;&#227;o de jogos&amp;#8221;. &#160;Uma palestra muito boa, bem detalhada e inclusivo com c&#243;digo-fonte da palestra rs rs! &#160;Ele apresentou em detalhes como Python auxiliou na constru&#231;&#227;o de diversos jogos na sua empresa em especial nas atividades de manipula&#231;&#227;o de arquivos e de sistema operacional. Recomendo a todos a olharem com carinho sua palestra! E muitos podem entender como Python tamb&#233;m pode ser aplicado a jogos! Destaque &#224; constru&#231;&#227;o de bots no BattleField que &#233; em Python!!! &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt;  &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/tuliocaraciolo/manifesto-lectures-pug-pe-python-in-games&quot;&gt;Slides da Palestra de T&#250;lio&lt;/a&gt;&lt;/p&gt;

&lt;div id=&quot;attachment_836&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2012/01/2012-01-28-09-27-52.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-836&quot; title=&quot;T&#250;lio apresentando os jogos da Manifesto&quot; src=&quot;http://pugpe.files.wordpress.com/2012/01/2012-01-28-09-27-52.jpg?w=300&amp;h=225&quot; alt=&quot;T&#250;lio apresentando os jogos da Manifesto&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;T&#250;lio apresentando os jogos da Manifesto&lt;/p&gt;&lt;/div&gt;
&lt;div id=&quot;attachment_837&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2012/01/2012-01-28-09-38-19.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-837&quot; title=&quot;Python + Battlefield&quot; src=&quot;http://pugpe.files.wordpress.com/2012/01/2012-01-28-09-38-19.jpg?w=300&amp;h=225&quot; alt=&quot;Python + Battlefield&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Python + Battlefield&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;A pr&#243;xima palestra foi de Marcel Caraciolo (@&lt;a href=&quot;http://twitter.com/marcelcaraciolo&quot;&gt;marcelcaraciolo&lt;/a&gt;) que apresentou sobre processamento de linguagem natural com a ferramenta NLTK , em especial, como pr&#233;-processar e lidar com textos em l&#237;ngua portuguesa brasileira. Ele comentou passo -a-passo o fluxo de minera&#231;&#227;o de textos, com exemplos em classifica&#231;&#227;o de textos e por fim sua maior contribui&#231;&#227;o est&#225; na ajuda de um projeto com o grupo de l&#237;nguistica computacional da UFCE liderado pelo professor Leonel onde constroem um &#160;conjunto de ferramentas para tratamento e processamento em textos de l&#237;ngua portuguesa brasileira chamado Aelius Donatus, totalmente open-source!&lt;/p&gt;
&lt;div id=&quot;attachment_832&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_112131.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-832&quot; title=&quot;Marcel Caraciolo apresentando sobre NLP com Portugu&#234;s&quot; src=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_112131.jpg?w=300&amp;h=225&quot; alt=&quot;Marcel Caraciolo apresentando sobre NLP com Portugu&#234;s&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Marcel Caraciolo apresentando sobre NLP com Portugu&#234;s&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Slides em breve.&lt;/p&gt;
&lt;p&gt;Por fim a &#250;ltima parte do evento foi dedicada &#224;s palestras-rel&#226;mpago! Tivemos 5 palestras-rel&#226;mpago ao todo! A primeira foi sobre o sistema de cursos e treinamento de Python e suas aplica&#231;&#245;es &#224; dist&#226;ncia chamado PyCursos criado por Marcel Caraciolo e Gileno Filho. Eles fundaram este projeto como meio de ensinar e divulgar a linguagem Python por meio de uma plataforma de ensino &#224; dist&#226;ncia similar aos cursos on-line oferecidso nos mesmos modelos em Stanford. Nestes cursos o aluno poder&#225; assistir video-aulas em sua casa a qualquer hora e quantas vezes quiser at&#233; o final do curso e poder discutir por meio de foruns e resolver exercicios por meio de exercicios on-line e programa&#231;&#227;o! Atualmente est&#227;o acontecendo os cursos de Computa&#231;&#227;o Cient&#237;fica com Python e Desenvolvedor Python. A id&#233;ia &#233; lan&#231;ar mais cursos durante o semestre!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/pycursos-cursos-treinamento-com-python&quot;&gt;Slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A pr&#243;xima palestra foi ministrada por Jonas Xavier, estudante do IFPE, que falou sobre o seu trabalho com a Wikipedia em um projeto open-source sobre minera&#231;&#227;o de dados. &#160;Ele fala sobre seu trabalho junto &#224; organiza&#231;&#227;o, &#160;o status atual e como outros podem contribuir nesta &#225;rea de minera&#231;&#227;o com textos da Wikipedia.&lt;/p&gt;
&lt;div id=&quot;attachment_833&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_121835.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-833&quot; title=&quot;Jonas apresentando seu trabalho junto ao Wikipedia&quot; src=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_121835.jpg?w=300&amp;h=225&quot; alt=&quot;Jonas apresentando seu trabalho junto ao Wikipedia&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Jonas apresentando seu trabalho junto ao Wikipedia&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/jonasagx/dados-abertos-ciencialivre&quot;&gt;Slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A pr&#243;xima palestra rel&#226;mpago foi ministrada por Mailson Lira que apresentou como Python ajudou em um dos projetos de uma disciplina cursada por ele no seu curso focado em Realidade Aumentada. Ele apresentou o OpenCv com um trabalho muito legal onde ele simulou a&#231;&#245;es do Kinect por meio de Python que permite acessar a webcam do seu computador e manipular em tempo real as imagens capturadas por ela. O resultado foi um joguinho bem legal de estourar bolas por meio de uma c&#226;mera onde as pessoas com as m&#227;o poderiam estourar as bolinhas.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/omailson/movement&quot;&gt;C&#243;digo-fonte aqui.&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;attachment_834&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_123353.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-834&quot; title=&quot;Mailson Lira apresentando seu trabalho com OpenCv + python&quot; src=&quot;http://pugpe.files.wordpress.com/2012/01/20120128_123353.jpg?w=300&amp;h=225&quot; alt=&quot;Mailson Lira apresentando seu trabalho com OpenCv + python&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Mailson Lira apresentando seu trabalho com OpenCv + python&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;A pr&#243;xima palestra foi de Marcel Caraciolo sobre o PyFoursquare, que &#233; uma biblioteca para acessar a API da rede social de localiza&#231;&#227;o m&#243;vel Foursquare em Python. O trabalho que foi resultado do seu trabalho de mestrado (1 deles) foi reorganizado e disponibilizado em projeto open-source para que outros desenvolvedores pudessem contribuir e usar o projeto. &#160;Seu projeto j&#225; foi inclusive listado em uma das bibliotecas oficiais de Python para Foursquare!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/pyfoursquare-python-library-for-foursquare-11313022&quot;&gt;Slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &#250;ltima palestra foi uma discuss&#227;o entre os membros presentes sobre como ser&#225; organizado o &lt;strong&gt;XX Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&lt;/strong&gt;, que pretende comemorar os 20 encontros com um encontro especial envolvendo palestrantes de fora, sorteio de brindes, open-spaces e muitas outras atividades. Em breve estaremos informando mais detalhes em como estaremos recebendo colabora&#231;&#245;es. Recomendo acessar a nossa&lt;a href=&quot;http://groups.google.com/group/pug-pe?hl=pt-BR&quot;&gt; lista de discuss&#227;o do grupo&lt;/a&gt; e acompanhar nossas threads para mais detalhes!&lt;/p&gt;
&lt;p&gt;E &#160;assim terminamos mais um encontro do PUG-PE, muito networking, muita informa&#231;&#227;o e troca de conhecimento! Evento muito bem realizado e acredito ter agradado a todos! &#160;At&#233; o pr&#243;ximo XIX!&lt;/p&gt;
&lt;p&gt;Fotos do encontro podem ser encontradas &lt;a href=&quot;http://www.flickr.com/photos/35342562@N05/sets/72157629108471657/&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Atenciosamente,&lt;/p&gt;
&lt;p&gt;Marcel Caraciolo&lt;/p&gt;
&lt;h3&gt;Links para os assuntos discutidos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://python.org/&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://smallactsmanifesto.org/&quot;&gt;SmallActs Manifesto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://manifestogames.com.br/&quot;&gt;Manifesto Game Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.tacticalgamer.com/wiki/index.php/Official_BF2_Python_Doc&quot;&gt;Battlefield Bots Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nltk.org/&quot;&gt;NLTK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/CompLin/Aelius&quot;&gt;Projeto Aelius Donatus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pycursos.com&quot;&gt;PyCursos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://opencv.willowgarage.com/documentation/python/index.html&quot;&gt;OpenCv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/marcelcaraciolo/foursquare&quot;&gt;PyFoursquare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/830/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/830/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/830/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/830/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/830/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/830/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/830/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/830/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/830/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/830/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/830/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/830/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/830/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/830/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=830&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">XVIII Encontro do Grupo de Usu&#225;rios de Python PE</title>
		<link href="http://associacao.python.org.br/eventos/grupos-regionais/pernambuco/xviii-encontro-do-grupo-de-usuarios-de-python-pe"/>
		<id>http://associacao.python.org.br/eventos/grupos-regionais/pernambuco/xviii-encontro-do-grupo-de-usuarios-de-python-pe</id>
		<updated>2012-01-24T11:37:54+00:00</updated>
		<content type="html">&lt;p class=&quot;p1&quot;&gt;&amp;nbsp;Neste encontro teremos a participa&#231;&#227;o das empresas Manifesto Game Studio com uma palestra sobre o uso de Python para auxiliar na constru&#231;&#227;o de jogos &amp;nbsp;(para os f&#227;s de jogos vai ser uma &#243;tima oportunidade) por T&#250;lio Caraciolo e &amp;nbsp;sobre processamento de linguagem natural com l&#237;ngua portuguesa com o uso da plataforma Python pela empresa Orygens com Marcel Caraciolo. &amp;nbsp;Teremos v&#225;rias palestras rel&#226;mpago sobre temas variados englobando concorr&#234;ncia, software livre, frameworks web, etc.&lt;/p&gt;
&lt;p class=&quot;p2&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;p1&quot;&gt;Para os que n&#227;o conhecem Python, eis uma excelente oportunidade de conhecer uma das linguagens de programa&#231;&#227;o que mais crescem na comunidade open-source e possui v&#225;rias aplica&#231;&#245;es em nichos como web, jogos, sistemas embarcados, computa&#231;&#227;o cient&#237;fica, seguran&#231;a, etc.&lt;/p&gt;</content>
		<author>
			<name>Eventos da APyB</name>
			<uri>http://associacao.python.org.br</uri>
		</author>
		<source>
			<title type="html">Listagem de Pr&#243;ximos Eventos APyB e Python</title>
			<subtitle type="html">Eventos da APyB e relacionados a Python</subtitle>
			<link rel="self" href="http://associacao.python.org.br/eventos/listagem/RSS"/>
			<id>http://associacao.python.org.br/eventos/listagem/RSS</id>
			<updated>2012-01-29T18:44:34+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Assalto</title>
		<link href="http://feedproxy.google.com/~r/Fechatag/~3/Eqglw3Kg-mQ/"/>
		<id>http://elcio.com.br/?p=3620</id>
		<updated>2012-01-23T12:51:26+00:00</updated>
		<content type="html">&lt;p&gt;Na &#250;ltima quinta-feira, indo para casa, fui assaltado. Havia deixado o &lt;a href=&quot;http://ederson.peka.nom.br/&quot;&gt;Peka&lt;/a&gt; e o &lt;a href=&quot;http://meadiciona.com/HugoF&quot;&gt;Hugo&lt;/a&gt; em casa, e est&#225;vamos eu a &lt;a href=&quot;http://danialves.wordpress.com/&quot;&gt;Dani&lt;/a&gt; no carro. Levaram meu computador, um Mac que eu estava usando para desenvolver um projeto, meu iPad e meu celular. Da Dani levaram computador, celular, documentos e dinheiro.&lt;/p&gt;
&lt;p&gt;Passado o susto, fui na quinta &#224; noite mesmo comprar um computador para repor o que haviam levado. &#201; minha ferramenta de trabalho, n&#227;o posso ficar sem. Comprei um Vaio VPCSB25FB, instalei Xubuntu 11.10, a passei a sexta-feira e o domingo colocando as coisas no lugar nele e num Mac Mini que eu j&#225; tinha e vou usar no lugar do que levaram.&lt;/p&gt;
&lt;p&gt;Algumas li&#231;&#245;es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Criptografe sua pasta pessoal:&lt;/strong&gt; dormi mais tranquilo sabendo que a minha estava criptografada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud rulez:&lt;/strong&gt; meus contatos, agenda e e-mails est&#227;o no Google. No dia seguinte, mesmo sem meu celular, consegui conferir meus compromissos e ligar para quem eu precisei. Meus projetos est&#227;o todos no Git e os arquivos pessoais todos no Dropbox. Perdi no total uns quatro dias de trabalho, a maior parte desse tempo reconfigurando as coisas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tenha seguro:&lt;/strong&gt; eu n&#227;o tinha seguro das minhas coisas. Quando procurei, me pareceu muito caro. Quando levaram minhas coisas, comecei a achar o seguro barato.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tenha backup:&lt;/strong&gt; tenho uma conta Pro 100 no &lt;a href=&quot;http://db.tt/kQ3EzcPa&quot;&gt;Dropbox&lt;/a&gt;. Custa 20 d&#243;lares por m&#234;s. &#201; barato.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&#201; isso. Passou o susto. Vamos trabalhar bastante agora, pra pagar as coisas novas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; excelente post do Maudy Pedr&#227;o: &lt;a href=&quot;http://www.ubuntudicas.com.br/blog/2012/01/instale-o-prey-no-ubuntu-e-nao-perca-de-vista-o-seu-notebook/&quot;&gt;Instale o PREY no Ubuntu e n&#227;o perca de vista o seu notebook&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/zFUSeIzxQdOa3RK1oqOwnA-tRsY/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/zFUSeIzxQdOa3RK1oqOwnA-tRsY/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/zFUSeIzxQdOa3RK1oqOwnA-tRsY/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/zFUSeIzxQdOa3RK1oqOwnA-tRsY/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Fechatag?a=Eqglw3Kg-mQ:hlC6ta89LTA:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Fechatag?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Fechatag?a=Eqglw3Kg-mQ:hlC6ta89LTA:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Fechatag?i=Eqglw3Kg-mQ:hlC6ta89LTA:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Elcio Luiz Ferreira</name>
			<uri>http://elcio.com.br</uri>
		</author>
		<source>
			<title type="html">fechaTag</title>
			<subtitle type="html">HTML5, CSS, Tableless, Desenvolvimento Web, Python, Linux</subtitle>
			<link rel="self" href="http://elcio.com.br/tag/programacao/feed/"/>
			<id>http://elcio.com.br/tag/programacao/feed/</id>
			<updated>2012-01-27T00:44:19+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">M&#233;dia harm&#243;nica</title>
		<link href="http://kodumaro.blogspot.com/2012/01/media-harmonica.html"/>
		<id>tag:blogger.com,1999:blog-1387996720436450649.post-155102472275163258</id>
		<updated>2012-01-22T10:02:00+00:00</updated>
		<content type="html">&lt;img src=&quot;http://photos1.blogger.com/blogger/6505/3295/200/prog.png&quot; alt=&quot;Poliedro&quot; /&gt; J&#225; que fal&#225;vamos de vari&#226;ncias e m&#233;dias, um dos c&#225;lculos mais belos de m&#233;dia &#233; a &lt;a href=&quot;http://pt.wikipedia.org/wiki/M&#233;dia_harm&#244;nica&quot;&gt;m&#233;dia harm&#243;nica&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Vou &lt;em&gt;roubar&lt;/em&gt; &lt;del&gt;a explica&#231;&#227;o&lt;/del&gt; o exemplo da Wikip&#233;dia por pura pregui&#231;a&#8230; :-/&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;[update]&lt;/tt&gt;&lt;br /&gt;Roubar a explica&#231;&#227;o n&#227;o&#8230;&#160;roubei o exemplo. Para a explica&#231;&#227;o deixei o &lt;a href=&quot;http://pt.wikipedia.org/wiki/M&#233;dia_harm&#244;nica&quot;&gt;apontador&lt;/a&gt; para o artigo na Wikip&#233;dia &#8211; mais pregui&#231;oso ainda!&lt;br /&gt;&lt;tt&gt;[/update]&lt;/tt&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Voc&#234; se lembra do col&#233;gio, quando tinha de calcular a velocidade m&#233;dia percorrida por um carro, certo? Imagine que um carro faz uma viagem de &lt;em&gt;x&lt;/em&gt; horas, tendo percorrido metade do tempo a 40Km/h e a outra metade a 60Km/h.&lt;br /&gt;&lt;br /&gt;Calcular a velocidade m&#233;dia &#233; bem f&#225;cil, n&#227;o?&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://cacilhas.info/bin/mimetex.cgi?\frac{40Km/h+60Km/h}{2}=50Km/h&quot; alt=&quot;(40Km/h + 60Km/h) / 2 = 50Km/h&quot; /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Ent&#227;o o carro percorreu a dist&#226;ncia a uma velocidade m&#233;dia de 50Km/h, tornando f&#225;cil calcular, por exemplo, a dist&#226;ncia: se o carro andou por 3h, percorreu 150Km.&lt;br /&gt;&lt;br /&gt;Por&#233;m imagine que a proposi&#231;&#227;o do problema n&#227;o fosse quanto ao tempo, mas quanto &#224; dist&#226;ncia&#8230;&lt;br /&gt;&lt;br /&gt;O carro percorreu metade do &lt;strong&gt;percurso&lt;/strong&gt; (n&#227;o do tempo) a 40Km/h e outra metade a 60Km/h. Qual a velocidade m&#233;dia?&lt;br /&gt;&lt;br /&gt;Para obter esse resultado, precisamos da m&#233;dia harm&#243;nica:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://cacilhas.info/bin/mimetex.cgi?\frac{2}{\frac{1}{40Km/h}+\frac{1}{60Km/h}}=48Km/h&quot; alt=&quot;2 / ((1 / 40Km/h) + (1 / 60Km/h)) = 48Km/h&quot; /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Ent&#227;o &#233; o equivalente a percorrer todo o trajeto a 48Km/h.&lt;br /&gt;&lt;br /&gt;Isso tamb&#233;m se aplica a diversos outros ramos, como a matem&#225;tica financeira: se um investidor aplica um mesmo valor em compra de a&#231;&#245;es todos os meses, no final o pre&#231;o m&#233;dio das a&#231;&#245;es ser&#225; a m&#233;dia harm&#243;nica dos pre&#231;os das a&#231;&#245;es em cada m&#234;s.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;M&#227;os &#224; massa&lt;/h3&gt;&lt;br /&gt;Conversamos at&#233; agora sobre matem&#225;tica, agora &#233; hora de ver o c&#243;digo! Usarei novamente &lt;a href=&quot;http://schemers.org/&quot;&gt;Scheme&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Vamos nos concentrar primeiro no c&#225;lculo do denominador. Novamente apelaremos para &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Map_(higher-order_function)&quot;&gt;map&lt;/a&gt;/&lt;a href=&quot;http://en.wikipedia.org/wiki/Fold_(higher-order_function)&quot;&gt;reduce&lt;/a&gt;&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;O &lt;em&gt;map&lt;/em&gt; ser&#225; usado para inverter cada um dos elementos, para tanto usaremos a fun&#231;&#227;o lambda &lt;em&gt;(&#955;x.(1/x))x&lt;sub&gt;i&lt;/sub&gt;&lt;/em&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(map (lambda (x) (/ 1 x)) *list*)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Feio isso, precisaremos de um somat&#243;rio desses elementos, portanto usaremos &lt;em&gt;reduce&lt;/em&gt; novamente com &lt;code&gt;#'apply&lt;/code&gt; e &lt;code&gt;#'+&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(apply +&lt;br /&gt;       (map (lambda (x) (/ 1 x)) *list*))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O numerador &#233; f&#225;cil, &#233; a quantidade de elementos, ou tamanho da lista:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(length *list*)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Basta dividirmos um pelo outro e, quase sem querer, j&#225; temos o c&#225;lculo da m&#233;dia harm&#243;nica!&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(define harmonic-mean&lt;br /&gt;  (lambda (*list*)&lt;br /&gt;    (/&lt;br /&gt;      (length *list*)&lt;br /&gt;      (apply +&lt;br /&gt;             (map (lambda (x) (/ 1 x)) *list*)))))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Se quiser testar com os valores do exemplo (40Km/h e 60Km/h):&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(let ((params '(40 60)))&lt;br /&gt;  (display (harmonic-mean params))&lt;br /&gt;  (newline))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;[update]&lt;/tt&gt;&lt;br /&gt;Ainda esperando o pessoal do &lt;a href=&quot;http://code.google.com/p/google-code-prettify/&quot;&gt;Prettify&lt;/a&gt; corrigir o &lt;em&gt;syntax highlighting&lt;/em&gt; para &lt;a href=&quot;http://pt.wikipedia.org/wiki/Lisp&quot;&gt;LISP&lt;/a&gt;.&lt;br /&gt;&lt;tt&gt;[/update]&lt;/tt&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;[]&#8217;s&lt;br /&gt;Cacilh&#945;&#962;, La Batalema&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1387996720436450649-155102472275163258?l=kodumaro.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Darth Batalema</name>
			<email>noreply@blogger.com</email>
			<uri>http://kodumaro.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Kodumaro</title>
			<subtitle type="html">As sombras da programa&#231;&#227;o</subtitle>
			<link rel="self" href="http://kodumaro.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-1387996720436450649</id>
			<updated>2012-02-04T10:44:29+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Mudando a resolu&#231;&#227;o do Windows com Python</title>
		<link href="http://ivanneto.com.br/2012/01/21/mudando-a-resolucao-do-windows-com-python/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mudando-a-resolucao-do-windows-com-python"/>
		<id>http://ivanneto.com.br/?p=19</id>
		<updated>2012-01-21T21:21:40+00:00</updated>
		<content type="html">&lt;p&gt;O &lt;a title=&quot;Python for Windows&quot; href=&quot;http://sourceforge.net/projects/pywin32/&quot; target=&quot;_blank&quot;&gt;Python for Windows&lt;/a&gt; oferece suporte a v&#225;rias opera&#231;&#245;es no Windows usando Python. Hoje tive uma demanda de mudar a resolu&#231;&#227;o &lt;em&gt;&amp;#8220;programatically&amp;#8221;&lt;/em&gt;, e a solu&#231;&#227;o foi o seguinte c&#243;digo:&lt;/p&gt;
&lt;pre class=&quot;brush:py&quot;&gt;import os, sys

import win32api
import win32con
import pywintypes&lt;/pre&gt;
&lt;p&gt;Primeiro &#233; preciso importar as &lt;em&gt;libs&lt;/em&gt; necess&#225;rias.&lt;/p&gt;
&lt;pre class=&quot;brush:py&quot;&gt;display_modes = {}
n = 0
while True:
  try:
    devmode = win32api.EnumDisplaySettings(None, n)
  except pywintypes.error:
    break
  else:
    key = (
      devmode.BitsPerPel,
      devmode.PelsWidth,
      devmode.PelsHeight,
      devmode.DisplayFrequency
    )
    display_modes[key] = devmode
    n += 1&lt;/pre&gt;
&lt;p&gt;No fim da execu&#231;&#227;o do c&#243;digo acima, voc&#234; tem &lt;code&gt;display_modes&lt;/code&gt; como um dicion&#225;rio contendo as possibilidades de resolu&#231;&#227;o e frequ&#234;ncia do monitor do seu sistema. Voc&#234; pode imprimi-lo:&lt;/p&gt;
&lt;pre class=&quot;brush:applescript&quot;&gt;for item in display_modes.items():
    print item&lt;/pre&gt;
&lt;p&gt;O resultado &#233; algo como:&lt;/p&gt;
&lt;pre class=&quot;brush:py&quot;&gt;((32L, 1024L, 768L, 60L), &amp;lt;PyDEVMODEA object at 0x00E03328&amp;gt;)
((32L, 3200L, 1200L, 60L), &amp;lt;PyDEVMODEA object at 0x00E03F58&amp;gt;)
((32L, 2560L, 1024L, 60L), &amp;lt;PyDEVMODEA object at 0x00E03BB0&amp;gt;)
((24L, 1400L, 1050L, 60L), &amp;lt;PyDEVMODEA object at 0x00E026F8&amp;gt;)
((24L, 1280L, 1024L, 60L), &amp;lt;PyDEVMODEA object at 0x00E025C0&amp;gt;)
((16L, 3200L, 1200L, 60L), &amp;lt;PyDEVMODEA object at 0x00E01D38&amp;gt;)
((24L, 6400L, 1200L, 60L), &amp;lt;PyDEVMODEA object at 0x00E030B8&amp;gt;)
((24L, 800L, 600L, 60L), &amp;lt;PyDEVMODEA object at 0x00E07A60&amp;gt;)
((8L, 1920L, 1440L, 60L), &amp;lt;PyDEVMODEA object at 0x00E00140&amp;gt;)
((4L, 800L, 600L, 1L), &amp;lt;PyDEVMODEA object at 0x00E04438&amp;gt;)
((16L, 640L, 480L, 60L), &amp;lt;PyDEVMODEA object at 0x00E009C8&amp;gt;)&lt;/pre&gt;
&lt;p&gt;Voc&#234; pode testar se a resolu&#231;&#227;o desejada est&#225; no dicion&#225;rio, e ent&#227;o escolh&#234;-la:&lt;/p&gt;
&lt;pre class=&quot;brush:applescript&quot;&gt;desired_res = (32, 800, 600, 60)
if desired_res in display_modes:
    devmode = display_modes[desired_res]
    win32api.ChangeDisplaySettings(devmode, 0)&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s it! &lt;img src=&quot;http://ivanneto.com.br/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Fontes: &lt;a href=&quot;http://mail.python.org/pipermail/tutor/2006-November/051106.html&quot; target=&quot;_blank&quot;&gt;http://mail.python.org/pipermail/tutor/2006-November/051106.html&lt;/a&gt;, &lt;a href=&quot;http://bytes.com/topic/python/answers/660265-how-change-display-screen-resolution-800x600&quot; target=&quot;_blank&quot;&gt;http://bytes.com/topic/python/answers/660265-how-change-display-screen-resolution-800&amp;#215;600&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Ivan Neto</name>
			<uri>http://ivanneto.com.br</uri>
		</author>
		<source>
			<title type="html">Ivan Neto &#187; python</title>
			<subtitle type="html">Python, software e muito mais</subtitle>
			<link rel="self" href="http://ivanneto.com.br/tag/python/feed/"/>
			<id>http://ivanneto.com.br/tag/python/feed/</id>
			<updated>2012-01-23T14:44:08+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Dissecando a vari&#226;ncia</title>
		<link href="http://kodumaro.blogspot.com/2012/01/variancia-2.html"/>
		<id>tag:blogger.com,1999:blog-1387996720436450649.post-3427944306447586523</id>
		<updated>2012-01-17T02:08:00+00:00</updated>
		<content type="html">&lt;img src=&quot;http://4.bp.blogspot.com/_rGfO7DAuOSE/Rgv00nwEXZI/AAAAAAAAAB8/r59qEVD0qOE/s200/haskell.jpg&quot; alt=&quot;Paradigma funcional&quot; /&gt; Este artigo d&#225; seguimento ao &lt;a href=&quot;http://kodumaro.blogspot.com/2012/01/variancia.html&quot;&gt;artigo sobre vari&#226;ncia amostral&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A vari&#226;ncia pode ser entendida como a m&#233;dia aritm&#233;tica dos quadrados dos desvios de cada elemento da popula&#231;&#227;o.&lt;br /&gt;&lt;br /&gt;O desvio de um elemento &#233; a diferen&#231;a entre o elemento e seu valor esperado. Quando lidamos com um conjunto, o valor esperado &#233; a m&#233;dia dos elementos.&lt;br /&gt;&lt;br /&gt;Ent&#227;o o desvio do elemento &lt;em&gt;x&lt;sub&gt;i&lt;/sub&gt;&lt;/em&gt; &#233; &lt;em&gt;x&lt;sub&gt;i&lt;/sub&gt;&amp;nbsp;-&amp;nbsp;&lt;span&gt;x&lt;/span&gt;&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;A vari&#226;ncia populacional pode ser descrita como:&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://cacilhas.info/bin/mimetex.cgi?\sigma^2_x=\frac{1}{n}\sum_{i=1}^n(x_i-\bar{x})^2&quot; alt=&quot;&#963;&#178;x=1/n &#931;(xi - xm)&quot; /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Na maioria dos casos, n&#227;o se tem dispon&#237;vel todos os elementos de um conjunto, mas apenas uma amostra. Nesses casos, calculamos a vari&#226;ncia de amostra ou vari&#226;ncia amostral.&lt;br /&gt;&lt;br /&gt;A diferen&#231;a no c&#225;lculo &#233; que, em vez de dividirmos pelo n&#250;mero total de elementos da amostra no c&#225;lculo da m&#233;dia, dividimos pelo n&#250;mero total menos um, o que aumenta o resultado do desvio padr&#227;o, compensando n&#227;o conhecermos todos os elementos do conjunto.&lt;br /&gt;&lt;br /&gt;Ent&#227;o o c&#225;lculo muda para:&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://cacilhas.info/bin/mimetex.cgi?s^2_x=\frac{1}{n-1}\sum_{i=1}^n(x_i-\bar{x})^2&quot; alt=&quot;s&#178;x=1/(n - 1) &#931;(xi - xm)&quot; /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Em &lt;a href=&quot;http://www.erlang.org/&quot;&gt;Erlang&lt;/a&gt;, para calcular o somat&#243;rio dos desvios, primeiros usamos &lt;a href=&quot;http://pt.wikipedia.org/wiki/List_comprehension&quot;&gt;&lt;em&gt;list comprehension&lt;/em&gt;&lt;/a&gt; para gerar uma lista dos quadrados desvios:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;[math:pow(Xi - Xm, 2) || Xi &amp;lt;- List]&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O que este c&#243;digo diz &#233;: retorne a lista dos quadrados (&lt;code&gt;math:pow/2&lt;/code&gt;) das diferen&#231;as entre cada elemento (&lt;code&gt;Xi&lt;/code&gt;) da lista (&lt;code&gt;Xi&amp;nbsp;&amp;lt;-&amp;nbsp;List&lt;/code&gt;) e sua m&#233;dia (&lt;code&gt;Xm&lt;/code&gt;, calculado anteriormente).&lt;br /&gt;&lt;br /&gt;Depois ele usa &lt;code&gt;math:sum/1&lt;/code&gt; para gerar um somat&#243;rio e retorna a divis&#227;o do resultado do somat&#243;rio pelo tamanho da lista menos um (&lt;code&gt;Num&amp;nbsp;/&amp;nbsp;Demon&lt;/code&gt;).&lt;br /&gt;&lt;br /&gt;Volte ao &lt;a href=&quot;http://kodumaro.blogspot.com/2012/01/variancia.html&quot;&gt;artigo anterior&lt;/a&gt; para ver como fica o c&#243;digo.&lt;br /&gt;&lt;br /&gt;Em &lt;a href=&quot;http://schemers.org/&quot;&gt;Scheme&lt;/a&gt;, a l&#243;gica &#233; quase a mesma, mas em vez de &lt;em&gt;list comprehension&lt;/em&gt;, &#233; usado &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Map_(higher-order_function)&quot;&gt;map&lt;/a&gt;/&lt;a href=&quot;http://en.wikipedia.org/wiki/Fold_(higher-order_function)&quot;&gt;reduce&lt;/a&gt;&lt;/em&gt;. O &lt;code&gt;#'map&lt;/code&gt; roda a fun&#231;&#227;o an&#243;nima (&lt;a href=&quot;http://pt.wikipedia.org/wiki/C&#225;lculo_lambda&quot;&gt;&lt;em&gt;lambda&lt;/em&gt;&lt;/a&gt;) em cada elemento, extraindo os quadrados dos desvios.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;[update]&lt;/tt&gt;&lt;br /&gt;Troquei o &lt;em&gt;link&lt;/em&gt; para &lt;em&gt;map/reduce&lt;/em&gt;, que apontava para um &lt;a href=&quot;http://en.wikipedia.org/wiki/Map/reduce&quot;&gt;arcabou&#231;o do Google&lt;/a&gt;, quando as refer&#234;ncias reais seriam encontradas no segundo par&#225;grafo do texto referenciado.&lt;br /&gt;&lt;tt&gt;[/update]&lt;/tt&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;A fun&#231;&#227;o usada foi &lt;em&gt;(&#955;x.(x&amp;nbsp;-&amp;nbsp;&lt;span&gt;x&lt;/span&gt;)&#178;)x&lt;sub&gt;i&lt;/sub&gt;&lt;/em&gt;, ou: &lt;code&gt;(lambda (x) (expt (- x xm) 2))&lt;/code&gt; em LISP.&lt;br /&gt;&lt;br /&gt;Para o &lt;em&gt;reduce&lt;/em&gt; (&lt;code&gt;#'apply&lt;/code&gt;) &#233; usado somat&#243;rio (&lt;code&gt;#'+&lt;/code&gt;), aplicado ao conjunto resultante.&lt;br /&gt;&lt;br /&gt;Novalmente, volte ao &lt;a href=&quot;http://kodumaro.blogspot.com/2012/01/variancia.html&quot;&gt;artigo anterior&lt;/a&gt; para ver o c&#243;digo.&lt;br /&gt;&lt;br /&gt;[]&#8217;s&lt;br /&gt;Cacilh&#945;&#962;, La Batalema&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1387996720436450649-3427944306447586523?l=kodumaro.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Darth Batalema</name>
			<email>noreply@blogger.com</email>
			<uri>http://kodumaro.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Kodumaro</title>
			<subtitle type="html">As sombras da programa&#231;&#227;o</subtitle>
			<link rel="self" href="http://kodumaro.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-1387996720436450649</id>
			<updated>2012-02-04T10:44:29+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Bazaar, the git way</title>
		<link href="http://blog.labix.org/2012/01/16/bazaar-the-git-way"/>
		<id>http://blog.labix.org/?p=935</id>
		<updated>2012-01-16T04:02:51+00:00</updated>
		<content type="html">&lt;p&gt;Back at the Ubuntu Platform Rally last week, I&amp;#8217;ve pestered some of the Bazaar team with questions about co-location of branches in the same directory with Bazaar. The great news is that this seems to be really coming for the next release, with first-class integration of the feature in the command set. Unfortunately, though, it&amp;#8217;s not quite yet ready for prime time, or even for &lt;i&gt;I&amp;#8217;m-crazy-and-want-this-feature&lt;/i&gt; time.&lt;/p&gt;
&lt;p&gt;Some background on why this feature turns out to be quite important right now may be interesting, since life with Bazaar in the past years hasn&amp;#8217;t really brought that up as a blocker. &lt;span id=&quot;more-935&quot;&gt;&lt;/span&gt;The cause for the new interest lies in some recent changes in the toolset of the Go language. The new &lt;i&gt;go&lt;/i&gt; tool not only makes building and interacting with Go packages a breeze, but it also solves a class of problems previously existent. For the &lt;i&gt;go&lt;/i&gt; tool to work, though, it requires the use of $GOPATH consistently, and this means that the package has to live in a &lt;i&gt;well defined directory&lt;/i&gt;. The traditional way that Bazaar manages branches into their own directories becomes a deal breaker then.&lt;/p&gt;
&lt;p&gt;So, last week I had the chance to exchange some ideas with Jelmer Vernooij and Vincent Ladeuil (both Bazaar hackers) on these problems, and they introduced me to the approach of using lightweight checkouts to workaround some of the limitations. Lightweight checkouts in Bazaar makes the working tree resemble a little bit the old-style VCS tools, with the working tree being bound to another location that actually has the core content. The idea is great, and given how well lightweight checkouts work with Bazaar, building a full fledged solution shouldn&amp;#8217;t be a lot of work really.&lt;/p&gt;
&lt;p&gt;After that conversation, I&amp;#8217;ve put a trivial hack together that would make bzr look like git from the outside, by wrapping the command line, and did a lightning talk demo. This got a few more people interested on the concept, which was enough motivation for me to move the idea forward onto a working implementation. Now I just needed the time to do it, but it wasn&amp;#8217;t too hard to find it either.&lt;/p&gt;
&lt;p&gt;I happen to be part of the unlucky group that too often takes more than 24 hours to get back home from these events. This is not entirely bad, though.. I also happen to be part of the lucky group that can code while flying and riding buses as means to relieve the boredom (reading helps too). This time around, &lt;a href=&quot;http://labix.org/cobzr&quot;&gt;cobzr&lt;/a&gt; became the implementation of choice, and given ~10 hours of coding, we have a very neat and over-engineered wrapper for the bzr command.&lt;/p&gt;
&lt;p&gt;The core of the implementation is the same as the original hack: wrap bzr and call it from outside to restructure the tree. That said, rather than being entirely lazy and hackish line parsing, it actually parses bzr&amp;#8217;s &amp;#8211;help output for commands to build a base of supported options, and parses the command line exactly like Bazaar itself would, validating options as it goes and distinguishing between flags with arguments from positional parameters. That enables the proxying to do much more interesting work on the intercepted arguments.&lt;/p&gt;
&lt;p&gt;Here is a quick session that shows a branch being created with the tool. It should look fairly familiar for someone used to git:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
[~]% bzr branch lp:juju&lt;br /&gt;
Branched 443 revisions.                                                                                                                       &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;[~]% cd juju&lt;br /&gt;
[~/juju]% bzr branch&lt;br /&gt;
* master&lt;/p&gt;
&lt;p&gt;[~/juju]% bzr checkout -b new-feature&lt;br /&gt;
Shared repository with trees (format: 2a)&lt;br /&gt;
Location:&lt;br /&gt;
  shared repository: .bzr/cobzr&lt;br /&gt;
Branched 443 revisions.&lt;br /&gt;
Branched 443 revisions.&lt;br /&gt;
Tree is up to date at revision 443.&lt;br /&gt;
Switched to branch: /home/niemeyer/juju/.bzr/cobzr/new-feature/&lt;/p&gt;
&lt;p&gt;[~/juju]% bzr branch other-feature&lt;br /&gt;
Branched 443 revisions.                                                                                                                       &lt;/p&gt;
&lt;p&gt;[~/juju]% bzr branch&lt;br /&gt;
&amp;nbsp;&amp;nbsp;master&lt;br /&gt;
* new-feature&lt;br /&gt;
&amp;nbsp;&amp;nbsp;other-feature&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Note that cobzr will not reorganize the tree layout before the multiple branch support is required.&lt;/p&gt;
&lt;p&gt;Even though the wrapping is taking place and bzr&amp;#8217;s &amp;#8211;help output is parsed, there&amp;#8217;s pretty much no noticeable overhead given the use of Go for the implementation and also that the processed output of &amp;#8211;help is cached (I &lt;i&gt;said&lt;/i&gt; it was overengineered).&lt;/p&gt;
&lt;p&gt;As an example, the first is the real bzr, while the second is a link to cobzr:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
[~/juju]% time /usr/bin/bzr status&lt;br /&gt;
/usr/bin/bzr status  0.24s user 0.03s system 88% cpu 0.304 total&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;[~/juju]% time bzr status&lt;br /&gt;
bzr status  0.19s user 0.08s system 88% cpu 0.307 total&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;This should be more than enough for surviving comfortably until bzr itself comes along with first class support for co-located branches in the next release.&lt;/p&gt;
&lt;p&gt;In case you&amp;#8217;re interested in using it or are just curious about the command set or other details, please check out the web page for the project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://labix.org/cobzr&quot;&gt;http://labix.org/cobzr&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;</content>
		<author>
			<name>Gustavo Niemeyer</name>
			<uri>http://blog.labix.org</uri>
		</author>
		<source>
			<title type="html">Labix Blog</title>
			<subtitle type="html">by Gustavo Niemeyer</subtitle>
			<link rel="self" href="http://blog.labix.org/feed"/>
			<id>http://blog.labix.org/feed</id>
			<updated>2012-01-16T04:44:38+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Vari&#226;ncia</title>
		<link href="http://kodumaro.blogspot.com/2012/01/variancia.html"/>
		<id>tag:blogger.com,1999:blog-1387996720436450649.post-8071660945048702559</id>
		<updated>2012-01-15T23:06:00+00:00</updated>
		<content type="html">&lt;img src=&quot;http://2.bp.blogspot.com/_rGfO7DAuOSE/SwSZGIY_eXI/AAAAAAAAATA/Gh-qDqdTMX0/s200/glider.png&quot; alt=&quot;Glider&quot; /&gt; Uma das opera&#231;&#245;es mais importantes e necess&#225;rias da matem&#225;tica &#233; a &lt;a href=&quot;http://pt.wikipedia.org/wiki/Vari&#226;ncia&quot;&gt;vari&#226;ncia de amostra&lt;/a&gt;. &#201; usada, por exemplo, para o c&#225;lculo do desvio padr&#227;o e da regress&#227;o linear.&lt;br /&gt;&lt;br /&gt;Usando linguagens funcionais, a implementa&#231;&#227;o fica muito mais elegante.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Erlang&lt;/h3&gt;&lt;br /&gt;Em &lt;a href=&quot;http://www.erlang.org/&quot;&gt;Erlang&lt;/a&gt;, a fun&#231;&#227;o para o c&#225;lculo da vari&#226;ncia toma o seguinte formato:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;variance(List) -&amp;gt;&lt;br /&gt;    Xm = mean(List),&lt;br /&gt;    Num = lists:sum([math:pow(Xi - Xm, 2) || Xi &amp;lt;- List]),&lt;br /&gt;    Denom = length(List) - 1,&lt;br /&gt;    Num / Denom.&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&#201; preciso ainda definir a fun&#231;&#227;o de m&#233;dia, &lt;code&gt;mean/1&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;mean(List) -&amp;gt;&lt;br /&gt;    lists:sum(List) / length(List).&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;LISP&lt;/h3&gt;&lt;br /&gt;Em &lt;a href=&quot;http://schemers.org/&quot;&gt;Scheme&lt;/a&gt; a implementa&#231;&#227;o &#233; um pouco mais verbosa, mas ainda assim elegante.&lt;br /&gt;&lt;br /&gt;Segue o c&#243;digo em &lt;a href=&quot;http://schemers.org/Documents/Standards/R5RS/&quot;&gt;R&#8309;RS&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(define variance&lt;br /&gt;  (lambda (*list*)&lt;br /&gt;    (let ((xm (mean *list*)))&lt;br /&gt;      (/&lt;br /&gt;       (apply +&lt;br /&gt;              (map (lambda (x) (expt (- x xm) 2)) *list*))&lt;br /&gt;       (- (length *list*) 1)))))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Tamb&#233;m precisamos implementar a m&#233;dia:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(define mean&lt;br /&gt;  (lambda (*list*)&lt;br /&gt;    (/&lt;br /&gt;     (apply + *list*)&lt;br /&gt;     (length *list*))))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Paradigma imperativo&lt;/h3&gt;&lt;br /&gt;Para compara&#231;&#227;o, segue a implementa&#231;&#227;o de vari&#226;ncia em uma linguagem imperativa, &lt;a href=&quot;http://pt.wikipedia.org/wiki/C_(linguagem_de_programa&#231;&#227;o)&quot;&gt;C&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;double variance(int length, double *list) {&lt;br /&gt;    double x_mean = mean(length, list);&lt;br /&gt;    double sum = 0;&lt;br /&gt;    int i;&lt;br /&gt;&lt;br /&gt;    for (i=0; i&amp;lt;length; ++i)&lt;br /&gt;        sum += pow(list[i] - x_mean, 2.);&lt;br /&gt;&lt;br /&gt;    return sum / (length - 1);&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&#201; preciso incluir o cabe&#231;alho &lt;code&gt;math.h&lt;/code&gt;. Segue a implementa&#231;&#227;o da fun&#231;&#227;o &lt;code&gt;mean()&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;double mean(int length, double *list) {&lt;br /&gt;    double sum = 0;&lt;br /&gt;    int i;&lt;br /&gt;&lt;br /&gt;    for (i=0; i&amp;lt;length; ++i)&lt;br /&gt;        sum += list[i];&lt;br /&gt;&lt;br /&gt;    return sum / length;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Perceba a mudan&#231;a de estado, o que n&#227;o ocorre nos c&#243;digos funcionais.&lt;br /&gt;&lt;br /&gt;Escolhi C em vez de &lt;a href=&quot;http://python.org&quot;&gt;Python&lt;/a&gt;, porque Python tamb&#233;m suporta bem o paradigma funcional, enquanto C &#233; quase necessariamente imperativa.&lt;br /&gt;&lt;br /&gt;[]&#8217;s&lt;br /&gt;Cacilh&#945;&#962;, La Batalema&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1387996720436450649-8071660945048702559?l=kodumaro.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Darth Batalema</name>
			<email>noreply@blogger.com</email>
			<uri>http://kodumaro.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Kodumaro</title>
			<subtitle type="html">As sombras da programa&#231;&#227;o</subtitle>
			<link rel="self" href="http://kodumaro.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-1387996720436450649</id>
			<updated>2012-02-04T10:44:29+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">The Anatomy of Product Recommendations - Infographic - Tips and Best Practices</title>
		<link href="http://aimotion.blogspot.com/2012/01/anatomy-of-product-recommendations.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-4167564418501026213</id>
		<updated>2012-01-12T21:10:44+00:00</updated>
		<content type="html">Hi all,&lt;br /&gt;&lt;br /&gt;&lt;div&gt;I'd like to share a post that I found recently from a product's blog called &lt;b&gt;&lt;a href=&quot;http://www.liftsuggest.com/&quot;&gt;LiftSuggest&lt;/a&gt;&lt;/b&gt;. It is focused on recommender engines for e-commerces and give several tips about how to design your product recommender at your website for maximum clicks and to increase your sales.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;They posted a infographic about the anatomy of a product recommender engine. The tips they give are quite important when you are designing a recommender system for your e-commerce.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.liftsuggest.com/blog/wp-content/uploads/Infographic-product-recommendations-13.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://www.liftsuggest.com/blog/wp-content/uploads/Infographic-product-recommendations-13.jpg&quot; width=&quot;278&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Product Recommender Engine&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Further information please access their &lt;a href=&quot;http://www.liftsuggest.com/blog/&quot;&gt;blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;&lt;br /&gt;Marcel Caraciolo&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-4167564418501026213?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Machine Learning with Python: Meeting TF-IDF for Text Mining</title>
		<link href="http://aimotion.blogspot.com/2011/12/machine-learning-with-python-meeting-tf.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-8465476301818289486</id>
		<updated>2012-01-12T20:39:58+00:00</updated>
		<content type="html">&lt;div&gt;3Hi all,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This month I was studying about information retrieval and text mining, specially how to convert the textual representation of information into a &lt;b&gt;Vector Space Model (VSM)&lt;/b&gt;. &amp;nbsp;The VSM is an algebraic model representing the importance of a term (tf-idf) or even the absence or presence (&lt;b&gt;Bag of Words&lt;/b&gt;) of it in a document. I'd like to mention the excellent post from the researcher Christian Perone at his blog Pyevolve about &lt;a href=&quot;http://pyevolve.sourceforge.net/wordpress/?p=1589&quot;&gt;Machine learning and Text Mining with TF-IDF&lt;/a&gt;, a great post to read.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I decided in this post to be shorter and give some examples using Python . I expect at the end of this post you feel confortamble to use tf-idf at your tasks handling with text mining.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By the way, I extremely recommend you to check the &lt;a href=&quot;http://scikit-learn.org/stable/&quot;&gt;scikit.learn&lt;/a&gt; machine learning toolkit. There is a whole package to work with text classification, including TF-IDF with Python!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span&gt;What is TF-IDF ?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Tf%E2%80%93idf&quot;&gt;Term Frequency - Inverse Document Frequency&lt;/a&gt;&lt;/b&gt; is a weighting scheme that is commonly used in information retrieval tasks. The goal is to model each document into a vector space, ignoring the exact ordering of the words in the document while retaining information about the occurrences of each word.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is composed by two terms: one first computes the normalized Term Frequency, which is the number of times a word appears in a documnet, divided by the total number of words in that document. Then, the second term is the Inverse Document Frequency, which is computed as the logarithm of the number of the documents in the corpus divided by the number of documents where the term ti appears. Or, in symbols:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://www.elusivesnark.com/images/computing-tf-idf-with-couchdb-and/formula1.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.elusivesnark.com/images/computing-tf-idf-with-couchdb-and/formula1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://www.elusivesnark.com/images/computing-tf-idf-with-couchdb-and/formula2.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.elusivesnark.com/images/computing-tf-idf-with-couchdb-and/formula2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The TF-IDF gives how important is a word to a document in a collection, since it takes in consideration not only the isolated term but also the term within the document collection. The intuition is that a term that occurs frequently in many documents is not a good discriminator ( why emphasize a term which is almost present in the entire corpus of your documents ?) &amp;nbsp;So it will scale down the frequent terms while scaling up the rare terms; for instance, a term that occurs 10 times more than another isn't 10 times more important thant it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For computing the TF-IDF weights for each document in the corpus, it is required in the corpus a series of steps: &amp;nbsp;1) Tokenize the corpus &amp;nbsp;2) &amp;nbsp;Model the Vector &amp;nbsp;Space &amp;nbsp;and 3) Compute the TF-IDF weight for each document in the corpus.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Let's going through each step:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;Tokenization&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;First we need to tokenize the text. To do this, we can use the &lt;a href=&quot;http://www.nltk.org/&quot;&gt;NLTK&lt;/a&gt; library which is a collection of natural language processing algorithms written in Python. The process of tokenizing the documents in the corpous is a two steps: &amp;nbsp;First the text is splint into sentences, and then the sentences are split into the individual words. It is important to notice that there are several words that are not relevant, that is, terms like &quot;the, is, at, on&quot;, etc... &amp;nbsp;aren't going to help us, so in the information extraction, we ignore them. Those words are commonly called&lt;b&gt; stop words&lt;/b&gt; and they are present in almost all documents, so it is not relevant for us. In portuguese we also have those stop words such as (a, os , as , os, um , umas, que, etc.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;So considering our example below:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-6RKsflsvVn4/TvocvsqmmHI/AAAAAAAAArk/QDeTkhw_9fg/s1600/Screen+shot+2011-12-27+at+4.31.31+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;194&quot; src=&quot;http://1.bp.blogspot.com/-6RKsflsvVn4/TvocvsqmmHI/AAAAAAAAArk/QDeTkhw_9fg/s640/Screen+shot+2011-12-27+at+4.31.31+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;We will tokenize this collection of documents and represent them as vectors (rows) of a matrix with |D| x F shape, where |D| &amp;nbsp;is the cardinality of the document space, or how many documents we have and the F is the number of features, in our example it is represented by the vocabulary size.&lt;br /&gt;&lt;br /&gt;So the matrix representation of our vectors above is:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-PALuMT57UNI/Tw82HdjbTQI/AAAAAAAAAsc/0mgx8V9UjUM/s1600/Screen+shot+2012-01-12+at+4.38.18+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;258&quot; src=&quot;http://1.bp.blogspot.com/-PALuMT57UNI/Tw82HdjbTQI/AAAAAAAAAsc/0mgx8V9UjUM/s400/Screen+shot+2012-01-12+at+4.38.18+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;As you have noticed, these matrices representing the term frequencies (tf) tend to be very sparse (lots of &amp;nbsp;zero-elements), &amp;nbsp;so you will usually see the representation of these matrices as sparse matrices. The &lt;a href=&quot;https://gist.github.com/1602607&quot;&gt;code&lt;/a&gt; shown below will tokenize each document in the corpus and compute the term frequencies.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span&gt;Model the Vector Space&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Now that each of the documents in the corpus has been tokenized, the next step is to compute the document frequency quantity, that is, for each term, how many documents that term appears in. Before going to IDF, it is important to normalize the term-frequencies. Why ? &amp;nbsp;Imagine that we have a repeated term in document with porpuse of improving its ranking on an Information Retrieval System or even create a bias torwards long documents, making them look more important than they are just because of the high frequency of the term in the document. By normalizing the TF vector we can overcome this problem.&lt;br /&gt;The &lt;a href=&quot;https://gist.github.com/1603237&quot;&gt;code&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span&gt;&lt;b&gt;Compute the TF-IDF&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Now that you saw how the vector normalization was applied, we will now have to compute the second term of tf-idf: the inverse document frequency. The code is provided &lt;a href=&quot;https://gist.github.com/1604265&quot;&gt;below&lt;/a&gt;:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The TF-IDF is the product between the TF and IDF. &amp;nbsp;So a high weight of the tf-idf &amp;nbsp;is reached when you have a high term frequency (tf) in the given document and low document frequency of the term in the whole collection. Now let's see the tf-idf computed for each term present in the vector space.&lt;/div&gt;&lt;br /&gt;The &lt;a href=&quot;https://gist.github.com/1604356&quot;&gt;code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Putting everything together, the following code will compute the TF-IDF weights for each document. And the result matrix it will be:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://s.wordpress.com/latex.php?latex=%20%20%20M_%7Btf%5Cmbox%7B-%7Didf%7D%20%3D%20M_%7Btrain%7D%20%5Ctimes%20M_%7Bidf%7D%20%20%20&amp;bg=ffffff&amp;fg=000000&amp;s=0&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://s.wordpress.com/latex.php?latex=%20%20%20M_%7Btf%5Cmbox%7B-%7Didf%7D%20%3D%20M_%7Btrain%7D%20%5Ctimes%20M_%7Bidf%7D%20%20%20&amp;bg=ffffff&amp;fg=000000&amp;s=0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;A row of this matrix would be:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-rAEAUIPikVE/Tw-jRpaFxuI/AAAAAAAAAsk/oiTV1nVgtC4/s1600/Screen+shot+2012-01-13+at+12.22.08+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;326&quot; src=&quot;http://3.bp.blogspot.com/-rAEAUIPikVE/Tw-jRpaFxuI/AAAAAAAAAsk/oiTV1nVgtC4/s400/Screen+shot+2012-01-13+at+12.22.08+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I ommited the zero-values elements of the row.&lt;br /&gt;&lt;br /&gt;If we would decide to check the most relevant words for this place, by using the tf-idf I could see that the place has a nice hot chocolate drink (0.420955 &amp;lt;= chocolate quente &#243;timo), the soft drink nega maluca is also delicious (0.315716 - nega maluca uma delicia), &amp;nbsp;its&amp;nbsp;Cheese bun is also quite good (0.252573 -&amp;nbsp;pao de queijo muito bom).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And that is how we comput &amp;nbsp;our&amp;nbsp;&lt;img alt=&quot;M_{tf\mbox{-}idf}&quot; class=&quot;latex&quot; src=&quot;http://s.wordpress.com/latex.php?latex=M_%7Btf%5Cmbox%7B-%7Didf%7D&amp;bg=ffffff&amp;fg=000000&amp;s=0&quot; title=&quot;M_{tf\mbox{-}idf}&quot; /&gt;&amp;nbsp;matrix. &amp;nbsp;You can take a look at this &lt;a href=&quot;http://radimrehurek.com/gensim/tutorial.html&quot;&gt;link&lt;/a&gt; and this &lt;a href=&quot;http://scikit-learn.sourceforge.net/stable/auto_examples/document_classification_20newsgroups.html#example-document-classification-20newsgroups-py&quot;&gt;one&lt;/a&gt; to know how to use it with GenSim and Scikit.Learn respectively.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's all, &amp;nbsp;I hope that &amp;nbsp;you enjoyed this article and help more people to know how to implement the tf-idf weight to mine your collection of texts. &amp;nbsp;Feel free to comment and make suggestions.&lt;br /&gt;&lt;br /&gt;The source code of this example is also &lt;a href=&quot;https://gist.github.com/1604487&quot;&gt;available&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Regards,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marcel Caraciolo&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-8465476301818289486?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Plone, presente e futuro do CMS usado no Brasil.gov.br</title>
		<link href="http://associacao.python.org.br/eventos/plonebr/2012/plone-presente-e-futuro-do-cms-usado-no-brasil.gov.br"/>
		<id>http://associacao.python.org.br/eventos/plonebr/2012/plone-presente-e-futuro-do-cms-usado-no-brasil.gov.br</id>
		<updated>2012-01-11T17:56:41+00:00</updated>
		<content type="html">&lt;div&gt;
&lt;h3 class=&quot;p1&quot;&gt;Palestrante&lt;/h3&gt;
&lt;p class=&quot;p1&quot;&gt;&#201;rico Andrei &#233; s&#243;cio e CEO da&amp;nbsp;&lt;a class=&quot;external-link&quot; href=&quot;http://www.simplesconsultoria.com.br/&quot;&gt;Simples&amp;nbsp;Consultoria&lt;/a&gt;, empresa especializada em solu&#231;&#245;es web para gest&#227;o de&amp;nbsp;conte&#250;do e portais corporativos. Com 15 anos de experi&#234;ncia na gest&#227;o de&amp;nbsp;projetos e opera&#231;&#245;es de tecnologia da informa&#231;&#227;o com passagens em&amp;nbsp;empresas como Microsoft Brasil, Vesta Technologies e Editora Abril.&lt;/p&gt;
&lt;p class=&quot;p1&quot;&gt;Atuante nas comunidades de Software Livre, &#233; membro-fundador da&amp;nbsp;&lt;a class=&quot;external-link&quot; href=&quot;http://associacao.python.org.br/../&quot;&gt;Associa&#231;&#227;o PythonBrasil&lt;/a&gt;, membro da Plone Foundation e core developer do&amp;nbsp;Plone.&lt;/p&gt;
&lt;p class=&quot;p1&quot;&gt;Recentemente, &#201;rico Andrei foi eleito membro do conselho da&amp;nbsp;&lt;a class=&quot;external-link&quot; href=&quot;http://plone.org/foundation&quot;&gt;Plone&amp;nbsp;Foundation&lt;/a&gt;, entidade que promove e protege o software e a comunidade Plone&lt;/p&gt;
&lt;h3 class=&quot;p1&quot;&gt;Local&lt;/h3&gt;
&lt;p class=&quot;p1&quot;&gt;O evento ser&#225; realizado no Interlegis&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Audit&#243;rio Ant&#244;nio Carlos Magalh&#227;es&lt;/li&gt;&lt;li&gt;Av. N2, Anexo E do Senado Federal - Bras&#237;lia(DF)&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;</content>
		<author>
			<name>Eventos da APyB</name>
			<uri>http://associacao.python.org.br</uri>
		</author>
		<source>
			<title type="html">Listagem de Pr&#243;ximos Eventos APyB e Python</title>
			<subtitle type="html">Eventos da APyB e relacionados a Python</subtitle>
			<link rel="self" href="http://associacao.python.org.br/eventos/listagem/RSS"/>
			<id>http://associacao.python.org.br/eventos/listagem/RSS</id>
			<updated>2012-01-29T18:44:34+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Rio de Janeiro ser&#225; a sede da PythonBrasil[8]</title>
		<link href="http://associacao.python.org.br/associacao/imprensa/noticias/rio-de-janeiro-sera-a-sede-da-pythonbrasil-8"/>
		<id>http://associacao.python.org.br/associacao/imprensa/noticias/rio-de-janeiro-sera-a-sede-da-pythonbrasil-8</id>
		<updated>2012-01-09T01:01:42+00:00</updated>
		<content type="html">&lt;p&gt;De volta ao Rio de Janeiro ap&#243;s 3 anos, o evento PythonBrasil ser&#225; realizado entre os meses de setembro e outubro em data e local a serem anunciados em breve. A escolha da sede &#233; um pr&#234;mio a comunidade local que &#233; a mais atuante na divulga&#231;&#227;o de Python no Brasil.&lt;/p&gt;
&lt;p&gt;A expectativa da APyB &#233; que a PythonBrasil[8] conte com a participa&#231;&#227;o de mais de 400 participantes entre estudantes, desenvolvedores, usu&#225;rios e gestores de tecnologia da informa&#231;&#227;o. Na edi&#231;&#227;o de 2011, empresas como Google, Canonical, Globo.Com e Serpro mostraram como utilizam Python apresentaram casos de sucesso de Python em suas opera&#231;&#245;es.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;A APyB ter&#225; um membro da comunidade do local como seu representante na organiza&#231;&#227;o e comercializa&#231;&#227;o do evento, &amp;nbsp;que nesta edi&#231;&#227;o ser&#227;o de responsabilidade da Associa&#231;&#227;o.&lt;/p&gt;
&lt;h3&gt;Parceria com Python Argentina&lt;/h3&gt;
Continuando a parceria iniciada com a primeira edi&#231;&#227;o da PyConAr, o encontro da comunidade Python da Argentina, a APyB e a Python Argentina (PyAr) coordenar&#227;o esfor&#231;os para a realiza&#231;&#227;o de suas confer&#234;ncias.</content>
		<author>
			<name>Noticias da APyB</name>
			<uri>http://associacao.python.org.br</uri>
		</author>
		<source>
			<title type="html">Not&#237;cias</title>
			<subtitle type="html">Not&#237;cias sobre a Associa&#231;&#227;o.</subtitle>
			<link rel="self" href="http://associacao.python.org.br/noticias/RSS"/>
			<id>http://associacao.python.org.br/noticias/RSS</id>
			<updated>2012-02-04T18:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Deepjewel -  Social Media powering Recommendations</title>
		<link href="http://aimotion.blogspot.com/2012/01/deepjewel-social-media-powering.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-2279521221936228567</id>
		<updated>2012-01-05T05:47:32+00:00</updated>
		<content type="html">Hi all,&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Happy new year! &amp;nbsp;My first post this year will be about an idea that I had with my friend Ricardo Caspirro about the next generation of social recommenders in commerce applications and retail stores. What excites me is that this idea came from a conversation that we had in 2009, and since that year we discussed more about what it would be the &quot;&lt;b&gt;Deepjewel&lt;/b&gt;&quot;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Deepjewel is a giant knowledge base that encapsulates interesting entities and relationships of the social world in the web. &amp;nbsp;The social world in this context means all the millions and billions of tweets, Facebook messages, profiles, relationships, blog posting, YouTube videos, and more - a living organism itself, constantly evolving.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-yJ9N6iEZpIQ/TwWYO9LJeeI/AAAAAAAAAsU/OrQSslN29Dk/s1600/Screen+shot+2012-01-05+at+9.34.19+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;351&quot; src=&quot;http://4.bp.blogspot.com/-yJ9N6iEZpIQ/TwWYO9LJeeI/AAAAAAAAAsU/OrQSslN29Dk/s400/Screen+shot+2012-01-05+at+9.34.19+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;The Deepjewel&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But what motivated us to create the Deepjewel? &amp;nbsp;One of main problems that we face nowadays is the discovery of content and items of our interest. &amp;nbsp;Many times, for instance, to find a book or a movie that we like, it is required to search at several websites and social networks through the web. &amp;nbsp;There isn't a tool that allow this connection between items of many domains in a organized and structured way, even for easy access. Those objects are spread over the web, and the recommendations are placed in social networks by comments, results of machine learning techniques or by queries at several web pages or search engines. &amp;nbsp;The problem becomes worst when we don't know anything about the existence of a certain item, which it could result at never finding out that possible item that would be of our interest.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The social media is huge and we need tools that performs a deep analysis of all this data, filter out items of my interest, specially from the historical data &amp;nbsp;(with our permission, of course) &amp;nbsp;from our presence in the web and bring items and products relevant to us without loosing the discovery process associated with the serendipity. &amp;nbsp;One of the solutions is a powerful recommender engine fed by this Social Genome.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-VJZOo1xDzGg/TwUKJniTmKI/AAAAAAAAArw/t2qN7YXrvSM/s1600/RecDayRecommenderEngine.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;163&quot; src=&quot;http://1.bp.blogspot.com/-VJZOo1xDzGg/TwUKJniTmKI/AAAAAAAAArw/t2qN7YXrvSM/s400/RecDayRecommenderEngine.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Hybrid Social Context-Aware Recommender RecDay&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span id=&quot;internal-source-marker_0.6988762901164591&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div dir=&quot;ltr&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;This hybrid social context-aware recommender (which we call &lt;b&gt;recday&lt;/b&gt;) is a engine composed by several modular components, which we employ a broad range of semantic analysis techniques, including information extraction and integration, natural language processing and machine learning. The main task of this recommender is to analyze information about his posts, bios and relationships/lists collected from the social genome and summarize it (all this data would represent the interests of the user) in profiles, which we could call DNA. Those profiles built by the recday would infer the possible interests of the users and would serve as basis for personalized recommendations of products and services from the retail stores/e-commerce applications.&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;A perfect example for this proccess, which we call the &lt;b&gt;translation&lt;/b&gt;, is when you mentioned several times about Apple products (such as macbook, ipod, iphone, etc) at your tweets. Even you never used the word &quot;Apple&quot;, we can use the Social Genome to detect the products and infer that you are interested in Apple products. The following figure illustrate certain kinds of entities and relationships collected in the Social Genome:&lt;br /&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-DS1HR6dVWfg/TwWTM9f2_zI/AAAAAAAAAsI/2bUhRBy1jno/s1600/Screen+shot+2012-01-05+at+9.12.51+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;299&quot; src=&quot;http://3.bp.blogspot.com/-DS1HR6dVWfg/TwWTM9f2_zI/AAAAAAAAAsI/2bUhRBy1jno/s400/Screen+shot+2012-01-05+at+9.12.51+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;span&gt;The relationships extracted from the social web data&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;The second step of this engine is to build the user profile. Different from another approaches which it only uses the content or the historical data from reviews or ratings from the user, the Recday would go further and would analyze the temporal context included in the interests of the user. Several reports on consumer behavior show that the user desires are influented by external factors and even the humour or feelings of the person at the certain moment. It is required to collect in a stealth way (with the user permission of course) his social data and build his personality defined by several dimensions. Those dimensions represent the current state of the user which may define what kind of suggestions he would like to receive at that particular moment. For example, if you are happy today because you got a new job and posted at your Facebook about that event or even updated your profile about this new position, it would be a valuable information for your DNA profile in order to recommend products and services to celebrate this occasion (You are happy and excited, don't you think ?).&lt;br /&gt;&lt;br /&gt;Another important component in this proccess is the product side. We need extract more information from their products portfolio. Items must be juiced in order to get all its meta-data available. Imagine the movie Batman where we have details about the year, genre, cast, production, direction, sinoypsis, etc. All this data can be used to build the DNA Item and be expressed by a collection of dimensions that represent the item profile. With those profiles (DNA User and DNA Item) we compute the similarity between user and items in order to produce a list of top recommendations and related explanations.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img height=&quot;266&quot; src=&quot;https://docs.google.com/drawings/image?id=sccJBlRR-_Fzn3ehHwjxOdQ&amp;w=695&amp;h=463&amp;rev=184&amp;ac=1&quot; width=&quot;400&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;The Social Architecure of the Recommender&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;b id=&quot;internal-source-marker_0.7363749158103019&quot;&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;The final result can be shown in several mediums: mobile apps, widgets, web, API's, pluggins, etc. It is important the usability and how you will present all this information for a particular user. That's why the user interface must be simple and easy to navigate and have mechanisms to collect the user's feedback for the suggestions given by the engine. This proccess is cyclic, so when you give a feedback (a like or dislike or a comment about the suggestion), this piece of information is handled and leveraged to power your DNA profile.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img height=&quot;285&quot; src=&quot;https://lh3.googleusercontent.com/yrWzr6EudYkSiEi_oW_tSdzja6QmH60zyFYBP-V_UPZ5XphzOG2zww1fgsLBTd3pSKXZ9ITfwPmWuhhevG-3S_b2uo3hpZ-WVFuFt9Latv-gIrN5bLo&quot; width=&quot;400&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;A particular medium of the recommendations: Ipad Demo&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to build all these interesting technical challenges, we needed to start developing our in-house solution called &lt;b&gt;Crab&lt;/b&gt;, which proccesses all this data and employ several analysis and filtering techniques &amp;nbsp;to deal with the percularities of this heterogeneous sources of data. The first start is the launch of the &lt;b&gt;Deepjewel Labs&lt;/b&gt;. Deepjewel is a principle that we can mine the wealth in data, by identifying interesting entities and relationships and converting them into valuable information as input in the recommendation proccess of items and services.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In summary, all those human and computation techniques can be used to perform a deep semantic analysis of web and social data, where the result for a commerce application or retail store is the ability to offer what the users want before they know that they really want in a personalized way. The RecDay &amp;nbsp;would be able to daily offer relevant product and services to their customers without they even know it exists. This is a new way to shop in which you don't have to go find products, service and information; the machine will help them find their way to you.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To know more about our Deepjewel labs, visit the website (currently in portuguese): &amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-s9rMIaSEW_A/TwUkiBLb5yI/AAAAAAAAAr8/eDBrWqeCN9A/s1600/deepjewel_logo.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;140&quot; src=&quot;http://3.bp.blogspot.com/-s9rMIaSEW_A/TwUkiBLb5yI/AAAAAAAAAr8/eDBrWqeCN9A/s200/deepjewel_logo.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://draft.blogger.com/%C2%A0%20http://www.deepjewel.com&quot;&gt;http://www.deepjewel.com&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope you enjoyed,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marcel Caraciolo&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-2279521221936228567?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">:D</title>
		<link href="http://pugpe.wordpress.com/2011/12/29/resumo-pug-pe-2011/"/>
		<id>http://pugpe.wordpress.com/?p=822</id>
		<updated>2011-12-30T01:57:37+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225; pessoal,&lt;/p&gt;
&lt;p&gt;Este post vem como um post resumido do que aconteceu com este grupo no ano de 2011. Irei ser bem breve, em especial com fazer v&#225;rias men&#231;&#245;es epeciais para diversos novos membros, palestrantes e parceiros que participaram da constru&#231;&#227;o do PUG-PE este ano.&lt;/p&gt;
&lt;p&gt;Este grupo de usu&#225;rios foi fundado em 2007 por alguns membros, um deles gosto sempre de citar o nosso colega e membro e fundador da c&#233;lula Rodrigo Amaral (@&lt;a href=&quot;http://twitter.com/#!/rodrigoamaral&quot;&gt;rodrigoamaral&lt;/a&gt;). Embora com algumas tentativas de tentar realizar um encontro, s&#243; apenas este ano conseguimos organizar nosso primeiro encontro oficial, precisamente em fevereiro no ano de 2010. Desde ent&#227;o, come&#231;amos a encorpar e os encontros cada vez mais frequentes&#160; em periodicidade mensal. Este ano de 2011 o grupo se consolidou como um dos mais ativos grupos de software livre na regi&#227;o Nordeste onde conseguimos consolidar com diversas atividades durante o ano. Ao total neste ano de 2011 realizamos 8 Encontros Oficiais, os quais foram distribu&#237;dos em diversas faculdades de tecnologia pernambucanas como CIN/UFPE, UFRPE, POLI e IFPE. Realizamos nosso encontro especial de anivers&#225;rio na Livraria Cultura e tamb&#233;m encontros no ITBC no Recife Antigo. Formamos 2 turmas este ano de 2011 em conjunto com o CITI da UFPE o qual novos desenvolvedores Python sa&#237;ram para o mercado! E sem mencionar os diversos workshops de Python espalhados pelo Recife , interior e fora do estado!! (Fomos para Aracaju -Sergipe!). Fomos mencionados tamb&#233;m na revista Esp&#237;rito Livre, uma das mais respeitadas revistas brasileiras sobre software livre e &#160;por fim, tivemos uma boa amostra de representantes da nossa c&#233;lula no encontro Brasileiro da comunidade Python (PythonBrasil), inclusive o pr&#243;prio grupo foi tema de palestra oficial dentro da trilha do encontro!&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;X Encontro do PUG-PE&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot; &quot; title=&quot;X Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/02/img031.jpg?w=384&amp;h=288&quot; alt=&quot;X Encontro do PUG-PE&quot; width=&quot;384&quot; height=&quot;288&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;X Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;XI Encontro do PUG-PE&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.wordpress.com/feed/XI Encontro do PUG-PE&quot;&gt;&lt;img class=&quot;    &quot; title=&quot;XI Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/03/101_1312.jpg?w=392&amp;h=294&quot; alt=&quot;XI Encontro do PUG-PE&quot; width=&quot;392&quot; height=&quot;294&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XI Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;XII Encontro do PUG-PE&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;   &quot; title=&quot;XII Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/05/07052011252.jpg?w=442&amp;h=332&quot; alt=&quot;XII Encontro do PUG-PE&quot; width=&quot;442&quot; height=&quot;332&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XII Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;XIII Encontro do PUG-PE&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;   &quot; title=&quot;XIII Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/06/img135.jpg?w=442&amp;h=332&quot; alt=&quot;XIII Encontro do PUG-PE&quot; width=&quot;442&quot; height=&quot;332&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XIII Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;XIV Encontro do PUG-PE&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;   &quot; title=&quot;XIV Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/07/img187.jpg?w=442&amp;h=332&quot; alt=&quot;XIV Encontro do PUG-PE&quot; width=&quot;442&quot; height=&quot;332&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XIV Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;XV Encontro do PUG-PE&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;   &quot; title=&quot;XV Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/09/03092011712.jpg?w=442&amp;h=332&quot; alt=&quot;XV Encontro do PUG-PE&quot; width=&quot;442&quot; height=&quot;332&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XV Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;XVI Encontro do PUG-PE&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;    &quot; title=&quot;XVI Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2427.jpg?w=427&amp;h=285&quot; alt=&quot;XVI Encontro do PUG-PE&quot; width=&quot;427&quot; height=&quot;285&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XVI Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;XVII &#160;Encontro do PUG-PE&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;   &quot; title=&quot;XVII Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/12/391924_286171601420131_100000818804930_739523_448036718_n.jpg?w=415&amp;h=311&quot; alt=&quot;XVII Encontro do PUG-PE&quot; width=&quot;415&quot; height=&quot;311&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XVII Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;N&#227;o s&#243; realizamos encontros como tamb&#233;m construimos nosso I Open-Space : O Famoso PUG-PE Summer of Code onde tivemos um dia de aprendizado e desenvolvimento com Django. &#160;Oficinas de Python tamb&#233;m em conjunto ao Centro de Reciclagem da Unidade Marista em Recife tamb&#233;m foram ministradas &#224; garotada que est&#225; aprendendo programa&#231;&#227;o por l&#225;. &#160; O ritmo de crescimento foi tamb&#233;m muito melhor que o ano de 2010 onde saltamos de 205 usu&#225;rios para 397 usu&#225;rios, um crescimento de 48% de usu&#225;rios!&lt;/p&gt;
&lt;div id=&quot;attachment_402&quot;&gt;Hist&#243;rico de Usu&#225;rios no PUGPE desde 2007&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;attachment_825&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/12/screen-shot-2011-12-29-at-10-58-16-pm.png&quot;&gt;&lt;img class=&quot;size-medium wp-image-825&quot; title=&quot;Hist&#243;rico do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/12/screen-shot-2011-12-29-at-10-58-16-pm.png?w=300&amp;h=175&quot; alt=&quot;Hist&#243;rico do PUG-PE&quot; width=&quot;300&quot; height=&quot;175&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Hist&#243;rico do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Mas este &#233; apenas um resultado parcial e fruto de um trabalho cont&#237;nuo e&#160; volunt&#225;rio de pessoas com interesses afins que querem conversar e discutir sobre Python, tecnologia e software livre e cultura digital. Acredito que se somos refer&#234;ncia no estado de Pernambuco, e at&#233; n&#237;vel Nordeste/ Brasil. &#160;Mas n&#227;o paramos por aqui, temos metas maiores para o ano de 2012 e espero poder estar participando deste time sensacional que forma hoje o grupo do PUG-PE.&lt;/p&gt;
&lt;p&gt;Tenho que agradecer em nome de todos os grupos a todos visitantes deste blog, a todos os palestrantes convidados que cederam seu tempo para palestrarem em nossos encontros, a todos os membros (n&#227;o precisarei citar pois cada um sabe quem &#233;) , designers volunt&#225;rios, web-designers que tornaram estes encontros uma realidade, em diversos aspectos: infra-estrutura, log&#237;stica, coffe-break, cabos, etc.&lt;/p&gt;
&lt;p&gt;Um agradecimento especial &#224;s empresas Idealizza, Especializa, Orygens, Hostech, Fontech pelo suporte oferecido durante todo o ano em sorteios, patroc&#237;nios e apoios. Empresas que acreditam no nosso trabalho!&lt;/p&gt;
&lt;p&gt;Agrade&#231;o a todos os visitantes deste blog e a todos que apoiam essa comunidade diretamente e indiretamente, esperamos que possamos alcan&#231;ar muito mais usu&#225;rios e disseminar cada vez Python em todos ambientes seja acad&#234;mico ou profissional. Uma men&#231;&#227;o honrosa ao fundador desta c&#233;lula, Rodrigo Amaral por ter mantido essa chama viva durante todo este tempo em 3 anos. E v&#225;rios obrigados a todas&#160; universidades que nos cederam o seu espa&#231;o para podermos sediar nossos encontros. Quero agradecer tamb&#233;m o apoio de todas c&#233;lulas irm&#227;s Grupy-PB, Grupy-AL, Grupy-RN, PythonBrasil, APyB pelo apoio na divulga&#231;&#227;o e log&#237;stica.&lt;/p&gt;
&lt;p&gt;Vamos trabalhar forte para que no ano de 2012 possamos atingir metas maiores e chegarmos mais longe, melhorar muito ainda em nossos poss&#237;veis encontros quem sabe at&#233; ter um encontro de maior porte no cen&#225;rio nordestino.&lt;/p&gt;
&lt;p&gt;E &#233; isso a&#234; , que venha 2012 e muito Python na veia!&#160;&lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif?m=1300809600g&quot; alt=&quot;:D&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Atenciosamente,&lt;/p&gt;
&lt;p&gt;Marcel Caraciolo&lt;br /&gt;
Membro e Moderador da C&#233;lula PUG-PE&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/822/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/822/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/822/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/822/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/822/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/822/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/822/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/822/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/822/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/822/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/822/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/822/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/822/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/822/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=822&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">VIM a IDE para programadores Python</title>
		<link href="http://feedproxy.google.com/~r/pyAvelino/~3/UULJamWqoq0/"/>
		<id>http://avelino.us/2011/12/22/vim-ide-para-programadores-python/</id>
		<updated>2011-12-22T13:58:00+00:00</updated>
		<content type="html">&lt;p&gt;Depois muito tempo sem escrever nada no meu blog, escolhi esse tema para chamar a aten&#231;&#227;o do pessoal que esta come&#231;ando desenvolver em Python que sempre pergunta qual &#233; a melhor IDE para desenvolver em Python ou qual quer programador que usa uma super IDE pesado porque tem o recurso X, Y e Z.&lt;/p&gt;
&lt;p&gt;Com o VIM podemos ter todos os recurso avan&#231;ado que temos em qual quer IDE, basta algumas configura&#231;&#245;es para que esses recursos ser ativado, para facilitar a vida de todos compartilhei o meu &lt;code&gt;.vimrc&lt;/code&gt; e nesse post vou explicar como usar o mesmo.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&quot;Em 2 de novembro de 1991, Bram Moolenaar publicava a primeira vers&#227;o do edito vim. O vim nasceu como um clone para Amiga do editor vi criado por Bill Joy em 1976, adicionando algumas funcionalidades extras, da&#237; seu nome (VI iMproved ou VI Melhorado). Este editor se adaptou rapidamente a outras plataformas. &quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Assumindo que o &lt;code&gt;vi&lt;/code&gt; j&#225; esta instalado no meu micro, vamos instalar as configura&#231;&#245;es que eu fiz, basta rodar os seguintes comando no seu bash (Linux ou Mac):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl https://raw.github.com/avelino/.vimrc/master/bootstrap.sh -o - | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ap&#243;s isso ele vai baixar o reposit&#243;rio na sua pasta &lt;code&gt;HOME&lt;/code&gt;.
Recomendo o uso o VIM em GUI pois podemos chegar 256 cores, ou seja, colocar temas mais agrad&#225;vel e assim deixando o uso do &lt;code&gt;vim&lt;/code&gt; mais confort&#225;vel para o desenvolvimento, para Linux &#233; o &lt;code&gt;gvim&lt;/code&gt; e para mac o &lt;code&gt;macvim&lt;/code&gt; (Para mac o Bj&#246;rn Winckler fez um &#243;timo trabalho, na minha humilde opini&#227;o &#233; a melhor vers&#227;o do VIM via GUI).&lt;/p&gt;
&lt;p&gt;Chega de blablabla n&#233;, vamos logo para o que realmente interessa, como o &lt;code&gt;VIM&lt;/code&gt; ficou e como utilizar ele?&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;vim start&quot; src=&quot;http://dl.dropbox.com/u/763381/avelino.us/vim-start.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Usando o vim para navegar nas pasta de um projeto:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;vim files&quot; src=&quot;http://dl.dropbox.com/u/763381/avelino.us/vim-files.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Buscando arquivo por nome dentro do projeto:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;vim search file&quot; src=&quot;http://dl.dropbox.com/u/763381/avelino.us/vim-search-files.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Listar todas as class e def do arquivo esta esta aberto (Python)&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;vim list class&quot; src=&quot;http://dl.dropbox.com/u/763381/avelino.us/vim-list-class.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Lista de comandos para usar no 'vim', lembrando que esses comando foi customizado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:cd&lt;/code&gt; /path Abrir pasta&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tn&lt;/code&gt; Abrir nova aba&lt;/li&gt;
&lt;li&gt;&lt;code&gt;te&lt;/code&gt; Abrir nova aba e carregar arquivo&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t]&lt;/code&gt; Proxima aba&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t[&lt;/code&gt; Voltar aba&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl+c&lt;/code&gt; Adicionar todos os arquivos no cache para poder fazer busca de arquivo (recomendo fazer isso ao abrir o projeto)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl+f&lt;/code&gt; Busca arquivo e abre na mesma aba&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl+s&lt;/code&gt; Busca arquivo e abre em uma nova aba&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\b&lt;/code&gt; Abre arquivo que esta no buffer do vim (Arquivo abertos)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\d&lt;/code&gt;, &lt;code&gt;\n&lt;/code&gt; ou &lt;code&gt;F3&lt;/code&gt; Abre navegador de arquivo&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\f&lt;/code&gt; Lista todas as class e def (Python)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\j&lt;/code&gt; Vai para declara&#231;&#227;o de um metodo&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\r&lt;/code&gt; Renomear todos os metodos&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[e&lt;/code&gt; Move linha para cima&lt;/li&gt;
&lt;li&gt;&lt;code&gt;e]&lt;/code&gt; Move linha para baixo&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\v ou&lt;/code&gt;Ctrl+w + v` Divide a tela em vertical&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\h&lt;/code&gt; ou &lt;code&gt;Ctrl+w + s&lt;/code&gt; Divide a tela em horizontal&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\w&lt;/code&gt; ou &lt;code&gt;Ctrl+w + q&lt;/code&gt; Fecha a aba atual&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl+k&lt;/code&gt; Abre console Python&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl+j&lt;/code&gt; Roda o script Python aberto&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\sh&lt;/code&gt; Abre bash (shell)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\p&lt;/code&gt; Manda o arquivo em aberto para o dpaste.com&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\ga&lt;/code&gt; Git add .&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\gc&lt;/code&gt; Git commit&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\gsh&lt;/code&gt; Git push&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\gs&lt;/code&gt; Git status&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\gd&lt;/code&gt; Git diff&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\gr&lt;/code&gt; Git remove&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\S&lt;/code&gt; Remove todos os espa&#231;os do final&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\c&lt;/code&gt; Lista controle de versao do buffer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/jpIajv5Vide8hn5dgGQM8ujI9g4/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/jpIajv5Vide8hn5dgGQM8ujI9g4/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/jpIajv5Vide8hn5dgGQM8ujI9g4/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/jpIajv5Vide8hn5dgGQM8ujI9g4/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/pyAvelino/~4/UULJamWqoq0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>avelino</name>
			<email>avelino@chierry.com</email>
			<uri>http://avelino.us/</uri>
		</author>
		<source>
			<title type="html">avelino.us's Weblog</title>
			<subtitle type="html">Latest entries on Weblog</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/pyavelino"/>
			<id>tag:blogger.com,1999:blog-2742862280909730250</id>
			<updated>2011-12-22T15:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Playing with Foursquare API with Python</title>
		<link href="http://aimotion.blogspot.com/2011/12/playing-with-foursquare-api-with-python.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-6929937174974243984</id>
		<updated>2011-12-21T21:23:55+00:00</updated>
		<content type="html">&lt;div&gt;Hi all,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd like to share a project that I am developing that it may be useful for anyone who wants to create datasets from mobile location networks. &amp;nbsp;Specifically, I developed a wrapper in Python for accessing the Foursquare API called &lt;a href=&quot;http://pypi.python.org/pypi/pyfoursquare/0.0.1&quot;&gt;PyFoursquare&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For anyone who doesn't know what is &lt;b&gt;&lt;a href=&quot;http://www.foursquare.com/&quot;&gt;Foursquare&lt;/a&gt;&lt;/b&gt;, it is a popular mobile social-location network with more 10.000.000 of users around the world. The idea is that you can share your current location with your friends and as result discover new places, find where your friends are and even check some tips and recommendations about a place and what to do when you arrive there. It is an amazing project with lots of data available for anyone who wants to develop new apps for connect or mine (data mining) its data!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://staenz.com/wp-content/uploads/2010/09/TodoonFoursquare.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;221&quot; src=&quot;http://staenz.com/wp-content/uploads/2010/09/TodoonFoursquare.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Foursquare Mobile Application&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This Python API is one of the results of my master degree project where I proposed a new architecture for mobile recommenders that fetches reviews from social networks to improve the explanation and the quality of the given recommendations. &amp;nbsp;I &amp;nbsp;used this library to collect tips&amp;nbsp;(text reviews)&amp;nbsp;from Foursquare from places at my neighborhood Recife, Brazil. &amp;nbsp;This API was a little messy, so I decided to clean it up, organize and documment it for publish for the open-source community.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of advantages of this API is that you can handle each entity from the Foursquare data as Model object. So instead of handling with json dictionaries, I encapsulate the results in the respective models (Venue, Tips, User, etc.) and access its attributes as common object in Python!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I inspired myself at the work of Joshua at &lt;a href=&quot;https://github.com/tweepy/tweepy&quot;&gt;Tweepy&lt;/a&gt;, which is a Python library for Twitter. &amp;nbsp;In this version released 0.0.1 I only implemented some API's such as search/venues, &amp;nbsp;venue_details and venue_tips. &amp;nbsp;In future releases I pretend to add more models and support for more API methods available at Foursquare.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;How can you use it at your project ?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is simple! Just install it by downloading at the &lt;a href=&quot;https://github.com/marcelcaraciolo/foursquare&quot;&gt;Github's home project&lt;/a&gt;, extract the source from the tar.gz and &amp;nbsp;at the directory of the project run the command below:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;i&gt;$ python setup.py install&lt;/i&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;or the easier way is to install by the command easy_install:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;i&gt;$ easy_install pyfoursquare&lt;/i&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After that, you can &amp;nbsp;simple test by running the command below at your Python Shell&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;gt;&amp;gt;&amp;gt; import pyfoursquare&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Now let's see how you can get started with the PyFoursquare:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First you need to create an application at Foursquare. The link is &lt;a href=&quot;https://foursquare.com/oauth/&quot;&gt;this&lt;/a&gt;. &amp;nbsp;There &amp;nbsp;you can also get further information about the API, another libraries and several applications using the Foursquarw API's. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-51uOmmlQmBA/TvKsDWyMSMI/AAAAAAAAArQ/hxIMG1uqevI/s1600/Screen+shot+2011-12-22+at+1.02.55+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;113&quot; src=&quot;http://3.bp.blogspot.com/-51uOmmlQmBA/TvKsDWyMSMI/AAAAAAAAArQ/hxIMG1uqevI/s400/Screen+shot+2011-12-22+at+1.02.55+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;The Foursquare Developer's Settings&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;After creating your application, you must get the &lt;b&gt;client_id&lt;/b&gt; and your &lt;b&gt;client_secret&lt;/b&gt;. Those keys will be important to connect the app to the users' accounts. &amp;nbsp;Foursquare uses the secure authentication based on &lt;a href=&quot;http://oauth.net/2/&quot;&gt;OAuth2&lt;/a&gt;. &amp;nbsp;In PyFoursquareAPI, you won't need to handle with all steps provided by OAuth2. &amp;nbsp;It already encapsulates all the steps and handshakes between your app and Foursquare servers. \m/&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Below the &amp;nbsp;&lt;a href=&quot;https://gist.github.com/1508880&quot;&gt;code&lt;/a&gt; you must write for authenticate an user to connect to your app:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After the user &amp;nbsp;authorized, you now can instantiate the PyFoursquare API. &amp;nbsp;It will give you access to the Foursquare API methods. &amp;nbsp;I implemented several methods, but feel free to add new ones! Don't forget to submit the final results as pull requests at the project's repository at Github.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this example I fetched a venue by giving as input the latitude and longitude and querying for the place with the name 'Burburinho'. &amp;nbsp;Burburinho is a popular bar nearby where I work! &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://gist.github.com/1508884&quot;&gt;Source code&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now you can access the result and access the Venue as a Python Object. All elements of the Venue are represented as attributes of the object Venue at PyFoursquare. The goal is to make easier the life of the developer when he access the Foursquare API by parsing all the JSON (the result) and placing in the correct model for him.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-TWTeou4gNiM/TvKwX22NUsI/AAAAAAAAArY/lhHZGh8Vk0Y/s1600/Screen+shot+2011-12-22+at+1.23.28+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;140&quot; src=&quot;http://1.bp.blogspot.com/-TWTeou4gNiM/TvKwX22NUsI/AAAAAAAAArY/lhHZGh8Vk0Y/s640/Screen+shot+2011-12-22+at+1.23.28+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I expect you enjoyed this API. Feel free to use it at your applications or research! &amp;nbsp;I'd like to thank the Foursquare team for expose their data by providing those API's! &amp;nbsp;For data mining researchers instered in mobile location data, it is a mine of gold!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Further information about PyFoursquare, you can find &lt;a href=&quot;https://github.com/marcelcaraciolo/foursquare&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Feel free to give sugestions, improvements and comments,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Regards,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marcel Caraciolo&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-6929937174974243984?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">kmod announcement (and how to help testing it!)</title>
		<link href="http://blog.gustavobarbieri.com.br/2011/12/21/kmod-announcement-and-how-to-help-testing-it/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=kmod-announcement-and-how-to-help-testing-it"/>
		<id>http://blog.gustavobarbieri.com.br/?p=267</id>
		<updated>2011-12-21T18:24:27+00:00</updated>
		<content type="html">&lt;h4&gt;introduction and motivation&lt;/h4&gt;
&lt;p&gt;At &lt;a title=&quot;ProFUSION embedded systems&quot; href=&quot;http://profusion.mobi/&quot;&gt;ProFUSION&lt;/a&gt; a common topic is how to optimze the system. Not just the speed, but also what and how it is done. Not just for our embedded systems, but also our desktops and laptops.&lt;/p&gt;
&lt;p&gt;These discussions led us to be involved in projects that consider this goal, such as &lt;a title=&quot;window manager and graphical user interface toolkit&quot; href=&quot;http://enlightenment.org/&quot;&gt;Enlightenment&lt;/a&gt;,&#160;&lt;a title=&quot;connman - connection manager&quot; href=&quot;http://connman.net/&quot;&gt;ConnMan&lt;/a&gt;, &lt;a title=&quot;oFono - open source telephony&quot; href=&quot;http://ofono.org/&quot;&gt;oFono&lt;/a&gt; and &lt;a title=&quot;system and service manager for Linux&quot; href=&quot;http://www.freedesktop.org/wiki/Software/systemd&quot;&gt;systemd&lt;/a&gt;. With great projects, come great people and thus enlightening discussions on how to improve things. From these discussions &lt;a title=&quot;Lennart Poettering's home page&quot; href=&quot;http://0pointer.de/lennart/&quot;&gt;Lennart Poettering&lt;/a&gt;&#160;and &lt;a title=&quot;Kay Sievers G+ profile&quot; href=&quot;https://plus.google.com/108087225644395745666/posts&quot;&gt;Kay Sievers&lt;/a&gt;&#160;put together a &lt;a title=&quot;A Plumber's Wish List for Linux&quot; href=&quot;http://0pointer.de/blog/projects/plumbers-wishlist.html&quot;&gt;A Plumber&amp;#8217;s Wish List for Linux&lt;/a&gt;, with one of the items being of special interest for ProFUSION as it had the potential of also helping embedded systems and speeding up or boots:&lt;/p&gt;
&lt;pre&gt;* module-init-tools: provide a proper libmodprobe.so from
module-init-tools:
Early boot tools, installers, driver install disks want to
access information about available modules to optimize
bootup handling.&lt;/pre&gt;
&lt;p&gt;One of the reasons for this is that udev will search /sys/devices for all &amp;#8220;modalias&amp;#8221; files and call &amp;#8220;&lt;code&gt;/sbin/modprobe -bv $ALIAS&lt;/code&gt;&amp;#8220;, however many of these calls evaluate to an empty list, thus an useless execution of program that will open /lib/modules/`uname -r`/modules.*, load resources, search for something that is not there and return. This could be way cheaper if done inside udev workers. &lt;em&gt;[note: Lucas did measure and noticed 2.5x speedups, stay tuned for benchmarks]&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;kmod&lt;/h4&gt;
&lt;p&gt;Then our developer &lt;a title=&quot;Lucas De Marchi personal blog.&quot; href=&quot;http://www.politreco.com/&quot;&gt;Lucas De Marchi&lt;/a&gt; proposed to do the libmodprobe and we funded it. After some discussions with Lennart and Kay, it was decided to rename it to &lt;strong&gt;kmod&lt;/strong&gt; for shortness and good namespace. The initial goal was to achive a 1:1 replacement of module-init-tools as a library to be used by udev and systemd-modules-load and we are close to it with our &lt;a title=&quot;kmod-v2&quot; href=&quot;http://www.politreco.com/2011/12/announce-kmod-2/&quot;&gt;second release done today&lt;/a&gt;! While we miss depmod tool (planned for v3), our kmod-modprobe should be fully functional and if this proves to be true, the logic will move to libkmod to be used by udev.&lt;/p&gt;
&lt;h4&gt;we need your testing!&lt;/h4&gt;
&lt;p&gt;To ensure kmod-modprobe does what it is supposed to do, we need extensive testing, there is where we need you! Try it on as many systems as possibles and let us know. To do this we recommend:&lt;/p&gt;
&lt;pre&gt;$ git clone git://git.profusion.mobi/kmod.git
$ cd kmod
$ ./autogen.sh
$ ./configure --enable-logging \
              --enable-debug --enable-tools \
              --enable-zlib # if you have module.ko.gz
$ make all
$ sudo make install
$ sudo mv /sbin/modprobe /sbin/modprobe-bkp
$ sudo ln -s /usr/bin/kmod-modprobe /sbin/modprobe
$ ls -1 /sys/module/ &amp;gt; ~/original-modules
$ reboot
$ ls -1 /sys/module/ &amp;gt; ~/kmod-modules
$ diff ~/original-modules ~/kmod-modules&lt;/pre&gt;
&lt;h4&gt;current users and feedback&lt;/h4&gt;
&lt;p&gt;Being a new project in a critical area of Linux system, we expected lots of criticism and rejection by people, but interestingly enough after &lt;a title=&quot;kmod-v1&quot; href=&quot;http://www.politreco.com/2011/12/announce-kmod-1/&quot;&gt;Lucas&amp;#8217; announcement&lt;/a&gt; and &lt;a title=&quot;LWN article: First version of kmod released&quot; href=&quot;http://lwn.net/Articles/472354/&quot;&gt;LWN article&lt;/a&gt; the feedback was highly positive! We even had some testers and people to help with ideas and experience.&lt;/p&gt;
&lt;p&gt;Among the people that joined the project is the current maintainer of module-init-tools package &lt;a title=&quot;Jon Masters' home page&quot; href=&quot;http://jonmasters.org/&quot;&gt;Jon Masters&lt;/a&gt;, which announced that &lt;a title=&quot;libkmod replaces module-init-tools&quot; href=&quot;http://www.jonmasters.org/blog/2011/12/20/libkmod-replaces-module-init-tools/&quot;&gt;kmod replaces module-init-tools&lt;/a&gt;. He is helping a lot with his knowledge and cases from Red Hat Enterprise Linux, also providing modules from non-trivial platforms such as s390. Last but not least he provided insights to improve module handling on Linux, particularly replacing modules with better alternative as required in enterprise systems.&lt;/p&gt;
&lt;p&gt;With Jon&amp;#8217;s blessing we&amp;#8217;ll use the same mailing list &lt;a title=&quot;linux-modules mailing list&quot; href=&quot;http://vger.kernel.org/vger-lists.html#linux-modules&quot;&gt;linux-modules@vger.kernel.org&lt;/a&gt; and our git will move to kernel.org soon.&lt;/p&gt;
&lt;p&gt;People from ARCH and Debian were also interested and even created packages for it! These guys were extremely helpful to test cases such as gzip modules, 64bits modules with i386 user space and so on. They are:&#160;Tom Gundersen (tomegun), Dave Reisner (falconindy) and Marco&#160;d&#8217;Itri (Md).&lt;/p&gt;
&lt;h4&gt;next steps&lt;/h4&gt;
&lt;p&gt;Based on our TODO, we have the following ideas for next steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Finish libkmod-elf.c to provide information required by depmod. I&amp;#8217;m working on this in my depmod branch;&lt;/li&gt;
&lt;li&gt;tools/kmod-depmod.c: create a 1:1 compatible tool to generate /lib/modules/`uname -r`/modules.*;&lt;/li&gt;
&lt;li&gt;libkmod should export parsed configuration to be used by kmod-modprobe.c &amp;#8211;dumpconfig;&lt;/li&gt;
&lt;li&gt;create kmodmock library to be LD_PRELOAD&amp;#8217;ed to redirect some syscalls such as init_module(), delete_module() and open() of /sys and /proc. I&amp;#8217;ve started a branch for this some time ago as &amp;#8220;unittest&amp;#8221; branch but stopped due lack of ELF support at the time;&lt;/li&gt;
&lt;li&gt;create unittests and measure coverage. Given kernel modules are user-input they may be broken files and libkmod-elf.c needs to be extensively tested to avoid segmentation fault due out-of-boundaries access. This mean not trusting null terminated string in .strtab section and so on.&lt;/li&gt;
&lt;li&gt;create optimized modules.archive that would contain optimized search index and all modules compressed independently, but in the same file. This would save file access and could provide information we don&amp;#8217;t have today, like the uncompressed size of gzipped modules.&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Gustavo Barbieri</name>
			<uri>http://blog.gustavobarbieri.com.br</uri>
		</author>
		<source>
			<title type="html">Gustavo Sverzut Barbieri</title>
			<subtitle type="html">Computer Hacker and Entrepreneur</subtitle>
			<link rel="self" href="http://blog.gustavobarbieri.com.br/feed/atom/"/>
			<id>http://blog.gustavobarbieri.com.br/feed/atom/</id>
			<updated>2012-02-04T17:44:24+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Workshop de Javascript Avan&#231;ado</title>
		<link href="http://feedproxy.google.com/~r/Fechatag/~3/v4SN73fZLVo/"/>
		<id>http://elcio.com.br/?p=3604</id>
		<updated>2011-12-21T17:05:49+00:00</updated>
		<content type="html">&lt;p&gt;Javascript se tornou a linguagem mais importante no desenvolvimento web. N&#227;o importa o que voc&#234; use no servidor, Ruby, PHP, Python, Java, .Net&amp;#8230;&lt;/p&gt;
&lt;p&gt;Com a chegada do HTML5 e suas novas APIs, Javascript vai ganhar ainda mais import&#226;ncia nos pr&#243;ximos anos.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://js.visie.com.br/&quot;&gt;Aprenda Javascript de Verdade&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/_co1F-9VXLlmbIxlW75DpQQr8Ds/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/_co1F-9VXLlmbIxlW75DpQQr8Ds/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/_co1F-9VXLlmbIxlW75DpQQr8Ds/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/_co1F-9VXLlmbIxlW75DpQQr8Ds/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Fechatag?a=v4SN73fZLVo:Xj1UhncphcA:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Fechatag?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Fechatag?a=v4SN73fZLVo:Xj1UhncphcA:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Fechatag?i=v4SN73fZLVo:Xj1UhncphcA:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Elcio Luiz Ferreira</name>
			<uri>http://elcio.com.br</uri>
		</author>
		<source>
			<title type="html">fechaTag</title>
			<subtitle type="html">HTML5, CSS, Tableless, Desenvolvimento Web, Python, Linux</subtitle>
			<link rel="self" href="http://elcio.com.br/tag/programacao/feed/"/>
			<id>http://elcio.com.br/tag/programacao/feed/</id>
			<updated>2012-01-27T00:44:19+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Google Nexus S, atualiza&#231;&#227;o oficial para Android 4.0 (Ice Cream Sandwich)</title>
		<link href="http://feedproxy.google.com/~r/pyAvelino/~3/7uVchCmbc_M/"/>
		<id>http://avelino.us/2011/12/17/google-nexus-s-atualizacao-oficial-para-android-40/</id>
		<updated>2011-12-17T17:41:09+00:00</updated>
		<content type="html">&lt;p&gt;Dia 16/12/2011 o Google lan&#231;ou oficialmente a atualiza&#231;&#227;o do aparelho Nexus S para Ice Cream Sandwich (Android 4.0), a noticia saiu no Twitter oficial do &lt;a href=&quot;https://twitter.com/#!/googlenexus/status/147783081426817024&quot;&gt;Google Nexus&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Para voc&#234; atualizar o seu Nexus S fa&#231;a o seguinte procedimento:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1&lt;/code&gt; - Fa&#231;a download da imagem do Android 4.0 para o Nexus S no seguinte link:
&lt;a href=&quot;http://android.clients.google.com/packages/ota/google_crespo/VQ8PQk_V.zip&quot;&gt;http://android.clients.google.com/packages/ota/google_crespo/VQ8PQk_V.zip&lt;/a&gt; ou &lt;a href=&quot;http://dl.dropbox.com/u/763381/VQ8PQk_V.zip&quot;&gt;http://dl.dropbox.com/u/763381/VQ8PQk_V.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2&lt;/code&gt; - Coloque o &lt;code&gt;VQ8PQk_V.zip&lt;/code&gt; SD do seu Nexus S e voc&#234; deve renomear o arquivo para &lt;code&gt;update.zip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;3&lt;/code&gt; - Desligue o seu aparelho&lt;/li&gt;
&lt;li&gt;&lt;code&gt;4&lt;/code&gt; - Aperte o bot&#227;o do &lt;code&gt;volume&lt;/code&gt; para cima + o bot&#227;o &lt;code&gt;power&lt;/code&gt;, seu celular vai iniciar no modulo &lt;code&gt;fastboot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;5&lt;/code&gt; - Selecione a op&#231;&#227;o &lt;code&gt;recovery&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;6&lt;/code&gt; - Vai come&#231;a carregar e aparecera um &lt;code&gt;tri&#226;ngulo&lt;/code&gt; com um &lt;code&gt;!&lt;/code&gt;, nessa tela voc&#234; deve aperta o bot&#227;o &lt;code&gt;power&lt;/code&gt; + &lt;code&gt;volume&lt;/code&gt; para cima (&lt;code&gt;Deve ser na sequ&#234;ncia relatado no post&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;7&lt;/code&gt; - Vai aparecer um menu onde voc&#234; deve selecionar a seguinte op&#231;&#227;o &lt;code&gt;Apply update from /sdcard&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;8&lt;/code&gt; - Ap&#243;s instalar voc&#234; deve selecionar &lt;code&gt;reboot system now&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;9&lt;/code&gt; - Pronto, &lt;code&gt;Android 4.0.3&lt;/code&gt; instalado no seu Nexus S&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quando o seu celular for ligar a primeira vez com Android 4.0 ele vai ficar um pouco lento pois vai refazer o &lt;code&gt;dalvik cache&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Lembrando que voc&#234; tem que ter a vers&#227;o do Android oficial do Google instalado no seu Nexus S, caso n&#227;o esteja n&#227;o vai conseguir fazer os procedimentos, pois estamos atualizando para a vers&#227;o oficial do Google.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;O Google vai liberar aos poucos a atualiza&#231;&#227;o automatica para os Nexus S pois se n&#227;o vai acabar com o link das operadoras, no Brasil principalmente que nosso 3G &#233; um 2G.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/5yl0jRsHQuYZUIlkUQZySf9JFqw/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/5yl0jRsHQuYZUIlkUQZySf9JFqw/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/5yl0jRsHQuYZUIlkUQZySf9JFqw/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/5yl0jRsHQuYZUIlkUQZySf9JFqw/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/pyAvelino/~4/7uVchCmbc_M&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>avelino</name>
			<email>avelino@chierry.com</email>
			<uri>http://avelino.us/</uri>
		</author>
		<source>
			<title type="html">avelino.us's Weblog</title>
			<subtitle type="html">Latest entries on Weblog</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/pyavelino"/>
			<id>tag:blogger.com,1999:blog-2742862280909730250</id>
			<updated>2011-12-22T15:44:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">&#218;ltima palestra do dia do Encontro</title>
		<link href="http://pugpe.wordpress.com/2011/12/12/resumo-do-xvii-encontro-do-grupo-de-usuarios-de-python-de-pernambuco/"/>
		<id>http://pugpe.wordpress.com/?p=808</id>
		<updated>2011-12-13T02:33:19+00:00</updated>
		<content type="html">&lt;p&gt;Pessoal,&lt;/p&gt;
&lt;p&gt;Tivemos neste &#250;ltimo s&#225;bado o nosso &#250;ltimo encontro do ano (&lt;a href=&quot;http://pug-pe.python.org.br/encontro/xvii/&quot;&gt;XVII Encontro do PUG-PE&lt;/a&gt;) l&#225; no&lt;strong&gt; Audit&#243;rio do Instituto Federal de Pernambuco (IFPE)&lt;/strong&gt;, Antigo CEFET. Um evento com excelentes palestras e muito networking. Agradecimentos especiais ao Prof. Marcos por nos ajudar a mais uma vez a sediar este evento no IFPE, nossa segunda vez &#160;este ano! E tamb&#233;m agradecimentos aos nossos patrocinadores as startups Orygens , Idealizza e Hostech!&lt;/p&gt;
&lt;p&gt;Algumas fotos abaixo do evento:&lt;/p&gt;
&lt;div id=&quot;attachment_809&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/12/381236_286171161420175_100000818804930_739517_1913435677_n.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-809&quot; title=&quot;XVII Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&quot; src=&quot;http://pugpe.files.wordpress.com/2011/12/381236_286171161420175_100000818804930_739517_1913435677_n.jpg?w=300&amp;h=225&quot; alt=&quot;XVII Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XVII Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;A primeira palestra foi ministrada pelo Luciano Rodrigues e o Arthur Alvin (por sinal agradecimentos especiais ao Arthur que deu uma for&#231;a para organiza&#231;&#227;o de todo o evento e nosso contato no IFPE). &#160;Eles ministraram uma palestra r&#225;pida sobre o que &#233; o PUG-PE e o uso de Python na comunidade.&lt;/p&gt;
&lt;p&gt;A pr&#243;xima palestra ministrada foi por Marcos Egito que &#233; um dos educadores do Centro de Reciclagem de Computadores (CRC) da Unidade Marista. Ele falou um pouco do trabalho que ele realiza junto &#224; institui&#231;&#227;o e como Python tem ajudado a educar jovens carentes no ensino de programa&#231;&#227;o! Muito se deu gra&#231;as ao trabalho conjunto com o grupo de usu&#225;rios de Python de Pernambuco que em parceria realizou em meados de agosto um evento por l&#225;! Parab&#233;ns pessoal!&lt;/p&gt;
&lt;p&gt;Seguem os &lt;a href=&quot;http://www.slideshare.net/maregito/python-na-formacaodejovens-10553026&quot;&gt;slides&lt;/a&gt; da palestra do Marcos:&lt;/p&gt;

&lt;p&gt;A pr&#243;xima palestra foi ministrada pelo Marcelo Lira, engenheiro do Instituto Nokia de Tecnologia, que apresentou o projeto que vem trabalhando junto ao instituto por meio de bindings de C++ com Python. Esta palestra foi ministrada na PythonBrasil deste ano e convidamos o Marcelo para apresentar em nosso evento local! O trabalho muito interessante o qual ele fala das experi&#234;ncias, dores de cabe&#231;a (hehe trabalhar com C++ e templates &#233; pra quem tem colh$%oes!) . O projeto serviu como base para construir os bindings do Qt com Python , do qual derivou o atual projeto PySide !&lt;/p&gt;
&lt;p&gt;Seguem os slides e a foto do Marcelo palestrando:&lt;/p&gt;
&lt;div id=&quot;attachment_811&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/12/384008_286171328086825_100000818804930_739519_965106972_n.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-811&quot; title=&quot;Marcelo Lira palestrando sobre bindings com Python e C++&quot; src=&quot;http://pugpe.files.wordpress.com/2011/12/384008_286171328086825_100000818804930_739519_965106972_n.jpg?w=300&amp;h=225&quot; alt=&quot;Marcelo Lira palestrando sobre bindings com Python e C++&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Marcelo Lira palestrando sobre bindings com Python e C++&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Seguem os &lt;a href=&quot;http://www.slideshare.net/bueroman/shiboken&quot;&gt;slides&lt;/a&gt; do Marcelo Lira:&lt;/p&gt;

&lt;p&gt;Ap&#243;s o coffee-break tivemos a palestra do Hugo Serrando com aplica&#231;&#245;es cient&#237;ficas usando Python. Hugo apresentou como ele aplicou python em seus diversos projetos, em especial um projeto bem interessante envolvendo predi&#231;&#227;o de nivelamento de barragens que j&#225; foi tema de palestra rel&#226;mpago do &#250;ltimo encontro. V&#225;rias aplica&#231;&#245;es interessantes com o uso dos pacotes numpy, Scipy e matplotlib!&lt;/p&gt;
&lt;p&gt;Segue foto e &lt;a href=&quot;http://www.slideshare.net/hugoserrano/computao-cientfica-com-python&quot;&gt;slides&lt;/a&gt; do Hugo:&lt;/p&gt;
&lt;div id=&quot;attachment_813&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/12/386734_286171521420139_100000818804930_739522_863696696_n.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-813&quot; title=&quot;Hugo Serrano apresentando sobre Aplica&#231;&#245;es Cient&#237;ficas com Python&quot; src=&quot;http://pugpe.files.wordpress.com/2011/12/386734_286171521420139_100000818804930_739522_863696696_n.jpg?w=300&amp;h=225&quot; alt=&quot;Hugo Serrano apresentando sobre Aplica&#231;&#245;es Cient&#237;ficas com Python&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Hugo Serrano apresentando sobre Aplica&#231;&#245;es Cient&#237;ficas com Python&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Por fim terminamos com algumas palestras rel&#226;mpago com os membros Brunno Gomes sobre o Mini- Framework Web Bottle , Andr&#233; Ericsson e outro membro do grupo rec&#233;m-chegado e membro do CRC!&lt;/p&gt;
&lt;p&gt;Seguem as fotos e as palestras-rel&#226;mpago:&lt;/p&gt;
&lt;div id=&quot;attachment_815&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/12/391924_286171601420131_100000818804930_739523_448036718_n.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-815&quot; title=&quot;Palestra Rel&#226;mpago do Andr&#233;&quot; src=&quot;http://pugpe.files.wordpress.com/2011/12/391924_286171601420131_100000818804930_739523_448036718_n.jpg?w=300&amp;h=225&quot; alt=&quot;Palestra Rel&#226;mpago do Andr&#233;&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Palestra Rel&#226;mpago do Andr&#233;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/pugpe/palestra-sobre-collections-com-python&quot;&gt;Slides&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;Foto da palestra do Brunno Gomes:&lt;/p&gt;
&lt;div id=&quot;attachment_810&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/12/382968_286171874753437_100000818804930_739528_1870181638_n.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-810&quot; title=&quot;Brunno Gomes apresentando o Bottle.py&quot; src=&quot;http://pugpe.files.wordpress.com/2011/12/382968_286171874753437_100000818804930_739528_1870181638_n.jpg?w=300&amp;h=225&quot; alt=&quot;Brunno Gomes apresentando o Bottle.py&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Brunno Gomes apresentando o Bottle.py&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;E por fim a &#250;ltima palestra do dia:&lt;/p&gt;
&lt;div id=&quot;attachment_812&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/12/386260_286171828086775_100000818804930_739527_1312425692_n.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-812&quot; title=&quot;&#218;ltima palestra do dia do Encontro&quot; src=&quot;http://pugpe.files.wordpress.com/2011/12/386260_286171828086775_100000818804930_739527_1312425692_n.jpg?w=300&amp;h=225&quot; alt=&quot;&#218;ltima palestra do dia do Encontro&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;&#218;ltima palestra do dia do Encontro&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;E assim foi mais um encontro do PUG-PE! Queremos agradecer a todos os presentes e novamente agradecer a todos que fizeram este PUG-PE crescer neste ano de 2011! Realizamos 8 encontros, mais de 4 workshops e mais de 2 cursos e v&#225;rias palestras! &#160;Um excelente 2011 e que venha 2012 com mais sucesso e mais novos pythonistas em nosso grupo mostrando seus trabalhos e compartilhando o conhecimento!&lt;/p&gt;
&lt;h3&gt;Links para os assuntos discutidos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://python.org/&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://smallactsmanifesto.org/&quot;&gt;SmallActs Manifesto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pyside.org/&quot;&gt;PySide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://socialmarista.org.br/inclusao-digital/centro-de-recondicionamento-de-computadores-crc&quot;&gt;CRC Marista&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bottlepy.org/docs/dev/&quot;&gt;Bottle.py&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.scipy.org/&quot;&gt;Scipy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://numpy.scipy.org/&quot;&gt;Numpy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://docs.python.org/library/collections.html&quot;&gt;Collections&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/808/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/808/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/808/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/808/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/808/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/808/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/808/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/808/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/808/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/808/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/808/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/808/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/808/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/808/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=808&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Good concurrency changes the game</title>
		<link href="http://blog.labix.org/2011/12/12/good-concurrency-changes-the-game"/>
		<id>http://blog.labix.org/?p=886</id>
		<updated>2011-12-12T17:52:47+00:00</updated>
		<content type="html">&lt;p&gt;A long time before I seriously got into using distributed version control systems (DVCS) such as Bazaar and Git for developing software, it was already well known to me how the mechanics of these systems worked, and why people benefited from them. That said, it wasn&amp;#8217;t until I indeed started to use DVCS tools that I understood how much my daily workflow around code bases would be changed and improved.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-886&quot;&gt;&lt;/span&gt;This weekend, while flying home from &lt;a href=&quot;http://www.10gen.com/events/mongosv-2011&quot;&gt;MongoSV&lt;/a&gt;, I could experience that same feeling in relation to first class concurrency support in programming languages. Everybody knows how the feature may be used, but I have the feeling that until one actually experiences it in practice, it&amp;#8217;s very hard to really understand how much the relationship with ordering while developing software may be improved.&lt;/p&gt;
&lt;p&gt;I was having some fun working on improvements to &lt;a href=&quot;https://wiki.ubuntu.com/goetveld&quot;&gt;Goetveld&lt;/a&gt;. This package allows &lt;a href=&quot;http://golang.org&quot;&gt;Go&lt;/a&gt; programs to communicate with &lt;a href=&quot;https://codereview.appspot.com&quot;&gt;Rietveld&lt;/a&gt; servers to manipulate code review entries. The Rietveld API is a bit rough in a few places, and as a result some features of the package actually parse an HTML form to extract some data, before sending it back. You may have done something similar before while attempting to script a web site that wasn&amp;#8217;t originally intended to be.&lt;/p&gt;
&lt;p&gt;The interesting fact here is that this is an intrinsically serial procedure: load a form, change it, and send it back, right? Well, not really. As one might intuitively expect, establishing an SSL session and its underlying TCP connection are not instantaneous operations.&lt;/p&gt;
&lt;p&gt;To give an idea, here is part of a dump of an SSL connection being &lt;i&gt;initiated&lt;/i&gt; (that is, no HTTP data was sent yet) to codereview.appspot.com, originated from my home location:&lt;/p&gt;
&lt;pre&gt;
# tcpdump -ttttt -i wlan0 'host codereview.appspot.com and port 443'
(...)
00:00:00.000000 IP (...)
00:00:00.000063 IP (...)
00:00:00.000562 IP (...)
00:00:00.341627 IP (...)
00:00:00.357009 IP (...)
00:00:00.357118 IP (...)
00:00:00.360362 IP (...)
00:00:00.360550 IP (...)
00:00:00.366011 IP (...)
00:00:00.689446 IP (...)
00:00:00.727693 IP (...)
&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s more than half a second before the application layer was even touched. So, turns out that to save that roundtrip time, we can start &lt;i&gt;both&lt;/i&gt; the form loading and the form sending requests &lt;i&gt;at the same time&lt;/i&gt;. By the time the form loading ends, processing the data locally is extremely fast, and we can complete the sending side by just providing the request body.&lt;/p&gt;
&lt;p&gt;At this time you may be thinking something like &lt;i&gt;&amp;#8220;Ugh, that&amp;#8217;s too much trouble.. why bother?&amp;#8221;&lt;/i&gt;, and that highlights precisely the point I&amp;#8217;d like to make: it is too much trouble because most people are used to languages that &lt;i&gt;turn&lt;/i&gt; it into too much trouble, but the issue is not inherently complex. In fact, this is the entire implementation of this logic in Go:&lt;/p&gt;
&lt;pre&gt;
func (r *Rietveld) UpdateIssue(issue *Issue) error {
        op := &amp;#038;opInfo{r: r, issue: issue}
        errs := make(chan error)
        ch := make(chan map[string]string, 1)
        go func() {
                errs - r.do(&amp;#038;editLoadHandler{op: op, form: ch})
                close(ch)
        }()
        go func() {
                errs - r.do(&amp;#038;editHandler{op: op, form: ch})
        }()
        return firstError(2, errs)
}
&lt;/pre&gt;
&lt;p&gt;I'm not cheating. The procedure was being done serially before, with very similar logic. Previously it had to take the form variable itself from the first request and manually provide it to the next one. Now, instead of providing the form, it's providing a channel that will be used to send the form across.  One might even argue that the channel makes the algorithm &lt;i&gt;more natural&lt;/i&gt;, curiously.&lt;/p&gt;
&lt;p&gt;This is the kind of procedure that becomes fun and natural to write, after having first class concurrency at hand for some time. But, as in the case of DVCS, it takes a while to get used to the idea that concurrency and simplicity are not necessarily at opposing ends.&lt;/p&gt;</content>
		<author>
			<name>Gustavo Niemeyer</name>
			<uri>http://blog.labix.org</uri>
		</author>
		<source>
			<title type="html">Labix Blog</title>
			<subtitle type="html">by Gustavo Niemeyer</subtitle>
			<link rel="self" href="http://blog.labix.org/feed"/>
			<id>http://blog.labix.org/feed</id>
			<updated>2012-01-16T04:44:38+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">eminetto</title>
		<link href="http://eltonminetto.net/2011/12/09/backup-dos-e-mails-do-gmail/"/>
		<id>http://eltonminetto.net/?p=841</id>
		<updated>2011-12-09T17:14:49+00:00</updated>
		<content type="html">&lt;p&gt;Hoje precisei fazer uma tarefa que acabou me levando a descobrir uma nova ferramenta. A tarefa em quest&#227;o era: &amp;#8220;exportar para uma lista os e-mails de todas as pessoas que compraram o meu &lt;a href=&quot;http://www.zfnapratica.com.br&quot; target=&quot;_blank&quot;&gt;e-book&lt;/a&gt;&amp;#8220;. Toda venda realizada com sucesso o Pagseguro me envia um e-mail avisando da venda, e um script PHP que eu criei envia o PDF do e-book para o e-mail do comprador. Ent&#227;o teoricamente s&#243; precisaria exportar essa lista de e-mails enviados da minha conta do Gmail para um arquivo TXT.&lt;br /&gt;
Ap&#243;s pesquisar algumas alternativas cheguei ao &lt;a href=&quot;http://code.google.com/p/got-your-back/&quot; target=&quot;_blank&quot;&gt;Got Your Back (GYB)&lt;/a&gt;. &#201; um script Python que serve para fazer um backup/restore de todos os e-mails da sua conta do Gmail. Ele salva todas as mensagens em pastas separadas por ano/mes, no formato .eml, o que facilita o uso de alguma ferramenta de busca de textos como o find do MacOSX/Linux. E para facilitar ainda mais ele gera um banco de dados SQLite com os detalhes da mensagem (from, to, subject), ent&#227;o &#233; s&#243; fazer uma consulta SQL e voc&#234; tem acesso a todas as suas mensagens.&lt;br /&gt;
Achei bem &#250;til e f&#225;cil de usar, ent&#227;o resolvi compartilhar.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/eltonminetto.wordpress.com/841/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/eltonminetto.wordpress.com/841/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/eltonminetto.wordpress.com/841/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/eltonminetto.wordpress.com/841/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/eltonminetto.wordpress.com/841/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/eltonminetto.wordpress.com/841/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/eltonminetto.wordpress.com/841/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/eltonminetto.wordpress.com/841/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/eltonminetto.wordpress.com/841/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/eltonminetto.wordpress.com/841/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/eltonminetto.wordpress.com/841/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/eltonminetto.wordpress.com/841/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/eltonminetto.wordpress.com/841/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/eltonminetto.wordpress.com/841/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=eltonminetto.net&amp;blog=18808326&amp;post=841&amp;subd=eltonminetto&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>Elton Lu&#237;s Minetto</name>
			<uri>http://eltonminetto.net</uri>
		</author>
		<source>
			<title type="html">Elton Lu&#237;s Minetto &#187; python</title>
			<subtitle type="html">Site pessoal de Elton Minetto</subtitle>
			<link rel="self" href="http://eltonminetto.net/category/python/feed/"/>
			<id>http://eltonminetto.net/category/python/feed/</id>
			<updated>2012-01-26T16:44:28+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Annoucing a Scientific Computing With Python Course !</title>
		<link href="http://aimotion.blogspot.com/2011/12/annoucing-scientific-computing-with.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-5770364820088068788</id>
		<updated>2011-12-07T15:55:12+00:00</updated>
		<content type="html">Hi all,&lt;br /&gt;&lt;br /&gt;&lt;div&gt;I am announcing the launch of the website &lt;b&gt;PyCursos&lt;/b&gt;. Pycursos is a online-course and training platform for anyone who wants to learn Python programming language and its related extensions. The first course is being already announced, which is the &lt;b&gt;Scientific Computing Programming with Python&lt;/b&gt;, &amp;nbsp;with me as teacher.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-5-nu7eUKNnM/Tt_qWby1u_I/AAAAAAAAAqs/rJ2pGnXdYN0/s1600/Screen+shot+2011-12-07+at+7.36.52+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;141&quot; src=&quot;http://3.bp.blogspot.com/-5-nu7eUKNnM/Tt_qWby1u_I/AAAAAAAAAqs/rJ2pGnXdYN0/s400/Screen+shot+2011-12-07+at+7.36.52+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The goal of the course is to teach scientific computing, specially on how to solve scientific problems in your daily routine by using the packages that Python provides for free: &lt;b&gt;Scipy, Numpy and Matplotlib.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;With those tools, the student will learn how to reproduce their problems into a simple and legible code and to use the helpful tools to plot graphs, write reports, mathematics optmization, matrices manipulation, linear algebra and more.&lt;br /&gt;&lt;br /&gt;The requirement to attend the course is only the student be motivated to learn and have some experience with programming. &amp;nbsp;The course will start in 2012, January in on-line mode, where the students will apply and follow a schedule of video-classes on-line and review exercises regularly.&lt;br /&gt;&lt;br /&gt;We have also the option of the in-company training, where the student may watch the classes in a classroom with another students. In both modes the students, at the end of the course, will receive a conclusion certificate. &lt;br /&gt;&lt;br /&gt;It is important to tell that the course now is all &amp;nbsp;in &lt;b&gt;Portuguese&lt;/b&gt;! Sorry for anyone for another countries!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For further information please visit our website : &lt;a href=&quot;http://www.pycursos.com/&quot;&gt;http://www.pycursos.com&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyone who whant to know more about scientific computing with python, can check out those&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/computao-cientfica-com-python-numpy-e-scipy&quot;&gt;slides&lt;/a&gt;&amp;nbsp;of a keynote that I lectured at some institutions from here at Recife, Pernambuco, Brazil.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;center&gt;&lt;div id=&quot;__ss_9123741&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/computao-cientfica-com-python-numpy-e-scipy&quot; target=&quot;_blank&quot; title=&quot;Computa&#231;&#227;o Cient&#237;fica com Python, Numpy e Scipy&quot;&gt;Computa&#231;&#227;o Cient&#237;fica com Python, Numpy e Scipy&lt;/a&gt;&lt;/strong&gt;  &lt;br /&gt;&lt;div&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot; target=&quot;_blank&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo&quot; target=&quot;_blank&quot;&gt;Marcel Caraciolo&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Regards,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marcel Caraciolo&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-5770364820088068788?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Aberto o per&#237;odo de propostas para sediar a PythonBrasil[8] em 2012 (prorrogado)</title>
		<link href="http://associacao.python.org.br/associacao/imprensa/noticias/aberto-o-periodo-de-propostas-para-sediar-a-pythonbrasil-8-em-2012"/>
		<id>http://associacao.python.org.br/associacao/imprensa/noticias/aberto-o-periodo-de-propostas-para-sediar-a-pythonbrasil-8-em-2012</id>
		<updated>2011-12-06T21:55:00+00:00</updated>
		<content type="html">&lt;p&gt;&lt;strong&gt;Atualiza&#231;&#227;o:&lt;/strong&gt; a not&#237;cia foi atualizada para refletir as novas datas.&lt;/p&gt;
&lt;p&gt;Est&#225; aberto o per&#237;odo para envio de propostas para sediar a PythonBrasil[8] que acontecer&#225; por volta de setembro/outubro de 2012 (as candidaturas dever&#227;o listar as datas poss&#237;veis em suas propostas).&lt;/p&gt;
&lt;p&gt;As propostas devem ser enviadas at&#233; o fim do dia 18 de Dezembro de 2011 e a escolha ser&#225; divulgada at&#233; o dia 8 de Janeiro de 2012. A escolha ser&#225; feita por um comit&#234; formado pela diretoria da Associa&#231;&#227;o Python Brasil mais os BigKahunas das edi&#231;&#245;es anteriores do evento (respons&#225;veis pela organiza&#231;&#227;o).&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;T&#233;rmino do prazo:&lt;/strong&gt; at&#233; o fim do dia 18/12/2011 (essa j&#225; &#233; a data p&#243;s-prorroga&#231;&#227;o)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Divulga&#231;&#227;o do resultado:&lt;/strong&gt; 08/01/2012&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;As propostas devem ser elaboradas de forma &#224; &quot;vender&quot; o local do evento para esse comit&#234; que vai avaliar os seguintes &#237;tens (por ordem de import&#226;ncia):&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Big Kahuna&lt;/strong&gt; &#8212; Nome da pessoa que ser&#225; o respons&#225;vel principal pela organiza&#231;&#227;o do evento. O envolvimento dessa pessoa com a comunidade, disponibilidade de tempo, capacidade de mobilizar, organizar e delegar tarefas ter&#227;o o maior peso na escolha do local.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Autonomia&lt;/strong&gt; &#8212; A PythonBrasil &#233; um evento da comunidade Python e &#233; organizado pela Associa&#231;&#227;o Python Brasil, ou seja, a prerrogativa de definir o conte&#250;do apresentado (grade de palestras, etc) pertence &#224; comunidade.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Localiza&#231;&#227;o&lt;/strong&gt; &#8212; F&#225;cil acesso &#224; cidade (passagens a&#233;reas baratas, proximidade geogr&#225;fica, etc) e mobilidade na cidade (transporte p&#250;blico, metr&#244;, etc).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Interesse de patrocinadores&lt;/strong&gt; &#8212; A Associa&#231;&#227;o Python Brasil j&#225; tem um relacionamento de longa data com diversas empresas dispostas a patrocinar a PythonBrasil e alguns deles tem prefer&#234;ncia por certas cidades. Os proponentes est&#227;o livres para acrescentar nomes de empresas com interesse real em patrocinar o evento.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Estrutura&lt;/strong&gt; &#8212; Local onde o evento ser&#225; realizado, disponibilidade de infra-estrutura de rede, energia, audit&#243;rios, salas para treinamentos, espa&#231;o para &quot;OpenSpaces&quot;, seguran&#231;a, entre outras.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Fornecedores&lt;/strong&gt; &#8212; equipamentos de audio/video, filmagens, fotografia, tradu&#231;&#227;o simult&#226;nea, coffee-break, entre outras.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&quot;Extras&quot;&lt;/strong&gt; &#8212; possibilidade de transmiss&#227;o do evento, a cidade apresentar alternativas &quot;extra-evento&quot; (pontos tur&#237;sticos, restaurantes, bares, &#8230;)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Estamos avaliando a possibilidade de escolher a cidade para os pr&#243;ximos 2 anos (2012 e 2013) para otimizar processo de organiza&#231;&#227;o do evento, portanto, se houver interesse em sediar o evento por mais de um ano &#233; importante colocar isso na proposta.&lt;/p&gt;
&lt;p&gt;As pessoas interessadas em submeter propostas devem ler com *muita aten&#231;&#227;o* o &lt;a class=&quot;external-link&quot; href=&quot;http://readthedocs.org/docs/manual-do-big-kahuna/en/latest/&quot;&gt;Manual do BigKahuna&lt;/a&gt;. L&#225; voc&#234; encontrar&#225; informa&#231;&#245;es importantes sobre como elaborar a sua proposta e organizar o evento.&lt;/p&gt;
&lt;p&gt;Qualquer d&#250;vida entre em contato com a Associa&#231;&#227;o Python Brasil pelo email: &lt;a class=&quot;external-link&quot; href=&quot;mailto:contato@python.org.br&quot;&gt;contato@python.org.br&lt;/a&gt;.&lt;/p&gt;</content>
		<author>
			<name>Noticias da APyB</name>
			<uri>http://associacao.python.org.br</uri>
		</author>
		<source>
			<title type="html">Not&#237;cias</title>
			<subtitle type="html">Not&#237;cias sobre a Associa&#231;&#227;o.</subtitle>
			<link rel="self" href="http://associacao.python.org.br/noticias/RSS"/>
			<id>http://associacao.python.org.br/noticias/RSS</id>
			<updated>2012-02-04T18:44:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">XVII Encontro do Grupo de Usu&#225;rios de Python de Pernambuco</title>
		<link href="http://pugpe.wordpress.com/2011/12/06/convite-xvii-encontro-python-pernambuco/"/>
		<id>http://pugpe.wordpress.com/?p=802</id>
		<updated>2011-12-06T11:57:10+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225; pessoal, Segue o convite a &#160;todos interessados em participar do nosso &lt;strong&gt;XVII Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&lt;/strong&gt; que ser&#225; realizado nesta edi&#231;&#227;o nas depend&#234;ncias do &lt;strong&gt;Audit&#243;rio do Instituto Federal de Pernambuco (IFPE) &amp;#8211; Antigo CEFET&lt;/strong&gt; em Recife no di&lt;strong&gt;a 10/12 (S&#225;bado) a partir das 08:30&lt;/strong&gt;encerrando nossos encontros no ano de 2011.&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;    &quot; title=&quot;XVII Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&quot; src=&quot;http://pug-pe.python.org.br/encontro/xvii/img/banner/banner-xvpug-pe.png&quot; alt=&quot;XVII Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&quot; width=&quot;387&quot; height=&quot;61&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XVII Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Teremos a palestra sobre Aplica&#231;&#245;es Cient&#237;ficas com Python por Hugo Serrano e mestre em computa&#231;&#227;o pela UPE/POLI, palestra sobre integra&#231;&#227;o de C++ com Python com o engenheiro de sistemas Marcelo Lira do Instituto Nokia de Tecnologia, palestra sobre sistemas de recomenda&#231;&#227;o por Marcel Caraciolo, cientista chefe da startup Orygens.com e Atepassar.com e uma palestra sobre Python na Educa&#231;&#227;o com Marcos Egito, um dos coordenadoras da c&#233;lula de reciclagem &#160;(CRC) da Unidade Marista e palestras rel&#226;mpago com v&#225;rios assuntos Vai ser muito maneiro! Teremos &#224; tarde a II Edi&#231;&#227;o do PUG-PE summer of code para desenvolvimento de projetos django e outra tecnologias!&lt;/p&gt;
&lt;p&gt;O encontro &#233; gratuito, e para quem n&#227;o conhece Python eis uma excelente oportunidade de conhecer a plataforma de maior crescimento em 2010 segundo o &#237;ndice Tiobe [2]. &#201; uma linguagem de programa&#231;&#227;o multi-plataforma e multi-paradigma presente em diversos nichos desde computa&#231;&#227;o cient&#237;fica, web, embarcados e at&#233; gr&#225;fica! Para mais informa&#231;&#245;es ver a entrevista do Marcel, moderador do grupo sobre a plataforma Python [3]. Uma &#243;tima oportunidade de fazer networking, aprendizado e conversar sobre software livre e desenvolvimento colaborativo! Participe da nossa lista de discuss&#227;o para troca de id&#233;ias [4]. O evento est&#225; sendo patrocinado pelas startups pernambucanas Orygens, Idealizza e Hostech.&lt;/p&gt;
&lt;p&gt;[1] http://pug.pe&lt;/p&gt;
&lt;p&gt;[2] http://www.geeks3d.com/20110121/tiobe-index-january-2011-python-wins-the-tiobe-programming-language-award-of-2010/&lt;/p&gt;
&lt;p&gt;[3] http://www.citi.org.br/blog/2010/12/14/python-entenda-a-tecnologia/&lt;/p&gt;
&lt;p&gt;[4] https://groups.google.com/group/pug-pe?hl=pt&lt;/p&gt;
&lt;p&gt;Aguardamos a presen&#231;a de todos!&lt;/p&gt;
&lt;p&gt;Atenciosamente,&lt;/p&gt;
&lt;p&gt;Equipe PUG-PE&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/802/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/802/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/802/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/802/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/802/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/802/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/802/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/802/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/802/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/802/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/802/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/802/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/802/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/802/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=802&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">marcelcaraciolo</title>
		<link href="http://pugpe.wordpress.com/2011/12/06/slides-python-faculdade-recife/"/>
		<id>http://pugpe.wordpress.com/?p=799</id>
		<updated>2011-12-06T03:27:57+00:00</updated>
		<content type="html">&lt;p&gt;Esta semana o membro do grupo Anderson Berg teve a oportunidade de ministrar uma palestra para os alunos da Farec (Faculdade do Recife) falando sobre o Python, incluindo biblioteca padr&#227;o, pacotes e frameworks &#250;teis para todo tipo de projeto. &#160;A seguir est&#227;o os slides:&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Parab&#233;ns Anderson pelo excelente trabalho e pela divulga&#231;&#227;o da plataforma nas faculdades do Recife!&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Mais informa&#231;&#245;es no seu &lt;a href=&quot;http://www.pythonize.org/palestra-sobre-canivete-suico-de-python/&quot;&gt;blog&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Equipe PUG-PE&lt;/div&gt;
&lt;div id=&quot;__ss_10451349&quot;&gt;&lt;/div&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/799/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/799/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/799/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/799/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/799/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/799/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/799/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/799/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/799/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/799/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/799/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/799/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/799/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/799/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=799&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Review of the book Numpy 1.5 - Beginner's Guide</title>
		<link href="http://aimotion.blogspot.com/2011/11/review-of-book-numpy-15-beginners-guide.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-6321977169643259199</id>
		<updated>2011-12-01T07:08:22+00:00</updated>
		<content type="html">&lt;div&gt;Hi all,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd like to share my review of the book &lt;a href=&quot;http://www.packtpub.com/numpy-1-5-using-real-world-examples-beginners-guide/book&quot;&gt;Numpy 1.5 the Beginner's Guide&lt;/a&gt; by Ivan Idris, which is one of the latest books in a series of manuals covering scientific computing libraries written in Python. &amp;nbsp;This book covers the &lt;a href=&quot;http://numpy.scipy.org/&quot;&gt;Numpy&lt;/a&gt; library for manipulating vectors and matrices and support for mathematical libraries.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-Ff5P5WEmQP0/TtF6Pm4XYVI/AAAAAAAAAp0/SfgFk3SfpqY/s1600/Screen+shot+2011-11-26+at+8.46.00+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://3.bp.blogspot.com/-Ff5P5WEmQP0/TtF6Pm4XYVI/AAAAAAAAAp0/SfgFk3SfpqY/s200/Screen+shot+2011-11-26+at+8.46.00+PM.png&quot; width=&quot;161&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Numpy 1.5 &amp;nbsp;from Packt Publisher&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Quick Review&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The book is a great and useful resource for anyone who wants to explore further the Numpy scientific library since it covers almost all of the modules available at Numpy 1.5. &amp;nbsp;It comes with several examples, specially for finantial researchers and developers that work with finantial data. The author explored several modules using stocks and historical price data. &amp;nbsp;The authors explains each function or operation with code and the expected results, so the reader can follow precisely what's happening when he presents the modules. One of the values of the book is how it is organized: the step-by-step guide when he presents complex functions at Numpy, for example: add.reduceat, add.accumulate and add.reduce operators.&lt;/div&gt;&lt;div&gt;The part that I didn't like was about the exercises which was quite simple. I'd like to see deep exercises exploring the resources given at the book and I missed more information about NaN values. Also, I didn't &amp;nbsp;see information also about the functions squeeze, choose and about more complex structured arrays (arrays with tuples, etc.).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;To sum up, I recommend this book for anyone whishing to learn about scientific computing with Python using the mathematical library Numpy which is a great alternative (and free !) for Matlab, Mathematica and other packages. I expect quite soon a book covering Scipy library also! &amp;nbsp;By the way, the finantial fans will love this book since it covers almost of the entire book with examples using finance data!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Review&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;The book starts with a step-by-step installation process of Numpy as also giving a litte introduction about what is Numpy, its history, etc. &amp;nbsp; I'd like to mention that even all the platforms covered at the book, Numpy is not so easy as mentioned to install at Mac OS. &amp;nbsp;The problem is that generally the developers don't use the built-in Python that comes with the Mac, since it is outdated (my Snow leopard comes with the Python 2.6.1). So when you install the new Python, that the problems come! Several compilation errors, messages that you can't understand, etc. &amp;nbsp;But if you go by using the MacPorts, &amp;nbsp;you will free of all these errors! ( After all the nightmare of the installation, I discovered the MacPorts :P).&lt;br /&gt;&lt;br /&gt;The following chapters 2-4 presents the Numpy Fundamentals covering the array manipulations and most commonly used operations. &amp;nbsp;The books goes into a cyclic process, where each function that the author presents goes through an introduction about the problem to solve, the actions (how you with Numpy can solve), auxiliar numpy functions and operations and finally what just happened, that is, explain what he has done after showing the solution. The examples covered at book, most of them, are from finantial data and stock market values. An interesting choice since he used the same examples through the chapters in a progression and logical way. &amp;nbsp;Having each function and numpy featured described and explained made the book a good reference guide for someone using the library. &amp;nbsp;There were minor issues &amp;nbsp;related to the imports, he doesn't mention the imports in some examples, &amp;nbsp;for instance the numpy.loadtxt function when he uses the datetime module. &amp;nbsp;For a beginner that is studying Python for the first time, it may be harder to them to follow the examples, since he could not always tell where the functions or modules were coming from.&lt;br /&gt;&lt;br /&gt;The second part of the book includes the matrices, universal functions, some scipy modules and the use of matplotlib and testing. &amp;nbsp;The chapter 5 covers the matrix module and universal functions such as add, divide, prod, sum and so on. &amp;nbsp;I missed some functions that weren't covered at this chapter such as numpy.choose or numpy.squeeze. &amp;nbsp;I believe the author didn't remember or didn't have space to mention these specific functions, but it does not prejudice at all the quality of the book. The chapter that I liked the most at the book was about testing. Several developers, special the scientific researchers are not used to test their code, so I believe it is a great chapter for anyone who wants to assure quality and avoid future bugs using Numpy testing modules. &amp;nbsp;The chapter should be more bigger and include more examples even creating test cases and tips for scientific developers.&lt;br /&gt;Finally the last two chapters focus on plotting and Scipy integration. I think the plotting chapter should be at the beginning of the book, because he already uses lots of examples at the previous chapters with matplotlib and only at the end explain further about the library. The chapter is well-written and gives you sufficient content for beginning with Matplotlib. The last chapter covers the use of several scipy functions but it does not give deeper explanations about how it works as he did at the previous chapters with Numpy. However it gives several useful examples to work with integration, image processing and even optimization. Many developers will enjoy this extra-chapter covering the use of scipy+numpy. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;Conclusions&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&amp;nbsp;My overall impression of this book is that it could make a useful reference guide for Numpy. For finantial researchers and developers it will be a great book since it also covers lots of examples using finance data to present the numpy fundamentals. &amp;nbsp;There were minor issues related to Scipy and Matplotlib that should be more explained. For anyone who wants to start using Numpy it can a be an excellent book to begin, since it covers all the fundamentals steps with a cyclic progressive introduction of using the scientific packages in Python.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;&lt;br /&gt;Marcel Caraciolo&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-6321977169643259199?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Curso Online: Python para quem sabe Python</title>
		<link href="http://blog.ramgarlic.com/2011/11/curso-online-python-para-quem-sabe.html"/>
		<id>tag:blogger.com,1999:blog-4463022840615424564.post-4025781418270494808</id>
		<updated>2011-11-24T05:44:54+00:00</updated>
		<content type="html">Este mini-curso de 12h destina-se a pessoas que j&#225; estudaram ou at&#233; j&#225; usam Python no dia-a-dia, mas querem conhecer mais profundamente como a linguagem funciona, como o Django e outros frameworks conseguem fazer certas coisas que parecem m&#225;gica, e como aproveitar recursos de Python que n&#227;o existem em outras linguagens.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;T&#243;picos&lt;/h3&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;p&#233;rolas sub-utilizadas da biblioteca padr&#227;o&lt;/li&gt;&lt;li&gt;sobrecarga de operadores: usos ben&#233;ficos&lt;/li&gt;&lt;li&gt;iter&#225;veis e iteradores, geradores&lt;/li&gt;&lt;li&gt;comando &lt;code&gt;with&lt;/code&gt; e gerenciadores de contexto&lt;/li&gt;&lt;li&gt;programa&#231;&#227;o funcional e decoradores de fun&#231;&#245;es&lt;/li&gt;&lt;li&gt;acesso, cria&#231;&#227;o, remo&#231;&#227;o din&#226;mica de atributos&lt;/li&gt;&lt;li&gt;propridades e descritores&lt;/li&gt;&lt;li&gt;tratamento de acessos n&#227;o previstos (ex. como &quot;method_missing&quot; de Ruby)&lt;/li&gt;&lt;li&gt;cria&#231;&#227;o din&#226;mica de classes e monkeypatching&lt;/li&gt;&lt;li&gt;metaclasses&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Formato&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Instrutor: Luciano Ramalho&lt;/li&gt;&lt;li&gt;Curso online, com aulas interativas&lt;/li&gt;&lt;li&gt;Carga hor&#225;ria total: 12h&lt;/li&gt;&lt;li&gt;Pre&#231;o: R$ 250&lt;/li&gt;&lt;li&gt;Vagas limitadas&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Datas e Hor&#225;rios&lt;/h3&gt;Uma das op&#231;&#245;es a seguir ser&#225; escolhida pela maioria dos interessados:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;S&#225;bados, 10h-13h (dias: novembro 26, dezembro 3, 10 e 17)&lt;/li&gt;&lt;li&gt;2&#170; e 4&#170;-feira, 17h30-19h30 (dias: novembro 28 e 30, dezembro 5, 7, 12, 14)&lt;/li&gt;&lt;li&gt;3&#170; e 5&#170;-feira, 21h-23h (dias: novembro 29, dezembro 1, 6, 8, 13, 15)&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Para se inscrever&lt;/h3&gt;&lt;b&gt;INSCRI&#199;&#213;ES ENCERRADAS, EM 2012 TEM MAIS!&lt;/b&gt;&lt;br /&gt;&lt;strike&gt;Se voc&#234; tem interesse em participar deste curso, preencha o formul&#225;rio cujo link aparece abaixo. L&#225; voc&#234; ter&#225; a oportunidade de escolher o hor&#225;rio mais conveniente, e propor outros temas a serem tratados. Verifique com cuidado seu e-mail: eu vou entrar em contato pessoalmente com cada interessado para dar mais informa&#231;&#245;es e esclarecer eventuais d&#250;vidas.&lt;/strike&gt;&lt;br /&gt;&lt;b&gt;&lt;strike&gt;Formul&#225;rio de pr&#233;-inscri&#231;&#227;o&lt;/strike&gt;&lt;/b&gt; &lt;strike&gt;(sem compromisso)&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;PS. O nome deste mini-curso foi inspirado no t&#237;tulo de um &lt;a href=&quot;http://novatec.com.br/livros/phpavancado/&quot;&gt;livro de PHP&lt;/a&gt; do Juliano Niederauer, publicado pela editora Novatec. Mandou bem, Juliano!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4463022840615424564-4025781418270494808?l=blog.ramgarlic.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Luciano Ramalho</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.ramgarlic.com/</uri>
		</author>
		<source>
			<title type="html">Ramgarlic</title>
			<subtitle type="html">Programador repentista</subtitle>
			<link rel="self" href="http://blog.ramgarlic.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4463022840615424564</id>
			<updated>2012-01-30T18:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">V Semana Acad&#234;mica de Ci&#234;ncia da Computa&#231;&#227;o - UFT</title>
		<link href="http://associacao.python.org.br/eventos/pythoncampus/v-semana-academica-de-ciencia-da-computacao-uft"/>
		<id>http://associacao.python.org.br/eventos/pythoncampus/v-semana-academica-de-ciencia-da-computacao-uft</id>
		<updated>2011-11-21T14:00:27+00:00</updated>
		<content type="html">&lt;p&gt;A&amp;nbsp;&lt;strong&gt;Semana Acad&#234;mica de Computa&#231;&#227;o&lt;/strong&gt;&amp;nbsp;&#233; um evento que ocorre com periodicidade anual, sendo promovido pelo curso de&amp;nbsp;&lt;strong&gt;Ci&#234;ncia da Computa&#231;&#227;o da Funda&#231;&#227;o Universidade Federal do Tocantins (UFT)&lt;/strong&gt;&amp;nbsp;com apoio da&amp;nbsp;&lt;strong&gt;FAPTO &#8211; Funda&#231;&#227;o de Apoio Cient&#237;fico e Tecnol&#243;gico do Tocantins&lt;/strong&gt;. Ao longo dos anos, esse evento cient&#237;fico em computa&#231;&#227;o vem ganhando cada vez mais import&#226;ncia e respeito, agregando grande parte da comunidade regional cujo interesse em tecnologia e computa&#231;&#227;o seja proveniente do meio acad&#234;mico ou do meio empresarial e industrial.&lt;/p&gt;
&lt;p&gt;As &#250;ltimas quatro edi&#231;&#245;es da Semana Acad&#234;mica realizadas anualmente no campus de Palmas da UFT foram um sucesso superando todas as expectativas . Todas elas contaram com mais de 200 participantes e a coopera&#231;&#227;o de todos os docentes do curso, al&#233;m de profissionais do mercado de trabalho e de professores de outras institui&#231;&#245;es, tornando poss&#237;vel a realiza&#231;&#227;o dos eventos com qualidade e efic&#225;cia.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dentre os destaques dessa edi&#231;&#227;o contaremos com a presen&#231;a do&amp;nbsp;&lt;strong&gt;membro-fundador da Associa&#231;&#227;o PythonBrasil, &#201;rico Andrei (SP)&lt;/strong&gt;, que participar&#225; do evento com a palestra&amp;nbsp;&lt;strong&gt;Linguagem, Framework, Comunidade e Conta-Banc&#225;ria: Da Teoria a Pr&#225;tica&lt;/strong&gt;, com o minicurso&amp;nbsp;&lt;strong&gt;Introdu&#231;&#227;o a Python&lt;/strong&gt;&amp;nbsp;e participar&#225; da mesa redonda.&lt;/p&gt;
&lt;p&gt;Tamb&#233;m contaremos com a presen&#231;a do&amp;nbsp;&lt;strong&gt;fundador e mantenedor da comunidade Viva e Linux, F&#225;bio Berbert de Paula (RJ)&lt;/strong&gt;&amp;nbsp;que ir&#225; apresentar a palestra&amp;nbsp;&lt;strong&gt;Desenvolvimento web: Conceitos e Tecnologias&amp;nbsp;&lt;/strong&gt;e o minicurso&lt;strong&gt;Desvendando o universo GNU/Linux&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A&amp;nbsp;&lt;strong&gt;V Semana Acad&#234;mica de Ci&#234;ncia da Computa&#231;&#227;o da UFT&lt;/strong&gt;&amp;nbsp;tamb&#233;m contar&#225; com a&amp;nbsp;&lt;strong&gt;2&#170; edi&#231;&#227;o da Maratona Interna de Programa&#231;&#227;o.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;A realiza&#231;&#227;o se dar&#225; nos dias 22, 23 e 24 de novembro 2011, proporcionando aos inscritos uma rica variedade de atividades como palestras de convidados de renome vindos de outras institui&#231;&#245;es, sess&#245;es t&#233;cnicas, minicursos, debates e mesa redonda.&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;</content>
		<author>
			<name>Eventos da APyB</name>
			<uri>http://associacao.python.org.br</uri>
		</author>
		<source>
			<title type="html">Listagem de Pr&#243;ximos Eventos APyB e Python</title>
			<subtitle type="html">Eventos da APyB e relacionados a Python</subtitle>
			<link rel="self" href="http://associacao.python.org.br/eventos/listagem/RSS"/>
			<id>http://associacao.python.org.br/eventos/listagem/RSS</id>
			<updated>2012-01-29T18:44:34+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">V&#225;rias vers&#245;es de Python ao mesmo tempo</title>
		<link href="http://aprenda-python.blogspot.com/2011/11/varias-versoes-de-python-ao-mesmo-tempo.html"/>
		<id>tag:blogger.com,1999:blog-2240031811551496628.post-8190049010303257813</id>
		<updated>2011-11-21T02:54:53+00:00</updated>
		<content type="html">Estou precisando ter o Python 2.6 (padr&#227;o no Ubuntu 10.04) convivendo harmoniosamente com a vers&#227;o 2.7. Ou seja, mais de uma vers&#227;o no mesmo sistema operacional.

Pesquisando, encontrei um reposit&#243;rio para Ubuntu com v&#225;rias vers&#245;es de Python: https://launchpad.net/~fkrull/+archive/deadsnakes

Achei tamb&#233;m uma forma de fazer com que elas n&#227;o briguem e n&#227;o atrapalhem o que j&#225; funciona, dentro do</content>
		<author>
			<name>Vinicius Assef</name>
			<email>noreply@blogger.com</email>
			<uri>http://aprenda-python.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Aprenda Python</title>
			<subtitle type="html">Dicas para voc&#234; que j&#225; &#233; programador em outra linguagem.</subtitle>
			<link rel="self" href="http://aprenda-python.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-2240031811551496628</id>
			<updated>2011-11-30T15:44:12+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Launchpad + Rietveld == HappyCodeReviews</title>
		<link href="http://blog.labix.org/2011/11/17/launchpad-rietveld-happycodereviews"/>
		<id>http://blog.labix.org/?p=849</id>
		<updated>2011-11-18T02:28:42+00:00</updated>
		<content type="html">&lt;p&gt;In the past week, I&amp;#8217;ve finally stopped to fix something that I&amp;#8217;ve been wishing for years: inline code reviews in Launchpad. Well, I haven&amp;#8217;t exactly managed fix it &lt;i&gt;in&lt;/i&gt; Launchpad, but the integration with Rietveld feels nice enough to be relatively painless.&lt;/p&gt;
&lt;p&gt;The integration is done using the &lt;a href=&quot;https://launchpad.net/lbox&quot;&gt;lbox&lt;/a&gt; tool, that was developed in &lt;a href=&quot;http://golang.org&quot;&gt;Go&lt;/a&gt; using the &lt;a href=&quot;http://goneat.org/lp/lpad&quot;&gt;lpad package&lt;/a&gt; for the communication with Launchpad, and a newly written &lt;a href=&quot;http://goneat.org/lp/goetveld/rietveld&quot;&gt;rietveld package&lt;/a&gt; for communication with Rietveld.&lt;/p&gt;
&lt;p&gt;If you want to join me in my happines, here are the few steps to get that working for you as well.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-849&quot;&gt;&lt;/span&gt;First, install lbox from the Launchpad PPA. Since it&amp;#8217;s written in Go, it has no dependencies.&lt;/p&gt;
&lt;pre&gt;
$ sudo add-apt-repository ppa:gophers/go
$ sudo apt-get update
$ sudo apt-get install lbox
&lt;/pre&gt;
&lt;p&gt;Now, as an example of using it, let&amp;#8217;s suppose we want to perform a change in the lbox code itself. First, we take the branch out of Launchpad.&lt;/p&gt;
&lt;pre&gt;
$ mkdir hacking
$ cd hacking
$ bzr branch lp:lbox
Branched 9 revision(s).
&lt;/pre&gt;
&lt;p&gt;Then, let&amp;#8217;s create a feature branch based on the original trunk, and perform a change.&lt;/p&gt;
&lt;pre&gt;
$ bzr branch lbox my-nice-feature
Branched 9 revision(s).

$ cd my-nice-feature
$ echo # Yo &gt;&gt; Makefile
$ bzr commit -m &quot;Yo-ified makefile&quot;
Committing to: /home/user/hacking/my-nice-feature/
modified Makefile
Committed revision 10.
&lt;/pre&gt;
&lt;p&gt;Ok, we&amp;#8217;re ready for the magic step, which is actually pushing that branch and proposing the merge on the original branch on both Launchpad and Rietveld. It&amp;#8217;s harder to explain than to do it:&lt;/p&gt;
&lt;pre&gt;
$ lbox propose -cr
2011/11/17 23:29:49 Looking up branch information for &quot;.&quot;...
2011/11/17 23:29:49 Looking up branch information for &quot;hacking/lbox&quot;...
2011/11/17 23:29:49 Found landing target: bzr+ssh://bazaar.../lbox/
(...)
&lt;/pre&gt;
&lt;p&gt;This command will ask you for a few details interactively, like your authentication details in Launchpad and in Rietveld (your Google Account, details sent over SSL to Google itself; you may have to visit Rietveld first for that to work), and also the change description.&lt;/p&gt;
&lt;p&gt;In case something fails, feel free to simply execute the command again, as many times as you want. The command is smart enough to figure that an existing merge proposal and change in Rietveld exist and will update the existing ones with the new details you provide, rather than duplicating work.&lt;/p&gt;
&lt;p&gt;Once the command finishes, you can visit the URL for the merge proposal in Launchpad that was printed, and you should see something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.labix.org/wp-content/uploads/2011/11/lbox-lp-mp.jpg&quot;&gt;&lt;img src=&quot;http://blog.labix.org/wp-content/uploads/2011/11/lbox-lp-mp-1024x580.jpg&quot; alt=&quot;&quot; title=&quot;lbox-lp-mp&quot; width=&quot;640&quot; height=&quot;362&quot; class=&quot;alignnone size-large wp-image-861&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Note that the change description already includes a link onto the Rietveld issue at codereview.appspot.com. The issue on Rietveld will look something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.labix.org/wp-content/uploads/2011/11/lbox-rietveld.jpg&quot;&gt;&lt;img src=&quot;http://blog.labix.org/wp-content/uploads/2011/11/lbox-rietveld.jpg&quot; alt=&quot;&quot; title=&quot;lbox-rietveld&quot; width=&quot;979&quot; height=&quot;333&quot; class=&quot;alignnone size-full wp-image-865&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Observe how the issue has the same description as the merge proposal, but it links back onto the merge proposal. At the left-hand side, there&amp;#8217;s also an interesting detail: the original merge proposal email has been added as the reviewer of this change. This means that any changes performed in Rietveld will be mailed back onto the merge proposal for its record.&lt;/p&gt;
&lt;p&gt;In the center you can find the meat of the whole work: the actual change set that is being reviewed. Rietveld works with patch sets, so that you can not only see a given change, but you can also review the history of proposals that the proponent has made, and any inline comments performed in them.&lt;/p&gt;
&lt;p&gt;Click on the side-by-side link next to Makefile to get an overview of the actual change, and to make comments on it just click on the desired line:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.labix.org/wp-content/uploads/2011/11/lbox-rietveld-diff.jpg&quot;&gt;&lt;img src=&quot;http://blog.labix.org/wp-content/uploads/2011/11/lbox-rietveld-diff.jpg&quot; alt=&quot;&quot; title=&quot;lbox-rietveld-diff&quot; width=&quot;986&quot; height=&quot;628&quot; class=&quot;alignnone size-full wp-image-867&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Your comments won&amp;#8217;t be sent immediately. Once you&amp;#8217;re done making comments and want to deliver the review, click on the &amp;#8220;Publish+Mail Comments&amp;#8221; link at the top-right, which will take you onto a page that enables complementing with any heading details if desired.&lt;/p&gt;
&lt;p&gt;Since the merge proposal is registered as the reviewer of the issue in Rietveld, publishing the review will deliver a message back onto the merge proposal itself, including context links that enable anyone to be taken to the precise review point back in Rietveld:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.labix.org/wp-content/uploads/2011/11/lbox-lp-comment.jpg&quot;&gt;&lt;img src=&quot;http://blog.labix.org/wp-content/uploads/2011/11/lbox-lp-comment.jpg&quot; alt=&quot;&quot; title=&quot;lbox-lp-comment&quot; width=&quot;776&quot; height=&quot;275&quot; class=&quot;alignnone size-full wp-image-870&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then, once you do make the suggested changes and want to publish a new version of the branch, simply repeat the original command: &amp;#8220;lbox propose -cr&amp;#8221;. This will push the new diff onto Rietveld and create a new patch set. You&amp;#8217;ll also be given the chance to edit the previous description, and any changes there will take place both in the merge proposal and in the Rietveld issue.&lt;/p&gt;
&lt;p&gt;lbox also has other useful command line options, such as -bug, -new-bug, to associate Launchpad bugs with the merge proposal and put them in progress, or -bp to associate a blueprint with the branch and bug (if provided) being handled.&lt;/p&gt;
&lt;p&gt;This should turn your code reviews in Launchpad into significantly more pleasant tasks, and maybe even save some of your precious life time for more interesting activities.&lt;/p&gt;
&lt;p&gt;Happy reviewing!&lt;/p&gt;</content>
		<author>
			<name>Gustavo Niemeyer</name>
			<uri>http://blog.labix.org</uri>
		</author>
		<source>
			<title type="html">Labix Blog</title>
			<subtitle type="html">by Gustavo Niemeyer</subtitle>
			<link rel="self" href="http://blog.labix.org/feed"/>
			<id>http://blog.labix.org/feed</id>
			<updated>2012-01-16T04:44:38+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Curso online de Python para quem sabe Python</title>
		<link href="http://christiano.me/2011/11/16/curso-online-de-python-para-quem-sabe-python/"/>
		<id>http://christiano.me/?p=1866</id>
		<updated>2011-11-16T12:33:39+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://christiano.me/wp-content/uploads/2011/11/Python.jpg&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-1867&quot; title=&quot;Python&quot; src=&quot;http://christiano.me/wp-content/uploads/2011/11/Python.jpg&quot; alt=&quot;&quot; width=&quot;156&quot; height=&quot;156&quot; /&gt;&lt;/a&gt;&#160;&lt;div class=&quot;woo-sc-twitter left&quot;&gt;&lt;a href=&quot;http://twitter.com/share&quot; class=&quot;twitter-share-button&quot;&gt;Tweet&lt;/a&gt;&lt;/div&gt; &#160;&lt;div class=&quot;shortcode-google-plusone&quot;&gt;&lt;div class=&quot;g-plusone&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/.shortcode-google-plusone--&gt;

 &#160;&#160;O &lt;a href=&quot;http://blog.ramgarlic.com/&quot; target=&quot;_blank&quot;&gt;Luciano Ramalho&lt;/a&gt; &#233; uma das principais refer&#234;ncias sobre Python no Brasil, al&#233;m de ser um grande amigo. J&#225; foi presidente da &lt;a href=&quot;http://associacao.python.org.br/&quot; target=&quot;_blank&quot;&gt;Associa&#231;&#227;o Python Brasil&lt;/a&gt;, participa como palestrante de quase todos os eventos de software livre e suas palestras s&#227;o bem did&#225;ticas, com conte&#250;do altamente capacitado.&lt;/p&gt;
&lt;p&gt;O Ramalho gosta de ensinar, tem uma did&#225;tica incr&#237;vel uma grande experi&#234;ncia de mercado. Ele est&#225; lan&#231;ando seu &lt;strong&gt;curso online de Python para quem j&#225; sabe Python&lt;/strong&gt; e procura agregar um conhecimento ainda mais profundo sobre a linguagem, conhecendo t&#233;cnicas mais avan&#231;adas e naturalmente, aprendendo com algu&#233;m que &#233; refer&#234;ncia no assunto.&lt;/p&gt;
&lt;p&gt;Os principais t&#243;picos desse mini curso s&#227;o:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;p&#233;rolas sub-utilizadas da biblioteca padr&#227;o&lt;/li&gt;
&lt;li&gt;sobrecarga de operadores: usos ben&#233;ficos&lt;/li&gt;
&lt;li&gt;iter&#225;veis e iteradores, geradores&lt;/li&gt;
&lt;li&gt;comando&#160;&lt;code&gt;with&lt;/code&gt;&#160;e gerenciadores de contexto&lt;/li&gt;
&lt;li&gt;programa&#231;&#227;o funcional e decoradores de fun&#231;&#245;es&lt;/li&gt;
&lt;li&gt;acesso, cria&#231;&#227;o, remo&#231;&#227;o din&#226;mica de atributos&lt;/li&gt;
&lt;li&gt;propridades e descritores&lt;/li&gt;
&lt;li&gt;tratamento de acessos n&#227;o previstos (ex. como &amp;#8220;method_missing&amp;#8221; de Ruby)&lt;/li&gt;
&lt;li&gt;cria&#231;&#227;o din&#226;mica de classes e monkeypatching&lt;/li&gt;
&lt;li&gt;metaclasses&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Como sei que tem muita gente querendo um treinamento mais avan&#231;ado de Python, est&#225; a&#237; uma &#243;tima indica&#231;&#227;o.&lt;/div&gt;
&lt;div&gt;&lt;div class=&quot;woo-sc-box note large rounded &quot;&gt;Mais informa&#231;&#245;es e como se inscrever, acesse o &lt;a href=&quot;http://blog.ramgarlic.com/2011/11/curso-online-python-para-quem-sabe.html&quot; target=&quot;_blank&quot;&gt;blog do Ramalho&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;woo-fblike none&quot;&gt;

&lt;/div&gt;
	&lt;/div&gt;</content>
		<author>
			<name>Christiano Anderson</name>
			<uri>http://christiano.me</uri>
		</author>
		<source>
			<title type="html">Christiano Anderson &#187; python</title>
			<subtitle type="html">Desenvolvimento, Padr&#245;es Web, NoSQL, MongoDB, Software Livre</subtitle>
			<link rel="self" href="http://christiano.me/category/python/feed/"/>
			<id>http://christiano.me/category/python/feed/</id>
			<updated>2012-01-27T03:45:05+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Machine Learning with Python - Logistic Regression</title>
		<link href="http://aimotion.blogspot.com/2011/11/machine-learning-with-python-logistic.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-2423547293296938196</id>
		<updated>2011-11-14T18:43:46+00:00</updated>
		<content type="html">&lt;div&gt;&amp;nbsp;Hi all,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;I decided to start a new series of posts now focusing on general machine learning with several snippets for anyone to use with real problems or real datasets. &amp;nbsp;Since I am studying machine learning again with a great&amp;nbsp;&lt;a href=&quot;http://www.ml-class.org/course/class/index&quot;&gt;course online&lt;/a&gt;&amp;nbsp;offered this semester by Stanford University, one of &amp;nbsp;the best ways to review the content learned is to write some notes about what I learned. The best part is that it will include examples with Python, Numpy and Scipy. I expect you enjoy all those posts!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The series:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;a href=&quot;http://aimotion.blogspot.com/2011/10/machine-learning-with-python-linear.html&quot;&gt;Linear Regression&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;In this post I will cover the Logistic Regression and Regularization.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Logistic Regression&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Logistic Regression is a type of regression that predicts the probability of ocurrence of an event by fitting data to a logit function (logistic function). &amp;nbsp;Like many forms of regression analysis, it makes use of several predictor variables that may be either numerical or categorical. For instance, the probability that a person has a heart attack within a specified time period might be predicted from knowledege of the person's age, sex and body mass index. This regression is quite used in several scenarios such as prediction of customer's propensity to purchase a pro&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;duct or cease a subscription in marketing applications and many others.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Visualizing the Data&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Let's explain the logistic regression by example. Consider you are the administrator of a university department and you want to determine each applicant's chance of admission based on their results on two exams. You have the historical data from previous applicants that you can use as a trainning set for logistic regression. &amp;nbsp;For each training example, you have the applicant's scores on two exams and the admissions decision. &amp;nbsp; We will use logistic regression to build this model that estimates the probability of admission based the scores from those two exams.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Let's first visualize our data on a 2-dimensional plot as show below. As you can see the axes are the two exam scores, and the positive and negative examples are shown with different markers.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-rA1GyvHTJic/TraYYS200-I/AAAAAAAAAoY/6DLCNuy41qg/s1600/plo1.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;301&quot; src=&quot;http://3.bp.blogspot.com/-rA1GyvHTJic/TraYYS200-I/AAAAAAAAAoY/6DLCNuy41qg/s400/plo1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Sample training visualization&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The &lt;a href=&quot;https://gist.github.com/1342942&quot;&gt;code&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Costing Function and Gradient&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The logistic regression hypothesis is defined as:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-c-C6IGeS_eo/TraZSGODaCI/AAAAAAAAAog/lspXBBwj7FE/s1600/Screen+shot+2011-11-06+at+11.26.53+AM.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-c-C6IGeS_eo/TraZSGODaCI/AAAAAAAAAog/lspXBBwj7FE/s1600/Screen+shot+2011-11-06+at+11.26.53+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;where the function g &amp;nbsp;is the sigmoid function. It is defined as:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-PqGvtE_NEmE/TraZYTHEfLI/AAAAAAAAAoo/swDZg20vd4Q/s1600/Screen+shot+2011-11-06+at+11.27.03+AM.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-PqGvtE_NEmE/TraZYTHEfLI/AAAAAAAAAoo/swDZg20vd4Q/s1600/Screen+shot+2011-11-06+at+11.27.03+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The sigmoid function has special properties that can result values in the range [0,1]. &amp;nbsp;So you have large positive values of X, the sigmoid should be close to 1, while for large negative values, &amp;nbsp;the sigmoid should be close to 0.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_Tndn7IbKcao/Syu0vkRlGtI/AAAAAAAAAIk/TQ-K2fOr9w0/s400/SigmoidPlot1.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;http://1.bp.blogspot.com/_Tndn7IbKcao/Syu0vkRlGtI/AAAAAAAAAIk/TQ-K2fOr9w0/s320/SigmoidPlot1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Sigmoid Logistic Function&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The cost function and gradient for logistic regression is given as below:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-0vWgkEmE-u4/TraaI_rd-bI/AAAAAAAAAow/Ya5rp0rQS48/s1600/Screen+shot+2011-11-06+at+11.30.37+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;56&quot; src=&quot;http://4.bp.blogspot.com/-0vWgkEmE-u4/TraaI_rd-bI/AAAAAAAAAow/Ya5rp0rQS48/s400/Screen+shot+2011-11-06+at+11.30.37+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;and the gradient of the cost is a vector theta where the j element is defined as follows:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-jpwtW1KQIoE/TraaRvy_8MI/AAAAAAAAAo4/9qnO3SyiqaA/s1600/Screen+shot+2011-11-06+at+11.30.41+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;64&quot; src=&quot;http://2.bp.blogspot.com/-jpwtW1KQIoE/TraaRvy_8MI/AAAAAAAAAo4/9qnO3SyiqaA/s320/Screen+shot+2011-11-06+at+11.30.41+AM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;You may note that the gradient is quite similar to the linear regression gradient, the difference is actually because linear and logistic regression have different definitions of h(x).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;Let's see the &lt;a href=&quot;https://gist.github.com/1365841&quot;&gt;code&lt;/a&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Now to find the minimum of this cost function, we will use a scipy built-in function called &lt;a href=&quot;http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_bfgs.html&quot;&gt;fmin_bfgs&lt;/a&gt;. &amp;nbsp;It will find the best parameters theta for the logistic regression cost function given a fixed dataset (of X and Y values).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The parameters are:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The initial values of the parameters you are trying to optimize;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;A function that, when given the training set and a particular theta, computes the logistic regression cost and gradient with respect to theta for the dataset (X,y).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The final theta value will then be used to plot the decision boundary on the training data, resulting in a figure similar to the figure below.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-eCQJ4j3wqw0/Tr8-bwNir1I/AAAAAAAAApg/mBLTGATfgI0/s1600/plot3.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;http://2.bp.blogspot.com/-eCQJ4j3wqw0/Tr8-bwNir1I/AAAAAAAAApg/mBLTGATfgI0/s320/plot3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Evaluating logistic regression&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Now that you learned the parameters of the model, you can use the model to predict whether a particular student will be admited. For a student with an Exam1 score of 45 and an Exam 2 score of 85, you should see an admission probability of 0.776.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;But you can go further, and evaluate the quality of the parameters that we have found and see how well the learned model predicts on our training set. &amp;nbsp;If we consider the threshold of 0.5 using our sigmoid logistic function, we can consider that:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://www.mblondel.org/tlml/_images/math/9dd37d56c18555e80d91e8f57a1ceeb83fc72a5a.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.mblondel.org/tlml/_images/math/9dd37d56c18555e80d91e8f57a1ceeb83fc72a5a.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Where 1 represents admited and -1 not admited.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Going to the code and calculate the training accuracy of our classifier we can evaluate the percentage of examples it got correct. &amp;nbsp;&lt;a href=&quot;https://gist.github.com/1362087&quot;&gt;Source code&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;89% , not bad hun?!&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Regularized logistic regression&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;But when your data can not be separated into positive and negative examples by a straight-line trought the plot ? &amp;nbsp;Since our logistic regression will be only be able to find a linear decision boundary, we will have to fit the data in a better way. Let's go through an example.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Suppose you are the product manager of the factory and you have the test results for some microships &amp;nbsp;of two different tests. From these two tests you would like to determine whether the microships should be accepted or rejected. &amp;nbsp;We have a dataset of test results on past microships, from which we can build a logistic regression model. &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Visualizing the data&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Let's visualize our data. As you can see in the figure below, the axes are the two test scores, and the positive (y = 1, accepted) and negative (y = 0, rejected) examples are shown with different markers.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-jbXb3vs96NU/Trdz-jCkRNI/AAAAAAAAApA/3H_PdT1Wj0A/s1600/plot2.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;262&quot; src=&quot;http://2.bp.blogspot.com/-jbXb3vs96NU/Trdz-jCkRNI/AAAAAAAAApA/3H_PdT1Wj0A/s400/plot2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Microship training set&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;You may see that the model built for this task may predict perfectly all training data and sometimes it migh cause some troubling cases. &amp;nbsp;Just because ithe model can perfectly reconstruct the training set does not mean that it had everything figured out. &amp;nbsp;This is known as overfitting. &amp;nbsp; You can imagine that if you &amp;nbsp;were relying on this model to make important decisions, it would be desirable to have at least of regularization in there. Regularization is a powerful strategy to combat the overfitting problem. We will see it in action at the next sections.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Feature mapping&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;One way to fit the data better is to create more features from each data point. We will map the features &amp;nbsp;into all polynomial terms of x1 tand x2 up to the sixth power.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-tr3p_3aMMDk/Trd0mLbo8fI/AAAAAAAAApI/Vd2TB9MQboE/s1600/Screen+shot+2011-11-07+at+3.02.01+AM.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-tr3p_3aMMDk/Trd0mLbo8fI/AAAAAAAAApI/Vd2TB9MQboE/s1600/Screen+shot+2011-11-07+at+3.02.01+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;As a result of this mapping, our vector of two features (the scores on two QA tests) has been transformed into a 28-dimmensional vector. A logistic regression classifier trained on this higher dimension feature vector &amp;nbsp;will have a more complex decision boundary and will appear nonlinear when drawn in our 2D plot.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Although the feature mapping allows us to buid a more expressive classifier, it also me susceptible to overfitting. That comes the regularized logistic regression to fit the data and avoid the overfitting problem.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;a href=&quot;https://gist.github.com/1365704&quot;&gt;Source code.&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;Cost function and gradient&lt;/b&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The regularized cost function in logistic regression is :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-qNym-oCdMIg/Trd03YeslWI/AAAAAAAAApQ/GUfXiJ3vpUE/s1600/Screen+shot+2011-11-07+at+3.03.55+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;48&quot; src=&quot;http://3.bp.blogspot.com/-qNym-oCdMIg/Trd03YeslWI/AAAAAAAAApQ/GUfXiJ3vpUE/s400/Screen+shot+2011-11-07+at+3.03.55+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Note that you should not regularize the parameter theta, so the final summation is for j = 1 to n, not j= 0 to n. &amp;nbsp;The gradient of the cost function is a vector where the jn element is defined as follows:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-VEpIvg197n0/Trd1EC-G2eI/AAAAAAAAApY/o68ntJrD0ig/s1600/Screen+shot+2011-11-07+at+3.04.49+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;107&quot; src=&quot;http://3.bp.blogspot.com/-VEpIvg197n0/Trd1EC-G2eI/AAAAAAAAApY/o68ntJrD0ig/s400/Screen+shot+2011-11-07+at+3.04.49+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Now let's learn the optimal parameters theta. &amp;nbsp;Considering now those new functions and our last numpy optimization function we will be able to learn the parameters theta.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The all code now provided (&lt;a href=&quot;https://gist.github.com/1365847&quot;&gt;code&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Plotting the decision boundary&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Let's visualize the model learned by the classifier. The plot will display the non-linear decision boundary that separates the positive and negative examples.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-twaJvC29wNE/TsGxfg8n60I/AAAAAAAAApo/JgWINQ1EVn0/s1600/plot4.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;299&quot; src=&quot;http://4.bp.blogspot.com/-twaJvC29wNE/TsGxfg8n60I/AAAAAAAAApo/JgWINQ1EVn0/s400/plot4.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Decision Boundary&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;As you can see our model succesfully predicted our data with accuracy of 83.05%.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://gist.github.com/1365849&quot;&gt;Code&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Scikit-learn&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Scikit-learn is an amazing tool for machine learning providing several modules for working with classification, regression and clustering problems. It uses python, numpy and scipy and it is open-source!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;If you want to use logistic regression and linear regression you should take consider the scikit-learn. It has several examples and several types of regularization strategies to work with. &amp;nbsp;Take a look at this &lt;a href=&quot;http://scikit-learn.sourceforge.net/modules/linear_model.html&quot;&gt;link&lt;/a&gt; and see by yourself! &amp;nbsp;I recommend!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Conclusions&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Logistic regression has several advantages over linear regression, one specially it is&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;nbsp;more robust and does not assume linear relationship since it may handle nonlinear effects. However it requires much more data to achieve stable, meaningful results. &amp;nbsp;There are another machine learning techniques to handle with non-linear problems and we will see in the next posts. &amp;nbsp; I hope you enjoyed this article!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;All source from this article &lt;a href=&quot;http://dl.dropbox.com/u/1977573/logistic.zip&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Regards,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Marcel Caraciolo&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-2423547293296938196?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">P&#250;blico ganhando brindes do PUG-PE</title>
		<link href="http://pugpe.wordpress.com/2011/11/07/xvi-encontro-grupo-usuarios-python-pernambuco/"/>
		<id>http://pugpe.wordpress.com/?p=779</id>
		<updated>2011-11-08T02:59:06+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225; pessoal,&lt;/p&gt;
&lt;p&gt;Neste &#250;ltimo s&#225;bado (05/11/2011) tivemos a oportunidade de realizar o nosso&lt;a href=&quot;http://pug-pe.python.org.br/encontro/xvi/&quot;&gt; XVI Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&lt;/a&gt;. &#160;Este evento foi realizado pela segunda vez na&lt;strong&gt; Escola Polit&#233;cnica de Pernambuco (POLI- UPE)&lt;/strong&gt; em Recife-Pernambuco. &#160;Foi um evento bem recheado de palestras, especialmente algumas ministradas por palestrantes que tamb&#233;m ministraram na &lt;a href=&quot;http://www.pythonbrasil.org.br/&quot;&gt;PythonBrasil&lt;/a&gt;, palestra convidada de outro grupo local: &lt;a href=&quot;http://www.ixda.org/&quot;&gt;IXDA&lt;/a&gt; e diversas palestras rel&#226;mpago (maior edi&#231;&#227;o do Tor&#243; de Palestras at&#233; hoje com 5 ao total).&lt;/p&gt;
&lt;p&gt;Queremos agradecer a participa&#231;&#227;o de todos em especial nossa equipe Luciano Rodrigues&#160;(@&lt;a href=&quot;http://twitter.com/lucrodsilva&quot;&gt;lucrodsilva&lt;/a&gt;), Guilherme Medeiros (@&lt;a href=&quot;http://twitter.com/frenetic_br&quot;&gt;frenetic_br&lt;/a&gt;) , Fernando Rocha (@&lt;a href=&quot;http://twitter.com/fernandogrd&quot;&gt;fernandogrd&lt;/a&gt;),&#160;Daker Fernandes (@&lt;a href=&quot;http://twitter.com/dakerfp&quot;&gt;dakerfp&lt;/a&gt;), Greg&#243;rio Neto (nosso web-designer), Rodrigo Lira, Afif entre outros que nos auxiliaram na organiza&#231;&#227;o deste encontro. &#160;Os nossos patrocinadores que tem um papel important&#237;ssimo na constru&#231;&#227;o deste evento: empresas Idealizza (@&lt;a href=&quot;http://twitter.com/idealizza&quot;&gt;idealizza&lt;/a&gt;), Orygens (@&lt;a href=&quot;http://twitter.com/orygens&quot;&gt;orygens&lt;/a&gt;) e a Hostech.&lt;/p&gt;
&lt;p&gt;Algumas fotos do p&#250;blico presente:&lt;/p&gt;
&lt;div id=&quot;attachment_780&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2392.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-780&quot; title=&quot;P&#250;blico no XVI Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2392.jpg?w=300&amp;h=199&quot; alt=&quot;P&#250;blico no XVI Encontro do PUG-PE&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;P&#250;blico no XVI Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;div id=&quot;attachment_781&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2393.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-781&quot; title=&quot;P&#250;blico presente no XVI Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2393.jpg?w=300&amp;h=199&quot; alt=&quot;P&#250;blico presente no XVI Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;P&#250;blico presente no XVI Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Nossa primeira palestra foi ministrada por Marcel Caraciolo (@&lt;a href=&quot;http://twitter.com/marcelcaraciolo&quot;&gt;marcelcaraciolo&lt;/a&gt;)) sobre comunidades open-source e o sucesso do PUG-PE. Esta palestra falou um pouco da hist&#243;ria do Grupo assim como motiva&#231;&#227;o para outros que desejam construir comunidades e c&#233;lulas em sua cidade, regi&#227;o, bairro, faculdade, empresa, igreja, etc. &#160;Uma palestra bem din&#226;mica e inspiradora!&lt;/p&gt;
&lt;p&gt;Algumas fotos abaixo da palestra:&lt;/p&gt;
&lt;div id=&quot;attachment_782&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2397.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-782&quot; title=&quot;Marcel Caraciolo apresentando sobre o PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2397.jpg?w=300&amp;h=199&quot; alt=&quot;Marcel Caraciolo apresentando sobre o PUG-PE&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Marcel Caraciolo apresentando sobre o PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Slides dispon&#237;veis &lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/construindo-comunidades-opensource-bem-sucedidas-experincias-do-pugpe&quot;&gt;aqui&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;A segunda palestra foi ministrada pelo Gustavo Henrique , doutorando do CIN/UFPE que falou sobre NoSQL, em especial, sobre a tecnologia e o uso do Cassandra, plataforma adotada pela empresa que ele trabalhou durante um projeto em que ele estava alocado. &#160;Foi uma palestra bem did&#225;tica com apresenta&#231;&#227;o sobre v&#225;rios conceitos relacionados a NoSQL e no fim com uma breve apresenta&#231;&#227;o do Cassandra se comunicando com a plataforma Python! Vale salientar que tamb&#233;m foi palestra apresentada na PythonBrasil!&lt;/p&gt;
&lt;p&gt;Abaixo os &lt;a href=&quot;http://www.slideshare.net/pugpe/nosql-com-cassandra-e-python&quot;&gt;slides&lt;/a&gt; dispon&#237;veis:&lt;/p&gt;

&lt;p&gt;Algumas fotos de sua palestra:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;attachment_783&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2401.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-783&quot; title=&quot;Gustavo Henrique apresentando sobre o NoSQL&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2401.jpg?w=300&amp;h=199&quot; alt=&quot;Gustavo Henrique apresentando sobre o NoSQL&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Gustavo Henrique apresentando sobre o NoSQL&lt;/p&gt;&lt;/div&gt;
&lt;div id=&quot;attachment_784&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2402.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-784&quot; title=&quot;Gustavo Henrique apresentando sobre Cassanda e NoSQL&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2402.jpg?w=300&amp;h=199&quot; alt=&quot;Gustavo Henrique apresentando sobre Cassanda e NoSQL&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Gustavo Henrique apresentando sobre Cassanda e NoSQL&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Como sempre tivemos nosso belo coffee-break regado a salgadinhos e biscoitos! Mas o mais legal &#160;&#233; o networking constru&#237;do durante esses intervalos! Muita discuss&#227;o e troca de id&#233;ias!&lt;/p&gt;
&lt;p&gt;Algumas fotos do intervalo:&lt;/p&gt;
&lt;div id=&quot;attachment_785&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2403.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-785&quot; title=&quot;Intervalo durante o Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2403.jpg?w=300&amp;h=199&quot; alt=&quot;Intervalo durante o Encontro do PUG-PE&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Intervalo durante o Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;div id=&quot;attachment_786&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2404.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-786&quot; title=&quot;Intervalo durante o Encontro do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2404.jpg?w=300&amp;h=199&quot; alt=&quot;Intervalo durante o Encontro do PUG-PE&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Intervalo durante o Encontro do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;No retorno tivemos a palestra do Daker Fernandes (@&lt;a href=&quot;http://twitter.com/dakerfp&quot;&gt;dakerfp&lt;/a&gt;) que apresentou sobre Python e Cadeias de Markov (GHMM) especialmente focado em Biologia Computacional. Esta palestra tamb&#233;m apresentada na PythonBrasil. De maneira bem simples, Daker apresentou os conceitos iniciais desta poderosa &#225;rea de computa&#231;&#227;o cient&#237;fica e estat&#237;stica para aplica&#231;&#227;o de previs&#227;o e modelagem de simula&#231;&#245;es. &#160;E poucos sabem que Python tamb&#233;m pode ser aplicado em Biologia Computacional!&lt;/p&gt;
&lt;p&gt;Fotos da palestra de Daker:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;attachment_787&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2414.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-787&quot; title=&quot;Daker apresentando sobre GHMM e Cadeias de Markov&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2414.jpg?w=300&amp;h=199&quot; alt=&quot;Daker apresentando sobre GHMM e Cadeias de Markov&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Daker apresentando sobre GHMM e Cadeias de Markov&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/pugpe/python-e-cadeias-de-markov-ghmm&quot;&gt;Slides&lt;/a&gt; da Palestra de Daker:&lt;/p&gt;

&lt;p&gt;A pr&#243;xima palestra foi a do convidado Rodrigo Medeiros, membro do grupo IXDA (Design de Intera&#231;&#227;o) que apresentou sobre visualiza&#231;&#227;o da informa&#231;&#227;o. Uma palestra que brilhou os olhos de muita gente com v&#225;rios modelos e formatos de exibi&#231;&#227;o de dados e a sua atual necessidade de plataformas para constru&#231;&#227;o dessas visualiza&#231;&#245;es. Atualmente ele vem estudando Python para aplicar na constru&#231;&#227;o de novos modelos e tamb&#233;m na exposi&#231;&#227;o dos dados p&#250;blicos governamentais por meio de API&amp;#8217;s. &#160;Muito legal essa mesclagem com outros grupos e ver o que Python tamb&#233;m pode ajudar!&lt;/p&gt;
&lt;p&gt;Fotos do palestrante Rodrigo Medeiros&lt;/p&gt;
&lt;div id=&quot;attachment_788&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2426.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-788&quot; title=&quot;Rodrigo Medeiros falando sobre Visualiza&#231;&#227;o da Informa&#231;&#227;o&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2426.jpg?w=300&amp;h=199&quot; alt=&quot;Rodrigo Medeiros falando sobre Visualiza&#231;&#227;o da Informa&#231;&#227;o&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Rodrigo Medeiros falando sobre Visualiza&#231;&#227;o da Informa&#231;&#227;o&lt;/p&gt;&lt;/div&gt;
&lt;div id=&quot;attachment_789&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2427.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-789&quot; title=&quot;Rodrigo Medeiros apresentando sobre Visualiza&#231;&#227;o de Informa&#231;&#227;o&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2427.jpg?w=300&amp;h=199&quot; alt=&quot;Rodrigo Medeiros apresentando sobre Visualiza&#231;&#227;o de Informa&#231;&#227;o&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Rodrigo Medeiros apresentando sobre Visualiza&#231;&#227;o de Informa&#231;&#227;o&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/pugpe/visualizao-da-informao-10065144&quot;&gt;Slides&lt;/a&gt; da Palestra do Rodrigo&lt;/p&gt;

&lt;p&gt;Depois da palestra do Rodrigo iniciamos nossa sess&#227;o de Tor&#243; de palestras com palestras sobre v&#225;rios temas. Come&#231;amos com a palestra do Fernando Rocha (@&lt;a href=&quot;http://twitter.com/fernandogrd&quot;&gt;fernandogrd&lt;/a&gt;) sobre o mitos de Python quando estamos na gradua&#231;&#227;o. &#160;Fernando discutiu sobre a exist&#234;ncia de ponteiros em Python, que muitos &#224;s vezes n&#227;o sabem que existem e acham que em Python &#233; tudo autom&#225;gico ( e na verdade n&#227;o &#233; , tem muita coisa acontecendo por tr&#225;s!). Foi uma discuss&#227;o bem aquecida com todos os presentes, apresentando diversos pontos de vista.&lt;/p&gt;
&lt;p&gt;Abaixo slides e fotos:&lt;/p&gt;
&lt;div id=&quot;attachment_790&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2446.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-790&quot; title=&quot;Fernando Rocha apresentando sobre os Mitos de Python &quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2446.jpg?w=300&amp;h=199&quot; alt=&quot;Fernando Rocha apresentando sobre os Mitos de Python &quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Fernando Rocha apresentando sobre os Mitos de Python&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Nossa segunda palestra rel&#226;mpago foi a do Andr&#233; Ericsson (@&lt;a href=&quot;http://twitter.com/_aericson&quot;&gt;_aericson&lt;/a&gt;)&#160;que apresentou sobre o uso de Python em solu&#231;&#245;es automatizadas. Ele comentou como usou Python em seus projetos em que ele precisou automatizar algumas tarefas que ele tinha que realizar manualmente. Por exemplo: reserva de livros da biblioteca da sua faculdade ou at&#233; descoberta de legendas dos seriados de forma autom&#225;tica. Tudo isso usando Python, Mechanize, BeautifulSoup e uma s&#233;rie de outras ferramentas! Foi bem legal a palestra!!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/pugpe/automatizando-tarefas-com-python&quot;&gt;Slides&lt;/a&gt; da palestra do Andr&#233; e fotos:&lt;/p&gt;

&lt;div id=&quot;attachment_791&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2452.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-791&quot; title=&quot;Andr&#233; Ericson apresentando sobre Tarefas Automatizadas com Python&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2452.jpg?w=300&amp;h=199&quot; alt=&quot;Andr&#233; Ericson apresentando sobre Tarefas Automatizadas com Python&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Andr&#233; Ericson apresentando sobre Tarefas Automatizadas com Python&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A pr&#243;xima palestra foi a Hugo Serrano, mestre em ci&#234;ncia da computa&#231;&#227;o pela POLI/UPE que apresentou seu trabalho com um doutorando focado em otimiza&#231;&#227;o de sistemas para capta&#231;&#227;o de &#225;gua pluvial. Por meio do uso de t&#233;cnicas inteligentes de otimiza&#231;&#227;o, ele construiu um simulador com uma interface bem amig&#225;vel para descobrir par&#226;metros que minimizem o tempo de retorno do investimento na constru&#231;&#227;o do sistema. Ele usou plataformas como PyGtk, Python , Numpy e Scipy! Um trabalho muito bem feito e prato cheio pra futuras palestras!!&lt;/p&gt;
&lt;p&gt;Abaixo &lt;a href=&quot;http://www.slideshare.net/pugpe/raintoobox-previso-de-chuvas&quot;&gt;slides&lt;/a&gt; e as fotos da palestra do Hugo:&lt;/p&gt;

&lt;div id=&quot;attachment_792&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2460.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-792&quot; title=&quot;Hugo Serrano apresentando sobre o seu trabalho: RainToolbox&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2460.jpg?w=300&amp;h=199&quot; alt=&quot;Hugo Serrano apresentando sobre o seu trabalho: RainToolbox&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Hugo Serrano apresentando sobre o seu trabalho: RainToolbox&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A pr&#243;xima palestra foi a do Daker Fernandes (@&lt;a href=&quot;http://twitter.com/dakerfp&quot;&gt;dakerfp&lt;/a&gt;) que falou sobre um plugin que ele desenvolveu durante a faculdade para processamento de sinais: DSP-Tools. Ele mostrou como python p&#244;de simplificar na constru&#231;&#227;o de um sistemas de pluggins por meio de decoradores que facilitou bastante seu trabalho durante o trabalho de uma disciplina da faculdade. Valeu Daker!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/dakerfp/DSP-Tool&quot;&gt;Link&lt;/a&gt; para o reposit&#243;rio no Github.&lt;/p&gt;
&lt;p&gt;Por fim a palestra do Fl&#225;vio Juvenal (@&lt;a href=&quot;http://twitter.com/flaviojuvenal&quot;&gt;flaviojuvenal&lt;/a&gt;) que apresentou a experi&#234;ncia dele e de seu time em construir uma startup em 54 horas com Python durante a StartUpWeekend realizada em Recife h&#225; algumas semanas atr&#225;s. Eles tiveram que montar uma startup do zero e apresentar um produto concebido durante um fim de semana. Escolheram Python como plataforma de desenvolvimento pela rapidez e produtividade e Django como framework Web. O resultado foi a ferramenta&lt;a href=&quot;http://www.timebreak.me/&quot;&gt; TimeBreak.Me&lt;/a&gt; que foi bem votada entre as startups apresentadas no final do evento! &#160;Parab&#233;ns a todo time!&lt;/p&gt;
&lt;p&gt;Foto do TimeBreak.me:&lt;/p&gt;
&lt;div id=&quot;attachment_793&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/screen-shot-2011-11-07-at-11-42-24-pm.png&quot;&gt;&lt;img class=&quot;size-medium wp-image-793&quot; title=&quot;TimeBreak.me em a&#231;&#227;o!&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/screen-shot-2011-11-07-at-11-42-24-pm.png?w=300&amp;h=217&quot; alt=&quot;TimeBreak.me em a&#231;&#227;o!&quot; width=&quot;300&quot; height=&quot;217&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;TimeBreak.me em a&#231;&#227;o!&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Apresenta&#231;&#227;o do Fl&#225;vio em &lt;a href=&quot;http://www.slideshare.net/pugpe/construindo-uma-startupem54hcompython&quot;&gt;slides&lt;/a&gt; e sua foto:&lt;/p&gt;

&lt;div id=&quot;attachment_794&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2464.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-794&quot; title=&quot;Fl&#225;vio Juvenal apresentando como Construiu uma Startup em 54 hrs com Python&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2464.jpg?w=300&amp;h=199&quot; alt=&quot;Fl&#225;vio Juvenal apresentando como Construiu uma Startup em 54 hrs com Python&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Fl&#225;vio Juvenal apresentando como Construiu uma Startup em 54 hrs com Python&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;E assim terminamos o nosso XVI Encontro! Infelizmente n&#227;o pudemos tirar uma foto com todos reunidos, mas tivemos algumas fotos do p&#250;blico que recebeu os brindes sorteados durante o encontro! &#160;Agradecemos a presen&#231;a de todos e at&#233; a pr&#243;xima!&lt;/p&gt;
&lt;div id=&quot;attachment_795&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2434.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-795&quot; title=&quot;P&#250;blico ganhando brindes do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2434.jpg?w=300&amp;h=199&quot; alt=&quot;P&#250;blico ganhando brindes do PUG-PE&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;P&#250;blico ganhando brindes do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;attachment_796&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/11/101_2436.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-796&quot; title=&quot;P&#250;blico ganhando brindes do PUG-PE&quot; src=&quot;http://pugpe.files.wordpress.com/2011/11/101_2436.jpg?w=300&amp;h=199&quot; alt=&quot;P&#250;blico ganhando brindes do PUG-PE&quot; width=&quot;300&quot; height=&quot;199&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;P&#250;blico ganhando brindes do PUG-PE&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/35342562@N05/sets/72157628079816628/&quot;&gt;Link&lt;/a&gt; para fotos do &#160;XVI Encontro.&lt;/p&gt;
&lt;p&gt;Atenciosamente,&lt;/p&gt;
&lt;p&gt;Marcel Caraciolo&lt;/p&gt;
&lt;h3&gt;Links para os assuntos discutidos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://python.org/&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://smallactsmanifesto.org/&quot;&gt;SmallActs Manifesto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/NoSQL&quot;&gt;NoSQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Apache_Cassandra&quot;&gt;Cassandra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ieure/python-cassandra&quot;&gt;PyCassandra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ghmm.org/&quot;&gt;GHMM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/Cadeias_de_Markov&quot;&gt;Cadeias de Markov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/Visualiza%C3%A7%C3%A3o_de_Informa%C3%A7%C3%A3o&quot;&gt;Visualiza&#231;&#227;o de Informa&#231;&#227;o&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ixda.org/node/23967&quot;&gt;IXDA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.python.org.br/wiki/ProgramadoresCaprendendoPython&quot;&gt;Python e Ponteiros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mechanize.rubyforge.org/&quot;&gt;Mechanize&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.crummy.com/software/BeautifulSoup/&quot;&gt;BeautifulSoup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.scipy.org/&quot;&gt;Scipy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://numpy.scipy.org/&quot;&gt;Numpy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://recife.startupweekend.org/&quot;&gt;StartupWeekend&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/779/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/779/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/779/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/779/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/779/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/779/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/779/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/779/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/779/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/779/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/779/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/779/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/779/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/779/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=779&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Google AI Challenge this year is open! Ants Battlefield!</title>
		<link href="http://aimotion.blogspot.com/2011/11/google-ai-challenge-this-year-is-open.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-5954150033693505172</id>
		<updated>2011-11-04T23:23:36+00:00</updated>
		<content type="html">&lt;div&gt;Hi all,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One more time Google and the University of Waterloo's computer science club have launched an &lt;a href=&quot;http://aichallenge.org/&quot;&gt;Artificial Intelligence challenge&lt;/a&gt;. This year the task is to write a program to compete in the Ants Multiplayer Challenge. The goal is seek and destroy the most enemy ant hills while defending their own hills. &amp;nbsp;You must create a bot that plays the game of Ants as intelligently as possible. &amp;nbsp;The contest supports languages in Python, Java, C# and C++.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The current state of the contest, which you can submit your project, is until December 18th. After, there will be a final tournament between the contestants to decide the ultimate winner!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See &amp;nbsp;the game in action at the&lt;a href=&quot;http://www.youtube.com/watch?v=N9PMN0nBx8Y&quot;&gt; video below&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;center&gt;&lt;/center&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is a great opportunity to learn Artificial Intelligence and play with your skills at programming, machine learning and logical reason!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Regards,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marcel Caraciolo &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-5954150033693505172?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">XVI Encontro do Grupo de Usu&#225;rios de Python de Pernambuco</title>
		<link href="http://pugpe.wordpress.com/2011/11/02/xvi-encontro-python-pernambuco-convite/"/>
		<id>http://pugpe.wordpress.com/?p=774</id>
		<updated>2011-11-02T14:23:44+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225; pessoal,&lt;/p&gt;
&lt;p&gt;Gostaria de convidar a todos para a nossa&#160;&lt;strong&gt;D&#233;cima Sextaa edi&#231;&#227;o (XVI) do Encontro mensal do grupo de usu&#225;rios de Python de Pernambuco (PUG-PE)&lt;/strong&gt;&#160;que ser&#225; realizada na depend&#234;ncias da &#160;Escola Polit&#233;cnica de Pernambuco (POLI) no audit&#243;rio situado na Rua Benfica vizinho ao clube Internacional no Derby.&lt;/p&gt;
&lt;p&gt;O encontro ser&#225; realizado no&#160;&lt;strong&gt;dia 05 de novembro de 2011 (S&#225;bado) a partir das 08:30 no audit&#243;rio da POLI com entrada gratuita&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;       &quot; title=&quot;XVI Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&quot; src=&quot;http://pug-pe.python.org.br/encontro/xvi/img/banner/banner-xvpug-pe.png&quot; alt=&quot;XVI Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&quot; width=&quot;459&quot; height=&quot;72&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;XVI Encontro do Grupo de Usu&#225;rios de Python de Pernambuco&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Neste encontro teremos as palestras que foram realizadas durante o VII Encontro Brasileiro da Comunidade Python (&lt;a href=&quot;http://pythonbrasil.org.br&quot;&gt;PythonBrasil&lt;/a&gt;) pelos pernambucanos! &#160; Teremos a palestra sobre NoSQL com Python por Gustavo da Neurotech e doutorando do CIN/UFPE, palestra sobre integra&#231;&#227;o de plataformas com Python por Bruno Melo da startup AIBOX,&#160; a palestra sobre GMM e Cadeias de Markov por Daker Fernandes, engenheiro da Nokia e rec&#233;m-graduado do CIN/UFPE, palestra sobre sistemas de recomenda&#231;&#227;o por Marcel Caraciolo, cientista chefe da startup Orygens.com e Atepassar.com e uma palestra convidada com Rodrigo Medeiros sobre Visualiza&#231;&#227;o de Dados da comunidade IXDAA e palestras rel&#226;mpago com v&#225;rios assuntos desde cria&#231;&#227;o de startups em 54 horas com Python &#224; uso de crawlers com Python.&#160; Vai ser muito maneiro!&#160; Teremos o lan&#231;amento do projeto &amp;#8220;Quero um Dojo na minha empresa&amp;#8221; que dever&#225; come&#231;ar a partir de janeiro de 2012 e a experi&#234;ncia do PUG-PE Summer of Code que foi realizada neste m&#234;s pelos participantes do evento!&lt;/p&gt;
&lt;p&gt;Para quem n&#227;o conhece Python, eis uma excelente oportunidade de conhecer a plataforma e sua aplica&#231;&#227;o em diversos nichos como web, sistemas embarcados, computa&#231;&#227;o cient&#237;fica, etc. Ela foi considerada a linguagem de programa&#231;&#227;o de maior crescimento em 2010, de acordo com o &#237;ndice Tiobe [1] e &#233; utilizada por empresas reconhecidas no mercado como Google, Nasa, Globo.com, Sepro, etc. Para mais informa&#231;&#245;es e a nossa programa&#231;&#227;o completa visitar o link [2].&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;attachment_697&quot;&gt;
&lt;div id=&quot;attachment_740&quot;&gt;
&lt;p&gt;Para mais informa&#231;&#245;es sobre o encontro , visitar o HotSite Oficial do XV Encontro [3]. Uma &#243;tima oportunidade de fazer networking, aprendizado e conversar sobre software livre e colaborativo! Participe tamb&#233;m da nossa lista de discuss&#227;o para troca de id&#233;ias [4]. O Evento est&#225; sendo patrocinado pelas startups pernambucanas Orygens, Idealizza e Hostech.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;[1 ]&lt;a href=&quot;http://www.geeks3d.com/20110121/tiobe-index-january-2011-python-wins-the-tiobe-programming-language-award-of-2010/&quot;&gt;http://www.geeks3d.com/20110121/tiobe-index-january-2011-python-wins-the-tiobe-programming-language-award-of-2010/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[2]&#160;&lt;a href=&quot;http://www.citi.org.br/blog/2010/12/14/python-entenda-a-tecnologia/&quot;&gt;http://www.citi.org.br/blog/2010/12/14/python-entenda-a-tecnologia/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[3]&lt;a href=&quot;http://pug-pe.python.org.br/encontro/xv/&quot;&gt;&#160;http://pug-pe.python.org.br/encontro/xvi/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[4]&lt;a href=&quot;https://groups.google.com/group/pug-pe?hl=pt&quot;&gt;&#160;https://groups.google.com/group/pug-pe?hl=pt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Aguardamos a presen&#231;a de todos!&lt;/p&gt;
&lt;p&gt;Atenciosamente,&lt;/p&gt;
&lt;p&gt;Marcel Caraciolo&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/774/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/774/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/774/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/774/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/774/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/774/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/774/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/774/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/774/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/774/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/774/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/774/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/774/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/774/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=774&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Academia Python: de 0 a 100 em 3&#189; meses</title>
		<link href="http://blog.ramgarlic.com/2011/10/academia-python-de-0-100-em-3-meses.html"/>
		<id>tag:blogger.com,1999:blog-4463022840615424564.post-2134813137069408644</id>
		<updated>2011-10-31T11:56:43+00:00</updated>
		<content type="html">&lt;p&gt;Quem me conhece sabe que eu adoro lecionar, e nos &#250;ltimos anos tenho trabalhado como desenvolvedor de sistemas usando a elegante e poderosa linguagem Python, a minha favorita no momento.&lt;/p&gt;&lt;p&gt;Agora estou unindo essas duas paix&#245;es, lan&#231;ando em parceria com a Globalcode a &lt;a href=&quot;http://python.globalcode.com.br&quot;&gt;Academia Python&lt;/a&gt;, uma forma&#231;&#227;o completa para programadores, que leva do b&#225;sico ao avan&#231;ado nesta linguagem, em 3 meses e meio de aulas, 2 vezes por semana.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Porque Python &#233; especial&lt;/h3&gt;&lt;p&gt;Python &#233; uma linguagem &lt;b&gt;muito simples&lt;/b&gt; para come&#231;ar a aprender, mas ao mesmo tempo &#233; &lt;b&gt;largamente utilizada&lt;/b&gt; para inova&#231;&#227;o em uma grande variedade de empresas, como &lt;b&gt;YouTube&lt;/b&gt;, &lt;a href=&quot;http://www.ilm.com/&quot;&gt;Industrial Light &amp;amp; Magic&lt;/a&gt;, &lt;b&gt;Globo.com&lt;/b&gt; e &lt;a href=&quot;https://www.dropbox.com/&quot;&gt;Dropbox&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Existem outras linguagens simples de aprender, mas elas costumam ter limita&#231;&#245;es pr&#225;ticas que atrapalham seu uso em ambientes profissionais, e existem outras linguagens usadas profissionalmente, mas nenhuma &#233; t&#227;o f&#225;cil de aprender quanto Python.&lt;/p&gt; &lt;p&gt;Qual &#233; o &lt;b&gt;segredo&lt;/b&gt; deste mist&#233;rio? As principais id&#233;ias de Python v&#234;m da linguagem &lt;a href=&quot;http://homepages.cwi.nl/~steven/abc/&quot;&gt;ABC&lt;/a&gt;, desenvolvida ao longo de &lt;b&gt;10 anos&lt;/b&gt; de pesquisa cient&#237;fica e &lt;b&gt;testes com usu&#225;rios&lt;/b&gt; para chegar a uma linguagem &lt;b&gt;amig&#225;vel e pr&#225;tica&lt;/b&gt;. Por exemplo, o la&#231;o &lt;i&gt;for&lt;/i&gt; do Python &#233; o mais simples poss&#237;vel:&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; for letra in 'Python':&lt;br /&gt;...     print letra&lt;br /&gt;... &lt;br /&gt;P&lt;br /&gt;y&lt;br /&gt;t&lt;br /&gt;h&lt;br /&gt;o&lt;br /&gt;n&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Ao mesmo tempo, &#233; uma linguagem que oferece recursos avan&#231;ados e modernos de programa&#231;&#227;o, como &lt;b&gt;Orienta&#231;&#227;o a Objetos&lt;/b&gt; com sobrecarga de operadores e meta-classes,&lt;b&gt; iteradores&lt;/b&gt;, co-rotinas, &lt;b&gt;meta-programa&#231;&#227;o&lt;/b&gt;. O resultado &#233; que Python vem sendo cada vez mais usada como primeira linguagem em cursos de computa&#231;&#227;o ao redor do mundo (da &lt;a href=&quot;http://www.slideshare.net/fmasanori/python-brasil-7&quot;&gt;FATEC&lt;/a&gt; ao &lt;a href=&quot;http://mit.edu/6.01/mercurial/fall11/www/index.html&quot;&gt;MIT&lt;/a&gt;), e ao mesmo tempo &#233; usada em grandes sites como &lt;b&gt;Google&lt;/b&gt;, YouTube, Globo.com, nas principais empresas computa&#231;&#227;o gr&#225;fica, como Industrial Light &amp;amp; Magic, &lt;a href=&quot;http://www.thefoundry.co.uk/&quot;&gt;The Foundry&lt;/a&gt;, e &lt;b&gt;Autodesk&lt;/b&gt;. Python vem pr&#233;-instalada no &lt;b&gt;Mac OSX&lt;/b&gt; e em praticamente qualquer&lt;b&gt;Linux&lt;/b&gt;, e &#233; f&#225;cil de &lt;a href=&quot;http://www.activestate.com/activepython/downloads&quot;&gt;instalar no Windows&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Porque fazer uma Academia na Globalcode&lt;/h3&gt;&lt;p&gt;A Globalcode &#233; uma empresa que tem tido muito sucesso oferecendo cursos sobre Java h&#225; 10 anos. Uma das f&#243;rmulas desse sucesso tem sido as Academias: forma&#231;&#245;es completas com mais de 100 horas de aula (para comparar, uma disciplina t&#237;pica de computa&#231;&#227;o na USP tem 60 horas). Enquanto muitos cursos livres concentram conte&#250;do em turmas intensivas de curta dura&#231;&#227;o, as Academias oferecem 8 horas de aula por semana, assim os alunos t&#234;m &lt;b&gt;tempo para absorver, exercitar e aplicar&lt;/b&gt; o que foi visto no curso. A Academia Python tem &lt;b&gt;112 horas&lt;/b&gt;, o que d&#225; 14 semanas (sem contar feriados). S&#227;o tr&#234;s meses e meio de conv&#237;vio entre alunos e o instrutor, uma&lt;b&gt; viv&#234;ncia muito mais rica&lt;/b&gt; do que um curso r&#225;pido pode oferecer.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Como &#233; a Academia Python&lt;/h3&gt;&lt;p&gt;A estrutura da Academia Python reflete as pr&#243;prias caracter&#237;sticas da linguagem: come&#231;a com um m&#243;dulo b&#225;sico de 16 horas, &lt;b&gt;acess&#237;vel&lt;/b&gt; para qualquer pessoa que saiba programar em qualquer linguagem, mas chega ao quinto m&#243;dulo abordando &lt;b&gt;t&#243;picos avan&#231;ados&lt;/b&gt; como&lt;b&gt; bancos de dados n&#227;o-relacionais&lt;/b&gt;, programa&#231;&#227;o ass&#237;ncrona de alto desempenho e arquiteturas de sistemas distribu&#237;dos na nuvem (&lt;b&gt;&lt;i&gt;cloud computing&lt;/i&gt;&lt;/b&gt;).&lt;/p&gt;&lt;p&gt;Os m&#243;dulos s&#227;o:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Introdu&#231;&#227;o &#224; linguagem Python&lt;/b&gt;: dominando a sintaxe, tipos de dados e fun&#231;&#245;es b&#225;sicas atrav&#233;s de tarefas pr&#225;ticas de convers&#227;o de arquivos (16h)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Orienta&#231;&#227;o a Objetos e frameworks&lt;/b&gt;: exemplos em Django (framework Web) e Tkinter (desktop GUI) para demonstrar para que servem e como usar os conceitos de encapsulamento, heran&#231;a e polimorfismo (24h)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Desenvolvimento Web com Django e JQuery&lt;/b&gt;: como construir uma aplica&#231;&#227;o Web moderna usando Django, framework adotado pela Globo.com e JQuery, a biblioteca JavaScript mais importante do momento (32h)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Django profissional&lt;/b&gt;: t&#243;picos avan&#231;ados de desenvolvimento Web com Django, incluindo testes automatizados, deployment com Apache e lighttpd, migra&#231;&#227;o de modelos de dados e gera&#231;&#227;o de relat&#243;rios em PDF, entre outros (20h)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Cloud, NoSQL e novas arquiteturas&lt;/b&gt;: Google App Engine, MongoDB e programa&#231;&#227;o ass&#237;ncrona com para sites altamente escal&#225;veis (20h)&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;Para saber mais&lt;/h3&gt;&lt;p&gt;A primeira turna da Academia Python est&#225; prevista para come&#231;ar dia &lt;b&gt;8 de novembro&lt;/b&gt;, com aulas 3&#170; e 5&#170; de 19h a 23h na Globalcode de S&#227;o Paulo (metr&#244; Para&#237;so). Mais detalhes, pre&#231;os e matr&#237;cula na &lt;a href=&quot;http://www.globalcode.com.br/treinamentos/carreiras/academia-python&quot;&gt;p&#225;gina da Academia Python&lt;/a&gt; na Globalcode.&lt;/p&gt;&lt;p&gt;Dia 1&#186; de novembro vamos oferecer um mini-curso gratuito de &lt;a href=&quot;http://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-python&quot;&gt;Introdu&#231;&#227;o &#224; Programa&#231;&#227;o Orientada a Objetos em Python&lt;/a&gt; na Globalcode de S&#227;o Paulo (metr&#244; Para&#237;so) e tamb&#233;m via Webcast. Inscri&#231;&#245;es pelo &lt;a href=&quot;http://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-python&quot;&gt;site da Globalcode&lt;/a&gt;. &lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4463022840615424564-2134813137069408644?l=blog.ramgarlic.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Luciano Ramalho</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.ramgarlic.com/</uri>
		</author>
		<source>
			<title type="html">Ramgarlic</title>
			<subtitle type="html">Programador repentista</subtitle>
			<link rel="self" href="http://blog.ramgarlic.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4463022840615424564</id>
			<updated>2012-01-30T18:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Machine Learning with Python -  Linear Regression</title>
		<link href="http://aimotion.blogspot.com/2011/10/machine-learning-with-python-linear.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-7387615980281248256</id>
		<updated>2011-10-27T22:05:59+00:00</updated>
		<content type="html">&lt;div&gt;Hi all,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I decided to start a new series of posts now focusing on general machine learning with several snippets for anyone to use with real problems or real datasets. &amp;nbsp;Since I am studying machine learning again with a great &lt;a href=&quot;http://www.ml-class.org/course/class/index&quot;&gt;course online&lt;/a&gt; offered this semester by Stanford University, one of &amp;nbsp;the best ways to review the content learned is to write some notes about what I learned. The best part is that it will include examples with Python, Numpy and Scipy. I expect you enjoy all those posts!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Linear Regression&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;In this post I will implement the linear regression and get to see it work on data. &amp;nbsp;Linear Regression is the oldest and most widely used predictive model in the field of machine learning. The goal is to &amp;nbsp;minimize the sum of the squared errros to fit a straight line to a set of data points. &amp;nbsp;(You can find further information at &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear_regression&quot;&gt;Wikipedia&lt;/a&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The linear regression model fits a linear function to a set of data points. The form of the function is:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Y&lt;/i&gt;&amp;nbsp;=&amp;nbsp;&lt;i&gt;&#946;&lt;/i&gt;&lt;sub&gt;0&lt;/sub&gt;&amp;nbsp;+&amp;nbsp;&lt;i&gt;&#946;&lt;/i&gt;&lt;sub&gt;1&lt;/sub&gt;*&lt;i&gt;X&lt;/i&gt;&lt;sub&gt;1&lt;/sub&gt;&amp;nbsp;+&amp;nbsp;&lt;i&gt;&#946;&lt;/i&gt;&lt;sub&gt;2&lt;/sub&gt;*&lt;i&gt;X&lt;/i&gt;&lt;sub&gt;2&lt;/sub&gt;&amp;nbsp;+ &#8230; +&amp;nbsp;&lt;i&gt;&#946;&lt;/i&gt;&lt;sub&gt;&lt;i&gt;n&lt;/i&gt;&lt;/sub&gt;*&lt;i&gt;X&lt;/i&gt;&lt;sub&gt;&lt;i&gt;n&lt;/i&gt;&lt;/sub&gt;&lt;/div&gt;&lt;div&gt;&lt;sub&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/sub&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Where&amp;nbsp;&lt;/span&gt;&lt;i&gt;Y&lt;/i&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;nbsp;is the target variable, &amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;i&gt;X&lt;/i&gt;&lt;sub&gt;1&lt;/sub&gt;,&amp;nbsp;&lt;/span&gt;&lt;i&gt;X&lt;/i&gt;&lt;sub&gt;2&lt;/sub&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;, ...&amp;nbsp;&lt;/span&gt;&lt;i&gt;X&lt;/i&gt;&lt;sub&gt;&lt;i&gt;n&amp;nbsp;&lt;/i&gt;&lt;/sub&gt;are the predictor variables and&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;nbsp;&lt;i&gt;&#946;&lt;/i&gt;&lt;sub&gt;1&lt;/sub&gt;,&amp;nbsp;&lt;i&gt;&#946;&lt;/i&gt;&lt;sub&gt;2&lt;/sub&gt;, &#8230;&amp;nbsp;&lt;i&gt;&#946;&lt;/i&gt;&lt;sub&gt;&lt;i&gt;n&amp;nbsp;&lt;/i&gt;&lt;/sub&gt;&lt;/span&gt;are the coefficients that multiply the predictor variables. &amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;i&gt;&#946;&lt;/i&gt;&lt;sub&gt;0&amp;nbsp;&lt;/sub&gt;&lt;/span&gt;is constant.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example, suppose you are the CEO of a big company of shoes franchise and are considering different cities for opening a new store. The chain already has stores in various cities and you have data for profits and populations from the cities. &amp;nbsp;You would like to use this data to help you select which city to expand next. You could use linear regression for evaluating the parameters of a function that predicts profits for the new store.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The final function would be:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Y = &amp;nbsp; -3.63029144 &amp;nbsp;+ 1.16636235 *&amp;nbsp;&lt;i&gt;X&lt;/i&gt;&lt;sub&gt;1&lt;/sub&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are two main approaches for linear regression: with one variable and with multiple variables. Let's see both!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;Linear regression with one variable&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;Considering our last example, we have a file that contains the dataset of our linear regression problem. The first column is the population of the city and the second column is the profit of having a store in that city. A negative value for profit indicates a loss.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;Before starting, it is useful to understand the data by visualizing it. &amp;nbsp;We will use the scatter plot to visualize the data, since it has only two properties to plot (profit and population). Many other problems in real life are multi-dimensional and can't be plotted on 2-d plot.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;If you run this code above (you must have the Matplotlib package installed in order to present the plots), you will see the scatter plot of the data as shown at Figure 1.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://3.bp.blogspot.com/-nZcik2kHLZM/TqofdW2e6cI/AAAAAAAAAnE/Yd2xSKNErMU/s1600/plot1.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;301&quot; src=&quot;http://3.bp.blogspot.com/-nZcik2kHLZM/TqofdW2e6cI/AAAAAAAAAnE/Yd2xSKNErMU/s400/plot1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;Now you must fit the linear regression parameters to our dataset using gradient descent.&amp;nbsp;The objective of linear regression is to minimize the cost function:&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://nimbledais.com/wp-content/uploads/2011/09/image8.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://nimbledais.com/wp-content/uploads/2011/09/image8.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;where the hypothesis&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;mi1&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;msub&quot;&gt;&lt;span class=&quot;mn&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;is given by the linear model:&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-RUSO0gsCP-0/Tqoh_c-w4cI/AAAAAAAAAnM/Hfs1HX8m7nw/s1600/Screen+shot+2011-10-28+at+12.35.50+AM.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-RUSO0gsCP-0/Tqoh_c-w4cI/AAAAAAAAAnM/Hfs1HX8m7nw/s1600/Screen+shot+2011-10-28+at+12.35.50+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;The parameters of your model are the&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;&lt;/span&gt;&amp;nbsp;values. These are the values you will adjust to minimize cost J(&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;&lt;/span&gt;). One way to do it is to use the batch gradient descent algorithm. In batch gradient, each iteration performs the update:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-SNPgegm1CQ8/TqoiWVjDS3I/AAAAAAAAAnU/48lPu9db1ek/s1600/Screen+shot+2011-10-28+at+12.37.22+AM.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-SNPgegm1CQ8/TqoiWVjDS3I/AAAAAAAAAnU/48lPu9db1ek/s1600/Screen+shot+2011-10-28+at+12.37.22+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;With each step of gradient &amp;nbsp;descent, your parameters&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;, come close to the optimal values that will achieve the lowest cost J(&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;&lt;/span&gt;).&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;For our initial inputs we start with our initial fitting parameters&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;, our data and add another dimmension to our data &amp;nbsp;to accommodate the&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;o&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;nbsp;intercept term. As also our learning rate alpha to 0.01.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;As you perform gradient descent to learn minimize the cost function J(&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;), it is helpful to monitor the convergence by computing the cost. The function cost is show below:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;A good way to verify that gradient descent is working correctly is to look at the value of J(&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;&lt;/span&gt;) and check that it is decreasing with each step. It should converge to a steady valeu by the end of the algorithm.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Your final values for&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;nbsp;will be used to make predictions on profits in areas of 35.000 and 70.000 people. &amp;nbsp;For that we will use some matrix algebra functions with the packages &lt;a href=&quot;http://www.scipy.org/&quot;&gt;Scipy&lt;/a&gt; and Numpy, &amp;nbsp;powerful Python packages for scientific computing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;Our final values as shown below:&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Y = &amp;nbsp; -3.63029144 &amp;nbsp;+ 1.16636235 *&amp;nbsp;&lt;i&gt;X&lt;/i&gt;&lt;sub&gt;1&lt;/sub&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;Now &amp;nbsp;you can use this function to predict your profits! &amp;nbsp;If you use this function with our data we will come with plot:&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-RUQ_r8YMX50/TqokhTUfPkI/AAAAAAAAAnc/1XON9qf6zTM/s1600/plot2.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;301&quot; src=&quot;http://1.bp.blogspot.com/-RUQ_r8YMX50/TqokhTUfPkI/AAAAAAAAAnc/1XON9qf6zTM/s400/plot2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;Another interesting plot is the contour plots, it will give you how J(&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;&lt;/span&gt;) varies with changes in&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;o&lt;/span&gt;&amp;nbsp;and &amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;&#952;1&lt;/span&gt;.&amp;nbsp;&amp;nbsp;The cost function J(&#952;) is bowl-shaped and has a global mininum as you can see in the figure below.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-SL7x0MslJak/Tqokv0texUI/AAAAAAAAAnk/tqJ-_jt465s/s1600/plot3.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;301&quot; src=&quot;http://1.bp.blogspot.com/-SL7x0MslJak/Tqokv0texUI/AAAAAAAAAnk/tqJ-_jt465s/s400/plot3.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div&gt;This minimum is the optimal point for &#952;o&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;&lt;/span&gt;and &#952;i, and each step of gradient descent moves closer to this point.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;All the code is shown &lt;a href=&quot;https://gist.github.com/1321575&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Linear regression with multiple variables&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Ok, but when you have multiple variables ? How do we work with them using linear regression ? That comes the linear regression with multiple variables. Let's see an example:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Suppose you are selling your house and you want to know what a good market price would be. One way to do this is to first collect information on recent houses sold and make a model of housing prices.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Our training set of housing prices in Recife, Pernambuco, Brazil are formed by three columns &amp;nbsp;(three variables). T&lt;/span&gt;he first column is the size of the house (in square feet), the second column is the number of bedrooms, and the third column is the price of the house.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;But before going directly to the linear regression it is important to analyze our data. By looking at the values, note that house sizes are about 1000 times the number of bedrooms. When features differ by orders of magnitude, it is important to perfom a feature scaling that can make gradient descent converge much more quickly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-NXE0EdhQf3E/TqolmYQTAQI/AAAAAAAAAns/D84TZmf3O1c/s1600/Screen+shot+2011-10-28+at+12.51.04+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;235&quot; src=&quot;http://1.bp.blogspot.com/-NXE0EdhQf3E/TqolmYQTAQI/AAAAAAAAAns/D84TZmf3O1c/s400/Screen+shot+2011-10-28+at+12.51.04+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;The basic steps are:&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Subtract the mean value of each feature from the dataset.&lt;/li&gt;&lt;li&gt;After subtracting the mean, additionally scale (divide) the feature values by their respective &#8220;standard deviations.&#8221;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;The standard deviation is a way of measuring how much variation there is in the range of values of a particular feature (most data points will lie within &#177;2 standard deviations of the mean); this is an alternative to taking the range of values (max-min).&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;Now that you have your data scaled, you can implement the gradient descent and the cost function.&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;Previously, you implemented gradient descent on a univariate regression problem. The only difference now is that there is one more feature in the matrix X. The hypothesis function and the batch gradient descent update rule remain unchanged.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;In the multivariate case, the cost function can also be written in the following vectorized form:&lt;/div&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span class=&quot;mrow&quot; id=&quot;MathJax-Span-39&quot;&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-40&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; J&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-41&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-42&quot;&gt;&#952;&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-43&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-44&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mfrac&quot; id=&quot;MathJax-Span-45&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span class=&quot;mn&quot; id=&quot;MathJax-Span-46&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&quot;mrow&quot; id=&quot;MathJax-Span-47&quot;&gt;&lt;span class=&quot;mn&quot; id=&quot;MathJax-Span-48&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-49&quot;&gt;m&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-50&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-51&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-52&quot;&gt;&#952;&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-53&quot;&gt;&#8722;&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-54&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;texatom&quot; id=&quot;MathJax-Span-55&quot;&gt;&lt;span class=&quot;mrow&quot; id=&quot;MathJax-Span-56&quot;&gt;&lt;span class=&quot;msubsup&quot; id=&quot;MathJax-Span-57&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-58&quot;&gt;)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-59&quot;&gt;T&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-60&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-61&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-62&quot;&gt;&#952;&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-63&quot;&gt;&#8722;&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-64&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-65&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;After running our code, it will come with following function:&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;215810.61679138, &amp;nbsp; 61446.18781361,&amp;nbsp;&amp;nbsp; 20070.13313796&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;The gradient descent will run until convergence to find the final values of &#952;. &amp;nbsp;Next, we will this value of &#952; to predict the price of a house with 1650 square feet and 3 bedrooms.&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span class=&quot;mrow&quot; id=&quot;MathJax-Span-9&quot;&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-10&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#952;&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-11&quot;&gt;:=&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-12&quot;&gt;&#952;&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-13&quot;&gt;&#8722;&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-14&quot;&gt;&#945;&lt;/span&gt;&lt;span class=&quot;mfrac&quot; id=&quot;MathJax-Span-15&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span class=&quot;mn&quot; id=&quot;MathJax-Span-16&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-17&quot;&gt;m&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;msubsup&quot; id=&quot;MathJax-Span-18&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-19&quot;&gt;x&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-20&quot;&gt;T&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-21&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-22&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;msubsup&quot; id=&quot;MathJax-Span-23&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-24&quot;&gt;&#952;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-25&quot;&gt;T&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-26&quot;&gt;&#8722;&lt;/span&gt;&lt;span class=&quot;mi&quot; id=&quot;MathJax-Span-27&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;mo&quot; id=&quot;MathJax-Span-28&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Predicted price of a 1650 sq-ft, 3 br house: &lt;/b&gt;183865.197988&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you plot the convergence plot of the gradient descent you may see that convergence will decrease as the number of iterations grows.&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-vX3So9OwSBI/Tqom6PGL0iI/AAAAAAAAAn0/wKT7551fymo/s1600/plot4.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;301&quot; src=&quot;http://3.bp.blogspot.com/-vX3So9OwSBI/Tqom6PGL0iI/AAAAAAAAAn0/wKT7551fymo/s400/plot4.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The code for linear regression with multi variables is available &lt;a href=&quot;https://gist.github.com/1321585&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Extra Notes&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;div&gt;The Scipy package comes with several tools for helping you in this task, even with a module that has a linear regression implemented for you to use!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The module is &lt;a href=&quot;http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.linregress.html&quot;&gt;scipy.stats.linregress&lt;/a&gt; &amp;nbsp;and implements several other techniques for updating the theta parameters. &amp;nbsp;Check more about it &lt;a href=&quot;http://www.scipy.org/Cookbook/LinearRegression?highlight=%28regression%29&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Conclusions&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;The goal of regression is to determine the values of the&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;&#223;&amp;nbsp;&lt;/span&gt;parameters that minimize the sum of the squared residual values (difference betwen predicted and the observed) for the set of observations. Since linear regression is restricted to fiting linear (straight line/plane) functions to data, it's not adequate to real-world data as more general techniques such as neural networks which can model non-linear functions. &amp;nbsp;But linear regression has some interesting advantages:&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;li&gt;Linear regression is the most widely used method, and it is well understood.&lt;/li&gt;&lt;li&gt;Training a linear regression model is usually much faster than methods such as neural networks.&lt;/li&gt;&lt;li&gt;Linear regression models are simple and require minimum memory to implement, so they work well on embedded controllers that have limited memory space.&lt;/li&gt;&lt;li&gt;By examining the magnitude and sign of the regression coefficients (&lt;i&gt;&#946;&lt;/i&gt;) you can infer how predictor variables affect the target outcome.&lt;/li&gt;&lt;li&gt;It's is one of the simplest algorithms and available in several packages, even Microsoft Excel!&lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;I hope you enjoyed this simple post, and in the next one I will explore another field of machine learning with Python! You can download the code at this &lt;a href=&quot;http://dl.dropbox.com/u/1977573/linearregression.zip&quot;&gt;link&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marcel Caraciolo&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-7387615980281248256?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Programe conforme o PEP8</title>
		<link href="http://aprenda-python.blogspot.com/2011/10/programe-conforme-o-pep8.html"/>
		<id>tag:blogger.com,1999:blog-2240031811551496628.post-6477139283838211798</id>
		<updated>2011-10-24T16:14:18+00:00</updated>
		<content type="html">Quando escrevemos programas na linguagem Python, &#233; bom seguirmos as recomenda&#231;&#245;es do&#160; PEP8, que &#233; uma conven&#231;&#227;o com padr&#245;es de codifica&#231;&#227;o e recomenda, dentre outras coisas, que n&#227;o misturamos tabs e espa&#231;os.

Como o PEP8 &#233; formado de v&#225;rias recomenda&#231;&#245;es, &#224;s vezes &#233; trabalhoso ficar conferindo se voc&#234; est&#225; dentro do padr&#227;o ou n&#227;o. Quando se aprende, tudo vai autom&#225;tico, mas quando voc&#234; vem de</content>
		<author>
			<name>Vinicius Assef</name>
			<email>noreply@blogger.com</email>
			<uri>http://aprenda-python.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Aprenda Python</title>
			<subtitle type="html">Dicas para voc&#234; que j&#225; &#233; programador em outra linguagem.</subtitle>
			<link rel="self" href="http://aprenda-python.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-2240031811551496628</id>
			<updated>2011-11-30T15:44:12+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Racket</title>
		<link href="http://kodumaro.blogspot.com/2011/10/racket.html"/>
		<id>tag:blogger.com,1999:blog-1387996720436450649.post-5444877383348468882</id>
		<updated>2011-10-17T18:48:00+00:00</updated>
		<content type="html">&lt;img src=&quot;http://2.bp.blogspot.com/-8lF7wwUkFmQ/Tpx4nLMrg8I/AAAAAAAAAcE/x-8o5hkGBHE/s200/racket.jpg&quot; alt=&quot;Racket&quot; id=&quot;BLOGGER_PHOTO_ID_5664535045741446082&quot; /&gt; Outro dia procurando por um bom interpretador/compilador para &lt;a href=&quot;http://docs.racket-lang.org/r6rs/&quot;&gt;R&#8310;RS&lt;/a&gt;, encontrei algo muito mais interessante&#8230;&lt;br /&gt;&lt;br /&gt;Encontrei o &lt;a href=&quot;http://pt.wikipedia.org/wiki/Rapid_Application_Development&quot;&gt;RAD&lt;/a&gt;-&lt;a href=&quot;http://pt.wikipedia.org/wiki/Ambiente_de_desenvolvimento_integrado&quot;&gt;IDE&lt;/a&gt; &lt;a href=&quot;http://racket-lang.org/&quot;&gt;Racket&lt;/a&gt;, antigo DrScheme.&lt;br /&gt;&lt;br /&gt;O interessante do Racket &#233; que, al&#233;m de ser um interpretador e compilador de R&#8309;RS e R&#8310;RS, tamb&#233;m suporta &#8211; ali&#225;s, por padr&#227;o &#8211; uma linguagem de programa&#231;&#227;o baseada em Scheme, tamb&#233;m chamada Racket &#8211; antiga PLT Scheme &#8211;, muito poderosa; tamb&#233;m traz um ambiente de desenvolvimento chamado DrRacket.&lt;br /&gt;&lt;br /&gt;Quando voc&#234; escreve um &lt;em&gt;script&lt;/em&gt; em Scheme, a primeira linha indica a vers&#227;o que voc&#234; pretende usar:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#!r4rs&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Ou:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#!r5rs&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Ou:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#!r6rs&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Se o interpretador suportar a vers&#227;o, ela ser&#225; usada. J&#225; no caso do Racket, outras op&#231;&#245;es s&#227;o suportadas, como o padr&#227;o:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#lang racket&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Para a linguagem padr&#227;o.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;[update 2011-10-18]&lt;/tt&gt;&lt;br /&gt;Um &lt;em&gt;script&lt;/em&gt; R&#8310;RS come&#231;a sempre com um &lt;code&gt;import&lt;/code&gt;, por exemplo:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#!r6rs&lt;br /&gt;(import (rnrs))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Voc&#234; pode ter as fun&#231;&#245;es de R&#8310;RS em um c&#243;digo Racket (PLT), basta usar:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#lang racket&lt;br /&gt;(require rnrs)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O m&#243;dulo &lt;code&gt;rnrs&lt;/code&gt; traz toda a funcionalidade de R&#8310;RS.&lt;br /&gt;&lt;br /&gt;Outra coisa legal da linguagem Racket &#233; que, em vez de &lt;code&gt;lambda&lt;/code&gt;, voc&#234; pode usar &lt;code&gt;&#955;&lt;/code&gt; (&#8984;\ / &lt;tt&gt;C-\&lt;/tt&gt;).&lt;br /&gt;&lt;tt&gt;[/update]&lt;/tt&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;E at&#233; mesmo:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#lang planet jaymccarthy/c&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Para &lt;a href=&quot;http://pt.wikipedia.org/wiki/Linguagem_de_programa&#231;&#227;o_C&quot;&gt;linguagem de programa&#231;&#227;o C&lt;/a&gt; &#8211; uma op&#231;&#227;o de C interpretado!&lt;br /&gt;&lt;br /&gt;Para tanto voc&#234; precisa ter em seu &lt;code&gt;~/.racketrc&lt;/code&gt; o seguinte conte&#250;do:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#lang racket&lt;br /&gt;(require (planet jaymccarthy/c:1:2))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para instalar o m&#243;dulo C, voc&#234; pode executar no &lt;em&gt;widget&lt;/em&gt; de defini&#231;&#245;es (&#8984;D no Mac OS X, &lt;tt&gt;C-d&lt;/tt&gt; no Windows e no GNU/Linux):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;em&gt;&amp;gt;&lt;/em&gt; &lt;strong&gt;(require (planet &quot;main.rkt&quot; (&quot;jaymccarthy&quot; &quot;c.plt&quot; 1 2)))&lt;/strong&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;[update 2011-10-18]&lt;/tt&gt;&lt;br /&gt;Eu acho que voc&#234; n&#227;o precise instalar o m&#243;dulo, basta colocar sua chamada em &lt;code&gt;~/.racketrc&lt;/code&gt; e, na primeira execu&#231;&#227;o, o m&#243;dulo ser&#225; automaticamente baixado e instalado.&lt;br /&gt;&lt;br /&gt;S&#243; n&#227;o posso afirmar com certeza porque eu j&#225; havia instalado ele antes.&lt;br /&gt;&lt;br /&gt;No Windows, o arquivo &#233; &lt;code&gt;racketrc.rktl&lt;/code&gt; e deve ficar no diret&#243;rio de perfil do usu&#225;rio.&lt;br /&gt;&lt;tt&gt;[/update]&lt;/tt&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Programa&#231;&#227;o visual&lt;/h3&gt;&lt;br /&gt;Para facilitar a vida de quem precisa desenvolver aplica&#231;&#245;es gr&#225;ficas, voc&#234; pode usar o &lt;a href=&quot;http://mred-designer.origo.ethz.ch/&quot;&gt;MrEd Designer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Para instal&#225;-lo, execute no &lt;em&gt;widget&lt;/em&gt; de defini&#231;&#245;es do DrRacket:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;em&gt;&amp;gt;&lt;/em&gt; &lt;strong&gt;(require (planet orseau/mred-designer:3:7))&lt;/strong&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para iniciar o processo, use (recomendo criar um &lt;code&gt;alias&lt;/code&gt;):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;em&gt;bash$&lt;/em&gt; &lt;strong&gt;gracket -e '(require (planet orseau/mred-designer:3:7))'&lt;/strong&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ol&#225; Mundo!&lt;/h3&gt;&lt;br /&gt;Vamos criar um programa simples. Primeiro abra o MrEd Designer.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;[update 2011-10-19]&lt;/tt&gt;&lt;br /&gt;Troquei os nomes dos &lt;em&gt;widgets&lt;/em&gt; pelos nomes usados no c&#243;digo Racket.&lt;br /&gt;&lt;tt&gt;[/update]&lt;/tt&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Na janela &lt;tt&gt;Hierarchy&lt;/tt&gt; selecione &lt;code&gt;project-&lt;em&gt;XXX&lt;/em&gt;&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Na janela &lt;tt&gt;MrEd Designer&lt;/tt&gt;, na se&#231;&#227;o &lt;tt&gt;Containers&lt;/tt&gt;, clique no primeiro bot&#227;o, &lt;code&gt;frame%&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Vai surgir uma janela pequena e, na hierarquia do projeto, um &lt;code&gt;frame%&lt;/code&gt; (&lt;code&gt;frame-&lt;em&gt;XXXX&lt;/em&gt;&lt;/code&gt;) sob o projeto.&lt;br /&gt;&lt;br /&gt;Na janela &lt;tt&gt;Hierarchy&lt;/tt&gt; selecione o &lt;code&gt;frame%&lt;/code&gt; que apareceu e repare que a janela &lt;tt&gt;Properties&lt;/tt&gt; mudou.&lt;br /&gt;&lt;br /&gt;Em &lt;tt&gt;Properties&lt;/tt&gt;, mude o valor de &lt;em&gt;label&lt;/em&gt; (que est&#225; &lt;code&gt;Frame&lt;/code&gt;) para &lt;code&gt;Ol&#225; Mundo!&lt;/code&gt; e clique em &lt;tt&gt;Save &amp;amp; Update Preview&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Veja que o t&#237;tulo da janela mudou.&lt;br /&gt;&lt;br /&gt;Agora, ainda com o &lt;code&gt;frame%&lt;/code&gt; selecionado, na janela &lt;tt&gt;MrEd Designer&lt;/tt&gt;, na se&#231;&#227;o &lt;tt&gt;Controls&lt;/tt&gt;, clique no primeiro bot&#227;o, &lt;code&gt;message%&lt;/code&gt;. Repare que surgiu um elemento &lt;code&gt;message%&lt;/code&gt; (&lt;code&gt;message-&lt;em&gt;XXXX&lt;/em&gt;&lt;/code&gt;) na hieraquia, sob o &lt;code&gt;frame%&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Selecione o novo elemento e mude o &lt;em&gt;label&lt;/em&gt; (em &lt;tt&gt;Properties&lt;/tt&gt;) para &lt;code&gt;Ol&#225; Mundo!&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Clique em &lt;tt&gt;Choose Font&#8230;&lt;/tt&gt; e escolha uma fonte maior, sugiro Arial Bold 20, e clique em &lt;tt&gt;Ok&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Clique novamente em &lt;tt&gt;Save &amp;amp; Update Preview&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Selecione de novo o &lt;code&gt;frame%&lt;/code&gt; em &lt;tt&gt;Hierarchy&lt;/tt&gt; e, em &lt;tt&gt;MrEd Designer&lt;/tt&gt; &#8594; &lt;tt&gt;Controls&lt;/tt&gt;, clique no segundo bot&#227;o, &lt;code&gt;button%&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Surgir&#225; um elemento &lt;code&gt;button%&lt;/code&gt; (&lt;code&gt;button-&lt;em&gt;XXXX&lt;/em&gt;&lt;/code&gt;) sob o &lt;code&gt;frame%&lt;/code&gt;. Selecione-o.&lt;br /&gt;&lt;br /&gt;Mude o &lt;em&gt;label&lt;/em&gt; para &lt;code&gt;Ok&lt;/code&gt; e a fonte para Arial 14. Clique em &lt;tt&gt;Save &amp;amp; Update Preview&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Agora, na janela &lt;tt&gt;MrEd Designer&lt;/tt&gt;, no menu &lt;tt&gt;File&lt;/tt&gt; clique em &lt;tt&gt;Save Project&lt;/tt&gt; &#8211; ou pressione &#8984;S / &lt;tt&gt;C-s&lt;/tt&gt;. Escolha o diret&#243;rio e salve como &lt;code&gt;ola&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Depois clique em &lt;tt&gt;File&lt;/tt&gt; &#8594; &lt;tt&gt;Generate Scheme File&#8230;&lt;/tt&gt; &#8211; &#8984;F5 no Mac. Salve como &lt;code&gt;ola.ss&lt;/code&gt; no mesmo diret&#243;rio onde voc&#234; salvou o projeto.&lt;br /&gt;&lt;br /&gt;Repare que voc&#234; ter&#225; dois arquivos: &lt;code&gt;ola.*.med&lt;/code&gt; (o projeto) e &lt;code&gt;ola.ss&lt;/code&gt; (o c&#243;digo).&lt;br /&gt;&lt;br /&gt;Abra agora o arquivo &lt;code&gt;ola.ss&lt;/code&gt; no DrRacket:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;em&gt;bash$&lt;/em&gt; &lt;strong&gt;drracket ola.ss&lt;/strong&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Procure a seguinte linha:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(button-&lt;em&gt;XXXX&lt;/em&gt;-callback (lambda (button control-event) (void))))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Onde &lt;code&gt;&lt;em&gt;XXXX&lt;/em&gt;&lt;/code&gt; &#233; uma sequ&#234;ncia de d&#237;gitos decimais.&lt;br /&gt;&lt;br /&gt;Mude para:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(button-&lt;em&gt;XXXX&lt;/em&gt;-callback (lambda (button control-event) (displayln &quot;Ol&#225; Mundo!&quot;))))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Veja a linha 8 do &lt;em&gt;script&lt;/em&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;;;; Call (project-&lt;em&gt;XXX&lt;/em&gt;-init) with optional arguments to this module&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Acrescente a linha sugerida ao final do arquivo:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;(project-&lt;em&gt;XXX&lt;/em&gt;-init)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Salve o arquivo &#8211; &#8984;S / &lt;tt&gt;C-s&lt;/tt&gt; &#8211; depois rode/corra o programa &#8211; &#8984;T / &lt;tt&gt;C-t&lt;/tt&gt; &#8211; e veja a m&#225;gica.&lt;br /&gt;&lt;br /&gt;Para executar o &lt;em&gt;script&lt;/em&gt; sem precisar levantar o DrRacket, use o comando:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;em&gt;bash$&lt;/em&gt; &lt;strong&gt;gracket ola.ss&lt;/strong&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Se preferir tornar o &lt;em&gt;script&lt;/em&gt; execut&#225;vel, acrescente a primeira linha:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#!/usr/bin/env gracket&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Outros recursos&lt;/h3&gt;&lt;br /&gt;Voc&#234; pode encontrar uma s&#233;rie de m&#243;dulos interessantes no &lt;a href=&quot;http://planet.racket-lang.org/&quot;&gt;PLaneT&lt;/a&gt;, como facilidades &lt;em&gt;web&lt;/em&gt;, conex&#227;o a banco de dados, &lt;code&gt;bzlib&lt;/code&gt;, Plan9, JSON, etc.&lt;br /&gt;&lt;br /&gt;Sobre constru&#231;&#227;o de aplica&#231;&#245;es &lt;em&gt;web&lt;/em&gt;, leia &lt;a href=&quot;http://docs.racket-lang.org/continue/&quot;&gt;Continue: Web Applications in Racket&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[]&#8217;s&lt;br /&gt;Cacilh&#945;&#962;, La Batalema&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1387996720436450649-5444877383348468882?l=kodumaro.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Darth Batalema</name>
			<email>noreply@blogger.com</email>
			<uri>http://kodumaro.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Kodumaro</title>
			<subtitle type="html">As sombras da programa&#231;&#227;o</subtitle>
			<link rel="self" href="http://kodumaro.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-1387996720436450649</id>
			<updated>2012-02-04T10:44:29+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">R.I.P. Dennis Ritchie</title>
		<link href="http://kodumaro.blogspot.com/2011/10/rip-dennis-ritchie.html"/>
		<id>tag:blogger.com,1999:blog-1387996720436450649.post-491628860766930934</id>
		<updated>2011-10-15T12:22:00+00:00</updated>
		<content type="html">Artigo original nas &lt;a href=&quot;http://montegasppa.blogspot.com/2011/10/e-agora-mesmo.html&quot;&gt;Reflex&#245;es de Monte Gasppa e Giulia C.&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;img src=&quot;http://3.bp.blogspot.com/-x9TCS45yyeU/Tpl2liNRBhI/AAAAAAAAAb4/K2MGMW1LDO0/s200/dennis-ritchie.jpg&quot; alt=&quot;Dennis Ritchie&quot; id=&quot;BLOGGER_PHOTO_ID_5663688393604793874&quot; /&gt; No mesmo m&#234;s em que morreu &lt;a href=&quot;http://montegasppa.blogspot.com/2011/10/e-agora.html&quot;&gt;o mago da distor&#231;&#227;o da realidade&lt;/a&gt;, tamb&#233;m nos deixa &lt;a href=&quot;http://pt.wikipedia.org/wiki/Dennis_Ritchie&quot;&gt;Dennis Ritchie&lt;/a&gt;, criador das linguagens de programa&#231;&#227;o B (baseada em APL) e &lt;a href=&quot;http://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o_C&quot;&gt;C&lt;/a&gt; e cocriador do sistema operacional &lt;a href=&quot;http://pt.wikipedia.org/wiki/UNIX&quot;&gt;U&lt;small&gt;NIX&lt;/small&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Se Steve Jobs esteve envolvido direta ou indiretamente com cada avan&#231;o tecnol&#243;gico que n&#227;o fosse voltado para resolver problemas da pr&#243;pria m&#225;quina, salvo rar&#237;ssimas exce&#231;&#245;es, Dennis Ritchie foi o criador da linguagem de programa&#231;&#227;o &#8211; e dos conceitos envolvidos &#8211; usada como base para quase todas as linguagens modernas, al&#233;m de ter participado ativa e diretamente da cria&#231;&#227;o do sistema operacional que serve de base para todos os sistemas atuais &lt;strong&gt;que funcionam&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;A parte mais triste &#233; ver todo o &lt;em&gt;bafaf&#225;&lt;/em&gt; em cima do falecimento de Jobs, mas nada se fala de Ritchie, t&#227;o importante quanto. Ou pior&#8230; vi programadores que &lt;strong&gt;n&#227;o sabem&lt;/strong&gt; quem foi Dennis Ritchie!&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://twitter.com/#!/MonteGasppa/status/124791574021423104&quot;&gt;Como eu disse&lt;/a&gt;, um programador que n&#227;o conhe&#231;a Dennis Ritchie, &lt;a href=&quot;http://pt.wikipedia.org/wiki/Edsger_Dijkstra&quot;&gt;Dijkstra&lt;/a&gt; e &lt;a href=&quot;http://pt.wikipedia.org/wiki/Donald_Knuth&quot;&gt;Knuth&lt;/a&gt; precisa mudar de profiss&#227;o ou tomar muita porrada.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;[]&#8217;s&lt;br /&gt;Cacilh&#945;&#962;, La Batalema&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1387996720436450649-491628860766930934?l=kodumaro.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Darth Batalema</name>
			<email>noreply@blogger.com</email>
			<uri>http://kodumaro.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Kodumaro</title>
			<subtitle type="html">As sombras da programa&#231;&#227;o</subtitle>
			<link rel="self" href="http://kodumaro.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-1387996720436450649</id>
			<updated>2012-02-04T10:44:29+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">marcelcaraciolo</title>
		<link href="http://pugpe.wordpress.com/2011/10/15/sabado-tem-pug-pe-summer-of-code-no-itbc-participem/"/>
		<id>http://pugpe.wordpress.com/?p=772</id>
		<updated>2011-10-15T03:55:32+00:00</updated>
		<content type="html">&lt;p&gt;Pessoal,&lt;/p&gt;
&lt;p&gt;Amanh&#227; teremos o nosso primeiro Summer of Code (#PUGPeSoC).&lt;/p&gt;
&lt;p&gt;O evento ir&#225; ocorrer no &lt;strong&gt;AUDIT&#211;RIO DO ITBC&lt;/strong&gt;&#160;- Que fica bem pertinho da pra&#231;a do arsenal, l&#225; no Recife Antigo.&lt;/p&gt;
&lt;p&gt;Mapa:&#160;&lt;a href=&quot;http://maps.google.com.br/maps?saddr=-8.063139,-34.87119&amp;daddr=R.+Domingos+Jos%C3%A9+Martins&amp;hl=en&amp;ie=UTF8&amp;sll=-8.061253,-34.871689&amp;sspn=0.004419,0.008256&amp;geocode=FV33hP8daujr_Q%3BFdf9hP8dnObr_Q&amp;vpsrc=0&amp;mra=dme&amp;mrsp=1&amp;sz=18&amp;t=h&amp;z=18&quot;&gt;O B MARCA O LOCAL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;O Evento &lt;strong&gt;COME&#199;A AS 08:30&lt;/strong&gt;&#160;mas seria bom que todos procurassem chegar cedo para nos organizarmos, conversar um pouco e nos conhecermos melhor j&#225; que iremos passar o dia juntos (se ficarem at&#233; o fim #FicaVaiTerBolo)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A entrada &#233; &lt;strong&gt;FRANCA&lt;/strong&gt;, &#233; &lt;strong&gt;DIGRATIS&lt;/strong&gt;, &#233; &lt;strong&gt;LIVRE&lt;/strong&gt;&#160;a todos que se inscreveram no formul&#225;rio.&lt;/p&gt;
&lt;p&gt;Por&#233;m, gostariamos de fazer um pedido.&lt;/p&gt;
&lt;p&gt;Quem puder levar extens&#245;es, garfos de for&#231;a, adaptadores de tomada, por favor LEVE!&lt;/p&gt;
&lt;p&gt;Muitas pessoas informaram que levariam notebooks e, por isso, podemos ficar sem tomadas dispon&#237;veis caso todo mundo queira carreg&#225;-los ao mesmo tempo.&lt;/p&gt;
&lt;p&gt;No mais, estejam prontos para aprender, ensinar e colaborar!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Qualquer d&#250;vida, basta falar no grupo &lt;a href=&quot;mailto:pug-pe@googlegroups.com&quot;&gt;pug-pe@googlegroups.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Se algu&#233;m achar que pode se perder no Recife Antigo e n&#227;o achar o local, enviar um email para o grupo!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Atenciosamente,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Equipe PUG-PE&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/772/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/772/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/772/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/772/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/772/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/772/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/772/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/772/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/772/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/772/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/772/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/772/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/772/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/772/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=772&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Nova vers&#227;o da API do Dropbox</title>
		<link href="http://feedproxy.google.com/~r/pyAvelino/~3/y1ah4ssPN48/"/>
		<id>http://avelino.us/2011/10/13/nova-versao-da-api-do-dropbox/</id>
		<updated>2011-10-14T03:23:54+00:00</updated>
		<content type="html">&lt;p&gt;Dia 14.09.2011 o Dropbox lan&#231;ou a nova vers&#227;o 1.0 da API, nesse lan&#231;amento trouxe muitas novidades e melhorias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Suporte para aplica&#231;&#245;es web&lt;/li&gt;
&lt;li&gt;Suporte para cria&#231;&#227;o de pasta (Na vers&#227;o 0.1 da API n&#227;o tinha)&lt;/li&gt;
&lt;li&gt;Novo site para desenvolvedores, com documenta&#231;&#227;o simples e completa &lt;a href=&quot;https://www.dropbox.com/developers_beta&quot;&gt;https://www.dropbox.com/developers_beta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Melhor compartilhamento de arquivo, streaming, busca por arquivo e suporte para revis&#227;o de arquivo&lt;/li&gt;
&lt;li&gt;Implementa&#231;&#227;o no controle de nomes de arquivos, para n&#227;o sobrescrever arquivos j&#225; salvo&lt;/li&gt;
&lt;li&gt;SDK atualizado para iOS, Android, Python, Ruby e Java que implementa todas modifica&#231;&#245;es e documenta&#231;&#227;o&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Link do repositorio (Python Pypi) da nova biblioteca &lt;a href=&quot;http://pypi.python.org/pypi/dropbox/1.1&quot;&gt;http://pypi.python.org/pypi/dropbox/1.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O dropbox implementou um oauth onde podemos desenvolver software e fazer o usu&#225;rio usar a conta de dropbox dele para armazenamento de arquivos:
&lt;img alt=&quot;OAuth Dropbox&quot; src=&quot;https://www.dropbox.com/static/images/oauth.png&quot; title=&quot;OAuth Dropbox&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vou falar um pouco sobre 3 metodos que esta dentro da biblioteca &quot;dropbox&quot; client, rest e session:&lt;/p&gt;
&lt;p&gt;Com o metodo session &#233; por onde tudo come&#231;a, onde voc&#234; linka o seu software com uma conta Dropbox, exemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Include the Dropbox SDK libraries
from dropbox import session

# Get your app key and secret from the Dropbox developer website
APP_KEY = 'INSERT_APP_KEY_HERE'
APP_SECRET = 'INSERT_SECRET_HERE'

# ACCESS_TYPE should be 'dropbox' or 'app_folder' as configured for your app
ACCESS_TYPE = 'INSERT_ACCESS_TYPE_HERE'
sess = session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Caso esteja usando a conta do Dropbox do usu&#225;rio podemos pegar informa&#231;&#245;es da conta dele:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;client = client.DropboxClient(sess)
print &quot;linked account:&quot;, client.account_info()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Agora usando o metodo &quot;client&quot; podemos fazer get e put de arquivos:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from dropbox import client
f = open('working-draft.txt')
response = client.put_file('/magnum-opus.txt', f)
print &quot;uploaded:&quot;, response
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ap&#243;s criar o arquivos podemos ler ele:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;print client.get_file('/magnum-opus.txt').read()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reescrever o arquivo com uma nova revis&#227;o para criar um novo arquivo:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;out = open('magnum-opus.txt', 'w')
out.write(client.get_file('/magnum-opus.txt',rev='362e2029684fe').read())
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Para trabalhar com REST temos um &#243;tima documenta&#231;&#227;o &lt;a href=&quot;https://www.dropbox.com/developers_beta/reference/api&quot;&gt;https://www.dropbox.com/developers_beta/reference/api&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/mZX1BJvVBPBauRXN8GKqefyvahY/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/mZX1BJvVBPBauRXN8GKqefyvahY/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/mZX1BJvVBPBauRXN8GKqefyvahY/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/mZX1BJvVBPBauRXN8GKqefyvahY/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/pyAvelino/~4/y1ah4ssPN48&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>avelino</name>
			<email>avelino@chierry.com</email>
			<uri>http://avelino.us/</uri>
		</author>
		<source>
			<title type="html">avelino.us's Weblog</title>
			<subtitle type="html">Latest entries on Weblog</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/pyavelino"/>
			<id>tag:blogger.com,1999:blog-2742862280909730250</id>
			<updated>2011-12-22T15:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">High Performance Computation with Python - Part 04</title>
		<link href="http://aimotion.blogspot.com/2011/10/high-performance-computation-with.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-2122219196495481541</id>
		<updated>2011-10-11T05:38:20+00:00</updated>
		<content type="html">&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Hi all,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;This article is the fourth one of the series about High Computation with Python. &amp;nbsp;For anyone that missed the first, second and third parts check this&amp;nbsp;&lt;a href=&quot;http://aimotion.blogspot.com/2011/09/high-performance-computation-with.html&quot;&gt;link&lt;/a&gt;&amp;nbsp;about Python Profiling, this&amp;nbsp;&lt;a href=&quot;http://aimotion.blogspot.com/2011/09/high-performance-computation-with_17.html&quot;&gt;one&lt;/a&gt;&amp;nbsp;about Cython and finally &lt;a href=&quot;http://aimotion.blogspot.com/2011/09/high-performance-computation-with_24.html&quot;&gt;this&lt;/a&gt; about&amp;nbsp; Numpy Vectors. The goal is to present approaches to make CPU-demanding tasks in Python run much faster.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The techniques that are being covered:&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;li&gt;&lt;s&gt;&amp;nbsp;&lt;/s&gt;&lt;b&gt;&lt;s&gt;Python Profiling&lt;/s&gt;&lt;/b&gt;&lt;s&gt;&amp;nbsp;- How to find bottlenecks&lt;/s&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;&amp;nbsp;&lt;b&gt;Cython&lt;/b&gt;&amp;nbsp;- &amp;nbsp;Annotate your code and compile to C&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;&amp;nbsp;&lt;b&gt;Numpy Vectors&lt;/b&gt;&amp;nbsp;- Fast vector operations using numpy arrays&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;&lt;b&gt;&amp;nbsp;Numpy integration with Cython&lt;/b&gt;&amp;nbsp;- fast numerical Python library wrapped by Cython&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;b&gt;PyPy&lt;/b&gt;&amp;nbsp;- Python's new Just in Time &amp;nbsp;Compiler&lt;/li&gt;&lt;/span&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;In this post I will talk about PyPy - the JIT Compiler for Python!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The Problem&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;In this series we will analyze how to optimize the statistical&amp;nbsp;&lt;b&gt;Spearman Rank's Correlation coefficient,&lt;/b&gt;&amp;nbsp;&amp;nbsp;which it is a particular measure used to compute the similarity between items in recommender systems and assesses how well the relationship between two variables can be described using a monotonic function. The source code for this metric can be found in the&amp;nbsp;&lt;a href=&quot;http://aimotion.blogspot.com/2011/09/high-performance-computation-with.html&quot;&gt;first post&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Pypy&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;PyPy is a Just in TIme compiler for the Python programming language. It is multi-platform and it runs Python 2.7. &amp;nbsp;With your code running in PyPy, it will make your code (depending on how you write your code) run faster (2 - 10 x speed-ups). &amp;nbsp; Sometimes some work has to be done in the code because of the use of shortcuts that works in CPython that aren't actually correct in the Python specification.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;You can download and install PyPy &lt;a href=&quot;http://pypy.org/download.html#installing&quot;&gt;here&lt;/a&gt;. To install it, just place it in your home directory and put a symlink from somewhere to it. &amp;nbsp;Let's run the spearman.py with PyPy and without Python and see the performance difference;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-V2sUwfESY9o/TpPAnMKAIrI/AAAAAAAAAmw/BG9AMmRl20Y/s1600/Screen+shot+2011-10-11+at+1.09.13+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;88&quot; src=&quot;http://2.bp.blogspot.com/-V2sUwfESY9o/TpPAnMKAIrI/AAAAAAAAAmw/BG9AMmRl20Y/s640/Screen+shot+2011-10-11+at+1.09.13+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The difference is about &lt;b&gt;34.77%&lt;/b&gt; faster with PyPy against pure Python &amp;nbsp;considering the input with 190340 on my Macbook. The amazing part is that I didn't change any line of my code! \m/ &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;If you aren't using a C library like numpy then you should check PyPy - it might just make your code run several times faster. They are still porting PyPy to support Numpy since it some C libraries required &amp;nbsp; for running Numpy must be rewritten. &amp;nbsp; You can see some benchmarks of the porting &lt;a href=&quot;http://morepypy.blogspot.com/2011/05/numpy-in-pypy-status-and-roadmap.html&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Although the PyPy team gave us a simple integration with array interfaces that behaves in a numpy-like fashion, &amp;nbsp;for now it has very few functions and only supports double arithmetic.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-4pxqKwpDXUc/TpPDY47etUI/AAAAAAAAAm4/c6kEfpAnxBk/s1600/Screen+shot+2011-10-11+at+1.21.17+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;158&quot; src=&quot;http://1.bp.blogspot.com/-4pxqKwpDXUc/TpPDY47etUI/AAAAAAAAAm4/c6kEfpAnxBk/s640/Screen+shot+2011-10-11+at+1.21.17+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;I strongly recommend you to take a look at PyPy, it shows a great promise for high performance Python with little effort and specially for the scientific community with the support with existing numpy would be a great advance!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;I didn't mention until now by I will write a special post to close this series with High Performance with Python: It is about the module &lt;a href=&quot;http://docs.python.org/library/multiprocessing.html&quot;&gt;multiprocessing&lt;/a&gt; and how you can work with it. I will show some examples and a library called JobLib that wraps it where you can easily use the power of the processors of your machine and do some parallell work.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;See you next time,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Regards,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Marcel Caraciolo&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-2122219196495481541?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Scrapy, Google Scholar and MongoDB</title>
		<link href="http://feedproxy.google.com/~r/PythonInScience/~3/bht_AWsyls4/scrapy-google-scholar-and-mongodb.html"/>
		<id>tag:blogger.com,1999:blog-840127493134277990.post-3904400937279250815</id>
		<updated>2011-10-10T10:08:27+00:00</updated>
		<content type="html">I have been deeply involved in text mining problems lately, If you watched my presentation a EuroScipy this year (http://www.slideshare.net/fccoelho/mining-legal-texts-with-python) you have an idea of some of the things I am up to.

Well part of problem of text mining is to get hold of the text you want to analyze in the first place. For many projects I am involved with, I already have mountains</content>
		<author>
			<name>Flavio Coelho</name>
			<email>noreply@blogger.com</email>
			<uri>http://pyinsci.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Python in Science</title>
			<subtitle type="html">Scientific adventures with Python.</subtitle>
			<link rel="self" href="http://pyinsci.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-840127493134277990</id>
			<updated>2012-01-10T10:44:31+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Presentation at VII Brazilian Symposium of Collaborative Systems (SBSC) about Recommender Systems</title>
		<link href="http://aimotion.blogspot.com/2011/10/presentation-at-vii-brazilian-symposium.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-6310174991084886032</id>
		<updated>2011-10-10T06:32:39+00:00</updated>
		<content type="html">Hi all,&lt;br /&gt;&lt;br /&gt;I am sharing the slides from my keynote at&lt;a href=&quot;http://www.addlabs.uff.br/sbsc_site/index.html&quot;&gt; VII Brazilian Symposium of Collaborative Systems (SBSC) &lt;/a&gt;where I presented my current work at recommender systems focusing in social networks.&lt;br /&gt;&lt;br /&gt;My work&lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/content-recommendation-based-on-data-mining-in-adaptive-social-networks&quot;&gt; &quot;Content Recommendation based on Data Mining in Adaptive Social Networks&quot;&lt;/a&gt; &amp;nbsp;presents how I built the recommender system at the educational social network &lt;a href=&quot;http://atepassar.com/&quot;&gt;At&#233;Passar&lt;/a&gt; and the current results behind it. It is a novel project in brazilian social networks specially because I worked hard at the explanations that come along with each recommendation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div id=&quot;__ss_9630540&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/content-recommendation-based-on-data-mining-in-adaptive-social-networks&quot; target=&quot;_blank&quot; title=&quot;Content Recommendation Based on Data Mining in Adaptive Social Networks&quot;&gt;Content Recommendation Based on Data Mining in Adaptive Social Networks&lt;/a&gt;&lt;/strong&gt;  &lt;br /&gt;&lt;div&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot; target=&quot;_blank&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo&quot; target=&quot;_blank&quot;&gt;Marcel Caraciolo&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Soon I will provide the paper. &amp;nbsp;The special part of this event was the track only for recommender systems! I had the opportunity to meet brazilian researchers and developers interested in this field.&lt;br /&gt;&lt;br /&gt;I hope I will participate again next year! It is a great event for the researchers who miss those events focused on recommender systems.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;&lt;br /&gt;Marcel&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-6310174991084886032?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Cartesian Product for Sets</title>
		<link href="http://metapython.blogspot.com/2011/10/cartesian-product-for-sets.html"/>
		<id>tag:blogger.com,1999:blog-3670533090196500837.post-833370489476097569</id>
		<updated>2011-10-10T06:17:11+00:00</updated>
		<content type="html">(Python 2.x)&lt;br /&gt;&lt;br /&gt;This is a short one - there is a thread on Python-ideas mailing lista bout adding a cartesian product operation for SET types in Python, using the &quot; * &quot; operator for it.&lt;br /&gt;&lt;br /&gt;Such an operation would yield a set where each element would be a tuple with one element from the first set and an elemento f the second set, for all possible combinations.&lt;br /&gt;&lt;br /&gt;Most likely it won't fly as a language modification, since using itertools.product seems both more explicit and more eficient than having a __mul__ operation defined for set * set.&lt;br /&gt;&lt;br /&gt;However, for the few cases on will want a &quot;set&quot; object with a defined cartesian product operation, it is a simple matter, as are simple all thing Python, of adding a __mul__ method to a &quot;set&quot; subclass that calls itertools.product.&lt;br /&gt;&lt;br /&gt;One straightforward way of doing so, one would think, would be to write:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;gt;&amp;gt;&amp;gt; import itertools&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;gt;&amp;gt;&amp;gt; class mset(set):&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;... &amp;nbsp; __mul__ = itertools.product&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, this won't work for an implementation detail in cpython 2: itertools.product is a &quot;built-in&quot; (a.k.a. native code) function. And as such, it won't work as an ordinary instancemethod if put in a class body like above. Python functions addressed in class bodies like this automatically work as methods of the class, available as instance methods - that is, an extra &quot;self&quot; argument is inserted by the inner workings of Python whenever the method is called. Being a native function, the &quot;self&quot; argument won't be inserted by Python - and thus our __mul__ method would require two explicit arguments and would not be fit for acting as a method to be called when the &quot;*&quot; operator is used between our object and another one.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thus, steps in meta-python. All that is needed for the itertools.product method to work as an operator is to wrap it with a &quot;pure-python&quot; function.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One could write&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;def __mul__(self, other):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return itertools.product(self, other)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;but...where is the _fun_ of that? It is so boring &amp;nbsp; it could be written even in Java.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Instead, we define an &quot;instancemethod&quot; decorator, since pythona lready has the &quot;classmethod&quot; and &quot;staticmethod&quot; counterparts for it. And all an &quot;instancemethod&quot; decorator needs to do is to wrap a function call in &quot;pure-python&quot; so that it is promoted to a method by the type metaclass (the default Python mechanism for that):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;import itertools&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;instancemethod = lambda f: (lambda *a, **kw: f(*a, **kw))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;class mset(set):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;nbsp; &amp;nbsp;__mul__ = __rmul__ = instancemethod(itertools.product)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And there it is - it works now.&lt;/div&gt;&lt;div&gt;One can type soemthing like:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;gt;&amp;gt;&amp;gt; a = set(range(5,10))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;gt;&amp;gt;&amp;gt; b = mset(range(5))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;gt;&amp;gt;&amp;gt; a * b&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;lt;itertools.product object at 0xaace10&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&amp;gt;&amp;gt;&amp;gt; set(a*b)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;set([(4, 7), (4, 8), (2, 8), (0, 7), (1, 6), (3, 7), (2, 5), (4, 9), (2, 9), (1, 5), (3, 6), (2, 6), (4, 5), (3, 9), (0, 5), (1, 9), (0, 8), (3, 5), (2, 7), (4, 6), (3, 8), (0, 6), (1, 8), (1, 7), (0, 9)])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3670533090196500837-833370489476097569?l=metapython.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Jo&#227;o Sebasti&#227;o de Oliveira Bueno</name>
			<email>noreply@blogger.com</email>
			<uri>http://metapython.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">metapython</title>
			<subtitle type="html">For small bits of advanced Python</subtitle>
			<link rel="self" href="http://metapython.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-3670533090196500837</id>
			<updated>2012-01-18T21:45:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Death of goroutines under control</title>
		<link href="http://blog.labix.org/2011/10/09/death-of-goroutines-under-control"/>
		<id>http://blog.labix.org/?p=717</id>
		<updated>2011-10-09T19:53:47+00:00</updated>
		<content type="html">&lt;p&gt;Certainly one of the reasons why many people are attracted to the &lt;a href=&quot;http://golang.org&quot;&gt;Go&lt;/a&gt; language is its first-class concurrency aspects. Features like communication channels, lightweight processes (&lt;i&gt;goroutines&lt;/i&gt;), and proper scheduling of these are not only native to the language but are integrated in a tasteful manner.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-717&quot;&gt;&lt;/span&gt;If you stay around listening to community conversations for a few days there&amp;#8217;s a good chance you&amp;#8217;ll hear someone proudly mentioning the tenet:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Do not communicate by sharing memory; instead, share memory by communicating.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;There is a &lt;a href=&quot;http://blog.golang.org/2010/07/share-memory-by-communicating.html&quot;&gt;blog post&lt;/a&gt; on the topic, and also a &lt;a href=&quot;http://golang.org/doc/codewalk/sharemem/&quot;&gt;code walk&lt;/a&gt; covering it.&lt;/p&gt;
&lt;p&gt;That model is very sensible, and being able to approach problems this way makes a significant difference when designing algorithms, but that&amp;#8217;s not exactly news. What I address in this post is an open aspect we have today in Go related to this design: the &lt;i&gt;termination&lt;/i&gt; of background activity.&lt;/p&gt;
&lt;p&gt;As an example, let&amp;#8217;s build a purposefully simplistic goroutine that sends lines across a channel:&lt;/p&gt;
&lt;pre&gt;
type LineReader struct {
        Ch chan string
        r *bufio.Reader
}

func NewLineReader(r io.Reader) *LineReader {
        lr := &amp;#038;LineReader{make(chan string), bufio.NewReader(r)}
        go lr.loop()
        return lr
}
&lt;/pre&gt;
&lt;p&gt;The type has a channel where the client can consume lines from, and an internal buffer&lt;br /&gt;
used to produce the lines efficiently. Then, we have a function that creates an initialized&lt;br /&gt;
reader, fires the reading loop, and returns. Nothing surprising there.&lt;/p&gt;
&lt;p&gt;Now, let&amp;#8217;s look at the loop itself:&lt;/p&gt;
&lt;pre&gt;
func (lr *LineReader) loop() {
        for {
                line, err := lr.r.ReadSlice('\n')
                if err != nil {
                        close(lr.Ch)
                        return
                }
                lr.Ch - string(line)
        }
}
&lt;/pre&gt;
&lt;p&gt;In the loop we'll grab a line from the buffer, close the channel in case of errors and stop, or otherwise send the line to the other side, perhaps blocking while the other side is busy with other activities. Should sound sane and familiar to Go developers.&lt;/p&gt;
&lt;p&gt;There are two details related to the termination of this logic, though: first, the error information is being dropped, and then there's no way to interrupt the procedure from outside in a clean way. The error might be easily logged, of course, but what if we wanted to store it in a database, or send it over the wire, or even handle it taking in account its nature? Stopping cleanly is also a valuable feature in many circumstances, like when one is driving the logic from a test runner.&lt;/p&gt;
&lt;p&gt;I'm not claiming this is something &lt;i&gt;difficult&lt;/i&gt; to do, by any means.  What I'm saying is that there isn't today an &lt;i&gt;idiom&lt;/i&gt; for handling these aspects in a simple and consistent way. Or maybe there wasn't. The &lt;i&gt;tomb&lt;/i&gt; package for Go is an experiment I'm releasing today in an attempt to address this problem.&lt;/p&gt;
&lt;p&gt;The model is simple: a &lt;i&gt;Tomb&lt;/i&gt; tracks whether the goroutine is alive, dying, or dead, and the death reason.&lt;/p&gt;
&lt;p&gt;To understand that model, let's see the concept being applied to the LineReader example. As a first step, creation is tweaked to introduce Tomb support:&lt;/p&gt;
&lt;pre&gt;
type LineReader struct {
        Ch chan string
        r *bufio.Reader
        &lt;span&gt;*tomb.Tomb&lt;/span&gt;
}

func NewLineReader(r io.Reader) *LineReader {
        lr := &amp;#038;LineReader{
                make(chan string),
                bufio.NewReader(r),
                &lt;span&gt;tomb.New(),&lt;/span&gt;
        }
        go lr.loop()
        return lr
}
&lt;/pre&gt;
&lt;p&gt;Looks very similar. Just a new field in the struct and its respective initialization. We've used it as an embedded field just so we can use the Tomb methods directly in the &lt;i&gt;lr&lt;/i&gt; variable.&lt;/p&gt;
&lt;p&gt;Next, the loop function is modified to support tracking of errors and interruptions:&lt;/p&gt;
&lt;pre&gt;
func (lr *LineReader) loop() {
        &lt;span&gt;defer lr.Done()&lt;/span&gt;
        for {
                line, err := lr.r.ReadSlice('\n')
                if err != nil {
                        close(lr.Ch)
                        &lt;span&gt;lr.Fatal(err)&lt;/span&gt;
                        return
                }
                select {
                case lr.Ch - string(line):
                &lt;span&gt;case -lr.Dying:&lt;/span&gt;
                        close(lr.Ch)
                        return
                }
        }
}
&lt;/pre&gt;
&lt;p&gt;Note a few interesting points here: first, &lt;i&gt;Done&lt;/i&gt; is called to track the goroutine termination right before the loop function returns. Then, the previously loose error now goes into the &lt;i&gt;Fatal&lt;/i&gt; Tomb method, flagging the goroutine as dying. Finally, the channel send was tweaked so that it doesn't block in case the goroutine is dying for whatever reason.&lt;/p&gt;
&lt;p&gt;A Tomb has both &lt;i&gt;Dying&lt;/i&gt; and &lt;i&gt;Dead&lt;/i&gt; channels, which are closed when the Tomb state changes accordingly. These channels enable explicit blocking until the state changes, and also to selectively unblock select statements in those cases, as done above.&lt;/p&gt;
&lt;p&gt;With the loop modified as above, a Stop method can trivially be introduced to request the clean termination of the goroutine synchronously from outside:&lt;/p&gt;
&lt;pre&gt;
func (lr *LineReader) Stop() os.Error {
        &lt;span&gt;lr.Fatal(tomb.Stop)&lt;/span&gt;
        return &lt;span&gt;lr.Wait()&lt;/span&gt;
}
&lt;/pre&gt;
&lt;p&gt;In this case the &lt;i&gt;Fatal&lt;/i&gt; method will put the goroutine in a dying state from outside, and &lt;i&gt;Wait&lt;/i&gt; will block until the goroutine terminates itself and notifies via the &lt;i&gt;Done&lt;/i&gt; method as seen before. This procedure behaves correctly even if the goroutine was already dead or in a dying state due to internal errors, because only the first call to Fatal with an actual error is recorded as the cause for the goroutine death. The &lt;i&gt;tomb.Stop&lt;/i&gt; value is used as a reason when terminating cleanly without an actual error, and it causes Wait to return nil once the goroutine terminates, flagging a clean stop per common Go idioms.&lt;/p&gt;
&lt;p&gt;(&lt;b&gt;UPDATE:&lt;/b&gt; there was &lt;a href=&quot;http://groups.google.com/group/golang-nuts/browse_thread/thread/383f7cabbb174460&quot;&gt;a minor simplification&lt;/a&gt; in the API since this post was originally written, and the paragraph above was adapted to cover the new API)&lt;/p&gt;
&lt;p&gt;This is pretty much all that there is to it. When I started developing in Go I wondered if coming up with a good convention for this sort of problem would require more support from the language, such as some kind of goroutine state tracking in a similar way to what &lt;a href=&quot;http://www.erlang.org/doc/reference_manual/processes.html&quot;&gt;Erlang does&lt;/a&gt; with its lightweight processes, but it turns out this is mostly a matter of organizing the workflow with existing building blocks.&lt;/p&gt;
&lt;p&gt;The tomb package and its Tomb type are a tangible representation of a good convention for goroutine termination, with familiar method names inspired in existing idioms. If you want to make use of it, goinstall the package with:&lt;/p&gt;
&lt;pre&gt;
$ goinstall launchpad.net/tomb
&lt;/pre&gt;
&lt;p&gt;The API documentation with details is available at:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href=&quot;http://goneat.org/lp/tomb&quot;&gt;http://goneat.org/lp/tomb&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Have fun!&lt;/p&gt;</content>
		<author>
			<name>Gustavo Niemeyer</name>
			<uri>http://blog.labix.org</uri>
		</author>
		<source>
			<title type="html">Labix Blog</title>
			<subtitle type="html">by Gustavo Niemeyer</subtitle>
			<link rel="self" href="http://blog.labix.org/feed"/>
			<id>http://blog.labix.org/feed</id>
			<updated>2012-01-16T04:44:38+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">PythonBrasil[7] = Excellent!</title>
		<link href="http://blog.gustavobarbieri.com.br/2011/10/06/pythonbrasil7-excellent/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pythonbrasil7-excellent"/>
		<id>http://blog.gustavobarbieri.com.br/?p=266</id>
		<updated>2011-10-06T01:25:11+00:00</updated>
		<content type="html">&lt;p&gt;Last week from 29-Sep to 01-Oct we had the amazing 7th PythonBrasil conference, for the first time in S&#227;o Paulo.&lt;/p&gt;
&lt;p&gt;Since I&amp;#8217;ve start to use Python in 2002 I loved the language, but after getting introduced to the PythonBrasil community in 2004 I&amp;#8217;ve boosted my development skills, got some friends and even my first job (INdT-Recife) was a kind recommendation from Osvaldo Santana in 2005.&lt;/p&gt;
&lt;p&gt;By 2005 we had the 1st PythonBrasil Conference, then called PyConBrasil, here in Campinas with the help of UNICAMP and our amazing non-stop contributor Rodrigo Senra. It was very cool, I even presented a talk there&amp;#8230; and it motivated me to go to following conferences in 2006 and 2007 as well.&lt;/p&gt;
&lt;p&gt;However if starting to work at INdT reduced my spare time since late 2006, after ProFUSION was born in 2008 I had no time to participate in the lists or even go to conferences. What a shame!&lt;/p&gt;
&lt;p&gt;I couldn&amp;#8217;t see how shameful it was until I did this PythonBrasil in 2011. I&amp;#8217; m yet to see a conference with so kind people. People still remembered me and I was&#160;ashamed when I couldn&amp;#8217;t remind their names&amp;#8230; although they did remember mine (&lt;em&gt;NOTE TO CONFERENCE: bigger names next year!&lt;/em&gt;) Some would even let me know they still use &lt;a href=&quot;http://code.google.com/p/eagle-py/&quot;&gt;Eagle-Py&lt;/a&gt;, something that I already forgot about. And people I had closer contact before were willing to talk as if we had met last week. Amazing.&lt;/p&gt;
&lt;p&gt;During these talks I&amp;#8217;ve catch up with Rodrigo Senra, Luciano, Osvaldo, Erico, Marco Andr&#233;, Sidnei, Fernando and many more I couldn&amp;#8217;t remember. However one of the talks was very special: talked to Gustavo Niemeyer about &lt;strong&gt;Go programming language&lt;/strong&gt;. That&amp;#8217;s right, people were so kind and open we had a keynote about Go, and we talked a lot afterwards without problems! &lt;img src=&quot;http://blog.gustavobarbieri.com.br/wp-includes/images/smilies/icon_razz.gif&quot; alt=&quot;:-P&quot; class=&quot;wp-smiley&quot; /&gt;  &#160;Gustavo showed me some nice details about the language and my mind is now burning! I must do Enlightenment Foundation Libraries (EFL) + Go = EGO, a perfect GUI tool.&lt;/p&gt;
&lt;p&gt;But I was of use&amp;#8230; not just a leecher! I went there to present 3 talks (slides in Portuguese!):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://talks.gustavobarbieri.com.br/pyconbrasil7/ProFUSION_pycon-bindings.pdf&quot;&gt;Tudo que voc&#234; sempre quis saber sobre Bindings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://talks.gustavobarbieri.com.br/pyconbrasil7/ProFUSION_pycon-embedded.pdf&quot;&gt;Python em sistemas embarcados: Sim ou N&#227;o?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://talks.gustavobarbieri.com.br/pyconbrasil7/ProFUSION_pycon-canvas2D.pdf&quot;&gt;Canvas-2D extremamente r&#225;pido usando EFL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Last but not least, I&amp;#8217;d like to thank everyone&#160;that did this amazing conference possible!&lt;/p&gt;</content>
		<author>
			<name>Gustavo Barbieri</name>
			<uri>http://blog.gustavobarbieri.com.br</uri>
		</author>
		<source>
			<title type="html">Gustavo Sverzut Barbieri</title>
			<subtitle type="html">Computer Hacker and Entrepreneur</subtitle>
			<link rel="self" href="http://blog.gustavobarbieri.com.br/feed/atom/"/>
			<id>http://blog.gustavobarbieri.com.br/feed/atom/</id>
			<updated>2012-02-04T17:44:24+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Introducing EWS to help EFL on FB and PS3</title>
		<link href="http://blog.gustavobarbieri.com.br/2011/10/05/introducing-ews-to-help-efl-on-fb-and-ps3/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=introducing-ews-to-help-efl-on-fb-and-ps3"/>
		<id>http://blog.gustavobarbieri.com.br/?p=264</id>
		<updated>2011-10-06T00:51:00+00:00</updated>
		<content type="html">&lt;p&gt;Lots of systems do not support multi-window on their own, consider standard Linux Frame Buffer (FB) or the PlayStation3. This makes it cumbersome as you&amp;#8217;re restricted to a single window, &#160;likely you&amp;#8217;ll have to rewrite your apps to behave well in this scenario.&lt;/p&gt;
&lt;p&gt;Traditionally this problem is worked around by toolkits like Qt that provides &lt;a href=&quot;http://doc.qt.nokia.com/4.7/qt-embedded-architecture.html&quot;&gt;QWS&lt;/a&gt;, a great help for developers. Considering QWS I decided to help our PS3 friends with something similar which I shamelessly called &lt;strong&gt;EWS&lt;/strong&gt;&#160;(Ecore + Evas Single Process Windowing System).&lt;/p&gt;
&lt;p&gt;Ecore and Evas already made 99% of this work: they abstract rendering, abstract windowing and so on. There is even support for &amp;#8220;inlined windows&amp;#8221; in Elementary, these are rendered to buffers that are visible inside other windows. Actually the first version of EWS was a 30min hack in Elementary called &amp;#8220;eland&amp;#8221; (making fun of wayland). But as not everyone would use Elementary it was better to move it lower in the stack: Ecore_Evas.&lt;/p&gt;
&lt;p&gt;Ecore_Evas is a glue layer between Ecore and Evas that takes care to configure actual windows and setup Evas on them, to capture events from various sources and feed them to canvas, etc. If you cope with its API you&amp;#8217;ll work with most EFL libraries and applications out-of-the-box.&lt;/p&gt;
&lt;p&gt;Ecore_Evas_EWS was created as a new engine that builds on top of others. It will use a backing-store engine like X11, FB, DirectFB, WinCE or PS3 to create an internal Ecore_Evas. Every new window created with &lt;strong&gt;ecore_evas_ews_new()&lt;/strong&gt; is rendered to an Evas using the buffer engine and its pixels end as the image source in the backing-store engine, displaying it. This is very similar to existing ecore_evas_buffer feature &lt;strong&gt;ecore_evas_object_image_new()&lt;/strong&gt;, however it will handle more things automatically.&lt;/p&gt;
&lt;p&gt;Among the new features are events to allow window management. Things like &amp;#8220;window created&amp;#8221;, &amp;#8220;window moved&amp;#8221; and &amp;#8220;window resized&amp;#8221; are placed in the main loop for interested peers, they may handle these and decorate the windows, offer window management (close, maximize, &amp;#8230;). To exemplify that I&amp;#8217;ve added support in Elementary with basic controls such as move, maximize, restore and close. Unfortunately it looks &#160;ugly like hell and then I&amp;#8217;m not posting any screenshot or screencast &lt;img src=&quot;http://blog.gustavobarbieri.com.br/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;-)&quot; class=&quot;wp-smiley&quot; /&gt;  Let&amp;#8217;s wait for people doing themes to make a great work.&lt;/p&gt;
&lt;p&gt;The work is far from complete, bugs remain, &#160;optimizations could be applied for OpenGL&amp;#8230; if you consider the rules &amp;#8220;20/80&amp;#8243;, 80% of the code was written in 20% of the time, now we&amp;#8217;ll take 80% to make it work for sure &lt;img src=&quot;http://blog.gustavobarbieri.com.br/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:-D&quot; class=&quot;wp-smiley&quot; /&gt;  &#160;But it&amp;#8217;s not bad considering it took me 2 days,&#160;&#160;1421 lines in ecore_evas_ews.c, 543 in elu_ews_wm.c and 317 in ews.edc&amp;#8230;&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s why I keep saying that EFL is an amazing technology to build products. It runs fast, it&amp;#8217;s slick and it does not get in the way. Give it a try! &lt;img src=&quot;http://blog.gustavobarbieri.com.br/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;</content>
		<author>
			<name>Gustavo Barbieri</name>
			<uri>http://blog.gustavobarbieri.com.br</uri>
		</author>
		<source>
			<title type="html">Gustavo Sverzut Barbieri</title>
			<subtitle type="html">Computer Hacker and Entrepreneur</subtitle>
			<link rel="self" href="http://blog.gustavobarbieri.com.br/feed/atom/"/>
			<id>http://blog.gustavobarbieri.com.br/feed/atom/</id>
			<updated>2012-02-04T17:44:24+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Problema com hashlib + md5 (Python 2.7)</title>
		<link href="http://feedproxy.google.com/~r/pyAvelino/~3/KNfjKVdF1bg/"/>
		<id>http://avelino.us/2011/10/04/problema-com-hashlib-md5-python-27/</id>
		<updated>2011-10-04T20:04:46+00:00</updated>
		<content type="html">&lt;p&gt;Estava com o seguinte problema &quot;Error: No module named _md5&quot;, primeiramente pensei que foce problema de de compila&#231;&#227;o do Python, mas olhando o problema proximo achei alguns artigo falando desse problema e um deles estava no &lt;a href=&quot;http://bugs.python.org/msg109485&quot;&gt;bug.python.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A solu&#231;&#227;o que cheguei foi, criar uma lib chamada &quot;_md5&quot;, criei um arquivo chamado &quot;_md5py&quot;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class _md5:
    def __init__():
        import md5
        return md5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lendo as documenta&#231;&#227;o vi que a lib &quot;hashlib._md5&quot; foi deprecada pois a md5 ficou no lugar. Espero que ajude outras pessoas que esta com esse problema.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/j1VZeY-FuVJ5h87DUX-UeT5hiTY/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/j1VZeY-FuVJ5h87DUX-UeT5hiTY/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/j1VZeY-FuVJ5h87DUX-UeT5hiTY/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/j1VZeY-FuVJ5h87DUX-UeT5hiTY/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/pyAvelino/~4/KNfjKVdF1bg&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>avelino</name>
			<email>avelino@chierry.com</email>
			<uri>http://avelino.us/</uri>
		</author>
		<source>
			<title type="html">avelino.us's Weblog</title>
			<subtitle type="html">Latest entries on Weblog</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/pyavelino"/>
			<id>tag:blogger.com,1999:blog-2742862280909730250</id>
			<updated>2011-12-22T15:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Carta &#224; Comunidade Python</title>
		<link href="http://associacao.python.org.br/associacao/imprensa/noticias/carta-a-comunidade-python"/>
		<id>http://associacao.python.org.br/associacao/imprensa/noticias/carta-a-comunidade-python</id>
		<updated>2011-10-04T19:52:19+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225; amigos Pythonistas,&lt;/p&gt;
&lt;p&gt;Perdoem-nos pelo longo email mas nessa semana que passou muita coisa aconteceu na nossa comunidade.&lt;/p&gt;
&lt;p&gt;Como muitos devem saber a 7&#170; edi&#231;&#227;o da PythonBrasil aconteceu entre os dias 29/09 e 01/10 em S&#227;o Paulo e foi sensacional.&lt;/p&gt;
&lt;p&gt;Al&#233;m de ter sido sensacional tivemos uma assembl&#233;ia para eleger a nova diretoria da Associa&#231;&#227;o Python Brasil e come&#231;amos a discutir sobre a pr&#243;xima edi&#231;&#227;o da PythonBrasil. Esse email trata desses dois assuntos.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;a-assembleia&quot;&gt;
&lt;h3&gt;A Assembl&#233;ia&lt;/h3&gt;
&lt;p&gt;Durante a assembl&#233;ia elegemos uma nova diretoria e alguns novos conselheiros. Os detalhes ser&#227;o colocados no site da associa&#231;&#227;o t&#227;o logo os respons&#225;veis pela ata da assembl&#233;ia me enviem o material. Na diretoria ficamos com o seguinte quadro (tal como especificado em nosso estatuto):&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Presidente: Osvaldo Santana&lt;/li&gt;
&lt;li&gt;Vice-Presidente: Bruno Rocha&lt;/li&gt;
&lt;li&gt;Diretor Financeiro: Ramiro Luz&lt;/li&gt;
&lt;li&gt;Diretor de Marketing: &#193;lvaro Justen&lt;/li&gt;
&lt;li&gt;Diretor de Assuntos Acad&#234;micos: T&#226;nia Andrea&lt;/li&gt;
&lt;li&gt;Diretor de A&#231;&#245;es Online: Rud&#225; Porto&lt;/li&gt;
&lt;li&gt;Diretor Administrativo: Jo&#227;o Sebasti&#227;o&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estava claro para todas as pessoas que participam da associa&#231;&#227;o que algumas coisas precisariam ser mudadas, outras melhoradas e algumas delas j&#225; n&#227;o eram mais necess&#225;rias. Depois de coletar algumas informa&#231;&#245;es e discutir com outras pessoas da comunidade eu acho que chegamos &#224; um bom plano. Tentarei detalhar melhor os nossos planos na forma de uma F.A.Q.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como ficar&#225; a Associa&#231;&#227;o Python Brasil?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nesta &lt;em&gt;primeira fase&lt;/em&gt; da nossa gest&#227;o vamos nos organizar para nos tornar &amp;quot;o bra&#231;o institucional da comunidade Python.&amp;quot;&lt;/p&gt;
&lt;p&gt;Estaremos dispon&#237;veis para auxiliar qualquer iniciativa da comunidade sempre que esta precisar de algum tipo de apoio institucional.&lt;/p&gt;
&lt;p&gt;&#201; importante saber que a associa&#231;&#227;o est&#225; &#224; servi&#231;o da comunidade e n&#227;o o contr&#225;rio. A comunidade existe sem a associa&#231;&#227;o, mas a associa&#231;&#227;o n&#227;o existe sem a comunidade.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voc&#234; enfatizou &amp;quot;primeira fase&amp;quot;, haver&#225; uma segunda?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#201; claro! E eu imagino que nessa segunda fase a associa&#231;&#227;o deixe de ser apenas um &amp;quot;bra&#231;o institucional&amp;quot; e comece a fomentar as iniciativas da comunidade tal como descrito no nosso estatuto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E porque voc&#234;s j&#225; n&#227;o fazem isso desde a primeira fase?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Porque queremos tratar os problemas um a um determinando objetivos e buscando atingir esses objetivos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quais as a&#231;&#245;es pr&#225;ticas que essa nova diretoria tomar&#225; para implantar essa vis&#227;o?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Algumas mudan&#231;as j&#225; est&#227;o em andamento, outras ser&#227;o feitas e algumas delas ser&#227;o fruto de consultas &#224; comunidade:&lt;/p&gt;
&lt;ol class=&quot;arabic simple&quot;&gt;
&lt;li&gt;Buscaremos manter a comunica&#231;&#227;o mais aberta e organizada.&lt;/li&gt;
&lt;li&gt;O funcionamento da diretoria ser&#225; simplificado.&lt;/li&gt;
&lt;li&gt;Algumas mudan&#231;as de ordem pr&#225;tica ser&#227;o feitas no estatuto (ex. endere&#231;o) e outras ser&#227;o propostas com o objetivo de simplificar alguns processos.&lt;/li&gt;
&lt;li&gt;Distribuir responsabilidades com mais volunt&#225;rios e deixar claro que a APyB tem a fun&#231;&#227;o de apoiar as a&#231;&#245;es da comunidade e n&#227;o a de determinar quais ser&#227;o essas a&#231;&#245;es.&lt;/li&gt;
&lt;li&gt;Apoiar a organiza&#231;&#227;o da PythonBrasil.&lt;/li&gt;
&lt;li&gt;Coordenar um &amp;quot;Python Roadshow&amp;quot; com eventos regulares organizados pelos grupos regionais.&lt;/li&gt;
&lt;li&gt;Iniciar o processo de registro de marcas como Python, Django, Web2Py, Zope, Plone, etc. afim de proteger o uso das mesmas no Brasil.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Como ser&#225; a comunica&#231;&#227;o?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vamos reativar alguns canais que estavam em desuso, reorganizar as listas de email para estimular as discuss&#245;es em f&#243;rums mais abrangentes e vamos trabalhar para passar a mensagem de que a APyB est&#225; dispon&#237;vel para ajudar a comunidade.&lt;/p&gt;
&lt;ol class=&quot;arabic simple&quot;&gt;
&lt;li&gt;Reativar os canais de bate-papo da associa&#231;&#227;o e manter reuni&#245;es regulares.&lt;/li&gt;
&lt;li&gt;Mover as discuss&#245;es sobre iniciativas e projetos nas listas das comunidades vinculadas &#224; tecnologias Python e usar a lista apyb-associados apenas para assuntos espec&#237;ficos da associa&#231;&#227;o (anuidades, valores, estatuto, etc).&lt;/li&gt;
&lt;li&gt;&amp;quot;Encolher&amp;quot; a lista apyb-condir onde ficam os conselheiros e diretores e us&#225;-la apenas para troca de dados mais sigilosos (ex. contas em banco, CPFs, endere&#231;os, telefones, etc).&lt;/li&gt;
&lt;li&gt;Melhorar o site da associa&#231;&#227;o e corrigir alguns problemas (ex. renova&#231;&#227;o da associa&#231;&#227;o, publica&#231;&#227;o de conte&#250;dos e not&#237;cias, etc).&lt;/li&gt;
&lt;li&gt;Colocar os c&#243;digos fontes dos projetos desenvolvidos pela associa&#231;&#227;o (e para a associa&#231;&#227;o) em reposit&#243;rios abertos para colabora&#231;&#227;o (ex. github.com, bitbucket.org, etc).&lt;/li&gt;
&lt;li&gt;Cria&#231;&#227;o de um ponto de contato &#250;nico e aberto para que as pessoas possam falar com a associa&#231;&#227;o e fazer solicita&#231;&#245;es. Esse ponto de contato provavelmente ser&#225; um sistema de controle de chamados do tipo &amp;quot;&lt;em&gt;Issue Tracker&lt;/em&gt;&amp;quot; onde todos poder&#227;o acompanhar o andamento das suas demandas.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Como eu disse algumas dessas medidas j&#225; est&#227;o em andamento. &#201; o caso do nosso reposit&#243;rio p&#250;blico de c&#243;digo que fica no Github (&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/pythonbrasil/&quot;&gt;https://github.com/pythonbrasil/&lt;/a&gt;) e que permite que qualquer um possa colaborar (&#233; s&#243; fazer 'fork' e depois um 'pull request' no projeto).&lt;/p&gt;
&lt;p&gt;Teremos outras: cria&#231;&#227;o de grupos de trabalho no site da associa&#231;&#227;o, issue tracker, defini&#231;&#227;o de uma pol&#237;tica de acesso mais aberta para os sites da associa&#231;&#227;o e para aqueles sites da comunidade que est&#227;o na infraestrutura da associa&#231;&#227;o, melhoria no visual dos sites (procuramos volunt&#225;rios!), e muitas outras coisas que anunciaremos em breve.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O que muda no funcionamento da diretoria?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Elegemos a nossa diretoria tal como rege o estatuto mas, nessa fase inicial, vamos experimentar uma nova distribui&#231;&#227;o de responsabilidades:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Presidente/Vice/Financeiro - respons&#225;veis por todas as quest&#245;es &amp;quot;burocr&#225;ticas&amp;quot; da associa&#231;&#227;o (estatuto, financeiro, ...).&lt;/li&gt;
&lt;li&gt;Marketing/Assuntos Acad&#234;micos - relacionamento com a comunidade e apoio &#224; organiza&#231;&#227;o da PythonBrasil.&lt;/li&gt;
&lt;li&gt;Online/Administrativo - zelar pela nossa infraestrutura de sites.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se essa organiza&#231;&#227;o funcionar bem e for necess&#225;rio poderemos sugerir essa nova estrutura no estatuto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Que mudan&#231;as ser&#227;o feitas no estatuto?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Antes de abordar esse assunto &#233; importante salientar que o estatuto s&#243; pode ser modificado por uma assembl&#233;ia. O que faremos ser&#227;o apenas propostas de mudan&#231;as.&lt;/p&gt;
&lt;p&gt;A primeira delas ser&#225; a mudan&#231;a da sede da associa&#231;&#227;o. Atualmente a associa&#231;&#227;o est&#225; registrada no endere&#231;o da m&#227;e de nosso saudoso amigo Dorn&#233;les Trem&#233;a e isso cria algumas dificuldades na gest&#227;o da associa&#231;&#227;o (ex. conta em banco na mesma cidade, contadora na mesma cidade, correspond&#234;ncia, etc).&lt;/p&gt;
&lt;p&gt;Seria interessante, tamb&#233;m, remover a necessidade de que duas pessoas assinem as opera&#231;&#245;es financeiras da associa&#231;&#227;o. Aparentemente essa &#233; uma das raz&#245;es que nos impede de termos um cart&#227;o de cr&#233;dito internacional para efetuarmos pagamentos de hostings, etc.&lt;/p&gt;
&lt;p&gt;A outra &#233; a proposta de mudar a organiza&#231;&#227;o da diretoria para diminuir o n&#250;mero de 'postos', diminuir o tamanho dos conselhos ao m&#237;nimo exigido por lei e estudar a possibilidade de se fazer assembl&#233;ias online. O objetivo &#233; tornar as coisas mais simples e &#225;geis do que s&#227;o hoje.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como pretendem distribuir as atividades da associa&#231;&#227;o?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lan&#231;aremos chamadas nas listas da comunidade &#224; procura de volunt&#225;rios que estejam dispostos a colaborar com documenta&#231;&#227;o das atividades, manuten&#231;&#227;o dos sites, organiza&#231;&#227;o dos eventos, etc.&lt;/p&gt;
&lt;p&gt;Comunicaremos os problemas e dificuldades da associa&#231;&#227;o sempre que eles surgirem para que mais pessoas possam nos ajudar.&lt;/p&gt;
&lt;p&gt;E, por &#250;ltimo, se voc&#234; tem uma id&#233;ia legal, quer coloc&#225;-la no ar e precisa de ajuda para um dom&#237;nio, hospedagem ou de acesso especial a um de nossos sites &#233; s&#243; falar com a gente. &#201; pra isso que a associa&#231;&#227;o existe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como/Quando/Onde ser&#225; a PythonBrasil[8]?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;N&#227;o sabemos ainda. Mais detalhes logo abaixo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Roadshow? Como assim?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O Roadshow seria uma esp&#233;cie de &amp;quot;Circuito Python&amp;quot; que percorreria todas as cidades que j&#225; possuem um grupo organizado de usu&#225;rios Python promovendo a&#231;&#245;es e encontros voltados &#224; apresentar Python e tecnologias relacionadas ao p&#250;blico local.&lt;/p&gt;
&lt;p&gt;No in&#237;cio do ano seriam estabelecidas as datas em que cada cidade organizaria o seu evento e, com esse planejamento pr&#233;vio, poder&#237;amos apoiar cada uma dessas a&#231;&#245;es de maneira mais ordenada fornecendo aux&#237;lio para levar palestrantes convidados, material de divulga&#231;&#227;o, brindes para sorteio, dentre outros.&lt;/p&gt;
&lt;p&gt;Esses eventos tamb&#233;m podem ser usados para divulgar a PythonBrasil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Porque dever&#237;amos registrar essas marcas?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para proteg&#234;-las de outras pessoas que possam querer fazer isso e usar em benef&#237;cio pr&#243;prio.&lt;/p&gt;
&lt;p&gt;Buscar&#237;amos apoio da PSF (Python Software Foundation), Plone Foundation, Zope Corp., etc para viabilizar financeiramente esses registros.&lt;/p&gt;
&lt;p&gt;Esse registro n&#227;o poderia ser usado para impedir manifesta&#231;&#245;es da comunidade ou at&#233; mesmo uso comercial leg&#237;timo dessas marcas (ex. produ&#231;&#227;o e venda de camisetas de Python em alguma loja).&lt;/p&gt;
&lt;p&gt;Se o registro dessas marcas n&#227;o pertencer &#224; Associa&#231;&#227;o Python Brasil outra empresa pode faz&#234;-lo e impedir at&#233; mesmo a nossa comunidade de usar tais marcas. Um caso similar &#224; esse aconteceu no Brasil com a marca OpenOffice que foi registrada por uma empresa que impedia o uso do nome. Resultado: o OpenOffice teve que usar o nome BROffice no Brasil.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;pythonbrasil&quot;&gt;
&lt;h3&gt;PythonBrasil&lt;/h3&gt;
&lt;p&gt;O evento desse ano foi sensacional. A PythonBrasil vem ficando melhor a cada ano que passa e, consequentemente, a pr&#243;xima sempre &#233; a mais dif&#237;cil de fazer.&lt;/p&gt;
&lt;p&gt;Mas antes de falar da pr&#243;xima &#233; necess&#225;rio parabenizar o &#201;rico Andrei e a Karyn Nassif. Eles t&#234;m sido respons&#225;veis pela organiza&#231;&#227;o direta ou indireta de quase todas as PythonBrasil que tivemos nos &#250;ltimos anos.&lt;/p&gt;
&lt;p&gt;Esse ano eles anunciaram a &amp;quot;aposentadoria&amp;quot; pois v&#227;o se dedicar &#224; um projeto mais importante: eles est&#227;o &amp;quot;gr&#225;vidos&amp;quot;. Desejo sorte ao casal.&lt;/p&gt;
&lt;p&gt;Com a &amp;quot;aposentadoria&amp;quot; dessa dupla a organiza&#231;&#227;o da pr&#243;xima PythonBrasil ser&#225; ainda mais desafiadora. Mas tenho certeza que com a comunidade organizada e com o apoio institucional da Associa&#231;&#227;o Python Brasil faremos ainda melhor no ano que vem.&lt;/p&gt;
&lt;blockquote&gt;
Data: 27 a 29 de setembro de 2012 (a confirmar)&lt;/blockquote&gt;
&lt;p&gt;Precisamos confirmar essa data com os organizadores da PyConAr pois temos um acordo que nos permite otimizar a utiliza&#231;&#227;o dos recursos necess&#225;rios para trazer os palestrantes internacionais do evento.&lt;/p&gt;
&lt;p&gt;O local n&#227;o foi definido. O projeto &#233; que a PythonBrasil seria sempre em S&#227;o Paulo mas at&#233; o momento ningu&#233;m se ofereceu para assumir o papel de BigKahuna (organizador do evento) em S&#227;o Paulo e n&#227;o havendo propostas para essa cidade reabriremos a elei&#231;&#227;o da sede para as pr&#243;ximas 2 edi&#231;&#245;es do evento (fazer o evento por 2 anos consecutivos na mesma cidade gera vantagens operacionais e financeiras).&lt;/p&gt;
&lt;p&gt;Algumas propostas informais j&#225; surgiram: Rio de Janeiro, Bras&#237;lia e Fortaleza. Agora esperamos receber as propostas oficiais para escolher a cidade.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Encerramento da submiss&#227;o de propostas: 20 de novembro de 2011.&lt;/p&gt;
&lt;p&gt;Data do an&#250;ncio do resultado: 27 de novembro de 2011.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Um comit&#234; formado por diretoria, conselho deliberativo e por ex-bigkahunas (sendo esses &#250;ltimos os mais importantes) escolher&#225; o local para evitar alguma cidade seja escolhida apenas porque tem maioria num&#233;rica na vota&#231;&#227;o.&lt;/p&gt;
&lt;p&gt;N&#227;o existe um modelo formal para a proposta, mas ela deve apresentar itens como:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Quem ser&#225; o BigKahuna, como ele trabalha, se tem disponibilidade de tempo, etc.&lt;/li&gt;
&lt;li&gt;Local do evento (custo, endere&#231;o, estrutura, proximidade de aeroportos e rodovi&#225;rias).&lt;/li&gt;
&lt;li&gt;Hospedagem (informa&#231;&#245;es gerais sobre hospedagem na cidade, faixas de pre&#231;os, categorias de hot&#233;is, proximidade do local do evento e sugest&#245;es).&lt;/li&gt;
&lt;li&gt;Deslocamento (sistema de transporte p&#250;blico, pre&#231;os de t&#225;xis, etc).&lt;/li&gt;
&lt;li&gt;Alimenta&#231;&#227;o (ao redor do local do evento principalmente e no geral).&lt;/li&gt;
&lt;li&gt;Turismo (local para os participantes irem durante a noite, por exemplo).&lt;/li&gt;
&lt;li&gt;Empresas locais interessadas em apoiar ou patrocinar o evento.&lt;/li&gt;
&lt;li&gt;A proposta ganha pontos positivos se vier acompanhada de or&#231;amentos e/ou fornecedores de: sistemas de audio/video, grava&#231;&#227;o/edi&#231;&#227;o/stream das palestras, fot&#243;grafo, tradu&#231;&#227;o simult&#226;nea, coffee-break, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O item mais importante na escolha &#233; o BigKahuna e sua disponibilidade de tempo, envolvimento com a comunidade, capacidade de aglutinar colaboradores, capacidade de execu&#231;&#227;o, experi&#234;ncias anteriores, etc. Os outros crit&#233;rios s&#227;o:&lt;/p&gt;
&lt;ol class=&quot;arabic simple&quot;&gt;
&lt;li&gt;Infraestrutura do local do evento.&lt;/li&gt;
&lt;li&gt;Acesso &#224; cidade (cidades que s&#227;o hubs aerovi&#225;rios possuem passagens mais baratas).&lt;/li&gt;
&lt;li&gt;Infraestrutura da cidade.&lt;/li&gt;
&lt;li&gt;Simpatia de patrocinadores/apoiadores (alguns patrocinadores preferem eventos em suas cidades)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tenha em mente que os interessados precisam &amp;quot;vender&amp;quot; a sua cidade para o comit&#234; avaliador.&lt;/p&gt;
&lt;p&gt;Mais informa&#231;&#245;es no Manual do BigKahuna (&lt;a class=&quot;reference external&quot; href=&quot;http://associacao.python.org.br/associacao/manual-do-big-kahuna&quot;&gt;http://associacao.python.org.br/associacao/manual-do-big-kahuna&lt;/a&gt;). Ele est&#225; desatualizado mas trabalharemos nele nas pr&#243;ximas semanas.&lt;/p&gt;
&lt;/div&gt;</content>
		<author>
			<name>Noticias da APyB</name>
			<uri>http://associacao.python.org.br</uri>
		</author>
		<source>
			<title type="html">Not&#237;cias</title>
			<subtitle type="html">Not&#237;cias sobre a Associa&#231;&#227;o.</subtitle>
			<link rel="self" href="http://associacao.python.org.br/noticias/RSS"/>
			<id>http://associacao.python.org.br/noticias/RSS</id>
			<updated>2012-02-04T18:44:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">PUG-PE Summer of Code</title>
		<link href="http://pugpe.wordpress.com/2011/10/04/pug-pe-summer-of-code/"/>
		<id>http://pugpe.wordpress.com/?p=767</id>
		<updated>2011-10-04T14:08:28+00:00</updated>
		<content type="html">&lt;p&gt;Venham participar do &lt;strong&gt;I PUG-PE Summer of Code!&lt;/strong&gt;&#160; O primeiro est&#225; marcado e ser&#225; dia 15 de outubro pela manh&#227;!&lt;/p&gt;
&lt;p&gt;Para se inscrever ,&#160; cadastre seu nome no formul&#225;rio &lt;a href=&quot;https://docs.google.com/spreadsheet/viewform?formkey=dDczUC1MWkZBdVN3cGZRMGJyNzNaLWc6MQ&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para mais informa&#231;&#245;es falar com &lt;a href=&quot;http://twitter.com/frenetic_br&quot;&gt;@frenetic_br&lt;/a&gt; ou @&lt;a href=&quot;http://twitter.com/brunnogomes&quot;&gt;brunnogomes &lt;/a&gt;.&lt;/p&gt;
&lt;div id=&quot;attachment_768&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://pugpe.files.wordpress.com/2011/10/277026_262187743821075_1000358269_n.jpg&quot;&gt;&lt;img class=&quot;size-full wp-image-768&quot; title=&quot;PUG-PE Summer of Code&quot; src=&quot;http://pugpe.files.wordpress.com/2011/10/277026_262187743821075_1000358269_n.jpg?w=468&quot; alt=&quot;PUG-PE Summer of Code&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;PUG-PE Summer of Code&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;PUG-PE SUMMER OF CODE (com caf&#233;, e cerveja)!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O que &#233; isso?&lt;/strong&gt;&lt;br /&gt;
O Google tem seu summer of code, uma &amp;#8220;maratona&amp;#8221; de programa&#231;&#227;o no ver&#227;o do hemisf&#233;rio norte do blogo terrestre, e o PUG-PE ter&#225; sua maratona de programa&#231;&#227;o em, wait for it, PERNAMBUCO!&lt;br /&gt;
Claro que aqui o ver&#227;o &#233; o ano todo, ent&#227;o a &amp;#8220;maratona&amp;#8221; pode demorar o tempo que for preciso &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt;&lt;br /&gt;
O nosso objetivo &#233; envolver o pessoal do grupo de Python em um projeto para o pr&#243;prio grupo, que &#233; o portal pug-pe em python, o qual estamos precisando MUITO, ao passo em que todos os envolvidos podem aprender Django, trabalho em equipe, Scrum, Xp, e, principalmente, go horse!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Por que participar?&lt;/strong&gt;&lt;br /&gt;
&#201; mais f&#225;cil aprender fazendo do que aprender lendo!&lt;br /&gt;
&#201; uma &#243;tima estar l&#225; para aprender coisas novas, para ensinar o que voc&#234; sabe, e para se divertir enquanto escreve lindos c&#243;digos!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ONDE e QUANDO?&lt;/strong&gt;&lt;br /&gt;
Faremos ciclos de desenvolvimento durante os meses. 1, 2 ou 3 dias por m&#234;s, o que for mais f&#225;cil para obtermos participantes e local para uni-los.&lt;br /&gt;
Um ciclo deve durar, o programado at&#233; ent&#227;o, cerca de 1 dia de trabalho. Algo de 8 da manh&#227; at&#233; as 18 horas, parando para almo&#231;ar.&lt;br /&gt;
Claro que n&#227;o &#233; trabalho, &#233; divers&#227;o e aprendizado!&lt;br /&gt;
E ningu&#233;m &#233; obrigado a ficar esse tempo todo. Mas seria bom se ficassem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O que eu preciso saber para participar?&lt;/strong&gt;&lt;br /&gt;
Saber programar e saber Python.&lt;br /&gt;
Utilizaremos Django, mas voc&#234; n&#227;o precisa ser o &amp;#8220;pica das gal&#225;xias&amp;#8221; do Django para participar.&lt;br /&gt;
Mas, se voc&#234; n&#227;o quer chegar nos ciclos zerado de conhecimento, recomendamos que voc&#234; leia http://www.aprendendodjango.com/ e/ou a documenta&#231;&#227;o do Django https://www.djangoproject.com/&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como participar?&lt;/strong&gt;&lt;br /&gt;
Para participar basta responder as threads e ir ao encontro.&lt;br /&gt;
Seria interessante que levasse um notebook para programar l&#225;, visto que provavelmente n&#227;o teremos computador para disponibilizar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E se eu n&#227;o tenho notebook?&lt;/strong&gt;&lt;br /&gt;
Dependendo do local que for acontecer o ciclo, acredito que d&#234; para levar o desktop de casa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E se eu n&#227;o tenho como levar o meu desktop?&lt;/strong&gt;&lt;br /&gt;
Somo uma comunidade, n&#227;o vejo problema em espremer 2 pessoas em 1 notebook. &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Para finalizar esse manifesto longo do c&#227;o,&lt;/p&gt;
&lt;p&gt;OS 5 MANDAMENTOS DO PUG-PE SUMMER OF CODE:&lt;br /&gt;
1 &amp;#8211; DEVEMOS TODOS COMPARTILHAR CONHECIMENTO &amp;#8211; Regra de ouro a ser cumprida a risca. Se algu&#233;m tem d&#250;vida, devemos ajud&#225;-lo. De prefer&#234;ncia em voz alta pois a d&#250;vida de um pode ser a d&#250;vida de outro.&lt;br /&gt;
2 &amp;#8211; TODOS DEVEM SER SEM VERGONHA &amp;#8211; Ter vergonha de programar na frente dos outros, de mostrar o c&#243;digo, ter vergonha por achar que sabe pouco. N&#195;O TENHAM! Tirem d&#250;vidas, fa&#231;am seus c&#243;digos e aproveitem cada momento para aprender, e para colaborar com o projeto.&lt;br /&gt;
3 &amp;#8211; &#201; PROIBIDO SER FOMINHA &amp;#8211; Ou seja, &#233; proibido querer fazer tudo sozinho. As vezes, Rom&#225;rio, n&#243;s temos que passar a bola para nossos companheiros.&lt;br /&gt;
4 &amp;#8211; DIVIRTAM-SE &amp;#8211; N&#227;o &#233; trabalho e n&#227;o &#233; escravid&#227;o. Vamos programar para alcan&#231;ar um marco da nossa comunidade, um projeto que precisamos. Vamos faz&#234;-lo juntos, e vamos nos divertir fazendo. Se for chato, come&#231;a a dar sono, e ai todo mundo vai querer ficar jogando fazendinha feliz no orkut. &lt;img src=&quot;http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;wp-smiley&quot; /&gt;&lt;br /&gt;
5 &amp;#8211; LAVEM AS M&#195;OS &amp;#8211; Antes E depois de usar o banheiro.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/767/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/767/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/767/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/767/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/767/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/767/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/767/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/767/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/767/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/767/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/767/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/767/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/767/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/767/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=767&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Slides from Keynotes at VII PythonBrasil</title>
		<link href="http://aimotion.blogspot.com/2011/10/slides-from-keynotes-at-vii.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-8555650387269536150</id>
		<updated>2011-10-03T08:59:15+00:00</updated>
		<content type="html">&lt;div&gt;Hi all,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd like to share the slides of the keynotes I lectured at the &lt;a href=&quot;http://www.pythonbrasil.org.br/&quot;&gt;VII PythonBrasil&lt;/a&gt;, the Brazilian Python Users Meeting that happens once a year. &amp;nbsp; This year I had the opportunity to give two talks: One is about the &lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/construindo-comunidades-opensource-bem-sucedidas-experincias-do-pugpe&quot;&gt;Open-Source Communities and the experience with the local community of Pernambuco&lt;/a&gt;: The Python User Group of Pernambuco &lt;a href=&quot;http://pug.pe/&quot;&gt;(PUG-PE&lt;/a&gt;) and about the framework I am currently working on: &lt;a href=&quot;http://muricoca.github.com/crab&quot;&gt;Crab - A Python Framework for Building Recommender Systems.&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It was an amazing event and with lots of amazing keynotes, opportunities to meet people and make some friends. I also had the opportunity to give two more lighting talks: the pipeline toolkit for scientific computations &lt;a href=&quot;http://packages.python.org/joblib/&quot;&gt;JobLib&lt;/a&gt; and about &lt;a href=&quot;http://ipython.org/&quot;&gt;Ipython&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Below the slides provided:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;center&gt;&lt;div id=&quot;__ss_9509238&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/crab-a-python-framework-for-building-recommender-systems&quot; target=&quot;_blank&quot; title=&quot;Crab: A Python Framework for Building Recommender Systems &quot;&gt;Crab: A Python Framework for Building Recommender Systems &lt;/a&gt;&lt;/strong&gt;  &lt;br /&gt;&lt;div&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot; target=&quot;_blank&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo&quot; target=&quot;_blank&quot;&gt;Marcel Caraciolo&lt;/a&gt; &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Crab slides for &lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/crab-a-python-framework-for-building-recommender-systems&quot;&gt;download&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/center&gt;&lt;center&gt;&lt;div id=&quot;__ss_9480970&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/joblib-the-pipelining&quot; target=&quot;_blank&quot; title=&quot;JobLib: Running Python function as pipeline jobs&quot;&gt;JobLib: Running Python function as pipeline jobs&lt;/a&gt;&lt;/strong&gt;  &lt;br /&gt;&lt;div&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot; target=&quot;_blank&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo&quot; target=&quot;_blank&quot;&gt;Marcel Caraciolo&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The JobLib slides for &lt;a href=&quot;http://www.slideshare.net/marcelcaraciolo/joblib-the-pipelining&quot;&gt;download&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd like also to announce the launch of the &lt;a href=&quot;http://muricoca.github.com/crab&quot;&gt;new home page&lt;/a&gt; of the project Crab with a reformulated design. It still in development, with lots of work to do, but it's coming! The first release 0.1 will be launched until the second week of October.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-iI2f9O3yHek/TonbS6waVMI/AAAAAAAAAms/-IoG11HIqSU/s1600/Screen+shot+2011-10-03+at+1.00.13+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;369&quot; src=&quot;http://4.bp.blogspot.com/-iI2f9O3yHek/TonbS6waVMI/AAAAAAAAAms/-IoG11HIqSU/s640/Screen+shot+2011-10-03+at+1.00.13+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Crab new Home Page&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks for the feedback from all developers at PythonBrasil and I expect new contributors at the project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Regards,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marcel Caraciolo&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-8555650387269536150?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Configurando o encoding padr&#227;o no Python</title>
		<link href="http://feedproxy.google.com/~r/Fechatag/~3/y1oohqF7Omg/"/>
		<id>http://elcio.com.br/?p=3596</id>
		<updated>2011-09-29T20:53:51+00:00</updated>
		<content type="html">&lt;p&gt;Dica: ao iniciar o desenvolvimento com Python em uma m&#225;quina nova, procure pelo arquivo sitecustomize.py e acrescente:&lt;/p&gt;
&lt;pre&gt;import sys
sys.setdefaultencoding('utf-8')&lt;/pre&gt;
&lt;p&gt;O arquivo sitecustomize.py &#233; automaticamente executado toda vez que voc&#234; executa o Python (sim, voc&#234; pode fazer o que quiser nele&amp;#8230;) Ele fica em lugares diferentes dependendo da plataforma e da sua instala&#231;&#227;o do Python. No Ubuntu, fica em /usr/lib/python2.7/ (trocando 2.7 pela vers&#227;o que voc&#234; estiver usando.) As linhas acima configuram o encoding padr&#227;o como Unicode UTF-8. Claro, voc&#234; pode configurar outro encoding como o padr&#227;o, se preferir.&lt;/p&gt;
&lt;p&gt;Recomendo muito que, se voc&#234; n&#227;o entende nada de charsets ou nem sabe do que estou falando, use UTF-8.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/Gc6L4gn-6C3Pg94rHa4jLfVmrFo/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/Gc6L4gn-6C3Pg94rHa4jLfVmrFo/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/Gc6L4gn-6C3Pg94rHa4jLfVmrFo/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/Gc6L4gn-6C3Pg94rHa4jLfVmrFo/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Fechatag?a=y1oohqF7Omg:7nH7gUTweYw:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Fechatag?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Fechatag?a=y1oohqF7Omg:7nH7gUTweYw:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Fechatag?i=y1oohqF7Omg:7nH7gUTweYw:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Elcio Luiz Ferreira</name>
			<uri>http://elcio.com.br</uri>
		</author>
		<source>
			<title type="html">fechaTag</title>
			<subtitle type="html">HTML5, CSS, Tableless, Desenvolvimento Web, Python, Linux</subtitle>
			<link rel="self" href="http://elcio.com.br/tag/programacao/feed/"/>
			<id>http://elcio.com.br/tag/programacao/feed/</id>
			<updated>2012-01-27T00:44:19+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">&#201; amanh&#227; &#8211; Maior encontro da comunidade brasileira de Python</title>
		<link href="http://christiano.me/2011/09/28/e-amanha-maior-encontro-da-comunidade-brasileira-de-python/"/>
		<id>http://christiano.me/?p=1802</id>
		<updated>2011-09-28T08:12:56+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://christiano.me/wp-content/uploads/2011/09/python_logo.png&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-1803&quot; title=&quot;Python&quot; src=&quot;http://christiano.me/wp-content/uploads/2011/09/python_logo.png&quot; alt=&quot;&quot; width=&quot;170&quot; height=&quot;170&quot; /&gt;&lt;/a&gt;&#160;&lt;div class=&quot;woo-sc-twitter left&quot;&gt;&lt;a href=&quot;http://twitter.com/share&quot; class=&quot;twitter-share-button&quot;&gt;Tweet&lt;/a&gt;&lt;/div&gt; &#160;&lt;div class=&quot;shortcode-google-plusone&quot;&gt;&lt;div class=&quot;g-plusone&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/.shortcode-google-plusone--&gt;

 &#160;&#160;Amanh&#227; &#233; o dia do maior encontro da comunidade brasileira de Python. Estou bastante ansioso pelo evento, &#243;tima oportunidade para encontrar a comunidade, conversar e trocar conhecimento.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;http://www.pythonbrasil.org.br/2011/programacao/grade-do-evento/talks&quot; target=&quot;_blank&quot;&gt;grade do evento&lt;/a&gt; est&#225; muito boa, palestras abordando uma variedade enorme de temas para todos os n&#237;veis de conhecimento. Algumas pessoas me perguntaram se as palestras s&#227;o muito avan&#231;adas, se &#233; poss&#237;vel algu&#233;m iniciante ter bom aproveitamento do evento. A resposta &#233; &lt;strong&gt;sim&lt;/strong&gt;! Tem palestras para todos os n&#237;veis, se voc&#234; est&#225; querendo &lt;strong&gt;aprender Python&lt;/strong&gt;, essa &#233; sua grande oportunidade. Se voc&#234; j&#225; conhece e quer melhorar suas t&#233;cnicas, tamb&#233;m &#233; o evento ideal. Para desenvolvedores experientes, tamb&#233;m. Cada palestra tem sua classifica&#231;&#227;o, se &#233; &lt;strong&gt;iniciante&lt;/strong&gt;, &lt;strong&gt;intermedi&#225;ria&lt;/strong&gt; ou &lt;strong&gt;avan&#231;ada&lt;/strong&gt;, basta escolher de acordo com seu n&#237;vel de conhecimento e interesse pelo tema.&lt;/p&gt;
&lt;p&gt;Sem contar na oportunidade de conversar com quem utiliza Python profissionalmente, fazer networking e at&#233; gerar neg&#243;cios. Portanto, se voc&#234; tem interesse em Python, &lt;strong&gt;participe do evento&lt;/strong&gt;, caso contr&#225;rio, s&#243; ter&#225; outra oportunidade como esta no ano que vem.&lt;/p&gt;
&lt;p&gt;Eu vou apresentar a palestra &lt;strong&gt;Django e MongoDB&lt;/strong&gt; no s&#225;bado, dia 01, &#224;s 14h. Essa palestra tem um conte&#250;do mais avan&#231;ado, vou falar um pouco da minha aventura em desenvolver projetos com Django utilizando um banco de dados n&#227;o relacional, no caso, o MongoDB.&lt;/p&gt;
&lt;p&gt;Espero encontr&#225;-lo no evento! At&#233; l&#225;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mais informa&#231;&#245;es&lt;/strong&gt;:&#160;&lt;a href=&quot;http://www.pythonbrasil.org.br/2011/&quot; target=&quot;_blank&quot;&gt;http://www.pythonbrasil.org.br/2011/&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Christiano Anderson</name>
			<uri>http://christiano.me</uri>
		</author>
		<source>
			<title type="html">Christiano Anderson &#187; python</title>
			<subtitle type="html">Desenvolvimento, Padr&#245;es Web, NoSQL, MongoDB, Software Livre</subtitle>
			<link rel="self" href="http://christiano.me/category/python/feed/"/>
			<id>http://christiano.me/category/python/feed/</id>
			<updated>2012-01-27T03:45:05+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Inverter strings</title>
		<link href="http://aprenda-python.blogspot.com/2011/09/inverter-strings.html"/>
		<id>tag:blogger.com,1999:blog-2240031811551496628.post-4239310891363073089</id>
		<updated>2011-09-27T11:36:57+00:00</updated>
		<content type="html">Dada uma string, quero mostr&#225;-la invertida. Em python &#233; muito simples.
&amp;gt;&amp;gt;&amp;gt; 'eu gosto de python'[::-1]
'nohtyp ed otsog ue'
E se eu quiser inverter palavra por palavra, mas mantendo a ordem em que as palavras aparecem no texto?
&amp;gt;&amp;gt;&amp;gt; ' '.join([word[::-1] for word in 'eu gosto de python'.split()])
'ue otsog ed nohtyp'
A dica aqui &#233; usar o slicing de um jeito n&#227;o muito comum: com o argumento step (o</content>
		<author>
			<name>Vinicius Assef</name>
			<email>noreply@blogger.com</email>
			<uri>http://aprenda-python.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Aprenda Python</title>
			<subtitle type="html">Dicas para voc&#234; que j&#225; &#233; programador em outra linguagem.</subtitle>
			<link rel="self" href="http://aprenda-python.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-2240031811551496628</id>
			<updated>2011-11-30T15:44:12+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">High Performance Computation with Python - Part 03</title>
		<link href="http://aimotion.blogspot.com/2011/09/high-performance-computation-with_24.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-1935413937695174072</id>
		<updated>2011-09-24T14:10:47+00:00</updated>
		<content type="html">&lt;span class=&quot;Apple-style-span&quot;&gt;Hi all,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;This article is the third one of the series about High Computation with Python. &amp;nbsp;For anyone that missed the first and the second parts check this &lt;a href=&quot;http://aimotion.blogspot.com/2011/09/high-performance-computation-with.html&quot;&gt;link&lt;/a&gt; and this &lt;a href=&quot;http://aimotion.blogspot.com/2011/09/high-performance-computation-with_17.html&quot;&gt;one&lt;/a&gt;. &amp;nbsp;The goal is to present approaches to make CPU-demanding tasks in Python run much faster.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The techniques that are being covered:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;li&gt;&lt;s&gt;&amp;nbsp;&lt;/s&gt;&lt;b&gt;&lt;s&gt;Python Profiling&lt;/s&gt;&lt;/b&gt;&lt;s&gt;&amp;nbsp;- How to find bottlenecks&lt;/s&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;&amp;nbsp;&lt;b&gt;Cython&lt;/b&gt;&amp;nbsp;- &amp;nbsp;Annotate your code and compile to C&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;b&gt;Numpy Vectors&lt;/b&gt;&amp;nbsp;- Fast vector operations using numpy arrays&lt;/li&gt;&lt;li&gt;&lt;b&gt;&amp;nbsp;Numpy integration with Cython&lt;/b&gt;&amp;nbsp;- fast numerical Python library wrapped by Cython&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;b&gt;PyPy&lt;/b&gt;&amp;nbsp;- Python's new Just in Time &amp;nbsp;Compiler&lt;/li&gt;&lt;/span&gt;&lt;/ol&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;In this post I will talk about Numpy Vectors and how you can wrap it with Cython!&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The Problem&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;In this series we will analyze how to optimize the statistical&amp;nbsp;&lt;b&gt;Spearman Rank's Correlation coefficient,&lt;/b&gt;&amp;nbsp;&amp;nbsp;which it is a particular measure used to compute the similarity between items in recommender systems and assesses how well the relationship between two variables can be described using a monotonic function. The source code for this metric can be found in the&amp;nbsp;&lt;a href=&quot;http://aimotion.blogspot.com/2011/09/high-performance-computation-with.html&quot;&gt;first post&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Numpy&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;http://numpy.scipy.org/&quot;&gt;Numpy&lt;/a&gt; is a powerful extension to Python, adding support for large, multi-dimensional array and matrices, along with several mathematical functions to manipulate these arrays. To install it you can type this command at your terminal&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ sudo easy_install numpy&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Or&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ pip install numpy&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In our example we will change the spearman.py . Import the numpy library and change the&amp;nbsp;spearman_correlation to look &amp;nbsp;the one below. If you run and test it you will ger the same output as before.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The numpy strength is that can simplify lots of operations on vectors or matrixes of numbers since they work directly in all list rather than on individual elements&amp;nbsp;at one time. &amp;nbsp;So before we had nested for loops over individual terms in a list, now with numpy you could do the same job in a faster and simple way.&lt;br /&gt;Some notes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You define an array with numpy.array statement, in our case a list of tuples indexed by the labels keys and ranks. (lines 29 and 30).&lt;/li&gt;&lt;li&gt;Lots of operations already implemented in numpy, such as numpy.in1d which finds where the elements in the first vector are in the second vector returning an array os bools.&lt;/li&gt;&lt;li&gt;&amp;nbsp;We have numpy.sort which sort the elements based on a key, in this example (ranks) (lines 16 and 17).&lt;/li&gt;&lt;li&gt;diffs * diffs does a pairwise multiplication, think of it as diff[0] = diff[0] * diff[0]; diff[1] = diff[1] * diff[1]...; diff[n-1] = diff[n-1] * diff[n-1]. (line 36)&lt;/li&gt;&lt;li&gt;size is an attribute from numpy.array to fetch the m*n elements (count) from an array.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;If it stills unclear I suggest you to try it at the command line, step-by-step to look over the results. Put a small number of elements in the array and see it in action.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Numpy with Cython&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Numpy is a powerful library and uses very fast C optimized math libraries to perform these calculations very quickly. You can also wrap your python code with Cython. The main difference is the annotation of the numpy arrays. You can see the &lt;a href=&quot;http://cython.readthedocs.org/en/latest/src/tutorial/numpy.html&quot;&gt;tutorial&lt;/a&gt; for further details. &amp;nbsp;The difference are how we import: cimport numpy as np and the assinature of the function _rank_dists.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Special Notes - Meeting Scipy&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Another poweful library is Scipy, it is a package for Python that brings several algebra techniques for dealing with matrices and vectors. &amp;nbsp;One special module is the &lt;a href=&quot;http://docs.scipy.org/doc/scipy/reference/stats.html&quot;&gt;scipy.stats&lt;/a&gt;, which comes with the &lt;a href=&quot;http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.spearmanr.html&quot;&gt;spearmanr&lt;/a&gt; function. It receives two arrays with the observations and returns the spearman coefficient. Amazing! Let's see our code below:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;In the next post we will study the Pypy, a JIT Compiler which can speed your code with minimal changes at your code!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;I hope you enjoyed this article,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Marcel Caraciolo&lt;span id=&quot;goog_1173159328&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1173159329&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://draft.blogger.com/&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-1935413937695174072?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-br">
		<title type="html">Python Brasil 2010 em Curitiba</title>
		<link href="http://pugpe.wordpress.com/2011/09/22/pug-pe-pythobrasil-revista-encontro-livre/"/>
		<id>http://pugpe.wordpress.com/?p=761</id>
		<updated>2011-09-23T01:53:34+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225; pessoal,&lt;/p&gt;
&lt;p&gt;Gostaria de aproveitar este post para falar um pouco sobre 3 t&#243;picos relacionados a Python em Pernambuco. Como todos sabem al&#233;m das atividades correntes do nosso grupo, especialmente encontros, realizamos coding dojos, mini-cursos e workshops.&lt;/p&gt;
&lt;p&gt;Gostaria de destacar em especial neste &#250;ltimo encontro a realiza&#231;&#227;o do &lt;a href=&quot;http://encontrolivre.org/2011/noticias/encontro-livre-e-pug-pe-promovem-workshops-de-python/&quot;&gt;Workshop de Python&lt;/a&gt; em conjunto com o &lt;a href=&quot;http://encontrolivre.org/2011/&quot;&gt;III Encontro Livre&lt;/a&gt; que foi realizado neste m&#234;s de setembro durante 3 dias. Com workshop de dura&#231;&#227;o de 4 horas, tivemos Python B&#225;sico e Django B&#225;sico, o &#250;ltimo Python com PySide n&#227;o ocorreu por falta de p&#250;blico. Mas faz parte! &lt;img src=&quot;http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt;  Quero agradecer em especial aos membros Daker Fernandes (@&lt;a href=&quot;http://twitter.com/dakerfp&quot;&gt;dakerfp&lt;/a&gt;) , Fernando Rocha (@&lt;a href=&quot;http://twitter.com/fernandogrd&quot;&gt;fernandogrd&lt;/a&gt;) &#160;e Marcel Caraciolo (@&lt;a href=&quot;http://twitter.com/marcelcaraciolo&quot;&gt;marcelcaraciolo&lt;/a&gt;) pelo esfor&#231;o e empenho nesta s&#233;rie de workshops! &#160;Em breve disponibilizaremos fotos do workshop!&lt;/p&gt;
&lt;p&gt;A segunda not&#237;cia &#233; a publica&#231;&#227;o de um artigo especial no m&#234;s de agosto sobre Comunidades de Software Livre, onde foi utilizado o case do nosso Grupo de Usu&#225;rios como exemplo de inspira&#231;&#227;o para outras comunidades!!! &#160;O moderador Marcel Caraciolo (@&lt;a href=&quot;http://twitter.com/marcelcaraciolo&quot;&gt;marcelcaraciolo&lt;/a&gt;) foi respons&#225;vel pelo artigo explicando sobre a hist&#243;ria do grupo, as atividades e at&#233; dicas para outros comunidades e pessoas que desejam engatilhar uma comunidade de software livre na sua regi&#227;o!&lt;/p&gt;
&lt;p&gt;Para download, acesse a revista nas p&#225;ginas 72 &amp;#8211; 76 da Revista Esp&#237;rito Livre, n 29.&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://revista.espiritolivre.org/img/REL029_Capa.jpg&quot;&gt;&lt;img class=&quot; &quot; title=&quot;http://revista.espiritolivre.org/img/REL029_Capa.jpg&quot; src=&quot;http://revista.espiritolivre.org/img/REL029_Capa.jpg&quot; alt=&quot;http://revista.espiritolivre.org/img/REL029_Capa.jpg&quot; width=&quot;286&quot; height=&quot;382&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Construindo Comunidades Bem-Sucedidas: Experi&#234;ncia do PUG-PE na revista Esp&#237;rito Livre de Agosto/2011&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.revista.espiritolivre.org/wp-content/plugins/download-monitor/download.php?id=29&quot;&gt;DOWNLOAD&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gostaria tamb&#233;m de aproveitar este destaque para comentar um &#160;pouco sobre o &lt;a href=&quot;http://www.pythonbrasil.org.br/2011/&quot;&gt;VII Encontro Brasileiro da Comunidade de Usu&#225;rios de Python (PythonBrasil)&lt;/a&gt; que durante os dias &lt;strong&gt;29 de setembro &#160;&#224; 01 de outubro estar&#225; sediado em S&#227;o Paulo&lt;/strong&gt; com uma s&#233;rie de palestras durante os tr&#234;s sobre diversos projetos, frameworks, trabalhos cient&#237;ficos e at&#233; palestras sobre comunidades de desenvolvedores Python no Brasil.&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot; &quot; title=&quot;Encontro Python Brasil, S&#227;o Paulo , 29 a 02 de outubro&quot; src=&quot;http://www.pythonbrasil.org.br/++theme++pythonbrasil7/static/logo.png&quot; alt=&quot;Encontro Python Brasil, S&#227;o Paulo , 29 a 02 de outubro&quot; width=&quot;432&quot; height=&quot;108&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Encontro Python Brasil, S&#227;o Paulo , 29 a 02 de outubro&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Gostaria de destacar a presen&#231;a dos membros pernambucanos Marcel Caraciolo (@&lt;a href=&quot;http://twitter.com/marcelcaraciolo&quot;&gt;marcelcaraciolo&lt;/a&gt;) que teve 2 palestras aprovadas neste evento: uma sobre o&lt;a href=&quot;http://www.pythonbrasil.org.br/2011/programacao/grade-do-evento/scipy/crab-framework-em-python-para-construcao-de-sistemas-de-recomendacao&quot;&gt; framework Crab&lt;/a&gt; (@&lt;a href=&quot;http://twitter.com/muricoca_crab&quot;&gt;muricoca_crab&lt;/a&gt;) que ele vem desenvolvendo para constru&#231;&#227;o de sistemas de recomenda&#231;&#227;o e outra sobre &lt;a href=&quot;http://www.pythonbrasil.org.br/2011/programacao/grade-do-evento/comunidade/construindo-comunidades-bem-sucedidas-experiencia-do-pug-pe&quot;&gt;Comunidades de Software Livre: A experi&#234;ncia do PUG-PE&lt;/a&gt;. &#160; Outro membro com trabalhos aprovados foi o Bruno Melo (@&lt;a href=&quot;http://twitter.com/brunojm&quot;&gt;brunojm&lt;/a&gt;) que teve seu trabalho: &#160;&lt;a href=&quot;http://www.pythonbrasil.org.br/2011/programacao/grade-do-evento/desenvolvimento-web/python-na-torre-de-babel-integrando-python-com-outras-linguagens&quot;&gt;Python na Torre de Babel: Integrando Python com Outras Linguagens!&lt;/a&gt; que vai focar na integra&#231;&#227;o de Python com uma s&#233;rie de linguagens de programa&#231;&#227;o. &#160;Outra palestra aprovada foi o do membro Marcelo Lira sobre&lt;a href=&quot;http://www.pythonbrasil.org.br/2011/programacao/grade-do-evento/mobilidade-e-sistemas-embarcados/gerando-bindings-python-para-bibliotecas-c&quot;&gt; bindings de Python com C/C++&lt;/a&gt; e por fim a palestra do Daker Fernandes (@&lt;a href=&quot;http://twitter.com/dakerfp&quot;&gt;dakerfp&lt;/a&gt;) que teve sua palestra &lt;a href=&quot;http://www.pythonbrasil.org.br/2011/programacao/grade-do-evento/scipy/dominando-modelos-ocultos-de-markov-com-python-e-ghmm&quot;&gt;Dominando Modelos Ocultos de Markov com Python e GHMM&lt;/a&gt;&#160;envolvendo Python com Intelig&#234;ncia Artificial tamb&#233;m aprovada!! Todos est&#227;o de parab&#233;ns!!&lt;/p&gt;
&lt;p&gt;Queremos convidar a todos a participar deste encontro, sem d&#250;vidas n&#227;o d&#225; para perder! Muito networking, aprendizado e claro programa&#231;&#227;o e coding sempre constante! &#160;A PythonBrasil que este ano inclusive, como &#233; de praxe, vai ter &lt;a href=&quot;http://www.pythonbrasil.org.br/2011/programacao/sprints&quot;&gt;sprints&lt;/a&gt; (por sinal uma delas &#233; a do Crab) , &lt;a href=&quot;http://www.pythonbrasil.org.br/2011/programacao/open-space&quot;&gt;open spaces&lt;/a&gt; (para troca de id&#233;ias) e at&#233; um&lt;a href=&quot;http://www.pythonbrasil.org.br/2011/sobre-o-evento/programacao/open-space/turbine-seu-firefox&quot;&gt; desafio de codifica&#231;&#227;o&lt;/a&gt;&#160;para constru&#231;&#227;o de plugins no Firefox. &#160;Quem n&#227;o for, vai perder!!!&lt;/p&gt;
&lt;p&gt;Essa foto foi do encontro do Ano Passado:&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;    &quot; title=&quot;Python Brasil 2010 em Curitiba&quot; src=&quot;http://old.pythonbrasil.org.br/2010/imagens/foto-oficial-2010&quot; alt=&quot;Python Brasil 2010 em Curitiba&quot; width=&quot;455&quot; height=&quot;302&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Python Brasil 2010 em Curitiba&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Espero v&#234;-los por l&#225;! &#160;E avante PUG-PE!&lt;/p&gt;
&lt;p&gt;Atenciosamente,&lt;/p&gt;
&lt;p&gt;Equipe PUG-PE&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/pugpe.wordpress.com/761/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/pugpe.wordpress.com/761/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/pugpe.wordpress.com/761/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/pugpe.wordpress.com/761/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gofacebook/pugpe.wordpress.com/761/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/pugpe.wordpress.com/761/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gotwitter/pugpe.wordpress.com/761/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/pugpe.wordpress.com/761/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/pugpe.wordpress.com/761/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/pugpe.wordpress.com/761/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/pugpe.wordpress.com/761/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/pugpe.wordpress.com/761/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/pugpe.wordpress.com/761/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/pugpe.wordpress.com/761/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=pugpe.wordpress.com&amp;blog=12164117&amp;post=761&amp;subd=pugpe&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
		<author>
			<name>PUG - PE</name>
			<uri>http://pugpe.wordpress.com</uri>
		</author>
		<source>
			<title type="html">PUG-PE</title>
			<subtitle type="html">Python em Pernambuco</subtitle>
			<link rel="self" href="http://pugpe.wordpress.com/feed/"/>
			<id>http://pugpe.wordpress.com/feed/</id>
			<updated>2012-01-31T16:44:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">High Performance Computation with Python - Part 02</title>
		<link href="http://aimotion.blogspot.com/2011/09/high-performance-computation-with_17.html"/>
		<id>tag:blogger.com,1999:blog-6000112949648041507.post-161673904568613458</id>
		<updated>2011-09-17T05:54:28+00:00</updated>
		<content type="html">&lt;div&gt;Hi all,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's continue our series of posts about &lt;b&gt;High Performance with Python.&lt;/b&gt;&amp;nbsp;Last post I presented how you analyze your code using &lt;b&gt;Python Profiling&lt;/b&gt;. &amp;nbsp;If you missed the first part please check this &lt;a href=&quot;http://aimotion.blogspot.com/2011/09/high-performance-computation-with.html&quot;&gt;link&lt;/a&gt;. &amp;nbsp;To sum up, our goal is to present several techniques to make CPU-demanding tasks in Python run much faster.&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The techniques that will be covered:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;s&gt;&amp;nbsp;&lt;/s&gt;&lt;b&gt;&lt;s&gt;Python Profiling&lt;/s&gt;&lt;/b&gt;&lt;s&gt;&amp;nbsp;- How to find bottlenecks&lt;/s&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;b&gt;Cython&lt;/b&gt;&amp;nbsp;- &amp;nbsp;Annotate your code and compile to C&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;b&gt;Numpy Vectors&lt;/b&gt;&amp;nbsp;- Fast vector operations using numpy arrays&lt;/li&gt;&lt;li&gt;&lt;b&gt;&amp;nbsp;Numpy integration with Cython&lt;/b&gt;&amp;nbsp;- fast numerical Python library wrapped by Cython&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;b&gt;PyPy&lt;/b&gt;&amp;nbsp;- Python's new Just in Time &amp;nbsp;Compiler&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;In this post I will talk about Cython and how do you compile your code to C with this powerful tool!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;The Problem&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;In this series we will analyze how to optimize the statistical&amp;nbsp;&lt;b&gt;Spearman Rank's Correlation coefficient,&lt;/b&gt;&amp;nbsp;&amp;nbsp;which it is a particular measure used to compute the similarity between items in recommender systems and assesses how well the relationship between two variables can be described using a monotonic function. The source code for this metric can be found in the &lt;a href=&quot;http://aimotion.blogspot.com/2011/09/high-performance-computation-with.html&quot;&gt;last post&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Cython&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Cython&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt; is a Python extension that lets developers annotate functions so they can be compiled to C. It takes a little time to develop but typically give a nice speed-up. &amp;nbsp;If you're starting now with Cython, I recommend you to check this &lt;a href=&quot;http://docs.cython.org/src/userguide/tutorial.html&quot;&gt;tutorial&lt;/a&gt;, it quite useful for beginners.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;In our previous example we decided to optimize the function spearman_correlation. So first we will start a new module called&amp;nbsp;spearman_correlation_cython.py&amp;nbsp;, and move the&amp;nbsp;spearman_correlation&amp;nbsp;function into this module. In the original source you will have to import the&amp;nbsp;spearman_correlation_cython&amp;nbsp;and replace the reference to&amp;nbsp;spearman_correlation(...) &amp;nbsp;with&amp;nbsp;spearman_correlation_cython.&amp;nbsp;spearman_correlation(...).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;So the code for your&amp;nbsp;spearman_correlation_cython.py&amp;nbsp;now is:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;pre&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;pre&gt;&lt;div class=&quot;line&quot; id=&quot;LC20&quot;&gt;&lt;br /&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;spearman_correlation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ranks1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ranks2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC21&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;sd&quot;&gt;&quot;&quot;&quot;Returns the Spearman correlation coefficient for two rankings, which&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC22&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;sd&quot;&gt;    should be dicts or sequences of (key, rank). The coefficient ranges from&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC23&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;sd&quot;&gt;    -1.0 (ranks are opposite) to 1.0 (ranks are identical), and is only&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC24&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;sd&quot;&gt;    calculated for keys in both rankings (for meaningful results, remove keys&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC25&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;sd&quot;&gt;    present in only one list before ranking).&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC26&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC27&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;n&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC28&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;n&quot;&gt;ranks1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;sorted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ranks1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;lambda&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC29&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;n&quot;&gt;ranks2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;sorted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ranks2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;lambda&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC30&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC31&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;n&quot;&gt;ranks1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;enumerate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ranks1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC32&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;n&quot;&gt;ranks2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;enumerate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ranks2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC33&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC34&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_rank_dists&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ranks1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ranks2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC35&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;n&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC36&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC37&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC38&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC39&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;k&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;ne&quot;&gt;ZeroDivisionError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC40&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;c&quot;&gt;# Result is undefined if only one item is ranked&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC41&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next we will have to rename the&amp;nbsp;spearman_correlation_cython.py to&amp;nbsp;spearman_correlation_cython.pyx. &amp;nbsp;Cython uses .pyx &amp;nbsp;to indicate that it is a file that will compile to C. &amp;nbsp;Add also a new setup.py with the following contents:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;pre&gt;&lt;div class=&quot;line&quot; id=&quot;LC1&quot;&gt;&lt;br /&gt;&lt;span class=&quot;c&quot;&gt;# setup.py&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC2&quot;&gt;&lt;br /&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;distutils.core&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;setup&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC3&quot;&gt;&lt;br /&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;distutils.extension&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Extension&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC4&quot;&gt;&lt;br /&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Cython.Distutils&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build_ext&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC5&quot;&gt;&lt;br /&gt;&lt;span class=&quot;c&quot;&gt;# for notes on compiler flags see:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;&lt;br /&gt;&lt;span class=&quot;c&quot;&gt;# http://docs.python.org/install/index.html&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC7&quot;&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC8&quot;&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;cmdclass&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;span class=&quot;Apple-style-span&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;build_ext&lt;span class=&quot;Apple-style-span&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build_ext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC9&quot;&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;ext_modules&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Extension&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;spearman_correlation_cython&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;spearman_correlation_cython.pyx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])]&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;&lt;br /&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Now run the command:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ python setup.py build_ext --inplace&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;This &amp;nbsp;command runs the setup.py script that we just created by calling the build_ext command. The new module is built in-place in the directory. &amp;nbsp;You will see that it will be generated a new r&amp;nbsp;spearman_correlation_cython.so in the directory.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;Run the new code using python cython_spearman 199999 and you will see a slight improvement in the speed of the calculation (very minor yet!). &amp;nbsp;You can take a look to see how well the slower Python calls are being replace with faster Cython calls by using:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;$ cython -a rank_dists.pyx&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;It &amp;nbsp;will generate a rank_dists.html file. If you open it in your browser, you will see something like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-7g1t5RRXxMU/TnQo9Ca-2_I/AAAAAAAAAmk/GV06bBiu6Kc/s1600/Screen+shot+2011-09-17+at+1.59.48+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;350&quot; src=&quot;http://3.bp.blogspot.com/-7g1t5RRXxMU/TnQo9Ca-2_I/AAAAAAAAAmk/GV06bBiu6Kc/s400/Screen+shot+2011-09-17+at+1.59.48+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Result of cython -a spearman_correlation_cython&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The workflow now that you will use at your code is progressive. Each time you add a type with Cython, it may improve the resulting code. When it does so successfully, you will see that the dark yellow lines will turn lighter and eventually they will turn white (it will represent that there is no need for improvements, it is faster!). &amp;nbsp;If you are interested to analyze deeper, you could expand the code by double clicking at one of the lines with yellow code. It will show the C Python API calls that it is making.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-IbOcjCu--cI/TnQiWiJhK2I/AAAAAAAAAmg/R4d2KVwupWA/s1600/Screen+shot+2011-09-17+at+1.32.17+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;368&quot; src=&quot;http://4.bp.blogspot.com/-IbOcjCu--cI/TnQiWiJhK2I/AAAAAAAAAmg/R4d2KVwupWA/s640/Screen+shot+2011-09-17+at+1.32.17+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Double-Clicking at one of the yellow lines of code at html it will show the C &amp;nbsp;Python API calls&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You could also add annotations. So if you add type definitions (such as cdef int or cdef double... ) &amp;nbsp;and run the cython -a ... command, you will can monitor the reduction in yellow in your browser. &amp;nbsp;Don't forget to recompile using the setup.py command and confirm that the result is slightly faster!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-J2kbIaoRJzA/TnQqlbUscMI/AAAAAAAAAmo/IutzyzK6nhA/s1600/Screen+shot+2011-09-17+at+2.07.42+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;222&quot; src=&quot;http://2.bp.blogspot.com/-J2kbIaoRJzA/TnQqlbUscMI/AAAAAAAAAmo/IutzyzK6nhA/s400/Screen+shot+2011-09-17+at+2.07.42+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;Added some Cython types at the source code.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Cython Compiler Directives&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;You could also set several &lt;a href=&quot;http://wiki.cython.org/enhancements/compilerdirectives&quot;&gt;compiler directives&lt;/a&gt; that comes with Cython. &amp;nbsp;To enable them, you could use a comment at the top of the file or by changing the setup.py or even decorating the function individually.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using the comment at top of the file.&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;codearea&quot; dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;&lt;pre dir=&quot;ltr&quot; id=&quot;CA-84ce8379484f3ab0fa78d78fb97512c96309aaa9&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;LineNumber&quot;&gt;   1 &lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;#cython: boundscheck=False&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;anchor&quot; id=&quot;line-27&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;Using the decorate function&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;codearea&quot; dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;&lt;pre dir=&quot;ltr&quot; id=&quot;CA-ed434df0715872a7b4b2d44675c656a80a843432&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;LineNumber&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ID&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;ID&quot;&gt;cython&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre dir=&quot;ltr&quot; id=&quot;CA-ed434df0715872a7b4b2d44675c656a80a843432&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;ID&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;pre dir=&quot;ltr&quot; id=&quot;CA-c42725b645439a41109e112bffd2d4069b28d84f&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;Operator&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre dir=&quot;ltr&quot; id=&quot;CA-c42725b645439a41109e112bffd2d4069b28d84f&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;Operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;ID&quot;&gt;cython&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ID&quot;&gt;boundscheck&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ID&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;Comment&quot;&gt;# turn off boundscheck for this function&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;ResWord&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;ID&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;ResWord&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;ID&quot;&gt;cython&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ID&quot;&gt;boundscheck&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ID&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;Comment&quot;&gt;# turn it temporarily on again for this block&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;anchor&quot; id=&quot;line-41&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;Using the setup.py&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;pre dir=&quot;ltr&quot; id=&quot;CA-43e62b04056df026d74b9906bf48baf5ddab28a5&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;ID&quot;&gt;ext_modules&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ID&quot;&gt;Extension&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;spam&quot;&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;spam.pyx&quot;&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line&quot;&gt;               &lt;span class=&quot;ID&quot;&gt;Extension&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;ham&quot;&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;ham.pyx&quot;&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;ResWord&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;ID&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;ResWord&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;ID&quot;&gt;ext&lt;/span&gt; &lt;span class=&quot;ID&quot;&gt;modules&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;ID&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ID&quot;&gt;pyrex_directives&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;boundscheck&quot;&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;ID&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;One of the most used is the &lt;b&gt;cProfile&lt;/b&gt;, that is useful for profiling cython code. It gives you exactly same output as running cProfile on a normal python module. Another common directive is the &lt;b&gt;boundscheck&lt;/b&gt;. &amp;nbsp;It desables out-of-bounds index checking on buffered arrays (common in numpy arrays, so since it does not check for IndexError exceptions it will run faster. Remember that any mistake prepare to expect a segmentation fault. So be careful when you decide to use boundscheck, that is, be sure that code is working correctly as you planned. &amp;nbsp;There is also another one, the &lt;b&gt;infer_types&lt;/b&gt; which is supposed to guess the type of variables.&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Cython directly with C&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;But you may asking yourself if it is possible to wrap with Cython your existing libraries of C code. Yes it is possible! &amp;nbsp;Cython uses external declarations to declare the C functions and variables from the library that you want to use. So let's see a quick example:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's consider a simple fatorial function written in C and we want to wrap it and call with Python/Cython:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;fatorialEx.c&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;pre&gt;&lt;div class=&quot;line&quot; id=&quot;LC2&quot;&gt;&lt;br /&gt;&lt;span class=&quot;cp&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC3&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC4&quot;&gt;&lt;br /&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;fatorial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC5&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;&lt;br /&gt;	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;&lt;br /&gt;&lt;span class=&quot;p&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC8&quot;&gt;&lt;br /&gt;		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;&lt;br /&gt;	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC11&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC12&quot;&gt;&lt;br /&gt;	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fatorial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC14&quot;&gt;&lt;br /&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC15&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC16&quot;&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC16&quot;&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Now, you have to wrap it at your fatorial.pyx module:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;fatorial.pyx&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;cdef extern from &quot;fatorialEx.c&quot;:&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt;&lt;i&gt;	&lt;/i&gt;&lt;/span&gt;&lt;i&gt;int fatorial(int n)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;def fat(n):&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt;&lt;i&gt;	&lt;/i&gt;&lt;/span&gt;&lt;i&gt;return fatorial(n)&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;See the line cdef extern (it's how Cython knows how to include external libraries). Finally create your setup.py module to build the extension:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;pre&gt;&lt;div class=&quot;line&quot; id=&quot;LC1&quot;&gt;&lt;br /&gt;&lt;span class=&quot;c&quot;&gt;# setup.py&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC2&quot;&gt;&lt;br /&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;distutils.core&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;setup&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC3&quot;&gt;&lt;br /&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;distutils.extension&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Extension&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC4&quot;&gt;&lt;br /&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Cython.Distutils&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build_ext&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC5&quot;&gt;&lt;br /&gt;&lt;span class=&quot;c&quot;&gt;# for notes on compiler flags see:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;&lt;br /&gt;&lt;span class=&quot;c&quot;&gt;# http://docs.python.org/install/index.html&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC7&quot;&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC8&quot;&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;cmdclass&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;span class=&quot;Apple-style-span&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;build_ext&lt;span class=&quot;Apple-style-span&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build_ext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC9&quot;&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;ext_modules&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Extension&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;fatorial&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;fatorial.pyx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])]&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;&lt;br /&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;br /&gt;Build it:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;i&gt;$python setup.py build_ext --inplace&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;You will see the module fatorial.so in the directory, this is the file that you will use now to import your code at Python. So in the Python console , type the following commands to test it:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;gt;&amp;gt;&amp;gt; from fatorial import fat&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;gt;&amp;gt;&amp;gt; fat(5)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;120&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is working! &amp;nbsp;I am providing the &lt;a href=&quot;http://dl.dropbox.com/u/1977573/fatorial.zip&quot;&gt;source&lt;/a&gt; for this example. For further information about writing your extension check the &lt;a href=&quot;http://docs.cython.org/src/userguide/external_C_code.html&quot;&gt;Cython docs&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;That's all, &amp;nbsp; I hope &amp;nbsp;you enjoyed!&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Regards,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marcel Caraciolo&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6000112949648041507-161673904568613458?l=aimotion.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcel Caraciolo</name>
			<email>noreply@blogger.com</email>
			<uri>http://aimotion.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Artificial Intelligence in Motion</title>
			<subtitle type="html">Blog about topics related to Artificial Intelligence.</subtitle>
			<link rel="self" href="http://aimotion.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-6000112949648041507</id>
			<updated>2012-01-24T18:44:50+00:00</updated>
		</source>
	</entry>

</feed>

