<?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>Bryan Garber&#039;s Blog</title>
	<atom:link href="http://bgarber.notapipe.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://bgarber.notapipe.org/blog</link>
	<description>Where nerds collide!</description>
	<lastBuildDate>Fri, 05 Apr 2013 16:13:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Hacking /proc &#8211; tempo de execução de um processo em C</title>
		<link>http://bgarber.notapipe.org/blog/2011/05/hacking-proc-tempo-de-execucao-de-um-processo-em-c/</link>
		<comments>http://bgarber.notapipe.org/blog/2011/05/hacking-proc-tempo-de-execucao-de-um-processo-em-c/#comments</comments>
		<pubDate>Mon, 23 May 2011 19:49:09 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=286</guid>
		<description><![CDATA[Recentemente precisei descobrir, usando C, o tempo de execução de um processo. Ao invés de tentar um simples system(&#8220;ps aux &#124; grep &#60;pid&#62;&#8221;), pensei em utilizar algo mais esperto: a árvore montada no /proc. O /proc mantém em sua estrutura de diretórios arquivos para cada processo sendo executado na máquina, tendo um diretório específico para [...]]]></description>
				<content:encoded><![CDATA[<p>Recentemente precisei descobrir, usando C, o tempo de execução de um processo. Ao invés de tentar um simples <em>system(&#8220;ps aux | grep &lt;pid&gt;&#8221;)</em>, pensei em utilizar algo mais esperto: a árvore montada no <em>/proc</em>. O <em>/proc</em> mantém em sua estrutura de diretórios arquivos para cada processo sendo executado na máquina, tendo um diretório específico para cada PID. Bom, não vou entrar em detalhes sobre como está organizado o <em>/proc</em> neste post, mas podemos encontrar uma boa referência <a title="The /proc filesystem" href="http://www.comptechdoc.org/os/linux/howlinuxworks/linux_hlproc.html" target="_blank">aqui</a>.</p>
<p>Como podemos ver na lista de arquivos dentro de <em>/proc/&lt;pid&gt;</em>, o diretório de cada PID possui um arquivo chamado <em>stat</em>. Uma das várias informações guardadas neste arquivo é o <em>starttime</em>. Então a primeira coisa que vamos fazer é abrir o stat do PID desejado no nosso programa:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">char</span> stat_file<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">80</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> pid<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> ac <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">2</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Error: one argument is needed!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
pid <span style="color: #339933;">=</span> <span style="color: #000066;">atoi</span><span style="color: #009900;">&#40;</span>av<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">snprintf</span><span style="color: #009900;">&#40;</span>stat_file<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>stat_file<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;/proc/%d/stat&quot;</span><span style="color: #339933;">,</span> pid<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
proc_time <span style="color: #339933;">=</span> <span style="color: #000066;">fopen</span><span style="color: #009900;">&#40;</span>stat_file<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>proc_time <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Some strange error occurred while opening the file!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Com o <em>stat</em> do processo aberto, podemos procurar a 22ª <em>string</em> deste arquivo, que refere-se ao campo <em>starttime</em> do processo.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;">freadln<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>line<span style="color: #339933;">,</span> proc_time<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">char</span> <span style="color: #339933;">*</span>jiff_from_boot_str <span style="color: #339933;">=</span> s_token<span style="color: #009900;">&#40;</span>line<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot; &quot;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">22</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">long</span> <span style="color: #993333;">int</span> jiff_from_boot <span style="color: #339933;">=</span> <span style="color: #000066;">atoi</span><span style="color: #009900;">&#40;</span>jiff_from_boot_str<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Onde as funções <em>freadln</em> e <em>s_token</em> são definidas como:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">size_t</span> freadln <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">**</span>line<span style="color: #339933;">,</span> FILE <span style="color: #339933;">*</span>stream<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">char</span> c<span style="color: #339933;">;</span>
    <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> counter <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>c<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> stream<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>c <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">feof</span><span style="color: #009900;">&#40;</span>stream<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        counter <span style="color: #339933;">+=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>line<span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">realloc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>line<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> counter <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>line<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>counter <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> c<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>c<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> stream<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    counter <span style="color: #339933;">+=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>line<span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">realloc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>line<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> counter <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>line<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>counter <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> counter <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">char</span><span style="color: #339933;">*</span> s_token <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #339933;">*</span> str<span style="color: #339933;">,</span> <span style="color: #993333;">char</span><span style="color: #339933;">*</span> sep<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> i<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>s <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> strdup<span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>ret <span style="color: #339933;">=</span> <span style="color: #000066;">strtok</span><span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span> sep<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    i<span style="color: #339933;">--;</span>
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        ret <span style="color: #339933;">=</span> <span style="color: #000066;">strtok</span><span style="color: #009900;">&#40;</span>NULL<span style="color: #339933;">,</span> sep<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        i<span style="color: #339933;">--;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>ret<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> NULL<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> ret<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>A primeira função serve para ler uma linha de um arquivo (não gosto de <em>sscanf</em> ou <em>fgets</em> <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) e a outra serve para ler <em>tokens</em> de uma <em>string</em> a partir de um delimitador sem alterar a <em>string</em> original.</p>
<p>Como podemos reparar, o campo <em>starttime</em> no arquivo <em>stat</em> não está em segundos. Está em <em>jiffies</em> (um tipo de <em>tick</em> de relógio do Linux). O valor de <em>jiffies</em> por segundo é configurado na compilação do <em>kernel</em>. Para obter este valor, temos que realizar a seguinte consulta:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">long</span> <span style="color: #993333;">int</span> jiffies_per_sec <span style="color: #339933;">=</span> sysconf<span style="color: #009900;">&#40;</span>_SC_CLK_TCK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Agora fica fácil descobrir quantos segundos tinha se passado desde o <em>boot</em> até o início do programa. Basta dividirmos jiff_from_boot por jiffies_per_sec! Mas como queremos o tempo de execução do programa, vamos esperar para adicionar na fórmula final. Como pode-se imaginar, iremos calcular o tempo de execução do programa obtendo o tempo em segundos desde o <em>boot</em> do <em>kernel</em> (<em>uptime</em>) e subtrair pelo segundo de início do programa em questão. Para isso, iremos consultar usando a estrutura <em>sysinfo</em>.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">struct</span> sysinfo sys_inf<span style="color: #339933;">;</span>
sysinfo<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>sys_inf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Pronto. Esta estrutura já possui um campo com o uptime em segundos, então basta resolver a diferença!</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">long</span> <span style="color: #993333;">int</span> proc_rtime <span style="color: #339933;">=</span> sys_inf.<span style="color: #202020;">uptime</span> <span style="color: #339933;">-</span> jiff_from_boot<span style="color: #339933;">/</span>jiffies_per_sec<span style="color: #339933;">;</span>
<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Process %d running time: %ld secs<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> pid<span style="color: #339933;">,</span> proc_rtime<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Bom, acho que é isso. Caso queiram dar uma olhada no meu arquivo C, ele está disponível <a href="http://bgarber.notapipe.org/blog/wp-content/uploads/2011/05/main.c">aqui</a>. Nele poderás ver os <em>includes</em> necessários para compilar o teu código-fonte.</p>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2011/05/hacking-proc-tempo-de-execucao-de-um-processo-em-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FreeBSD way of life &#8211; instalação e dicas</title>
		<link>http://bgarber.notapipe.org/blog/2011/01/freebsd-way-of-life-instalacao-e-dicas/</link>
		<comments>http://bgarber.notapipe.org/blog/2011/01/freebsd-way-of-life-instalacao-e-dicas/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 16:26:48 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[Sistemas Operacionais]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=209</guid>
		<description><![CDATA[GNU/Linux sempre foi um dos meus sistemas operacionais favoritos. A minha distro Linux de uso diário é o Debian. Eu gosto muito do &#8220;controle das coisas&#8221; que ele propicia, mas tenho altos e baixos com a visão estreita que a distro tem sobre Free Open Source. Eles levam o assunto muito a sério, como podemos [...]]]></description>
				<content:encoded><![CDATA[<p>GNU/Linux sempre foi um dos meus sistemas operacionais favoritos. A minha distro Linux de uso diário é o Debian. Eu gosto muito do &#8220;controle das coisas&#8221; que ele propicia, mas tenho altos e baixos com a visão estreita que a distro tem sobre Free Open Source. Eles levam o assunto muito a sério, como podemos ver nas notícias que eles, finalmente, <a href="http://www.debian-news.net/2011/01/23/debian-frees-up-the-kernel-again/">&#8220;libertaram&#8221; todo o kernel Linux</a>. Bem, esse post não veio para falar de Linux. Conhecendo Linux, é inevitável não conhecermos o Unix, o precursor disso tudo. O Unix é o &#8220;pai-de-todos&#8221;. A partir dele, conhecemos o BSD (SO criado pelo pessoal da UC Berkeley &#8211; Universidade da Califórnia), o Minix (criado por Andrew Tanenbaum, com propósitos educacionais), o Linux (criado por Linus Torvalds, a partir de seus interesses no Minix) e ainda existem vários outros que foram criados em cima da ideia do Unix. Vejam só, o Mac OS sempre foi baseado no Unix, mas passou a ser baseado no BSD a partir da sua versão X. Então podemos dizer que o Unix ainda é bastante presente nas nossas vidas (ainda não tanto entre os usuários comuns, mas vem ganhando espaço a cada dia). A partir do BSD, que acabou tornando-se um sistema operacional bastante restrito devido à várias fabricantes o terem adotado na época, foi criado o FreeBSD, que procurou a liberdade para o BSD, e o mantém livre até o momento. E é nesse cara que vou me focar a partir daqui.</p>
<h2>Instalação Básica</h2>
<p>A versão atual do FreeBSD é a 8.1 e pode ser baixada <a title="aqui" href="http://www.freebsd.org/where.html">aqui</a>. Eu preferi baixar a versão <em>bootonly</em>. Antes de continuarmos, recomendo que experimentem a instalação em uma máquina virtual, para evitar dores de cabeça mais tarde. Se gostares do sistema, poderás instalar na tua máquina real, seguindo praticamente os mesmos passos (e cuidando para não sobrescrever os SO&#8217;s existentes), daí já com a experiência de ter instalado uma vez. Aviso que FreeBSD definitivamente não é um SO recomendado para iniciantes, então muita cautela. Também coloco aqui que o FreeBSD é um sistema demorado e difícil de configurar. Tu não terás um sistema rodando antes de perder uns 2 dias (na melhor das hipóteses) configurando e instalando, enfrentar o grande dragão Smaug em sua Montanha Solitária, derrotar Saruman e seu terrível exército de uruk-hais abomináveis e derrubar o grande Olho Vermelho de Sauron, o Senhor do Escuro, em sua Torre Escura Barad-dûr, e seus terríveis Espectros do Anel, não necessariamente nesta ordem.</p>
<p>Bem, voltando ao que interessa:</p>
<ol>
<li>Uma vez iniciado o disco, ele irá inicializar o sistema básico, irá perguntar o país e irá cair em um menu com várias opções: um manual de referência e as opções de instalação. Selecionaremos a opção de instalação &#8220;Standard&#8221;.</li>
<li>Os próximos três passos serão de reserva de espaço em disco, seleção do <em>boot manager</em> e configuração das partições do FreeBSD. Como eu estou utilizando uma VM, simplesmente pedi para usar todo o disco, usar o <em>boot manager</em> padrão (Standard) e usar a configuração automática para as partições do FreeBSD. Cuide para não sobrescrever teus SO&#8217;s já existentes, caso já esteja instalando na tua máquina. O FreeBSD reconhecerá automaticamente tua tabela de partições no <em>fdisk</em>.</li>
<li>Após configuradas as partições, ele pedirá para escolher a distribuição a ser instalada. Eu recomendo selecionar (e marcar pressionando a tecla &#8220;Espaço&#8221;) a distribuição &#8220;User&#8221; e selecionar os manuais em inglês no menu seguinte. Quando selecionado, aperte &#8220;Tab&#8221; para selecionar o botão &#8220;Ok&#8221; e pressione &#8220;Enter&#8221;.</li>
<li>A próxima janela irá perguntar se queres instalar as coleções do <em>ports</em>. O <em>ports</em> é uma árvore de direrórios para instalar novos softwares, como explicarei mais tarde. Selecione &#8220;Yes&#8221; nesta etapa, pois o <em>ports</em> será necessário mais tarde.</li>
<li>A janela de seleções de distribuições será apresentada novamente, pressione &#8220;Tab&#8221; para selecionar o &#8220;Ok&#8221; e aperte &#8220;Enter&#8221;, para irmos à próxima etapa da instalação.</li>
<li>A janela que será apresentada pedirá para selecionarmos a mídia de instalação do sistema. Como baixamos a versão <em>bootonly</em>, vamos selecionar via FTP. <strong>Atenção:</strong> pode ser que, na hora de baixar os pacotes dos servidores FTP, ocorram erros ao tentar contactar o site. Isso provavelmente significa que tem algum <em>firewall</em> bloqueando a conexão. Para superar isso, voltamos para esta janela e selecionamos via FTP Passivo (FTP Passive).</li>
<li>Na próxima etapa, devemos selecionar o servidor que iremos baixar os pacotes. Recomendo usar o &#8220;<em>Main Site</em>&#8221; (ftp.freebsd.org).</li>
<li>O instalador irá perguntar se queres tentar conexões IPv6 na interface. Como ainda é difícil termos suporte a esta tecnologia, vamos selecionar &#8220;No&#8221;.</li>
<li>A próxima pergunta é se queremos tentar a configuração via DHCP. Para esta pergunta, respondemos &#8220;Yes&#8221;.</li>
<li>Então, nos será pedido para colocar o nome do máquina em &#8220;Host&#8221;. O domínio e as outras informações já deverão estar preenchidos automaticamente, mas não custa conferir se está tudo certo. Navegue pelos itens com o &#8220;Tab&#8221;, deixe em branco o campo de &#8220;Extra options&#8221; e selecione &#8220;Ok&#8221; e pressione &#8220;Enter&#8221;.</li>
<li>Será feita uma pergunta de última chance antes de se gravar as mudanças em disco. This is the point of no return. Se estiveres certo com tudo que foi feito, apenas pressione &#8220;Enter&#8221;.</li>
<li>Aguarde, a instalação irá começar. Isso levará algum tempo, dependerá da tua velocidade de conexão e da capacidade de processamento da tua máquina. Aproveite e tome um cafézinho&#8230; <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  A instalação até aqui não foi muito dolorosa, o pior ainda está por vir&#8230;. <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </li>
<li>Ao final, uma tela parabenizando pela finalização da instalação será apresentada. Agora vamos configurar algumas outras coisas&#8230; Apresentarei cada pergunta e cada resposta em cada um dos próximos itens.</li>
<li>Network gateway? &#8220;No&#8221;.</li>
<li>Configure inetd and network services? &#8220;No&#8221;.</li>
<li>SSH login? &#8220;Yes&#8221;. <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </li>
<li>Anonymous FTP? &#8220;No&#8221;.</li>
<li>NFS server? &#8220;No&#8221;.</li>
<li>NFS client? &#8220;No&#8221;.</li>
<li>Customize console settings? &#8220;No&#8221;.</li>
<li>Set time zone now? &#8220;Yes&#8221;.</li>
<li>As próximas janelas são de configuração do relógio, selecione &#8220;No&#8221; para a pergunta se o relógio da CMOS está em UTC (ou &#8220;Yes&#8221;, se tu tens certeza de que está). Selecione região e fuso nas próximas janelas; o instalador irá perguntar se a sigla BRST faz sentido, responda &#8220;Yes&#8221;.</li>
<li>Configure mouse? &#8220;Yes&#8221;.</li>
<li>Na próxima tela, selecione &#8220;Enable&#8221;, teste e verifique existe um ponteirinho se mexendo na tela. Caso ok, selecione &#8220;Ok&#8221; e selecione &#8220;Exit&#8221; no menu anterior.</li>
<li>A próxima janela irá perguntar se tu queres navegar pelos repositórios de pacotes para adicionar alguma coisa à instalação. Selecione &#8220;Yes&#8221;. Navegando nas categorias da próxima janela, selecione: <em>gnome</em> e marque <em>gnome2-2.30.1_1</em> na lista seguinte. Isso marcará todas as dependências dele. Selecione alguns temas para GTK e Metacity que estão disponíveis na lista, são bastante bons. Pressione &#8220;Ok&#8221; e voltaremos a tela de categorias anterior. Selecionamos a categoria <em>x11</em>, e marcamos o pacote <em>xorg-7.5</em>. Suas dependências serão marcadas.</li>
<li>Na próxima janela, confirme os pacotes a serem instalados pressionando &#8220;Ok&#8221;. Caso o instalador pergunte, vamos selecionar novamente o &#8220;<em>Main Site</em>&#8221; para baixar os pacotes. O instalador comentará que as configurações de rede aparentemente já foram feitas, confirme isso pressionando &#8220;Ok&#8221;.</li>
<li>Mais uma longa espera&#8230; Eu disse que isso iria demorar&#8230; Hehehehe&#8230; Repare agora que não conseguimos ter ideia nenhuma se já estamos quase terminando ou recém começando. Bad FreeBSD! No donuts for you! Repare que, ainda por cima, os pacotes do X11 não são marcados por padrão quando selecionamos o Gnome2. Muy malo!</li>
<li>Após a instalação dos pacotes, vamos criar novos usuários para o sistema e novos grupos. Mantendo a tradição &#8220;Linux&#8221;, vamos primeiro criar um grupo especial para o usuário (em geral, com o mesmo nome do usuário) e vamos criar o usuário, adicionando o grupo criado anteriormente como grupo do usuário. Por exemplo usuário <em>bgarber</em> e grupo <em>bgarber</em>.</li>
<li>Agora estamos de volta ao menu inicial. Simplesmente selecione &#8220;Exit install&#8221; e aperte &#8220;Enter&#8221;.</li>
<li>O instalador irá avisar que vai reiniciar a máquina, pressione &#8220;Ok&#8221; e certifique-se de remover os discos, para não entrares na instalação novamente.</li>
</ol>
<p>Pronto, temos o sistema básico funcionando. O que eu achei de errado no instalador do FreeBSD é que, enquanto ele está instalando pacotes adicionais, não se dá pra ter ideia de quanto já foi concluído. Podiam ter um pouco mais de informações estas telas! Além de tudo, ao fazer <em>reboot</em>, verás que a interface gráfica não carregará imediatamente&#8230; Isso por que teremos que configurar mais algumas coisas, o que explicarei logo em seguida&#8230;</p>
<h2><em>pkg_add, pkg_delete</em> e <em>ports</em></h2>
<p>Bem, depois da instalação do sistema, acho que faz sentido falarmos um pouco sobre a instalação de pacotes no FreeBSD. São oferecidas duas formas de instalar novos softwares: ou a partir dos pacotes pré-compilados usando <em>pkg_add</em>, ou compilá-los manualmente usando a árvore do <em>ports</em>. Antes de usarmos estas ferramentas, é interessantes rodarmos os seguintes comandos:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># freebsd-update fetch install</span>
<span style="color: #666666; font-style: italic;"># portsnap fetch extract</span></pre></td></tr></table></div>

<p>O primeiro comando irá atualizar o sistema e o segundo irá baixar e instalar a árvore de diretórios do <em>ports</em>.</p>
<p>Falando, então, do <em>pkg_add</em>. Ele é usado para instalar novos pacotes e, em geral, é executado da seguinte forma:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;"># </span>pkg_add <span style="color: #660033;">-r</span> <span style="color: #000000; font-weight: bold;">&lt;</span>packet_name<span style="color: #000000; font-weight: bold;">&gt;</span></pre></td></tr></table></div>

<p>Portanto, se eu fornecer &#8220;vim&#8221; no lugar do &#8220;&lt;packet_name&gt;&#8221;, o FreeBSD irá instalar, a partir dos repositórios remotos (reconhecido pelo argumento &#8220;-r&#8221;) o &#8220;vim&#8221;. O <em>pkg_add</em> irá resolver as dependências e instalá-las.</p>
<p>De forma inversa ao <em>pkg_add</em>, o <em>pkg_delete</em> é utilizado para remover pacotes instalados no sistema. Cuidado, pois ele se recusará a desinstalar um pacote que possui outros pacotes que dependam dele. Recomendo a leitura dos manuais dos comandos. <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>O <em>ports</em> é uma versão mais &#8220;mão-grande&#8221; do <em>pkg_add</em>. Enquanto o <em>pkg_add</em> fornece pacotes pré-compilados, o <em>ports</em> baixa, compila e instala cada dependência para um programa que deve ser instalado. Mas não se iluda, isso pode parecer muita coisa, mas muitas vezes é o mais recomendado. O <em>ports</em> em si não é um comando, é uma estrutura de diretórios. Dentro de /usr/ports veremos uma lista de diretórios, dividindo os pacotes por categorias. Entramos no diretório da categoria, entramos no diretório do pacote, executamos <em>make install clean</em> e o pacote e suas dependências não satisfeitas serão baixadas, compiladas e instaladas. Um exemplo, usando o pacote do vim:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># cd /usr/ports/editors/vim</span>
<span style="color: #666666; font-style: italic;"># make clean install</span></pre></td></tr></table></div>

<p>Pronto. Recomendo dar uma olhada nas categorias e uma navegada pelos diretórios. Instalar pacotes pelo <em>ports</em> vai demorar um pouco mais do que de costume, mas vale a pena. Para remover algum pacote, basta executar <em>make deinstall</em>, dentro do diretório do pacote.</p>
<h2>Configurando o X.org, o GDM e o Gnome</h2>
<p>Como vocês devem ter reparado, ter instalado os pacotes do Gnome e do X.org não fez com que nenhuma interface gráfica fosse carregada, no momento. Isso é porque o FreeBSD não configurou para carregar os módulos deles em tempo de <em>boot</em>. para carregar a interface gráfica por padrão no momento do <em>boot</em>, basta adicionar as seguintes linhas no arquivo <em>/etc/rc.conf</em>:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">dbus_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #007800;">hald_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #007800;">gdm_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #007800;">gnome_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span></pre></td></tr></table></div>

<p>Além disso, devemos configurar o kern.maxfiles. Esta é uma das variáveis dos &#8220;<em>tunables</em>&#8220;, o que quer dizer que podemos otimizar a performance do FreeBSD. Devemos atualizar este valor, que indica o máximo de arquivos que podem ser abertos ao mesmo tempo no sistema. A alteração é feita no arquivo <em>/boot/loader.conf</em>, adicionando a seguinte linha:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">kern.maxfiles=<span style="color: #000000;">20000</span></pre></td></tr></table></div>

<p>Por fim, teremos que adicionar no <em>/etc/fstab</em> para montar o<em> /proc</em>. Isso se faz necessário, pois sem isso o GDM não exibirá os usuários do sistema.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">proc   <span style="color: #000000; font-weight: bold;">/</span>proc   procfs   rw   <span style="color: #000000;">0</span>   <span style="color: #000000;">0</span>﻿﻿﻿﻿﻿﻿﻿</pre></td></tr></table></div>

<h2>Dicas Finais</h2>
<ul>
<li>Use o /usr/ports. É a melhor maneira de instalar novos programas.</li>
<li>Permita que um usuário possa fazer &#8220;<em>su -</em>&#8221; (para acessar a conta de <em>root</em>) adicionando-o no grupo <em>wheel</em>.</li>
<li>Se estiver numa VM <em>VirtualBox</em>, instale os <em>guest additions</em>! Basta irmos no <em>ports</em> do FreeBSD <em>/usr/ports/emulators/virtualbox-ose-additions</em>; executar <em>make install clean</em>; executar Xorg -configure; copiar o xorg.conf.new para o /etc/X11; e atualizar o <em>/etc/X11/xorg.conf</em>, trocando a opção &#8220;<em>Driver&#8221;</em> da sessão &#8220;<em>Device</em>&#8221; para &#8220;<em>vboxvideo</em>&#8221; e a opção &#8220;<em>Driver</em>&#8221; da sessão &#8220;<em>InputDevice</em>&#8221; para &#8220;<em>vboxmouse</em>&#8220;.</li>
<li>Às vezes o GDM não inicia assim, tão automaticamente. Recompilá-lo pelo <em>ports</em> (<em>/usr/ports/x11/gdm; make deinstall; make reinstall clean</em>) é uma boa ideia. <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Quando fizer o <em>reboot</em>, pode ser que ele ainda assim não inicie de primeira, entre como <em>root</em> e execute <em>gdm restart</em>. Agora ele tem que iniciar e provavelmente passará a funcionar no <em>boot</em>.</li>
<li>Minha experiência diz que coisas obscuras podem acontecer enquanto estiveres usando o FreeBSD. Não tenha medo de buscar as informações na internet!</li>
<li>Tenha paciência. O FreeBSD é um sistema lento quando instalado pelos pacotes pré-compilados. Recompilar o kernel, otimizando para o teu caso, é uma boa ideia (tem um manual de como fazer isso <a title="aqui" href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html">aqui</a>).</li>
</ul>
<p>Bem, este foi um artigo bastante longo e cansativo. Aproveite seu novo sistema operacional. <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2011/01/freebsd-way-of-life-instalacao-e-dicas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Be careful with that &#8220;unsigned&#8221;!</title>
		<link>http://bgarber.notapipe.org/blog/2011/01/be-careful-with-that-unsigned/</link>
		<comments>http://bgarber.notapipe.org/blog/2011/01/be-careful-with-that-unsigned/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 16:01:41 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=202</guid>
		<description><![CDATA[On a day-to-day routine of programming in C, it&#8217;s a common practice declare a special type for &#8220;unsigned int&#8221; (or even creating macros). The following lines show some of this practice: #define U32 unsigned int #define UINT32 unsigned int &#160; typedef unsigned int UINT32 Remember that these all declarations are &#8220;unsigned&#8221;. I comment this because [...]]]></description>
				<content:encoded><![CDATA[<p>On a day-to-day routine of programming in C, it&#8217;s a common practice declare a special type for &#8220;unsigned int&#8221; (or even creating macros). The following lines show some of this practice:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define U32    unsigned int</span>
<span style="color: #339933;">#define UINT32 unsigned int</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> UINT32</pre></td></tr></table></div>

<p>Remember that these all declarations are &#8220;unsigned&#8221;. I comment this because I&#8217;ve already seen codes such like:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> _foobar <span style="color: #009900;">&#123;</span>
    UINT32 u32_field<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> foobar<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// code goes on...</span>
...
&nbsp;
<span style="color: #202020;">foobar</span> <span style="color: #339933;">*</span>some_struct_ptr<span style="color: #339933;">;</span>
some_struct_ptr <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>foobar <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">malloc</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>foobar<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// more code...</span>
...
<span style="color: #202020;">ASSERT</span><span style="color: #009900;">&#40;</span>some_struct_ptr<span style="color: #339933;">-&gt;</span>u32_field <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>What&#8217;s wrong here? The ASSERT call is always true! So this is an unnecessary test! This does not affect the code execution at all, but in greater projects, where the CPU cicles are so precious as diamonds, or if you want to deliver a code that is clean of warnings while building your source, you will need to remove these kind of calls.</p>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2011/01/be-careful-with-that-unsigned/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concentração x Quantidade de Sono</title>
		<link>http://bgarber.notapipe.org/blog/2010/11/concentracao-x-quantidade-de-sono/</link>
		<comments>http://bgarber.notapipe.org/blog/2010/11/concentracao-x-quantidade-de-sono/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 00:49:22 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Nerd]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=191</guid>
		<description><![CDATA[A dura verdade&#8230;]]></description>
				<content:encoded><![CDATA[<p style="text-align: left;">A dura verdade&#8230; <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p style="text-align: center;"><a href="http://bgarber.notapipe.org/blog/wp-content/uploads/2010/11/concentracao_vs_sono.png"><img class="aligncenter size-medium wp-image-192" title="concentracao_vs_sono" src="http://bgarber.notapipe.org/blog/wp-content/uploads/2010/11/concentracao_vs_sono-300x254.png" alt="Fear the zombie-mode!" width="300" height="254" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2010/11/concentracao-x-quantidade-de-sono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando Debian: the NERD way</title>
		<link>http://bgarber.notapipe.org/blog/2010/11/instalando-debian-the-nerd-way/</link>
		<comments>http://bgarber.notapipe.org/blog/2010/11/instalando-debian-the-nerd-way/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 12:27:39 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[Instalação]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nerd]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=128</guid>
		<description><![CDATA[O meu primeiro sistema operacional que instalei foi um Kurumin 3.0, que eu usava num computador velhão aqui de casa. Instalei Linux antes mesmo de ter alguma experiência instalando Windows. E desde que instalei pela primeira vez com sucesso um sistema operacional, não parei mais. Gosto muito de instalar sistemas operacionais, experimentar na segurança de [...]]]></description>
				<content:encoded><![CDATA[<p>O meu primeiro sistema operacional que instalei foi um Kurumin 3.0, que eu usava num computador velhão aqui de casa. Instalei Linux antes mesmo de ter alguma experiência instalando Windows. E desde que instalei pela primeira vez com sucesso um sistema operacional, não parei mais. Gosto muito de instalar sistemas operacionais, experimentar na segurança de uma VM (uso VirtualBox) ou instalando nas minhas máquinas. Nessa minha vida de nerd, depois de instalar o Kurumin, já instalei o Windows XP, o Ubuntu (moleza&#8230;), o FreeBSD, o Gentoo, Minix 3, o Debian, e mais recentemente o Windows Vista e o Arch Linux. Mas eu, como um usuário entusiasta do Debian, já o instalei de várias maneiras diferentes.</p>
<p>Como eu costumo comentar com meus colegas e amigos, o Debian tem pelo menos 4 modos de instalação: o modo usuário (o qual já comentei <a href="http://bgarber.notapipe.org/blog/2007/11/instalando-debian-usando-interface-grafica/">aqui</a>), o modo normal (que seria basicamente procedendo pelos passos de instalação com o instalador padrão), o modo difícil (o que eu costumo fazer, trata-se de instalar o básico do básico pela instalação normal e instalar o restante via apt-get &#8211; inclusive o X! -, uso muito para instalar a versão <em>testing</em> através do CD de instalação do <em>stable</em>) e o NERD way. Este último é o nível que supera em dificuldade o modo difícil, mesmo usuários experientes podem &#8220;se quebrar&#8221; tentando. Os passos para o NERD way são para pessoas experientes, que sabem o que estão fazendo. Se quiser experimentar, recomendo usar uma máquina virtual, para brincar. Daí, não se corre o risco de danificar as partições do próprio disco. <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Antes de qualquer coisa, precisaremos de uma distro <em>live</em> CD qualquer. Eu utilizei o <em>live</em> CD do Ubuntu 10.10, mas pode ser qualquer uma que tenha a possibilidade de executar sem fazer nenhuma instalação. A partir daqui, seguimos os seguintes passos:</p>
<ol>
<li>inicializamos o <em>live</em> CD, entrando no Gnome Desktop;</li>
<li>esta instalação irá usar o <em>debootstrap</em>, que é um utilitário que várias distribuições possuem, portanto vamos abrir um terminal e instalá-lo:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">$ sudo apt-get install debootstrap</pre></td></tr></table></div>

<li>após terminar de instalar com sucesso, vamos executar o <em>cfdisk</em>;</li>
<li>no <em>cfdisk</em>, vamos criar 3 partições: uma para o <em>/</em>, uma para o <em>/home</em> e uma para o <em>swap</em>, de acordo com a imagem abaixo (clique na imagem para ampliar):</li>
<div id="attachment_141" class="wp-caption aligncenter" style="width: 310px"><a href="http://bgarber.notapipe.org/blog/wp-content/uploads/2010/11/ubuntu-cfdisk.png"><img class="size-medium wp-image-141" title="ubuntu-cfdisk" alt="Tabela de partições do disco." src="http://bgarber.notapipe.org/blog/wp-content/uploads/2010/11/ubuntu-cfdisk-300x225.png" width="300" height="225" /></a><p class="wp-caption-text">Tabela de partições do disco.</p></div>
<li>os rótulos das partições não foram colocados quando tirei a screenshot acima, mas a saber, o <em>sda1</em> irá mapear para uma área de <em>swap</em>, o <em>sda2</em> irá mapear para o <em>/</em> e o <em>sda3</em> irá mapear para o <em>/home</em>;</li>
<li>após terminado o particionamento do disco, vamos gravar as alterações (<strong>NOTA IMPORTANTE</strong>: este processo é irreversível! Muito cuidado!), talvez um <em>reboot</em> seja necessário (se for, reinstale o <em>debootstrap</em> ao reiniciar, óbvio);</li>
<li>agora, vamos formatar as partições criadas; meu sistema de arquivos escolhido será o <em>ext4;</em> lembrando que as partições, no meu caso e provavelmente o teu,  ficaram nos discos mapeados como <em>/dev/sda*</em>:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">$ sudo mke2fs -t ext4 -L / /dev/sda2
$ sudo mke2fs -t ext4 -L /home /dev/sda3</pre></td></tr></table></div>

<li>vamos ativar a área de swap:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">$ sudo mkswap /dev/sda1
$ sudo swapon /dev/sda1</pre></td></tr></table></div>

<li>vamos montar a partição / (eu preferi no /mnt):</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">$ sudo mount /dev/sda2 /mnt</pre></td></tr></table></div>

<li>agora, estamos prontos para o <em>debootstrap</em>:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">$ sudo debootstrap squeeze /mnt http://ftp.br.debian.org/debian</pre></td></tr></table></div>

<li>isto irá instalar o básico do básico na partição, não vai ter nem kernel instalado; este processo irá demorar um pouco, aproveite para tomar um cafézinho&#8230; <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>ao concluir a instalação, vamos fazer um <em>chroot</em> para o diretório onde a partição <em>/</em> foi montada:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">$ sudo chroot /mnt</pre></td></tr></table></div>

<li>agora precisaremos instalar o <em>kernel</em>; aproveito a oportunidade e instalo mais algumas coisas que poderão ser úteis, como <em>linux-headers</em>, <em>make</em>, etc&#8230;</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;"># aptitude install linux-image-2.6.32-5-686 \
    linux-headers-2.6.32-5-686 make gcc vim</pre></td></tr></table></div>

<li>espere concluir a instalação, se ele reclamar de &#8220;<em>untrusted packages</em>&#8220;, apenas digite &#8220;<em>Yes</em>&#8220;, que isso pode ser resolvido mais tarde (também não se preocupe com o possível <em>warning: can&#8217;t open /etc/mtab: No such file or directory</em>);</li>
<li>a seguir, vamos configurar o <em>/etc/fstab</em> (sim, temos que fazer isso, eu avisei que seria bem manual no início do post); vamos configurar para ele se parecer com isto:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">#     
/dev/sda1      swap          swap   defaults  0       0
/dev/sda2      /             ext4   defaults  1       1
/dev/sda3      /home         ext4   defaults  1       2</pre></td></tr></table></div>

<li>após o <em>fstab</em>, vamos instalar o <em>grub</em> no setor de inicialização:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;"># aptitude install grub
# cd /dev
# mknod sda b 8 0
# mknod sda1 b 8 1
# mknod sda2 b 8 2
# mknod sda3 b 8 3
# grub-install sda
# update-grub2</pre></td></tr></table></div>

<li>caso a operação de <em>aptitude install</em> do <em>grub</em> reclame que tu estás instalando o <em>grub</em> sem instalá-lo em nenhum disco, diga que é para ele seguir mesmo assim; repare que nós temos que criar cada <em>/dev/sda*</em>, pois eles ainda não aparecem na listagem do diretório;</li>
<li>por final, vamos configurar a rede, utilizando por base a <em>distro</em> do <em>live CD</em>, copiando os seguintes arquivos:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;"># exit
$ sudo cp /etc/hosts /mnt/etc
$ sudo cp /etc/network/interfaces /mnt/etc/network/</pre></td></tr></table></div>

<li>e não vamos esquecer de editar o <em>/mnt/etc/hostname</em> com o nome desejado para máquina; adicionalmente, troque o &#8220;<em>ubuntu</em>&#8221; (depende do <em>live CD</em> que tu estiveres usando, eu estou usando o Ubuntu aqui) do arquivo <em>/mnt/etc/hosts</em> pelo mesmo nome colocado no <em>/mnt/etc/hostname</em>; repare ainda que, neste momento, nós saímos do modo <em>chroot</em>;</li>
<li>adicione as seguintes linhas no <em>/mnt/etc/network/interfaces</em>:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">auto eth0
iface eth0 inet dhcp</pre></td></tr></table></div>

<li><strong>Update:</strong> uma alternativa ao passo anterior é instalar o pacote <em>network-manager</em> via <em>apt-get</em>!</li>
<li>vamos voltar ao <em>chroot</em> (<em>sudo chroot /mnt</em>) e trocar a senha do <em>root</em> com <em>passwd</em>;</li>
<li>e agora é hora (enfim!) de dar adeus ao <em>live CD</em> e dar <em>reboot</em> no teu novo sistema operacional! \o/</li>
</ol>
<p>Para a instalação, é isso. Configure novos usuários usando <em>adduser login</em> (substitua <em>login</em> pelo nome de usuário que tu desejar) e instale novos pacotes a vontade. Para instalar o Gnome, execute <em>aptitude install gnome</em>. Ou simplesmente execute <em>tasksel</em>, para automatizar esta instalação de pacotes adicionais.</p>
<p>É possível que tenhas que reconfigurar o layout de teclado no terminal (onde não tem a interface gráfica carregada). Isso se resolve com <em>&#8220;dpkg-reconfigure console-data&#8221;</em> e selecionando o mapa de teclados corretamente das listas (resolvi selecionando <em>&#8220;pc / qwerty / Brazilian / Standard / Standard ABNT2&#8243;</em> da lista completa de mapas de teclado). O problema com &#8220;<em>untrusted packages</em>&#8221; no <em>apt-get</em> eu resolvi apenas executando um <em>apt-get update</em>. Não esqueça de atualizar teu <em>/etc/apt/sources.list</em> com outros repositórios. Aqui vai como está o meu:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">deb http://ftp.br.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.br.debian.org/debian/ squeeze main contrib non-free
&nbsp;
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free</pre></td></tr></table></div>

<p>É isso. Espero ter ajudado ao nerd que se interessar por este processo. <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2010/11/instalando-debian-the-nerd-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Easily distracted mind: como controlar a ansiedade com o Pomodoro Technique</title>
		<link>http://bgarber.notapipe.org/blog/2010/11/easily-distracted-mind-como-controlar-a-ansiedade-com-o-pomodoro-technique/</link>
		<comments>http://bgarber.notapipe.org/blog/2010/11/easily-distracted-mind-como-controlar-a-ansiedade-com-o-pomodoro-technique/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 00:54:54 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=110</guid>
		<description><![CDATA[Concentração nas tarefas que devem ser realizadas têm se tornado um problema, principalmente para nós que trabalhamos praticamente 12 horas diárias em cima de um computador com acesso a internet e a um mundo de informações. E esse mundo de informações nos faz esquecer daquilo que devemos fazer e, no final das contas, ficamos &#8220;correndo [...]]]></description>
				<content:encoded><![CDATA[<p>Concentração nas tarefas que devem ser realizadas têm se tornado um problema, principalmente para nós que trabalhamos praticamente 12 horas diárias em cima de um computador com acesso a internet e a um mundo de informações. E esse mundo de informações nos faz esquecer daquilo que devemos fazer e, no final das contas, ficamos &#8220;correndo contra o tempo&#8221; para conseguir concluir as tarefas dentro do prazo.</p>
<p>Algumas semanas atrás, eu descobri uma maravilha: algo chamado <a href="http://http://www.pomodorotechnique.com/">Pomodoro Technique</a>. A técnica Pomodoro, como prefiro chamá-la, é uma forma de controlar a ansiedade e o tempo, para que pessoas como eu (que se distraem facilmente com qualquer coisa), consigam manter o foco e concluir as tarefas importantes. Aqui, venho compartilhar como estou aplicando nas minhas tarefas e minhas impressões. Os passos para seguir são simples:</p>
<ol>
<li>anote uma lista de tarefas para serem realizadas;</li>
<li>pegue a tarefa de maior prioridade (ou a do topo da lista, a escolha é sua);</li>
<li>inicie um contador de tempo para contabilizar 25 min (a recomendação original é usar um relógio contador de cozinha, mas isso parece ser um artigo raro hoje em dia; pode ser um cronômetro qualquer, eu uso o timer-applet no meu Gnome Desktop);</li>
<li>trabalhe focado na tarefa (focado, por favor, sem desviar) até o cronômetro despertar (chamamos este período de 1 pomodoro);</li>
<li>descanse por 5 min;</li>
<li>inicie o próximo pomodoro, trabalhando na mesma tarefa anterior ou, se foi concluída, pegando a próxima tarefa;</li>
<li>a cada 4 pomodoros, tire um tempo de descanso mais longo (15 min) e, depois retorne a normalidade (descansos de 5 min depois de cada pomodoro).</li>
</ol>
<p>O único ponto fraco da técnica Pomodoro é que não trata de forma &#8220;tranqüila&#8221; as interrupções que podem acontecer durante um pomodoro. O que eu tenho feito: quando tenho uma interrupção que prevejo ser breve, eu simplesmente paraliso o contador, faço o que tenho que fazer, e volto para o pomodoro de onde parou; caso, a interrupção for longa, no retorno, inicio um novo pomodoro, como se eu tivesse tipo um tempo de descanso imprevisto. <strong>NOTA IMPORTANTE: </strong>essas interrupções são exceções! Auto-controle e comprometimento com a técnica são essenciais aqui. Essas interrupções não são &#8220;geradas&#8221; por mim, são quando outra pessoa, por um motivo qualquer, interrompe-me.</p>
<p>A <em><a href="http://http://www.scribd.com/doc/36672130/Pomodoro-Cheat-Sheet">cheat sheet</a></em> da técnica ainda tem outras dicas. Recomendo sua leitura. Talvez, uma adaptação para o teu cenário seja necessária, como fiz para tratar as minhas interrupções imprevistas de pomodoro. Os meus resultados têm sido excelentes. Em pouco tempo, mesmo sem o contador, consegui treinar meu cérebro a dar foco naquilo que preciso fazer. Um resultado impressionante para alguém que, por qualquer motivo, distraía-se com qualquer bobagem na internet.</p>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2010/11/easily-distracted-mind-como-controlar-a-ansiedade-com-o-pomodoro-technique/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dicas para realizar uma boa apresentação de trabalhos com slides</title>
		<link>http://bgarber.notapipe.org/blog/2010/05/dicas-para-realizar-uma-boa-apresentacao-de-trabalhos-com-slides/</link>
		<comments>http://bgarber.notapipe.org/blog/2010/05/dicas-para-realizar-uma-boa-apresentacao-de-trabalhos-com-slides/#comments</comments>
		<pubDate>Tue, 18 May 2010 17:49:44 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=95</guid>
		<description><![CDATA[Não adianta tentar escapar: todos nós, uma hora ou outra, temos que fazer alguma apresentação, seja na escola, na faculdade ou no trabalho. O que mais me surpreende é a quantidade de pessoas que simplesmente não sabem como fazer uma boa apresentação de slides para trabalhos, tanto profissionalmente quanto no meio acadêmico. Através deste post, [...]]]></description>
				<content:encoded><![CDATA[<p>Não adianta tentar escapar: todos nós, uma hora ou outra, temos que fazer alguma apresentação, seja na escola, na faculdade ou no trabalho. O que mais me surpreende é a quantidade de pessoas que simplesmente não sabem como fazer uma boa apresentação de slides para trabalhos, tanto profissionalmente quanto no meio acadêmico. Através deste post, quero deixar registrados algumas dicas do que aprendi com o tempo e do que me ensinaram para fazer uma boa apresentação.</p>
<h4>1. Evite muito texto nos slides.</h4>
<p>Lembre-se: os slides existem como um roteiro para guiar a tua apresentação, não para apresentar todo o conteúdo. Prefira uma estrutura em tópicos, colocando no máximo 2 linhas (e estou sendo muito generoso) para cada tópico. Caso o tópico exija mais que 2 linhas, considere quebrá-lo ou resumir em palavras que sejam fáceis para relembrar do assunto.</p>
<p>Muito texto nos slides podem levar o teu público a fazer duas coisas: pensar que tu não sabes/entendes do que tu estás falando e desviar a atenção do que tu estiver falando para ler os slides. Isso nos leva ao segundo ponto.</p>
<h4>2. Procure manter a atenção das pessoas focadas no que tu estiver falando.</h4>
<p>Isso é obtido através do primeiro item. Tendo pouco texto nos slides, o público levará menos tempo para lê-lo e terá tempo de voltar a atenção ao que tu estiver falando.</p>
<p>Procure manter um discurso fluente e claro, que todos possam entender o assunto que está sendo tratado. Isso ajuda muito em manter a atenção do público.</p>
<h4>3. É terminantemente proibido ler (em voz alta) os slides.</h4>
<p>Ainda ligado com o primeiro item, ficar lendo os slides torna a apresentação sem sentido e, como um todo, aborrecedora. Pode deixar a impressão que tu, ao criar a apresentação, não deste a mínima atenção para o que estava escrito e/ou não entendeste o assunto.</p>
<h4>4. Também é proibido ler papéis.</h4>
<p>Pelos mesmos motivos do item 3, evite levar e ler papéis com o texto da apresentação para o momento de apresentar o assunto. Nesse caso, pode ser feita uma exceção quando é extremamente necessária uma citação de um documento (tipo uma carta, um jornal, etc.) que pode provar algo que tu estejas apresentando. Mas este tipo de situação dificilmente irá ocorrer e sempre será melhor se tu não tiver que ler algum papel durante a apresentação.</p>
<h4>5. Cuide de sua aparência.</h4>
<p>Cuide sempre para que tua aparência esteja de acordo com a ocasião da apresentação. Uma aparência que possa parecer fora de contexto pode levar o público a não levar a sério a apresentação.</p>
<h4>6. Para os mais retraídos: tenha sempre algo pequeno para segurar nas mãos.</h4>
<p>Um lápis, uma caneta, um clips. Qualquer coisa que, num momento de tensão, tu possas utilizar para &#8220;descarregar&#8221; o nervosismo. Nestes momentos, segure com força o objeto, respire fundo e resolva da melhor maneira o &#8220;conflito&#8221;, seja dando uma boa resposta a um questionamento ou uma crítica. Acreditem em mim: funciona. Sou prova viva disto.</p>
<h4>7. Permita-se momentos de descontração.</h4>
<p>Moderação neste item! Sempre cuide do contexto e se o humor será apropriado ao momento. Procure não ofender ninguém! Mas um pouco de descontração é bom até mesmo para ti, que irás apresentar, relaxar um pouco e não ficar muito nervoso. Sempre cuide para não perder o foco dos objetivos e da seriedade que é implícita a apresentação! Como no item anterior, sou prova viva de que isto funciona.</p>
<p>Bom, eram estas minhas dicas. Quem quiser, contribua nos comentários com mais algum ponto que seja importante.</p>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2010/05/dicas-para-realizar-uma-boa-apresentacao-de-trabalhos-com-slides/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>Dark Sorcering in C: utilizando bit-fields</title>
		<link>http://bgarber.notapipe.org/blog/2009/07/dark-sorcering-in-c-utilizando-bit-fields/</link>
		<comments>http://bgarber.notapipe.org/blog/2009/07/dark-sorcering-in-c-utilizando-bit-fields/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 13:10:40 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=79</guid>
		<description><![CDATA[Mais um post programador-geek-útil: bit-fields. Para quem não conhece, em C pode-se criar coisas &#8220;bizarras&#8221; do tipo estruturas com campos de tamanho 1, 2 ou n bits. Sim, eu não me enganei. É isso mesmo o que tu entendeu. Em C podemos criar estruturas com campos de apenas 1 bit, por exemplo. Aliás, por sinal, [...]]]></description>
				<content:encoded><![CDATA[<p>Mais um post programador-geek-útil: bit-fields. Para quem não conhece, em C pode-se criar coisas &#8220;bizarras&#8221; do tipo estruturas com campos de tamanho 1, 2 ou n <em>bits</em>. Sim, eu não me enganei. É isso mesmo o que tu entendeu. Em C podemos criar estruturas com campos de apenas 1 bit, por exemplo. Aliás, por sinal, tu pode até mesmo criar uma estrutura com apenas 1 bit.</p>
<p>&#8220;Mas como isso?&#8221; tu te pergunta. É mais fácil do que parece. Basta declarar a estrutura e, para cada campo, dizer quantos bits tu quer. Simples assim:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">struct</span> byte_t <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> high<span style="color: #339933;">:</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> low<span style="color: #339933;">:</span>  <span style="color: #0000dd;">4</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Neste caso, estamos declarando uma estrutura com dois campos, cada um com 4 bits. Viram como é simples? Neste caso, nossa estrutura terá o tamanho de 8 <em>bits</em>, 1 <em>byte</em> no final das contas. Mas nada me impede de declará-la assim:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">struct</span> bit_t <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> val<span style="color: #339933;">:</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Agora temos uma estrutura de apenas 1 <em>bit</em> de tamanho! Faça o teste: tente colocar algo mais do que 0 ou 1 no campo val da estrutura para ver se o GCC não reclama com um <em>warning</em>!</p>
<p>Algo que preciso lembrar é que o comando <em>sizeof()</em> não irá funcionar para a estrutura <em>bit_t</em>. Porque? Ora, é óbvio. A função <em>sizeof()</em> retorna seus valores em <em>bytes</em> e não em <em>bits</em>. Já para a estrutura <em>byte_t</em>, nós conseguimos executar o <em>sizeof()</em>, já que seu tamanho é de exatamente 1 <em>byte</em>.</p>
<p><strong>Update</strong>: como comentado pelo meu amigo Fabio Utzig, o tamanho das estruturas em si serão arredondadas para a representação. Por exemplo, caso eu adicione mais um campo na estrutura <em>byte_t</em>, mesmo que seja de um <em>bit</em> apenas, o tamanho total da estrutura será 2 bytes, pois ele arredonda o tamanho. Os campos em si que sempre terão o tamanho em <em>bits</em> especificado.</p>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2009/07/dark-sorcering-in-c-utilizando-bit-fields/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Minix 3 Adventures: fazendo funcionar a rede no VirtualBox</title>
		<link>http://bgarber.notapipe.org/blog/2009/05/minix-3-adventures-fazendo-funcionar-a-rede-no-virtualbox/</link>
		<comments>http://bgarber.notapipe.org/blog/2009/05/minix-3-adventures-fazendo-funcionar-a-rede-no-virtualbox/#comments</comments>
		<pubDate>Sun, 31 May 2009 20:48:49 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=67</guid>
		<description><![CDATA[Neste semestre, estou fazendo a cadeira de Projeto de Sistemas Operacionais na faculdade. Por opção, resolvi (em conjunto com alguns colegas) usar o Minix 3 como sistema operacional de estudos. Instalei ele, feliz da vida, numa máquina virtual do VirtualBox. O problema é que a rede não queria de jeito nenhum funcionar! A princípio deveria [...]]]></description>
				<content:encoded><![CDATA[<p>Neste semestre, estou fazendo a cadeira de Projeto de Sistemas Operacionais na faculdade. Por opção, resolvi (em conjunto com alguns colegas) usar o Minix 3 como sistema operacional de estudos. Instalei ele, feliz da vida, numa máquina virtual do VirtualBox. O problema é que a rede não queria de jeito nenhum funcionar! A princípio deveria funcionar, escolhi o driver certo na instalação (AMD Lance, emulado pelo VMWare e pelo VirrtualBox), mas não funcionava. Depois de muito pesquisar, consegui fazer funcionar. Aqui vão as dicas!</p>
<p>Depois de completada a instalação do Minix 3, reinicie o sistema (não esqueça de botar no VirtualBox para ele não montar o cdrom do Minix3) e execute primeiramente estes passos:</p>
<ol>
<li>Com o sistema reiniciado, coloque a imagem do CD do Minix 3 de volta.</li>
<li>Como root, execute &#8220;packman&#8221;.</li>
<li>Procura o número do vim, para instalá-lo do CD&#8230; ;-P</li>
<li>Cuidado para não deixar ele tentar atualizar a lista de arquivos da internet (o que tu não tem ainda&#8230; hehehehe&#8230;)</li>
</ol>
<p>Estes foram somente os passos para instalar o vim&#8230; hehehehe&#8230; Os passos que segui para fazer a rede funcionar no Minix 3 foram estes:</p>
<ol>
<li>Edite o arquivo &#8220;/usr/etc/rc&#8221; (com o vim).</li>
<li> Vá para a linha 82; ela diz &#8220;Starting services:&#8221;.  Vá para a  próxima linha;  ela começa com &#8220;up random&#8221;.</li>
<li> Aperte &#8220;v&#8221; (para entrar em modo visual) e vá selecionando até o primeiro &#8220;fi&#8221; que tu encontrar.</li>
<li> Recorte estas linhas.</li>
<li> Agora, vá até a linha que diz &#8220;up inet&#8221;.</li>
<li> Cole as linhas que tu copiaste logo em cima desta linha.</li>
<li> Vá para baixo, até onde diz &#8220;intr -t 20 hostaddr -h&#8221; (use o &#8220;/&#8221; do vim).</li>
<li>Mude o &#8220;20&#8243; para &#8220;30&#8243;</li>
</ol>
<p>Esta é a primeira parte da solução&#8230; hehehehe&#8230; Agora vamos para o kernel&#8230;</p>
<ol>
<li>Dá um cd /usr/src/drivers/lance</li>
<li> vim lance.c</li>
<li> A partir da linha 632, edite da forma como segue.</li>
<li>Comente as seguintes linhas:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ec<span style="color: #339933;">-&gt;</span>ec_linmem <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">assert</span><span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #808080; font-style: italic;">/*phys2seg(&amp;ec-&gt;ec_memseg, &amp;ec-&gt;ec_memoff, ec-&gt;ec_linmem);*/</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* XXX */</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ec<span style="color: #339933;">-&gt;</span>ec_linmem <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> ec<span style="color: #339933;">-&gt;</span>ec_linmem<span style="color: #339933;">=</span> <span style="color: #208080;">0xFFFF0000</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<li>E adicione a seguinte linha:</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;">ec<span style="color: #339933;">-&gt;</span>ec_linmem<span style="color: #339933;">=</span> <span style="color: #208080;">0xFFFF0000</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<li>Salve o arquivo e saia do vim.</li>
<li>Vá até a pasta /usr/src/ e execute o seguinte comando:</li>
<p>	<strong># make world</strong></li>
<li>Vai demorar uns 15 ou 20 minutos, aproveite para tomar um cafézinho&#8230;</li>
<li>Reinicie o Minix 3 (não esqueça de desmontar a imagem do cdrom do VirtualBox&#8230;).</li>
<li>Depois de reiniciado, dê um ps ax | grep lance.</li>
<li>Com o PID do driver de rede (provavelmente, será 55), nós vamos nos aproveitar do Reincarnation Server do Minix 3 e matar o processo do driver de rede. Sim, isso mesmo:</li>
<p>	<strong># kill -9 55</strong></p>
<li>O RS vai verificar a morte do processo driver e reiniciá-lo, agora sim a rede vai estar funcionando 100%.</li>
</ol>
<p>O único problema é que toda a vez que reiniciarmos o sistema teremos que executar o comando kill. Mas, por mim, tá tudo bem. <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2009/05/minix-3-adventures-fazendo-funcionar-a-rede-no-virtualbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tibia on Wine &#8211; finalmente algo que funciona&#8230;</title>
		<link>http://bgarber.notapipe.org/blog/2009/05/tibia-on-wine-finalmente-algo-que-funciona/</link>
		<comments>http://bgarber.notapipe.org/blog/2009/05/tibia-on-wine-finalmente-algo-que-funciona/#comments</comments>
		<pubDate>Sun, 17 May 2009 23:13:40 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Tibia]]></category>

		<guid isPermaLink="false">http://bgarber.notapipe.org/blog/?p=55</guid>
		<description><![CDATA[É&#8230; Quero dizer&#8230; Hmmm&#8230; Digamos meia boca&#8230; Como prometi há algum tempo atrás (bota tempo atrás), estou disponibilizando aqui um meio fácil de &#8220;botar para funcionar&#8221; o Tibia com o Wine. Só os resultados deixaram a desejar um tanto&#8230; =/ O melhor DirectX que ele conseguiu compatibilidade foi o 5, portanto os gráficos ficaram bem [...]]]></description>
				<content:encoded><![CDATA[<p>É&#8230; Quero dizer&#8230; Hmmm&#8230; Digamos meia boca&#8230; Como prometi há algum tempo atrás (bota tempo atrás), estou disponibilizando aqui um meio fácil de &#8220;botar para funcionar&#8221; o Tibia com o Wine. Só os resultados deixaram a desejar um tanto&#8230; =/ O melhor DirectX que ele conseguiu compatibilidade foi o 5, portanto os gráficos ficaram bem ruinzinhos e sem opções de &#8220;sombra&#8221;. O que deve ser feito para o Tibia funcionar com o Wine é alterar os registros dele. Como se fosse um Windows mesmo, o Wine tem seu <strong>regedit</strong>. Para acessá-lo, basta executar o seguinte comando no terminal:</p>
<p><strong>$ regedit</strong></p>
<p>Isto irá abrir, com o Wine, uma janela como a qual já devemos conhecer do Windows (pelo menos aqueles que gostam de brincar com o editor de registros&#8230; =P). Com a janela aberta, expandimos o HKEY_CURRENT_USER-&gt;Software-&gt;Wine-&gt;Direct3D. Dentro desta pasta devemos modificar o seguinte registro: <strong>DirectDrawRenderer</strong>. O valor dela deverá ser alterado para &#8220;gdi&#8221; (sem as aspas, é claro). Para alterar o valor do registro, basta clicar com o botão direito em cima do registro, clicar em modificar e alterar o campo &#8220;Dados do valor&#8221;. Caso não exista nenhum registro dentro de Direct3D, basta adicioná-lo, clicando no botão &#8220;Editar&#8221;, na barra de menu, selecionar &#8220;Novo-&gt;Valor Texto&#8221;. Altere o nome do registro para <strong>DirectDrawRenderer</strong> e, após isso clique com o botão direito em cima do registro recém criado, clique em Modificar e altere o valor do campo para &#8220;gdi&#8221;. Pronto. Na próxima vez que o Tibia for aberto com o Wine, tudo deverá funcionar corretamente. <img src='http://bgarber.notapipe.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div id="attachment_62" class="wp-caption aligncenter" style="width: 485px"><img class="size-full wp-image-62" title="Janela do Tibia" src="http://bgarber.notapipe.org/blog/wp-content/uploads/2009/05/captura_da_tela.png" alt="Pelo Wine, conseguimos até apenas o DX5, o que faz percebermos grande perda de qualidade." width="475" height="375" /><p class="wp-caption-text">Pelo Wine, conseguimos até apenas o DX5, o que faz percebermos grande perda de qualidade.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://bgarber.notapipe.org/blog/2009/05/tibia-on-wine-finalmente-algo-que-funciona/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
