<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Leandro A. F. Pereira &#187; geek</title>
	<atom:link href="http://labs.hardinfo.org/mindcrisis/category/geek/feed/" rel="self" type="application/rss+xml" />
	<link>http://labs.hardinfo.org/mindcrisis</link>
	<description>geek em treinamento</description>
	<lastBuildDate>Sat, 01 Aug 2009 17:10:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Help Viewer</title>
		<link>http://labs.hardinfo.org/mindcrisis/2009/08/01/help-viewer/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2009/08/01/help-viewer/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 17:07:53 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=373</guid>
		<description><![CDATA[Uma das funcionalidades que os usuários do HardInfo sempre pedem é a documentação online. Nem sempre é possível abrir um browser e mostrar a documentação, mas é o que está sendo feito hoje. Existem várias soluções para este problema, mas eu preferi fazer como frequentemente faço quando não estou satisfeito com as soluções que encontro: [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das funcionalidades que os usuários do HardInfo sempre pedem é a documentação <em>online</em>. Nem sempre é possível abrir um <em>browser</em> e mostrar a documentação, mas é o que está sendo feito hoje. Existem várias soluções para este problema, mas eu preferi fazer como frequentemente faço quando não estou satisfeito com as <a href="http://live.gnome.org/Yelp">soluções que encontro</a>: reinventando a roda.</p>
<p style="text-align: center;"><img class="aligncenter" title="Help Viewer" src="http://labs.hardinfo.org/help-viewer.png" alt="" width="508" height="426" /></p>
<p>Com pequenas alterações no <em>egg-markdown</em> (<a href="git://git.gnome.org/gnome-packagekit">encontrado nos fontes</a> do <a href="http://www.packagekit.org/">GNOME PackageKit</a>), e uma versão estendida do <em>GtkTextView</em> que suporta <em>hyperlinks</em>, comecei a fazer um leitor de documentação leve, com o intuito de ser incluso em aplicações GTK+. Existem alguns problemas a serem resolvidos, entretanto:</p>
<ul>
<li>Inclusão de imagens;</li>
<li>Suporte à internacionalização;</li>
<li>Encontrar uma maneira eficiente de armazenar um arquivo de ajuda;</li>
<li>Índice para busca textual (a princípio, somente para cabeçalhos nível 1 e 2).</li>
</ul>
<p>Resolver o primeiro vai dar um bocado de trabalho, pois estender o <em>markup</em> do Pango é <strong>muito</strong> chato. Os <em>links</em> são implementados de uma forma meio <em>hackish</em> (usando atributos geralmente não usados do tag<em> &lt;span&gt;</em>) e eu não queria ter que implementar imagens dessa forma também.</p>
<p>Para os curiosos e interessados em ajudar a terminar a implementação, o código está disponível no <a href="http://github.com/lpereira/help-viewer">github</a>. <em>Forks</em> e <em>pull requests</em> são aceitos.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2009/08/01/help-viewer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HardInfo 0.5.1</title>
		<link>http://labs.hardinfo.org/mindcrisis/2009/04/20/hardinfo-051/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2009/04/20/hardinfo-051/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 20:28:15 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=367</guid>
		<description><![CDATA[Esqueci de avisar aqui, mas no dia 6 de Abril eu lancei a versão 0.5.1 do HardInfo.
Demorei tanto para lançar esta versão que, ao invés de numerá-la 0.4.3, resolvi numerá-la de 0.5. As novidades já anunciadas estão obviamente inclusas, mas existem algumas outras:

Adição de novos benchmarks (Transformada Rápida de Fourier, N-Rainhas e Junção dos testes [...]]]></description>
			<content:encoded><![CDATA[<p>Esqueci de avisar aqui, mas no dia 6 de Abril eu lancei a versão 0.5.1 do HardInfo.</p>
<p>Demorei tanto para lançar esta versão que, ao invés de numerá-la 0.4.3, resolvi numerá-la de 0.5. As novidades <a href="#mce_temp_url#">já anunciadas</a> estão obviamente inclusas, mas existem algumas outras:</p>
<ul>
<li>Adição de novos benchmarks (Transformada Rápida de Fourier, N-Rainhas e Junção dos testes de cálculo de MD5 e SHA-1 em um único benchmark);</li>
<li>Suporte para UPS da APC (através do apcupsd);</li>
<li>Exibe informações sobre cada cache do processador;</li>
<li>Porte para libsoup 2.4;</li>
<li>Atualização da lista de fabricantes via rede;</li>
<li>Correções de defeitos e vazamentos de memória.</li>
</ul>
<p>Como sempre, todo o código fonte pode ser obtido no <a href="http://www.hardinfo.org">site</a> ou diretamente do <a href="https://github.com/lpereira/hardinfo/tree">GitHub</a>. Algumas distribuições já empacotaram esta versão (procure no gerenciador de pacote delas). Infelizmente, não consegui lançar esta versão a tempo dela aparecer no Ubuntu 9.04; mas pacotes prontos são distribuídos no <a href="http://www.getdeb.net/app/Hardinfo">GetDeb</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2009/04/20/hardinfo-051/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HardInfo 0.4.3 (beta)</title>
		<link>http://labs.hardinfo.org/mindcrisis/2008/12/30/hardinfo-043-beta/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2008/12/30/hardinfo-043-beta/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 17:11:16 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=365</guid>
		<description><![CDATA[Fiz o upload do AutoPackage do beta do HardInfo 0.4.3. Esta versão inclui algumas novidades:

Benchmarks com suporte a processadores multicore
Suporte à interfaces de rede sem fio (mostra coisas como SSID, potência de transmissão, etc)
Suporte à DMI (mostra o fabricante da placa mãe, etc)
Exibição da alocação de recursos de I/O (portas de I/O, memória e DMA)
Suporte [...]]]></description>
			<content:encoded><![CDATA[<p>Fiz o upload do AutoPackage do beta do HardInfo 0.4.3. Esta versão inclui algumas novidades:</p>
<ul>
<li>Benchmarks com suporte a processadores multicore</li>
<li>Suporte à interfaces de rede sem fio (mostra coisas como SSID, potência de transmissão, etc)</li>
<li>Suporte à DMI (mostra o fabricante da placa mãe, etc)</li>
<li>Exibição da alocação de recursos de I/O (portas de I/O, memória e DMA)</li>
<li>Suporte à nova interface de USB do kernel 2.6</li>
<li>Polimento da interface gráfica</li>
<li>Melhorias na estabilidade, consumo de memória, etc</li>
</ul>
<p><a href="http://labs.hardinfo.org/beta/">Está disponível aqui</a>, por enquanto apenas para x86. Agradeço quem puder testar e comentar.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2008/12/30/hardinfo-043-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Laço &#8220;for&#8221; paralelo em C</title>
		<link>http://labs.hardinfo.org/mindcrisis/2008/11/01/laco-for-paralelo-em-c/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2008/11/01/laco-for-paralelo-em-c/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 15:06:43 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=361</guid>
		<description><![CDATA[A OpenMP é fantástica: poderosa, fácil de usar e há suporte para vários compiladores. Entretanto, nem sempre é possível (ou desejável) usá-la; eu não gosto de aumentar o número de dependências dos meus programas, portanto tento encontrar soluções &#8220;feitas em casa&#8221; quando possível. Reinventar a roda também é uma boa maneira para aprender como as [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://www.openmp.org">OpenMP</a> é fantástica: poderosa, fácil de usar e há suporte para vários compiladores. Entretanto, nem sempre é possível (ou desejável) usá-la; eu não gosto de aumentar o número de dependências dos meus programas, portanto tento encontrar soluções &#8220;feitas em casa&#8221; quando possível. Reinventar a roda também é uma boa maneira para aprender como as coisas funcionam.</p>
<p>Uma das funcionalidades que os usuários do HardInfo mais pedem é a realização de <em>benchmarks</em> levando em consideração máquinas multiprocessadas. Somente depois de conhecer o modelo <a href="https://computing.llnl.gov/tutorials/openMP/#ProgrammingModel"><em>fork-join</em></a> que a OpenMP usa, que eu consegui implementar isso no HardInfo. Para quem não conhece esse modelo, é bem simples: em pontos paralelizáveis de seu código, <em>n </em>linhas de execução são criadas (aqui, <em>n</em> equivale ao número de núcleos) &#8212; e a execução linear do programa só retoma após um ponto de encontro. A criação das <em>threads </em>é o &#8220;fork&#8221;, e o ponto de encontro é o &#8220;join&#8221;.</p>
<p>A OpenMP facilita a vida provendo alguns <em>#pragmas</em>: o compilador com suporte a ela, então, gera o código responsável pela criação das <em>threads</em> e pelo ponto de encontro. Um desses <em>pragmas</em> é o &#8220;<em>parallel for</em>&#8220;, que divide um laço ao estilo do <em>for</em> em <em>n</em> linhas distintas. Essa construção tem suas limitações &#8212; só deve ser usada em laços <em>vanilla</em>: aqueles que apenas contam de um número até outro (a linguagem C permite fazer praticamente qualquer coisa num <em>for</em> e isso não é suportado pela OpenMP).</p>
<p>Como os <em>benchmarks</em> do HardInfo são geralmente feitos dentro de um laço <em>for</em>, repetindo testes pequenos várias vezes e contando o tempo (o que causa alguns problemas de precisão, mas ainda não consegui encontrar maneira melhor), recriar essa construção do OpenMP foi a saída mais natural.</p>
<p>A recriação foi trivial: o modelo é simples e eu tenho como obter o número de núcleos tranquilamente (afinal, o HardInfo é um programa de informações de <em>hardware</em>). Como a implementação foi feita sem requerer suporte do compilador (apenas usando funções), há a necessidade da criação de uma função, e da substituição do laço por uma chamada de função.</p>
<p>Por exemplo, se houvesse o interesse em paralelizar o seguinte código:</p>
<p><code>for (i = 0; i &lt; 1000; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;vetor[i] = i * 3;<br />
}</code></p>
<p>Eu criaria uma função:</p>
<p><code>void preenche_vetor(guint start, guint end, gpointer data)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int *vetor = (int *)data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (i = start; i &lt; end; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vetor[i] = i * 3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></p>
<p>E substituiria o laço por uma chamada ao paralelizador de <em>for</em>:</p>
<p><code>parallel_for(preenche_vetor, 0, 1000, vetor);</code></p>
<p>A função <em>parallel_for</em> então determinaria o número de núcleos, criaria uma linha de execução para cada elas, e se encarregaria de esperar pelo término de todas elas. Como bônus, ela também retorna o tempo gasto desde a criação das <em>threads</em> até o término de todas elas &#8212; ignorados neste exemplo.</p>
<p>Paralelizei dois <em>benchmarks</em> no HardInfo: o de compressão/descompressão com a zlib, e o <em>ray tracer</em>. O ganho, em um Pentium Dual Core (E2160), foi da ordem de 1,86x mais rápido no caso da zlib, e 1,41x no caso do <em>ray tracer</em>.</p>
<p>O código está <a href="http://github.com/lpereira/hardinfo/tree/master/hardinfo2/benchmark.c">disponível no repositório git mestre do HardInfo</a>, disponível na minha conta do github.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2008/11/01/laco-for-paralelo-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>D945GCLF: Impressões</title>
		<link>http://labs.hardinfo.org/mindcrisis/2008/10/08/d945gclf-impressoes/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2008/10/08/d945gclf-impressoes/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 21:51:13 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=356</guid>
		<description><![CDATA[Depois de realmente testar a D945GCLF, posso falar sobre a placa. Usei esta placa como meu computador pessoal durante uma semana. Usei o Leopard como sistema operacional.
Obviamente que meu Macbook (com um Core 2 Duo de 2.16GHz) come com farinha o Atom de 1.6GHz. Mas a plaquinha se mostrou valente e, para tarefas básicas &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de realmente testar a D945GCLF, posso falar sobre a placa. Usei esta placa como meu computador pessoal durante uma semana. Usei o Leopard como sistema operacional.</p>
<p>Obviamente que meu Macbook (com um Core 2 Duo de 2.16GHz) come com farinha o Atom de 1.6GHz. Mas a plaquinha se mostrou valente e, para tarefas básicas &#8212; que, no meu caso, inclui não somente a internetada básica de todo dia, mas programação leve, edição de textos, &#8212; eu diria que é mais que o suficiente. O único porém, é que coisas como vídeos no YouTube (e outros sites de vídeo) dão uma certa engasgaada&#8230; mas video em Flash judia até mesmo o C2D, então é perfeitamente perdoável.</p>
<p>Por exemplo: do boot loader até o desktop do Leopard, são apenas 28 segundos. É fato que a instalação do sistema no meu Macbook é mais antiga, mas ela demora pelo menos o triplo disso. E os discos e o chipset das duas máquinas são equivalentes.</p>
<p>Enfim: quem quiser um Macintosh barato, é uma opção legal. Por US$79 (mesmo com o dólar disparado como está), é um excelente negócio. Mas quem quiser um computador secundário (como máquina de downloads, servidor de arquivos caseiro, ou simplesmente para as tarefas do dia-dia), que consome pouco e é muito silencioso, é uma opção tão boa quanto.</p>
<p>Eu gostei bastante da placa. Tanto que eu a vendi! Quando vi que a Intel tinha lançado a D945GCLF2, com o Atom 300 (dual core) e, principalmente, saída S-Video, precisei vender e comprar o modelo mais novo&#8230; eu estava querendo montar um HTPC já faz um tempo e essa placa (nova) veio bem a calhar.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2008/10/08/d945gclf-impressoes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>NIH &amp; SquirrelFish Extreme</title>
		<link>http://labs.hardinfo.org/mindcrisis/2008/09/19/nih-squirrelfish-extreme/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2008/09/19/nih-squirrelfish-extreme/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 18:18:08 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=352</guid>
		<description><![CDATA[O kov escreveu sobre o novo interpretador de JavaScript do WebKit, o SquirrelFish Extreme, e levanta a questão da razão do Google ter desenvolvido o V8 sem real necessidade (já que iriam usar o WebKit de qualquer maneira como motor de renderização de HTML).
Eu poderia dizer que, a princípio, é apenas mais um caso de [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://blog.kov.eti.br/?p=37">kov escreveu sobre o novo interpretador de JavaScript do WebKit</a>, o <a href="http://webkit.org/blog/214/introducing-squirrelfish-extreme/">SquirrelFish Extreme</a>, e levanta a questão da razão do Google ter desenvolvido o <a href="http://code.google.com/p/v8/">V8</a> sem real necessidade (já que iriam usar o WebKit de qualquer maneira como motor de renderização de HTML).</p>
<p>Eu poderia dizer que, a princípio, é apenas mais um caso de <a href="http://en.wikipedia.org/wiki/Not_Invented_Here">síndrome de NIH</a>.</p>
<p>Acho que o Google só não reinventou o WebKit pq um interpretador de JavaScript é mais fácil fazer. E o lançamento do compilador Java para o Android, IMHO, diz que o povo lá em Mountain View gosta de brincar com compiladores e interpretadores.</p>
<p>Para fazer um interpretador mais rápido que outro feito por especialistas, requer gente muito foda. E é isso que tem nos times do SF, V8 e <a href="http://www.mozilla.org/js/spidermonkey/">SM</a>: cara bão de código. Mesmo acreditando que concorrência seja uma boa idéia, se juntassem os esforços (afinal é tudo <em>free</em> &#8212; o problema de licenciamento é &#8220;resolvível&#8221; com boa vontade) e fizessem uma única implementação teríamos, provavelmente, algo muito legal por aí.</p>
<p>Mas a síndrome de NIH não deixa isso acontecer. <strong>Reinventar a roda é bom e às vezes necessário</strong>.</p>
<p>O interesse por linguagens dinâmicas está crescendo muito ultimamente. Acho que nenhuma empresa fazendo um novo interpretador de JavaScript esteja dando ponto sem nó: provavelmente estão usando isso como desculpa para desenvolvimento (ou o aprimoramento) de novas técnicas. E é sempre mais fácil trabalhar no seu próprio código que modificar o código dos outros &#8212; principalmente quando se está falando de uma reestruturação completa da sua arquitetura.</p>
<p>Eu não tenho acompanhado artigos sobre compilação/interpretação, mas o (antigo, confesso) material impresso que tenho acesso sobre compiladores fala principalmente sobre linguagens de tipagem estática. Isso, em minha opinião, é reforçado ainda mais pela característica acadêmica tanto do Google quanto da Apple.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2008/09/19/nih-squirrelfish-extreme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Removendo o PulseAudio do Ubuntu</title>
		<link>http://labs.hardinfo.org/mindcrisis/2008/09/17/removendo-o-pulseaudio-do-ubuntu/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2008/09/17/removendo-o-pulseaudio-do-ubuntu/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 15:38:37 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=348</guid>
		<description><![CDATA[A idéia do PulseAudio é muito boa. Pena que, pelo menos comigo, o negócio mais dá problema que ajuda. E eu não tenho mais paciência para ficar buscando soluções para coisas que deveriam funcionar por padrão.
Tentar remover o pacote &#8220;pulseaudio&#8221; no Ubuntu 8.04 produz um erro de dependência, já que o pacote &#8220;ubuntu-desktop&#8221; necessita dele. [...]]]></description>
			<content:encoded><![CDATA[<p>A idéia do PulseAudio é muito boa. Pena que, pelo menos comigo, o negócio mais dá problema que ajuda. E eu não tenho mais paciência para ficar buscando soluções para coisas que deveriam funcionar por padrão.</p>
<p>Tentar remover o pacote &#8220;pulseaudio&#8221; no Ubuntu 8.04 produz um erro de dependência, já que o pacote &#8220;ubuntu-desktop&#8221; necessita dele. Uma solução simples é usar o excelente utilitário &#8220;equivs&#8221; e criar um pacote falso que provê e substitui o pulseaudio, sem conter nenhum tipo de arquivo no pacote (<a href="http://labs.hardinfo.org/mindcrisis/wp-content/uploads/2008/09/pulseaudio-fake_10_all.deb">um pacote já construído pode ser encontrado aqui</a>).</p>
<p>Com esse pacote criado, é fácil remover o cara chato:</p>
<pre style="padding-left: 30px;">$ sudo dpkg -i pulseaudio-fake_1.0_all.deb
$ sudo dpkg --purge pulseaudio</pre>
<p>Pronto. Sem mais processos bloqueando indefinidamente pro causa do PulseAudio <img src='http://labs.hardinfo.org/mindcrisis/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2008/09/17/removendo-o-pulseaudio-do-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Incluindo blobs binários em um programa C</title>
		<link>http://labs.hardinfo.org/mindcrisis/2008/08/30/incluindo-blobs-binarios-em-um-programa-c/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2008/08/30/incluindo-blobs-binarios-em-um-programa-c/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 23:04:48 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=345</guid>
		<description><![CDATA[É comum fazer um programa em C que depende de arquivos externos. Um exemplo clássico pro povo que desenvolve com GTK+ são os arquivos do Glade ou do GtkBuilder (estes arquivos possuem uma descrição dos formulários em XML).
Isso causa um pouco de poluição no sistema de arquivos, e faz com que a execução do programa [...]]]></description>
			<content:encoded><![CDATA[<p>É comum fazer um programa em C que depende de arquivos externos. Um exemplo clássico pro povo que desenvolve com GTK+ são os arquivos do Glade ou do GtkBuilder (estes arquivos possuem uma descrição dos formulários em XML).</p>
<p>Isso causa um pouco de poluição no sistema de arquivos, e faz com que a execução do programa quando não instalado (principalmente quando se usa um ambiente de desenvolvimento onde não se tem acesso a usuário root) um bocado difícil. Existem alternativas &#8212; no HardInfo eu uso o binreloc (que permite guardar esse tipo de arquivo em locais diferentes dos hardcoded durante a compilação), parte da suíte do Autopackage &#8212; mas para alguns tipos de arquivos seria interessante que os dados estivessem dentro do próprio executável.</p>
<p>Alguns sistemas operacionais permitem a inclusão de uma seção de recursos. Provavelmente power users de Windows e MacOS já usaram programas de edição destes recursos inúmeras vezes: alterar ícones, telas e até mesmo tabelas de dispositivos de extensões do MacOS. Mas no Unix não existe uma maneira única para esse tipo de seção.</p>
<p>Lendo o Planet GNOME, vi <a href="http://www.burtonini.com/blog/computers/ld-blobs-2007-07-13-15-50">um post do Ross Burton</a> sobre o tema. Lá ele explica como fazer isso usando um truque com o <code>ld</code> (GNU Linker) e <code>objcopy</code> (utilitário do binutils) &#8212; e um leitor do blog dele mostra um truque mais legal ainda, usando o <code>as</code> (GNU Assembler). Baseado no post dele e nos comentários, eu fiz um script shell que gera tanto o arquivo objeto (funcionou em x86, x86-64 e sparc64) quanto um cabeçalho com a referência ao arquivo.</p>
<p>O cabeçalho possui uma definição do tipo <code>extern char nomearquivo_extensao[1000];</code>, onde 1000 é o tamanho do arquivo &#8212; o que ajuda um bocado em algumas situações (como no <code>glade_xml_new_from_buffer</code>).</p>
<p>Enfim, o script está disponível <a href='http://labs.hardinfo.org/mindcrisis/wp-content/uploads/2008/08/blob-to-object.sh'>aqui</a>.</p>
<p>Comentários? <img src='http://labs.hardinfo.org/mindcrisis/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2008/08/30/incluindo-blobs-binarios-em-um-programa-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>D945GCLF: Primeiras (frustradas) Impressões</title>
		<link>http://labs.hardinfo.org/mindcrisis/2008/08/29/d945gclf-primeiras-frustradas-impressoes/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2008/08/29/d945gclf-primeiras-frustradas-impressoes/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 10:59:56 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=341</guid>
		<description><![CDATA[Quando a Intel lançou o processador Atom, eu não fiquei tão interessado.
Mas as placas-mãe Mini ITX sempre chamaram a minha atenção: computadores com baixo consumo de energia, silenciosos e de pequeno porte são chamativos, mesmo. O problema é que essas placas sempre custaram muito mais caro que uma placa de desktop convencional. Aí entra a [...]]]></description>
			<content:encoded><![CDATA[<p>Quando a Intel lançou o processador Atom, eu não fiquei tão interessado.</p>
<p>Mas as placas-mãe Mini ITX sempre chamaram a minha atenção: computadores com baixo consumo de energia, silenciosos e de pequeno porte são chamativos, mesmo. O problema é que essas placas sempre custaram muito mais caro que uma placa de desktop convencional. Aí entra a Intel e lança uma placa, baseada no Atom, que custa US$80 &#8212; processador incluso.</p>
<p>Pois bem &#8212; comprei a D945GCLF no eBay. Chegou em menos de um mês, mas eu esqueci de comprar junto com a memória. Encomendo a memória e aguardo angustiadamente os 30 dias para que ela chegue. Chegou ontem &#8212; e, obviamente, já fui instalar algum sistema operacional para começar a usar a placa.</p>
<p>Escolhi o Mac OS X: a placa, segundo o wiki do projeto OSX86, é 100% compatível com o Leopard, e é basicamente a maneira mais barata de você ter um Hackintosh (importante para mim, já que meu Macbook está na assistência técnica). Por três tentativas, a instalação travava (e travava feio, de encher a tela de lixo). Logo desconfiei da memória: no Setup do BIOS alguma coisa já alertava, <a href="http://flickr.com/photos/acidx/2807645947/">afinal o sistema reconhecia o pente como tendo 17592186042368MB de RAM</a>, claramente detectado erroneamente (afinal o pente tem 2GB).</p>
<p><a href="http://www.flickr.com/photos/acidx/2807645947/" title="17592186042368MB de RAM! by lafp, on Flickr"><img src="http://farm4.static.flickr.com/3234/2807645947_e97c5f99d5.jpg" width="500" height="375" alt="17592186042368MB de RAM!" /></a></p>
<p>Meu CD com memtest86 estava emprestado, então<a href="http://www.pendrivelinux.com/2007/09/17/testing-your-system-for-usb-boot-compatibility/"> procurei uma versão que funcionasse a partir de um pendrive</a>. Dito e feito: nunca vi uma tela do memtest86 tão vermelha. E, além disso, depois do segundo teste, mais lixo na tela.</p>
<p>Enfim: memória incompatível. Testei em um Athlon 64 e funcionou perfeitamente sem nenhum erro, <a href="http://produto.mercadolivre.com.br/MLB-80114311-memoria-2gb-ddr2-667mhz-hynix-nova-_JM">portanto eu estou vendendo pelo mesmo preço que paguei lá fora (R$80)</a>, para que eu possa comprar outra memória compatível com minha placa.</p>
<p>De qualquer maneira, gostei bastante dessa placa: o preço é atraente e a performance (pelo menos o instalador do OS X carregou e pude ter uma noção do que o Atom &#8212; um processadorzinho de 64-bit com HyperThreading &#8212; é capaz com seus 4W de pico de potência). Mas só há uma maneira de continuar os meus testes: arrumar um pente de memória compatível&#8230; portanto ajudem-me, comprando o pente <img src='http://labs.hardinfo.org/mindcrisis/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2008/08/29/d945gclf-primeiras-frustradas-impressoes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cafepress não presta</title>
		<link>http://labs.hardinfo.org/mindcrisis/2008/08/24/cafepress-nao-presta/</link>
		<comments>http://labs.hardinfo.org/mindcrisis/2008/08/24/cafepress-nao-presta/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 09:51:57 +0000</pubDate>
		<dc:creator>acidx</dc:creator>
				<category><![CDATA[cafepress sucks]]></category>
		<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://labs.hardinfo.org/mindcrisis/?p=339</guid>
		<description><![CDATA[Fiz uma doação ao projeto Haiku recentemente, comprando uma camiseta na Cafepress. Qual não foi a minha surpresa (aliás, é uma loja bem grande e várias pessoas fazem uma graninha comprando coisas lá) que a camiseta, além de demorar muito para chegar, é da pior qualidade &#8212; a ponto de prefereir camiseta de propaganda política [...]]]></description>
			<content:encoded><![CDATA[<p>Fiz uma doação ao projeto Haiku recentemente, comprando uma camiseta na Cafepress. Qual não foi a minha surpresa (aliás, é uma loja bem grande e várias pessoas fazem uma graninha comprando coisas lá) que a camiseta, além de demorar muito para chegar, é da pior qualidade &#8212; a ponto de prefereir camiseta de propaganda política &#8212; sem falar na estampa, que parece que vai desbotar só de olhar torto para ela &#8212; a ponto de preferir camiseta de propaganda política.</p>
<p>O que me entristece é que o povo que realmente está fazendo um trabalho legal &#8212; os desenvolvedores do Haiku &#8212; vão receber uma mísera porcentagem do alto preço da camiseta. Eu poderia ter feito a doação integral para o time e não ter ficado com dor de cabeça por alguns instantes.</p>
<p>Enfim &#8212; se você pensar em comprar camisetas (ou qualquer outra coisa) na Cafepress, pense novamente. Não vale o que cobram. Até eu faço uma estampa melhor com papel transfer e impressora jato de tinta.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.hardinfo.org/mindcrisis/2008/08/24/cafepress-nao-presta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.234 seconds -->
