<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Rodrigo Amaral</title>
	<atom:link href="http://rodrigoamaral.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://rodrigoamaral.net</link>
	<description>Desenvolvimento de software, produtividade pessoal e o mundo ao redor</description>
	<lastBuildDate>Thu, 13 Jun 2013 12:48:33 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='rodrigoamaral.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Rodrigo Amaral</title>
		<link>http://rodrigoamaral.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://rodrigoamaral.net/osd.xml" title="Rodrigo Amaral" />
	<atom:link rel='hub' href='http://rodrigoamaral.net/?pushpress=hub'/>
		<item>
		<title>Nomeando fatias de sequências em Python</title>
		<link>http://rodrigoamaral.net/2013/06/07/nomeando-fatias-de-sequencias-em-python/</link>
		<comments>http://rodrigoamaral.net/2013/06/07/nomeando-fatias-de-sequencias-em-python/#comments</comments>
		<pubDate>Fri, 07 Jun 2013 20:55:17 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[cookbook]]></category>
		<category><![CDATA[iniciantes]]></category>
		<category><![CDATA[listas]]></category>
		<category><![CDATA[sequências]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=689</guid>
		<description><![CDATA[Quem já precisou escrever algum programa para obter valores dentro de uma string, lista ou outra sequência semelhante, certamente acabou envolvido em uma grande confusão de valores fixos (hardcoded) de índices ao longo do código. Para evitar isso, é bem provável que você tenha recorrido a algo como: Mas Python é Python: sempre dá para [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=689&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-693" title="Nomeando fatias de sequências em Python" alt="Nomeando fatias de sequências em Python" src="http://ramaral.files.wordpress.com/2013/06/nomeando-fatias-de-sequencias-em-python.jpg?w=300&#038;h=199" width="300" height="199" />Quem já precisou escrever algum programa para obter valores dentro de uma string, lista ou outra sequência semelhante, certamente acabou envolvido em uma grande confusão de valores fixos (<em>hardcoded</em>) de índices ao longo do código. Para evitar isso, é bem provável que você tenha recorrido a algo como:</p>
<pre class="brush: python; light: true; title: ; notranslate">
CAMPO_X_INICIO = 5
CAMPO_X_FIM = 10
CAMPO_Y_INICIO = 16
CAMPO_Y_FIM = 19
</pre>
<p>Mas Python é Python: sempre dá para melhorar seu código quando você aprende mais sobre os recursos da linguagem. Para tornar esse tipo de código ainda mais legível e fácil de manter, podemos usar a função built-in <code><a href="http://docs.python.org/2/library/functions.html#slice">slice</a></code>. Em seu uso mais comum, a função recebe os índices inicial e final de uma fatia e retorna um objeto do tipo <a href="http://docs.python.org/2/glossary.html#term-slice">slice</a>, que representa uma porção de uma sequência.</p>
<p>Na prática, funciona assim: vamos supor que temos um arquivo texto no qual cada linha é um registro contendo o número de matrícula do aluno e as suas três notas em uma determinada disciplina:</p>
<pre class="brush: python; light: true; title: ; notranslate">
&gt;&gt;&gt; registro = &quot;12345041009&quot;
</pre>
<p>Os cinco primeiros caracteres correspondem sempre ao número de matrícula. Os dois caracteres seguintes são a primeira nota, os dois seguintes são a segunda e os dois restantes são a terceira.</p>
<p>Usando slice() para armazenar os intervalos correspondentes, temos:</p>
<pre class="brush: python; light: true; title: ; notranslate">
&gt;&gt;&gt; MATRICULA = slice(0, 5)
&gt;&gt;&gt; NOTA_1 = slice(5, 7)
&gt;&gt;&gt; NOTA_2 = slice(7, 9)
&gt;&gt;&gt; NOTA_3 = slice(9, 11)
</pre>
<p>Com isso, temos uma forma muito mais legível de definir os limites de cada fatia que nos interessa na sequência, o que nos permite obter facilmente os valores que queremos:</p>
<pre class="brush: python; light: true; title: ; notranslate">
&gt;&gt;&gt; registro[MATRICULA]
'12345'
&gt;&gt;&gt; registro[NOTA_1]
'04'
&gt;&gt;&gt; registro[NOTA_2]
'10'
&gt;&gt;&gt; registro[NOTA_3]
'09'
</pre>
<p><strong>Referência:</strong> <a href="http://shop.oreilly.com/product/0636920027072.do">Python Cookbook, 3rd Edition</a> (recomendo fortemente!)</p>
<p>Photo Credit: <a href="http://www.flickr.com/photos/92921037@N00/5985475727/">Jorge Quinteros</a> via <a href="http://compfight.com">Compfight</a> <a href="http://creativecommons.org/licenses/by-nc-nd/2.0/">cc</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/689/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=689&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/06/07/nomeando-fatias-de-sequencias-em-python/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/06/nomeando-fatias-de-sequencias-em-python.jpg?w=300" medium="image">
			<media:title type="html">Nomeando fatias de sequências em Python</media:title>
		</media:content>
	</item>
		<item>
		<title>Resumo do 1º Encontro de Usuários Python de Sergipe</title>
		<link>http://rodrigoamaral.net/2013/05/07/primeiro-encontro-de-usuarios-python-de-sergipe/</link>
		<comments>http://rodrigoamaral.net/2013/05/07/primeiro-encontro-de-usuarios-python-de-sergipe/#comments</comments>
		<pubDate>Tue, 07 May 2013 20:48:47 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[aracaju]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Plone]]></category>
		<category><![CDATA[pug-se]]></category>
		<category><![CDATA[sergipe]]></category>
		<category><![CDATA[software livre]]></category>
		<category><![CDATA[world plone day]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=662</guid>
		<description><![CDATA[No último dia 30 de abril, aproveitamos a realização da quarta edição do World Plone Day em Aracaju para realizar o primeiro Encontro de Usuários Python de Sergipe. O evento aconteceu na Universidade Tiradentes e contou com a expressiva participação de cerca de 40 pessoas, que aproveitaram a oportunidade para conhecer um pouco mais sobre [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=662&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-664" title="Resumo do 1º Encontro de Usuários Python de Sergipe" alt="Resumo do 1º Encontro de Usuários Python de Sergipe" src="http://ramaral.files.wordpress.com/2013/05/wpd.png?w=625"   />No último dia 30 de abril, aproveitamos a realização da quarta edição do <a href="http://plone.org/events/wpd/hosts/aracaju-sergipe-brasil">World Plone Day em Aracaju</a> para realizar o primeiro Encontro de Usuários Python de Sergipe. O evento aconteceu na Universidade Tiradentes e contou com a expressiva participação de cerca de 40 pessoas, que aproveitaram a oportunidade para conhecer um pouco mais sobre Plone e Python, além de entrar em contato com outros interessados na plataforma.</p>
<p>Inicialmente, apresentei uma rápida palestra institucional sobre o <a href="https://groups.google.com/forum/#!forum/pug-se">Python User Group de Sergipe (PUG-SE)</a>, explicando a motivação por trás do uso de Python e suas tecnologias, e a importância de ter um grupo de usuários local atuante.</p>
<iframe src='http://www.slideshare.net/slideshow/embed_code/20749952' width='625' height='512'></iframe>
<p>Em seguida, foi a vez da palestra do World Plone Day, ministrada por <a href="http://twitter.com/davilima6">Davi Lima</a>. Foi apresentada uma visão geral sobre o CMS Plone e seu ecossistema: características, vantagens competitivas, oportunidades de mercado, comunidade, perspectivas e etc. Os participantes aproveitaram para tirar várias dúvidas sobre aplicações do Plone, casos indicados de uso da plataforma, entre outras.</p>
<p>A terceira palestra da noite foi sobre o uso do Git para controle de versões, apresentada por <a href="https://twitter.com/Heat2k4">Onezino Gabriel Moreira</a>. Conversamos sobre o funcionamento do workflow do Git, boas práticas para gerenciamento de repositórios por parte de equipes em diversos cenários de uso, comandos úteis, etc.</p>
<p>A palestra seguinte foi uma rápida Introdução ao Django, ministrada por <a href="http://twitter.com/matheeusLimaaa">Matheus Lima</a>. O grupo demonstrou muito interesse e participou bastante, tanto que decidimos, de comum acordo, deixar a palestra sobre <a title="Criando plugins para Sublime Text" href="http://rodrigoamaral.net/2012/07/01/criando-plugins-para-sublime-text/">Criação de plugins para Sublime Text</a> que seria apresentada em seguida para o próximo encontro.</p>
<p>Por fim, realizamos um sorteio dos brindes gentilmente cedidos por nossos patrocinadores <a href="http://pycursos.com">PyCursos</a> e <a href="http://treinamentos.mobi">Treinamentos.mobi</a>. Além deles, gostaríamos de agradecer à <a href="http://unit.br">Universidade Tiradentes</a> pela total disponibilidade e apoio ao evento, inclusive incentivando os alunos interessados a participar.</p>
<p style="text-align:center;"><a href="http://pycursos.com"><img class=" wp-image-666 aligncenter" alt="logo-pycursos" src="http://ramaral.files.wordpress.com/2013/05/logo-pycursos.png?w=300&#038;h=130" width="300" height="130" /></a></p>
<p style="text-align:center;"><a href="http://treinamentos.mobi"><img class=" wp-image-667 aligncenter" alt="logo-treinamentos.mobi" src="http://ramaral.files.wordpress.com/2013/05/logo-treinamentos-mobi.png?w=300&#038;h=37" width="300" height="37" /></a></p>
<p style="text-align:left;">Em breve teremos mais uma edição do Encontro do PUG-SE! Para ficar por dentro, assine a nossa <a href="https://groups.google.com/forum/#!forum/pug-se">lista de discussão</a>.</p>

<a href='http://rodrigoamaral.net/2013/05/07/primeiro-encontro-de-usuarios-python-de-sergipe/img_1296/' title='IMG_1296'><img data-liked='0' data-reblogged='0' data-attachment-id="671" data-orig-file="http://ramaral.files.wordpress.com/2013/05/img_1296.jpg" data-orig-size="1600,1200" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Canon PowerShot SX150 IS&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1367350912&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;7.548&quot;,&quot;iso&quot;:&quot;500&quot;,&quot;shutter_speed&quot;:&quot;0.05&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="IMG_1296" data-image-description="" data-medium-file="http://ramaral.files.wordpress.com/2013/05/img_1296.jpg?w=300" data-large-file="http://ramaral.files.wordpress.com/2013/05/img_1296.jpg?w=625" width="150" height="112" src="http://ramaral.files.wordpress.com/2013/05/img_1296.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="Davi apresenta palestra sobre Plone" /></a>
<a href='http://rodrigoamaral.net/2013/05/07/primeiro-encontro-de-usuarios-python-de-sergipe/img_1298/' title='IMG_1298'><img data-liked='0' data-reblogged='0' data-attachment-id="672" data-orig-file="http://ramaral.files.wordpress.com/2013/05/img_1298.jpg" data-orig-size="1600,1200" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Canon PowerShot SX150 IS&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1367350947&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;5&quot;,&quot;iso&quot;:&quot;640&quot;,&quot;shutter_speed&quot;:&quot;0.05&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="IMG_1298" data-image-description="" data-medium-file="http://ramaral.files.wordpress.com/2013/05/img_1298.jpg?w=300" data-large-file="http://ramaral.files.wordpress.com/2013/05/img_1298.jpg?w=625" width="150" height="112" src="http://ramaral.files.wordpress.com/2013/05/img_1298.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="Público presente ao encontro do PUG-SE" /></a>
<a href='http://rodrigoamaral.net/2013/05/07/primeiro-encontro-de-usuarios-python-de-sergipe/img_1301/' title='IMG_1301'><img data-liked='0' data-reblogged='0' data-attachment-id="673" data-orig-file="http://ramaral.files.wordpress.com/2013/05/img_1301.jpg" data-orig-size="1600,1200" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Canon PowerShot SX150 IS&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1367353283&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;5&quot;,&quot;iso&quot;:&quot;400&quot;,&quot;shutter_speed&quot;:&quot;0.05&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="IMG_1301" data-image-description="" data-medium-file="http://ramaral.files.wordpress.com/2013/05/img_1301.jpg?w=300" data-large-file="http://ramaral.files.wordpress.com/2013/05/img_1301.jpg?w=625" width="150" height="112" src="http://ramaral.files.wordpress.com/2013/05/img_1301.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="Onezino fala sobre Git" /></a>
<a href='http://rodrigoamaral.net/2013/05/07/primeiro-encontro-de-usuarios-python-de-sergipe/img_1304/' title='IMG_1304'><img data-liked='0' data-reblogged='0' data-attachment-id="674" data-orig-file="http://ramaral.files.wordpress.com/2013/05/img_1304.jpg" data-orig-size="1200,1600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Canon PowerShot SX150 IS&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1367356027&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;13.851&quot;,&quot;iso&quot;:&quot;640&quot;,&quot;shutter_speed&quot;:&quot;0.05&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="IMG_1304" data-image-description="" data-medium-file="http://ramaral.files.wordpress.com/2013/05/img_1304.jpg?w=225" data-large-file="http://ramaral.files.wordpress.com/2013/05/img_1304.jpg?w=625" width="112" height="150" src="http://ramaral.files.wordpress.com/2013/05/img_1304.jpg?w=112&#038;h=150" class="attachment-thumbnail" alt="Matheus apresenta introdução ao Django" /></a>

<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/662/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=662&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/05/07/primeiro-encontro-de-usuarios-python-de-sergipe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/05/wpd.png" medium="image">
			<media:title type="html">Resumo do 1º Encontro de Usuários Python de Sergipe</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/05/logo-pycursos.png?w=300" medium="image">
			<media:title type="html">logo-pycursos</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/05/logo-treinamentos-mobi.png?w=300" medium="image">
			<media:title type="html">logo-treinamentos.mobi</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/05/img_1296.jpg?w=150" medium="image">
			<media:title type="html">Davi apresenta palestra sobre Plone</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/05/img_1298.jpg?w=150" medium="image">
			<media:title type="html">Público presente ao encontro do PUG-SE</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/05/img_1301.jpg?w=150" medium="image">
			<media:title type="html">Onezino fala sobre Git</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/05/img_1304.jpg?w=112" medium="image">
			<media:title type="html">Matheus apresenta introdução ao Django</media:title>
		</media:content>
	</item>
		<item>
		<title>World Plone Day Aracaju + Encontro de Usuários Python de Sergipe</title>
		<link>http://rodrigoamaral.net/2013/04/23/world-plone-day-aracaju-encontro-de-usuarios-python-de-sergipe/</link>
		<comments>http://rodrigoamaral.net/2013/04/23/world-plone-day-aracaju-encontro-de-usuarios-python-de-sergipe/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 23:15:30 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[Plone]]></category>
		<category><![CDATA[pug-se]]></category>
		<category><![CDATA[sergipe]]></category>
		<category><![CDATA[user groups]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=652</guid>
		<description><![CDATA[Dia 30 de abril de 2013, às 19h, na Universidade Tiradentes<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=652&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://plone.org/events/wpd/hosts/aracaju-sergipe-brasil"><img class="size-full" title="World Plone Day Aracaju + Encontro de Usuários Python de Sergipe" alt="World Plone Day Aracaju + Encontro de Usuários Python de Sergipe" src="http://ramaral.files.wordpress.com/2013/04/cartaz-wpd2013.png?w=625"   /></a></p>
<p>Dia 30 de abril de 2013, às 19h, na <a href="http://goo.gl/maps/i5DFz" target="_blank">Universidade Tiradentes</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/652/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/652/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=652&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/04/23/world-plone-day-aracaju-encontro-de-usuarios-python-de-sergipe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/04/cartaz-wpd2013.png" medium="image">
			<media:title type="html">World Plone Day Aracaju + Encontro de Usuários Python de Sergipe</media:title>
		</media:content>
	</item>
		<item>
		<title>Links da semana &#8211; 16 a 22 de março</title>
		<link>http://rodrigoamaral.net/2013/03/23/links-da-semana-16-a-22-de-marco/</link>
		<comments>http://rodrigoamaral.net/2013/03/23/links-da-semana-16-a-22-de-marco/#comments</comments>
		<pubDate>Sat, 23 Mar 2013 14:05:50 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[cartoon]]></category>
		<category><![CDATA[computação]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[dinossauros]]></category>
		<category><![CDATA[donald knuth]]></category>
		<category><![CDATA[expressões regulares]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[pirate cinema]]></category>
		<category><![CDATA[pycon]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[slides]]></category>
		<category><![CDATA[voyager]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=645</guid>
		<description><![CDATA[Hovercraft — Biblioteca Python para gerar apresentações de slides em HTML e impress.js a partir de fontes em reStructured Text. Python.org Redesign Preview — Uma prévia de como está ficando o novo site oficial do Python. Future of Firefox DevTools — A equipe responsável pelas ferramentas de desenvolvedor do Firefox pediu sugestões sobre o que [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=645&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<ol>
<li><a href="https://github.com/regebro/hovercraft"><strong> Hovercraft </strong></a> — Biblioteca Python para gerar apresentações de slides em HTML e impress.js a partir de fontes em reStructured Text.</li>
<li><a href="http://preview.python.org/"><strong> Python.org Redesign Preview </strong></a> — Uma prévia de como está ficando o novo site oficial do Python.</li>
<li><a href="http://paulrouget.com/e/devtoolsnext/"><strong> Future of Firefox DevTools </strong></a> — A equipe responsável pelas ferramentas de desenvolvedor do Firefox pediu sugestões sobre o que os desenvolvedores gostariam de ter e está atendendo os pedidos. Vem coisa interessante por aí (alguém falou em interação entre editores de texto e o Firefox? Em Python?).</li>
<li><a href="http://nikic.github.com/2012/06/15/The-true-power-of-regular-expressions.html"><strong> The true power of regular expressions </strong></a> — Boa leitura para quem quer compreender melhor como funciona a &#8220;mágica&#8221; das expressões regulares.</li>
<li><a href="https://github.com/kragen/knuth-interview-2006"><strong> Donald Knuth Interview 2006 </strong></a> — Praticamente um livro &#8211; 110 páginas, caso fosse impresso &#8211; mas vale a pena dar uma olhada em alguns trechos para entender como funciona uma das grandes mentes da história da Ciência da Computação.</li>
<li><a href="http://g1.globo.com/ciencia-e-saude/noticia/2013/03/sonda-voyager-sai-do-sistema-solar.html"><strong> Sonda Voyager sai do Sistema Solar </strong></a> — Se já saiu mesmo ou ainda vai sair, não importa. O importante é que jogamos nosso brinquedinho longe pra caramba do berço.</li>
<li><a href="http://blogs.estadao.com.br/tatiana-dias/ecad-e-condenado-por-formacao-de-cartel/"><strong> Ecad é condenado por formação de cartel </strong></a> — Já é um avanço&#8230;<strong><a href="http://theoatmeal.com/"><img class="size-medium wp-image-646 aligncenter" title="Links da semana - 16 a 22 de março" alt="Links da semana - 16 a 22 de março" src="http://ramaral.files.wordpress.com/2013/03/the_oatmeal_logo.png?w=300&#038;h=72" width="300" height="72" /></a></strong></li>
<li><a href="http://theoatmeal.com/blog/dinosaur_hotel"><strong>This is a blog post about dinosaurs, Tesla, and a hotel in Colorado </strong></a> — Sou fã de Matthew Inman (The Oatmeal), talvez um dos melhores contadores de histórias na internet. Esse cartum, na verdade, é um prêmio que ele ofereceu para quem fizesse doação superior a 33 mil dólares para o Museu Tesla.</li>
<li><a href="http://galerarecord.com.br/catalogo/catalogogalera_det.php?id=394"><strong> Livro: Cinema Pirata </strong></a> — Terminei de ler essa semana. É uma história de ficção escrita por Cory Doctorow (BoingBoing), mas que na verdade acaba virando uma espécie de alerta sobre o quão absurdo poder ser o futuro próximo, no caso de legislações ditas defensoras dos direitos autorais serem aprovadas e postas em prática. Não vou dar spoiler, mas garanto que em vários momentos você vai pensar &#8220;Ei, isso já aconteceu/está acontecendo!&#8221;.</li>
</ol>
<p><strong>Pycon 2013</strong></p>
<ol>
<li><a href="https://speakerdeck.com/pyconslides/pycon-keynote-python-is-awesome-by-raymond-hettinger"><strong> Pycon Keynote: Python is Awesome by Raymond Hettinger </strong></a> — Ótima explicação das características que tornam Python&#8230; awesome :)</li>
<li><a href="https://speakerdeck.com/pyconslides"><strong> Talks by PyCon 2013 </strong></a> — Slides das palestras no SpeakerDeck</li>
<li><a href="http://pycon.github.com/2013-slides/"><strong> PyCon 2013 Slides </strong></a> — Slides das palestras que não puderam ser convertidos para PDF e colocados no SpeakerDeck</li>
<li><a href="http://lanyrd.com/2013/pycon/video/"><strong> Coverage of PyCon US 2013 </strong></a> — Vídeos das palestras da PyCon 2013</li>
</ol>
<p><strong>Python Nordeste 2013</strong></p>
<p>E aí? Já fez sua <a href="http://pythonnordeste.org/#inscricoes">inscrição</a> na <a href="http://pythonnordeste.org">Python Nordeste 2013</a>? Até <a href="https://en.wikipedia.org/wiki/Guido_van_Rossum">Guido van Rossum</a>, o <a href="https://en.wikipedia.org/wiki/Benevolent_Dictator_for_Life">BDFL</a> do Python, tá <a href="https://twitter.com/gvanrossum/status/314576206240575489">dando moral pro evento</a>! Primeiro lote de ingressos está saindo pelo preço promocional de apenas R$ 50 até o dia 30/03/2013.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/645/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=645&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/03/23/links-da-semana-16-a-22-de-marco/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/03/the_oatmeal_logo.png?w=300" medium="image">
			<media:title type="html">Links da semana - 16 a 22 de março</media:title>
		</media:content>
	</item>
		<item>
		<title>Guia para os atalhos de teclado do Sublime Text</title>
		<link>http://rodrigoamaral.net/2013/03/20/guia-para-os-atalhos-de-teclado-do-sublime-text/</link>
		<comments>http://rodrigoamaral.net/2013/03/20/guia-para-os-atalhos-de-teclado-do-sublime-text/#comments</comments>
		<pubDate>Wed, 20 Mar 2013 21:51:37 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Produtividade]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[atalhos de teclado]]></category>
		<category><![CDATA[digitação]]></category>
		<category><![CDATA[keyboard shortcuts]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[sublime text]]></category>
		<category><![CDATA[typing]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=640</guid>
		<description><![CDATA[Todo mundo que usa o computador para trabalhar durante muitas horas por dia já deve ter notado que um dos segredos para ser mais produtivo é tirar as mãos do teclado o menos possível. Aprender a digitar direito, eliminando alguns vícios adquiridos ao longo dos anos, também ajuda bastante. Quando falamos do Sublime Text, então, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=640&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-433 alignleft" title="Guia para os atalhos de teclado do Sublime Text" alt="Guia para os atalhos de teclado do Sublime Text" src="http://ramaral.files.wordpress.com/2012/06/sublime_text.png?w=150&#038;h=150" width="150" height="150" />Todo mundo que usa o computador para trabalhar durante muitas horas por dia já deve ter notado que um dos segredos para ser mais produtivo é tirar as mãos do teclado o menos possível. <a href="http://www.typeonline.co.uk/lesson1.html">Aprender a digitar direito</a>, eliminando alguns vícios adquiridos ao longo dos anos, também ajuda bastante.</p>
<p>Quando falamos do Sublime Text, então, a importância de aprender a usar os atalhos de teclado, ao invés de perder tempo alcançando o mouse, fica ainda mais evidente. O Sublime Text tem atalhos de teclado para quase tudo mas, quando se está iniciando, às vezes é um pouco difícil descobri-los e memorizá-los. Para facilitar a tarefa, seguem algumas dicas:</p>
<h3>Dedique alguns minutos para explorar os menus</h3>
<p>Vasculhar os menus quando não se está procurando por nenhum comando específico é muito útil para descobrir novos recursos. Em muitos casos, os atalhos de teclado são mostrados ao lado de cada item. Algo que também costumo fazer quando quero aprender os atalhos de alguma ferramenta é me forçar a procurar pelo comando desejado no menu, usando o mouse &#8211; para me lembrar de quanto é inconveniente, e por isso tenho que aprender o atalho o quanto antes &#8211; ver qual é o atalho e depois fechar o menu e usar o teclado. Faço isso toda vez que preciso executar o comando, até memorizar.</p>
<h3>Utilize a Command Palette</h3>
<p>Após se familarizar com os menus, comece a usar a Command Palette (<code>Ctrl+Shift+P</code>) para tudo. Com ela você poderá ter acesso a quase todos os comandos sem precisar alcançar o mouse, mesmo se não lembrar o atalho. Ao chamar a Command Palette, aparecerá uma lista de seleção com o recurso de autocompletar. Depois é só começar a digitar algumas letras da descrição do comando até encontrá-lo e pressionar <code>Enter</code>. Lembrando que, em muitos casos, o atalho específico de cada comando também aparece na Command Palette.</p>
<h3>Vasculhe os arquivos de configuração</h3>
<p>Se ainda não achou o atalho que você queria, nem nos menus, nem na Command Palette, não se desespere. O pulo do gato nesse caso é &#8220;partir pra ignorância&#8221; e ir fuçar nos arquivos de configuração do Sublime Text:</p>
<ol>
<li><span style="text-decoration:line-through;">Clique no&#8230; (oops!)</span> Ative a Command Palette e digite &#8220;keybindings default&#8221; para abrir o arquivo de configuração de atalhos padrão para seu sistema operacional. Lá são definidos todos os atalhos de teclado padrão.</li>
<li>Procure por um trecho de alguma palavra que descreva o comando desejado. Como não existem descrições textuais de cada ação, pode não ser tão simples encontrar na primeira tentativa, mas se um atalho existe, ele estará lá.</li>
</ol>
<p>Por exemplo, quando precisamos achar o atalho para duplicar uma linha, basta começar a procurar (<code>Ctrl+F</code>) no arquivo de configuração por &#8220;duplicate&#8221; e logo aparece a linha:</p>
<pre class="brush: jscript; light: true; title: ; notranslate">
{ &quot;keys&quot;: [&quot;ctrl+shift+d&quot;], &quot;command&quot;: &quot;duplicate_line&quot; },
</pre>
<p>E eis aí nosso atalho: <code>Ctrl+Shift+D</code>.</p>
<h3>E os atalhos para comandos dos plugins instalados?</h3>
<p>Os comandos dos <a href="http://rodrigoamaral.net/2012/07/01/criando-plugins-para-sublime-text/">plugins</a> muitas vezes não aparecem no menu nem na Command Palette. Descobri-los vai exigir um pouco do seu Sherlock Holmes interior, mas não é nenhum bicho de sete cabeças. Como todos os atalhos de teclados estão definidos em arquivos no formato JSON de fácil leitura, você vai precisar fazer o seguinte:</p>
<ol>
<li>Abrir a Command Palette.</li>
<li>Digitar &#8220;Browse Packages&#8221;.</li>
<li>Procurar e abrir a pasta com o nome do plugin cujo atalho para o comando você quer descobrir.</li>
<li>Procurar e abrir o arquivo de configuração de atalhos, que possui a extensão <code>sublime-keymap</code>. Lá estão todos os atalhos do plugin, é só procurar pelo que você precisa.</li>
</ol>
<hr />
<p>Conhece alguma outra dica de atalho do Sublime Text? Compartilhe com a gente nos comentários.</p>
<p><strong>Referência:</strong> dicas de <a href="http://joshearl.me/blog/">Josh Earl</a>, autor de <a href="https://leanpub.com/sublime-productivity">Sublime Productivity</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/640/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=640&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/03/20/guia-para-os-atalhos-de-teclado-do-sublime-text/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2012/06/sublime_text.png?w=150" medium="image">
			<media:title type="html">Guia para os atalhos de teclado do Sublime Text</media:title>
		</media:content>
	</item>
		<item>
		<title>Links da semana &#8211; 9 a 15 de março</title>
		<link>http://rodrigoamaral.net/2013/03/15/links-da-semana-9-a-15-de-marco/</link>
		<comments>http://rodrigoamaral.net/2013/03/15/links-da-semana-9-a-15-de-marco/#comments</comments>
		<pubDate>Sat, 16 Mar 2013 00:52:02 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[bookmarks]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[evernote]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[netflix]]></category>
		<category><![CDATA[nlp]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=631</guid>
		<description><![CDATA[Postgres: The Bits You Haven&#8217;t Found — Apresentação com dicas de recursos extremamente úteis para quem precisa trabalhar com banco de dados PostgreSQL. Django Projects — Django Best Practices — Reencontrei esse post essa semana. É sempre bom tê-lo por perto para relembrar as boas práticas na criação e manutenção de projetos Django. Como perder [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=631&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<ol>
<li><a href="http://postgres-bits.herokuapp.com/"><strong>Postgres: The Bits You Haven&#8217;t Found</strong></a> — Apresentação com dicas de recursos extremamente úteis para quem precisa trabalhar com banco de dados PostgreSQL.</li>
<li><a href="http://lincolnloop.com/django-best-practices/projects.html"><strong>Django Projects — Django Best Practices</strong></a> — Reencontrei esse post essa semana. É sempre bom tê-lo por perto para relembrar as boas práticas na criação e manutenção de projetos Django.</li>
<li><a href="http://browserdiet.com/pt/"><strong><img class="alignright size-thumbnail wp-image-632" alt="Links da semana - 9 a 15 de março" src="http://ramaral.files.wordpress.com/2013/03/superman.png?w=122&#038;h=150" width="122" height="150" />Como perder peso (no browser)</strong></a> — Guia de desempenho no front-end. Muito material para ajudar descobrir porque seu site está lento e como resolver os principais problemas de performance.</li>
<li><a href="http://techblog.netflix.com/2013/03/python-at-netflix.html?m=1"><strong>The Netflix Tech Blog: Python at Netflix</strong></a> — Mais um dos vários casos de sucesso de Python. O pessoal da Netflix explica com usa ferramentas baseadas na plataforma Python para manter <a href="http://articles.washingtonpost.com/2012-11-07/business/35507034_1_data-consumption-sandvine-bandwidth">um dos sites que consome mais largura de banda</a> na internet.</li>
<li><a href="http://lab.lepture.com/editor/"><strong>Editor Markdown &#8211; lab.lepture.com/editor</strong></a> — Editor markdown online. Simples, limpo e quebra um galho para quem não está habituado com a sintaxe.</li>
<li><a href="https://github.com/skuroda/FindKeyConflicts"><strong>FindKeyConflicts</strong></a> — Plugin para Sublime Text que identifica conflitos de teclas de atalho entre os demais plugins instalados. Indispensável para os pluginmaníacos, porque quanto mais plugins instalados, maior a chance das teclas de atalho utilizadas por eles coincidirem.</li>
<li><a href="http://www.globalfirepower.com/countries-listing.asp"><strong>Global Firepower Military Ranks &#8211; 2013</strong></a> — Curiosidade rápida sobre o poderio militar dos diversos países. Não li os critérios com calma, mas segundo esse ranking a Coreia do Norte não estaria com essa bola toda&#8230;</li>
<li><a href="http://nltk.org/book/"><strong>Natural Language Processing with Python</strong></a> — Livro online gratuito sobre Processamento de Linguagem Natural usando Python.</li>
<li><a href="http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html"><strong>Coding Horror: A Visual Explanation of SQL Joins</strong></a> — Quem nunca se atrapalhou escrevendo uma query SQL que atire a primeira pedra :)</li>
<li><a href="http://lifehacker.com/5989980/ive-been-using-evernote-all-wrong-heres-why-its-actually-amazing"><strong>I&#8217;ve Been Using Evernote All Wrong. Here&#8217;s Why It&#8217;s Actually Amazing</strong></a> — Esse artigo me chamou a atenção porque me identifiquei bastante com a parte de &#8220;nunca entendi o Evernote&#8221;.</li>
</ol>
<p><strong>Bonus Update:</strong></p>
<p><a title="Python Nordeste 2013" href="http://pythonnordeste.org"><strong>Python Nordeste 2013</strong></a> — Nos dias 24 e 25 de maio, em Fortaleza-CE, acontece a primeira edição da Python Nordeste, o grande encontro dos pythonistas na região Nordeste do Brasil. Dê uma olhada nos <a title="Kenynotes da Python Nordeste 2013" href="http://pythonnordeste.org/#palestrantes">keynotes</a> confirmados e diga se não vale a pena sair de qualquer lugar do país pra ver essas feras nesse evento arretado? As <a title="Faça sua inscrição para a Python Nordeste 2013" href="http://pythonnordeste.org/#inscricoes">inscrições</a> estão abertas! Corra lá!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/631/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=631&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/03/15/links-da-semana-9-a-15-de-marco/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/03/superman.png?w=122" medium="image">
			<media:title type="html">Links da semana - 9 a 15 de março</media:title>
		</media:content>
	</item>
		<item>
		<title>O fim do Google Reader: alternativas e considerações</title>
		<link>http://rodrigoamaral.net/2013/03/14/o-fim-do-google-reader-alternativas-e-consideracoes/</link>
		<comments>http://rodrigoamaral.net/2013/03/14/o-fim-do-google-reader-alternativas-e-consideracoes/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 21:00:21 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Produtividade]]></category>
		<category><![CDATA[alternativas]]></category>
		<category><![CDATA[feedly]]></category>
		<category><![CDATA[google reader]]></category>
		<category><![CDATA[netvibes]]></category>
		<category><![CDATA[newsblur]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[the old reader]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=622</guid>
		<description><![CDATA[Ontem à noite quando, surgiu a notícia do fim do Google Reader, começaram a me perguntar se eu conhecia alternativas ao serviço. É claro que vários sites que vivem para isso já tinham publicado suas listas de substitutos, por isso não tive trabalho para responder. Sobre considerações gerais sobre as motivações do Google, o Gizmodo [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=622&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Ontem à noite quando, surgiu a <a href="http://googlereader.blogspot.com.br/2013/03/powering-down-google-reader.html">notícia do fim do Google Reader</a>, começaram a me perguntar se eu conhecia alternativas ao serviço. É claro que vários sites que vivem para isso já tinham publicado suas <a href="http://lifehacker.com/5990456/google-reader-is-getting-shut-down-here-are-the-best-alternatives">listas de substitutos</a>, por isso não tive trabalho para responder.</p>
<p>Sobre considerações gerais sobre as motivações do Google, o Gizmodo Brasil também já soltou um <a href="http://www.gizmodo.com.br/google-reader-fim/">post excelente</a>, que ajudou a pensar melhor. Concordo com praticamente tudo, mas somente porque é como as coisas são, pelo jeito. Pode ser nostalgia de um tempo em que a internet era diferente, mas, para além de <a href="http://thenextweb.com/google/2013/03/14/former-google-reader-product-manager-confirms-our-suspicions-its-demise-is-all-about-google/">motivações corporativas do Google</a> em reorganizar seu portifólio de produtos, não consigo me acostumar com a ideia do rumo que a internet está tomando.</p>
<div id="attachment_623" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-623  " title="Google, Y U NO (complete a frase)" alt="Rage comic obrigatório para a ocasião" src="http://ramaral.files.wordpress.com/2013/03/annoyed-y-u-no.png?w=625"   /><p class="wp-caption-text">Rage comic obrigatório para a ocasião</p></div>
<p>Será que o fim do Reader, agregrador de feeds mais popular da história, não vai acabar arrastando o RSS para a cova também? Cada vez que um grande player da internet faz uma jogada que visa aumentar seus lucros, mas que também joga um caminhão de terra em cima de mais um protocolo ou padrão aberto, os princípios que fizeram a internet dar certo morrem um pouco junto.</p>
<p>Mas isso é só minha opinião, que fica melhor numa conversa de mesa de boteco. Vamos às alternativas!</p>
<h3><a href="http://feedly.com/">Feedly</a></h3>
<p>Eles já fizeram questão de dizer que estão <a href="http://blog.feedly.com/2013/03/14/google-reader/">totalmente prontos para nos receber</a>, na nossa nova condição de viúvas do Reader. A interface é impressionante, tão impressionante que chega a confundir quem está habituado ao Google Reader, mas é uma questão de costume. Requer extensão para browser. Já voltei a usar e provavelmente vou ficar nele, pelo menos até a alternativa abaixo se recuperar do susto e estabilizar.</p>
<h3><a href="http://theoldreader.com/">The Old Reader</a></h3>
<p>Provavelmente tomaram <a href="http://blog.theoldreader.com/post/45337829605/unexpected-day-what-are-we-gonna-do-about-google">o maior susto das suas vidas</a> nessa madrugada. O site era quase um hobby, mas o pessoal vai ter que aprender a crescer na marra. O objetivo inicial era acomodar quem sentia falta da interface e das funcionalidades do Reader antigo, pré-Google+.</p>
<h3><a href="http://www.netvibes.com">Netvibes</a></h3>
<p>Jogador antigo, está na área há tanto tempo quanto o Reader. Cheguei a usar o Netvibes um bom tempo antes de conhecer o Reader, mas parei por motivos óbvios. Hoje a plataforma está bem diferente e pode ser uma opção para quem se identificar.</p>
<h3><a href="http://www.newsblur.com/">NewsBlur</a></h3>
<p>Confesso que não conhecia até ontem. Tentei acessá-lo novamente agora há pouco e apareceu uma página com aviso de manutenção mas, pelo que vi, também tem uma interface bem bacana. Vale uma pesquisada depois.</p>
<hr />
<p>Essa são algumas opções mais semelhantes ao Reader. Existe ainda uma inifinidade de aplicativos desktop e mobile para todas as plataformas, mas isso existia antes do Reader, concorda?</p>
<p>Se você tem alguma dica de aplicativo web, desktop ou mobile, por favor compartilhe conosco nos comentários. É sempre bom conhecer mais opções diferentes.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/622/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/622/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=622&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/03/14/o-fim-do-google-reader-alternativas-e-consideracoes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/03/annoyed-y-u-no.png" medium="image">
			<media:title type="html">Google, Y U NO (complete a frase)</media:title>
		</media:content>
	</item>
		<item>
		<title>Não é magia, é o módulo itertools da biblioteca padrão do Python</title>
		<link>http://rodrigoamaral.net/2013/03/12/nao-e-magia-e-o-modulo-itertools-da-biblioteca-padrao-do-python/</link>
		<comments>http://rodrigoamaral.net/2013/03/12/nao-e-magia-e-o-modulo-itertools-da-biblioteca-padrao-do-python/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 22:22:31 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[análise combinatória]]></category>
		<category><![CDATA[itertools]]></category>
		<category><![CDATA[permutações]]></category>
		<category><![CDATA[séries]]></category>
		<category><![CDATA[sequências]]></category>
		<category><![CDATA[standard library]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=617</guid>
		<description><![CDATA[Quem ouve falar que Python vem com baterias incluídas, geralmente não imagina que elas estão mais próximas de uma usina nuclear do que de um par de pilhas Rayovale (sim, existe!). Nunca me canso de ficar surpreso toda vez que lembro que existem módulos como o itertools, por exemplo. Passeando pela documentação, é fácil encontrar [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=617&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://ramaral.files.wordpress.com/2013/03/python_batteries_included.jpg"><img class="alignleft size-thumbnail wp-image-619" title="Não é magia, é o módulo itertools da biblioteca padrão do Python" alt="Não é magia, é o módulo itertools da biblioteca padrão do Python" src="http://ramaral.files.wordpress.com/2013/03/python_batteries_included.jpg?w=150&#038;h=64" width="150" height="64" /></a>Quem ouve falar que Python vem com baterias incluídas, geralmente não imagina que elas estão mais próximas de uma usina nuclear do que de um par de pilhas <a href="http://www.inmetro.gov.br/consumidor/produtos/img/pilha3.jpg">Rayovale</a> (sim, <a href="http://www.inmetro.gov.br/consumidor/produtos/pilha.asp#dicas">existe</a>!). Nunca me canso de ficar surpreso toda vez que lembro que existem módulos como o <code>itertools</code>, por exemplo. Passeando pela documentação, é fácil encontrar funcionalidades poderosas, pérolas que podem salvar o dia em alguns minutos quando o seu problema é um desses:</p>
<h2>Percorrer os elementos de várias sequências de uma só vez</h2>
<p>Com a função <a href="http://docs.python.org/3/library/itertools.html#itertools.chain"><code>chain()</code></a>, basta fazer:</p>
<pre class="brush: python; light: true; title: ; notranslate">
&gt;&gt;&gt; import itertools
&gt;&gt;&gt; a = [100, 200, 300]
&gt;&gt;&gt; b = ('Newton', 'Einstein', 'Hawking', 'Cooper')
&gt;&gt;&gt; c = 'Python'
&gt;&gt;&gt; for item in itertools.chain(a, b, c):
...     print item
...
100
200
300
Newton
Einstein
Hawking
Cooper
P
y
t
h
o
n

</pre>
<h2>Calcular a soma acumulada a cada passo da iteração</h2>
<p>Vamos supor que uma criança guarda parte de sua mesada num cofrinho todo mês. Com a função <a href="http://docs.python.org/3/library/itertools.html#itertools.accumulate"><code>accumulate()</code></a> (Python 3) é possível calcular o valor economizado mês a mês:</p>
<pre class="brush: python; light: true; title: ; notranslate">
&gt;&gt;&gt; import itertools
&gt;&gt;&gt; cofrinho = [10, 12, 15, 5, 7, 0, 20, 13, 9, 0, 1, 16]
&gt;&gt;&gt; for mes, valor_guardado in enumerate(list(itertools.accumulate(cofrinho)), start=1):
...    print(mes, '= R$', valor_guardado)
...
1 = R$ 10
2 = R$ 22
3 = R$ 37
4 = R$ 42
5 = R$ 49
6 = R$ 49
7 = R$ 69
8 = R$ 82
9 = R$ 91
10 = R$ 91
11 = R$ 92
12 = R$ 108
</pre>
<p>Na verdade essa é apenas a funcionalidade mais básica da função <code>accumulate()</code>. É possível passar qual a função que será usada no lugar da soma, permitindo fazer operações muito mais complexas envolvendo séries de elementos. Mais detalhes podem ser vistos na <a href="http://docs.python.org/3/library/itertools.html#itertools.accumulate">documentação oficial</a>.</p>
<h2>Encontrar todas as possíveis combinações entre os elementos de um conjunto</h2>
<p>Lembra de <a href="http://www.brasilescola.com/matematica/analise-combinatoria.htm">análise combinatória</a> na escola? Uma entre as funções do módulo <code>itertools</code> que poderiam nos ajudar na hora do aperto é a <a href="http://docs.python.org/3/library/itertools.html#itertools.permutations"><code>permutations()</code></a>. Um problema clássico da análise combinatória é encontrar todos os <a href="http://pt.wikipedia.org/wiki/Anagrama#An.C3.A1lise_Combinat.C3.B3ria">anagramas</a> de uma palavra:</p>
<pre class="brush: python; light: true; title: ; notranslate">
&gt;&gt;&gt; import itertools
&gt;&gt;&gt; [''.join(anagrama) for anagrama in itertools.permutations('gato')]
['gato', 'gaot', 'gtao', 'gtoa', 'goat', 'gota', 'agto', 'agot', 'atgo', 'atog', 'aogt', 'aotg', 'tgao', 'tgoa', 'tago', 'taog', 'toga', 'toag', 'ogat', 'ogta', 'oagt', 'oatg', 'otga', 'otag']
</pre>
<hr />
<p>Esse é só um aperitivo das possibilidades do módulo <code>itertools</code>. A documentação oficial traz, além da referência de todas as funções do módulo, uma <a href="http://docs.python.org/3/library/itertools.html#itertools-recipes">seção só com receitas</a> do que se pode construir a partir da combinação das funções. Vale dar uma olhada, pois nunca se sabe quando vai ser necessário usar algo parecido.</p>
<h2>Referência</h2>
<ul>
<li><a href="http://docs.python.org/3/library/itertools.html">itertools — Functions creating iterators for efficient looping</a> (The Python Standard Library)</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/617/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/617/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=617&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/03/12/nao-e-magia-e-o-modulo-itertools-da-biblioteca-padrao-do-python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/03/python_batteries_included.jpg?w=150" medium="image">
			<media:title type="html">Não é magia, é o módulo itertools da biblioteca padrão do Python</media:title>
		</media:content>
	</item>
		<item>
		<title>Invertendo a lógica da felicidade</title>
		<link>http://rodrigoamaral.net/2013/03/07/invertendo-a-logica-da-felicidade/</link>
		<comments>http://rodrigoamaral.net/2013/03/07/invertendo-a-logica-da-felicidade/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 18:48:50 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Produtividade]]></category>
		<category><![CDATA[exercício]]></category>
		<category><![CDATA[felicidade]]></category>
		<category><![CDATA[meditação]]></category>
		<category><![CDATA[positividade]]></category>
		<category><![CDATA[ted]]></category>
		<category><![CDATA[ted talks]]></category>
		<category><![CDATA[trabalho]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=611</guid>
		<description><![CDATA[É comum acreditarmos na lógica de que o trabalho duro e produtivo leva ao sucesso (seja lá o que ele for) que por sua vez leva à felicidade (seja lá o que ela for). E se tentássemos inverter esse fluxo? Que tal primeiro cultivar a positividade para então conseguir trabalhar melhor? Essa palestra explora o [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=611&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>É comum acreditarmos na lógica de que o <strong>trabalho</strong> duro e produtivo leva ao <strong>sucesso</strong> (seja lá o que ele for) que por sua vez leva à <strong>felicidade</strong> (seja lá o que ela for). E se tentássemos inverter esse fluxo? Que tal primeiro cultivar a positividade para então conseguir trabalhar melhor? Essa palestra explora o assunto de forma (muito) engraçada e ainda dá dicas de bons hábitos para uma vida mais produtiva.</p>
<div class="embed-ted"><iframe src="http://embed.ted.com/talks/lang/pt-br/shawn_achor_the_happy_secret_to_better_work.html" width="625" height="351" frameborder="0" scrolling="no" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></div>
<p><strong>Referência: </strong><a href="http://www.ted.com/talks/lang/pt-br/shawn_achor_the_happy_secret_to_better_work.html">Shawn Achor: O feliz segredo para trabalhar melhor</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/611/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/611/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=611&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/03/07/invertendo-a-logica-da-felicidade/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>
	</item>
		<item>
		<title>Comandos Python em uma linha</title>
		<link>http://rodrigoamaral.net/2013/03/05/comandos-python-em-uma-linha/</link>
		<comments>http://rodrigoamaral.net/2013/03/05/comandos-python-em-uma-linha/#comments</comments>
		<pubDate>Wed, 06 Mar 2013 00:51:28 +0000</pubDate>
		<dc:creator>Rodrigo Amaral</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[micro sistemas]]></category>
		<category><![CDATA[one-liners]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://rodrigoamaral.net/?p=600</guid>
		<description><![CDATA[Já se vão mais de 15 anos desde que a última edição da saudosa revista Micro Sistemas foi publicada. Naquela época pré-internet, os curiosos que tentavam aprender como obrigar o computador a fazer exatamente o que eles queriam &#8211; vulgo programar &#8211; não tinham outra alternativa a não ser garimpar livros e revistas sobre o [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=600&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft  wp-image-560" title="Comandos Python em uma linha" alt="Comandos Python em uma linha" src="http://ramaral.files.wordpress.com/2013/02/python-doc-icon.jpg?w=141&#038;h=150" width="141" height="150" />Já se vão mais de 15 anos desde que a última edição da saudosa revista <a href="http://www.datacassete.com.br/revistas/edicao/Micro-Sistemas/57.html">Micro Sistemas</a> foi publicada. Naquela época pré-internet, os curiosos que tentavam aprender como obrigar o computador a fazer exatamente o que eles queriam &#8211; vulgo <em>programar</em> &#8211; não tinham outra alternativa a não ser garimpar livros e revistas sobre o assunto. Uma das minhas seções preferidas da Micro Sistemas era a dos jogos one-liner em BASIC e suas variantes. Meu primeiro contato com programação foi justamente a tentativa de copiar aquele emaranhado mágico e incompreensível de letras e números que vinha publicado na revista e <a title="Escape the Maze - a TRS-80 BASIC one-line game " href="http://www.youtube.com/watch?v=siu_f2Jcllc">tentar fazer aquilo funcionar</a>.</p>
<p>Hoje a informação é muito mais acessível e qualquer um pode aprender praticamente qualquer assunto, sobre qualquer ramo do conhecimento humano, desde que tenha disciplina para se dedicar o suficiente. Uma dentre as milhões de coisas bastante úteis de se aprender é o uso das opções de linha de comando do interpretador Python (finalmente cheguei onde queria!). Com elas é possível realizar vários tipos de tarefas em apenas 1 (uma) linha, direto do shell, sem sequer precisar editar um arquivo de código-fonte.</p>
<h2>A opção <code>-c &lt;comando&gt;</code></h2>
<p>Executa o código Python passado como argumento em <em>comando</em>, que pode ser uma ou mais declarações separados por indicadores de nova linha, no caso o ponto-e-vírgula (<code>;</code>). Vale lembrar que, assim como no código Python normal, espaços em branco no começo de cada linha são significativos. Portanto, cuidado.</p>
<h2>A opção <code>-m &lt;nome-do-módulo&gt;</code></h2>
<p>Procura no sys.path pelo <em>nome-do-módulo</em> e executa seu conteúdo como o módulo principal (<code>__main__</code>). Como o argumento é o nome de um módulo, você não deve passar a extensão (<code>.py</code>). O <em>nome-do-módulo</em> deveria ser um nome de módulo válido para o Python, mas pode ser que a implementação não force esse comportamento (ex.: pode permitir que você use um nome que contenha hífen).</p>
<h2>Exemplos de uso</h2>
<p>Com essas duas opções e um pouco de criatividade, é possível fazer coisas como:</p>
<h3>Imprimir o caminho de busca por módulos Python formatado</h3>
<p>Usando os módulos <a href="http://docs.python.org/2.7/library/sys.html"><code>sys</code></a> e <a href="http://docs.python.org/2/library/pprint.html"><code>pprint</code></a>:</p>
<pre class="brush: bash; auto-links: false; light: true; title: ; notranslate">
$ python -c 'import sys, pprint; pprint.pprint(sys.path)'
</pre>
<h3>Iniciar um servidor HTTP</h3>
<p>Este exemplo cria um servidor HTTP que serve o conteúdo do diretório corrente na porta 8081 usando o módulo <a href="http://docs.python.org/2/library/simplehttpserver.html">SimpleHTTPServer</a> :</p>
<pre class="brush: bash; auto-links: false; light: true; title: ; notranslate">
$ python -m SimpleHTTPServer 8081
</pre>
<h3>Obter lista dos releases disponíveis de um módulo do PyPI</h3>
<p>Usando o módulo <a href="http://docs.python.org/2/library/xmlrpclib.html"><code>xmlrpclib</code></a>:</p>
<pre class="brush: bash; auto-links: false; light: true; title: ; notranslate">
$ python -c 'import xmlrpclib; print xmlrpclib.Server(&quot;http://pypi.python.org/pypi&quot;).package_releases(&quot;Django&quot;)'
['1.5', '1.4.5', '1.4.4', '1.4.3', '1.3.7', '1.3.6', '1.3.5', '1.2.7', '1.1.4', '1.0.4']
</pre>
<h3>Medir o tempo de execução de um trecho de código</h3>
<p>Usando o módulo <a href="http://docs.python.org/2/library/timeit.html"><code>timeit</code></a> para descobrir qual implementação é mais rápida:</p>
<pre class="brush: bash; auto-links: false; light: true; title: ; notranslate">
$ python -m timeit '&quot;-&quot;.join(str(n) for n in range(100))'
10000 loops, best of 3: 35.3 usec per loop
$ python -m timeit '&quot;-&quot;.join([str(n) for n in range(100)])'
10000 loops, best of 3: 30.2 usec per loop
</pre>
<p>Conhece alguma outra aplicação útil das opções de linha de comando do Python? Compartilhe nos comentários!</p>
<h2>Referências</h2>
<ul>
<li><a href="http://www.vurt.ru/2013/02/python-command-line-oneliners/">Python command one liners</a> (Vurt.ru blog)</li>
<li><a href="http://docs.python.org/3/using/cmdline.html">Command line and environment</a> (Python v3.3.0 documentation)</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ramaral.wordpress.com/600/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ramaral.wordpress.com/600/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rodrigoamaral.net&#038;blog=9876794&#038;post=600&#038;subd=ramaral&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rodrigoamaral.net/2013/03/05/comandos-python-em-uma-linha/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c8162d1005bd8ea7ec6d4859852da46?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">amaral</media:title>
		</media:content>

		<media:content url="http://ramaral.files.wordpress.com/2013/02/python-doc-icon.jpg?w=141" medium="image">
			<media:title type="html">Comandos Python em uma linha</media:title>
		</media:content>
	</item>
	</channel>
</rss>
