<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>blog do chester</title>
	
	<link>http://chester.blog.br</link>
	<description>livros, quadrinhos, matemática, web, política, software livre e tudo que me der na telha</description>
	<lastBuildDate>Wed, 28 Jul 2010 14:06:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/chesterbr" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="chesterbr" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>FISL 11, cruzalinhas e iG Code Golf</title>
		<link>http://chester.blog.br/archives/2010/07/fisl-11-cruzalinhas-e-ig-code-golf.html</link>
		<comments>http://chester.blog.br/archives/2010/07/fisl-11-cruzalinhas-e-ig-code-golf.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 15:24:42 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=4342</guid>
		<description><![CDATA[A edição desse ano do Fórum Internacional Software Livre foi interessante como de costume: palestrantes de renome e a troca de experiências dentro e fora do evento com as pessoas que fazem o software livre acontecer seguramente justificam passar esses dias em Porto Alegre. Esse ano fiz dois lances bacanas por lá: O primeiro foi [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-4358" title="fisl" src="http://chester.blog.br/wp-content/uploads/2010/07/fisl.jpg" alt="" width="90" height="89" />A edição desse ano do <a href="http://softwarelivre.org/fisl11">Fórum Internacional Software Livre</a> foi interessante como de costume: palestrantes de renome e a troca de experiências dentro e fora do evento com as pessoas que fazem o software livre acontecer seguramente justificam passar esses dias em Porto Alegre. Esse ano fiz dois lances bacanas por lá:</p>
<p>O primeiro foi preparar e apresentar uma palestra-relâmpago sobre o <a href="http://cruzalinhas.appspot.com">cruzalinhas</a> (<a href="http://www.slideshare.net/chesterbr/cruzalinhas-palestra-relmp">slides aqui</a>, vídeo em breve). Resolvi fazer isso na última hora, e me surpreendi com o interesse de pessoas de outras cidades (Manaus, Campinas, Florianópolis e da própria Porto Alegre) em fazer a mesma coisa, já que, segundo esse pessoal, a dificuldade em obter informações sobre o transporte público é a mesma.</p>
<p>O outro foi participar do <a href="http://ignofisl.ig.com.br/tag/code-golf/">Code Golf do iG</a>, uma proposta inusitada, na qual são apresentados cinco problemas de programação. Eles são relativamente simples &#8211; o desafio é escrever o <strong>menor código-fonte</strong> que resolva cada um.</p>
<p>Claro que um código Python é bem menor que o seu equivalente Java, e por isso haviam categorias isoladas para cada linguagem suportada (Perl, Python, PHP, Java e Ruby). Fui o <a href="https://ignofisl.ig.com.br/codegolf/rankingfinal.php">vencedor</a> da categoria Java, com os códigos que estão no final do post. </p>
<p>Um aviso: <strong>NUNCA escreva código assim</strong>, a não ser que esteja participando de um Code Golf. O objetivo era sempre reduzir o tamanho  e compensar a <a href="http://ignofisl.ig.com.br/2010/07/21/faq-do-code-golf/">proibição</a> de imports explícitos. Isso tem um custo: a performance quase sempre é horrível, a legibilidade é zero, é quase impossível modificar. Senti esse último lance na prática: tive que fazer uma gambiarra na questão 4 (o formato da entrada mudou, e o fix apropriado implicaria em reescrever tudo) &#8211; o tamanho dobrou e fui penalizado por isso.</p>
<hr/>
<p style="text-align:center;">Minhas soluções para o Code Golf (<a href="http://ignofisl.ig.com.br/2010/07/22/problemas-do-code-golf/">enunciados aqui</a>)</p>
<ol>
<li>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> c<span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> x<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">int</span> a<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span>,b<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span>,c
,i<span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>b<span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;, &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>b<span style="color: #339933;">=</span>b<span style="color: #339933;">+</span>
a<span style="color: #339933;">;</span>a<span style="color: #339933;">=</span>b<span style="color: #339933;">-</span>a<span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> c<span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> x<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">char</span> m,s<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span>x
<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &quot;</span>,<span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toCharArray</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>int f<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">255</span><span style="color: #009900;">&#93;</span>,c,l<span style="color: #339933;">=</span>s.<span style="color: #006633;">l</span>
ength<span style="color: #339933;">;</span>boolean p<span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>l<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>p<span style="color: #339933;">=</span>p<span style="color: #339933;">&amp;&amp;</span>s<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span>s<span style="color: #009900;">&#91;</span>l<span style="color: #339933;">-</span>i<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>f<span style="color: #009900;">&#91;</span>s<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">++;</span><span style="color: #009900;">&#125;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">pri</span>
ntln<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>p<span style="color: #339933;">?</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;Não é &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;Palíndrome&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>while<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>m<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">255</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>m<span style="color: #339933;">=</span>f<span style="color: #009900;">&#91;</span>m<span style="color: #009900;">&#93;</span><span style="color: #339933;">&gt;</span>f<span style="color: #009900;">&#91;</span>i
<span style="color: #009900;">&#93;</span><span style="color: #339933;">?</span>m<span style="color: #339933;">:</span>i<span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#91;</span>m<span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>System.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#91;</span>m<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">+</span>m<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>f<span style="color: #009900;">&#91;</span>m<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> c<span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> x<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">long</span> a<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span>,m<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span>
,b,c,F<span style="color: #339933;">=</span>0xFFFFFFFF<span style="color: #339933;">;</span>int i,j<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span><span style="color: #339933;">;</span>j<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>c<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>c<span style="color: #339933;">=</span>c<span style="color: #339933;">*</span><span style="color: #cc66cc;">256</span><span style="color: #339933;">+</span><span style="color: #003399;">Integer</span>.<span style="color: #006633;">pa</span>
rseInt<span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>a<span style="color: #339933;">=</span>m<span style="color: #339933;">;</span>m<span style="color: #339933;">=</span>c<span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>a<span style="color: #339933;">=</span>a<span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span>F<span style="color: #339933;">-</span>m<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>b<span style="color: #339933;">=</span><span style="color: #cc66cc;">32</span><span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span>c<span style="color: #339933;">=</span>0xFF000000l<span style="color: #339933;">;</span>c<span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>c<span style="color: #339933;">/=</span><span style="color: #cc66cc;">25</span>
<span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">&amp;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;&gt;</span><span style="color: #009900;">&#40;</span>b<span style="color: #339933;">-=</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>b<span style="color: #339933;">==</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&quot; /&quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>b<span style="color: #339933;">=</span><span style="color: #cc66cc;">32</span><span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>m<span style="color: #339933;">&amp;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>m<span style="color: #339933;">/=</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span>b<span style="color: #339933;">--</span>
<span style="color: #339933;">;</span>System.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> c<span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> h<span style="color: #339933;">=-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>static <span style="color: #000066; font-weight: bold;">void</span> w<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>h<span style="color: #339933;">!=</span>i<span style="color: #009900;">&#41;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;
 &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>h<span style="color: #339933;">=</span>i<span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> y<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#123;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span>x<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span>y<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;,-
,&quot;</span><span style="color: #339933;">+</span>y<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>int m,l<span style="color: #339933;">=</span>x.<span style="color: #006633;">length</span>,n<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span>l<span style="color: #009900;">&#93;</span>,p<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span>,i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span>,a<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>l<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>
x<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;-&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>a<span style="color: #339933;">=</span>i<span style="color: #339933;">;</span>p<span style="color: #339933;">=</span>i<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> n<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">&lt;</span>a<span style="color: #339933;">&amp;&amp;</span>p<span style="color: #339933;">&lt;</span>l<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">&lt;</span>n<span style="color: #009900;">&#91;</span>p<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>m<span style="color: #339933;">=</span>n<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>m<span style="color: #339933;">=</span>n<span style="color: #009900;">&#91;</span>p<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>p<span style="color: #339933;">++;</span><span style="color: #009900;">&#125;</span>w<span style="color: #009900;">&#40;</span>m<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>a<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>w<span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span><span style="color: #339933;">;</span>p<span style="color: #339933;">&lt;</span>
l<span style="color: #339933;">;</span>p<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>w<span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#91;</span>p<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> c<span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> x<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">int</span> c,p,t<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span>,v
<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">50</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>while<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>c<span style="color: #339933;">=</span><span style="color: #003399;">System</span>.<span style="color: #006633;">in</span>.<span style="color: #006633;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>p<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pcbtar&quot;</span>.<span style="color: #006633;">indexOf</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>t<span style="color: #339933;">+=</span>p<span style="color: #339933;">&gt;-</span>
<span style="color: #cc66cc;">1</span><span style="color: #339933;">?</span>v<span style="color: #009900;">&#91;</span>p<span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span></pre></div></div>

</li>
</ol>

<p><a href="http://feedads.g.doubleclick.net/~a/PMumohCoRqVUT5Gr460bJpjU8Ag/0/da"><img src="http://feedads.g.doubleclick.net/~a/PMumohCoRqVUT5Gr460bJpjU8Ag/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PMumohCoRqVUT5Gr460bJpjU8Ag/1/da"><img src="http://feedads.g.doubleclick.net/~a/PMumohCoRqVUT5Gr460bJpjU8Ag/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/07/fisl-11-cruzalinhas-e-ig-code-golf.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Coders At Work (Peter Seibel)</title>
		<link>http://chester.blog.br/archives/2010/07/coders-at-work-peter-seibel.html</link>
		<comments>http://chester.blog.br/archives/2010/07/coders-at-work-peter-seibel.html#comments</comments>
		<pubDate>Wed, 14 Jul 2010 04:00:54 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=4285</guid>
		<description><![CDATA[Depois de ter curtido tanto as entrevistas com os fundadores das startups mais famosas no Founders At Work, eu esperava que o Coders at Work &#8211; fosse ser ainda mais bacana. Afinal, a lista de entrevistados é diversificada e impressionante: vai de gente mais &#8220;próxima&#8221; como os criadores do memcached, JavaScript e JSON até decanos [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/gp/product/1430219483?ie=UTF8&amp;tag=blogdochester-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430219483"><img class="alignright margin-left:6px; margin-bottom:4px; size-full wp-image-4290" title="coders-at-work" src="http://chester.blog.br/wp-content/uploads/2010/07/coders-at-work.jpg" alt="Coders At Work, Peter Seibel" width="167" height="246" /></a>Depois de ter curtido tanto as entrevistas com os fundadores das startups mais famosas no <a href="http://chester.blog.br/archives/2008/09/the_starfish_and_the_spider_founders_at_work.html">Founders At Work</a>, eu esperava que o <a href="http://www.amazon.com/gp/product/1430219483?ie=UTF8&amp;tag=blogdochester-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430219483">Coders at Work</a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=blogdochester-20&amp;l=as2&amp;o=1&amp;a=1430219483" border="0" alt="" width="1" height="1" /> &#8211; fosse ser ainda mais bacana. Afinal, a <a href="http://www.codersatwork.com/">lista de entrevistados</a> é diversificada e impressionante: vai de gente mais &#8220;próxima&#8221; como os criadores do <a href="http://en.wikipedia.org/wiki/Brad_Fitzpatrick">memcached</a>, <a href="http://en.wikipedia.org/wiki/Brendan_Eich">JavaScript</a> e <a href="http://en.wikipedia.org/wiki/Douglas_Crockford">JSON</a> até decanos como <a href="http://en.wikipedia.org/wiki/Frances_E._Allen">Fran Allen</a> e <a href="http://en.wikipedia.org/wiki/Donald_knuth">Donald Knuth</a>, cujos méritos acadêmicos e na indústria tornam desnecessárias quaisquer apresentações.</p>
<p>O livro foca no dia-a-dia dessas pessoas, em particular no momento em que estão criando código. Isso até é interessante: saber se um ninja desses <a href="http://oopweb.com/CPP/Documents/DebugCPP/Volume/techniques.html">depura</a> código com um debugger ou com printf, quanto ele pensa antes de sair codando, se ele implementa código de forma <a href="http://en.wikipedia.org/wiki/Top-down_and_bottom-up_design">top-down ou bottom-up</a> e a visão deles de como o desenvolvimento de software evoluiu (ou não) nos dias de hoje sem dúvida dá uma nova perspectiva para o <strong>meu</strong> cotidiano.</p>
<p>Infelizmente, isso não impede que os capítulos se tornem repetitivos e maçantes ao longo do tempo &#8211; ao contrário do <em>Founders,</em> no qual cada entrevistado leva a reportagem para um lado diferente (e sempre interessante). Não sei se o quanto isso influenciou, mas o entrevistador, embora autor de um <a href="http://www.gigamonkeys.com/book/">livro popular sobre Common Lisp</a> e um dos primeiros funcionários da <a href="http://en.wikipedia.org/wiki/WebLogic_%28company%29">WebLogic</a>, não é personagem de destaque no meio. Em contrapartida, a <a href="http://en.wikipedia.org/wiki/Jessica_Livingston">cicerone</a> do <em>Founders</em> é co-fundadora do <a href="http://www.ycombinator.com/">Y Combinator</a> &#8211; uma credencial e tanto para quem quer falar de startups.</p>
<p>O Julio Daio Borges afirma em um <a href="http://www.digestivocultural.com/arquivo/nota.asp?codigo=1713&amp;titulo=Coders_at_Work,_de_Peter_Seibel">review</a> bacana do livro que &#8220;&#8230;a maioria dos programadores no livro são, basicamente, executores. Visionários são os empreendedores.&#8221; Não concordo plenamente com a afirmação &#8211; poucos ali são <strong>empresários</strong>, mas cada um deles empreendeu e inovou no seu campo &#8211; mas ela evidencia o fato: o livro anterior foca nesse lado empreendedor, este no lado pragmático/<em>coder</em>. Eu curto as duas coisas, mas em projetos editoriais desse porte, a primeira vai mais longe.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/9b3pZ27jOEhpav_u7vxBsJFJSxQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/9b3pZ27jOEhpav_u7vxBsJFJSxQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9b3pZ27jOEhpav_u7vxBsJFJSxQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/9b3pZ27jOEhpav_u7vxBsJFJSxQ/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/07/coders-at-work-peter-seibel.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Super Munchkin</title>
		<link>http://chester.blog.br/archives/2010/07/super-munchkin.html</link>
		<comments>http://chester.blog.br/archives/2010/07/super-munchkin.html#comments</comments>
		<pubDate>Mon, 12 Jul 2010 11:00:52 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=4302</guid>
		<description><![CDATA[Eu até curto um jogo de cartas/tabuleiro mais elaborado, mas tenho alergia àqueles onde você queima horas aprendendo para só aí começar a jogar decentemente e se divertir. Felizmente o @btco me apresentou o Munchkin &#8211; jogo de cartas que, segundo o próprio fabricante, &#8220;captura a essência da experiência da aventura-em-masmorra, sem aquela parafernália de [...]]]></description>
			<content:encoded><![CDATA[<p>Eu até curto um jogo de cartas/tabuleiro mais elaborado, mas tenho alergia àqueles onde você queima horas aprendendo para só aí começar a jogar decentemente e se divertir. Felizmente o <a href="http://twitter.com/btco">@btco</a> me apresentou o <a href="http://www.worldofmunchkin.com/cardgame/">Munchkin</a> &#8211; jogo de cartas que, segundo o próprio fabricante, &#8220;captura a essência da experiência da aventura-em-masmorra, sem aquela parafernália de RPG&#8221; &#8211; o que seria uma afirmação à toa, se o fabricante em questão não fosse a própria <a href="http://www.sjgames.com/">Steve Jackson Games</a>¹ &#8211; pioneira do gênero RPG nos EUA.</p>
<p>Esse tipo de humor auto-depreciativo mostra o diferencial do Munchkin: ao invés de vender a ilusão de que uma mecânica complexa demonstra algum tipo de superioridade intelectual dos participantes (como fazem tantos RPGs e jogos de carta/tabuleiro por aí), ele se baseia em um conjunto simples de regras. Os detalhes mais cabeludos ficam por conta de cada carta, facilitando muito o aprendizado e tornando-o divertido de imediato.</p>
<p>O jogo original deu origem a variantes temáticas &#8211; a que eu tenho, claro, é o <a href="http://www.worldofmunchkin.com/supermunchkin/">Super Munchkin</a>, na qual jogadores e monstros são, respectivamente, super-heróis e vilões. Assim como o original satiriza o gênero RPG medieval, esse não poupa os <em>comics</em> da ironia: a carta &#8220;erro de continuidade&#8221; anula tudo o que foi feito numa batalha (causando grande confusão), o nível do jogador sobe com cartas do tipo &#8221;cueca pra fora da roupa&#8221;, e por aí vai.<br />
<img class="aligncenter size-full wp-image-4307" title="munchkin_cards" src="http://chester.blog.br/wp-content/uploads/2010/07/munchkin_cards.jpg" alt="cartas de munchkin" width="397" height="249" style="margin-top:8px"/><br />
Um pré-requisito é entender inglês &#8211; não apenas para interpretar as cartas, mas para apreciar o humor <em>nerd</em> em cada uma delas. A Devir lançou uma <a href="http://www.devir.com.br/rpg/munchkin.php">versão nacional</a> do original, mas parece que esgotou e não se encontra mais em lugar nenhum. O melhor é <a href="http://www.coolstuffinc.com/main_searchResults.php?search_text=munchkin&#038;form_search_number=25&#038;go.x=0&#038;go.y=0">importar</a> (ou procurar um pouco <a href="http://lista.mercadolivre.com.br/munchkin">por aqui</a>) e encarar o idioma.</p>
<p>¹ Quem leu o livro-reportagem <a href="http://www.mit.edu/hacker/hacker.html">The Hacker Crackdown</a> deve lembrar que o serviço secreto americano <a href="http://en.wikipedia.org/wiki/Steve_Jackson_Games,_Inc._v._United_States_Secret_Service">investigou de forma truculenta</a> a empresa quando soube que um dos seus colaboradores (responsável pelo <em>GURPS Cyberpunk</em>) circulava no submundo hacker &#8211; pesquisa de campo é isso aí, o resto é resto.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/YKJKEwG30ctns91QPbOVQ74YpX8/0/da"><img src="http://feedads.g.doubleclick.net/~a/YKJKEwG30ctns91QPbOVQ74YpX8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/YKJKEwG30ctns91QPbOVQ74YpX8/1/da"><img src="http://feedads.g.doubleclick.net/~a/YKJKEwG30ctns91QPbOVQ74YpX8/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/07/super-munchkin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Outliers (Fora de Série), por Malcolm Gladwell</title>
		<link>http://chester.blog.br/archives/2010/07/outliers-fora-de-serie-malcolm-gladwell.html</link>
		<comments>http://chester.blog.br/archives/2010/07/outliers-fora-de-serie-malcolm-gladwell.html#comments</comments>
		<pubDate>Fri, 09 Jul 2010 22:12:50 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=4262</guid>
		<description><![CDATA[Peguei Outliers para ler no ano passado, mas só agora deu tempo de escrever. Ele abre apontando uma relação estatística entre o horóscopo e as chances de sucesso de um jogador de hóquei &#8211; e o nome original¹ pode dar a entender que se trata de outro livro na linha do Freakonomics. Mas a proposta [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.submarino.com.br/produto/1/21444359/fora+de+serie+:+outliers/?&amp;Franq=273452"><img class="alignleft size-full wp-image-4266" title="Outliers (Fora de Série) - livro" src="http://chester.blog.br/wp-content/uploads/2010/07/outliers.jpg" alt="" width="129" height="199" /></a>Peguei <a href="http://www.submarino.com.br/produto/1/21444359/fora+de+serie+:+outliers/?&amp;Franq=273452">Outliers</a> para ler no ano passado, mas só agora deu tempo de escrever. Ele abre apontando uma relação estatística entre o horóscopo e as chances de sucesso de um jogador de hóquei &#8211; e o nome original¹ pode dar a entender que se trata de outro livro na linha do <a href="http://chester.blog.br/archives/2007/02/freakonomics.html">Freakonomics</a>.</p>
<p>Mas a proposta é outra: Malcolm Gladwell desconstrói alguns mitos sobre o que faz alguém se destacar nos negócios, esportes, artes ou qualquer outro campo. Ele ataca em particular aquela idéia comum de que o sucesso depende largamente do talento, em menor grau da dedicação e bem pouquinho da sorte.</p>
<p>Sem negar a influência desses fatores, o livro demonstra que o que entendemos por sorte tem muito a ver com as oportunidades e com estar no lugar e na hora certa. Também desfaz a lenda do &#8220;expert instantâneo&#8221;, chegando a postular que existe uma quantidade de tempo mínima que qualquer pessoa de destaque (dos Beatles a <a href="http://en.wikipedia.org/wiki/Bill_Joy">Bill Joy</a>) dedica ao assunto de interesse antes ser considerada um expert: 10.000 horas.</p>
<p>São propostas ousadas &#8211; colocadas dessa forma, devem gerar muitas expressões de &#8220;ah, duvido&#8221;. E é isso que torna o livro interessante: após a sua leitura, todas elas se tornam no mínimo bastante plausíveis. <strong>Não sei se a tradução é boa</strong>, mas no original valeu muito a pena.</p>
<p>¹ Em Estatística, <em>outlier</em> é o nome que se dá àqueles dados completamente diferentes dos demais, os &#8220;fora da curva&#8221;.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/fdijV34D5QYCf0xFX9ZAhUqQW90/0/da"><img src="http://feedads.g.doubleclick.net/~a/fdijV34D5QYCf0xFX9ZAhUqQW90/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/fdijV34D5QYCf0xFX9ZAhUqQW90/1/da"><img src="http://feedads.g.doubleclick.net/~a/fdijV34D5QYCf0xFX9ZAhUqQW90/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/07/outliers-fora-de-serie-malcolm-gladwell.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tilewriter – desenhando ladrilhos em JavaScript</title>
		<link>http://chester.blog.br/archives/2010/06/tilewriter-desenhando-ladrilhos-em-javascript.html</link>
		<comments>http://chester.blog.br/archives/2010/06/tilewriter-desenhando-ladrilhos-em-javascript.html#comments</comments>
		<pubDate>Sun, 20 Jun 2010 16:29:54 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Projetos Pessoais]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=4044</guid>
		<description><![CDATA[Eu fiquei vidrado no layout de "ladrinhos" do logotipo do site do RHoK, que lembra os micros de 8 bits sem deixar de ser moderno, e pensei "taí, vou roubar me inspirar criar um trabalho artístico derivativo para o próximo update visual do meu blog". O chato é que não apenas sou um zero à [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://chester.blog.br/wp-content/uploads/2010/06/mario.png" alt="" title="Super Mario em tiles" width="120" height="140" class="alignleft size-full wp-image-4131" /><script src="http://chester.blog.br/tilewriter/tilewriter-0.2-min.js" type="text/javascript"></script>Eu fiquei vidrado no layout de "ladrinhos" do logotipo do <a href="http://www.rhok.org">site do RHoK</a>, que lembra os micros de 8 bits sem deixar de ser moderno, e pensei "taí, vou <del datetime="2010-06-20T14:22:59+00:00">roubar</del> <del datetime="2010-06-20T14:22:59+00:00">me inspirar</del> criar um trabalho artístico derivativo para o próximo update visual do meu blog".</p>
<p>O chato é que não apenas sou um zero à esquerda em GIMP/PhotoShop, mas também queria algo que pesasse menos no carregamento. Solução: programar.</p>
<p>O <a href="http://en.wikipedia.org/wiki/Canvas_element"><code>canvas</code> do HTML5</a> viria a calhar, mas o suporte dos browsers ainda está longe do ideal. Resolvi, então, criar uma biblioteca minimalista para fazer desenhos nesse estilo usando elementos de HTML.<span id="more-4044"></span> E ficou minimalista mesmo: basta incluir ela e o JQuery no <code>&lt;head&gt;</code> da página, i.e.:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://chester.blog.br/tilewriter/tilewriter-0.2-min.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Coloca-se na página um <code>&lt;div&gt;</code> (ou outro container HTML) no qual o "desenho" será montado, e aí é só brincar de JavaScript:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_teste&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;      X&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_teste&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; XX    &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_teste&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;X  X  X&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_teste&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;X  X  X&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_teste&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; XX   X&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Isso produz o mosaico abaixo (que pode não aparecer num leitor RSS - o que é esperado, é só decoração - nesse caso, abra o <a href="http://chester.blog.br/archives/2010/06/tilewriter-desenhando-ladrilhos-em-javascript.html">post original</a>):</p>
<div id="div_teste" style="text-align:center"></div>
<p><br/></p>
<p>Também é possível configurar a palheta de cores utilizada, o tamanho de cada "azulejo" e o espaçamento entre eles, o que permite várias possibilidades interessantes. Por exemplo, esse encanador familiar:</p>
<div id="div_mario" style="text-align:center"></div>
<p><br/></p>
<p>é produzido pelo script:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">tilewriter.<span style="color: #660066;">reset</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">spacing</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">size</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">8</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">colors</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#EA590C&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#AC7C00&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#FFA440&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;   111111    &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;  1111111111 &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;  22233233   &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; 23233323333 &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; 232233323333&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; 22333322222 &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;   33333333  &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;  2232222    &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; 22212212222 &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;2222111122222&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;3321311312333&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;3331111113333&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;3311111111333&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;  1111 1111  &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; 2222   2222 &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_mario&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;22222   22222&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Para usar mais do que 10 cores, basta passar a palheta como um objeto do tipo <code>{"caractere" : "cor"}</code>, usando qualquer cor CSS válida. Espaços e caracteres não-mapeados ficam sem cor, i.e., com a cor do fundo.</p>
<p>Isso bastava para o que eu queria, mas me empolguei: já que a idéia é logotipos e afins, por que não automatizar a escrita de textos? Para isso bastava ter uma fonte bitmap que fosse compacta e legível - tal qual tínhamos nos micros de 8 bits - e aí veio o estalo: ao invés de criar uma fonte, era mais fácil pegar uma direto da ROM de um deles!</p>
<p>A escolhida foi a fonte do <a href="http://www.tk90x.com.br/">TK90x</a> (ZX Spectrum), que não apenas está prontinha na ROM, mas tabmém é fácil de encontrar <a href="http://homepage.ntlworld.com/wholehog/stuart/fonts/index.html">salva</a> na web. Ela é 8x8, o que significa que se eu guardar como texto hexadecimal, cada "imagem" de caractere ocupa 16 bytes (mais o payload do JavaScript), e fica bem fácil de converter para binário.</p>
<p>O resultado é que pra escrever o "oi", agora basta programar:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">tilewriter.<span style="color: #660066;">drawText</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_teste_2&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;oi&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>e temos:</p>
<div id="div_teste_2" style="text-align:center"></div>
<p><br/></p>
<p>Como de costume, dá pra melhorar bastante, e o <a href="http://github.com/chesterbr/tilewriter/blob/master/tilewriter.js">código-fonte</a> é livre para quem quiser brincar. O chato é que eu queimei o tempo que ia usar no update do layout com esse brinquedo, mas valeu a pena - a lib ficou com menos de 4K minificada (incluindo a fonte). Olha como dá pra se empolgar na nostalgia:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">tilewriter.<span style="color: #660066;">spacing</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">size</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawText</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_tk90x_cima&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;TK90X - Color Computer&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">spacing</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">size</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">8</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">colors</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;white&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;yellow&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;cyan&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;green&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;magenta&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;red&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;blue&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;black&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
tilewriter.<span style="color: #660066;">drawRow</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#div_tk90x_baixo&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;000111222333444555666777&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<div id="div_tk90x_borda" style="text-align:center; border:1px solid black; padding:4px;;margin-left:auto;margin-right:auto;width:220px;">
<div id="div_tk90x_cima" ></div>
<p><br/><br/><br/><br/><br/></p>
<div id="div_tk90x_baixo" style="border:2px solid black;width:192px;margin-left:auto; margin-right:auto;"></div>
</div>
<p><script type="text/javascript">
if (tilewriter) {
tilewriter.drawRow("#div_teste", "      X");
tilewriter.drawRow("#div_teste", " XX    ");
tilewriter.drawRow("#div_teste", "X  X  X");
tilewriter.drawRow("#div_teste", "X  X  X");
tilewriter.drawRow("#div_teste", " XX   X");

tilewriter.reset();
tilewriter.spacing = 0;
tilewriter.size = 8;
tilewriter.colors = ["", "#EA590C", "#AC7C00", "#FFA440"];
tilewriter.drawRow("#div_mario", "   111111    ");
tilewriter.drawRow("#div_mario", "  1111111111 ");
tilewriter.drawRow("#div_mario", "  22233233   ");
tilewriter.drawRow("#div_mario", " 23233323333 ");
tilewriter.drawRow("#div_mario", " 232233323333");
tilewriter.drawRow("#div_mario", " 22333322222 ");
tilewriter.drawRow("#div_mario", "   33333333  ");
tilewriter.drawRow("#div_mario", "  2232222    ");
tilewriter.drawRow("#div_mario", " 22212212222 ");
tilewriter.drawRow("#div_mario", "2222111122222");
tilewriter.drawRow("#div_mario", "3321311312333");
tilewriter.drawRow("#div_mario", "3331111113333");
tilewriter.drawRow("#div_mario", "3311111111333");
tilewriter.drawRow("#div_mario", "  1111 1111  ");
tilewriter.drawRow("#div_mario", " 2222   2222 ");
tilewriter.drawRow("#div_mario", "22222   22222");

tilewriter.reset();
tilewriter.drawText("#div_teste_2","oi");

tilewriter.reset();
tilewriter.spacing = 0;
tilewriter.size = 1;
tilewriter.drawText("#div_tk90x_cima", "TK90X - Color Computer");
tilewriter.spacing = 0;
tilewriter.size = 8;
tilewriter.colors = ["white", "yellow", "cyan", "green", "magenta", "red", "blue", "black"];
tilewriter.drawRow("#div_tk90x_baixo", "000111222333444555666777");

}
</script></p>

<p><a href="http://feedads.g.doubleclick.net/~a/7wE-vEAbxyr_j0qKHX2qKhV1-cc/0/da"><img src="http://feedads.g.doubleclick.net/~a/7wE-vEAbxyr_j0qKHX2qKhV1-cc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7wE-vEAbxyr_j0qKHX2qKhV1-cc/1/da"><img src="http://feedads.g.doubleclick.net/~a/7wE-vEAbxyr_j0qKHX2qKhV1-cc/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/06/tilewriter-desenhando-ladrilhos-em-javascript.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Urban Fact (Fato Urbano) / RHoK #1 SP</title>
		<link>http://chester.blog.br/archives/2010/06/random-hacks-of-kindness-1-sp-urban-fact-fato-urbano.html</link>
		<comments>http://chester.blog.br/archives/2010/06/random-hacks-of-kindness-1-sp-urban-fact-fato-urbano.html#comments</comments>
		<pubDate>Mon, 07 Jun 2010 03:58:41 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Projetos Pessoais]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=4022</guid>
		<description><![CDATA[O Random Hacks of Kindness (RHoK) reuniu programadores em vários locais do mundo simultaneamente ao longo do último fim-de-semana, com o objetivo de desenvolver ferramentas que possam ajudar a lidar com os desafios gerados pelo risco de desastres naturais. O esforço foi patrocinado e liderado por gente do Google, Yahoo!, Microsoft, NASA e do Banco [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://urbanfact.no-ip.org/map"><img class="alignright" title="urbanfact.no-ip.org - screenshot" src="/wp-content/uploads/2010/06/fatourbano.jpg" alt="" width="400" height="294" /></a>O <a href="http://www.rhok.org/">Random Hacks of Kindness (RHoK)</a> reuniu programadores em vários locais do mundo simultaneamente ao longo do último fim-de-semana, com o objetivo de desenvolver ferramentas que possam ajudar a lidar com os desafios gerados pelo risco de desastres naturais.</p>
<p>O esforço foi patrocinado e liderado por gente do  Google, Yahoo!, Microsoft, NASA e do Banco Mundial, e eu não só tive a oportunidade de participar da <a href="http://www.rhok.org/events/rhok-1-0/sao-paolo-brazil/">primeira edição de São Paulo</a>, que aconteceu aqui na <a href="http://fgv.br/">Fundação Getúlio Vargas (FGV)</a>, mas também tive a alegria de ter o projeto do meu grupo, o Urban Fact, premiado com o segundo lugar.<br />
<span id="more-4022"></span></p>
<p style="text-align: left;">O evento abriu com apresentações de especialistas nos setores de engenharia, arquitetura e urbanismo &#8211; pessoas que lidam com esses problemas no dia-a-dia, e em seguida os programadores foram liberados para formar grupos e propor/desenvolver idéias. No final os projetos foram avaliados por um júri, havendo premiações para o primeiro e segundo lugar &#8211; embora o importante mesmo (em particular, o que me levou a pular o descanso e a <a href="http://pt.wikipedia.org/wiki/Parada_do_orgulho_LGBT_de_S%C3%A3o_Paulo">Parada do Orgulho LGBT</a> no fim-de-semana) fosse fomentar essas idéias, divulgar a iniciativa e ajudar a colocar em contato pessoas que têm sintonia com a idéia de usar o software e a Internet como ferramentas de apoio ao exercício da cidadania.</p>
<p>O merecidíssimo vencedor foi o Shelter Me &#8211; um software que permite o cadastro voluntário de abrigos (<em>shelters</em>) disponíveis em situações de emergência &#8211; desde um abrigo da prefeitura até um canto que você possa oferecer na sua casa durante uma crise. O diferencial é que o sistema permite que uma pessoa envie um SMS e receba, como resposta, o endereço do abrigo mais próximo.</p>
<p>Tradicionalmente, um sistema desses exigiria o apoio da operadora de telefonia no rastreamento da posição do aparelho e um servidor dedicado, mas a criatividade do pessoal superou isso: o protótipo apresentado solicita o CEP do local para fazer a busca, e foi implementado diretamente num celular Android (que já faz o rastreio no servidor e envia a resposta). Genial.</p>
<p>O segundo lugar ficou com o projeto apresentado pelo meu grupo (eu, o Marcos Diez, o <a href="http://www.agileandart.com/">Daniel Cukier</a> e a <a href="http://baniverso.com/">Bani</a> &#8211; esta última foi quem me apresentou ao evento): o <a href="http://urbanfact.no-ip.org/">Urban Fact</a> (ou Fato Urbano, já que ele é bilíngue, detectando o idioma do navegador). A inspiração surgiu quando uma das palestrantes salientou a influência das atitudes individuais na solução (ou criação) dos problemas &#8211; os assuntos ali eram enchentes e ocupações irregulares, mas o conceito é geral.</p>
<p>Pensando no efeito educativo que o auê online causa em casos como quando o <a href="http://en.wikipedia.org/wiki/Internet_vigilantism#Dog_Poop_Girl">cachorro de uma moça  fez cocô no metrô</a> sul-coreano, imaginei que se tivesse uma maneira fácil de mostrar as coisas erradas que acontecem (por exemplo: quando as pessoas jogam lixo na rua, fomentando problemas como algamentos, ou quando danificam patrimônio público), esse tipo de atitude poderia ser coibida.</p>
<p style="text-align: left;">O grupo evoluiu o conceito: boas atitudes também poderiam ser colocadas em evidência, já que o <a href="http://www.youtube.com/watch?v=JA96Fba-WHk">reforço positivo</a> opera milagres. O importante é dar ao cidadão que testemunha o fato a possibilidade de capturar e compartilhar o mesmo de forma simples. Entra em cena o Twitter: o sistema monitora os tweets com as tags #urbanfact e #fatourbano que tenham links para fotos. Esses tweets podem ser vistos na forma de lista ou <a href="http://urbanfact.no-ip.org/map">mapa</a>, e cada um deles pode ganhar nota, receber comentários e ter isso tudo redistribuído em outras redes sociais.</p>
<p>Fugimos um pouco do foco em desastres naturais, mas ainda ficamos dentro do conceito de cidadania e de captura e divulgação da informação sobre problemas urbanos em tempo real. A principal limitação é que ainda são poucas as pessoas que usam o Twitter no celular &#8211; situação que deve mudar em breve.</p>
<p>Além disso, essa versão ainda precisa ser bastante melhorada antes de ser considerada &#8220;produção&#8221; (é um hack desenvolvido do zero em menos de 16h). Mas demonstra bem o espírito do evento: viabilizar, de forma rápida e focada, idéias e soluções melhoráveis e reutilizáveis (o <a href="http://github.com/danicuki/urbanfact">código</a> é 100% aberto).</p>
<p>Os outros projetos (de São Paulo e das outras cidades onde o evento ocorreu) podem ser conferidos no <a href="http://wiki.rhok.org/">wiki</a>. A organização mandou muito bem em termos de infra-estrutura e alimentação. Não houve a &#8220;virada&#8221; do sábado para o domingo, comum em eventos desse tipo &#8211; mas a natureza local das edições pressupõe participantes na mesma cidade, então o pessoal voltou no dia seguinte e tudo correu bem.</p>
<p>Nesse sentido, talvez edições futuras possam privilegiar outras cidades &#8211; muitas vezes mais próximas de alguns dos problemas que os fundadores se propõem a resolver &#8211; mas se voltar a acontecer em São Paulo não vou reclamar!</p>
<p style="text-align: center;"><a href="http://www.rhok.org/"><img class="size-full wp-image-4023 aligncenter" style="margin-top: 4px; margin-bottom: 4px;" title="Random Hacks of Kindness (logo)" src="http://chester.blog.br/wp-content/uploads/2010/06/rhok.png" alt="" width="397" height="40" /></a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/5xOmwuUtl5g9yZ6l1UN-OunwIAI/0/da"><img src="http://feedads.g.doubleclick.net/~a/5xOmwuUtl5g9yZ6l1UN-OunwIAI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/5xOmwuUtl5g9yZ6l1UN-OunwIAI/1/da"><img src="http://feedads.g.doubleclick.net/~a/5xOmwuUtl5g9yZ6l1UN-OunwIAI/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/06/random-hacks-of-kindness-1-sp-urban-fact-fato-urbano.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>cruzalinhas</title>
		<link>http://chester.blog.br/archives/2010/06/cruzalinhas.html</link>
		<comments>http://chester.blog.br/archives/2010/06/cruzalinhas.html#comments</comments>
		<pubDate>Sat, 05 Jun 2010 02:39:38 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Projetos Pessoais]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=4000</guid>
		<description><![CDATA[O site da SPTrans oferece várias informações sobre as linhas de ônibus, trem e metrô que operam na cidade de São Paulo. A navegação, entretanto, deixa um pouco a desejar &#8211; razão que leva as pessoas a alternativas como o Tô a Pé e o eficiente sistema de rotas do Google Maps. Este último resolve [...]]]></description>
			<content:encoded><![CDATA[<p>O site da <a href="http://www.sptrans.com.br/itinerarios/">SPTrans</a> oferece várias informações sobre as linhas de ônibus, trem e metrô que operam na cidade de São Paulo. A navegação, entretanto, deixa um pouco a desejar &#8211; razão que leva as pessoas a alternativas como o <a href="http://www.toape.com.br/">Tô a Pé</a> e o eficiente sistema de rotas do <a href="http://maps.google.com">Google Maps</a>.</p>
<p>Este último resolve bem a minha vida, mas às vezes tudo o que eu quero é saber quais ônibus passam por um determinado local. Ou ainda: quais, dentre eles, passam por um segundo local, e quais passam entre este e um terceiro, i.e., quais minhas opções para ir do ponto A ao ponto B, e dele ao ponto C, e por aí em diante.</p>
<p>Misturando essa demanda com um desejo de colocar as informações de itinerário do transporte público de São Paulo nas mãos da população, desenvolvi o <a href="http://cruzalinhas.appspot.com">cruzalinhas</a>. A aplicação ainda precisa de muitas melhorias (eu diria que é &#8220;beta&#8221;, mas o que não é?) mas já permite responder às perguntas acima.</p>
<p>Como de costume, o <a href="http://github.com/chesterbr/cruzalinhas">código-fonte</a> é livre (<a href="http://pt.wikipedia.org/wiki/Licen%C3%A7a_MIT">licença MIT</a>), e esse post vai falar um pouco sobre o funcionamento do mesmo.</p>
<p style="text-align: center;"><a href="http://cruzalinhas.appspot.com"><img class="size-full wp-image-4012  aligncenter" style="border: 1px solid black;" title="cruzalinhas" src="http://chester.blog.br/wp-content/uploads/2010/06/cruzalinhas_tela.png" alt="cruzalinhas" width="350" height="164" /></a></p>
<p><span id="more-4000"></span>O back-end da aplicação é escrito em <a href="http://www.python.org/">Python</a> e hospedado no <a href="http://code.google.com/appengine/">Google App Engine</a>. Ele disponibiliza um par de chamadas <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">AJAX</a>/<a href="http://json.org">JSON</a> para o front-end: uma página HTML que usa o JQuery para acessar tanto esse back-end quanto a <a href="http://code.google.com/apis/maps/">API do Google Maps</a> (usada para desenhar os mapas/trajetos e buscar endereços).</p>
<p><a href="http://github.com/chesterbr/cruzalinhas/blob/master/src/scraper.py">Obter os dados de itinerário</a> não foi trivial, mas o principal desafio mesmo era fazer buscas geográficas. Explico: eu tenho, para cada linha, os pontos (latitude e longitude) que compõem a sequência de segmentos de reta que, conectados, representam seu trajeto. Uma busca consiste em descobrir quais dessas figuras cortam um determinado ponto (idealmente com alguma tolerância).</p>
<p>Calcular a distância entre o ponto e cada um dos segmentos de reta já estaria fora de questão se estivessemos falando de geometria euclidiana simples (e <a href="http://www.movable-type.co.uk/scripts/latlong.html">não estamos</a>). Já que a idéia era ter alguma tolerância mesmo, eu poderia verificar se o ponto está na caixa que contém o segmento de reta (reduzindo a questão a uma quadra de <a href="http://en.wikipedia.org/wiki/Inequality">comparações de desigualdade</a>). Infelizmente, 4 comparações x cerca de 620 mil pontos ainda é <strong>muita</strong> coisa.</p>
<p>A salvação da lavoura foi o <a href="http://en.wikipedia.org/wiki/Geohash">geohash</a> &#8211; essencialmente uma representação de uma área geográfica com precisão mais-ou-menos arbitrária (consulte o link para detahes, é um conceito genial). A <a href="http://github.com/chesterbr/cruzalinhas/blob/master/src/geohash.py">biblioteca de geohash que eu usei</a> permite &#8220;somar&#8221; dois geohashes e retornar o geohash da menor caixa que contém os dois pontos originais.</p>
<p>Limitando essa caixa em 6 caracteres, ficamos com um <a href="http://en.wikipedia.org/wiki/Geohash#Worked_example">erro</a> menor que 1 Km &#8211; e esse erro é exatamente a margem de manobra que eu precisava. Observe que muitos dos segmentos caem na mesma caixa, logo, uma linha típica (que era composta de várias centenas de pontos/segmentos) acaba &#8220;participando&#8221; apenas de umas poucas dezenas de geohashes de caixa desse tipo.</p>
<p>Quando o sistema precisa procurar quais linhas passam perto de um ponto geográfico, ele calcula o geohash desse ponto, corta nos 6 caracteres e simplesmente busca as linhas que possuem segmentos cuja string de geohash bata com esse valor calculado. Trocamos aquelas 4 x 620 mil comparações de desigualdade (que o App Engine <a href="http://aleatory.clientsideweb.net/2009/11/28/google-app-engine-datastore-gotchas/">não iria conseguir combinar mesmo, por estarem em dois campos diferentes</a> &#8211; latitude e longitude) por uma única comparação de igualdade (ok, numa string, mas bem curtinha) feita sobre universo de pouco menos de de 2000 hashes distintos &#8211; uma bela otimização.</p>
<p>Esse tipo de busca é muito rápida em um banco de dados relacional corretamente modelado e indexado &#8211; e me surpreendi quando a performance inicial foi tão ruim que as buscas geralmente davam <em>timeout</em>! O fato é que a maneira com que o App Engine expõe o <a href="http://labs.google.com/papers/bigtable.html">BigTable</a> para aplicações Python/Java pode levar o desenvolvedor a tratá-lo como um banco de dados relacional, e foi o que eu fiz: tinha uma entidade Linha, uma entidade Ponto, e em cada ponto eu tinha o geohash do segmento que ele formava com o anterior.</p>
<p>Para a coisa dar certo, foi preciso <a href="http://highscalability.com/how-i-learned-stop-worrying-and-love-using-lot-disk-space-scale">desnormalizar</a> um pouco: fiz a entidade Hash armazenar, para cada geohash de 6 caracteres (que tenha surgido em algum segmento) as chaves primárias de todas as linhas que passam por ele. Com isso, a busca ficou suficientemente rápida.</p>
<p>Uma segunda desnormalização foi armazenar em cada entidade Linha todos os hashes pelos quais ela passa, e retornar essa informação junto com o nome/URL da linha. Isso permite que o próprio JavaScript determine as linhas que ligam dois pontos: ele já tem a lista das linhas que passam em cada um deles, basta ver quais delas têm pelo menos um geohash em comum.</p>
<p>O uso do <a href="http://code.google.com/appengine/docs/python/memcache/usingmemcache.html">memcache</a> melhora ainda mais a performance dessas chamadas. A cada busca, guarda-se em cache a lista de linhas para um geohash (beneficiando outros pontos que estejam na mesma &#8220;caixa&#8221;, cujo resultado é o mesmo) e os meta-dados de cada linha (em separado da lista, já que outros pontos podem retornar a mesma linha e aproveitar esse outro cache).</p>
<p>A outra chamada que o cliente tem que fazer é a lista de pontos da linha em si, para desenhar o trajeto. Ao invés de retornar isso na lista de linhas, achei melhor deixar que ele faça uma nova chamada para cada linha, quando e se precisar dela. Nnovamente o memcache tem a mesma granularidade, fazendo com que o desenho de uma linha seja cacheado independente do ponto utilizado na busca.</p>
<p>Com isso tudo arrumado, a aplicação ganhou corpo suficiente para ir para o ar, e a <a href="http://search.twitter.com/search?q=cruzalinhas">repercussão</a> me fez ver que não era só eu que sentia falta dessa funcionalidade. Ainda falta uma boa versão mobile, e outros sites bacanas poderiam ser feitos com esses dados. Será que se eu disponibilizar uma API (via <a href="http://developer.yahoo.com/yql/">YQL</a>, por exemplo) alguém se habilita?</p>

<p><a href="http://feedads.g.doubleclick.net/~a/jdUNs3pd2nu0QEhwU9vc-z1gVYE/0/da"><img src="http://feedads.g.doubleclick.net/~a/jdUNs3pd2nu0QEhwU9vc-z1gVYE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/jdUNs3pd2nu0QEhwU9vc-z1gVYE/1/da"><img src="http://feedads.g.doubleclick.net/~a/jdUNs3pd2nu0QEhwU9vc-z1gVYE/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/06/cruzalinhas.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Minificação automática de JavaScript no Eclipse</title>
		<link>http://chester.blog.br/archives/2010/05/minificacao-automatica-de-javascript-no-eclipse.html</link>
		<comments>http://chester.blog.br/archives/2010/05/minificacao-automatica-de-javascript-no-eclipse.html#comments</comments>
		<pubDate>Sat, 29 May 2010 16:47:24 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=3983</guid>
		<description><![CDATA[Esse post mostra como configurar o Eclipse/Aptana para gerar uma versão compacta e unificada dos .js do seu projeto sempre que você salvar um deles &#8211; um lance que eu tentei explicar em 140 caracteres, mas não deu muito certo&#8230; Foi-se o tempo em que a interface de uma aplicação web se resumia a um [...]]]></description>
			<content:encoded><![CDATA[<p><em>Esse post mostra como configurar o Eclipse/Aptana para gerar uma versão compacta e unificada dos .js do seu projeto sempre que você salvar um deles &#8211; um lance que eu tentei <a href="http://twitter.com/chesterbr/statuses/14963168347">explicar em 140 caracteres</a>, mas <a href="http://twitter.com/leomeloxp/statuses/14965109213">não deu muito certo</a>&#8230;</em></p>
<p><span id="more-3983"></span></p>
<hr/>
<p>Foi-se o tempo em que a interface de uma aplicação web se resumia a um punhado de páginas web. Em muitos contextos, você vai lançar mão de diversas bibliotecas e plugins, bem como escrever seus próprios módulos de código JavaScript.</p>
<p>O problema que isso acarreta é que as chamadas necessárias para carregar isso tudo aumentam o tempo geral de carga da sua página. Pior ainda: uma dessas chamadas pode segurar o carregamento do restante da página, atrasando todo o processo. Era o que rolava no meu <a href="http://cruzalinhas.appspot.com">último projeto</a>, e o <a href="http://blog.ricbit.com/">ricbit</a> me chamou a atenção para o fato.</p>
<p>Uma solução geral que minimiza esse problema é colocar os scripts indispensáveis para a exibição inicial da página (e apenas eles) dentro do seu próprio servidor, <a href="http://en.wikipedia.org/wiki/Minification_%28programming%29">minificá-los</a> (i.e., reduzir o tamanho sem alterar a funcionalidade) e juntá-los num arquivo só &#8211; que o seu servidor, bem configurado, deve servir <a href="http://en.wikipedia.org/wiki/HTTP_compression">comprimido</a>.</p>
<p>Só que fazer isso &#8220;na mão&#8221; toda hora é muito chato. É possível ter uma <a href="http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify">página dinâmica que executa essa tarefa</a>, e outra idéia é inserir o procedimento no processo de build (se houver um). Ambas funcionam, mas a primeira gera uma preocupação adicional com cache (num conteúdo que até então era estático), e a segunda tira o dinamismo de salvar e testar imediatamente.</p>
<p>Eu precisava de um caminho intermediário, para o qual não escaparia de criar um script que automatiza o trabalho. Como já estava com a &#8220;mão suja de graxa Python&#8221;, eu chamei <a href="http://stackoverflow.com/questions/1199470/combine-javascript-files-at-deployment-in-python/1905612#1905612">esse</a> port do <a href="http://www.crockford.com/javascript/jsmin.html">JsMin</a> num <a href="http://github.com/chesterbr/cruzalinhas/blob/master/src/build_all_scripts.py">script bem simples</a>, e troquei no HTML vários scripts externos por um só, que carrega em paralelo com outros elementos da página, reduzindo bastante o tempo de carga inicial.</p>
<p><em>(Isso <strong>não</strong> é regra. Nunca assuma, sempre meça. Existem ótimas ferramentas para fazer isso, sendo as minhas prediletas a aba <em>net</em> do <a href="http://getfirebug.com/">Firebug</a> e sua equivalente embutida no menu &#8220;Developer&#8221; do Chrome.)</em></p>
<p>A questão é: quando chamar esse script? Idealmente, eu queria que ele rodasse quando eu salvasse um dos scripts envolvidos (e <strong>só</strong> quando eu fizesse isso). Felizmente o Eclipse/Aptana possibilita isso, e é fácil:</p>
<ol>
<li>Certifique-se de que o seu script funciona na linha de comando;</li>
<li>Com o botão direito na pasta do projeto, escolha <em>Properties</em>;</li>
<li>Selecione <em>Builders</em> no menu da esquerda;</li>
<li>Clique em <em>New</em>, selecione o tipo <em>Program</em> e dê <em>Ok</em>;</li>
<li>Na aba <em>Main</em>, especifique o script no campo <em>Location</em> e o diretório onde ele vai rodar (<em>Working Directory</em>);</li>
<li>Em <em>Build Options</em>, deixei as opções conforme o screenshot abaixo (clique para ampliar):</li>
</ol>
<p style="text-align: center;"><a href="http://chester.blog.br/wp-content/uploads/2010/05/builder.png"><img class="size-medium wp-image-3984  aligncenter" title="Opções do Builder (clique para ampliar)" src="http://chester.blog.br/wp-content/uploads/2010/05/builder-300x245.png" alt="Opções do Builder (clique para ampliar)" width="300" height="245" /></a></p>
<p>O pulo-do-gato (alguém ainda fala isso?) é acionar o <em>Specify working set of relevant resources</em>, e, usando o botão ao lado, marcar <strong>apenas</strong> os scripts que serão colados/minificados &#8211; caso contrário ele vai ficar rodando o script o tempo todo.</p>
<p>Se você fizer direitinho, sempre que salvar um script ou der um clean, build, etc., o minificador vai rodar em background, e você vai poder testar no browser imediatamente, como fazia antes dessa brincadeira toda. Pra mim foi uma mão na roda, e espero que para você também seja!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/KHcLowUFGInTDhQzZ4-pIX4ljHs/0/da"><img src="http://feedads.g.doubleclick.net/~a/KHcLowUFGInTDhQzZ4-pIX4ljHs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/KHcLowUFGInTDhQzZ4-pIX4ljHs/1/da"><img src="http://feedads.g.doubleclick.net/~a/KHcLowUFGInTDhQzZ4-pIX4ljHs/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/05/minificacao-automatica-de-javascript-no-eclipse.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 99</title>
		<link>http://chester.blog.br/archives/2010/05/the-99.html</link>
		<comments>http://chester.blog.br/archives/2010/05/the-99.html#comments</comments>
		<pubDate>Sat, 15 May 2010 16:50:40 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=3963</guid>
		<description><![CDATA[Os webcomics ainda são o melhor lugar para buscar inovação em quadrinhos, por conta da ausência de editores/intermediários e da disponibilidade. Mas de vez em quando os quadrinhos tradicionais revelam surpresas agradáveis como The 99 &#8211; ou The Ninety-Nine para alguns, e al-tisa&#8217;a wa tisaun‎ para outros. Produzido por uma editora do Kuwait, o gibi [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.the99.org"><img class="alignright right size-full wp-image-3964" style="border: 1px solid black; margin-left: 1px; margin-right: 1px;" title="The 99: Origins" src="http://chester.blog.br/wp-content/uploads/2010/05/the99.jpg" alt="The 99: Origins" width="220" height="311" /></a>Os <em>webcomics</em> ainda são o melhor lugar para buscar inovação em quadrinhos, por conta da ausência de editores/intermediários e da disponibilidade. Mas de vez em quando os quadrinhos tradicionais revelam surpresas agradáveis como <a href="http://www.the99.org/">The 99</a> &#8211; ou <em>The Ninety-Nine </em>para alguns, e <em>al-tisa&#8217;a wa tisaun‎</em> para outros.</p>
<p>Produzido por uma <a href="http://en.wikipedia.org/wiki/Teshkeel_Comics">editora</a> do Kuwait, o gibi é co-escrito pelo seu idealizador, o médico humanista <a href="http://www.al-mutawa.com/">Dr. Naif A. Al-Mutawa</a> e pelo americano <a href="http://pensivemischief.blogspot.com/">Stuart Moore</a>. Esta combinação (aliada ao trabalho visual de vários artistas populares dos <em>comics</em> Marvel/DC) dá ao quadrinho o tom multi-cultural que o diferencia.</p>
<p>A história não é radicalmente original: uma tentativa de evitar a destruição de uma biblioteca em Bagdá (nos moldes da <a href="http://pt.wikipedia.org/wiki/Biblioteca_de_Alexandria">Biblioteca de Alexandria</a>, só que na Idade Média) por um ataque bárbaro transforma o conhecimento ali contido em 99 artefatos místicos, que se perdem durante a guerra. Na nossa época, o Dr. Ramzi dirige uma operação humanitária da UNESCO em zonas de guerra, enquanto busca estas relíquias, na esperança de que o conhecimento ali contido possa trazer a paz ao mundo atual.</p>
<p>Os artefatos começam a ser localizados por pessoas comuns, que descobrem que o conhecimento contido neles transformou-se em fonte de poderes especiais, levando o Dr. Ramzi a ajudá-los a controlar este poder e ajudá-lo em sua missão pacifista. Claro, ele não é o único com uma agenda, e a partir disso a história se desenrola.</p>
<p>Pode parecer, à primeira vista, uma versão islâmica dos X-Men. Mas o <em>blend</em> (ao menos nas três edições que li) é mais interessante que isso: mesmo sem o (justificado) rancor contra a autoridade islâmica de um <a href="http://chester.blog.br/archives/2009/08/meninas-iranianas-a-beginners-guide-to-acting-english-persepolis.html">Persépolis</a>, ele tem em comum com a autobiografia de Satrapi a apresentação de valores humanistas e pacifistas nos quais uma parcela significativa do mundo árabe/islâmico acredita, mas que são mascarados por regimes retrógrados e violadores dos direitos humanos fundamentais.</p>
<p>Tudo isso vem embalado num quadrinho divertido que, nos moldes de suas contrapartes ocidentais, vai virar <a href="http://www.time.com/time/world/article/0,8599,1828732,00.html">desenho animado</a> em breve. Ele também já conta com um <a href="http://www.the99.org/art-36-33-Articles-1-19-690,ckl">parque temático</a>, e não vou me espantar se virar filme, na esteira dos blockbusters da Marvel dos últimos anos. A história tem todos os ingredientes necessários, só é preciso encontrar uma produtora com os culhões que faltaram ao Comedy Central &#8211; que, à revelia dos autores, <a href="http://br.noticias.yahoo.com/s/afp/100423/entretenimento/eua_televis__o_isl_1" class="broken_link" rel="nofollow">censurou episódios de South Park</a> por conta de referências a Maomé.</p>
<p>Mas a inovação <strong>não pára por aí</strong>: como a edição em papel tem alcance limitado, o mesmo <a href="http://www.the99.org/article-36-33-Articles-17,ckl">site que disponibiliza a edição &#8220;Origins&#8221; gratuitamente para download</a>, permite comprar qualquer uma das edições pela bagatela de US$ 1.99. Isso mesmo: por míseros R$ 3,55 você pode ler uma edição completa no seu computador, sem sair de casa. O pagamento é via PayPal, ou seja, 100% seguro &#8211; se você já tem PayPal, é clicar, autenticar, comprar e baixar. E o melhor de tudo: é um arquivo .PDF <strong>sem qualquer tipo de DRM</strong>. O gibi é <strong>seu</strong>, exatamente como os de papel.</p>
<p>Já comprei os dois primeiros e pretendo continuar lendo (cadê o <a href="http://thenextweb.com/asia/2010/01/28/chinese-ipad-clone-released-months-apples/">genérico do iPad</a>, hein?) &#8211; e acho que nesse aspecto da venda online as editoras americanas é que deviam se inspirar nos caras&#8230;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/2EzoSE2F3JsrG4yUeIToUK7SpDs/0/da"><img src="http://feedads.g.doubleclick.net/~a/2EzoSE2F3JsrG4yUeIToUK7SpDs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2EzoSE2F3JsrG4yUeIToUK7SpDs/1/da"><img src="http://feedads.g.doubleclick.net/~a/2EzoSE2F3JsrG4yUeIToUK7SpDs/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/05/the-99.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entenda Lost</title>
		<link>http://chester.blog.br/archives/2010/04/entenda-lost.html</link>
		<comments>http://chester.blog.br/archives/2010/04/entenda-lost.html#comments</comments>
		<pubDate>Tue, 27 Apr 2010 16:31:19 +0000</pubDate>
		<dc:creator>chester</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chester.blog.br/?p=3956</guid>
		<description><![CDATA[Em uma lista de e-mail o @lucasfontes resumiu bem (e me autorizou a publicar) tudo o que você precisa saber sobre essa série: Primeira temporada: Assim.. um aviao caiu numa ilha&#8230;. e uh&#8230; essa ilha tem umas pessoas&#8230; e uh&#8230;. essas pessoas vao tentar atacar os caras do aviao. nota da producao: JURAMOS q as [...]]]></description>
			<content:encoded><![CDATA[<p>Em uma lista de e-mail o <a href="http://twitter.com/lucasfontes">@lucasfontes</a> resumiu bem (e me autorizou a publicar) <strong>tudo</strong> o que você precisa saber sobre essa série:</p>
<p><strong>Primeira temporada:</strong><br />
Assim.. um aviao caiu numa ilha&#8230;. e uh&#8230; essa ilha tem umas pessoas&#8230; e uh&#8230;. essas pessoas vao tentar atacar os caras do aviao.<br />
nota da producao: JURAMOS q as pessoas nao estao mortas, vcs vao adorar essa serie!</p>
<p><strong>Segunda temporada:</strong><br />
Uh&#8230; as pessoas da ilha sao malvadas e andam descalco.. eles tem um lider q nunca aparece<br />
nota da producao: a trama esta apenas comecando, teremos 15 temporadas, action figures e canecas de cafe</p>
<p><strong>Terceira temporada:</strong><br />
Uh&#8230;. agora as pessoas da ilha nao tem computador, internet e satelite&#8230;.. e o lider na verdade nem existe.. eh tudo invencao..<br />
Mataram o Santoro com apenas 2 falas em 3 temporadas&#8230;<br />
nota da producao: eles nao estao mortos&#8230;tudo sera explicado, no seu tempo.</p>
<p><strong>Quarta temporada:</strong><br />
Tem um cara q consegue sair e voltar da ilha&#8230; acho q precisamos trazer aquele lider de volta hein?<br />
nota da producao: precisamos comecar matar os personagens caros ( tipo o Michael ), CGI esta mais barato q filmar em Ibiza</p>
<p><strong>Quinta temporada:</strong><br />
Vamo leva todo mundo pra fora da ilha, dar um final feliz, e rezar pra NBC cancelar a gente pra nao precisarmos explicar a farofa q fizemos nas temporadas anteriores<br />
nota da producao: precisamos dar um tempo&#8230;. ( entre quinta e sexta, teve quase 1 ano de espera )</p>
<p><strong>Sexta temporada:</strong><br />
Fodeu galere&#8230; vamos ter q explicar tudo!<br />
O lider existe, vamo mata ele, colocar um outro malvadao na historia.<br />
E agora a grande sacada do show&#8230;&#8230;. eles estao mortos.<br />
nota da producao: se o final nao colar, a gente ainda consegue fazer um dvd com uns extras e tal&#8230;.. AH, e ainda temos algumas daquelas canecas pra vender!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/P5Y1yP-WKAk67U67_LhmdZ-Oxe0/0/da"><img src="http://feedads.g.doubleclick.net/~a/P5Y1yP-WKAk67U67_LhmdZ-Oxe0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/P5Y1yP-WKAk67U67_LhmdZ-Oxe0/1/da"><img src="http://feedads.g.doubleclick.net/~a/P5Y1yP-WKAk67U67_LhmdZ-Oxe0/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://chester.blog.br/archives/2010/04/entenda-lost.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
