<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://pythonologia.org/wp-atom.php">
	<title type="text">Pythonologia</title>
	<subtitle type="text">Python, open-source e desenvolvimento</subtitle>

	<updated>2009-11-06T15:34:25Z</updated>
	<generator uri="http://wordpress.org/" version="2.8.5">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://pythonologia.org" />
	<id>http://pythonologia.org/feed/atom/</id>
	

			<link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-nd/2.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><link rel="self" href="http://feeds.feedburner.com/pythonologia" type="application/atom+xml" /><feedburner:emailServiceId>pythonologia</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[[offtopic] Corinthians no Orkut]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/zq1uDTUpfK8/" />
		<id>http://pythonologia.org/?p=342</id>
		<updated>2009-11-06T15:34:25Z</updated>
		<published>2009-11-06T15:32:43Z</published>
		<category scheme="http://pythonologia.org" term="Python" />		<summary type="html">Meus amigos sabem que sou corintiano. Torcedor que acompanha o time, assiste aos jogos (menos no estádio por questões de segurança), veste a camisa e tudo o mais. Também sabem que trabalho com desenvolvimento de software e que sou heavy user de Internet.
Graças a esses contatos na rede fui um dos primeiros brasileiros a receber [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2009/11/06/offtopic-corinthians-no-orkut/">&lt;p&gt;Meus amigos sabem que sou &lt;a href="http://www.corinthians.com.br/"&gt;corintiano&lt;/a&gt;. Torcedor que acompanha o time, assiste aos jogos (menos no estádio por questões de segurança), veste a camisa e tudo o mais. Também sabem que trabalho com desenvolvimento de software e que sou &lt;em&gt;heavy user&lt;/em&gt; de Internet.&lt;/p&gt;
&lt;p&gt;Graças a esses contatos na rede fui um dos primeiros brasileiros a receber um convite para participar de um site novo do Google conhecido por &amp;#8220;Orkut&amp;#8221;. Era uma época onde comíamos dezenas (centenas até) de &amp;#8220;donut&amp;#8217;s&amp;#8221; que não eram entregues aos servidores.&lt;/p&gt;
&lt;p&gt;Os primeiros usuários do Orkut no Brasil estavam localizados no Sul (majoritariamente Porto Alegre) e em São Paulo (majoritariamente na Capital). A primeira comunidade que eu criei foi a &amp;#8220;Corinthians&amp;#8221; quanto só existia a do Internacional e do Grêmio. Sério! As primeiras comunidades de time de futebol do Brasil foram a do Colorado e a do Tricolor Gaúcho. Depois que eu criei a comunidade do Corinthians abriram as porteiras do Orkut (podiamos usá-lo sem convites) e outras comunidades foram criadas.&lt;/p&gt;
&lt;p&gt;Como era de se esperar as comunidades do Flamengo e do Corinthians cresceram mais do que as outras. Mas a comunidade do Corinthians, contradizendo certas pesquisas feitas por cariocas, sempre teve mais membros do que a do Flamengo.&lt;/p&gt;
&lt;p&gt;Como era de se esperar não demorou muito para começar as pixações. As ferramentas de moderação e de administração de comunidades do Orkut se limitavam à aprovação um a um dos inscritos na comunidade e a exclusão dos baderneiros (sem opção de banir).&lt;/p&gt;
&lt;p&gt;A coisa ficou &amp;#8220;feia&amp;#8221; quando chegamos a 600.000 integrantes e uma média de 300 novos inscritos por *dia*. Todos devidamente moderados somente por mim num processo que me obrigava a visitar perfil por perfil dos novos usuários para ver se o usuário já não estava em outra comunidade de time de futebol (o torcedor entra pra comunidade do seu clube antes de entrar na dos clubes adversários para pixar).&lt;/p&gt;
&lt;p&gt;Não dava mais. Eu passava o dia inteiro mexendo só com isso num trabalho não-remunerado (ter uma comunidade desse tamanho, naquela época, não rendia dinheiro algum).&lt;/p&gt;
&lt;p&gt;Chegou a hora de tomar algumas medidas: pedir ajuda na moderação e criar regras para lidar com os arruaceiros que chegavam às centenas após um jogo.&lt;/p&gt;
&lt;p&gt;Chamei meus amigos corintianos &lt;a href="http://www.erico.com.br/"&gt;Érico&lt;/a&gt; (que torce pro &lt;a href="http://www.juventus.com.br/"&gt;Juventus&lt;/a&gt; nas horas vagas) e &lt;a href="http://mortualha.blogspot.com/"&gt;Márcio Medrado&lt;/a&gt; para me ajudar na moderação. Na época só um usuário podia administrar uma comunidade. Criamos o usuário &amp;#8220;Gilmar Giovanelli&amp;#8221; para essa função e distribuímos a senha entre nós. Esse problema estava resolvido faltava resolver o problema das pixações.&lt;/p&gt;
&lt;p&gt;Entrei em contato com os moderadores das comunidades do Flamengo, Palmeiras, Santos e São Paulo pra perguntar a eles como faziam para resolver o problema dos &amp;#8220;ataques&amp;#8221; e me disseram que lidavam com aquilo caso-a-caso numa hercúlea tarefa de enxugar gelo. Exatamente o que estávamos fazendo.&lt;/p&gt;
&lt;p&gt;Conversa vai, conversa vem, sugeri criar regras comunitárias válidas para todas as nossas comunidades. Essas regras eram discutidas na comunidade &amp;#8220;Clube dos 13&amp;#8243;.&lt;/p&gt;
&lt;p&gt;A regra mais importante dizia que quando, por exemplo, um flamenguista invadia a comunidade do Corinthians para tumultuar ele era banido da comunidade do Corinthians e uma solicitação era feita no Clube dos 13 para ele ser banido da comunidade do seu próprio clube. Isso funcionou lindamente por muito tempo. Só não sei se ainda funciona.&lt;/p&gt;
&lt;p&gt;Chegamos a 800.000 membros, a segunda maior comunidade da categoria &amp;#8220;Sports &amp;#038; Recreations&amp;#8221; do Orkut. Só perdiamos para &amp;#8220;Eu adoro praia&amp;#8221; (concorrência desleal &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; ). Os outros seguiam: Flamengo, São Paulo, Palmeiras e Santos.&lt;/p&gt;
&lt;p&gt;Mas a história teve um final triste: por conta de um bug no Orkut (um?) as comunidades perderam os moderadores e uma mensagem &amp;#8220;become a moderator&amp;#8221; surgiu na comunidade do Corinthians (na do Flamengo também). No caso do Flamengo um usuário pegou a moderação e transferiu devolta para o antigo dono. No nosso caso o usuário que assumiu a moderação brigou com alguns membros porque não queria devolvê-la ao &amp;#8220;Gilmar&amp;#8221; e &lt;strong&gt;apagou&lt;/strong&gt; a comunidade.&lt;/p&gt;
&lt;p&gt;Tentamos de todas as formas contatos com a equipe do Orkut para pegar devolta a comunidade mas nada feito.&lt;/p&gt;
&lt;p&gt;Não demorou muito e outra comunidade Corinthians foi criada. As pessoas foram voltando, mas mesmo assim não era mais &amp;#8220;aquela&amp;#8221; comunidade. O lado bom disso: o trabalho era grande, difícil e não-remunerado. Tiramos um peso muito grande das costas.&lt;/p&gt;
&lt;p&gt;Por outro lado, imagina a &amp;#8220;influência&amp;#8221; que teríamos hoje, em tempos de &amp;#8220;Marketing Social&amp;#8221;, ter uma comunidade com cerca de um milhão de membros? &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;(PS. esse post surgiu a partir da minha ideia de recriar a comunidade Corinthians no novo Orkut. Mas para isso eu preciso de um convite &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /&gt; )&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=zq1uDTUpfK8:0juE-N6pweA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=zq1uDTUpfK8:0juE-N6pweA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2009/11/06/offtopic-corinthians-no-orkut/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2009/11/06/offtopic-corinthians-no-orkut/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://pythonologia.org/2009/11/06/offtopic-corinthians-no-orkut/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[Home, End, Page Up and Page Down configuration for Mac (Snow Leopard)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/211RlSE5avo/" />
		<id>http://pythonologia.org/?p=334</id>
		<updated>2009-10-20T13:56:45Z</updated>
		<published>2009-10-20T13:56:45Z</published>
		<category scheme="http://pythonologia.org" term="Software" /><category scheme="http://pythonologia.org" term="bash" /><category scheme="http://pythonologia.org" term="end" /><category scheme="http://pythonologia.org" term="firefox" /><category scheme="http://pythonologia.org" term="home" /><category scheme="http://pythonologia.org" term="keyboard" /><category scheme="http://pythonologia.org" term="leopard" /><category scheme="http://pythonologia.org" term="mac" /><category scheme="http://pythonologia.org" term="os x" /><category scheme="http://pythonologia.org" term="osx" /><category scheme="http://pythonologia.org" term="page down" /><category scheme="http://pythonologia.org" term="page up" /><category scheme="http://pythonologia.org" term="settings" /><category scheme="http://pythonologia.org" term="snow leopard" /><category scheme="http://pythonologia.org" term="terminal" /><category scheme="http://pythonologia.org" term="terminal.app" /><category scheme="http://pythonologia.org" term="vim" />		<summary type="html">Terminal.app
Enter &amp;#8220;Terminal-&gt;Preferences-&gt;Settings-&gt;Keyboard&amp;#8220;, and change the following options:
Vi Mode

Home: \033[H
End: \033[F
PageUp: \033[5~
PageDown: \033[6~

Emacs Mode

Home: \033[1~
End: \033[4~
PageUp: \033[5~
PageDown: \033[6~

Bash/Readline
Edit your ~/.inputrc and add the following lines:
Common settings

# Be 8 bit clean.
set input-meta on
set output-meta on
set convert-meta off

# allow the use of the Delete/Insert keys
"\e[3~": delete-char
"\e[2~": quoted-insert

# mappings for "page up" and "page down"
# to step to the [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2009/10/20/home-end-page-up-and-page-down-configuration-for-mac-snow-leopard/">&lt;h3&gt;Terminal.app&lt;/h3&gt;
&lt;p&gt;Enter &amp;#8220;&lt;tt&gt;Terminal-&gt;Preferences-&gt;Settings-&gt;Keyboard&lt;/tt&gt;&amp;#8220;, and change the following options:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vi Mode&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
Home: \033[H
End: \033[F
PageUp: \033[5~
PageDown: \033[6~
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Emacs Mode&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
Home: \033[1~
End: \033[4~
PageUp: \033[5~
PageDown: \033[6~
&lt;/pre&gt;
&lt;h3&gt;Bash/Readline&lt;/h3&gt;
&lt;p&gt;Edit your &lt;tt&gt;~/.inputrc&lt;/tt&gt; and add the following lines:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Common settings&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
# Be 8 bit clean.
set input-meta on
set output-meta on
set convert-meta off

# allow the use of the Delete/Insert keys
"\e[3~": delete-char
"\e[2~": quoted-insert

# mappings for "page up" and "page down"
# to step to the beginning/end
# of the history
"\e[5~": beginning-of-history
"\e[6~": end-of-history
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Vim mode settings&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
# Vi mode
set editing-mode vi
set keymap vi

# allow the use of the Home/End keys
"\e[H": beginning-of-line
"\e[F": end-of-line
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Emacs mode settings&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
# allow the use of the Home/End keys
"\e[1~": beginning-of-line
"\e[4~": end-of-line
&lt;/pre&gt;
&lt;h3&gt;Vim&lt;/h3&gt;
&lt;p&gt;Edit the file &lt;tt&gt;~/.vimrc&lt;/tt&gt; and add the following options:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Terminal configured with Vi mode&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
map [H
imap [H
map [F
imap [F
map [5~
imap [5~
map [6~
imap [6~
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Terminal configured with Emacs mode&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
map [1~
imap [1~
map [4~
imap [4~
map [5~
imap [5~
map [6~
imap [6~
&lt;/pre&gt;
&lt;h3&gt;Cocoa Keybindings&lt;/h3&gt;
&lt;p&gt;Put the following lines in &lt;tt&gt;~/Library/KeyBindings/DefaultKeyBinding.dict&lt;/tt&gt;:&lt;/p&gt;
&lt;pre&gt;
{
    /* home */
    "\UF729" = "moveToBeginningOfLine:";
    "$\UF729" = "moveToBeginningOfLineAndModifySelection:";

    /* end */
    "\UF72B"  = "moveToEndOfLine:";
    "$\UF72B" = "moveToEndOfLineAndModifySelection:";

    /* page up */
    "\UF72C"  = "pageUp:";
    "$\UF72C" = "pageUpAndModifySelection:";

    /* page down */
    "\UF72D"  = "pageDown:";
    "$\UF72D" = "pageDownAndModifySelection:";
}
&lt;/pre&gt;
&lt;h3&gt;Firefox&lt;/h3&gt;
&lt;p&gt;Install the following &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/9796"&gt;Firefox extension&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://serverfault.com/questions/73013/vim-keyboard-remap-on-snow-leopard-macos-10-6/73248#73248"&gt;http://serverfault.com/questions/73013/vim-keyboard-remap-on-snow-leopard-macos-10-6/73248#73248&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tech.inhelsinki.nl/gnu_developement_under_mac_os_x/"&gt;http://tech.inhelsinki.nl/gnu_developement_under_mac_os_x/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://heisencoder.net/2008/11/keyfixer-04-for-firefox-and-thunderbird.html"&gt;http://heisencoder.net/2008/11/keyfixer-04-for-firefox-and-thunderbird.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fdiv.net/2007/05/12/keybindings-in-macosx-terminal-app/"&gt;http://fdiv.net/2007/05/12/keybindings-in-macosx-terminal-app/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=211RlSE5avo:zvl9xIPoj4Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=211RlSE5avo:zvl9xIPoj4Q:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2009/10/20/home-end-page-up-and-page-down-configuration-for-mac-snow-leopard/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2009/10/20/home-end-page-up-and-page-down-configuration-for-mac-snow-leopard/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://pythonologia.org/2009/10/20/home-end-page-up-and-page-down-configuration-for-mac-snow-leopard/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[É mais fácil pedir desculpas do que permissão]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/lfKFFpcuc_s/" />
		<id>http://pythonologia.org/?p=324</id>
		<updated>2009-09-02T14:43:53Z</updated>
		<published>2009-09-02T14:43:53Z</published>
		<category scheme="http://pythonologia.org" term="Python" />		<summary type="html">Diferente do que escrevi no post Dicas para um bom programa em Python, onde eu dou dicas de como proceder para ter um programa Python melhor, desta vez vou falar sobre um estilo que prefiro. Não quero dizer que estou certo ou errado, apenas que prefiro assim.
It&amp;#8217;s easier to ask forgiveness than it is to [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2009/09/02/e-mais-facil-pedir-desculpas-do-que-permissao/">&lt;p&gt;Diferente do que escrevi no &lt;em&gt;post&lt;/em&gt; &lt;a href="http://pythonologia.org/2009/03/03/dicas-para-um-bom-programa-em-python/"&gt;Dicas para um bom programa em Python&lt;/a&gt;, onde eu dou dicas de como proceder para ter um programa Python melhor, desta vez vou falar sobre um estilo que prefiro. Não quero dizer que estou certo ou errado, apenas que prefiro assim.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;It&amp;#8217;s easier to ask forgiveness than it is to get permission — Grace Hopper&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Recentemente, dentro do tempo que me sobrava, comecei a desenvolver uma biblioteca pra fazer requisições HTTP para uma API REST. Essa biblioteca seria usada para criar testes automatizados do projeto que iremos começar a desenvolver aqui na empresa.&lt;/p&gt;
&lt;p&gt;Essa biblioteca faria basicamente o mesmo que a httplib e httplib2 do Python mas com algumas conveniências: (de)serialização de JSON/XML, conteúdo calculado no momento da &lt;em&gt;request&lt;/em&gt; (ex. assinatura da requisição), e uma classe &amp;#8220;TestCase-like&amp;#8221; com funções que auxiliassem no desenvolvimento de testes.&lt;/p&gt;
&lt;p&gt;Eu tinha só algumas idéias do que essa biblioteca faria e quase nada de código quando vi o lançamento do &lt;a href="http://planeta-globo.com/2009/08/09/bolacha-httplib2-wrapper-with-cookie-handling-and-file-upload/"&gt;Bolacha&lt;/a&gt;, desenvolvido pelo Gabriel Falcão, no &lt;a href="http://planeta-globo.com/"&gt;Planeta Globo.com&lt;/a&gt;. Guardei o &lt;em&gt;link&lt;/em&gt; pra conferir depois pois poderia ser útil para o que eu queria fazer.&lt;/p&gt;
&lt;p&gt;Ontem eu tive um tempo para analisar e vi que ele não só seria útil como já fazia a parte mais essencial do que eu precisava (requisições GET/POST/PUT/DELETE/&amp;#8230;).&lt;/p&gt;
&lt;p&gt;Como o projeto esta hospedado no &lt;a href="http://github.com/"&gt;github.com&lt;/a&gt; tratei logo de fazer um &lt;em&gt;fork&lt;/em&gt; para criar as outras funcionalidades que eu precisava. Código legal, código simples, código bem feito, mas&amp;#8230; quando encontrei os primeiros&amp;#8230;&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; request&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;self&lt;/span&gt;, url, method, body=&lt;span style="color: #008000;"&gt;None&lt;/span&gt;, headers=&lt;span style="color: #008000;"&gt;None&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
  &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;not&lt;/span&gt; &lt;span style="color: #008000;"&gt;isinstance&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;url, &lt;span style="color: #008000;"&gt;basestring&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span style="color: #ff7700;font-weight:bold;"&gt;raise&lt;/span&gt; &lt;span style="color: #008000;"&gt;TypeError&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;'Bolacha.request, parameter url must be '&lt;/span&gt; \
              &lt;span style="color: #483d8b;"&gt;'a string. Got %s'&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;%&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;repr&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;url&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
  &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;not&lt;/span&gt; &lt;span style="color: #008000;"&gt;isinstance&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;method, &lt;span style="color: #008000;"&gt;basestring&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span style="color: #ff7700;font-weight:bold;"&gt;raise&lt;/span&gt; &lt;span style="color: #008000;"&gt;TypeError&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;'Bolacha.request, parameter method must be '&lt;/span&gt; \
              &lt;span style="color: #483d8b;"&gt;'a string. Got %s'&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;%&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;repr&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;method&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
  &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; method &lt;span style="color: #ff7700;font-weight:bold;"&gt;not&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; HTTP_METHODS:
    &lt;span style="color: #ff7700;font-weight:bold;"&gt;raise&lt;/span&gt; &lt;span style="color: #008000;"&gt;TypeError&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;'Bolacha.request, parameter method must be '&lt;/span&gt; \
              &lt;span style="color: #483d8b;"&gt;'a valid HTTP method. Got %s. %s'&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;%&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;method,
                                                    RFC_LOCATION&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #808080; font-style: italic;"&gt;# ...continua&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&amp;#8230; notei que o estilo do Gabriel divergia do meu. Nada errado com isso. Tanto que, mesmo assim, continuarei a usar e melhorar o Bolacha mantendo (dentro do possível) o mesmo estilo original do autor para que ele possa aceitar minhas contribuições.&lt;/p&gt;
&lt;p&gt;O que não gosto desse estilo é que, com ele, sempre estamos pedindo permissão, ou seja, verificando de antemão alguma informação no lugar de usá-la imediatamente e, só em caso de erro, considerá-las inválida. Nesse caso estamos adicionando um &lt;em&gt;overhead&lt;/em&gt; desnecessário (muito pequeno neste exemplo) até mesmo para casos de uso correto do método.&lt;/p&gt;
&lt;p&gt;Outro problema que temos nesse estilo reside no fato de que estamos usando o mecanismo de herança da linguagem como um sistema de criação de interface para o objeto. Se eu quiser passar um objeto que se comporta exatamente como uma &lt;em&gt;string&lt;/em&gt; mas que não seja uma classe derivada de &lt;tt&gt;basestring()&lt;/tt&gt; para o método &lt;tt&gt;.request()&lt;/tt&gt; acima eu não vou poder.&lt;/p&gt;
&lt;p&gt;Eu removeria todas as verificações de &lt;tt&gt;isinstance()&lt;/tt&gt; e deixaria o código assim:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; request&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;self&lt;/span&gt;, url, method, body=&lt;span style="color: #008000;"&gt;None&lt;/span&gt;, headers=&lt;span style="color: #008000;"&gt;None&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
  &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; method &lt;span style="color: #ff7700;font-weight:bold;"&gt;not&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; HTTP_METHODS:
    &lt;span style="color: #ff7700;font-weight:bold;"&gt;raise&lt;/span&gt; &lt;span style="color: #008000;"&gt;TypeError&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;'Bolacha.request, parameter method must be '&lt;/span&gt; \
          &lt;span style="color: #483d8b;"&gt;'a valid HTTP method. Got %s. %s'&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;%&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;method,
                                                    RFC_LOCATION&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #808080; font-style: italic;"&gt;# ... continua&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Mais adiante nesse código vemos o uso de uma função chamada &lt;tt&gt;is_file()&lt;/tt&gt; que é implementada da seguinte forma:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; is_file&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;obj&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
  &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span style="color: #008000;"&gt;hasattr&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;obj, &lt;span style="color: #483d8b;"&gt;'read'&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;and&lt;/span&gt; &lt;span style="color: #008000;"&gt;callable&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;obj.&lt;span style="color: black;"&gt;read&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Mais uma vez, nada de errado. Mas também não é muito o meu estilo. No meu estilo essa função sequer existiria porque, mais adiante, quando fosse necessário usar &lt;tt&gt;obj&lt;/tt&gt; que, no código em questão, pode ser uma &lt;em&gt;string&lt;/em&gt; ou um &lt;em&gt;file object&lt;/em&gt;, eu faria algo assim:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;try&lt;/span&gt;:
  lines.&lt;span style="color: black;"&gt;extend&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;encode_file&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;obj&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;except&lt;/span&gt; &lt;span style="color: #008000;"&gt;AttributeError&lt;/span&gt;:
  lines.&lt;span style="color: black;"&gt;extend&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;'...'&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Mais uma vez eu quero deixar claro que é só  uma questão de diferença de estilo e que eu usei o código do Bolacha somente para ilustrar essa diferença. Dentro do estilo do Gabriel o código está perfeito (tá, não existe código perfeito, mas o dele tá muito bom).&lt;/p&gt;
&lt;p&gt;Como leitura complementar sobre essas diferenças eu recomendo o artigo &lt;a href="http://www.canonical.org/~kragen/isinstance/"&gt;&lt;tt&gt;isinstance()&lt;/tt&gt; considered harmful&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Duck_typing"&gt;Duck Typing&lt;/a&gt;, &lt;a href="http://wordaligned.org/articles/permission-and-forgiveness"&gt;Permission and Forgiveness&lt;/a&gt; e &lt;a href="http://www.python.org/dev/peps/pep-3119/"&gt;PEP-3119 &amp;#8211; Introducing Abstract Base Classes&lt;/a&gt; (funcionalidade de suporte ao estilo usado no Bolacha).&lt;/p&gt;
&lt;p&gt;Por último, ao meu estilo, gostaria de pedir desculpas ao Gabriel Falcão por ter usado o código do Bolacha para ilustrar esse artigo sem permissão. &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=lfKFFpcuc_s:A_zE8k5lHXs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=lfKFFpcuc_s:A_zE8k5lHXs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2009/09/02/e-mais-facil-pedir-desculpas-do-que-permissao/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2009/09/02/e-mais-facil-pedir-desculpas-do-que-permissao/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://pythonologia.org/2009/09/02/e-mais-facil-pedir-desculpas-do-que-permissao/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[PythonBrasil [5]]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/QKCGu6aRkuU/" />
		<id>http://pythonologia.org/?p=312</id>
		<updated>2009-07-22T17:50:24Z</updated>
		<published>2009-07-22T17:50:24Z</published>
		<category scheme="http://pythonologia.org" term="Python" />		<summary type="html">


Os preparativos para a 5ª edição do encontro brasileiro da comunidade Python já estão a todo vapor (o evento era conhecido anteriormente como PyConBrasil).
A PythonBrasil[5] acontecerá em Caxias do Sul &amp;#8211; RS nos dias 10, 11 e 12 de setembro no campus da Universidade de Caxias do Sul (UCS).
As inscrições já estão abertas e é [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2009/07/22/pythonbrasil-5/">&lt;div class="book"&gt;&lt;a href="http://www.pythonbrasil.org.br/" title="PythonBrasil[5]"&gt;&lt;br /&gt;
&lt;img src="http://www.pythonbrasil.org.br/2009/saiba-mais/apoio-divulgue/pythonbrasil-halfbanner.gif" alt="PythonBrasil[5]" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Os preparativos para a 5ª edição do encontro brasileiro da comunidade Python já estão a todo vapor (o evento era conhecido anteriormente como PyConBrasil).&lt;/p&gt;
&lt;p&gt;A &lt;a href="http://www.pythonbrasil.org.br/"&gt;PythonBrasil[5]&lt;/a&gt; acontecerá em &lt;a href="http://www.pythonbrasil.org.br/2009/programe-sua-viagem/caxias-do-sul"&gt;Caxias do Sul &amp;#8211; RS&lt;/a&gt; nos dias 10, 11 e 12 de setembro no campus da &lt;a href="http://www.ucs.br/"&gt;Universidade de Caxias do Sul (UCS)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As &lt;a href="http://www.pythonbrasil.org.br/2009/sobre-o-evento/inscricoes"&gt;inscrições já estão abertas&lt;/a&gt; e é possível adquirí-los com o desconto máximo até o dia 07 de agosto. Depois disso os valores vão aumentando. Estudante, membros da Associação Python Brasil, da Abraweb e da SBC contam ainda com descontos.&lt;/p&gt;
&lt;p&gt;Além das inscrições a &lt;a href="http://www.pythonbrasil.org.br/2009/sobre-o-evento/chamada-de-trabalhos"&gt;Chamada para Trabalhos&lt;/a&gt; também estará aberta até o dia &lt;strong&gt;26 de Julho (domingo agora! Não perca tempo!)&lt;/strong&gt; para palestras e treinamentos.&lt;/p&gt;
&lt;p&gt;Eu, como não podia deixar de ser, participei de todas as edições da conferência e posso dizer: é fantástico. O encontro com os amigos, as palestras surpreendentes e a interação com o público (que é fácil por conta do tamanho do evento) fazem esse evento único.&lt;/p&gt;
&lt;p&gt;Gostaria de pedir pros leitores do meu blog que ajudem na divulgação do mesmo. Vocês encontrarão o material para isso no próprio &lt;a href="http://www.pythonbrasil.org.br/2009/saiba-mais/apoio-divulgue"&gt;site&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=QKCGu6aRkuU:lNPFx1OsRC4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=QKCGu6aRkuU:lNPFx1OsRC4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2009/07/22/pythonbrasil-5/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2009/07/22/pythonbrasil-5/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://pythonologia.org/2009/07/22/pythonbrasil-5/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[Dicas para um bom programa em Python]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/jyfrVNZwYhQ/" />
		<id>http://pythonologia.org/?p=282</id>
		<updated>2009-06-18T03:47:54Z</updated>
		<published>2009-03-03T18:09:27Z</published>
		<category scheme="http://pythonologia.org" term="Python" />		<summary type="html">Oi pessoal, desta vez eu vou pular as &amp;#8216;desculpas&amp;#8217; por ter demorado tanto para postar aqui no blog e vamos direto ao assunto.
Recentemente eu tenho trabalhado bastante com Python (dã!) desenvolvendo projetos de diversos tipos e resolvi escrever aqui sobre algumas coisas que pratico enquanto desenvolvo.
Código mais robusto
Deu certo ou errado?
O que você faz quando [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2009/03/03/dicas-para-um-bom-programa-em-python/">&lt;p&gt;Oi pessoal, desta vez eu vou pular as &amp;#8216;desculpas&amp;#8217; por ter demorado tanto para postar aqui no blog e vamos direto ao assunto.&lt;/p&gt;
&lt;p&gt;Recentemente eu tenho trabalhado bastante com Python (dã!) desenvolvendo projetos de diversos tipos e resolvi escrever aqui sobre algumas coisas que pratico enquanto desenvolvo.&lt;/p&gt;
&lt;h3&gt;Código mais robusto&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Deu certo ou errado?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O que você faz quando acontece algo errado na execução do seu método? O que você responde à requisição que lhe foi feita?&lt;/p&gt;
&lt;p&gt;Eu tenho visto em muito código por aí os desenvolvedores retornando valores sentinela (&lt;tt&gt;None&lt;/tt&gt;, &lt;tt&gt;null&lt;/tt&gt;, 0, -1, etc.) para avisar que algo incorreto aconteceu na execução do método.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; f&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;arg&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;not&lt;/span&gt; arg:
      &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span style="color: #008000;"&gt;None&lt;/span&gt;
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;&amp;quot;resultado&amp;quot;&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;&amp;quot;de&amp;quot;&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;&amp;quot;um&amp;quot;&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;&amp;quot;processamento&amp;quot;&lt;/span&gt;  &lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Algumas linguagens de programação não possuem estruturas de tratamento de exceção e, neste caso, o uso de sentinelas é válido. Mas quando a linguagem de programação te disponibiliza essa funcionalidade é bom usá-la.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; f&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;arg&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;not&lt;/span&gt; arg:
      &lt;span style="color: #ff7700;font-weight:bold;"&gt;raise&lt;/span&gt; &lt;span style="color: #008000;"&gt;ValueError&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot;Argumento Invalido&amp;quot;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;&amp;quot;resultado&amp;quot;&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;&amp;quot;de&amp;quot;&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;&amp;quot;um&amp;quot;&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;&amp;quot;processamento&amp;quot;&lt;/span&gt;  &lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Deixem as exceções fluirem.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Isso mesmo. A menos que você saiba exatamente o que você deve fazer quando uma exceção aparece deixe-a exceção &amp;#8220;subir&amp;#8221;. Pode ser que &amp;#8220;lá em cima&amp;#8221; alguém saiba cuidar dela adequadamente.&lt;/p&gt;
&lt;p&gt;Quando não fazemos isso estamos ocultando informação importante para os usuários do nosso código (sejam eles usuários, outros desenvolvedores ou nós mesmos).&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; f&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;try&lt;/span&gt;:
      &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; conecta&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;except&lt;/span&gt; ExcecaoQueDeveriaSerErro:
      &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span style="color: #008000;"&gt;None&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Quando eu implemento esse tipo de método/função eu faço assim (na verdade eu não implementaria &lt;tt&gt;f()&lt;/tt&gt; e chamaria &lt;tt&gt;conecta()&lt;/tt&gt;):&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; f&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; conecta&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;O que seu método/função retorna?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Código que eu encontrei recentemente:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; get_fulanos&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   q = Q&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot;select * from patuleia where alcunha like 'fulano%'&amp;quot;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
   ret = &lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #008000;"&gt;str&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;fulano&lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;'nome'&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;for&lt;/span&gt; fulano &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; q &lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; &lt;span style="color: #008000;"&gt;len&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;ret&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt; == &lt;span style="color: #ff4500;"&gt;1&lt;/span&gt;:
      &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; ret&lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; ret&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Perceberam o que está errado? O seu método retorna uma lista de Fulanos ou retorna Fulano?&lt;/p&gt;
&lt;p&gt;Isso está conceitualmente errado e pode fazer você perder horas preciosas do seu dia tentando achar um bug causado por esse tipo de código.&lt;/p&gt;
&lt;p&gt;Aconteceu comigo. Note que &lt;tt&gt;str()&lt;/tt&gt; implementa uma interface de &lt;em&gt;sequence&lt;/em&gt; da mesma forma que &lt;tt&gt;list()&lt;/tt&gt;. Então o erro passa silenciosamente no caso abaixo:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;old_fulanos = &lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;&amp;quot;Ze Ruela&amp;quot;&lt;/span&gt;, &lt;span style="color: #483d8b;"&gt;&amp;quot;Ze Mane&amp;quot;&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;
old_fulanos.&lt;span style="color: black;"&gt;extend&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;get_fulanos&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;print&lt;/span&gt; old_fulanos&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Rodando esse código você vai obter &lt;tt&gt;['Ze Ruela', 'Ze Mane', 'q', 'u', 'a', 'c', 'k']&lt;/tt&gt; sendo que, em mais de 90% dos casos, o que você gostaria de ter seria: &lt;tt&gt;['Ze Ruela', 'Ze Mane', 'quack']&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#8220;Nada&amp;#8221; é diferente de &amp;#8220;alguma coisa&amp;#8221;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Essa dica é só uma complementação da primeira e da segunda dica.&lt;/p&gt;
&lt;p&gt;Quando o seu método/função retorna uma &lt;em&gt;collection&lt;/em&gt; (seqüência, conjunto, &lt;em&gt;hash&lt;/em&gt;, etc) vazia você deve retorná-la vazia e não um valor sentinela (como &lt;tt&gt;None&lt;/tt&gt;). Isso facilita a vida de quem vai usar o seu método/função:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; vazio&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;for&lt;/span&gt; elemento &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; vazio&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;pass&lt;/span&gt; &lt;span style="color: #808080; font-style: italic;"&gt;#... faz algo se o conjunto contiver dados ...&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Se você retorna um valor sentinela:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; vazio&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span style="color: #008000;"&gt;None&lt;/span&gt;
&amp;nbsp;
elementos = vazio&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; elementos:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;for&lt;/span&gt; elemento &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; elementos:
      &lt;span style="color: #ff7700;font-weight:bold;"&gt;pass&lt;/span&gt; &lt;span style="color: #808080; font-style: italic;"&gt;# ...&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Notou que tivemos que criar uma variável com o resultado da operação (para não precisar chamá-la duas vezes) e tratar a sentinela com um &amp;#8220;&lt;tt&gt;if&lt;/tt&gt;&amp;#8220;? Se eu esqueço de tratar a sentinela meu programa vai quebrar.&lt;/p&gt;
&lt;p&gt;Lembre-se sempre que uma &lt;em&gt;collection&lt;/em&gt; vazia tem valor booleano &amp;#8220;&lt;tt&gt;False&lt;/tt&gt;&amp;#8220;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Todo &amp;#8216;&lt;tt&gt;elif&lt;/tt&gt;&amp;#8216; tem um irmão &amp;#8216;&lt;tt&gt;else&lt;/tt&gt;&amp;#8216;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sempre que você precisar usar uma construção &lt;tt&gt;if/elif&lt;/tt&gt; coloque uma cláusula &amp;#8216;&lt;tt&gt;else&lt;/tt&gt;&amp;#8216;. &lt;/p&gt;
&lt;p&gt;Além de usar a cláusula &amp;#8216;&lt;tt&gt;else&lt;/tt&gt;&amp;#8216; eu geralmente faço com que ela gere uma exceção. Desta forma eu sou obrigado a trabalhar todas as possibilidades nos &amp;#8216;&lt;tt&gt;if/elif&lt;/tt&gt;&amp;#8216; evitando ocultar uma situação que pode ser inválida.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;class&lt;/span&gt; InvalidCommand&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Exception&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;pass&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; minihelp&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;comando&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; comando == &lt;span style="color: #483d8b;"&gt;&amp;quot;print&amp;quot;&lt;/span&gt;:
      &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; u&lt;span style="color: #483d8b;"&gt;&amp;quot;&amp;quot;&amp;quot;Imprime dados na tela.
                 Deixará de ser comando no Python 3.0&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;elif&lt;/span&gt; comando == &lt;span style="color: #483d8b;"&gt;&amp;quot;assert&amp;quot;&lt;/span&gt;:
      &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; u&lt;span style="color: #483d8b;"&gt;&amp;quot;&amp;quot;&amp;quot;Certifica se uma condição é
               verdadeira e gera uma excessão em caso contrário&amp;quot;
   elif comando == &amp;quot;...&amp;quot;:
      pass # ...
   else:
      raise InvalidCommand(u&amp;quot;Comando %s inválido.&amp;quot; % (comando,))&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Eu gosto dessa prática mas isso não significa que você deva seguí-la sempre. Existem situações onde ter um &amp;#8220;valor &lt;em&gt;default&lt;/em&gt;&amp;#8221; é necessário e nestes casos o uso do &lt;tt&gt;else&lt;/tt&gt; sem levantar exceção se faz necessário.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; comando == &lt;span style="color: #483d8b;"&gt;&amp;quot;if&amp;quot;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;print&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;&amp;quot;Vai usar elif?&amp;quot;&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;elif&lt;/span&gt; comando == &lt;span style="color: #483d8b;"&gt;&amp;quot;elif&amp;quot;&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;print&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;&amp;quot;Muito bem. Agora falta o else&amp;quot;&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;else&lt;/span&gt;:
   &lt;span style="color: #ff7700;font-weight:bold;"&gt;print&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;&amp;quot;Pronto. Agora está bom.&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&amp;#8220;Pythonismos&amp;#8221;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Use mais atributos públicos do que atributos protegidos (&amp;#8221;&lt;tt&gt;_&lt;/tt&gt;&amp;#8220;).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Programadores acostumados com Java utilizam muito as cláusulas &amp;#8216;&lt;tt&gt;private&lt;/tt&gt;&amp;#8216; e &amp;#8216;&lt;tt&gt;protected&lt;/tt&gt;&amp;#8216; para encapsular os atributos de um objeto para logo depois implementarem os &lt;em&gt;getters&lt;/em&gt; e &lt;em&gt;setters&lt;/em&gt; para acessar esses atributos.&lt;/p&gt;
&lt;p&gt;Essa prática é aconselhada em Java porque em algum momento do futuro você, talvez, precise validar esses dados ou retornar valores calculados. Nestes casos os programadores apenas implementam essa lógica nos métodos que acessam o atributo privado.&lt;/p&gt;
&lt;p&gt;Mas em Python isso não é necessário. Em Python você pode transformar seu atributo público em uma &amp;#8220;&lt;em&gt;property&lt;/em&gt;&amp;#8221; que não muda a forma de se acessar o atributo e permite o acrescimo de lógica ao acesso do mesmo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evite usar &amp;#8220;&lt;tt&gt;__&lt;/tt&gt;&amp;#8220;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por convenção, em Python, todo método ou atributo iniciado com um &amp;#8220;&lt;tt&gt;_&lt;/tt&gt;&amp;#8221; é considerado privado (equivalente ao &lt;tt&gt;protected&lt;/tt&gt; em Java) e não deve ser acessado de fora da classe mesmo sendo possível fazê-lo.&lt;/p&gt;
&lt;p&gt;Dito isso parece meio óbvio que não precisamos usar &amp;#8220;&lt;tt&gt;__&lt;/tt&gt;&amp;#8221; para dificultar ainda mais o acesso à esse atributo/método. Além disso o uso do &amp;#8220;&lt;tt&gt;__&lt;/tt&gt;&amp;#8221; traz alguns incoveninentes para quem quer derivar a sua classe e acessar este método/atributo já que o Python o renomeia acrescentando o nome da classe ao seu nome (&lt;tt&gt;__attr&lt;/tt&gt; vira &lt;tt&gt;Classe__attr&lt;/tt&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Não sobrescreva &lt;em&gt;builtins&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Python disponibiliza várias funções e classes builtins que facilitam muito o uso da linguagem e economizam digitação. Mas esses builtins tem nomes muito &amp;#8220;comuns&amp;#8221; e frequentemente a gente usa os nomes dos builtins como nomes de identificadores. Eu mesmo vivo (vivia) fazendo isso.&lt;/p&gt;
&lt;p&gt;O problema é que em certos momentos alguns problemas podem acontecer quando você tenta chamar um buitin que já não é mais um builtin. Na maioria das vezes o problema &amp;#8220;explode&amp;#8221; logo e você rapidamente conserta mas em alguns casos você pode perder muitas horas tentando achá-lo.&lt;/p&gt;
&lt;p&gt;Algumas pessoas usam um &amp;#8220;_&amp;#8221; no fim do nome do identificador (ex. &amp;#8220;id&amp;#8221; vira &amp;#8220;id_&amp;#8221;) mas eu acho isso um pouco feio então uso só quando não encontro uma alternativa melhor.&lt;/p&gt;
&lt;p&gt;Vou colocar aqui uma tabela de equivalências que eu costumo usar para substituir o nome dos &lt;em&gt;builtins&lt;/em&gt; mais comumente sobrescritos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;id&lt;/strong&gt; &amp;#8211; ident, key&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;type&lt;/strong&gt; &amp;#8211; kind, format&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;object&lt;/strong&gt; &amp;#8211; obj&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;list&lt;/strong&gt; &amp;#8211; plural (lista de &lt;tt&gt;element&lt;/tt&gt; vira &lt;tt&gt;elements&lt;/tt&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;file&lt;/strong&gt; &amp;#8211; fd, file_handler&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dict&lt;/strong&gt; &amp;#8211; dic, hashmap&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;str&lt;/strong&gt; &amp;#8211; text, msg&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Análise estática economiza seu tempo.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Eu uso o &lt;a href="http://www.logilab.org/857"&gt;pylint&lt;/a&gt;, mas conheço algumas pessoas que preferem o &lt;a href="http://divmod.org/trac/wiki/DivmodPyflakes"&gt;pyflakes&lt;/a&gt; ou o &lt;a href="http://pychecker.sourceforge.net/"&gt;PyChecker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A dica é essa: usar um programinha de análise estática como esses pode diminuir consideravelmente aqueles errinhos chatos de sintaxe, ou de digitação. Pode limpar os &amp;#8216;import&amp;#8217; desnecessários do seu software, etc, etc.&lt;/p&gt;
&lt;p&gt;É lógico que esse tipo de ferramenta não substitui uma boa política de testes mas é um bom complemento para ela.&lt;/p&gt;
&lt;h3&gt;&lt;em&gt;Challenge yourself&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Máximo de 3 níveis de indentação. (ou 4 se estiver dentro de uma classe)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ao se esforçar para que seu código não fique muito aninhado você está trabalhando melhor a implementação dos seus métodos e funções. Nem sempre é possível (ou aconselhável) restringir tanto o nível de identação do seu código mas muitas vezes isso melhora a sua implementação.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Máximo de 2 indireções.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Recebeu um objeto como parâmetro? Chame apenas métodos dele e evite ao máximo chamar métodos do retorno desses objetos:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="python" style="font-family:monospace;"&gt;&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; f&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;obj&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:
    obj.&lt;span style="color: black;"&gt;metodo&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080; font-style: italic;"&gt;# legal!&lt;/span&gt;
    obj.&lt;span style="color: black;"&gt;metodo&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: black;"&gt;outro_metodo&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080; font-style: italic;"&gt;# ruim!&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Quando você chama um método pra um objeto retornado por outro método você está aumentando o acoplamento entre as classes envolvidas impedindo que uma delas seja substituída (ou reimplementada) &amp;#8216;impunemente&amp;#8217;.&lt;/p&gt;
&lt;p&gt;Essa regrinha é uma das regrinhas da &lt;a href="http://en.wikipedia.org/wiki/Principle_of_least_knowledge"&gt;Lei de Demeter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Máximo de 0 &amp;#8216;&lt;tt&gt;if/elif/else&lt;/tt&gt;&amp;#8217;s.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Polimorfismo é isso. No mundo OO ideal, perfeito e utópico praticamente não precisaríamos do comando &amp;#8220;&lt;tt&gt;if&lt;/tt&gt;&amp;#8221; e usaríamos somente polimorfismo. Mas&amp;#8230; como não conseguimos isso tão facilmente&lt;a href="#footnote_oo"&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;/a&gt; devemos, ao menos, usar o &amp;#8220;&lt;tt&gt;if&lt;/tt&gt;&amp;#8221; com moderação.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esta é uma lista incompleta de dicas para programadores Python. Se futuramente eu lembrar ou aprender algo novo eu volto aqui para falar sobre o assunto.&lt;/p&gt;
&lt;p&gt;Alguns desenvolvedores podem não concordar com as dicas. Neste caso eles podem enriquecer ainda mais esse texto argumentando sobre o as suas restrições no espaço para comentários.&lt;/p&gt;
&lt;p&gt;Se você tiver alguma dica para compartilhar com a gente coloque nos comentários. Se ela for boa mesmo eu coloco ela no corpo principal do blog.&lt;/p&gt;
&lt;p&gt;&lt;a name="footnote_oo"&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;/a&gt; eu mesmo só consegui fazer uma aplicação OO funcional sem usar um único &lt;tt&gt;if&lt;/tt&gt;. Era uma implementação do joguinho de adivinhação de animais (aquele que pergunta &amp;#8220;Vive na água? (s/n)&amp;#8221;) em Smalltalk.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=jyfrVNZwYhQ:_fZnyisYg4s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=jyfrVNZwYhQ:_fZnyisYg4s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2009/03/03/dicas-para-um-bom-programa-em-python/#comments" thr:count="18" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2009/03/03/dicas-para-um-bom-programa-em-python/feed/atom/" thr:count="18" />
		<thr:total>18</thr:total>
	<feedburner:origLink>http://pythonologia.org/2009/03/03/dicas-para-um-bom-programa-em-python/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[Empreendedores 2.0]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/iBBszbbOp_w/" />
		<id>http://pythonologia.org/?p=273</id>
		<updated>2008-12-10T01:59:50Z</updated>
		<published>2008-12-10T01:58:20Z</published>
		<category scheme="http://pythonologia.org" term="Empreendedorismo" />		<summary type="html">Como todos já sabem eu abri uma empresa para levar adiante uns projetos voltados para a Web (chamada de Web 2.0 pelos mais &amp;#8220;antenados&amp;#8221;).
Eu ainda estou longe de chegar no estágio alcançado pelos empresários que conheci, neste fim-de-semana durante o FMDS, mas mesmo assim foi legal conhecê-los aprender algumas coisas com seus acertos e tropeços.
Eu [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2008/12/09/empreendedores-20/">&lt;p&gt;Como todos já sabem eu abri uma &lt;a href="http://www.triveos.com/"&gt;empresa&lt;/a&gt; para levar adiante uns projetos voltados para a Web (chamada de Web 2.0 pelos mais &amp;#8220;antenados&amp;#8221;).&lt;/p&gt;
&lt;p&gt;Eu ainda estou longe de chegar no estágio alcançado pelos empresários que conheci, neste fim-de-semana durante o &lt;a href="http://www.forumdemidiasdigitais.com.br/"&gt;FMDS&lt;/a&gt;, mas mesmo assim foi legal conhecê-los aprender algumas coisas com seus acertos e tropeços.&lt;/p&gt;
&lt;p&gt;Eu desconhecia uma grande parte dos projetos brasileiros apresentados durante o evento e por essa razão fiquei surpreso com a qualidade deles. Vou listar alguns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.pagestacker.com/"&gt;Pagestacker&lt;/a&gt;&lt;/b&gt; &amp;#8211; é um site para &lt;em&gt;bookmark&lt;/em&gt; on-line. Faz algumas coisas que o &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt; não faz, outras que o del.icio.us faz (de forma diferente). Tudo no visual do Pagestacker é simples, agradável e fácil de usar. A diferença fundamental, que eu notei, entre o del.icio.us e o Pagestacker é que no primeiro existe um foco nas tags para organizar os &lt;em&gt;bookmarks&lt;/em&gt; e no segundo a ênfase fica no sistema de busca.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.compra3.com.br/"&gt;Compra3&lt;/a&gt;&lt;/b&gt; &amp;#8211; projeto desenvolvido por uma empresa de Curitiba que cria um sistema para compras coletivas que gera descontos para compras em volumes nos sites mais conhecidos de comércio eletrônico brasileiro. Fiquei impressionado pelas experiências que eles tiveram e que os levaram a reeditar o negócio diversas vezes. Dicas preciosas sairam da apresentação deles.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.amanaie.com.br/"&gt;Amanaie&lt;/a&gt;&lt;/b&gt; &amp;#8211; o pessoal da Amanaie trabalha com desenvolvimento de aplicações para sites sociais. Na apresentação eles focaram no &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;, que é utilizado por diversos sites sociais tais como &lt;a href="http://www.orkut.com/"&gt;Orkut&lt;/a&gt;, &lt;a href="http://hi5.com/"&gt;hi5&lt;/a&gt;, etc. Eles também trabalham com aplicações para a plataforma do Facebook. Através deles conheci o Michael Nicklas que é um norte-americano que veio para o Brasil aprender sobre o mercado de &lt;em&gt;startups&lt;/em&gt; e de capital de risco.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.broguiblogs.com.br/"&gt;BroguiBlogs&lt;/a&gt;&lt;/b&gt; &amp;#8211; é uma plataforma para blogs que funciona nos moldes do &lt;a href="http://www.wordpress.com/"&gt;Wordpress.com&lt;/a&gt; (eles até usam o mesmo software) mas com foco na facilidade para usuários que estão entrando no mundo dos blogs. Tirei uma lição valiosa com eles (e com a apresentação do Pagestacker) sobre o temor que eu tinha de lançar um serviço que não fosse inédito na Web. A apresentação de ambos me mostrou que se você fizer algo bacana as pessoas usarão. Mesmo se não for algo inédito.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.videolog.tv/"&gt;Videolog&lt;/a&gt; / &lt;a href="http://www.tivi.tv"&gt;Tivi&lt;/a&gt;&lt;/b&gt; &amp;#8211; o pessoal do Videolog/Tivi era a turma mais &amp;#8216;veterana&amp;#8217; do evento. Eu honestamente não conhecia o Videolog (O Tivi é um projeto recém-lançado deles para criação de emissoras de TV on-line com vídeos do Videolog, &lt;a href="http://www.youtube.com/"&gt;Youtube&lt;/a&gt;, &amp;#8230;) e fiquei absurdamente espantado com a qualidade dos serviços. Sério. Pra entenderem o que estou dizendo acessem o Youtube e depois acessem o site deles. Façam o mesmo para vídeos em HD.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://power.com/"&gt;Power&lt;/a&gt;&lt;/b&gt; &amp;#8211; esse eu não vi durante o evento mas achei bem legal. É um unificador de grafo social (as conexões que você tem nas mais diversas redes sociais).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Com essa lista já é possível ver que o evento foi animal. Mas a história não acaba por aí. Logo depois do evento o Alexandre Fugita do blog &lt;a href="http://www.techbits.com.br/"&gt;Techbits&lt;/a&gt; lançou o &lt;a href="http://www.techcrunch.com/"&gt;Techcrunch&lt;/a&gt; brasileiro: &lt;a href="http://www.startupi.com.br/"&gt;Startupi&lt;/a&gt;. Neste blog o Fugita e mais alguns colaboradores tentarão reunir esse universo das &lt;em&gt;startups&lt;/em&gt; e seus vizinhos (ex. &lt;em&gt;ventures&lt;/em&gt;) nos moldes do que o Techcrunch faz nos Estados Unidos.&lt;/p&gt;
&lt;p&gt;Se tudo der certo, e eu me dedicar um pouco mais na execução dos projetos que estão pendentes por aqui, logo logo estarei nesta lista também &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=iBBszbbOp_w:I2AXBl0wk9I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=iBBszbbOp_w:I2AXBl0wk9I:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2008/12/09/empreendedores-20/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2008/12/09/empreendedores-20/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://pythonologia.org/2008/12/09/empreendedores-20/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[PyConBrasil 2009 na sua cidade. O prazo está acabando!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/Sxy6bkYagJk/" />
		<id>http://pythonologia.org/?p=265</id>
		<updated>2008-11-04T03:11:51Z</updated>
		<published>2008-11-04T03:06:18Z</published>
		<category scheme="http://pythonologia.org" term="Python" />		<summary type="html">Dia 10 de novembro termina o prazo para envio das candidaturas à cidade-sede da PyConBrasil 2009!
Se você mora numa cidade com uma comunidade pythônica entusiasmada, com uma boa infra-estrutura para sediar o evento e gostaria de ver reunida a &amp;#8216;nata&amp;#8217; do Python no Brasil (e no mundo) é a sua chance de candidatá-la para sediar [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2008/11/04/pyconbrasil-2009-na-sua-cidade/">&lt;p&gt;Dia &lt;strong&gt;10 de novembro&lt;/strong&gt; termina o prazo para envio das candidaturas à cidade-sede da PyConBrasil 2009!&lt;/p&gt;
&lt;p&gt;Se você mora numa cidade com uma comunidade pythônica entusiasmada, com uma boa infra-estrutura para sediar o evento e gostaria de ver reunida a &amp;#8216;nata&amp;#8217; do Python no Brasil (e no mundo) é a sua chance de candidatá-la para sediar a próxima edição do maior evento de Python da América Latina!&lt;/p&gt;
&lt;p&gt;Para candidatar é fácil. Basta preencher um &lt;a href="http://associacao.pythonbrasil.org/candidatura/"&gt;formulário&lt;/a&gt; e seguir as dicas do &lt;a href="http://associacao.pythonbrasil.org/associacao/manual-do-big-kahuna"&gt;Manual do Big Kahuna&lt;/a&gt; que as suas chances aumentam.&lt;/p&gt;
&lt;p&gt;Os critérios para escolha da cidade variam bastante entre os participantes da banca de avaliação mas parece haver um consenso de que passam por:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Participação, importância do Big Kahuna na comunidade e sua capacidade de coordenação&lt;/li&gt;
&lt;li&gt;Força do GruPy local&lt;/li&gt;
&lt;li&gt;Disposição de ambos para trabalhar duro durante quase um ano na organização do evento&lt;/li&gt;
&lt;li&gt;&amp;#8220;Potencial pythonico&amp;#8221; da cidade (quantos desenvolvedores python conseguiremos &amp;#8216;converter&amp;#8217;)&lt;/li&gt;
&lt;li&gt;Infra-estrutura pro evento&lt;/li&gt;
&lt;li&gt;Infra-estrutura da cidade-sede (transporte, acesso aéreo/terrestre)&lt;/li&gt;
&lt;li&gt;Mais alguns outros critérios que, com certeza, esqueci&amp;#8230;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Os resultados serão divulgados no dia 25 de novembro. A banca de avaliação ainda não foi formada mas logo que tivermos mais detalhes eu aviso por aqui.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=Sxy6bkYagJk:bQvRBOQRncg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=Sxy6bkYagJk:bQvRBOQRncg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2008/11/04/pyconbrasil-2009-na-sua-cidade/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2008/11/04/pyconbrasil-2009-na-sua-cidade/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://pythonologia.org/2008/11/04/pyconbrasil-2009-na-sua-cidade/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[GP Brasil 2008 de F1, eu também fui&#8230;]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/GiD9c46G-H8/" />
		<id>http://pythonologia.org/?p=250</id>
		<updated>2008-11-03T20:34:29Z</updated>
		<published>2008-11-03T20:34:29Z</published>
		<category scheme="http://pythonologia.org" term="Pessoal" />		<summary type="html">Então&amp;#8230; desde o começo do ano eu estava planejando essa viagem. Pra ser honesto estou planejando isso desde o ano passado mas só comprei os ingressos no começo deste ano.
Eu fui!
E então chegou o tão esperado fim-de-semana e eu fui ver uma das corridas mais emocionantes das últimas décadas.
Pra ser perfeita precisava ter 10 gotas [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2008/11/03/gp-brasil-2008-de-f1-eu-tambem-fui/">&lt;p&gt;Então&amp;#8230; desde o começo do ano eu estava planejando essa viagem. Pra ser honesto estou planejando isso desde o ano passado mas só comprei os ingressos no começo deste ano.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://pythonologia.org/wp-content/uploads/3000489156_875bb5bc44_b.jpg"&gt;&lt;img src="http://pythonologia.org/wp-content/uploads/3000489156_875bb5bc44_b-400x300.jpg" alt="Eu fui!" title="Eu fui!" width="400" height="300" class="size-medium wp-image-254" /&gt;&lt;/a&gt;&lt;br /&gt;Eu fui!&lt;/p&gt;
&lt;p&gt;E então chegou o tão esperado fim-de-semana e eu fui ver uma das corridas mais emocionantes das últimas décadas.&lt;/p&gt;
&lt;p&gt;Pra ser perfeita precisava ter 10 gotas a menos de chuva no final. Tá ok&amp;#8230; talvez alguns milhares de gotas a menos fossem o necessário para que a Toyota do Glock não perdesse tanto rendimento na última curva.&lt;/p&gt;
&lt;p&gt;Eu fiquei no setor &amp;#8220;G&amp;#8221; da pista de Interlagos. O setor &amp;#8220;G&amp;#8221; ocupa todo o espaço da reta oposta. Estava lotado.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://pythonologia.org/wp-content/uploads/3000501008_062da90ba8_b.jpg"&gt;&lt;img src="http://pythonologia.org/wp-content/uploads/3000501008_062da90ba8_b-400x300.jpg" alt="" title="Interlagos vista de um helicóptero..." width="400" height="300" class="aligncenter size-medium wp-image-256" /&gt;&lt;/a&gt;&lt;br /&gt;Interlagos vista de um helicóptero&amp;#8230;&lt;/p&gt;
&lt;p&gt;Mas vamos começar pelo sábado. Dia de treino e classificação.&lt;/p&gt;
&lt;p&gt;Chegamos no autódromo para assistir ao treino da manhã e sentamos bem no meio do setor &amp;#8220;G&amp;#8221; de onde conseguíamos ver a saída dos boxes e bem ao longe o fim da reta onde, obviamente, tinha uma curva &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Se esse negócio de ficar arrepiado é coisa de boiola o barulho de um F1 &amp;#8216;enviada&amp;#8217; qualquer macho. Escutá-los reduzindo a marcha no fim da reta então faz os boiolas virarem mulher.&lt;/p&gt;
&lt;p&gt;Algo que você só escuta lá: quando reduzem a marcha você consegue ouvir alguns &amp;#8216;estouros&amp;#8217; do motor e um ronco grave que mostra que alí dentro tem um motor de verdade e não uma negócio qualquer que &amp;#8216;grita fino&amp;#8217;.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://pythonologia.org/wp-content/uploads/2999568914_b12751b42b_b.jpg"&gt;&lt;img src="http://pythonologia.org/wp-content/uploads/2999568914_b12751b42b_b-400x300.jpg" alt="" title="McLaren saindo dos boxes para volta de aquecimento" width="400" height="300" class="aligncenter size-medium wp-image-251" /&gt;&lt;/a&gt;&lt;br /&gt;McLaren saindo dos boxes para volta de aquecimento&lt;/p&gt;
&lt;p&gt;Os carros correm tanto que a foto acima deve ter sido a vigésima tentativa. Não lembro se essa McLaren era do Hamilton ou do Kovalainen. Só lembro que era saída dos boxes (não era velocidade máxima).&lt;/p&gt;
&lt;p&gt;Terminado o treino da manhã já dava pra ver que o Massa estava bem e que o Hamilton estava na cola dele.&lt;/p&gt;
&lt;p&gt;Algumas atividades acontecem nos intervalos entre um treino e outro. Corrida de Porches, Fórmula BMW, corrida de Masserati (muito massa), e o desfile de alguns endinheirados que pagam para fazer &lt;em&gt;test-drive&lt;/em&gt; de Porches dentro de Interlagos. Passam com umas mulheres bonitas na carona, dirigindo um Porshe e acenando para a torcida na arquibancada.&lt;/p&gt;
&lt;p&gt;Aliás, esse negócio de &amp;#8220;dinheiro&amp;#8221; lá é muito sério. Helicóptero trazendo gente para o autódromo de minuto em minuto, cerveja a R$4,50 (sem direito a profissional do sexo), espetinho de carne por R$4,00 (que se compra por R$0,50 aqui perto de casa) e o ingresso mais barato custa R$300 (antecipado) para um dia e te dá direito a frequentar um banheiro químico com uma bela vista de &amp;#8217;submarinos&amp;#8217; boiando. Lamentável.&lt;/p&gt;
&lt;p&gt;Lojinhas da Ferrari com souvenirs fazem a gente babar&amp;#8230;&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://pythonologia.org/wp-content/uploads/2999564012_ef25e623f9_b.jpg"&gt;&lt;img src="http://pythonologia.org/wp-content/uploads/2999564012_ef25e623f9_b-400x300.jpg" alt="" title="Boné da Ferrari: R$100, Bottom: R$10, Sacolinha de plástico com emblema da escuderia: Não tem preço" width="400" height="300" class="alignnone size-medium wp-image-258" /&gt;&lt;/a&gt;&lt;br /&gt;Boné da Ferrari: R$100, Pin: R$10, Sacolinha de plástico com emblema da escuderia: Não tem preço.&lt;/p&gt;
&lt;p&gt;&amp;#8230; e comprar &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;E tudo isso só no dia do treino&amp;#8230; Aliás no treino classificatório o Massa ficou com a &lt;em&gt;pole position&lt;/em&gt; e o Hamilton só em quarto. Bom pro inglês que não precisava mais do que isso pra ser campeão do mundo.&lt;/p&gt;
&lt;p&gt;Ah! E o dia estava extremamente ensolarado e quente. Ano que vem (sim, eu vou lá em 2009) eu vou passar protetor solar mesmo se a corrida for noturna. Não é legal ficar assim:&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://pythonologia.org/wp-content/uploads/3000473734_09613248d7_b.jpg"&gt;&lt;img src="http://pythonologia.org/wp-content/uploads/3000473734_09613248d7_b-400x300.jpg" alt="" title="Ai!" width="400" height="300" class="aligncenter size-medium wp-image-259" /&gt;&lt;/a&gt;&lt;br /&gt;Ai!&lt;/p&gt;
&lt;p&gt;Para ir para a corrida, no domingo, acordamos de madrugada porque queríamos ficar bem à esquerda do setor &amp;#8220;G&amp;#8221; de onde era possível ver todo o &amp;#8220;S do Senna&amp;#8221;, local onde muitas vezes uma corrida, e nesse caso o campeonato, se decide.&lt;/p&gt;
&lt;p&gt;Das 7hs da manhã quando chegamos à arquibancada até as 15hs quando começaria a corrida passa-se um longo período sentado, no sol, na chuva, entediado, etc. A chatisse só diminui um quando tem as &amp;#8216;atividades paralelas&amp;#8217; como a corrida de fórmula BMW, Masserati e G3.&lt;/p&gt;
&lt;p&gt;Aí os pilotos fazem uma volta em cima de um caminhão&amp;#8230;&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://pythonologia.org/wp-content/uploads/2999562112_f6bb78ffc2_b.jpg"&gt;&lt;img src="http://pythonologia.org/wp-content/uploads/2999562112_f6bb78ffc2_b-400x300.jpg" alt="" title="Desfile dos pilotos..." width="400" height="300" class="aligncenter size-medium wp-image-261" /&gt;&lt;/a&gt;&lt;br /&gt;Desfile dos pilotos&amp;#8230;&lt;/p&gt;
&lt;p&gt;&amp;#8230; depois eles saem um a um para a configuração do &lt;em&gt;grid&lt;/em&gt; (o Felipe sobe 5 marchas num espaço de 100m da marca branca no chão)&amp;#8230;&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://pythonologia.org/wp-content/uploads/2999554464_f644de3676_b.jpg"&gt;&lt;img src="http://pythonologia.org/wp-content/uploads/2999554464_f644de3676_b-400x300.jpg" alt="" title="Vai Felipe!" width="400" height="300" class="aligncenter size-medium wp-image-262" /&gt;&lt;/a&gt;&lt;br /&gt;Vai Felipe!&lt;/p&gt;
&lt;p&gt;&amp;#8230;e então, no momento da volta de apresentação, despenca uma chuva forte em Interlagos. Só o suficiente para molhar a pista.&lt;/p&gt;
&lt;p&gt;O &lt;em&gt;Safety Car&lt;/em&gt; dá uma volta na pista pra verificar como ela ficou e então a direção de prova opta por atrasar a largada em 10 minutos.&lt;/p&gt;
&lt;p&gt;Eu perdi as fotos e o vídeo da largada porque estava tão ansioso com o momento que apertei todos os botões errados do meu celular &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Mas a única coisa que aconteceu no &amp;#8220;S do Senna&amp;#8221; foi um estranhamento entre Nakagima, Couthard e Piquezinho que forçou a entrada do &lt;em&gt;Safety Car&lt;/em&gt; na pista.&lt;/p&gt;
&lt;p align="center"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/nfcuk_qsmk4&amp;#038;hl=pt-br&amp;#038;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/nfcuk_qsmk4&amp;#038;hl=pt-br&amp;#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Manja como eles estão devagar&amp;#8230;&lt;/p&gt;
&lt;p&gt;Depois disso eu não tirei mais fotos nem fiz mais vídeos pois precisava acompanhar a corrida (num autódromo você é quem fica responsável por &amp;#8216;trocar de câmera&amp;#8217; para saber o que está acontecendo).&lt;/p&gt;
&lt;p&gt;Quando o Felipe Massa passou pela linha de chegada o setor &amp;#8220;G&amp;#8221; inteiro começou a pular e a gritar &amp;#8220;Campeão!&amp;#8221;&amp;#8230; O Felipe então para o carro na entrada da reta oposta para pegar algo (devia ser uma bandeira) com os fiscais de prova e então no som da rádio Band News (que é a locução oficial no autódromo) começa a gritar: &amp;#8220;Hamilton Campeão! Hamilton é Campeão!&amp;#8221; e eu não entendo mais nada&amp;#8230;&lt;/p&gt;
&lt;p&gt;O Massa, então, passa na nossa frente e o setor &amp;#8220;G&amp;#8221; começa a esmurecer&amp;#8230; todos começam a perguntar entre si o que tinha acontecido afinal&amp;#8230;&lt;/p&gt;
&lt;p&gt;O único trecho que não é visível no setor &amp;#8220;G&amp;#8221; é justamente o ponto onde o Hamilton ultrapassou o Glock.&lt;/p&gt;
&lt;p&gt;A torcida então começa a gritar o nome do Massa&amp;#8230; e eu vou embora&amp;#8230; na chuva. Muita chuva.&lt;/p&gt;
&lt;p&gt;Dicas pro ano que vem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Comprar ingresso pro setor M (mas só se for numerada)&lt;/li&gt;
&lt;li&gt;Levar capa de chuva&lt;/li&gt;
&lt;li&gt;Levar uma TV portátil&lt;/li&gt;
&lt;li&gt;Levar uma câmera com 12x de zoom&lt;/li&gt;
&lt;li&gt;Levar um binóculo&lt;/li&gt;
&lt;li&gt;Levar litros de protetor solar&lt;/li&gt;
&lt;li&gt;Não perder o cartão de crédito&lt;/li&gt;
&lt;li&gt;Levar guarda-sol ou um sombreiro&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tem umas fotos &amp;#8216;bônus&amp;#8217; no meu &lt;a href="http://www.flickr.com/photos/osantana/"&gt;flickr&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=GiD9c46G-H8:YmLNwrsXJDY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=GiD9c46G-H8:YmLNwrsXJDY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2008/11/03/gp-brasil-2008-de-f1-eu-tambem-fui/#comments" thr:count="9" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2008/11/03/gp-brasil-2008-de-f1-eu-tambem-fui/feed/atom/" thr:count="9" />
		<thr:total>9</thr:total>
	<feedburner:origLink>http://pythonologia.org/2008/11/03/gp-brasil-2008-de-f1-eu-tambem-fui/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[Latinoware 2008, eu fui&#8230;]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/s83uqxapML8/" />
		<id>http://pythonologia.org/?p=244</id>
		<updated>2008-11-03T19:08:29Z</updated>
		<published>2008-11-03T19:08:29Z</published>
		<category scheme="http://pythonologia.org" term="Python" /><category scheme="http://pythonologia.org" term="Tech" />		<summary type="html">Como sempre faço quando vou à um evento vou relatar aqui a minha primeira experiência participando da Latinoware 2008.
A decisão sobre a minha participação só foi tomada dois dias antes do evento pois quem iria patrocinar a minha viagem (INdT) conseguiu viabilizar o treinamento de Python para Maemo bem em cima da hora. Participei apenas [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2008/11/03/latinoware-2008-eu-fui/">&lt;p&gt;Como sempre faço quando vou à um evento vou relatar aqui a minha primeira experiência participando da Latinoware 2008.&lt;/p&gt;
&lt;p&gt;A decisão sobre a minha participação só foi tomada dois dias antes do evento pois quem iria patrocinar a minha viagem (&lt;a href="http://www.indt.org.br/"&gt;INdT&lt;/a&gt;) conseguiu viabilizar o treinamento de &lt;a href="http://pymaemo.garage.maemo.org/"&gt;Python para Maemo&lt;/a&gt; bem em cima da hora. Participei apenas do primeiro dia do evento.&lt;/p&gt;
&lt;p&gt;Cheguei em &lt;a href="http://maps.google.com.br/maps?q=foz+do+igua%C3%A7u&amp;#038;ie=UTF-8&amp;#038;oe=utf-8&amp;#038;rls=org.mozilla:en-US:official&amp;#038;client=firefox-a&amp;#038;um=1&amp;#038;sa=X&amp;#038;oi=geocode_result&amp;#038;resnum=1&amp;#038;ct=title"&gt;Foz do Iguaçu&lt;/a&gt; na quinta-feira (30/10/2008) de madrugada e tinha um serviço de &lt;em&gt;transfer&lt;/em&gt; no aeroporto para carregar os palestrantes até os hotéis onde ficariam hospedados. O meu nome não constava na lista mas isso era justificável por minha decisão tardia. De qualquer maneira bastou uma conversa rápida com o responsável pelo transporte e eu já estava dentro da Van em direção ao hotel.&lt;/p&gt;
&lt;p&gt;Quando cheguei no hotel avistei uma placa avisando que um ônibus passaria lá às 8hs da manhã em direção à Latinoware. Às 7h30 eu estava na frente do hotel juntamente com mais 3 outras pessoas que também iriam para o evento.&lt;/p&gt;
&lt;p&gt;Desistimos de esperar às 8h30 e dividimos um taxi até o local do evento. Descobri depois que o ônibus sequer havia passado no hotel.&lt;/p&gt;
&lt;p&gt;Ao chegar no posto de credenciamento que estava instalado num estacionamento de &lt;a href="http://www.itaipu.gov.br/"&gt;Itaipu&lt;/a&gt; avistamos as filas para pegar crachás. Me dirigi à fila de crachás para &amp;#8220;Palestrantes, Imprensa e Autoridades&amp;#8221;.&lt;/p&gt;
&lt;p&gt;A fila estava pequena (umas 8 pessoas) mas não andou 1 milímetro sequer até que um dos organizadores nos retirou da fila para entregar os crachás que estavam com ele. Mas o meu crachá, afinal, não estava com ele e tive que me contentar com um crachá em branco onde preenchi à mão o meu nome e RG.&lt;/p&gt;
&lt;p&gt;Os palestrantes então deveriam entrar num ônibus que estava estacionado ao nosso lado pois seriamos levados até o &amp;#8220;Parque Tecnológico de Itaipu&amp;#8221; onde a estrutura do evento estava montada.&lt;/p&gt;
&lt;p&gt;Esperamos por mais alguns minutos (que pareceram horas) até que um grande amigo meu entra pela porta do ônibus e comenta algo que eu já havia notado: &amp;#8220;Esse é o evento mais desorganizado dentre todos os de informática dos quais já participei.&amp;#8221; Note que em meu caso e no dele isso significa muitos eventos.&lt;/p&gt;
&lt;p&gt;O ônibus saiu com lotação total de pessoas sentadas e em pé. Detalhe: faltavam poucos minutos para as atividades do evento começarem e uma parte considerável dos palestrantes ainda estava em um ônibus saindo da área de credenciamento.&lt;/p&gt;
&lt;p&gt;Poucos metros dali o ônibus para e todos que estavam de pé tiveram que trocar de ônibus. A troca foi feita sob a vigilância atenta de um dos seguranças de Itaipu que olhava atentamente para nossos crachás preenchidos à mão para ver se não detectava alguma fraude &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt;  Eita segurança&amp;#8230;&lt;/p&gt;
&lt;p&gt;Finalmente nos salões onde as atividades do evento iriam ocorrer tratei logo de ir para a sala de palestrantes ou para o &lt;em&gt;stand&lt;/em&gt; da &lt;a href="http://associacao.pythonbrasil.org/"&gt;Associação Python Brasil&lt;/a&gt; para me conectar à Internet e terminar o material do meu treinamento&amp;#8230;&lt;/p&gt;
&lt;p&gt;Vencida a falta de sinalização do lugar fui até a sala de palestrantes mas ela já estava completamente lotada.&lt;/p&gt;
&lt;p&gt;Fui então à caça do &lt;em&gt;stand&lt;/em&gt; da APyB e ao chegar lá descobri que o ponto de rede estava com problemas. A sorte foi que o &lt;a href="http://www.ramiroluz.eti.br/"&gt;Ramiro&lt;/a&gt; levou um roteador &lt;em&gt;wireless&lt;/em&gt; para conectar no ponto de rede do pessoal do &lt;a href="http://debian-br.alioth.debian.org/"&gt;Debian Brasil&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O almoço era razoável e foi &amp;#8216;di grátis&amp;#8217;. Servido apenas até as 14hs fez com que os instrutores dos mini-cursos da manhã tivessem que improvisar suas refeições já que seus treinamentos eram de 4hs (sem intervalo) e terminariam somente às 15hs.&lt;/p&gt;
&lt;p&gt;No meu treinamento deu quase tudo certo. Mas nesse caso específico a culpa pelas falahas foram majoritariamente minhas (o ambiente necessário para o treinemento não estava instalado nas máquinas do laboratório pois eu não havia feito a solicitação em tempo hábil). Faltou um &lt;em&gt;flip-chart&lt;/em&gt;/quadro branco na sala de aula também.&lt;/p&gt;
&lt;p&gt;Terminado o treinamento fui dar uma bisbilhotada no pessoal da &lt;a href="http://www.roboticalivre.org/"&gt;Robótica Livre&lt;/a&gt; que estava montando plaquinhas &lt;a href="http://arduinotutorial.blogspot.com/"&gt;Severino&lt;/a&gt; sob a orientação do Prof. Paulo Gonçalves. O Severino é uma implementação brasileira do &lt;a href="http://arduino.cc/"&gt;Arduino&lt;/a&gt;. Queria ter ficado lá mas tive que ir para a palestra de abertura e depois para um coquetel no mirante de Itaipu onde veríamos o acendimento das luzes da barragem. Um show que eu recomendo. Itaipu é uma daquelas coisas que temos pra mostrar as virtudes do nosso povo.&lt;/p&gt;
&lt;p align="center"&gt;
&lt;a href="http://pythonologia.org/wp-content/uploads/2999570978_af505988ae_b_d.jpg"&gt;&lt;img src="http://pythonologia.org/wp-content/uploads/2999570978_af505988ae_b_d-400x300.jpg" alt="Aquele quadrado no centro é um prédio de 6 andares" title="Itaipú Iluminada" width="400" height="300" class="size-medium wp-image-245" /&gt;&lt;/a&gt;&lt;br /&gt;Aquele quadrado no centro é um prédio de 6 andares&lt;/p&gt;
&lt;p&gt;Já o coquetel&amp;#8230; Eu comi dois &amp;#8220;canapés&amp;#8221; minguados e não bebi nada (nem água). E os canapés foram doados pelo Ramiro que se comoveu com a minha fome &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Depois do coquetel voltamos para o hotel onde eu dormi um pouco até ir para o aeroporto embarcar de volta para Curitiba onde iria preparar minha ida para São Paulo (desta vez de carro) GP Brasil de F1. Sobre isso eu conto no próximo &lt;em&gt;post&lt;/em&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=s83uqxapML8:UcIXOfdFRtQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=s83uqxapML8:UcIXOfdFRtQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2008/11/03/latinoware-2008-eu-fui/#comments" thr:count="14" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2008/11/03/latinoware-2008-eu-fui/feed/atom/" thr:count="14" />
		<thr:total>14</thr:total>
	<feedburner:origLink>http://pythonologia.org/2008/11/03/latinoware-2008-eu-fui/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Osvaldo Santana</name>
						<uri>http://www.pythonologia.org/</uri>
					</author>
		<title type="html"><![CDATA[Curiosidade nas crianças]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/pythonologia/~3/kInguddqusI/" />
		<id>http://pythonologia.org/?p=230</id>
		<updated>2008-10-27T14:38:54Z</updated>
		<published>2008-10-27T14:38:54Z</published>
		<category scheme="http://pythonologia.org" term="Python" />		<summary type="html">Quando eu era criança eu era daquele tipo que desmontava brinquedos pra ver como funcionava por dentro, mandava cartas para a seção &amp;#8216;Perguntas Superintrigantes&amp;#8217; para a revista Superinteressante (nenhuma foi publicada :/) e consultava todo tipo de livro ou enciclopédia que pudesses esclarecer minhas dúvidas.
Toda essa introdução serviu pra ilustrar uma coisa que se repete [...]</summary>
		<content type="html" xml:base="http://pythonologia.org/2008/10/27/curiosidade-nas-criancas/">&lt;p&gt;Quando eu era criança eu era daquele tipo que desmontava brinquedos pra ver como funcionava por dentro, mandava cartas para a seção &amp;#8216;Perguntas Superintrigantes&amp;#8217; para a revista Superinteressante (nenhuma foi publicada :/) e consultava todo tipo de livro ou enciclopédia que pudesses esclarecer minhas dúvidas.&lt;/p&gt;
&lt;p&gt;Toda essa introdução serviu pra ilustrar uma coisa que se repete desde a minha mais remota infância: a curiosidade.&lt;/p&gt;
&lt;p&gt;A minha curiosidade para aprender e entender como as coisas funcionam sempre foi enorme. A minha disposição para executar experimentos também. Cheguei ao ponto de ter incendiado o meu quarto por conta de um curto-circuito na rede elétrica.&lt;/p&gt;
&lt;p&gt;Com cerca de 5 anos eu estava experimentando se ao dar um nó no fio a corrente elétrica ainda fluiria pelo condutor. Descobri que sim. &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt;  Ok, foi burrice isso! Mas eu tinha só 5 anos!. Eu poderia ter simplesmente perguntado ao meu pai se isso funcionaria mas o ensinamento não teria sido tão contundente &lt;img src='http://pythonologia.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;E acreditem, essa experiência me rendeu alguns frutos positivos no futuro (pequenos se a gente comparar com o estrago). Essa experiência me garantiu uma vantagem durante as aulas de física elétrica quando o professor falava sobre &amp;#8220;corrente de curto-circuito&amp;#8221; e para o meu entendimento da Lei de Ohm (U = R.I ou I = U/R). Para simplificar imagine que na minha experiência R≅0, logo, I≅∞. Se potência é o produto de tensão por corrente (P = U.I) imagine o estrago (agravado por um disjuntor que não funcionou)&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pythonologia.org/wp-content/uploads/ch081025.gif"&gt;&lt;img src="http://pythonologia.org/wp-content/uploads/ch081025.gif" alt="Calvin running: Dad. Look! The sun's setting and its only 3 o'clock! - Calvin's dad: It's not 3 o'clock your watch stopped - Calvin looking to watch: Time doesn't stop if your watch stops? Calvin's Dad: Nope. - Calvin disappointed: Phooey. For a moment there I thought I'd get rich patenting this thing. Calvin's dad: I'd have bought one." title="Experiment" width="500" height="167" class="size-full wp-image-231" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mas voltando ao motivo principal deste &lt;em&gt;post&lt;/em&gt;&amp;#8230;&lt;/p&gt;
&lt;p&gt;Eu tenho 3 casos diferentes de crianças próximas de meu convívio. Meu filho que tem 4 anos de idade é uma criança tranquila, que brinca bastante com seus brinquedos e até já navega sozinho nos joguinhos do site da Discovery Kids.&lt;/p&gt;
&lt;p&gt;Ainda não consegui perceber traços de uma criança curiosa nele. Tenho receio que seja em razão da sua pouca idade ou porque suas análises e experimentos passem desapercebidos por mim.&lt;/p&gt;
&lt;p&gt;Ainda não dá pra fazer um comparativo comigo porque minha memória só vai até meus 5 anos e ainda assim é incompleta e só está presente para registrar as grandes descobertas (ou incêndios se preferirem).&lt;/p&gt;
&lt;p&gt;Esse tipo de comparação entre pai e filho também deve ser evitada porque faz mal para ambos.&lt;/p&gt;
&lt;p&gt;A outra criança é a minha sobrinha que tem 12 anos e estuda no melhor colégio que uma criança poderia estudar em São Paulo. Os pais dela (meu cunhado e cunhada) são extremamente presentes e acompanham os estudos dela de perto.&lt;/p&gt;
&lt;p&gt;Também dão apoio e suporte nos assuntos, temas e matérias onde ela sente maior dificuldade ajudando pessoalmente quando possível ou através de atividades complementares pagas.&lt;/p&gt;
&lt;p&gt;A minha sobrinha enfrenta dificuldades na(s) escola(s) ano após ano e meus cunhados até já a submeteram à avaliações para detecção de algum tipo de distúrbio neurológico como o DDA. Os resultados foram negativos.&lt;/p&gt;
&lt;p&gt;Uma das características que observei nela é a ausência total de curiosidade.&lt;/p&gt;
&lt;p&gt;Eu e o meu cunhado trabalhamos em áreas relacionadas à TI e graças a isso temos acesso constante a diversas tecnologias novas e à Internet. Sempre temos em mãos aparelhos, computadores, softwares, livros, filmes e até mesmo brinquedos que deveriam despertar a curiosidade das crianças.&lt;/p&gt;
&lt;p&gt;Não adianta. Ela continua levando a vida dela e apenas recebendo as informações sem nunca tentar &amp;#8220;caçá-las&amp;#8221;.&lt;/p&gt;
&lt;p&gt;O terceiro caso já não é mais de uma &amp;#8220;criança&amp;#8221;. Ele fez 18 anos no mês passado. Mas eu já convivo com ele desde os 12 porque ele é primo &amp;#8220;caçula&amp;#8221; da minha esposa.&lt;/p&gt;
&lt;p&gt;A curiosidade dele é o que eu chamo de &amp;#8220;curiosidade on-demand&amp;#8221;. Pois ele até vai atrás de entender o funcionamento das coisas mas só quando aquilo servirá para resolver um problema prático do presente.&lt;/p&gt;
&lt;p&gt;Po exemplo: ele sabe arrumar alguns aparelhos eletrodomésticos só porque trabalhou alguns meses fazendo isso.&lt;/p&gt;
&lt;p&gt;Ele entende o funcionamento de um ferro de passar roupas até o ponto de saber que se o fio do chicote está partido o ferro não vai funcionar, mas nunca ao ponto de associar que o ferro de passar roupas é uma resistência elétrica que transforma a energia elétrica em energia na forma de calor.&lt;/p&gt;
&lt;p&gt;A curiosidade dele nunca tenta romper a barreira da necessidade.&lt;/p&gt;
&lt;p&gt;Algumas observações: tanto minha sobrinha quanto do primo da minha esposa são extremamente vaidosos e se preocupam com a aparência. Além disso eles são facilmente seduzidos por coisas fúteis e são extremamente vulneráveis aos apelos consumistas (celular da moda, roupa da moda, seriado da moda, &amp;#8230;).&lt;/p&gt;
&lt;p&gt;No caso do primo da minha esposa pedir pra ele ler alguma coisa é quase o mesmo que pedir pra ele se matar. Ele assiste DVD dublado pra não ter que ler a legenda.&lt;/p&gt;
&lt;p&gt;Com isso descrito eu parto pro questionamento:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Todas as crianças das últimas gerações são assim ou minhas amostras estão contaminadas?&lt;/li&gt;
&lt;li&gt;Vocês conhecem crianças curiosas? (pais corujas, por favor, sejam objetivos nas respostas)&lt;/li&gt;
&lt;li&gt;Vocês acham que as crianças de hoje não são mais curiosas porque elas não precisavam mais &amp;#8216;caçar&amp;#8217; as informações pois basta ficar parado na frente da TV/Internet para obtê-las?&lt;/li&gt;
&lt;li&gt;Os pais podem estimular a curiosidade de seus filhos?&lt;/li&gt;
&lt;li&gt;Como fazer isso?&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=kInguddqusI:CoDrclCBbe4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pythonologia?a=kInguddqusI:CoDrclCBbe4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://pythonologia.org/2008/10/27/curiosidade-nas-criancas/#comments" thr:count="11" />
		<link rel="replies" type="application/atom+xml" href="http://pythonologia.org/2008/10/27/curiosidade-nas-criancas/feed/atom/" thr:count="11" />
		<thr:total>11</thr:total>
	<feedburner:origLink>http://pythonologia.org/2008/10/27/curiosidade-nas-criancas/</feedburner:origLink></entry>
	</feed>
