<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-396083382034174439</id><updated>2010-06-28T15:03:26.006-03:00</updated><title type='text'>RodolfoCarvalho.net</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default?start-index=26&amp;max-results=25'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>93</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-3098969307618171149</id><published>2010-06-28T14:22:00.002-03:00</published><updated>2010-06-28T15:03:26.013-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='du'/><category scheme='http://www.blogger.com/atom/ns#' term='awk'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Utilização do disco usando du e awk</title><content type='html'>Hoje escrevi algumas linhas no shell para me ajudar a identificar onde estavam as coisas mais pesadas na hierarquia...&lt;br /&gt;&lt;br /&gt;Fica aqui como possível referência futura:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Listar/calcular tamanho para 2 níveis de diretórios&amp;nbsp; &lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;du -k -d2 . | awk '{printf "%-40s %4.1f MB\n", $2, $1/1024}' | sort&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ver os 15 maiores diretórios&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;du -k * | sort -nr | head -n 15&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ver apenas diretórios com mais de 1 MB&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;du -k -d3 main | awk '{ if ($1 &amp;gt;= 1024) printf "%-40s %4.1f MB\n", $2, $1/1024}' | sort&amp;nbsp;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Explicações básicas:&lt;br /&gt;&lt;b&gt;du&lt;/b&gt;: mostra o espaço em disco ocupado por um arquivo/diretório.&lt;br /&gt;-k mostrar valores em KB&lt;br /&gt;-d N processar árvore de diretório N níveis&lt;br /&gt;&lt;br /&gt;&lt;b&gt;awk&lt;/b&gt;: permite fazer a magia negra. Para cada linha do input, imprimimos o nome do diretório (em $2) com uma largura de 40 caractéres (completados com espaços em branco) e o tamanho (em $1) dividido por 1024 (conversão para MB).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-3098969307618171149?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/3098969307618171149/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=3098969307618171149' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/3098969307618171149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/3098969307618171149'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2010/06/utilizacao-do-disco-usando-du-e-awk.html' title='Utilização do disco usando du e awk'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-3579830432068810</id><published>2010-06-26T20:58:00.000-03:00</published><updated>2010-06-26T20:58:25.334-03:00</updated><title type='text'>Novo layout</title><content type='html'>Sei que o blog anda abandonado... os tempos aqui em Lisboa não são convidativos a bloggar muito :D&lt;br /&gt;Infelizmente meu tempo aqui está chegando ao fim. Já não tenho mais aulas.&lt;br /&gt;&lt;br /&gt;Hoje resolvi fazer uma limpeza no visual do blog. Espero ter mais alguma novidade em breve.&lt;br /&gt;O antes e o depois:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vI4PxbAv6pM/TCaSItBslbI/AAAAAAAADyQ/EBmNPTja1do/s1600/Screen+shot+2010-06-27+at+12.00.26+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="231" src="http://3.bp.blogspot.com/_vI4PxbAv6pM/TCaSItBslbI/AAAAAAAADyQ/EBmNPTja1do/s400/Screen+shot+2010-06-27+at+12.00.26+AM.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vI4PxbAv6pM/TCaSZCfmhtI/AAAAAAAADyY/s6eMDCQLRT0/s1600/Screen+shot+2010-06-27+at+12.50.26+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://3.bp.blogspot.com/_vI4PxbAv6pM/TCaSZCfmhtI/AAAAAAAADyY/s6eMDCQLRT0/s400/Screen+shot+2010-06-27+at+12.50.26+AM.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Optei por usar um modelo com menos cores, alarguei o espaço para as postagens, rearrumei os widgets, renomeei títulos que sugeriam o nome antigo do blog, "LifeAtMyMind". E então, estou no caminho certo?&lt;br /&gt;Gostei de ver "novidades" (que possivelmente já são bem antigas) no Blogger, como possibilidade de criar páginas fixas e mostrar só o início da postagem com um link "ler mais". Também usei o novo editor de modelo e gostei, apesar de visualmente ele ser totalmente diferente da interface padrão do Blogger.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-3579830432068810?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/3579830432068810/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=3579830432068810' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/3579830432068810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/3579830432068810'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2010/06/novo-layout.html' title='Novo layout'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vI4PxbAv6pM/TCaSItBslbI/AAAAAAAADyQ/EBmNPTja1do/s72-c/Screen+shot+2010-06-27+at+12.00.26+AM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-4618200349867191837</id><published>2010-04-19T11:35:00.000-03:00</published><updated>2010-04-19T11:35:22.192-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dica'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Como encontrar arquivos usando o GNU find e ignorando alguns diretórios</title><content type='html'>&lt;div style="color: #666666;"&gt;&lt;i&gt;Esta dica foi tirada de um comentário anônimo em http://www.linux.com/archive/feed/49304.&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;span style="color: #666666;"&gt;Fica aqui para referência futura...&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Algumas vezes queremos usar o GNU find para procurar por arquivos recursivamente. O problema é quando queremos excluir alguns diretórios da busca. O jeito é usar mais de uma condição. Por exemplo:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;find / -path '/proc'  -prune -o -path '/dev' -prune -o -name foo.txt&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Este comando procura por arquivos chamados "foo.txt" na raiz de sistema, ignorando tudo em /proc e /dev. O '-o' é um "ou" e o '-prune' faz com que o find ignore o caminho encontrado.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Original em inglês: &lt;br /&gt;Sometimes you may want to exclude parts of the directory tree.  It took  me a while to figure out how to do this because it isn't very intuitive.&lt;br /&gt;If  you wanted to search for foo.txt but don't want to descend  into &lt;i&gt;/proc&lt;/i&gt; or &lt;i&gt;/dev&lt;/i&gt; you can do this&lt;br /&gt;&lt;i&gt;find / -path '/proc'  -prune -o -path '/dev' -prune -o -name foo.txt&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The '-o' means  'or', so there in this case there are three conditions, separated by  'or', which will cause find to take action. The first two is when the  path is '/proc' or '/dev' the action find will take is to prune them  from the search path.  The third condition is when the name is foo.txt.   In this case find will print, since no other action is specified.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-4618200349867191837?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/4618200349867191837/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=4618200349867191837' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/4618200349867191837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/4618200349867191837'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2010/04/como-encontrar-arquivos-usando-o-gnu.html' title='Como encontrar arquivos usando o GNU find e ignorando alguns diretórios'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-3129720853104936753</id><published>2010-01-21T19:22:00.000-02:00</published><updated>2010-01-21T19:22:17.802-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Sons, muitos sons! Com Python :D</title><content type='html'>Pois é, tive um dia de domingo agradável, programando!&lt;br /&gt;A turma do &lt;a href="http://dojorio.org/"&gt;Dojo Rio&lt;/a&gt; está tocando o &lt;a href="http://github.com/flavioamieiro/dojotools"&gt;projeto opensource Dojotools&lt;/a&gt; para reunir ferramentas para facilitar nossas vidas durante as sessões de &lt;a href="http://codingdojo.org/"&gt;coding dojo&lt;/a&gt;.&lt;br /&gt;&lt;strike&gt;Para dar minha pequena contribuição &lt;/strike&gt;para minha diversão, e prejuízo de meus ouvidos, passei a tarde arrumando o &lt;a href="http://github.com/rhcarvalho/sound_alarm"&gt;sound_alarm&lt;/a&gt;. Este script surgiu de diversas brincadeiras que já havia feito para reproduzir som com &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; no Windows e no Ubuntu.&lt;br /&gt;Juntei coisas que eu já tinha, refatorei, produzi algumas "melodias" para perturbar quem se aproxima de mim, e taquei no &lt;a href="http://github.com/"&gt;github&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ontem testei o script no Mac e não funciona. Pelo menos aqui no Macbook Pro não tem /dev/audio, e não descobri como tocar sons em diferentes frequências como consigo no Linux e Windows.&lt;br /&gt;&lt;br /&gt;Eis que se alguém tiver uma solução pro Mac OSX ela é apreciada :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-3129720853104936753?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/3129720853104936753/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=3129720853104936753' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/3129720853104936753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/3129720853104936753'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2010/01/sons-muitos-sons-com-python-d.html' title='Sons, muitos sons! Com Python :D'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-5225564876985580001</id><published>2009-12-10T15:53:00.000-02:00</published><updated>2009-12-10T15:53:49.475-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='portugal'/><category scheme='http://www.blogger.com/atom/ns#' term='matlab'/><title type='text'>Novas línguas do semestre</title><content type='html'>Neste segundo semestre de 2009 inicei meu contato com diversas novas línguas e linguagens.&lt;br /&gt;Para começar, estou agora morando em Portugal, o que me deixa em contato com um português um bocado diferente do que estava acostumado no Brasil.&lt;br /&gt;&lt;br /&gt;Depois, por ter contato com amigos de diversas partes do globo, o inglês é certamente a língua que mais tenho utilizado no dia-a-dia. Para completar, tem o Polonês e o Turco, que podem parecer exóticos mas tem feito parte do meu cotidiano no momento.&lt;br /&gt;&lt;br /&gt;Mas, o que tenho feito de novo aqui em Lisboa? Só vida boa? Não, não.&lt;br /&gt;Os trabalhos da faculdade me fizeram desviar da jornada estritamente pythônica para olhar outras linguagens.&lt;br /&gt;&lt;br /&gt;No Brasil meus amigos continuam arrasando com as &lt;a href="http://dojorio.org/"&gt;super comunidades&lt;/a&gt;, &lt;a href="http://horaextra.org/"&gt;mega encontros&lt;/a&gt;, e muita agitação todos os dias da semana. Aqui, encarei um projeto de Inteligência Artificial usando LISP.&lt;br /&gt;O objetivo era resolver automaticamente instâncias do jogo &lt;a href="http://www.hidato.com/"&gt;Hidato&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Inicialmente o contato com LISP não foi muito amigável, porém com o tempo fui pegando o gosto e vi muito espaço para aprendizado com esta linguagem. Implementei meu projeto para o ambiente &lt;a href="http://www.clisp.org/"&gt;CLISP&lt;/a&gt;, e fiquei muito satisfeito pela boa velocidade com que resolvia grandes instâncias do jogo.&lt;br /&gt;&lt;br /&gt;Os pontos que me deixaram curiosos no LISP e que ainda não tive a oportunidade de brincar foi o processamento de texto, acesso a dados via Internet, e outros detalhes que não me vêm à cabeça neste momento...&lt;br /&gt;&lt;br /&gt;O lado negro foi ter que cursar Programação com Objectos usando Java, linguagem extremamente burocrática, e que nenhum conhecimento interessante me traz. É impressionante a distância entre uma idéia pra solucionar um problema e uma solução implementada em Java. Talvez os mais experientes hackers da terra do cafezinho vão discordar desse meu desabafo sem código, mas aqui o objetivo é só relatar meu descontentamento mesmo :P&lt;br /&gt;&lt;br /&gt;Por fim, Matlab. É um ambiente proprietário, de sintaxe muitas vezes esquisita, e que estou utilizando nas aulas de Processamento de Imagens. Não vi ainda vantagens em relação a usar Python + Numpy + Matplotlib... ainda assim, é uma linguagem interpretada e lá temos console e um manual muito bem elaborado.&lt;br /&gt;&lt;br /&gt;Acho que as linguagens compiladas tem um ponto a menos nas minhas avaliações por conta da velocidade do "escrever código". Legibilidade e fluxo de desenvolvimento acabam valendo mais que tempo de execução.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-5225564876985580001?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/5225564876985580001/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=5225564876985580001' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5225564876985580001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5225564876985580001'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/12/novas-linguas-do-semestre.html' title='Novas línguas do semestre'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-5633668190137152630</id><published>2009-09-21T13:35:00.001-03:00</published><updated>2009-09-21T13:35:28.171-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='portugal'/><title type='text'>Novo blog com histórias e relatos da minha viagem para Portugal</title><content type='html'>Hoje finalmente comecei o blog para relatar minha viagem, o um ano de intercâmbio em Lisboa.&lt;br /&gt;&lt;br /&gt;Aos que quiserem acompanhar a jornada, apontem para &lt;a href="http://lisboa.rodolfocarvalho.net/"&gt;Lisboa, Portugal&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-5633668190137152630?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/5633668190137152630/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=5633668190137152630' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5633668190137152630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5633668190137152630'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/09/novo-blog-com-historias-e-relatos-da.html' title='Novo blog com histórias e relatos da minha viagem para Portugal'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-8993530987326220824</id><published>2009-09-11T07:13:00.000-03:00</published><updated>2009-09-11T07:13:27.435-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='portugal'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><title type='text'>Lisboa, Portugal</title><content type='html'>Eis que cá estou desde segunda-feira. Esta tem sido uma semana muito boa.&lt;br /&gt;&lt;br /&gt;Conheci novos países, novas culturas, novas pessoas... sim... PESSOAS muito interessantes. Escrevi algumas coisas em papel nos primeiros dias, depois pretendo postar.&lt;br /&gt;&lt;br /&gt;Agora moro aqui em Portugal por um ano, muitas novidades por vir, como o Coding Dojo Lisboa! Aguardem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-8993530987326220824?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/8993530987326220824/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=8993530987326220824' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/8993530987326220824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/8993530987326220824'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/09/lisboa-portugal.html' title='Lisboa, Portugal'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-6196569247456893415</id><published>2009-08-23T17:52:00.000-03:00</published><updated>2009-08-23T17:52:38.461-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dica'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Windows Vista: filtrando visualização no Windows Explorer</title><content type='html'>Muitas vezes ficamos apenas reclamando dos Sistemas Operacionais, reclamamos do Windows, ele não presta, a Microsoft é má, isso e aquilo...&lt;br /&gt;Bem, depois de ouvir cuidadosamente a palestra do Robert M. Lefkowitz na PyCon 2007, espero que você mude de idéia e comece a entender onde fica o software livre e o proprietário, pois ambos tem seu espaço. Então agora estou escrevendo a favor do Windows Vista, já que acabo de descobrir uma funcionalidade muito bacana, que parece ficar escondida na interface...&lt;br /&gt;&lt;br /&gt;Programar no Windows não costuma ser uma tarefa tão divertida quanto ter um Linux bem arrumado, mas em ambos os casos eu sempre fico querendo esconder os arquivos &lt;i&gt;.pyc&lt;/i&gt; e ver só o que interessa, os &lt;i&gt;.py&lt;/i&gt;.&lt;br /&gt;O que eu descobri é que com o Windows Explorer eu posso fazer isso e um pouco mais!&lt;br /&gt;&lt;br /&gt;Aqui está um diretório com alguns arquivos Python e seus respectivos compilados, no modo de exibição "detalhes": &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_vI4PxbAv6pM/SpGpq8CHmNI/AAAAAAAAC-Q/t9csm122lXo/s1600-h/list_details.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_vI4PxbAv6pM/SpGpq8CHmNI/AAAAAAAAC-Q/t9csm122lXo/s400/list_details.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Colocando o mouse sobre  qualquer coluna aparece uma seta no canto direito, como pode ser visto abaixo. Clique nesta seta para exibir um menu contextualizado com a coluna. Por exemplo, na coluna "Modificado em", é possível filtrar os arquivos por data. Tem até opções para filtrar os arquivos mais recentes, por semana, mês ou ano. Veja:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_vI4PxbAv6pM/SpGm_VhhQDI/AAAAAAAAC94/47n5_LrY0J4/s1600-h/filter_by_date.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_vI4PxbAv6pM/SpGm_VhhQDI/AAAAAAAAC94/47n5_LrY0J4/s400/filter_by_date.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;E você pode filtrar por nome, neste caso resolvi mostrar apenas os arquivos cujo nome começa com números (ocultando o __init__.py, que neste caso não é tão interessante):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_vI4PxbAv6pM/SpGnB_Ff0_I/AAAAAAAAC-A/WdRAIua7umk/s1600-h/filter_by_name.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_vI4PxbAv6pM/SpGnB_Ff0_I/AAAAAAAAC-A/WdRAIua7umk/s400/filter_by_name.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;E posso agrupar por tipo de arquivo, assim posso acessar separadamente, como se fossem dois "diretórios virtuais":&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_vI4PxbAv6pM/SpGnEd8d1VI/AAAAAAAAC-I/MrXgSx8ctj0/s1600-h/group_by_type.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_vI4PxbAv6pM/SpGnEd8d1VI/AAAAAAAAC-I/MrXgSx8ctj0/s400/group_by_type.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Note que desde a segunda tela eu já estava usando o filtro por "Tipo" para exibir apenas "Python file", resolvendo meu problema com os "&lt;i&gt;.pyc&lt;/i&gt;" que só distraem!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-6196569247456893415?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/6196569247456893415/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=6196569247456893415' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/6196569247456893415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/6196569247456893415'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/08/windows-vista-filtrando-visualizacao-no.html' title='Windows Vista: filtrando visualização no Windows Explorer'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vI4PxbAv6pM/SpGpq8CHmNI/AAAAAAAAC-Q/t9csm122lXo/s72-c/list_details.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-4575066899811279603</id><published>2009-08-23T17:22:00.003-03:00</published><updated>2009-08-23T18:49:29.632-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dica'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python: o print agora se chama raw_input</title><content type='html'>Opa! Ah? Que? O que que houve? Como assim?&lt;br /&gt;&lt;br /&gt;Certo, nada mudou no Python... na verdade mudou, agora no Python 3.0 o &lt;i&gt;raw_input&lt;/i&gt; virou &lt;i&gt;input&lt;/i&gt;, que não deve ser confundido com o &lt;i&gt;input &lt;/i&gt;presente nas versões pre-3.0.&lt;br /&gt;&lt;br /&gt;A dica que deixo aqui é apenas um fato que percebi que tenho utilizado há algum tempo... talvez uma nova "técnica", mas que não dei muita bola até que comecei a falar sobre ela com amigos, e pensei que não faria mal relatar aqui.&lt;br /&gt;&lt;br /&gt;Às vezes queremos colocar um &lt;i&gt;print &lt;/i&gt;no meio do código, naquele processo de depuração (claro, você está fazendo TDD e dificilmente precisa fazer isso) e o que acontece é que, na maioria dos casos, temos que ficar caçando onde o &lt;i&gt;output &lt;/i&gt;foi parar, quando você tem muita informação que surge no terminal.&lt;br /&gt;&lt;br /&gt;Então, use o&lt;i&gt; raw_input&lt;/i&gt;, que terá o mesmo efeito do &lt;i&gt;print&lt;/i&gt;, porém o interpretador vai parar logo após exibir o que solicitou. Basta pressionar qualquer tecla para continuar a execução do &lt;i&gt;script&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Outrar opção é parar com AssertionError, fazendo: &lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;assert False, objeto_ou_valor_a_ser_inspecionado&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Exemplo: &lt;br /&gt;&lt;pre class="prettyprint"&gt;def get_tweets(user):&lt;br /&gt;   from gluon.tools import fetch&lt;br /&gt;   from gluon.contrib.simplejson import loads as sj_loads&lt;br /&gt;   &lt;br /&gt;   page = fetch('http://twitter.com/%s?format=json' % user)&lt;br /&gt;   return sj_loads(page)['#timeline']&lt;br /&gt;&lt;br /&gt;#print get_tweets('ilovetweeting')&lt;br /&gt;raw_input(get_tweets('ilovetweeting'))&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-4575066899811279603?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/4575066899811279603/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=4575066899811279603' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/4575066899811279603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/4575066899811279603'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/08/python-o-print-agora-se-chama-rawinput.html' title='Python: o print agora se chama raw_input'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-1658174443271282479</id><published>2009-08-23T01:11:00.000-03:00</published><updated>2009-08-23T01:11:47.036-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='globo.com'/><category scheme='http://www.blogger.com/atom/ns#' term='portugal'/><title type='text'>Novo domínio e demais novidades</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;A novidade mais recente é que agora o &lt;a href="http://blog.rodolfocarvalho.net/"&gt;lifeatmymind.blogspot.com&lt;/a&gt; é &lt;a href="http://blog.rodolfocarvalho.net/"&gt;blog.rodolfocarvalho.net&lt;/a&gt;!&lt;br /&gt;Outra é que a partir do próximo mês vou residir em Lisboa, Portugal. Em busca de novas aventuras...&lt;br /&gt;&lt;br /&gt;E isso quer dizer que &lt;a href="http://globo.com/"&gt;globo.com&lt;/a&gt; agora entrou para a história, não estou mais desenvolvendo lá. Excelente experiência que tive nos últimos 8 meses, agora é partir para o desconhecido na Europa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-1658174443271282479?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/1658174443271282479/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=1658174443271282479' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/1658174443271282479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/1658174443271282479'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/08/novo-dominio-e-demais-novidades.html' title='Novo domínio e demais novidades'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-5629019206158367966</id><published>2009-08-22T16:02:00.003-03:00</published><updated>2009-08-22T16:29:24.097-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='evento'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='devinrio'/><title type='text'>Dev in Rio 2009</title><content type='html'>Que Rock in Rio que nada... o evento de 2009 é o &lt;a href="http://devinrio.com.br/"&gt;Dev in Rio&lt;/a&gt;!&lt;br /&gt;Este evento é diferente de tudo que você já viu, e de todos os eventos que já paticipou. E o que me deixa tão confiante para dizer isso? Bem, o foco nas &lt;span style="font-weight: bold;"&gt;PESSOAS&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Este não é apenas um evento sobre tecnologias e máquinas, e sim um encontro de PESSOAS com um propósito. Ser diferente, a constante busca em fazer o melhor, vontade de mudar o mundo... se você procura pessoas que compatilham deste interesse, vá ao &lt;a href="http://devinrio.com.br/"&gt;Dev in Rio 2009&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Os créditos vão para os meus amigos &lt;a href="http://gc.blog.br/2009/08/20/dev-in-rio-2009-eu-vou/"&gt;Guilherme Chapiewski&lt;/a&gt; e &lt;a href="http://henriquebastos.net/2009/08/21/dev-in-rio-2009-eu-vou/"&gt;Henrique Bastos&lt;/a&gt;, dois dos grandes movimentadores de comunidade de software aqui no Rio de Janeiro, e para todos os outros envolvidos que estão tornando o &lt;a href="http://devinrio.com.br/"&gt;Dev in Rio&lt;/a&gt; uma feliz realidade.&lt;br /&gt;&lt;br /&gt;O evento será realizado no próximo mês, na segunda-feira dia 14 de Setembro de 2009. É o início da semana com o pé direito.&lt;br /&gt;Infelizmente eu não vou poder participar, pois estarei iniciando outra coisa: minhas aulas em Lisboa!&lt;br /&gt;&lt;br /&gt;Então, se não é &lt;a href="http://devinrio.com.br/"&gt;Dev in Rio&lt;/a&gt; em 2009, será &lt;a href="http://rockinrio-lisboa.sapo.pt/"&gt;Rock in Rio Lisboa em 2010&lt;/a&gt; e &lt;a href="http://devinrio.com.br/"&gt;Dev in Rio&lt;/a&gt; 2010, já apostando na segunda edição!&lt;br /&gt;&lt;br /&gt;Além de palestrantes nacionais e internacionais, vai ter uma arena rolando &lt;a href="http://dojorio.wordpress.com/2009/08/21/dev-in-rio-2009/"&gt;Dojo Rio&lt;/a&gt; durante o evento. Já se conscientizou que é imperdível?&lt;br /&gt;&lt;br /&gt;Agora é só correr e &lt;a href="http://devinrio.com.br/"&gt;fazer logo sua inscrição&lt;/a&gt;, pois as vagas são limitadas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-5629019206158367966?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/5629019206158367966/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=5629019206158367966' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5629019206158367966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5629019206158367966'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/08/dev-in-rio-2009.html' title='Dev in Rio 2009'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-3995539200024716547</id><published>2009-08-14T11:03:00.004-03:00</published><updated>2009-08-14T13:03:12.114-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Filtros personalizados no admin do Django</title><content type='html'>Então ontem estava eu pensando na melhor forma de colocar meu próprio &lt;a href="http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter"&gt;filtro naquela caixa lateral da interface padrão da aplicação 'admin'&lt;/a&gt; do &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Num ModelAdmin você normalmente pode especificar um nome de um campo que faça parte do seu Model, mas não pode fazer por exemplo um filtro por um valor computado.&lt;br /&gt;&lt;br /&gt;Eu já tinha começado por uma abordagem bem rasteira de estender os templates padrão e colocar meu filtro logo abaixo dos outros filtros (guardado numa &lt;a href="http://bazaar-vcs.org/BzrShelveExample"&gt;shelf&lt;/a&gt; do &lt;a href="http://bazaar-vcs.org/"&gt;Bazaar&lt;/a&gt; :P). Mas eis que a melhor solução até agora foi a do &lt;a href="http://www.marinhobrandao.com/"&gt;Marinho Brandão&lt;/a&gt; e do &lt;a href="http://semente.taurinus.org/"&gt;Semente&lt;/a&gt; no &lt;a href="http://www.djangosnippets.org/snippets/1051/"&gt;DjangoSnippets&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Fiz algumas poucas alterações para pegar do banco apenas valores distintos, e apesar de ser um ponto que pode prejudicar o desempenho, gero a lista a cada requisição -- caso contrário, a lista só será recomputada quando o servidor for reiniciado. Talvez fosse mais interessante gerar um lista fixa de opções (implicando nenhum acesso ao banco), ou mesmo ao invés de consultar N linhas do banco e remover valores duplicados, poderia partir de uma lista fixa e chegar se o banco contém resultados para o valor da lista.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;# meu_projeto/minha_app/admin/filterspecs.py&lt;br /&gt;from django.contrib.admin.filterspecs import FilterSpec, ChoicesFilterSpec&lt;br /&gt;from django.utils.encoding import smart_unicode&lt;br /&gt;from django.utils.translation import ugettext as _&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class AlphabeticFilterSpec(ChoicesFilterSpec):&lt;br /&gt;    """&lt;br /&gt;    Adds filtering by first char (alphabetic style) of values in the admin&lt;br /&gt;    filter sidebar. Set the alphabetic filter in the model field attribute&lt;br /&gt;    'alphabetic_filter'.&lt;br /&gt;&lt;br /&gt;    my_model_field.alphabetic_filter = True&lt;br /&gt;   &lt;br /&gt;    Based on http://www.djangosnippets.org/snippets/1051/&lt;br /&gt;    """&lt;br /&gt;&lt;br /&gt;    def __init__(self, f, request, params, model, model_admin):&lt;br /&gt;        super(AlphabeticFilterSpec, self).__init__(f, request, params, model,&lt;br /&gt;                                                   model_admin)&lt;br /&gt;        self.lookup_kwarg = '%s__istartswith' % f.name&lt;br /&gt;        self.lookup_val = request.GET.get(self.lookup_kwarg, None)&lt;br /&gt;        self.model = model&lt;br /&gt;&lt;br /&gt;    def choices(self, cl):&lt;br /&gt;        yield {'selected': self.lookup_val is None,&lt;br /&gt;                'query_string': cl.get_query_string({}, [self.lookup_kwarg]),&lt;br /&gt;                'display': _('All')}&lt;br /&gt;       &lt;br /&gt;        f = self.field&lt;br /&gt;        values_list = self.model.objects.distinct().values_list(f.name, flat=True)&lt;br /&gt;        # getting the first char of values&lt;br /&gt;        lookup_choices = sorted(set(val[0].lower() for val in values_list if val))&lt;br /&gt;       &lt;br /&gt;        for val in lookup_choices:&lt;br /&gt;            yield {'selected': smart_unicode(val) == self.lookup_val,&lt;br /&gt;                    'query_string': cl.get_query_string({self.lookup_kwarg: val}),&lt;br /&gt;                    'display': val.upper()}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# registering the filter&lt;br /&gt;FilterSpec.filter_specs.insert(0, (lambda f: getattr(f, 'alphabetic_filter', False),&lt;br /&gt;                                   AlphabeticFilterSpec))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;E para ativar seu filtro para algum campo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;# meu_projeto/minha_app/models.py&lt;br /&gt;# [...]&lt;br /&gt;&lt;br /&gt;class Empresa(models.Model):&lt;br /&gt;    nome = models.CharField(max_length=64) &lt;br /&gt;    nome.alphabetic_filter = True&lt;br /&gt;# [...]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# meu_projeto/minha_app/admin/__init__.py&lt;br /&gt;# [...]&lt;br /&gt;class EmpresaAdmin(admin.ModelAdmin): &lt;br /&gt;    list_display = ('nome', 'cnpj', 'inicio_convenio', &lt;br /&gt;                    '_termino_convenio', 'natureza') &lt;br /&gt;    list_display_links = ('nome', 'cnpj') &lt;br /&gt;    list_filter = ('natureza', 'termino_convenio', 'inicio_convenio', 'nome')&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# meu_projeto/urls.py&lt;br /&gt;# Chama o código que registra o filtro personalizado&lt;br /&gt;import sgtce.admin.filterspecs&lt;br /&gt;# [...]&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-3995539200024716547?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/3995539200024716547/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=3995539200024716547' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/3995539200024716547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/3995539200024716547'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/08/filtros-personalizados-no-admin-do.html' title='Filtros personalizados no admin do Django'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-6573660678141200029</id><published>2009-08-12T15:06:00.007-03:00</published><updated>2009-08-12T15:55:47.885-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='we2py'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pythonrio'/><category scheme='http://www.blogger.com/atom/ns#' term='framps'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><title type='text'>Web2py hack day</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/_vI4PxbAv6pM/SoMElYklaMI/AAAAAAAAC0k/v-mP1_HGvX4/s400/DSC02393.JPG" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Na última sexta-feira realizamos um encontro em um dos laboratórios da &lt;a href="http://www.peta5.com.br/"&gt;Peta 5&lt;/a&gt; na &lt;a href="http://www.uff.br/"&gt;UFF&lt;/a&gt;.&lt;br /&gt;O tema foi o framework desenvolvimento de aplicações web &lt;a href="http://www.web2py.com/"&gt;web2py&lt;/a&gt;, escrito em &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;, e que conta com uma &lt;a href="http://groups.google.com/group/web2py"&gt;crescente comunidade&lt;/a&gt; -- &lt;a href="http://groups.google.com/group/web2py-users-brazil"&gt;boa parte dela aqui no Brasil&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Este post serve como uma continuação da história sobre &lt;a href="http://lifeatmymind.blogspot.com/2009/07/o-que-nos-estamos-fazendo-aqui-no-rio.html"&gt;o que estamos fazendo aqui no Rio&lt;/a&gt;.&lt;br /&gt;Como conversamos depois do último &lt;a href="http://dojorio.wordpress.com/"&gt;dojo&lt;/a&gt; na quarta-feira passada, "estamos procurando por melhores formas de desenvolver software fazendo e ajudando outros a fazer o mesmo..." e por aí vai o &lt;a href="http://agilemanifesto.org/"&gt;Manifesto Ágil&lt;/a&gt;. Só que, para fugir da imagem enganosa estabelecida pelas &lt;span style="font-style: italic;"&gt;buzzwords&lt;/span&gt; -- os conceitos deturpados de o que é fazer software, cunhamos o termo &lt;span style="font-style: italic;"&gt;framps&lt;/span&gt; como a nossa palavra para descrever o que somos e fazemos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/_vI4PxbAv6pM/SoME4FHyFqI/AAAAAAAAC2I/M2Vmhg83L2c/s400/DSC02421.JPG" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Estão foi isso, tivemos o &lt;span style="font-style: italic; font-weight: bold;"&gt;web2py hack day framps&lt;/span&gt;. Juntamos membros do &lt;a href="http://dojorio.wordpress.com/"&gt;Dojo Rio&lt;/a&gt;, &lt;a href="http://pythonrio.org/"&gt;PythOnRio&lt;/a&gt;, &lt;a href="http://www.inpi.gov.br/"&gt;INPI&lt;/a&gt;, &lt;a href="http://www.uff.br/"&gt;UFF&lt;/a&gt;, etc. Alguns computadores, disposição e as dicas e orientações do &lt;a href="http://blog.justen.eng.br/"&gt;Álvaro Justen&lt;/a&gt;, e rapidinho fomos desenvolvendo nosso produto: o &lt;span style="font-weight: bold;"&gt;web2itter&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;Se virem esse nome em qualquer outro lugar, não se enganem, fui eu quem inventei! Apesar do escopo amplo, o primeiro release foi apenas uma aplicação concorrente do &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, com a diferença de suportar muito mais requisições por segundo que o original.&lt;br /&gt;&lt;br /&gt;Depois, só porque a UFF tinha que fechar as portas e porque nossos estômagos estavam vazios, paramos de programar e fomos para o &lt;a href="http://www.apontador.com.br/.../vestibular_do_chopp_de_sao_domingos_pizzaria_ltda.html"&gt;Vestibular do Chopp&lt;/a&gt; encarar uma picanha... e algumas horas de bate-papo sobre os mais variados temas, incluindo a história do &lt;a href="http://www.gnu.org/"&gt;projeto GNU&lt;/a&gt; e o papel do &lt;a href="http://www.blogger.com/en.wikipedia.org/wiki/Linus_Torvalds"&gt;Linus Torvalds&lt;/a&gt; e seu &lt;a href="http://en.wikipedia.org/wiki/Linux_kernel"&gt;kernel&lt;/a&gt;, as opções de controle de versão de código-fonte: &lt;a href="http://www.git-scm.org/"&gt;git&lt;/a&gt;, &lt;a href="http://www.selenic.com/mercurial/"&gt;mercurial (hg)&lt;/a&gt; e &lt;a href="http://bazaar-vcs.org/"&gt;bazaar (bzr)&lt;/a&gt;, e mais um monte de coisas que sinceramente eu já nem lembro :P.&lt;br /&gt;&lt;br /&gt;E pra isso tudo não poderiam faltar fotos! &lt;a href="http://picasaweb.google.com.br/rhcarvalho/Web2pyHackDayNaUFF"&gt;Vejam as fotos do I Web2py Hack Day Framps&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com.br/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com.br&amp;amp;captions=1&amp;amp;hl=pt_BR&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com.br%2Fdata%2Ffeed%2Fapi%2Fuser%2Frhcarvalho%2Falbumid%2F5369140206549676241%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpt_BR" pluginspage="http://www.macromedia.com/go/getflashplayer" width="400" height="267"&gt;&lt;/embed&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-6573660678141200029?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/6573660678141200029/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=6573660678141200029' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/6573660678141200029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/6573660678141200029'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/08/web2py-hack-day.html' title='Web2py hack day'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_vI4PxbAv6pM/SoMElYklaMI/AAAAAAAAC0k/v-mP1_HGvX4/s72-c/DSC02393.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-6919794499818837544</id><published>2009-08-08T16:10:00.002-03:00</published><updated>2009-08-08T16:24:56.820-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>If-else em uma linha de Python</title><content type='html'>Hoje aprendi mais uma forma [tosca] de fazer condicional com Python.&lt;br /&gt;&lt;br /&gt;Depois do truque lógico do "condicao &lt;span style="font-weight: bold; font-style: italic;"&gt;and&lt;/span&gt; valor_caso_verdadeiro &lt;span style="font-weight: bold; font-style: italic;"&gt;or&lt;/span&gt; valor_caso_falso", o que descobri navegando na Internet hoje foi:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;&gt;&gt; x = 5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;&gt;&gt; ["menor que 10", "maior que 10"][x &gt; 10]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'menor que 10'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Isso funciona porque o tipo &lt;span style="font-weight: bold; font-style: italic;"&gt;bool&lt;/span&gt; (valor booleano) é um subclasse do tipo &lt;span style="font-weight: bold; font-style: italic;"&gt;int&lt;/span&gt;, tipo requerido em indices de sequências.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;&gt;&gt; ["menor que 10", "maior que 10"]['not an integer']&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TypeError: list indices must be integers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;&gt;&gt; issubclass(bool, int)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;True&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;&gt;&gt; ["menor que 10", "maior que 10"][True]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'maior que 10'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mas é claro que isso é só um "acidente" e não deve ser usado normalmente. &lt;a href="http://docs.python.org/whatsnew/2.5.html#pep-308-conditional-expressions"&gt;A partir do Python 2.5&lt;/a&gt; temos a sintaxe:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;valor_caso_verdadeiro &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:courier new;" &gt;if&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; condicao &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:courier new;" &gt;else&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; valor_caso_falso&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-6919794499818837544?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/6919794499818837544/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=6919794499818837544' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/6919794499818837544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/6919794499818837544'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/08/if-else-em-uma-linha-de-python.html' title='If-else em uma linha de Python'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-5365278257564488060</id><published>2009-07-05T20:27:00.003-03:00</published><updated>2009-07-05T20:44:02.342-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotos'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='evento'/><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>O que nós estamos fazendo aqui no Rio?</title><content type='html'>Após ver o &lt;a href="http://tapajos.me/2009/7/5/o-que-n-s-estamos-fazendo-aqui-no-rio"&gt;post do Tapajós&lt;/a&gt;, deu vontade de espalhar mais pela rede o que temos feito por aqui na Cidade Maravilhosa...&lt;br /&gt;&lt;p&gt;Ultimamente a turma do Rio de Janeiro anda bastante agitada e muita gente está sem entender o que é &lt;a href="ttp://horaextra.org/"&gt;Hora Extra&lt;/a&gt;, &lt;a href="http://dojorio.wordpress.com/"&gt;Coding Dojo Rio&lt;/a&gt;, Hack Framps e outros encontros. A explicação é simples, basicamente nós criamos uma certa rotina, com pequenos encontros onde a gente se diverte, bebe cerveja e ainda aprende muito.&lt;/p&gt;  &lt;p&gt;Que eventos são esses?&lt;/p&gt;  &lt;h2&gt;Hora Extra&lt;/h2&gt;  &lt;p&gt;Trata-se do nosso choppinho semanal que acontece todas as segundas-feiras no &lt;a href="http://cariocaboemio.blogspot.com/2008/10/rua-do-ouvidor-bar-antigamente.html"&gt;Bar Antigamente&lt;/a&gt; a partir das 19:30h. Apesar do objetivo ser apenas jogar conversa fora e beber, é impossível juntar mais de três nerds e não rolar muita discussão sobre trabalho, tecnologias, frameworks e todas essas coisas.&lt;/p&gt;  &lt;h3&gt;Veja algumas fotos:&lt;/h3&gt;  &lt;p&gt;&lt;img src="http://farm3.static.flickr.com/2639/3690468482_aeb3bbfe6b.jpg" alt="(Hora Extra)" title="Hora Extra 01" /&gt;&lt;/p&gt;  &lt;p&gt;O objetivo era chegar com a mesa até os táxis, mas dessa vez não deu.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm3.static.flickr.com/2623/3689662223_62984ca76e.jpg" alt="(Hora Extra)" title="Hora Extra 02" /&gt;&lt;/p&gt;  &lt;p&gt;Casa cheia!&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3548/3690468078_36d62db057.jpg" alt="(Hora Extra)" title="Hora Extra 03" /&gt;&lt;/p&gt;  &lt;p&gt;Edição especial do Hora Extra na Intelitiva.&lt;/p&gt;  &lt;h2&gt;Coding Dojo Rio&lt;/h2&gt;  &lt;p&gt;O &lt;a href="http://dojorio.wordpress.com/sobre/"&gt;Coding Dojo Rio&lt;/a&gt; acontece todas as quartas-feiras no CEFET-Rio, a partir de 18:30. Começou do final de 2008 e já conta com a bagagem de 22 encontros realizados, média de 10 participantes e mais de 60 inscritos na &lt;a href="http://groups.google.com/group/dojo-rio/"&gt;lista de discussão&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm3.static.flickr.com/2513/3689662461_6094677599.jpg" alt="(Coding Dojo Rio)" title="Dojo" /&gt;&lt;/p&gt;  &lt;h2&gt;Hack Framps&lt;/h2&gt;  &lt;p&gt;A Hack Framps é o mais restrito desses eventos. Infelizmente não é possível divulgar publicamente onde ele ocorre e convidar a todos pois ele é realizado na casa do &lt;a href="http://www.improveit.com.br/vinicius"&gt;Vinícius&lt;/a&gt;. Em geral quem participa dos outros eventos é automaticamente incluído nesse também. &lt;/p&gt;  &lt;p&gt;A Hack Framps é uma espécie de RejectConf, onde cada um faz uma breve apresentação sobre algum assunto que domina, ou não, e depois a gente troca algumas figurinhas. A idéia desse evento é difundir conhecimento aproveitando as diferentes habilidades que cada um de nós temos e a grande diversidade de áreas que a nossa profissão oferece.&lt;/p&gt;  &lt;h3&gt;Veja algumas fotos:&lt;/h3&gt;  &lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3407/3583551166_6fc92c393c.jpg" alt="(Hack Framps)" title="Hack Framps 01" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3386/3583551494_74590fec99.jpg" alt="(Hack Framps)" title="Hack Framps 02" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3616/3583550010_1032ab1600.jpg" alt="(Hack Framps)" title="Hack Framps 03" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3326/3582741651_a9c39c7a43.jpg" alt="(Hack Framps)" title="Hack Framps 04" /&gt;&lt;/p&gt;  &lt;h2&gt;Festa Framps&lt;/h2&gt;  &lt;p&gt;A Festa Framps é mais um evento restrito lá na casa do &lt;a href="http://www.improveit.com.br/vinicius"&gt;Vínicius&lt;/a&gt; e é o momento da gente se redimir com as esposas. Trata-se de uma festinha para toda a familia e a coisa mais nerd que a gente faz é jogar Wii!&lt;/p&gt;  &lt;h2&gt;Então...&lt;/h2&gt;  &lt;p&gt;Esses eventos todos são uma forma que a gente encontrou de manter a galera unida, trocar idéias e se divertir muito.&lt;/p&gt;  &lt;p&gt;Mas então, o que vocês estão fazendo na sua cidade? Como vocês estão aproveitando o talento de cada um?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-5365278257564488060?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/5365278257564488060/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=5365278257564488060' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5365278257564488060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5365278257564488060'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/07/o-que-nos-estamos-fazendo-aqui-no-rio.html' title='O que nós estamos fazendo aqui no Rio?'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-2558769380138179931</id><published>2009-07-05T02:21:00.005-03:00</published><updated>2009-08-23T04:00:24.091-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>Exceptional Software Explained: Embrace Error</title><content type='html'>Depois de ouvir um keynote do Robert M. Lefkowitz (aka. r0ml) na PyCon 2007 sobre &lt;a href="http://odeo.com/episodes/23761738-The-Importance-of-Programming-Literacy"&gt;The Importance of Programming Literacy&lt;/a&gt;, virei fã desse cara...&lt;br /&gt;&lt;br /&gt;&lt;object data="http://static.odeo.com/flash/player_audio_embed_v2.swf" height="60" id="odeo_audio" type="application/x-shockwave-flash" width="325"&gt; &lt;param name="movie" value="http://static.odeo.com/flash/player_audio_embed_v2.swf" /&gt;&lt;param name="FlashVars" value="jStr=[{'id': 23761738}]" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://homepage.mac.com/r0ml/.Public/ComputerLiteracy.pdf"&gt;PDF com os slides sobre The Importance of Programming Literacy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sua forma de conduzir seus discursos é fantástica, fora o "meta-discurso", já que na maior parte do tempo ele faz justamente o que está sendo pregado no discurso, seguindo as diversas etapas da retórica.&lt;br /&gt;&lt;br /&gt;Hoje encontrei um vídeo da OSCON 2008 no qual ele fala sobre sua metodologia de desenvolvimento, baseada nas comunidades de software open source.&lt;br /&gt;&lt;br /&gt;Lefkowitz compara MSF, XP, e sua metologia de software Excepcional de forma muito bem humorada e com profundos desdobramentos:&lt;br /&gt;&lt;br /&gt;&lt;embed allowfullscreen="true" allowscriptaccess="always" height="200" src="http://blip.tv/play/AcSCVwA" type="application/x-shockwave-flash" width="240" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-2558769380138179931?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/2558769380138179931/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=2558769380138179931' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/2558769380138179931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/2558769380138179931'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/07/exceptional-software-explained-embrace.html' title='Exceptional Software Explained: Embrace Error'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-8572028283214256496</id><published>2009-07-04T16:49:00.003-03:00</published><updated>2009-07-04T16:55:38.180-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><title type='text'>Coding Dojo Rio</title><content type='html'>Não tenho escrito muito nas últimas semanas, mas algo que gostaria de destacar agora é o nosso Coding Dojo Rio.&lt;br /&gt;&lt;br /&gt;Não só chegamos a marca de 20 sessões realizadas, como também na última quarta-feira tivemos o prazer de reunir 14 pessoas no dojo.&lt;br /&gt;&lt;br /&gt;Já foram 22 encontros, temos 65 pessoas no grupo de emails, e temos um grupo bastante estável e coeso. Tem sido uma experiência maravilhosa compartilhar código e ideias com essa galera...&lt;br /&gt;&lt;br /&gt;Você que está lendo aqui deveria procurar mais as práticas Ágeis, experimentá-las, não ter medo de mudar!&lt;br /&gt;Não deixe essa falsa impressão de "não mudo time que está ganhando", por que isso esconde as melhorias que seriam conquistadas quando damos um passo de coragem.&lt;br /&gt;&lt;br /&gt;Mude, dê espaço para você mesmo se tornar uma pessoa melhor!&lt;br /&gt;&lt;br /&gt;Hmm, depois do devaneio, links para os últimos posts do Dojo Rio, com muitas fotos do grupo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dojorio.wordpress.com/2009/07/01/coding-dojo-rio-21/" target="_blank"&gt;Post sobre o Coding Dojo Rio #21 com fotos&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dojorio.wordpress.com/2009/07/04/coding-dojo-rio-22/" target="_blank"&gt;Post sobre o Coding Dojo Rio #22 com muitas fotos&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-8572028283214256496?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/8572028283214256496/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=8572028283214256496' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/8572028283214256496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/8572028283214256496'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/07/coding-dojo-rio.html' title='Coding Dojo Rio'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-7890588550675735534</id><published>2009-07-01T01:57:00.002-03:00</published><updated>2009-07-01T02:00:53.399-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><title type='text'>Morte ao email do BOL e UOL</title><content type='html'>Depois de o &lt;a href="http://pythonrio.org/"&gt;blog da PythOnRio&lt;/a&gt; ter sido bombardeado pelo filtro anti-spam do BOL e UOL, eis que surge a campanha "&lt;a href="http://henriquebastos.net/2009/06/29/morte-ao-email-do-bol-e-uol/"&gt;Morte ao email do BOL e UOL&lt;/a&gt;":&lt;br /&gt;&lt;br /&gt;&lt;div class="postbody entry clearfix"&gt;         &lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div class="postbody entry clearfix"&gt;&lt;p&gt;Qual o melhor jeito de se evitar &lt;a href="http://pt.wikipedia.org/wiki/Spam" target="_blank" onclick="pageTracker._trackPageview('/outgoing/pt.wikipedia.org/wiki/Spam?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;spam&lt;/a&gt; via email? Um &lt;a href="http://pt.wikipedia.org/wiki/Filtro_bayesiano" target="_blank" onclick="pageTracker._trackPageview('/outgoing/pt.wikipedia.org/wiki/Filtro_bayesiano?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;filtro bayesiano&lt;/a&gt;? Educação do usuário?&lt;/p&gt; &lt;p&gt;Não! Simplesmente DESATIVE O EMAIL DO USUÁRIO! É isso mesmo! Quando você recebe uma mensagem, o &lt;a href="http://www.bol.com.br/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.bol.com.br?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;BOL&lt;/a&gt; e o &lt;a href="http://www.uol.com.br/" onclick="pageTracker._trackPageview('/outgoing/www.uol.com.br?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;UOL&lt;/a&gt; simplesmente não levam a mensagem até o destinatário. O servidor responde o remetente dizendo: &lt;em&gt;“Você mandou uma mensagem para Fulano, se você não for um spammer clique aqui e prove sua boa intenção  digitando o &lt;a title="Saiba o que é captcha..." href="http://pt.wikipedia.org/wiki/CAPTCHA" target="_blank" onclick="pageTracker._trackPageview('/outgoing/pt.wikipedia.org/wiki/CAPTCHA?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;captcha&lt;/a&gt;.”&lt;/em&gt;&lt;span id="more-301"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Isso significa que se o remetente não tomar as medidas &lt;strong&gt;impostas&lt;/strong&gt; pelo &lt;a href="http://www.bol.com.br/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.bol.com.br/?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;BOL&lt;/a&gt; e o &lt;a href="http://www.uol.com.br/" onclick="pageTracker._trackPageview('/outgoing/www.uol.com.br/?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;UOL&lt;/a&gt;, o destinatário simplesmente &lt;strong&gt;não receberá o email&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Agora imagine se o usuário do &lt;a href="http://www.bol.com.br/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.bol.com.br/?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;BOL&lt;/a&gt; e o &lt;a href="http://www.uol.com.br/" onclick="pageTracker._trackPageview('/outgoing/www.uol.com.br/?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;UOL&lt;/a&gt; preenche algum formulário em um &lt;em&gt;site&lt;/em&gt; e este &lt;em&gt;site&lt;/em&gt; envia um email automático como &lt;em&gt;feedback&lt;/em&gt; desta ação? Resultado: &lt;em&gt;1600 mensagens pedindo confirmação de que o site não é um spammer.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Este é um caso clássico de quando &lt;strong&gt;TI&lt;/strong&gt; significa &lt;strong&gt;T&lt;/strong&gt;otalmente &lt;strong&gt;I&lt;/strong&gt;mbecil! E que fique claro que &lt;strong&gt;não&lt;/strong&gt; digo isso para as pessoas técnicas destas empresas. Pois tenho certeza que este &lt;em&gt;workflow&lt;/em&gt; absurdo foi &lt;strong&gt;imposto&lt;/strong&gt; por algum &lt;em&gt;“Gerente”&lt;/em&gt; ou &lt;em&gt;“Diretor”&lt;/em&gt; que não faz idéia das consequências dessa decisão.&lt;/p&gt; &lt;p&gt;Seria ótimo se o pessoal das campanhas &lt;a title="Conheça a campanha!!!" href="http://www.google.com.br/search?q=morte+ao+ie&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;aq=t" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.google.com.br/search?q=morte+ao+ie_amp_ie=utf-8_amp_oe=utf-8_amp_aq=t&amp;amp;referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;&lt;em&gt;“Morte ao IE 6″&lt;/em&gt;&lt;/a&gt; iniciassem uma nova: &lt;em&gt;“Morte ao email do BOL e UOL”&lt;/em&gt;, afinal, o &lt;a href="http://gmail.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/gmail.com?referer=http://henriquebastos.net/2009/06/30/conclusoes-sobre-o-fisl-10/');"&gt;GMail&lt;/a&gt; ganha de goleada.&lt;/p&gt;           &lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-7890588550675735534?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/7890588550675735534/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=7890588550675735534' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/7890588550675735534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/7890588550675735534'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/07/morte-ao-email-do-bol-e-uol.html' title='Morte ao email do BOL e UOL'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-1332376722659189538</id><published>2009-06-11T18:58:00.004-03:00</published><updated>2009-06-11T19:18:28.638-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pythonrio'/><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><category scheme='http://www.blogger.com/atom/ns#' term='pythoncampus'/><title type='text'>Pós-PythOnCampus Gama Filho Piedade no Outback Norte Shopping</title><content type='html'>Esse post está bastante atrasado... já &lt;a href="http://lifeatmymind.blogspot.com/2009/06/pythoncampus-uva-cabo-frio.html"&gt;postei sobre a 3ª PythOnCampus&lt;/a&gt; sem antes ter publicado as &lt;a href="http://picasaweb.google.com.br/rhcarvalho/PosPythOnCampusGamaFilhoPiedadeNoOutbackNorteShopping"&gt;fotos da 2ª PythOnCampus&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Na verdade não tenho fotos do evento, mas sim do pós-evento. Fomos almoçar no Outback do Norte Shopping.&lt;br /&gt;&lt;br /&gt;Várias horas de descontração, comida e bate-papo.&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com.br/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com.br&amp;hl=pt_BR&amp;feat=flashalbum&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com.br%2Fdata%2Ffeed%2Fapi%2Fuser%2Frhcarvalho%2Falbumid%2F5346194203681132353%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpt_BR" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-1332376722659189538?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/1332376722659189538/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=1332376722659189538' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/1332376722659189538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/1332376722659189538'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/06/pos-pythoncampus-gama-filho-piedade-no.html' title='Pós-PythOnCampus Gama Filho Piedade no Outback Norte Shopping'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-2666332867197006869</id><published>2009-06-11T18:25:00.003-03:00</published><updated>2009-06-11T18:48:57.393-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uva'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pythonrio'/><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><category scheme='http://www.blogger.com/atom/ns#' term='pythoncampus'/><title type='text'>PythOnCampus UVA Cabo Frio</title><content type='html'>No último sábado (06/06/2009) a comunidade &lt;a href="http://pythonrio.org/"&gt;PythOnRio&lt;/a&gt; realizou mais uma edição do &lt;span style="font-weight: bold;"&gt;PythOnCampus&lt;/span&gt;, evento itinerante que visita as universidades.&lt;br /&gt;Menos de um mês desde a edição da &lt;a href="http://ugf.br/?q=node/166"&gt;Universidade Gama Filho campus Piedade&lt;/a&gt;, visitamos a &lt;a href="http://www.uva.br/cabofrio/home.html"&gt;Universidade Veiga de Almeida em Cabo Frio&lt;/a&gt;, onde fomos muito bem recebidos.&lt;br /&gt;&lt;br /&gt;Realizamos &lt;a href="http://www.slideshare.net/group/pythonrio"&gt;palestras&lt;/a&gt;, e um &lt;a href="http://www.slideshare.net/alextercete/introduo-linguagem-python"&gt;mini-curso de Python&lt;/a&gt;. Este deixou os &lt;span style="font-weight: bold;"&gt;alunos sedentos por um curso&lt;/span&gt; de extensão ou alguma outra forma de disseminar a linguagem na faculdade.&lt;br /&gt;Todo o evento foi focado em como os alunos podem e devem &lt;span style="font-weight: bold;"&gt;correr atrás das oportunidades&lt;/span&gt;, fazer o mercado acontecer, como a mentalidade em voga pode e deve ser alterada. E os alunos tem como exemplo a ser seguido o seu coordenador, o Fábio Licht.&lt;br /&gt;&lt;br /&gt;Mais do que promover um linguagem, estamos lá para promover um espírito de colaboração, uma idéia de comunidade, de como podemos ter &lt;span style="font-weight: bold;"&gt;academia e mercado sintonizados&lt;/span&gt;, de forma sempre a valorizar o profissional como pessoa.&lt;br /&gt;&lt;br /&gt;São as práticas, os valores, os princípios, que nos fazem nos deslocar do Rio para Cabo Frio num sabadão para ver &lt;span style="font-weight: bold;"&gt;o brilho nos olhos dos alunos&lt;/span&gt; que compareceram ao evento.&lt;br /&gt;&lt;br /&gt;Foram horas super agradáveis na companhia de pessoas excelentes. Tirei algumas fotos para registrar o evento e o pós-evento numa churrascaria em Cabo Frio.&lt;br /&gt;&lt;br /&gt;Já estamos nos preparando para novos destinos, fiquem atentos para saber sobre o próximo PythOnCampus.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Se você é aluno ou professor de alguma instituição de ensino e quer nossa presença, entre em contato.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Não deixem de acompanhar o &lt;a href="http://pythonrio.org/"&gt;site oficial da comunidade PythOnRio&lt;/a&gt;, e o &lt;a href="http://br.groups.yahoo.com/group/pythonrio/"&gt;grupo de emails da PythOnRio&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com.br/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com.br&amp;amp;hl=pt_BR&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com.br%2Fdata%2Ffeed%2Fapi%2Fuser%2Frhcarvalho%2Falbumid%2F5345178496737550849%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpt_BR" pluginspage="http://www.macromedia.com/go/getflashplayer" width="400" height="267"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Fotos paisagísticas do campus da UVA Cabo Frio:&lt;br /&gt;&lt;table style="width:194px;"&gt;&lt;tr&gt;&lt;td align="center" style="height:194px;background:url(http://picasaweb.google.com.br/s/c/transparent_album_background.gif) no-repeat left"&gt;&lt;a href="http://picasaweb.google.com.br/rhcarvalho/UniversidadeVeigaDeAlmeidaCampusCaboFrio?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_vI4PxbAv6pM/Si3unZgtI-E/AAAAAAAABk4/eNpq9tdjcBk/s160-c/UniversidadeVeigaDeAlmeidaCampusCaboFrio.jpg" width="160" height="160" style="margin:1px 0 0 4px;"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center;font-family:arial,sans-serif;font-size:11px"&gt;&lt;a href="http://picasaweb.google.com.br/rhcarvalho/UniversidadeVeigaDeAlmeidaCampusCaboFrio?feat=embedwebsite" style="color:#4D4D4D;font-weight:bold;text-decoration:none;"&gt;Universidade Veiga de Almeida - campus Cabo Frio&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-2666332867197006869?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/2666332867197006869/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=2666332867197006869' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/2666332867197006869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/2666332867197006869'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/06/pythoncampus-uva-cabo-frio.html' title='PythOnCampus UVA Cabo Frio'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-2571655747268179906</id><published>2009-06-11T17:40:00.005-03:00</published><updated>2009-06-11T18:17:40.306-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><title type='text'>20 edições de Coding Dojo - comemoração com direito a bolo</title><content type='html'>É com grande satisfação que anúncio que o &lt;a href="http://dojorio.wordpress.com/"&gt;Coding Dojo Rio&lt;/a&gt; é um sucesso.&lt;br /&gt;Depois de seis meses temos um grupo consolidado, que se &lt;a href="http://groups.google.com/group/dojo-rio"&gt;encontra todas as quartas para programar, trocar conhecimento, se divertir&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Para quem não acreditou, cá estamos nós, &lt;a href="http://www.lifebeyondcode.com/2005/03/07/ways-to-distinguish-yourself-7-celebrate-small-victories/"&gt;comemorando as pequenas conquistas&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;E ontem não só comemoramos nosso vigésimo encontro como também o aniversário do Cláudio Berrondo. Tivemos 9 pessoas presentes, um papo muito bom sobre as entranhas do &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;, bolo, ... sim, tivemos bolo!&lt;br /&gt;&lt;br /&gt;Em breve vamos liberar um post mais detalhado no &lt;a href="http://dojorio.wordpress.com"&gt;blog oficial do Dojo&lt;/a&gt;, mas por enquanto já adianto as fotos de ontem:&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com.br/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com.br&amp;amp;captions=1&amp;amp;hl=pt_BR&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com.br%2Fdata%2Ffeed%2Fapi%2Fuser%2Frhcarvalho%2Falbumid%2F5346168584991027265%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpt_BR" pluginspage="http://www.macromedia.com/go/getflashplayer" width="400" height="267"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-2571655747268179906?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/2571655747268179906/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=2571655747268179906' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/2571655747268179906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/2571655747268179906'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/06/20-edicoes-de-coding-dojo-comemoracao.html' title='20 edições de Coding Dojo - comemoração com direito a bolo'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-1227617134941471457</id><published>2009-05-30T17:50:00.003-03:00</published><updated>2009-05-30T18:08:55.768-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dica'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><title type='text'>Como usar code-completion no console Python</title><content type='html'>É muito conveniente poder autocompletar comandos e propriedades de objetos Python no prompt de comando. Espero que a maioria de vocês já conheça o IPython, que cumpre muito bem não só esse papel, mas também tem outras funcionalidades muito boas. Confira! Vale a pela instalar, esteja você no Linux, Windows ou Mac...&lt;br /&gt;Dentre as "melhorias" que o IPython traz, cito: autocompletar, indentação automática, sintaxe colorida (syntax highlight), macros, guarda todos os inputs e outputs dos comandos, gerenciamento de sessão, histórico avançado, debugger, etc.&lt;br /&gt;&lt;br /&gt;De qualquer forma, para os momentos em que o IPython não está disponível, podemos nos virar com o console Python padrão e usufruir de autocompletar!&lt;br /&gt;Use o seguinte código para ativar essa funcionalidade:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;# .pythonrc.py&lt;br /&gt;import readline, rlcompleter&lt;br /&gt;readline.parse_and_bind("tab: complete")&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Você pode rodar esse código direto no console ou salvar em um arquivo, digamos ~/.pythonrc.py, e usar a variável de sistema PYTHONSTARTUP para que o Python execute o arquivo na inicialização. (Exemplo: colocar "export PYTHONSTARTUP=$HOME/.pythonrc.py" no arquivo ~/.bashrc)&lt;br /&gt;&lt;br /&gt;Note que isto não substitui o IPython!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-1227617134941471457?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/1227617134941471457/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=1227617134941471457' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/1227617134941471457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/1227617134941471457'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/05/como-usar-code-completion-no-console.html' title='Como usar code-completion no console Python'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-7101699733331551070</id><published>2009-05-29T11:32:00.006-03:00</published><updated>2009-06-11T18:19:35.361-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='cefet'/><title type='text'>Coding Dojo Rio #18 no CEFET</title><content type='html'>Na última quarta-feira tirei fotos do &lt;a href="http://dojorio.wordpress.com"&gt;dojo&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Foi um dia muito engraçado, comecei ficando preso dentro da sala com o Israel antes de começar o dojo... felizmente logo fomos salvos :)&lt;br /&gt;Depois resolvemos mudar bastante do que vinhamos fazendo... usamos JavaScript para testar a cantiga infantil "Atirei o pau no gato". Eu já tinha indicado como isso poderia ser feito nos posts &lt;a href="http://lifeatmymind.blogspot.com/2009/01/dojo-ldico.html"&gt;Dojo Lúdico&lt;/a&gt;, &lt;a href="http://lifeatmymind.blogspot.com/2009/01/tdd-em-cantigas-de-roda-parte-1.html"&gt;TDD em cantigas de roda - parte 1&lt;/a&gt; e &lt;a href="http://lifeatmymind.blogspot.com/2009/01/tdd-em-cantigas-de-roda-parte-2.html"&gt;TDD em cantigas de roda - parte 2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Usamos o &lt;a href="http://docs.jquery.com/QUnit"&gt;QUnit&lt;/a&gt; para nos apoiar nos testes em JavaScript.&lt;br /&gt;&lt;br /&gt;Tivemos muitas guloseimas! E comemos tudo... o registro fotográfico:&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com.br/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com.br&amp;captions=1&amp;hl=pt_BR&amp;feat=flashalbum&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com.br%2Fdata%2Ffeed%2Fapi%2Fuser%2Frhcarvalho%2Falbumid%2F5341247752991465633%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpt_BR" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-7101699733331551070?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/7101699733331551070/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=7101699733331551070' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/7101699733331551070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/7101699733331551070'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/05/coding-dojo-rio-18-no-cefet.html' title='Coding Dojo Rio #18 no CEFET'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-19707910895195856</id><published>2009-05-07T03:39:00.004-03:00</published><updated>2009-05-07T03:46:29.273-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotos'/><category scheme='http://www.blogger.com/atom/ns#' term='mej'/><category scheme='http://www.blogger.com/atom/ns#' term='evento'/><category scheme='http://www.blogger.com/atom/ns#' term='esej'/><category scheme='http://www.blogger.com/atom/ns#' term='fluxo'/><title type='text'>ESEJ Londrina 2009: Vídeo e Fotos</title><content type='html'>Começando a sequencia de fotos e vídeos por vir, disponibilizo as fotos da última festa do &lt;a href="http://www.esejlondrina.com.br/"&gt;ESEJ&lt;/a&gt;, na &lt;a href="http://www.vegalondrina.com.br/"&gt;boate Vega&lt;/a&gt;, no sábado 02/05/2009.&lt;br /&gt;&lt;br /&gt;&lt;table style="width: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/5YvkMJqlUREr4CSe-7P6tA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_vI4PxbAv6pM/SgJ6CVcPrEI/AAAAAAAAA0c/LGj3QXzvl5w/s400/Vega.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;"&gt;De &lt;a href="http://picasaweb.google.com/rhcarvalho/BoateVegaLondrina?feat=embedwebsite"&gt;Boate Vega Londrina&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;E aqui o vídeo da primeira noite, pessoal perto da piscina cantando:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Gd5Q9_x3EQY&amp;amp;hl=pt&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Gd5Q9_x3EQY&amp;amp;hl=pt&amp;amp;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;&lt;br /&gt;Em breve mais fotos e vídeos do evento!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-19707910895195856?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/19707910895195856/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=19707910895195856' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/19707910895195856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/19707910895195856'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/05/esej-londrina-2009-video-e-fotos.html' title='ESEJ Londrina 2009: Vídeo e Fotos'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_vI4PxbAv6pM/SgJ6CVcPrEI/AAAAAAAAA0c/LGj3QXzvl5w/s72-c/Vega.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-396083382034174439.post-5484638843193821353</id><published>2009-05-05T18:48:00.004-03:00</published><updated>2009-05-05T18:56:35.208-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pythonrio'/><category scheme='http://www.blogger.com/atom/ns#' term='planeta-globo.com'/><category scheme='http://www.blogger.com/atom/ns#' term='pythoncampus'/><title type='text'>PythonCampus na Universidade Gama Filho no campus da Piedade</title><content type='html'>&lt;p&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;Neste próximo sábado, dia 9 de maio, das 9h às 13h, será realizada a 2a. edição da PythonCampus na &lt;/span&gt;&lt;a href="http://maps.google.com/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=Pres.+Vargas+-+Centro,+Rio+de+Janeiro+-+RJ,+Brasil&amp;amp;daddr=Rua+Manoel+Vitorino,+Rio+de+Janeiro&amp;amp;hl=pt-BR&amp;amp;geocode=FYeGov4dQwlt_Q%253B&amp;amp;mra=ls&amp;amp;dirflg=d&amp;amp;date=05%252F05%252F09&amp;amp;time=12:50am&amp;amp;ttype=dep&amp;amp;noexp=0&amp;amp;noal=0&amp;amp;sort=&amp;amp;tline=&amp;amp;sll=-22.901953,-43.246136&amp;amp;sspn=0.120811,0.218353&amp;amp;ie=UTF8&amp;amp;cd=1&amp;amp;t=h&amp;amp;z=13" mce_href="http://maps.google.com/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=Pres.+Vargas+-+Centro,+Rio+de+Janeiro+-+RJ,+Brasil&amp;amp;daddr=Rua+Manoel+Vitorino,+Rio+de+Janeiro&amp;amp;hl=pt-BR&amp;amp;geocode=FYeGov4dQwlt_Q%253B&amp;amp;mra=ls&amp;amp;dirflg=d&amp;amp;date=05%252F05%252F09&amp;amp;time=12:50am&amp;amp;ttype=dep&amp;amp;noexp=0&amp;amp;noal=0&amp;amp;sort=&amp;amp;tline=&amp;amp;sll=-22.901953,-43.246136&amp;amp;sspn=0.120811,0.218353&amp;amp;ie=UTF8&amp;amp;cd=1&amp;amp;t=h&amp;amp;z=13"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;Universidade Gama Filho no campus da Piedade&lt;/span&gt;&lt;/a&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;A PythonCampus é um evento promovido pela &lt;a href="http://pythonrio.org/" mce_href="http://pythonrio.org"&gt;PythOnRio&lt;/a&gt; (Comunidade Python do Rio de Janeiro) com o objetivo de levar conhecimentos de Python, Software Livre e Métodos Ágeis ao público universitário.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;Com um formato de caravana, a PythonCampus visita as universidades integrando estudantes, professores e profissionais do mercado sob o movimento de Software Livre no Rio de Janeiro.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div mce_style="margin: 0px;  font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"  style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;"&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;No evento são promovidos mini-cursos, &lt;a href="http://pt.wikipedia.org/wiki/Espa%25C3%25A7o_aberto" mce_href="http://pt.wikipedia.org/wiki/Espa%25C3%25A7o_aberto"&gt;open spaces&lt;/a&gt;, &lt;a href="http://dojorio.wordpress.com/" mce_href="http://dojorio.wordpress.com/"&gt;dojos&lt;/a&gt; e palestras. As atividades são realizadas por profissionais, especialistas e pesquisadores da área tecnológica, abordando tendências e o estado da arte do Software Livre. &lt;a href="http://www.scribd.com/doc/14976942/null" mce_href="http://www.scribd.com/doc/14976942/null" target="_blank"&gt;Veja a grade de programação&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div mce_style="margin: 0px;  font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"  style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;"&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div mce_style="margin: 0px;  font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"  style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;"&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;A entrada é franca e as inscrições são para controle da organização. &lt;a href="http://www.ugf.br/index.php?q=evento" mce_href="http://www.ugf.br/index.php?q=evento"&gt;Inscreva-se já&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Estarei coordenando uma edição especial do &lt;a href="http://dojorio.wordpress.com/"&gt;Coding Dojo Rio&lt;/a&gt;, de &lt;/span&gt;&lt;/span&gt;09:00h às 11:00h.&lt;/div&gt;&lt;div mce_style="margin: 0px;  font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"  style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;"&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div mce_style="margin: 0px;  font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"  style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;"&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;span mce_=""  style="font-family:Arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span mce_=""  style="font-size:small;"&gt;&lt;div id="rFDIrkycto" class="posterousGalleryMainDiv"&gt;&lt;a onclick="return false;" class="posterousGalleryMainlink" href="http://pythonrio.org/#"&gt;&lt;img id="mainImage" src="http://posterous.com/getfile/files.posterous.com/pythonrio/DkWmobchyQUUXsNVqyxSQZkfNjpS1wUU7XIE1H3wf7GC3Fs1iUFdfCZGzT2w/pythoncampuscartaz0509.jpg.scaled.500.jpg" width="500" height="707" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/396083382034174439-5484638843193821353?l=blog.rodolfocarvalho.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.rodolfocarvalho.net/feeds/5484638843193821353/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=396083382034174439&amp;postID=5484638843193821353' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5484638843193821353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/396083382034174439/posts/default/5484638843193821353'/><link rel='alternate' type='text/html' href='http://blog.rodolfocarvalho.net/2009/05/pythoncampus-na-universidade-gama-filho.html' title='PythonCampus na Universidade Gama Filho no campus da Piedade'/><author><name>Rodolfo</name><uri>http://www.blogger.com/profile/13115401885842551697</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16283501231544353573'/></author><thr:total>0</thr:total></entry></feed>