<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Vale do Trovão</title>
	
	<link>http://blog.renatocunha.com</link>
	<description />
	<lastBuildDate>Sat, 17 Jul 2010 23:06:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/trovao" /><feedburner:info uri="trovao" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>trovao</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Frequência de envio de emails</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/zD-GuNN6b18/</link>
		<comments>http://blog.renatocunha.com/2010/07/frequencia-de-envio-de-emails/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 15:57:54 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[matplotlib]]></category>
		<category><![CDATA[plot]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.renatocunha.com/?p=575</guid>
		<description><![CDATA[<p>Preciso de horários mais humanos à frente do computador&#8230;</p>
<p><a class="highslide img_1" href="http://blog.renatocunha.com/wp-content/uploads/2010/07/mails.png" onclick="return hs.expand(this)"><img src="http://blog.renatocunha.com/wp-content/uploads/2010/07/mails-300x138.png" alt="Gráfico que exibe a change deu enviar um email por hora" title="Chance de envio de emails" width="300" height="138" class="aligncenter size-medium wp-image-576" /></a></p>
<p>&#8230; o gráfico foi gerado agregando todos os emails que enviei nos últimos seis anos<sup class='footnote'>[<a href='#fn-575-1' id='fnref-575-1'>1</a>]</sup> por hora e dividindo pelo total. Achei interessante que um bloco bem grande de horas tenha valores parecidos. <span id="more-575"></span></p>
<p>E o script para gerá-lo começa por pegar o &#8230;</p>


Textos Relacionados (gerado automaticamente):<ol><li><a href='http://blog.renatocunha.com/2010/06/migrando-do-nmzmail-para-o-mu/' rel='bookmark' title='Permanent Link: Migrando do nmzmail para o mu'>Migrando do nmzmail para o mu</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Preciso de horários mais humanos à frente do computador&#8230;</p>
<p><a class="highslide img_3" href="http://blog.renatocunha.com/wp-content/uploads/2010/07/mails.png" onclick="return hs.expand(this)"><img src="http://blog.renatocunha.com/wp-content/uploads/2010/07/mails-300x138.png" alt="Gráfico que exibe a change deu enviar um email por hora" title="Chance de envio de emails" width="300" height="138" class="aligncenter size-medium wp-image-576" /></a></p>
<p>&#8230; o gráfico foi gerado agregando todos os emails que enviei nos últimos seis anos<sup class='footnote'>[<a href='#fn-575-1' id='fnref-575-1'>1</a>]</sup> por hora e dividindo pelo total. Achei interessante que um bloco bem grande de horas tenha valores parecidos. <span id="more-575"></span></p>
<p>E o script para gerá-lo começa por pegar o campo Date de todos os emails, depois o divide em colunas separadas por &#8220;:&#8221; para se livrar do &#8220;Date:&#8221; inicial, remove as entradas inválidas, como emails em HTML<sup class='footnote'>[<a href='#fn-575-2' id='fnref-575-2'>2</a>]</sup>, emails com data não padrão (usando &#8220;/&#8221; para separação), emails com especificação de hora estranha (a remoção do &#8220;at&#8221<img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/wink.png' alt='Wink' title='Wink' class='tse-smiley' /><sup class='footnote'>[<a href='#fn-575-3' id='fnref-575-3'>3</a>]</sup>. Depois disso, as datas são passadas para o comando date do unix, convertidas para UTC, pois queria todas as horas em UTC-3, e as horas são repassadas ao script de plotagem:</p>
<pre class="brush: bash">
SENT_MAIL=/caminho/para/emails/enviados

grep -r ^Date: ${SENT_MAIL} | \
cut --complement -d : -f 1-3 | \
grep -v \&lt;br\&gt; | grep -v \/ | grep -v 'at' | \
date -f /dev/stdin -u +%H | \
./plot.py</pre>
<p>O script de plotagem recebe as horas, as soma e, por fim, as exibe:</p>
<pre class="brush: python">
import numpy as np
from pylab import *
from math import sqrt

bins = {}

for line in sys.stdin:
    hour = int(line.strip()) - 3
    if hour < 0:
        hour += 24
    bins[hour] = bins.get(hour, 0) + 1

SAMPLES = len(bins)
width = 0.35 * 0.5
total = float(sum(bins.values()))
stuff = [i/total for i in bins.values()]

ind = np.arange(SAMPLES + 1)
ind = 0.5 * (ind[1:]+ind[:-1])

fdata = figure()

p = bar(ind, stuff)
xticks(ind + width/2 + 0.3, [i + 1 for i in range(SAMPLES + 1)])

title('Chance de eu enviar um email por hora')
xlabel('Hora do dia')
ylabel('"Probabilidade"')

defsize = fdata.get_size_inches()
golden = (sqrt(5) - 1)/2
fdata.set_size_inches(defsize[0], defsize[1] * golden)

grid()

fdata.savefig('mails.png')
</pre>
<p>Sentia falta de escrever esses scripts inúteis. Esses webmails da vida bem que poderiam exibir uns dados assim. Garanto que eles têm esse tipo de informação.</p>
<p><a name="bonus"><br />
<h2>Bônus</h2>
<p></a></p>
<p>Fiz um script em Python capaz de coletar as datas dos emails enviados do Gmail via IMAP. Obviamente, o acesso IMAP deve ser habilitado para que o script funcione. O script deve funcionar em qualquer Python da série 2.x na versão 2.4 ou superior.</p>
</pre>
<pre class = "brush: python">
#!/usr/bin/python

import getpass, imaplib

ssl  = True
host = 'imap.gmail.com'
mbox = '[Gmail]/Sent Mail'
port = 993 if ssl else None
imapmethod = imaplib.IMAP4_SSL if ssl else imaplib.IMAP4

def main():
    user = raw_input('Username: ')
    conn = imapmethod(host, port)
    conn.login(user, getpass.getpass())
    conn.select(mailbox = mbox)
    typ, data = conn.search(None, 'ALL')
    for mnum in data[0].split():
        _, tmp = conn.fetch(mnum, '(BODY[HEADER.FIELDS (DATE)])')
        date = tmp[0][1].strip()
        print date
    conn.close()
    conn.logout()

if __name__ == '__main__':
    main()
</pre>
<div class='footnotes'>
<div class='footnotedivider'></div>
<h3>Notas</h3>
<ol>
<li id='fn-575-1'>6 * 365 dias, para ser exato. <span class='footnotereverse'><a href='#fnref-575-1'>&#8617;</a></span></li>
<li id='fn-575-2'>Culpa da interface do gmail.<img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/thinking.png' alt='Thinking' title='Thinking' class='tse-smiley' /> <span class='footnotereverse'><a href='#fnref-575-2'>&#8617;</a></span></li>
<li id='fn-575-3'>Cerca de 120 mensagens foram descartadas nessa filtragem. Não é muito. <span class='footnotereverse'><a href='#fnref-575-3'>&#8617;</a></span></li>
</ol>
</div>


<p>Textos Relacionados (gerado automaticamente):</p><ol><li><a href='http://blog.renatocunha.com/2010/06/migrando-do-nmzmail-para-o-mu/' rel='bookmark' title='Permanent Link: Migrando do nmzmail para o mu'>Migrando do nmzmail para o mu</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=zD-GuNN6b18:BOLlhF9nvWA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zD-GuNN6b18:BOLlhF9nvWA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zD-GuNN6b18:BOLlhF9nvWA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=zD-GuNN6b18:BOLlhF9nvWA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zD-GuNN6b18:BOLlhF9nvWA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=zD-GuNN6b18:BOLlhF9nvWA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zD-GuNN6b18:BOLlhF9nvWA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zD-GuNN6b18:BOLlhF9nvWA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=zD-GuNN6b18:BOLlhF9nvWA:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/zD-GuNN6b18" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2010/07/frequencia-de-envio-de-emails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2010/07/frequencia-de-envio-de-emails/</feedburner:origLink></item>
		<item>
		<title>Cognitive biases</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/s8tU_QfCNcw/</link>
		<comments>http://blog.renatocunha.com/2010/07/cognitive-biases/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 19:42:29 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[en]]></category>
		<category><![CDATA[bias]]></category>
		<category><![CDATA[cognition]]></category>
		<category><![CDATA[human behavior]]></category>
		<category><![CDATA[impostor]]></category>

		<guid isPermaLink="false">http://blog.renatocunha.com/?p=562</guid>
		<description><![CDATA[<p>Ever since I first noticed the <a href="http://en.wikipedia.org/wiki/Dunning–Kruger_effect">Dunning-Kruger effect</a>, I&#8217;ve started observing a bit more how I and some other people behave. Last week a friend introduced the &#8220;<a href="http://en.wikipedia.org/wiki/Impostor_syndrome">Impostor syndrome</a>&#8221; to me, a &#8220;syndrome&#8221; apparently common among graduate students. There&#8217;s a <a href="http://sciencecareers.sciencemag.org/career_development/previous_issues/articles/2008_02_15/caredit_a0800025">very interesting article</a> that presents the concept nicely:</p>
<blockquote><p>&#8220;Impostor syndrome&#8221; is the</p></blockquote><p> &#8230;</p>


Não há textos relacionados.]]></description>
			<content:encoded><![CDATA[<p>Ever since I first noticed the <a href="http://en.wikipedia.org/wiki/Dunning–Kruger_effect">Dunning-Kruger effect</a>, I&#8217;ve started observing a bit more how I and some other people behave. Last week a friend introduced the &#8220;<a href="http://en.wikipedia.org/wiki/Impostor_syndrome">Impostor syndrome</a>&#8221; to me, a &#8220;syndrome&#8221; apparently common among graduate students. There&#8217;s a <a href="http://sciencecareers.sciencemag.org/career_development/previous_issues/articles/2008_02_15/caredit_a0800025">very interesting article</a> that presents the concept nicely:</p>
<blockquote><p>&#8220;Impostor syndrome&#8221; is the name given to the feelings that Abigail and many other young scientists describe: Their accomplishments are just luck or deceit, and they&#8217;re in over their heads. The key to getting past it, experts say, is making accurate, realistic assessments of your performance.  Perhaps equally important: knowing you&#8217;re not alone. Abigail thinks that sharing her feelings with other people is how she will eventually come to grips with her sense of feeling like an impostor. &#8220;It&#8217;s fantastic to hear other people say, &#8216;I&#8217;ve felt that way, too.&#8217; &#8220;</p></blockquote>
<p>And it continues to say that</p>
<blockquote><p>( &hellip; ) the root of the problem appears to be &#8220;very unrealistic notions of what it means to be competent&#8221; and says that people &#8220;set this internal bar exceedingly high.&#8221; When they occasionally fail, these people may adopt negative behaviours such as procrastination and perfectionism. ( &hellip; ) </p></blockquote>
<p>The article also presents some interesting solutions. Acknoledging the problem may help, but when you&#8217;re under a cognitive bias&#8217; effect<sup class='footnote'>[<a href='#fn-562-1' id='fnref-562-1'>1</a>]</sup>, <a href="http://www4.ncsu.edu/unity/lockers/users/f/felder/public/Columns/Impostor.html">you don&#8217;t operate on logic</a>.</p>
<p>The Dunnig-Kruger effect, introduced by IgNobel-winning article &#8220;<a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.64.2655&#038;rep=rep1&#038;type=pdf">Unskilled and Unaware of It: How Difficulties in Recognizing One&#8217;s Own Incompetence Lead to Inflated Self-Assessments</a>&#8221; is equally interesting, by stating that</p>
<blockquote><p>The Dunning–Kruger effect is a cognitive bias in which an unskilled person makes poor decisions and reaches erroneous conclusions, but their incompetence denies them the metacognitive ability to realize their mistakes.[1]  The unskilled therefore suffer from illusory superiority, rating their own ability as above average, much higher than it actually is, while the highly skilled underrate their abilities, suffering from illusory inferiority.</p></blockquote>
<p>Their (<a href="http://en.wikipedia.org/wiki/Impostor_syndrome">Impostor</a> &#038; <a href="http://en.wikipedia.org/wiki/Dunning–Kruger_effect">Dunning-Kruger</a>) corresponding Wikipedia entries are worth reading.
<div class='footnotes'>
<div class='footnotedivider'></div>
<h3>Notas</h3>
<ol>
<li id='fn-562-1'>I suppose, I&#8217;m not a psychologist. <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/razz.png' alt='Razz' title='Razz' class='tse-smiley' /> <span class='footnotereverse'><a href='#fnref-562-1'>&#8617;</a></span></li>
</ol>
</div>


<p>Não há textos relacionados.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=s8tU_QfCNcw:xURZ7LdqpW0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=s8tU_QfCNcw:xURZ7LdqpW0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=s8tU_QfCNcw:xURZ7LdqpW0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=s8tU_QfCNcw:xURZ7LdqpW0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=s8tU_QfCNcw:xURZ7LdqpW0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=s8tU_QfCNcw:xURZ7LdqpW0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=s8tU_QfCNcw:xURZ7LdqpW0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=s8tU_QfCNcw:xURZ7LdqpW0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=s8tU_QfCNcw:xURZ7LdqpW0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/s8tU_QfCNcw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2010/07/cognitive-biases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2010/07/cognitive-biases/</feedburner:origLink></item>
		<item>
		<title>One month and a half in the Summer of Code program</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/3wM8S93qLdM/</link>
		<comments>http://blog.renatocunha.com/2010/07/one-month-and-a-half-in-the-summer-of-code-program/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 01:27:25 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[en]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.renatocunha.com/?p=550</guid>
		<description><![CDATA[<p>It&#8217;s been a month and a half since I started working on the <a href="http://mercurial.selenic.com">Mercurial</a> project as part of the <a href="http://code.google.com/soc/">Google Summer of Code</a> program. Mercurial is a free, distributed source control tool written in <a href="http://www.python.org">Python</a> that efficiently handles projects of any size and offers an easy and intuitive interface while the Google &#8230;</p>


Textos Relacionados (gerado automaticamente):<ol><li><a href='http://blog.renatocunha.com/2005/06/summer-of-code/' rel='bookmark' title='Permanent Link: Summer of code'>Summer of code</a></li>
<li><a href='http://blog.renatocunha.com/2010/06/atualizacoes-vitais/' rel='bookmark' title='Permanent Link: Atualizações vitais'>Atualizações vitais</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a month and a half since I started working on the <a href="http://mercurial.selenic.com">Mercurial</a> project as part of the <a href="http://code.google.com/soc/">Google Summer of Code</a> program. Mercurial is a free, distributed source control tool written in <a href="http://www.python.org">Python</a> that efficiently handles projects of any size and offers an easy and intuitive interface while the Google Summer of Code is a global program that offers student developers stipends to write code for various open source software projects. <span id="more-550"></span></p>
<p>My project&#8217;s objective is to port Mercurial to <a href="http://www.python.org/dev/peps/pep-3000/">py3k</a> <sup class='footnote'>[<a href='#fn-550-1' id='fnref-550-1'>1</a>]</sup> (<a href="http://www.python.org/download/releases/3.1.2/">Python 3.x</a>), as described in <a href="http://bitbucket.org/trovao/gsoc-2010/src/tip/application.rst">my proposal</a>. Working with the mercurial developers is being a wonderful experience. The most interesting part of the development process is the code review. Every time you want to contribute a change, you submit a patch to the mailing list and a handful of people will start contributing ideas to improve your code so it can, eventually (after some iterations &#8211; if it&#8217;s not a braindead idea <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/smile.png' alt='Smile' title='Smile' class='tse-smiley' /> ), be pushed to the main repository. It feels a bit frustrating when those picky people start to complain about your code, but the result tends to be much better than the first versions.</p>
<p>A peculiar aspect of this first half of coding is that I spent more time coding in C than in Python. As some core mercurial modules are implemented in C, I decided that porting them before all others would pay off in the future. Thus, I spent some time adapting the code to build both in Python 2.x and Python 3.x. That part is building fine and working well as far as I am concerned<sup class='footnote'>[<a href='#fn-550-2' id='fnref-550-2'>2</a>]</sup>. Now I&#8217;m focusing on implementing some custom <a href="http://docs.python.org/library/2to3.html#fixers">fixers</a> for <a href="http://docs.python.org/library/2to3.html">2to3</a> to get the python code running in py3k. More about that later&#8230;</p>
<p>Being a community-oriented project, we are holding public IRC meetings every Tuesday at 2pm (BRT) at <a href="http://webchat.freenode.net/">#mercurial in freenode</a>, in case you wanna join us. I am also participating in the mercurial devel and user (not so much in this one) lists.
<div class='footnotes'>
<div class='footnotedivider'></div>
<h3>Notas</h3>
<ol>
<li id='fn-550-1'>A Python version that breaks backwards-compatibility with Python 2.x. <span class='footnotereverse'><a href='#fnref-550-1'>&#8617;</a></span></li>
<li id='fn-550-2'>The mercurial tests tend to explore the code paths by testing the program as a whole, instead of testing each module/class individually. Consequently, I can only test my code fully when I get the core mercurial running. <span class='footnotereverse'><a href='#fnref-550-2'>&#8617;</a></span></li>
</ol>
</div>


<p>Textos Relacionados (gerado automaticamente):</p><ol><li><a href='http://blog.renatocunha.com/2005/06/summer-of-code/' rel='bookmark' title='Permanent Link: Summer of code'>Summer of code</a></li>
<li><a href='http://blog.renatocunha.com/2010/06/atualizacoes-vitais/' rel='bookmark' title='Permanent Link: Atualizações vitais'>Atualizações vitais</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=3wM8S93qLdM:pP0GqxBZSFk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=3wM8S93qLdM:pP0GqxBZSFk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=3wM8S93qLdM:pP0GqxBZSFk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=3wM8S93qLdM:pP0GqxBZSFk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=3wM8S93qLdM:pP0GqxBZSFk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=3wM8S93qLdM:pP0GqxBZSFk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=3wM8S93qLdM:pP0GqxBZSFk:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=3wM8S93qLdM:pP0GqxBZSFk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=3wM8S93qLdM:pP0GqxBZSFk:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/3wM8S93qLdM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2010/07/one-month-and-a-half-in-the-summer-of-code-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2010/07/one-month-and-a-half-in-the-summer-of-code-program/</feedburner:origLink></item>
		<item>
		<title>Migrando do nmzmail para o mu</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/OCpgLmanHYs/</link>
		<comments>http://blog.renatocunha.com/2010/06/migrando-do-nmzmail-para-o-mu/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 19:52:05 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[imap]]></category>
		<category><![CDATA[indexing]]></category>
		<category><![CDATA[maildir]]></category>
		<category><![CDATA[mu]]></category>
		<category><![CDATA[mutt]]></category>
		<category><![CDATA[namazu]]></category>

		<guid isPermaLink="false">http://blog.renatocunha.com/?p=510</guid>
		<description><![CDATA[<p>Há cerca de dois anos resolvi aceitar a dura realidade de que nenhum programa de email presta. Após essa revelação, resolvi seguir os passos dos que foram iluminados antes e resolvi usar o <a href="http://www.mutt.org/">mutt</a><sup class='footnote'>[<a href='#fn-510-1' id='fnref-510-1'>1</a>]</sup>. O mutt é um programa bacana criado com um único propósito: ler email. Isso quer dizer que ele não não &#8230;</p>


Textos Relacionados (gerado automaticamente):<ol><li><a href='http://blog.renatocunha.com/2010/07/frequencia-de-envio-de-emails/' rel='bookmark' title='Permanent Link: Frequência de envio de emails'>Frequência de envio de emails</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Há cerca de dois anos resolvi aceitar a dura realidade de que nenhum programa de email presta. Após essa revelação, resolvi seguir os passos dos que foram iluminados antes e resolvi usar o <a href="http://www.mutt.org/">mutt</a><sup class='footnote'>[<a href='#fn-510-1' id='fnref-510-1'>1</a>]</sup>. O mutt é um programa bacana criado com um único propósito: ler email. Isso quer dizer que ele não não se preocupa em baixar os emails, enviá-los ou em editá-los. Ele é até capaz de fazer isso, mas sejamos sinceros, ele é uma porcaria desempenhando essas outras funções. <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/smile.png' alt='Smile' title='Smile' class='tse-smiley' /></p>
<div id="attachment_515" class="wp-caption aligncenter" style="width: 310px"><a class="highslide img_5" href="http://blog.renatocunha.com/wp-content/uploads/2010/06/screenshot.png" onclick="return hs.expand(this)"><img src="http://blog.renatocunha.com/wp-content/uploads/2010/06/screenshot-300x271.png" alt="Screenshot do mutt" title="Screenshot do mutt" width="300" height="271" class="size-medium wp-image-515" /></a><p class="wp-caption-text">Esse é o mutt <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/smile.png' alt='Smile' title='Smile' class='tse-smiley' /></p></div>
<p>Então, depois de configurar meu ambiente de email, com</p>
<ul>
<li><a href="http://wiki.github.com/jgoerzen/offlineimap/">offlineimap</a> para sincronização do backup local de mensagens com os servidores IMAP de meu email;</li>
<li><a href="http://www.vim.org">vim</a> para edição dos emails;</li>
<li><a href="http://msmtp.sourceforge.net/">msmtp</a> para envio dos emails por SMTP;</li>
<li><a href="http://sourceforge.net/projects/msmtp/files/msmtpqueue/">msmtpqueue</a> para manutenção da fila de emails não enviados;</li>
<li><a href="http://www.truecrypt.org/">Truecrypt</a> para cifragem do banco de dados de emails;</li>
<li><a href="http://www.gnupg.org/">GnuPG</a> para a paranóia básica;</li>
<li><a href="http://live.gnome.org/GnomeKeyring">gnome-keyring</a> como chaveiro com as minhas senhas<sup class='footnote'>[<a href='#fn-510-2' id='fnref-510-2'>2</a>]</sup>;</li>
<li><a href="http://flpsed.org/nmzmail.html">nmzmail</a> para indexação e busca rápida das minhas mensagens.</li>
</ul>
<p>Essa configuração funciona muito bem, mas dia desses acabei esbarrando numa <a href="http://upsilon.cc/~zack/blog/posts/2009/10/mail_indexing_for_mutt/">página que comparava três indexadores</a> (<a href="http://www.rpcurnow.force9.co.uk/mairix/">mairix</a>, <a href="http://flpsed.org/nmzmail.html">nmzmail</a> e <a href="http://www.djcbsoftware.nl/code/mu/">maildir-utils</a>) e que dizia que o maildir-utils era a opção do sujeito.</p>
<p>Nunca considerei o mairix pois li em alguns reviews <sup>[citation needed]</sup> que o nmzmail possuía mais impressões positivas, mas como não conhecia o maildir-utils (mu), era hora de comparar os dois e ver no que dava. Meu objetivo não era comparar por comparar, mas o nmzmail costumava gastar bastante tempo processando meu banco de dados de email, que consiste de aproximadamente 45000 documentos e quase dois milhões de palavras.</p>
<p>Após instalação do mu, hora de gerar o índice. Como a geração <em>inicial</em> do índice costuma ser custosa, ela não foi usada para comparação. No entanto, após a criação do índice, resolvi fazer algumas novas indexações para comparação de desempenho (há um cronjob que levanta de três em três horas para atualizar o índice, quanto menos tempo, melhor). Enquanto o tempo total de indexação do mu ficou na ordem de cinco segundos em todas as execuções, o nmzmail levou cerca de 50 segundos. <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/shock.png' alt='Shock' title='Shock' class='tse-smiley' /></p>
<p>Depois desse resultado, resolvi usar o mu por mais algum tempo para ver se me adapto ao programa. Infelizmente ele não possui uma interface para entrada de consultas (pelo menos eu não vi nenhuma) e a <a href="http://upsilon.cc/~zack/blog/posts/2009/10/mail_indexing_for_mutt/">solução do zack</a> não me agradou muito. Por isso, criei o script python abaixo para fazer cache das consultas com readline e facilitar a minha vida.</p>
<pre class="brush: python">#!/usr/bin/env python

import atexit
import readline

from os.path import join
from os import environ as env
from subprocess import call

HOME = env['HOME']
INDEXPATH = join(HOME, '.mu', 'results')
MAILDIRPATH = join(HOME, 'Maildir')
HISTORY = '.mailfinder_history'
HISTFILE = join(HOME, HISTORY)

try:
    readline.read_history_file(HISTFILE)
except IOError:
    pass

atexit.register(readline.write_history_file, HISTFILE)

def main():
    query = raw_input('Query: ')
    call(['rm -fr %s' % INDEXPATH], shell = True)
    command = 'mu find -m %s -l %s %s' % (MAILDIRPATH, INDEXPATH, query)
    ret = call([command], env = env, shell = True)

if __name__ == '__main__':
    main()
</pre>
<p>No mutt, continuo com o meu antigo atalho (S) para para execução das consultas e adicionei outro atalho (F9) para revisitar os resultados da última busca:</p>
<pre>macro generic S "<shell-escape>mail-finder.py<return><esc>c~/.mu/results<return>" "Search via mu"
macro index <F9> "<change-folder-readonly>~/.mu/results\n" "Display mu find results"
</pre>
<p>O script de atualização dos índices, por sua vez, ficou assim agora:</p>
<pre class="brush: shell">#!/bin/sh

mount | grep $MAILDIR &#038;> /dev/null
if [ "$?" == "1" ]; then
    echo "$MAILDIR not mounted. Aborting." > /dev/stderr
    exit 1
fi

exec nice -n 19 /usr/bin/mu index -q -m $MAILDIR
</pre>
<p>Fim! Legal, né?</p>
<p>PS: O esquema de cores padrão do mutt é meio nojento também. Depois de virar usuário do zenburn, acabei <a href="http://bitbucket.org/trovao/configs/src/tip/mutt-zenburn/dotmuttrc">criando um tema equivalente para o mutt</a>, exibido no início deste post.</p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<h3>Notas</h3>
<ol>
<li id='fn-510-1'>O <em>slogan</em> do mutt é &#8220;All mail clients suck. This one just sucks less.&#8221; <span class='footnotereverse'><a href='#fnref-510-1'>&#8617;</a></span></li>
<li id='fn-510-2'>A questão do chaveiro é complicada. Eu queria uma solução realmente multiplataforma, mas ainda não achei algo que seja satisfatório <span class='footnotereverse'><a href='#fnref-510-2'>&#8617;</a></span></li>
</ol>
</div>


<p>Textos Relacionados (gerado automaticamente):</p><ol><li><a href='http://blog.renatocunha.com/2010/07/frequencia-de-envio-de-emails/' rel='bookmark' title='Permanent Link: Frequência de envio de emails'>Frequência de envio de emails</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=OCpgLmanHYs:D6n02vrdBwM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OCpgLmanHYs:D6n02vrdBwM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OCpgLmanHYs:D6n02vrdBwM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=OCpgLmanHYs:D6n02vrdBwM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OCpgLmanHYs:D6n02vrdBwM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=OCpgLmanHYs:D6n02vrdBwM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OCpgLmanHYs:D6n02vrdBwM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OCpgLmanHYs:D6n02vrdBwM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=OCpgLmanHYs:D6n02vrdBwM:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/OCpgLmanHYs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2010/06/migrando-do-nmzmail-para-o-mu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2010/06/migrando-do-nmzmail-para-o-mu/</feedburner:origLink></item>
		<item>
		<title>Atualizações vitais</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/tCDB-s7xpM4/</link>
		<comments>http://blog.renatocunha.com/2010/06/atualizacoes-vitais/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 19:17:00 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[pessoal]]></category>

		<guid isPermaLink="false">http://blog.renatocunha.com/?p=503</guid>
		<description><![CDATA[<p>Defendi o mestrado no dia 21 de maio de 2010, mas só falarei sobre isso publicamente depois de efetivamente entregar a versão final.</p>
<p>Neste instante e pelos próximos três meses estarei trabalhando no <a href="http://mercurial.selenic.com">Mercurial</a>, como parte do programa <a href="http://code.google.com/intl/xx-bork/soc/">Summer of Code</a>, do <a href="http://www.google.com">Google</a>. O objetivo do meu trabalho é criar uma fundação &#8230;</p>


Textos Relacionados (gerado automaticamente):<ol><li><a href='http://blog.renatocunha.com/2010/07/one-month-and-a-half-in-the-summer-of-code-program/' rel='bookmark' title='Permanent Link: One month and a half in the Summer of Code program'>One month and a half in the Summer of Code program</a></li>
<li><a href='http://blog.renatocunha.com/2005/06/summer-of-code/' rel='bookmark' title='Permanent Link: Summer of code'>Summer of code</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Defendi o mestrado no dia 21 de maio de 2010, mas só falarei sobre isso publicamente depois de efetivamente entregar a versão final.</p>
<p>Neste instante e pelos próximos três meses estarei trabalhando no <a href="http://mercurial.selenic.com">Mercurial</a>, como parte do programa <a href="http://code.google.com/intl/xx-bork/soc/">Summer of Code</a>, do <a href="http://www.google.com">Google</a>. O objetivo do meu trabalho é criar uma fundação para permitir que o Mercurial execute no <a href="http://www.python.org/about/">Python</a> 3.</p>
<p>Há alguns dados sobre os estudantes aceitos no <a href="http://google-opensource.blogspot.com/2010/05/google-summer-of-code-2010-meet.html">blog do Summer of Code</a>. Abaixo, a relação dos top 10 países em número de estudantes aceitos:</p>
<p><a class="highslide img_8" href="http://blog.renatocunha.com/wp-content/uploads/2010/06/graph.png" onclick="return hs.expand(this)"><img src="http://blog.renatocunha.com/wp-content/uploads/2010/06/graph-300x231.png" alt="Top 10 países em número de estudantes aceitos no Summer of Code 2010" title="Top 10 países em número de estudantes aceitos no Summer of Code 2010" width="300" height="231" class="aligncenter size-medium wp-image-507" /></a></p>
<p>Nas próximas semanas uma série de posts, em inglês, envolvendo o trabalho no Mercurial deve aparecer por aqui. Fiquem ligados!</p>


<p>Textos Relacionados (gerado automaticamente):</p><ol><li><a href='http://blog.renatocunha.com/2010/07/one-month-and-a-half-in-the-summer-of-code-program/' rel='bookmark' title='Permanent Link: One month and a half in the Summer of Code program'>One month and a half in the Summer of Code program</a></li>
<li><a href='http://blog.renatocunha.com/2005/06/summer-of-code/' rel='bookmark' title='Permanent Link: Summer of code'>Summer of code</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=tCDB-s7xpM4:7-g6awUxGko:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=tCDB-s7xpM4:7-g6awUxGko:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=tCDB-s7xpM4:7-g6awUxGko:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=tCDB-s7xpM4:7-g6awUxGko:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=tCDB-s7xpM4:7-g6awUxGko:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=tCDB-s7xpM4:7-g6awUxGko:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=tCDB-s7xpM4:7-g6awUxGko:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=tCDB-s7xpM4:7-g6awUxGko:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=tCDB-s7xpM4:7-g6awUxGko:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/tCDB-s7xpM4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2010/06/atualizacoes-vitais/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2010/06/atualizacoes-vitais/</feedburner:origLink></item>
		<item>
		<title>Biblioteca de Inteligência Artificial multiplataforma</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/omDUnf1sbe0/</link>
		<comments>http://blog.renatocunha.com/2010/01/biblioteca-de-ia-multiplataforma/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 13:16:59 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[aicore]]></category>
		<category><![CDATA[ia]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac os]]></category>

		<guid isPermaLink="false">http://blog.renatocunha.com/?p=476</guid>
		<description><![CDATA[<p>Usuários de sistemas <strong>diferentes</strong> de Windows costumam sofrer com a dificuldade de encontrar bibliotecas ou programas que rodem em seus sistemas operacionais. Isso acontece mesmo com livros que ensinam como implementar determinadas técnicas: o código que os acompanha costuma funcionar apenas no Windows<sup class='footnote'>[<a href='#fn-476-1' id='fnref-476-1'>1</a>]</sup>.</p>
<div class="mceTemp">
<dl class="wp-caption alignright" style="width: 85px;">
<dt class="wp-caption-dt"><a href="http://www.amazon.com/Artificial-Intelligence-Games-Second-Millington/dp/0123747317/ref=dp_ob_image_bk" target="_blank"><img class="" title="Artificial Intelligence for Games" src="http://ecx.images-amazon.com/images/I/415aRia8uHL._SL500_PIsitb-sticker-arrow-big,TopRight,35,-73_OU01_SS75_.jpg" alt="Artificial Intelligence for Games" width="75" height="75" /></a></dt>
<dd class="wp-caption-dd">Capa</dd></dl></div><p> &#8230;</p>


Textos Relacionados (gerado automaticamente):<ol><li><a href='http://blog.renatocunha.com/2006/12/pagina-de-inteligencia-artificial-adicionada-ao-blog/' rel='bookmark' title='Permanent Link: Página de Inteligência Artificial adicionada ao blog'>Página de Inteligência Artificial adicionada ao blog</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Usuários de sistemas <strong>diferentes</strong> de Windows costumam sofrer com a dificuldade de encontrar bibliotecas ou programas que rodem em seus sistemas operacionais. Isso acontece mesmo com livros que ensinam como implementar determinadas técnicas: o código que os acompanha costuma funcionar apenas no Windows<sup class='footnote'>[<a href='#fn-476-1' id='fnref-476-1'>1</a>]</sup>.</p>
<div class="mceTemp">
<dl class="wp-caption alignright" style="width: 85px;">
<dt class="wp-caption-dt"><a href="http://www.amazon.com/Artificial-Intelligence-Games-Second-Millington/dp/0123747317/ref=dp_ob_image_bk" target="_blank"><img class="" title="Artificial Intelligence for Games" src="http://ecx.images-amazon.com/images/I/415aRia8uHL._SL500_PIsitb-sticker-arrow-big,TopRight,35,-73_OU01_SS75_.jpg" alt="Artificial Intelligence for Games" width="75" height="75" /></a></dt>
<dd class="wp-caption-dd">Capa do Livro Artificial Intelligence for Games</dd>
</dl>
</div>
<p>Esse <del datetime="2010-01-06T12:49:45+00:00">era?</del> é o caso da <a href="http://code.google.com/p/game-libraries/" target="_blank">aicore</a>, biblioteca que acompanha o livro Artificial Intelligence for Games<sup class='footnote'>[<a href='#fn-476-2' id='fnref-476-2'>2</a>]</sup> em suas primeira e segunda edição. Apesar do <a title="Ian Millington" rel="wikipedia" href="http://en.wikipedia.org/wiki/Ian_Millington" target="_blank">Ian Millington</a>, autor do livro, ter se &#8220;esforçado&#8221; para fazer o código amigável para outros sistemas, é fato que ele desenvolveu pensando no Windows (e, pior, no compilador do Visual Studio).<span id="more-476"></span></p>
<p>No fim de 2009, acabei precisando de uma biblioteca de <abbr title="Inteligência Artificial"><a href="http://pt.wikipedia.org/wiki/Inteligência_artificial" target="_blank">IA</a></abbr> para resolver um problema e decidi portar a aicore para sistemas Unix (para ser sincero, só testei no Mac OS X e no Linux). Conversei com o autor, mas apesar de ter demonstrado interesse, ele jamais aplicou meu patch à árvore principal. Ainda assim, o <a href="http://code.google.com/p/game-libraries/issues/detail?id=1" target="_blank">issue tracker do projeto</a> <a href="http://game-libraries.googlecode.com/issues/attachment?aid=-6001137189567874695&amp;name=aicore.diff">possui o meu patch</a> e não é difícil aplicá-lo ao código original<sup class='footnote'>[<a href='#fn-476-3' id='fnref-476-3'>3</a>]</sup>.</p>
<p>Alguns dos assuntos abordados no livro são<sup class='footnote'>[<a href='#fn-476-4' id='fnref-476-4'>4</a>]</sup>:</p>
<ul>
<li>Steering behaviors;</li>
<li>Pathfinding;</li>
<li>Decision Making;</li>
<li>State Machines;</li>
<li>Fuzzy Logic;</li>
<li>Waypoints;</li>
<li>Learning Behaviors;</li>
<li>Communication;</li>
<li>Teaching characters.</li>
</ul>
<p>Conforme descrito na página, para aplicar o patch basta executar o comando:</p>
<pre>patch -p0 < /caminho/para/aicore-unix-support.diff</pre>
<p>Para compilação, o <a href="http://www.scons.org/">scons</a> é necessário. Instalá-lo é moleza, supondo que você possui o <a href="http://www.python.org">python</a> instalado (e a maioria das distribuições Linux já vêm com ele). Daí, para compilar a aicore e seus demos, basta executar:</p>
<pre class="brush: shell">cd /caminho/para/aicore
cd build
scons</pre>
<p>E é isso. Os demos são instalados no diretório bin e a biblioteca vai parar no diretório lib.
<div class='footnotes'>
<div class='footnotedivider'></div>
<h3>Notas</h3>
<ol>
<li id='fn-476-1'>Considerando o Market Share do referido sistema, essa parece uma escolha razoável, mas continua a irritar.  <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/frown.png' alt='Frown' title='Frown' class='tse-smiley' />  <span class='footnotereverse'><a href='#fnref-476-1'>&#8617;</a></span></li>
<li id='fn-476-2'>O livro é bom, vale a pena lê-lo. <span class='footnotereverse'><a href='#fnref-476-2'>&#8617;</a></span></li>
<li id='fn-476-3'>Caso o patch não esteja mais disponível lá, existe uma <a href="http://blog.renatocunha.com/aicore.diff">cópia online</a>. <span class='footnotereverse'><a href='#fnref-476-3'>&#8617;</a></span></li>
<li id='fn-476-4'>É importante notar que o foco do livro está mais nos algoritmos que em tópicos de pesquisa. Portanto, ele só vai até a profundidade "necessária" para compreensão do assunto. <span class='footnotereverse'><a href='#fnref-476-4'>&#8617;</a></span></li>
</ol>
</div>


<p>Textos Relacionados (gerado automaticamente):</p><ol><li><a href='http://blog.renatocunha.com/2006/12/pagina-de-inteligencia-artificial-adicionada-ao-blog/' rel='bookmark' title='Permanent Link: Página de Inteligência Artificial adicionada ao blog'>Página de Inteligência Artificial adicionada ao blog</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=omDUnf1sbe0:3W0qDQG4-SU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=omDUnf1sbe0:3W0qDQG4-SU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=omDUnf1sbe0:3W0qDQG4-SU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=omDUnf1sbe0:3W0qDQG4-SU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=omDUnf1sbe0:3W0qDQG4-SU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=omDUnf1sbe0:3W0qDQG4-SU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=omDUnf1sbe0:3W0qDQG4-SU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=omDUnf1sbe0:3W0qDQG4-SU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=omDUnf1sbe0:3W0qDQG4-SU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/omDUnf1sbe0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2010/01/biblioteca-de-ia-multiplataforma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2010/01/biblioteca-de-ia-multiplataforma/</feedburner:origLink></item>
		<item>
		<title>Feliz 2010</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/zvgLnwhPbF0/</link>
		<comments>http://blog.renatocunha.com/2010/01/feliz-2010/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 17:05:46 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[site]]></category>
		<category><![CDATA[ano novo]]></category>
		<category><![CDATA[tema]]></category>

		<guid isPermaLink="false">http://blog.renatocunha.com/?p=449</guid>
		<description><![CDATA[<p>Antes de mais nada, um 2010 cheio de realizações para todos. Apesar da virada de ano não ter nada de cosmicamente especial, ela é um período do ano em que muitas pessoas tendem a rever suas vidas, ambições e projetos pessoais. Portanto, boa sorte e um 2010 próspero.  <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/victory.png' alt='Victory' title='Victory' class='tse-smiley' /> <span &#8230;</p>


Não há textos relacionados.]]></description>
			<content:encoded><![CDATA[<p>Antes de mais nada, um 2010 cheio de realizações para todos. Apesar da virada de ano não ter nada de cosmicamente especial, ela é um período do ano em que muitas pessoas tendem a rever suas vidas, ambições e projetos pessoais. Portanto, boa sorte e um 2010 próspero.  <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/victory.png' alt='Victory' title='Victory' class='tse-smiley' /> <span id="more-449"></span></p>
<p>Sobre o blog, espero que o <a href="http://blog.renatocunha.com">novo layout</a> possa substituir o antigo, e agora defunto, <a href="http://blogshop.de/2006/02/21/wordpress-theme-sirius/">sirius</a>. Esse tema foi a cara deste blog por alguns anos e espero não ter que brincar de webdesigner pelos próximos dois anos (pelo menos).</p>
<p><a class="highslide img_10" href="http://blog.renatocunha.com/wp-content/uploads/2010/01/valedotrovao.com_.png" onclick="return hs.expand(this)"><img src="http://blog.renatocunha.com/wp-content/uploads/2010/01/valedotrovao.com_-300x213.png" alt="valedotrovao.com" title="valedotrovao.com" width="300" height="213" class="aligncenter size-medium wp-image-450" /></a></p>
<p>Quanto ao conteúdo, nas próximas semanas pretendo publicar guias de como fazer um <a href="http://code.google.com/p/tgalaxy/">&#8220;clone&#8221;</a> de <a href="http://en.wikipedia.org/wiki/Space_Invaders">Space Invaders</a> (em <a href="http://www.cplusplus.com/doc/tutorial/">C++</a>) e o making-of de nossa <a href="http://www.youtube.com/watch?v=RXDLSwn3N8Q">animação final</a> da disciplina de computação gráfica. </p>


<p>Não há textos relacionados.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=zvgLnwhPbF0:IsW04NEozkU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zvgLnwhPbF0:IsW04NEozkU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zvgLnwhPbF0:IsW04NEozkU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=zvgLnwhPbF0:IsW04NEozkU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zvgLnwhPbF0:IsW04NEozkU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=zvgLnwhPbF0:IsW04NEozkU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zvgLnwhPbF0:IsW04NEozkU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=zvgLnwhPbF0:IsW04NEozkU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=zvgLnwhPbF0:IsW04NEozkU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/zvgLnwhPbF0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2010/01/feliz-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2010/01/feliz-2010/</feedburner:origLink></item>
		<item>
		<title>Resolvendo a instabilidade do MacBook – final</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/lOdtdmpmEAQ/</link>
		<comments>http://blog.renatocunha.com/2009/12/macbook-cleanin/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 15:25:14 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[desempenho]]></category>
		<category><![CDATA[desmontar]]></category>
		<category><![CDATA[disassembly]]></category>
		<category><![CDATA[guia]]></category>
		<category><![CDATA[macbook]]></category>
		<category><![CDATA[superaquecimento]]></category>
		<category><![CDATA[temperatura]]></category>

		<guid isPermaLink="false">http://valedotrovao.com/?p=80</guid>
		<description><![CDATA[<p>Após as mudanças dos dois posts anteriores, meu MacBook ainda estava aquém de minhas expectativas na dissipação de calor.</p>
<p>Então, depois de ponderar por um tempo, resolvi abri-lo e fazer uma limpeza geral, pois era impossível que os <em>kernel panics</em> e o superaquecimento fossem normais. Após desmontá-lo (que é mais fácil do que parece) e &#8230;</p>


Textos Relacionados (gerado automaticamente):<ol><li><a href='http://blog.renatocunha.com/2009/10/resolvendo-a-instabilidade-do-macbook-parte-2/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook &#8211; parte 2'>Resolvendo a instabilidade do MacBook &#8211; parte 2</a></li>
<li><a href='http://blog.renatocunha.com/2009/10/macbook-kernel-panic/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook &#8211; parte 1'>Resolvendo a instabilidade do MacBook &#8211; parte 1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Após as mudanças dos dois posts anteriores, meu MacBook ainda estava aquém de minhas expectativas na dissipação de calor.</p>
<p>Então, depois de ponderar por um tempo, resolvi abri-lo e fazer uma limpeza geral, pois era impossível que os <em>kernel panics</em> e o superaquecimento fossem normais. Após desmontá-lo (que é mais fácil do que parece) e limpá-lo com um pincel e um aspirador de pó na função de assoprar, percebi uma melhora surpreendente na temperatura média, resumida na tabela abaixo. (Note que não há qualquer rigor científico aqui, mas que melhorou, melhorou <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/wink.png' alt='Wink' title='Wink' class='tse-smiley' />.) <span id="more-366"></span></p>
<table cellspacing="5px">
<caption>Temperaturas médias estimadas do processador do MacBook</caption>
<colgroup align="left"></colgroup>
<colgroup align="center"></colgroup>
<colgroup align="center"></colgroup>
<thead>
<tr>
<th>Estado</th>
<th>Antes da limpeza (°C)</th>
<th>Após a limpeza (°C)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Repouso</td>
<td>60 ± 2</td>
<td>44 ± 2</td>
</tr>
<tr>
<td>Exibição de vídeo do Youtube</td>
<td>80 ± 2</td>
<td>63 ± 2</td>
</tr>
<tr>
<td>Compilação de programas (-j 2)</td>
<td>80 ± 2</td>
<td>80 ± 2</td>
</tr>
</tbody>
</table>
<p>Os guias usados foram o vídeo abaixo e o <a href="http://www.ifixit.com/Guide/Repair/Installing-MacBook-Core-2-Duo-Fan/522/1">excelente guia do iFixit</a>.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube-nocookie.com/v/wf-ZsDwIBfo&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube-nocookie.com/v/wf-ZsDwIBfo&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>


<p>Textos Relacionados (gerado automaticamente):</p><ol><li><a href='http://blog.renatocunha.com/2009/10/resolvendo-a-instabilidade-do-macbook-parte-2/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook &#8211; parte 2'>Resolvendo a instabilidade do MacBook &#8211; parte 2</a></li>
<li><a href='http://blog.renatocunha.com/2009/10/macbook-kernel-panic/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook &#8211; parte 1'>Resolvendo a instabilidade do MacBook &#8211; parte 1</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=lOdtdmpmEAQ:3gxBUxLuFGI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=lOdtdmpmEAQ:3gxBUxLuFGI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=lOdtdmpmEAQ:3gxBUxLuFGI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=lOdtdmpmEAQ:3gxBUxLuFGI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=lOdtdmpmEAQ:3gxBUxLuFGI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=lOdtdmpmEAQ:3gxBUxLuFGI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=lOdtdmpmEAQ:3gxBUxLuFGI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=lOdtdmpmEAQ:3gxBUxLuFGI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=lOdtdmpmEAQ:3gxBUxLuFGI:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/lOdtdmpmEAQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2009/12/macbook-cleanin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2009/12/macbook-cleanin/</feedburner:origLink></item>
		<item>
		<title>Resolvendo a instabilidade do MacBook – parte 2</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/OoBBQRJmZnw/</link>
		<comments>http://blog.renatocunha.com/2009/10/resolvendo-a-instabilidade-do-macbook-parte-2/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 20:54:28 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[kernel panic]]></category>
		<category><![CDATA[mac os]]></category>
		<category><![CDATA[macbook]]></category>
		<category><![CDATA[speedstep]]></category>
		<category><![CDATA[superaquecimento]]></category>

		<guid isPermaLink="false">http://valedotrovao.com/?p=76</guid>
		<description><![CDATA[<p>Resolvi reverter as mudanças de meu <a href="http://valedotrovao.com/2009/10/macbook-kernel-panic/">post anterior</a> e fazer um <a href="http://support.apple.com/kb/HT1411">reset nos <abbr title="System Management Controller">SMC</abbr></a>, <a href="http://support.apple.com/kb/HT1379"><abbr title= "Parameter RAM">PRAM</abbr> e <abbr title="Non-Volatile RAM">NVRAM</abbr></a>&#8230;</p>
<p>Para minha surpresa, a ventoinha passou a girar menos, o MacBook ficou mais fresco que com o hack anterior e, de quebra, parece que os kernel panics sumiram de vez. &#8230;</p>


Textos Relacionados (gerado automaticamente):<ol><li><a href='http://blog.renatocunha.com/2009/10/macbook-kernel-panic/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook &#8211; parte 1'>Resolvendo a instabilidade do MacBook &#8211; parte 1</a></li>
<li><a href='http://blog.renatocunha.com/2009/12/macbook-cleanin/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook – final'>Resolvendo a instabilidade do MacBook – final</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Resolvi reverter as mudanças de meu <a href="http://valedotrovao.com/2009/10/macbook-kernel-panic/">post anterior</a> e fazer um <a href="http://support.apple.com/kb/HT1411">reset nos <abbr title="System Management Controller">SMC</abbr></a>, <a href="http://support.apple.com/kb/HT1379"><abbr title= "Parameter RAM">PRAM</abbr> e <abbr title="Non-Volatile RAM">NVRAM</abbr></a>&#8230;</p>
<p>Para minha surpresa, a ventoinha passou a girar menos, o MacBook ficou mais fresco que com o hack anterior e, de quebra, parece que os kernel panics sumiram de vez.</p>
<p>Então fica a dica: Não adianta fazer o reset dessas coisas todas se o firmware está protegido por senha&#8230;<img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/thinking.png' alt='Thinking' title='Thinking' class='tse-smiley' /> <sup class='footnote'>[<a href='#fn-365-1' id='fnref-365-1'>1</a>]</sup>
<div class='footnotes'>
<div class='footnotedivider'></div>
<h3>Notas</h3>
<ol>
<li id='fn-365-1'>Agora que eu parei pra pensar nisso, é óbvio. Mas bem que o MacBook podia <strong>PEDIR A SENHA</strong> ao invés de simplesmente ignorar os comandos. <span class='footnotereverse'><a href='#fnref-365-1'>&#8617;</a></span></li>
</ol>
</div>


<p>Textos Relacionados (gerado automaticamente):</p><ol><li><a href='http://blog.renatocunha.com/2009/10/macbook-kernel-panic/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook &#8211; parte 1'>Resolvendo a instabilidade do MacBook &#8211; parte 1</a></li>
<li><a href='http://blog.renatocunha.com/2009/12/macbook-cleanin/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook – final'>Resolvendo a instabilidade do MacBook – final</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=OoBBQRJmZnw:i-mHO-gtZnM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OoBBQRJmZnw:i-mHO-gtZnM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OoBBQRJmZnw:i-mHO-gtZnM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=OoBBQRJmZnw:i-mHO-gtZnM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OoBBQRJmZnw:i-mHO-gtZnM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=OoBBQRJmZnw:i-mHO-gtZnM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OoBBQRJmZnw:i-mHO-gtZnM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=OoBBQRJmZnw:i-mHO-gtZnM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=OoBBQRJmZnw:i-mHO-gtZnM:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/OoBBQRJmZnw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2009/10/resolvendo-a-instabilidade-do-macbook-parte-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2009/10/resolvendo-a-instabilidade-do-macbook-parte-2/</feedburner:origLink></item>
		<item>
		<title>Resolvendo a instabilidade do MacBook – parte 1</title>
		<link>http://feedproxy.google.com/~r/trovao/~3/MpC8eEZAzKA/</link>
		<comments>http://blog.renatocunha.com/2009/10/macbook-kernel-panic/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 13:40:31 +0000</pubDate>
		<dc:creator>Renato Cunha</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[kernel panic]]></category>
		<category><![CDATA[mac os]]></category>
		<category><![CDATA[macbook]]></category>
		<category><![CDATA[speedstep]]></category>
		<category><![CDATA[superaquecimento]]></category>

		<guid isPermaLink="false">http://valedotrovao.com/?p=47</guid>
		<description><![CDATA[<p>Som travando, superaquecimento, <abbr title="Um kernel panic é uma ação (de 'travamento') realizada pelo sistema operacional quando ele detecta um erro interno do qual não pode ser recuperar de maneira segura">kernel panics</abbr>&#8230; Meu <a class="highslide img_11" href="http://blog.renatocunha.com/wp-content/uploads/2009/10/macbook.jpg" onclick="return hs.expand(this)">MacBook</a> tinha um problema<sup class='footnote'>[<a href='#fn-364-1' id='fnref-364-1'>1</a>]</sup>: ele estava mais instável que um computador poderia ser. A prova disso &#8230;</p>


Textos Relacionados (gerado automaticamente):<ol><li><a href='http://blog.renatocunha.com/2009/10/resolvendo-a-instabilidade-do-macbook-parte-2/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook &#8211; parte 2'>Resolvendo a instabilidade do MacBook &#8211; parte 2</a></li>
<li><a href='http://blog.renatocunha.com/2009/12/macbook-cleanin/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook – final'>Resolvendo a instabilidade do MacBook – final</a></li>
<li><a href='http://blog.renatocunha.com/2006/10/a-criacao-de-smaug-o-nascimento-de-uma-lenda-primeira-parte/' rel='bookmark' title='Permanent Link: A Criação de Smaug: O nascimento de uma lenda (Primeira Parte)'>A Criação de Smaug: O nascimento de uma lenda (Primeira Parte)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Som travando, superaquecimento, <abbr title="Um kernel panic é uma ação (de 'travamento') realizada pelo sistema operacional quando ele detecta um erro interno do qual não pode ser recuperar de maneira segura">kernel panics</abbr>&#8230; Meu <a class="highslide img_15" href="http://blog.renatocunha.com/wp-content/uploads/2009/10/macbook.jpg" onclick="return hs.expand(this)">MacBook</a> tinha um problema<sup class='footnote'>[<a href='#fn-364-1' id='fnref-364-1'>1</a>]</sup>: ele estava mais instável que um computador poderia ser. A prova disso é que o Mac OS X estava me presenteando com mais kernel panics do que eu gostaria (exemplo exibido na figura abaixo). Verdade que eles são os kernel panics mais bonitos que já vi, mas incomodam. <span id="more-364"></span></p>
<div id="attachment_49" class="wp-caption aligncenter" style="width: 310px"><a class="highslide img_16" href="http://blog.renatocunha.com/wp-content/uploads/2009/10/106227_3.jpg" onclick="return hs.expand(this)"><img src="http://valedotrovao.com/wordpress/wp-content/uploads/2009/10/106227_3-300x162.jpg" alt="Kernel panic do Mac OS X: 'You need to restart your computer. Hold down the Power button for several seconds or press the Restart button'" title="Kernel panic do Mac OS X: 'You need to restart your computer. Hold down the Power button for several seconds or press the Restart button'" width="300" height="162" class="size-medium wp-image-49" /></a><p class="wp-caption-text">Kernel panic do Mac OS X</p></div>
<p><strong>AVISO</strong>: Só siga os passos aqui descritos se você souber o que está fazendo. Não me responsabilizo por nada que você fizer. Além disso, parece que o <a href="http://valedotrovao.com/2009/10/resolvendo-a-instabilidade-do-macbook-parte-2/">post imediatamente posterior</a> a este apresenta uma solução mais eficiente que a aqui descrita.</p>
<p>(Se você não quiser ler a historinha, pode <a href="#solution">ir direto para a solução</a>)</p>
<p>Fiquei invocado com a instabilidade e já pensei no pior: &#8220;Meu hardware só pode ter ido pro espaço. Vou fazer um teste de memória<sup class='footnote'>[<a href='#fn-364-2' id='fnref-364-2'>2</a>]</sup>!&#8221; Rodei o <a href="http://www.memtest.org/">memtest</a> e o teste deu positivo: um dos pentes tinha ido pro espaço. Já pensando no pior, pesquisei preços, mas antes de proceder para a troca dos pentes, limpei as memórias e rodei o memtest novamente. Dessa vez, as memórias passaram no teste! \o/</p>
<p>Voltei a usar o computador e ele até pareceu mais estável&#8230; Um pouco antes de outro kernel panic me visitar!  <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/moneymouth.png' alt='Money Mouth' title='Money Mouth' class='tse-smiley' /> Rodei o memtest novamente, estava tudo nos conformes e comecei a desconfiar que havia algum problema crítico no hardware do meu MacBook<sup class='footnote'>[<a href='#fn-364-3' id='fnref-364-3'>3</a>]</sup>. No entanto, no Linux, nunca tive kernel panics gratuitos. Os que aconteceram sempre foram por minha causa. Logo, não parecia que o hardware estava tão ferrado assim.</p>
<p>Como o problema se manifestava mais frequentemente quando eu assistia vídeos no YouTube, resolvi culpar o driver da placa de vídeo e/ou o Adobe Flash<sup class='footnote'>[<a href='#fn-364-4' id='fnref-364-4'>4</a>]</sup>. Cheguei a manipular o driver da placa de vídeo, o que me obrigou a reinstalar o Mac OS X. A parte boa foi que pude comprovar que, mesmo numa instalação nova, o problema persistia (e essa é a parte ruim).</p>
<p>Enfim, coloquei a cabeça para funcionar e percebi que, sempre que os problemas apareciam, a <strong>temperatura do processador</strong> estava próxima de oitenta e poucos graus e um dos sintomas de que havia possibilidade de kernel panic é que o <strong><abbr title="Servidor de som do Mac OS X">coreaudiod</abbr> ficava malucão e o som começa a falhar</strong>. Logo, não podia descartar a possibilidade de superaquecimento.</p>
<p>Qualquer Sistema Operacional que dê controle ao usuário permite que ele mude a frequência do processador com alguns poucos cliques (ou comandos). O Mac OS X, não. Pelo menos, não de maneira fácil. Então, resolvi atacar a velocidade do cooler e deixá-lo girando o máximo possível. Instalei o <a href="http://www.eidac.de/?p=134">smcFanControl</a> e o <a href="http://www.lobotomo.com/products/FanControl/">FanControl.prefpane</a> sem sucesso. Os problemas continuavam. Até que eu resolvi apelar.</p>
<p><a name="solution">Depois</a> de muito navegar, descobri que um pessoal havia implementado um driver para controle do <abbr title="Tecnologia de mudança de frequência de processadores">SpeedStep</abbr> e que esse driver permitia definir a frequência de operação do processador. No entanto, as <a href="http://code.google.com/p/xnu-speedstep/wiki/Installation">instruções do site</a> não são suficientes para colocá-lo para funcionar. Antes de mais nada, baixei o driver<sup class='footnote'>[<a href='#fn-364-5' id='fnref-364-5'>5</a>]</sup> para minha pasta de Downloads e os comandos abaixo a usarão como referência:</p>
<pre><code>cd ~/Downloads
unzip IntelEnhancedSpeedStep_1.4.9.zip
sudo chown -R root:wheel ~/Downloads/IntelEnhancedSpeedStep.kext
sudo chmod -R 755 ~/Downloads/IntelEnhancedSpeedStep.kext
</code></pre>
<p>Agora, é importante saber se esse negócio vai funcionar no computador, então, ao invés de já copiá-lo para o diretório de drivers e correr o risco de ficar com um sistema que não funciona, é melhor carregar o driver e testá-lo manualmente. Se o sistema travar, pode esquecer&#8230;</p>
<pre><code>sudo kextload ~/Downloads/IntelEnhancedSpeedStep.kext</code></pre>
<p>Ainda funciona? Ótimo! Então podemos deixar o sistema carregá-lo automaticamente na inicialização com os comandos</p>
<pre><code>mv ~/Downloads/IntelEnhancedSpeedStep.kext /System/Library/Extensions
touch /System/Library/Extensions</code></pre>
<p>Perfeito, aqui terminariam as instruções padrão. Só que o Mac OS X possui seu próprio seletor de frequência do processador e, ao menos em meu MacBook, ele interfere com o funcionamento do Intel Enhanced SpeedStep. A solução que encontrei foi desabilitar o AppleIntelCPUPowerManagement, driver padrão do Mac OS X para gerência de energia do processador. Para desabilitá-lo, basta tirá-lo do diretório /System/Library/Extensions e deixá-lo em algum lugar seguro, para backup. <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/wink.png' alt='Wink' title='Wink' class='tse-smiley' /></p>
<p>Perfeito. Após um reboot, o driver deve estar carregado e pode ser controlado (sugiro a leitura da <a href="http://code.google.com/p/xnu-speedstep/wiki/TestingTheKext">página com instruções de como testar o driver</a>) pelo sysctl.</p>
<p>O Intel Enhanced SpeedStep, por padrão, vai funcionar de forma parecida com a do driver da Apple, mas o que eu quero é que o computador fique o menos quente possível. Por isso, meu objetivo é fixar a frequência do processador na menor possível. Há várias formas de fazer isso, escolhi duas: A suave e a agressiva. A suave define que a frequência só deve ser aumentada quando a carga no processador superar 95% (o argumento passado para o kern.cputhrottle_targetload é a porcentagem mínima para variação. 95% é o máximo suportado). Isso já ajuda a deixar o computador relativamente fresco:</p>
<pre><code>sudo sysctl -w  kern.cputhrottle_targetload=95</code></pre>
<p>A agressiva desabilita totalmente a mudança automática da frequência e, portanto, a única forma de mudá-la é manual. Essa foi a alternativa que escolhi:</p>
<pre><code>sudo sysctl -w kern.cputhrottle_auto=0 # desabilita a mudanca automatica de frequencia
sudo sysctl -w kern.cputhrottle_curfreq=1000 # velocidade minima do meu Core2Duo
</code></pre>
<p>Infelizmente, o IntelEnhancedSpeedStep parece não salvar as opções entre reboots e, por isso, criei uma entrada para o launchd, com o <a href="https://sourceforge.net/projects/lingon/files/">Lingon</a>, que roda esses comandos na hora do boot (exemplo na figura abaixo).</p>
<div id="attachment_62" class="wp-caption aligncenter" style="width: 310px"><a class="highslide img_17" href="http://blog.renatocunha.com/wp-content/uploads/2009/10/lingon.png" onclick="return hs.expand(this)"><img src="http://valedotrovao.com/wordpress/wp-content/uploads/2009/10/lingon-300x280.png" alt="Configuração do Lingon para criação da entrada do SpeedStep" title="SpeedStep no Lingon" width="300" height="280" class="size-medium wp-image-62" /></a><p class="wp-caption-text">Configuração do Lingon para criação da entrada do SpeedStep</p></div>
<p>Depois desse trabalho todo, coloquei o macports para compilar alguns pacotes e fui assistir vídeos no YouTube e não tive nenhum problema. Para verificação, foi só aumentar a frequência do processador que voltei a ter problemas, confirmando minha suspeita de superaquecimento.</p>
<p>Pronto. Problema parcialmente resolvido. Ainda preciso criar coragem para abrir o MacBook para limpar seu interior e, com sorte, melhorar a dissipação do calor. Mas, ao menos, já me livrei dos kernel panics.
<div class='footnotes'>
<div class='footnotedivider'></div>
<h3>Notas</h3>
<ol>
<li id='fn-364-1'>Na verdade, o problema dele é me ter como dono. Quem me conhece sabe que meus equipamentos são usados até o limite <span class='footnotereverse'><a href='#fnref-364-1'>&#8617;</a></span></li>
<li id='fn-364-2'>Quando resolvi testar o hardware, aprendi que Macs com senha no firmware não suportam boot no software de diagnóstico de jeito nenhum.  <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/frown.png' alt='Frown' title='Frown' class='tse-smiley' />  <span class='footnotereverse'><a href='#fnref-364-2'>&#8617;</a></span></li>
<li id='fn-364-3'>Não que eu estivesse errado. Há, mas não é tão preocupante quanto antes <span class='footnotereverse'><a href='#fnref-364-3'>&#8617;</a></span></li>
<li id='fn-364-4'>Que é um grande pedaço de cocô.  <img src='http://blog.renatocunha.com/wp-content/plugins/tango-smileys-extended/tango/poop.png' alt='Poop' title='Poop' class='tse-smiley' /> <span class='footnotereverse'><a href='#fnref-364-4'>&#8617;</a></span></li>
<li id='fn-364-5'>É possível baixar o código-fonte, caso você queira compilá-lo. Veja na <a href="http://code.google.com/p/xnu-speedstep/wiki/HowToGetTheSource">página dos desenvolvedores</a>. <span class='footnotereverse'><a href='#fnref-364-5'>&#8617;</a></span></li>
</ol>
</div>


<p>Textos Relacionados (gerado automaticamente):</p><ol><li><a href='http://blog.renatocunha.com/2009/10/resolvendo-a-instabilidade-do-macbook-parte-2/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook &#8211; parte 2'>Resolvendo a instabilidade do MacBook &#8211; parte 2</a></li>
<li><a href='http://blog.renatocunha.com/2009/12/macbook-cleanin/' rel='bookmark' title='Permanent Link: Resolvendo a instabilidade do MacBook – final'>Resolvendo a instabilidade do MacBook – final</a></li>
<li><a href='http://blog.renatocunha.com/2006/10/a-criacao-de-smaug-o-nascimento-de-uma-lenda-primeira-parte/' rel='bookmark' title='Permanent Link: A Criação de Smaug: O nascimento de uma lenda (Primeira Parte)'>A Criação de Smaug: O nascimento de uma lenda (Primeira Parte)</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/trovao?a=MpC8eEZAzKA:WTHLoEb66zo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/trovao?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=MpC8eEZAzKA:WTHLoEb66zo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/trovao?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=MpC8eEZAzKA:WTHLoEb66zo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/trovao?i=MpC8eEZAzKA:WTHLoEb66zo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=MpC8eEZAzKA:WTHLoEb66zo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/trovao?i=MpC8eEZAzKA:WTHLoEb66zo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=MpC8eEZAzKA:WTHLoEb66zo:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/trovao?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/trovao?a=MpC8eEZAzKA:WTHLoEb66zo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/trovao?i=MpC8eEZAzKA:WTHLoEb66zo:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/trovao/~4/MpC8eEZAzKA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.renatocunha.com/2009/10/macbook-kernel-panic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.renatocunha.com/2009/10/macbook-kernel-panic/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 4.174 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-09-07 22:12:26 --><!-- Compression = gzip -->
