<?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>Guax &#187; how to</title>
	<atom:link href="http://www.guax.net/tag/how-to/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.guax.net</link>
	<description>“…is like having your brains smashed out by a slice of lemon wrapped round a large gold brick.”</description>
	<lastBuildDate>Mon, 21 Jun 2010 16:17:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Tuneis SSH</title>
		<link>http://www.guax.net/2010/06/tuneis-ssh/</link>
		<comments>http://www.guax.net/2010/06/tuneis-ssh/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 21:48:46 +0000</pubDate>
		<dc:creator>guax</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[contornando firewall]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tunel ssh]]></category>

		<guid isPermaLink="false">http://www.guax.net/?p=377</guid>
		<description><![CDATA[SSH é uma das coisas mais lindas em sistemas UNIX-like. Mas o SSH é ainda mais lindo se executado com as opções -D e -L. Imaginem o seguinte caso: você está em uma rede quase que completamente bloqueada só lhe sobra uma porta 22 pra acesso ssh remoto em um servidor que você paga em [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_384" class="wp-caption alignleft" style="width: 233px"><a href="http://www.guax.net/wp-content/uploads/2010/06/Georgia-Firewall-bloqueando-tudo-é-uma-puta-falta-de-sacanagem.jpg" rel="lightbox[377]"><img class="size-full wp-image-384 " title="Georgia-Firewall-bloqueando-tudo-é-uma-puta-falta-de-sacanagem" src="http://www.guax.net/wp-content/uploads/2010/06/Georgia-Firewall-bloqueando-tudo-é-uma-puta-falta-de-sacanagem.jpg" alt="" width="223" height="174" /></a><p class="wp-caption-text">Eu também acho.</p></div>
<p>SSH é uma das coisas mais lindas em sistemas UNIX-like. Mas o SSH é ainda mais lindo se executado com as opções -D e -L. Imaginem o seguinte caso: você está em uma rede quase que completamente bloqueada só lhe sobra uma porta 22 pra acesso ssh remoto em um servidor que você paga em uma vps ou melhor ainda quando a sua universidade lhe fornece acesso ssh a alguma maquina gratuitamente. Agora imaginem que vocês precisam ver aquele vídeo de um fã do restart sendo trucidado por um rinoceronte endiabrado. Há solução, uma solução segura e livre de proxys afegãos suspeitos. Os tuneis ssh podem salvar sua vida.</p>
<p>Como? fazendo com que sua conexão seja protegida e criptografada até a maquina da qual você tenha acesso ssh e de lá você saia para web sem restrições de firewalls facistas. A magica é feita por um comando simples e nenhum tipo de acesso administrativo em qualquer uma das maquinas é necessário:</p>
<pre> $ ssh -D 3000 guax@freedom -N -f</pre>
<p>O que esse comando faz é um tunel ssh do tipo dinâmico (-D) que gera um proxy SOCKS 5 na porta 3000 da sua maquina o -N diz que você não quer abrir o shell do ssh da outra maquina e o -f diz que você quer o tunel executando em background. Então no firefox ou browser que suporte.</p>
<div id="attachment_382" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.guax.net/wp-content/uploads/2010/06/configuracao_socks.png" rel="lightbox[377]"><img class="size-medium wp-image-382" title="configuracao_socks" src="http://www.guax.net/wp-content/uploads/2010/06/configuracao_socks-300x155.png" alt="" width="300" height="155" /></a><p class="wp-caption-text">Passos para configurar no Firefox</p></div>
<p>Agora vamos a um problema menos subversivo. Você precisa acessar a porta 80 de algum ip que está escondido em uma rede do cliente, geralmente para configurar um ATA, router e outros equipamentos com configuração web. Se você tem acesso a um firewall ou outra maquina que enxergue as duas redes basta usar o seguinte comando.</p>
<pre> $ ssh -L 3000:192.168.10.100:80 guax@cliente</pre>
<p>E voila. Basta apontar seu browser para localhost:3000. Sem configurar proxy nem nada. =)</p>
<h2>Referências</h2>
<pre>$ man ssh</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.guax.net/2010/06/tuneis-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review receptor ISDB-T DiBcom STK8096GP (TV digital do Brasil)</title>
		<link>http://www.guax.net/2009/12/review-receptor-isdb-t-dibcom-stk8096gp-tv-digital-do-brasil/</link>
		<comments>http://www.guax.net/2009/12/review-receptor-isdb-t-dibcom-stk8096gp-tv-digital-do-brasil/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 23:24:39 +0000</pubDate>
		<dc:creator>guax</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[ISDB-T]]></category>
		<category><![CDATA[slackware]]></category>
		<category><![CDATA[TV Digital]]></category>

		<guid isPermaLink="false">http://www.guax.net/?p=250</guid>
		<description><![CDATA[Na visita do Jon &#8220;Maddog&#8221; ao Brasil para o 4º SoLiSC ele trouxe, como sempre, alguns brinquedinhos comprados nas viagens. Um deles é um receptor de televisão digital para o padrão ISDB-T usado no Brasil e Japão, mais especificamente ao padrão brasileiro. Como ele não tinha tempo para testar eu me ofereci (nerd é a [...]]]></description>
			<content:encoded><![CDATA[<p>Na visita do Jon &#8220;Maddog&#8221; ao Brasil para o 4º SoLiSC ele trouxe, como sempre, alguns brinquedinhos comprados nas viagens. Um deles é um receptor de televisão digital para o padrão ISDB-T usado no Brasil e Japão, mais especificamente ao padrão brasileiro. Como ele não tinha tempo para testar eu me ofereci (nerd é a vó).</p>
<p>O produto é chinês, fabricado por uma empresa chamada <a href="http://www.mygica.com/">MyGica</a>. A embalagem é simples, não mostra nem o nome da empresa que fabrica, informação essa que só consta no manual. É bem montado e acabamento aceitável para o preço (algo em torno de $50).</p>
<div id="attachment_251" class="wp-caption aligncenter" style="width: 235px"><a href="http://www.guax.net/wp-content/uploads/2009/12/embalagem.jpg" rel="lightbox[250]"><img class="size-medium wp-image-251" title="Embalagem STK8096" src="http://www.guax.net/wp-content/uploads/2009/12/embalagem-225x300.jpg" alt="O controle remoto fica na parte de trás da embalagem." width="225" height="300" /></a><p class="wp-caption-text">O controle remoto fica na parte de trás da embalagem.</p></div>
<p>O conteúdo da embalagem é tão completo quanto parece, só vem o essencial:</p>
<ul>
<li>O receptor em formato &#8220;dongle&#8221;</li>
<li>Antena VHF/UHF de alto ganho (diz ela)</li>
<li>Adaptador para ligar uma antena externa</li>
<li>Controle remoto desenhado para o software Total Media que vem no CD</li>
<li>Manual</li>
<li>Cd com driver e software de media</li>
</ul>
<div id="attachment_252" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.guax.net/wp-content/uploads/2009/12/conteudo.jpg" rel="lightbox[250]"><img class="size-medium wp-image-252" title="Conteúdo embalagem" src="http://www.guax.net/wp-content/uploads/2009/12/conteudo-300x225.jpg" alt="Nada mais que o suficiente" width="300" height="225" /></a><p class="wp-caption-text">Nada mais que o suficiente</p></div>
<p>Um detalhe estranho, o driver para windows que vem no CD <strong>não é o driver correto</strong> para o chip de captura. Encontrei o driver correto em um <a href="http://www.chw.net/foro/otro-hardware-f27/280298-adaptador-isdb-t-tv-digital-p2.html">fórum chileno</a> e <a href="http://www.guax.net/pub/windows/mygica-s870-driver/DriverISDB-T.rar">deixo aqui</a> caso alguém precise.</p>
<p>Não vou cobrir a instalação dele no windows, então vamos ao que interessa, ao plugar ele no seu computador você não vai ter muitas informações.</p>
<pre>usb 1-1: new high speed USB device using ehci_hcd and address 6
usb 1-1: configuration #1 chosen from 1 choice
usb 1-1: New USB device found, idVendor=10b8, idProduct=1fa0
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1: Product: STK8096GP
usb 1-1: Manufacturer: DiBcom
usb 1-1: SerialNumber: 1</pre>
<p>Isso não colabora muito mas nos dá o fabricante e o modelo do chip. Com isso é fácil dar uma googlada sobre o funcionamento dele no Linux. A boa notícia é que o fabricante é bonzinho e colaborou com a confecção do driver. Temos por tanto um suporte ainda inicial ao ISDB-T no <a href="http://www.linuxtv.org/">v4l-dvb</a>. Uma questão de fazer o download, um make, make install e tudo pronto. Para isso basta pegar o trunk (já que é experimental vamos viver perigosamente).</p>
<pre>$ hg clone http://www.linuxtv.org/hg/v4l-dvb
$ cd v4l-dvb
$ make
$ su
# make rmmod
# make install</pre>
<p>Você pode substituir o su com sudo se preferir. Após instalar os driver ainda precisamos do firmware do dispositivo. Basta fazer o <a href="http://www.guax.net/pub/windows/mygica-s870-driver/dvb-usb-dib0700-1.20.fw">download</a> e colocá-lo em /lib/firmware/ que tudo estará bem. A resposta do dmesg após replugar o dispositivo agora deverá ser algo como:</p>
<pre>dib0700: loaded with support for 14 different device-types
dvb-usb: found a 'DiBcom STK8096GP reference design' in cold state, will try to load
a firmware
firmware: requesting dvb-usb-dib0700-1.20.fw
dvb-usb: downloading firmware from file 'dvb-usb-dib0700-1.20.fw'
dib0700: firmware started successfully.
dvb-usb: found a 'DiBcom STK8096GP reference design' in warm state.
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (DiBcom STK8096GP reference design)
DVB: registering adapter 0 frontend 0 (DiBcom 8000 ISDB-T)...
DiB0090: successfully identified
input: IR-receiver inside an USB DVB receiver as /devices/...
dvb-usb: schedule remote query interval to 50 msecs.
dvb-usb: DiBcom STK8096GP reference design successfully initialized and connected.
usbcore: registered new interface driver dvb_usb_dib0700</pre>
<p>Não é lindo? <img src='http://www.guax.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Com isso nos temos o dispositivo funcionando mas ainda falta o pedaço que me fez perder algumas horas. Escanear os canais para poder ver o Faustão na telinha do seu PC (ele cabe agora que emagreceu). Para isso nos vamos usar as ferramentas que o driver ali em cima já instalou antes junto com os módulos. A aplicação scan fará isso mas ela precisa de informações para fazer seu trabalho, ela precisa de uma lista de freqüências e ranges para poder escanear por recepção. Essa lista eu consegui primeiramente no <a href="http://dougsland.livejournal.com/103169.html">blog de dougsland</a> (que não parece ter o nome real divulgado no site). Sabendo o que eu estava procurando (frequency table) eu consegui encontrar no excelente wiki do linuxtv.org em http://www.linuxtv.org/wiki/index.php/ISDB-T_Frequency_Table</p>
<p>Copie o conteúdo e cole em um ch.conf então rode o comando scan para gerar a lista de canais disponíveis:</p>
<pre>$ scan ch.conf &gt; channels.conf</pre>
<p>Isso gerará um monte de erros como:</p>
<pre>&gt;&gt;&gt; tune to: 503142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_3_4:FEC_AUTO:QAM_
AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_NONE</pre>
<p>Mas não se preocupe, são normais. Se você tem recepção no meio desse monte de erros você verá um:</p>
<pre>Network Name 'RBS TV FLOPS'
0x0000 0xdc60: pmt_pid 0x0101 (null) -- RBS TV HD (???)
0x0000 0xdc78: pmt_pid 0x1fc8 (null) -- RBS TV 1seg (???)</pre>
<p>E então seu arquivo channels.conf terá as informações de canais para que você possa vê-los. Se você está em Florianópolis Santa Catarina Brasil por volta do ano de 2009 você terá somente dois canais, um 1 seg e outro full seg que são, infelizmente:</p>
<pre>RBS TV HD:587142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_3_4:FEC_AUTO:QAM
_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_NONE:273:274:
56416
RBS TV 1seg:587142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_3_4:FEC_AUTO:QAM
_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_NONE:529:530:
56440</pre>
<p>Afinal a Band ainda tem as madrugadas de sábado pra animar a garotada. Com isso nós ficamos no ultimo passo: assistir televisão. Mas antes, uma explicação rápida antes sobre a zona toda de TV digital (não achou que eu ia te liberar agora né?).</p>
<p>O mundo todo usa os tais dos DVB-S, DVB-T, DVB-S, DVB-C e ATSC, o Japão  criou e usa o ISDB-T, o Brasil adotou ele e o usa para transmissão, inclusive usa o mesmo range de freqüências, se as tabelas não são iguais elas são muito parecidas. A transmissão digital usa 13 segmentos, 1 deles esse padrão deixou reservado para transmissão de baixa qualidade para dispositivos móveis, com telas pequenas, ou baixa capacidade. Sim, esse é o tal do 1seg que você vai ver bastante. O resto é transmitido em 12 segmentos (full-seg) e nesses estão as transmissões standard e hd. O codec de audio usado é o AAC e o de vídeo e o H264.</p>
<p>Toda a parte anterior está resolvida pelo driver, linda e funcional, um charme tecnológico. Mas&#8230; a questão do codec ainda não. Apesar do MPlayer ter colocado suporte por agora ainda não está bom até a redação desse texto. A unica alternativa viável por agora é o VLC que tem suporte a h264 e AAC. Além de se entender com o DVB.</p>
<p>Para fazer funcionar basta você clicar em Exibir &gt; Lista de Reprodução, clicar no mais, adicionar o channels.conf que você criou, dar dois cliques e pronto, simples assim.</p>
<div id="attachment_262" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.guax.net/wp-content/uploads/2009/12/vlc.png" rel="lightbox[250]"><img class="size-medium wp-image-262" title="TV com VLC" src="http://www.guax.net/wp-content/uploads/2009/12/vlc-300x97.png" alt="No fantástico =" width="300" height="97" /></a><p class="wp-caption-text">No fantástico =) </p></div>
<p>Mas vamos ao que interessa, e o HD??? Bom, veja bem. O h264 garante uma alta compressão com pouca perda de qualidade, mas isso tem um custo, um rim. Digo, um processador, você precisa ter uma máquina BOA para descodificar o vídeo em HD 1080p. Tanto que no linux eu não consegui tocar direito por conta da implementação do h264, no áudio é perfeito sem nenhum problema, vídeo vai travando, inclusive no poderoso windows (por conta do meu proc dai). Pra ser sincero, no VLC eu não consegui visualizar nem o 1seg direito por conta da descodificação do h264 o vídeo fica com frames repetidos (falha na interpolação ou algo por ai). Você pode ter mais sorte em uma versão mais nova ou melhor do VLC (não desista padawan).</p>
<div id="attachment_264" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.guax.net/wp-content/uploads/2009/12/rbshd.png" rel="lightbox[250]"><img class="size-medium wp-image-264" title="rbshd" src="http://www.guax.net/wp-content/uploads/2009/12/rbshd-300x175.png" alt="Quero ver você pegar momento melhor pro screenshot." width="300" height="175" /></a><p class="wp-caption-text">Quero ver você pegar momento melhor pro screenshot.</p></div>
<p>Sobre o controle remoto, ele funciona e o driver reconhece mas eu não tive tempo de fazer ele fazer algo útil. A prova são as mensagens que o driver põe no kernel. Basta tratá-las e usar, mas não é algo que um usuário comum faria, então fica pra outra hora (talvez nunca <img src='http://www.guax.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<pre>dib0700: Unknown remote controller key: 0000 20 df
dib0700: Unknown remote controller key: 0000 20 df</pre>
<p>Todo o processo acima foi feito em cima de um Slackware Linux com versão entre 12.2 e current pré 13.1. (sim, uma zona).</p>
<p><strong>Ps.</strong> Gostaria de agradecer a Douglas Conrad que me deixou ficar com o equipamento por uns dias para testes. Foi divertido <img src='http://www.guax.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><strong>UPDATE (15/06/2010): Aparentemente o kernel 2.6.33.3 já inclui os drivers para dvb-usb e para o dibcom 0700. Você ainda precisa do firmware do dispositivo que está linkado nesse artigo e também é necessário o dvb-apps instalado para ter a ferramenta scan.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.guax.net/2009/12/review-receptor-isdb-t-dibcom-stk8096gp-tv-digital-do-brasil/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Chromium e Slackware</title>
		<link>http://www.guax.net/2009/09/chromium-e-slackware/</link>
		<comments>http://www.guax.net/2009/09/chromium-e-slackware/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 00:42:19 +0000</pubDate>
		<dc:creator>guax</dc:creator>
				<category><![CDATA[slackware]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[chromium]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[recomendação]]></category>

		<guid isPermaLink="false">http://www.guax.net/?p=160</guid>
		<description><![CDATA[Finalmente após anos de tortura tendo que aguentar as travadas do Firefox chegou o momento de ter um browser leve, rápido e com renderização de fontes decente no linux. Chegou a vez do Chromium, projeto open source do Google que é a fonte do browser Chrome. Um amigo meu estava usando ele no ubuntu eu [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.guax.net/wp-content/uploads/2009/09/Chromium_Icon.png" rel="lightbox[160]"><img class="aligncenter size-medium wp-image-163" title="Chromium" src="http://www.guax.net/wp-content/uploads/2009/09/Chromium_Icon-300x287.png" alt="Chromium" width="180" height="172" /></a></p>
<p>Finalmente após anos de tortura tendo que aguentar as travadas do Firefox chegou o momento de ter um browser leve, rápido e com renderização de fontes decente no linux. Chegou a vez do <a href="http://chromium.org/">Chromium</a>, projeto open source do Google que é a fonte do browser <a href="http://www.google.com/chrome">Chrome</a>. Um amigo meu estava usando ele no ubuntu eu resolvi rodar ele no Slackware. Descreverei o processo de instalação e a minha análise sobre esse beta.</p>
<p>Primeiro instale o <a href="http://connie.slackware.com/~alien/slackbuilds/mozilla-nss/">mozilla-nss</a> a provável unica dependência que você vai precisar.</p>
<p>Eu não criei um pacote para o chromium, talvez eu o faça no futuro. Até lá baixe o <a href="http://build.chromium.org/buildbot/snapshots/chromium-rel-linux/">ultimo tarball</a> e rode só pro seu usuário, caso você tenha problemas com os nomes estranhos criados pelo pessoal que empacota para o debian (alguém faz ideia de por que o .d??) faça o seguinte que tirei <a href="http://ifeelalittlestupid.wordpress.com/2009/06/09/using-the-chromium-linux-beta-build-on-slackware-12-2/">daqui</a>.</p>
<pre>ln -s /usr/lib/libplds4.so /usr/lib/libplds4.so.1d
ln -s /usr/lib/libnss3.so /usr/lib/libnss3.so.1d
ln -s /usr/lib/libsmime3.so /usr/lib/libsmime3.so.1d
ln -s /usr/lib/libssl3.so /usr/lib/libssl3.so.1d
ln -s /usr/lib/libnssutil3.so /usr/lib/libnssutil3.so.1d
ln -s /usr/lib/libnspr4.so /usr/lib/libnspr4.so.0d
ln -s /usr/lib/libplc4.so /usr/lib/libplc4.so.0d
ln -s /usr/lib/libplds4.so /usr/lib/libplds4.so.0d</pre>
<p>Tente rodar o chrome primeiro, pode ser que tenha mudado no ultimo build. And there you go. <img src='http://www.guax.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_167" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.guax.net/wp-content/uploads/2009/09/chromium.png" rel="lightbox[160]"><img class="size-medium wp-image-167" title="Chromium" src="http://www.guax.net/wp-content/uploads/2009/09/chromium-300x203.png" alt="Usando um tema escuro pra ficar mais discreto." width="300" height="203" /></a><p class="wp-caption-text">Usando um tema escuro pra ficar mais discreto.</p></div>
<p>A análise: é rápido, <strong>muito</strong> rápido. Tem corretor ortográfico . E tudo que tem na versão windows. Ainda não tem sua ferramenta que substitui o <a href="http://getfirebug.com/">Firebug</a> madura o suficiente para ser usada ao invés do inseto flamejante mas da pro gasto em toda a parte de navegação. Outro contra é a falta de <a href="http://gears.google.com/">gears</a> mas dizem que o próprio html 5 terá suporte para armazenagem, aguardaremo então até o Chromium e o GMail darem suporte para isso. :/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guax.net/2009/09/chromium-e-slackware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guardando Windows no Armário e Restaurando</title>
		<link>http://www.guax.net/2009/09/guardando-windows-no-armario-e-restaurando/</link>
		<comments>http://www.guax.net/2009/09/guardando-windows-no-armario-e-restaurando/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 21:45:58 +0000</pubDate>
		<dc:creator>guax</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[autochk]]></category>
		<category><![CDATA[bsod]]></category>
		<category><![CDATA[dual boot]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.guax.net/?p=151</guid>
		<description><![CDATA[Todo nerd sabe que partições ocupadas são tão tentadoras a formatação pra instalação de novos sistemas quanto as vazias, se não mais. A uns 4 meses atrás eu estava com um windows xp em uma partição de 30G. Queria formatar testar o kde4 do slackware current mas não podia perder meu progresso no CS Condition [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_154" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.guax.net/wp-content/uploads/2009/09/autochk.jpg" rel="lightbox[151]"><img class="size-medium wp-image-154" title="Autochk.exe Not Found" src="http://www.guax.net/wp-content/uploads/2009/09/autochk-300x225.jpg" alt="Autochk.exe Not Found, Lembra de mudar o tipo da partição." width="300" height="225" /></a><p class="wp-caption-text">Autochk.exe Not Found, Lembre-se de mudar o tipo da partição.</p></div>
<p>Todo nerd sabe que partições ocupadas são tão tentadoras a formatação pra instalação de novos sistemas quanto as vazias, se não mais. A uns 4 meses atrás eu estava com um windows xp em uma partição de 30G. Queria formatar testar o kde4 do slackware current mas não podia perder meu progresso no CS Condition Zero e no Abe&#8217;s Exodus então eu resolvi colocar a partição pra dormir no hd externo. Pra isso eu usei o dd pra fazer um backup em arquivo.</p>
<pre># dd if=/dev/sda1 of=/mnt/data/windows.img</pre>
<p>Formatei a partição e instalei o Slackware 13.0. Isso manteve meu windows dormindo por 4 meses quando bateu aquela vontade de jogar um CS. Pensei tudo bem, como as partições não haviam mudado de tamanho bastava um dd denovo e tudo estaria devolta. Ledo engano, apesar de o <code>$ dd if=/mnt/data/windows.img of=/dev/sda1</code> ter sido um sucesso, descomentei as linhas do lilo.conf que colocavam o windows devolta no boot e reiniciei, tela de boot. Então uma rápida mensagem avisando que faltava um tal de autochk.exe uma tela azul (bsod pros intimos) e um restart. Depois de um tempo pesquisando eu peguei o pulo do gato. Quanto eu formatei minha partição para instalação do slackware seu tipo mudou de HPFS NTFS para Linux. Rodei o cfdisk mudei pra 0&#215;07 (HPFS NTFS) e rebootei. Bingo, tudo funcionou, meu cs ta la como antes <img src='http://www.guax.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p>Ai fica a dica, se quiser guardar seu windows ou outro sistema no armário por um tempo execute os dois comandos acima quando julgar necessário. E atente ao tipo da partição quando for restaurar de Linux para Windows e vice-versa. Para verificar o tipo é só rodar um <code>fdisk -l /dev/xxx</code> onde xxx é seu disco. Ex:</p>
<pre>root@theguide:~# fdisk -l /dev/sda

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0xc6c894fd

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        3824    30716248+   7  <strong>HPFS ou NTFS</strong>
/dev/sda2            3825        7648    30716280   83  Linux
/dev/sda3            7649       14465    54757552+  83  Linux
/dev/sda4           14466       14593     1028160   82  Linux swap</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.guax.net/2009/09/guardando-windows-no-armario-e-restaurando/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magia Negra das Threads em Python</title>
		<link>http://www.guax.net/2009/09/magia-negra-das-threads-em-python/</link>
		<comments>http://www.guax.net/2009/09/magia-negra-das-threads-em-python/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 00:42:56 +0000</pubDate>
		<dc:creator>guax</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[threads]]></category>

		<guid isPermaLink="false">http://www.guax.net/?p=108</guid>
		<description><![CDATA[Certo dia estava eu a pensar sobre a vida o universo e tudo mais e antes que 42 viesse a minha mente foi pedido que eu implementasse um disparador de SMS&#8217;s. Para isso eu precisava fazer disparos simultâneos em X canais gsm. Requisito óbvio: preciso de threads. PHP, a linguagem que usamos para quase tudo [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_130" class="wp-caption aligncenter" style="width: 410px"><a href="http://www.guax.net/wp-content/uploads/2009/09/Python_logo1.png" rel="lightbox[108]"><img class="size-full wp-image-130" title="Python Threads" src="http://www.guax.net/wp-content/uploads/2009/09/Python_logo1.png" alt="Python Threads" width="400" height="120" /></a><p class="wp-caption-text">Python Threads</p></div>
<p>Certo dia estava eu a pensar sobre a vida o universo e tudo mais e antes que 42 viesse a minha mente foi pedido que eu implementasse um disparador de SMS&#8217;s. Para isso eu precisava fazer disparos simultâneos em X canais gsm. Requisito óbvio: preciso de threads. PHP, a linguagem que usamos para quase tudo na aplicação não tem um suporte bom a threads então fui atrás de outra linguagem para o fazer.</p>
<p><a href="http://www.python.org/">Python</a> atravessou meu caminho e nas minhas brincadeiras com a cobra (ui!) eu apanhei, jesus sabe que eu apanhei dessa pseudo-linguagem medonha e caracu (eu xinguei de coisa pior enquanto era humilhado pela até então ignorância na linguagem). Eu apanhei por que o mau costume de só ter usado <a href="http://java.sun.com/">Java</a> (pausa para uivos e pedras&#8230;.) para trabalhar com threads me deixou preguiçoso e mau acostumado a uma declaração bem mais simples de <strong>sincronismo</strong> entre métodos, bastava um synchronized e tudo estava funcionando.</p>
<p>Python ao contrário de Java não é nada thread-safe. Todas as chamadas simples podem ser desastrosas se mexem com <strong>recursos compartilhados</strong> entre as threads.</p>
<h3>Sincronizando</h3>
<p>Já que a python não é thread-safe temos que assumir essa responsabilidade no lugar da linguagem e sincronizar as chamadas com Locks, Semáforos e afins. Não é o fim do mundo, mas que é chato, é. Se quizermos por exemplo fazer a inserção de dados no banco de dados e ter o resultado disso logo após cada insert devemos sincronizar os inserts e commits já que o componente MySQLdb não faz esse controle para nós.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> Inserter<span style="color: black;">&#40;</span><span style="color: #008000;">object</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, lck,db<span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">lock</span> = lck<span style="color: #66cc66;">;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">db</span> = db
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> insert<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, insert<span style="color: black;">&#41;</span>:
        cursor = <span style="color: #008000;">self</span>.<span style="color: black;">db</span>.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">try</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">lock</span>.<span style="color: black;">acquire</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span>insert<span style="color: black;">&#41;</span>
            cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;commit&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">finally</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">lock</span>.<span style="color: black;">release</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<h3>Queue</h3>
<p>Outro componente muito útil quando se utiliza threads são as <strong>Filas</strong>. Filas são fifos (first-in first-out) que enfileiram ações que você gostaria que fossem executadas em paralelo por threads ou que simplesmente sejam executadas em determinada ordem.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Importamos o módulo</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">Queue</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">Queue</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> run<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:
            <span style="color: #ff7700;font-weight:bold;">try</span>:
                <span style="color: #008000;">self</span>.<span style="color: black;">lock</span>.<span style="color: black;">acquire</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
                <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">fila</span>.<span style="color: black;">empty</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
                    <span style="color: #ff7700;font-weight:bold;">break</span>
                item = <span style="color: #008000;">self</span>.<span style="color: black;">fila</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">finally</span>:
                <span style="color: #008000;">self</span>.<span style="color: black;">lock</span>.<span style="color: black;">release</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
            <span style="color: #008000;">self</span>.<span style="color: black;">printer</span>.<span style="color: black;">imprime</span><span style="color: black;">&#40;</span>item<span style="color: black;">&#41;</span></pre></div></div>

<p>Uma nota sobre Filas é que não se deve usar um <code>if not queue.empty()</code> e depois tentar dar um <code>queue.get()</code> já que no tempo entre esses dois acessos aos métodos outra thread pode pegar o ultimo elemento. É necessário que você simplesmente pegue o elemento e trate a exceção ou use Lock nessa parte do método.</p>
<p>ps. estranho, mas python implementa LIFO (pilha) no modulo Queue. <img src='http://www.guax.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.guax.net/2009/09/magia-negra-das-threads-em-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atualizando Slackware 12.2 para 13.0</title>
		<link>http://www.guax.net/2009/08/atualizando-slackware-12-2-para-13-0/</link>
		<comments>http://www.guax.net/2009/08/atualizando-slackware-12-2-para-13-0/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 22:12:39 +0000</pubDate>
		<dc:creator>guax</dc:creator>
				<category><![CDATA[slackware]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[nerd]]></category>

		<guid isPermaLink="false">http://www.guax.net/?p=90</guid>
		<description><![CDATA[Dia 26 de agosto foi lançada a versão numero 13.0 do Slackware Linux. Com kde 4, novo sistema de pacotes e toneladas de mudanças a atualização pode confundir algumas pessoas. Aqui fica meu passo a passo de como atualizar: Edite seu /etc/slackpkg/mirrors e coloque o repositório do 13.0 slackpkg update Aqui vem o macete. Primeiro [...]]]></description>
			<content:encoded><![CDATA[<p>Dia 26 de agosto <a href="http://slackware.com/announce/13.0.php">foi lançada</a> a versão numero 13.0 do <a href="http://www.slackware.com/">Slackware Linux</a>. Com kde 4, novo sistema de pacotes e toneladas de mudanças a atualização pode confundir algumas pessoas. Aqui fica meu passo a passo de como atualizar:</p>
<ol>
<li>Edite seu /etc/slackpkg/mirrors e coloque o repositório do 13.0</li>
<li>slackpkg update</li>
</ol>
<p>Aqui vem o macete. Primeiro atualize esses dois indivíduos e instale esse outro:</p>
<ol>
<li>slackpkg install xz</li>
<li>slackpkg upgrade pkgtools</li>
<li>slackpkg upgrade slackpkg</li>
</ol>
<p>Por fim, é só executar o de sempre:</p>
<ol>
<li>slackpkg install-new</li>
<li>slackpkg upgrade-all</li>
</ol>
<p>Have fun com seu Slackware 13.0 <img src='http://www.guax.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.guax.net/2009/08/atualizando-slackware-12-2-para-13-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
