<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.1" -->
<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/"
	>

<channel>
	<title>Bastos</title>
	<link>http://tiago.zusee.com/blog</link>
	<description>let's code!</description>
	<pubDate>Thu, 18 Sep 2008 05:52:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<item>
		<title>Pattern matching para ruby?</title>
		<link>http://tiago.zusee.com/blog/2008/09/18/pattern-matching-para-ruby/</link>
		<comments>http://tiago.zusee.com/blog/2008/09/18/pattern-matching-para-ruby/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 05:52:37 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[erlang]]></category>

		<category><![CDATA[hacks]]></category>

		<category><![CDATA[haskell]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/09/18/pattern-matching-para-ruby/</guid>
		<description><![CDATA[Apenas um hack para mostrar como Ruby é legal!

Tem uma biblioteca legal também chamada Functor: http://github.com/dyoder/functor.
Claro que se você, assim como eu, gosta mesmo desse tipo de feature, busque mais sobre Erlang ou Haskell.
]]></description>
			<content:encoded><![CDATA[<p>Apenas um hack para mostrar como Ruby é legal!</p>
<p><script src="http://gist.github.com/11380.js"></script></p>
<p>Tem uma biblioteca legal também chamada Functor: <a href="http://github.com/dyoder/functor">http://github.com/dyoder/functor</a>.</p>
<p>Claro que se você, assim como eu, gosta mesmo desse tipo de feature, busque mais sobre Erlang ou Haskell.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/09/18/pattern-matching-para-ruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Erlang</title>
		<link>http://tiago.zusee.com/blog/2008/09/16/erlang/</link>
		<comments>http://tiago.zusee.com/blog/2008/09/16/erlang/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 02:46:20 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[erlang]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/09/16/erlang/</guid>
		<description><![CDATA[Estou lendo o Programming Erlang, sempre tive vontade de aprender uma linguagem funcional e Erlang é funcional, mas com um plus que me interessa muito, concorrência! Além de outra coisa que eu sempre quis em Ruby ou Python, pattern matching, o que faz meus olhos geeks brilharem!
]]></description>
			<content:encoded><![CDATA[<p>Estou lendo o <a href="http://www.pragprog.com/titles/jaerlang/programming-erlang">Programming Erlang</a>, sempre tive vontade de aprender uma linguagem funcional e Erlang é funcional, mas com um plus que me interessa muito, concorrência! Além de outra coisa que eu sempre quis em Ruby ou Python, pattern matching, o que faz meus olhos geeks brilharem!</p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/09/16/erlang/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Django 1.0, Chrome e Python2.6</title>
		<link>http://tiago.zusee.com/blog/2008/09/03/django-10-chrome-e-python26/</link>
		<comments>http://tiago.zusee.com/blog/2008/09/03/django-10-chrome-e-python26/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 06:20:24 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[chrome]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/09/03/django-10-chrome-e-python26/</guid>
		<description><![CDATA[Lançado 1.0rc1, Wooohoooo! E veja a nova documentação, que sempre foi um ponto muito forte no Django.
O Google lançou o Chrome! Subprocessos, threads, webkit, V8, opensource! Em um teste de 2 minutos numa VM com Windows posso dizer que ele é lindo!
Por falar em subprocessos, Python 2.6 foi lançado tem suporte a eles, quer dizer, [...]]]></description>
			<content:encoded><![CDATA[<p>Lançado 1.0rc1, <a href="http://www.djangoproject.com/weblog/2008/sep/02/10-rc1/">Wooohoooo</a>! E veja a <a href="http://docs.djangoproject.com/">nova documentação</a>, que sempre foi um ponto muito forte no Django.</p>
<p>O Google lançou o <a href="http://google.com/chrome">Chrome</a>! Subprocessos, threads, webkit, <a href="http://code.google.com/apis/v8/">V8</a>, opensource! Em um teste de 2 minutos numa VM com Windows posso dizer que ele é lindo!</p>
<p>Por falar em subprocessos, Python 2.6 foi lançado tem <a href="http://docs.python.org/dev/library/multiprocessing.html#module-multiprocessing">suporte</a> a eles, quer dizer, uma ótima alternativa as <a href="http://docs.python.org/api/threads.html">threads</a> e o <a href="http://en.wikipedia.org/wiki/Global_Interpreter_Lock">GIL</a>!</p>
<p>Essa semana começou ótima!</p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/09/03/django-10-chrome-e-python26/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Deu muito errado, graças a Deus!</title>
		<link>http://tiago.zusee.com/blog/2008/08/24/deu-muito-errado-gracas-a-deus/</link>
		<comments>http://tiago.zusee.com/blog/2008/08/24/deu-muito-errado-gracas-a-deus/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 05:28:56 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[archlinux]]></category>

		<category><![CDATA[flames]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[windows]]></category>

		<category><![CDATA[http://luthiano.com/2008/06/17/sobre-computadores-velho]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/08/24/deu-muito-errado-gracas-a-deus/</guid>
		<description><![CDATA[Lendo esse post aqui onde ele fala que alguma coisa deu errado com o Linux eu só tenho a falar uma coisa, graças a Deus. Ele não tem essa fatia de mercado por causas que vão bem além do KDE ou do GNOME. A usabilidade de um Gnome é muito boa na verdade! De fato [...]]]></description>
			<content:encoded><![CDATA[<p>Lendo esse post <a href="http://luthiano.com/2008/06/17/sobre-computadores-velhos-linux-e-a-web-20/#more-50">aqui</a> onde ele fala que alguma coisa deu errado com o Linux eu só tenho a falar uma coisa, graças a Deus. Ele não tem essa fatia de mercado por causas que vão bem além do KDE ou do GNOME. A usabilidade de um Gnome é muito boa na verdade! De fato um grande problema são drivers. Drivers (ATI&#8230;) e especificações fechadas da Microsoft (SMB&#8230;) e outras são grandes problemas! Mas o Linux é seguro, é confiável e tem inúmeras vantagens que o Windows nem pensa em ter&#8230;</p>
<p>A briga também não é só para quem tem um rosto bonito não, fique atento no desenvolvimento do Kernel, do Wine, do Gnome. Não é só concurso de quem tem a melhor cara, e sim de quem tem a melhor interface e o melhor desempenho. </p>
<p>Os desenvolvedores de SO não se esquecem da web2.0 não, web2.0 é algo novo, onde o contexto realmente relevante é conteúdo, leva tempo os aplicativos de um SO se adaptarem a essa nova realidade, mas muitos já estão como Photoshop, Firefox ou F-spot.</p>
<p>Outro problema grande é que boa parte dessas aplicações usam flash ou muito javascript, para isso nossos browsers tem que ser bastante rápidos e as equipes do Firefox ou Webkit por exemplo já estão correndo atrás para prover a tecnologia que aplicativos com base na web precisam.</p>
<p>Web é realmente a plataforma que vai vingar para boa parte dos softwares mas os SOs vão sim tem um papel importante, não quero usar meu banco online e um vírus entrar no meu pc, pegar minha senhas e tirar dinheiro da minha conta.</p>
<p>Sou desenvolvedor, uso Linux, e não sou xiita não, OSX é massa <img src='http://tiago.zusee.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> Sou 1% feliz em não ter que me preocupar com segurança, estabilidade e ter na minha mão algo que realmente posso utilizar e tirar proveito da melhor maneira possível!</p>
<p>ps: FreeBSD não é Linux!</p>
<p>*Esse post foi escrito em um Laptop HP, usando Archlinux (sem dual boot), Firefox e Awesome, ah, Windows XP não instala com o SATA habilitado, não tem driver&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/08/24/deu-muito-errado-gracas-a-deus/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dtrace</title>
		<link>http://tiago.zusee.com/blog/2008/08/13/dtrace/</link>
		<comments>http://tiago.zusee.com/blog/2008/08/13/dtrace/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 02:21:05 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[dtrace]]></category>

		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/08/13/dtrace/</guid>
		<description><![CDATA[Bem, minhas experiências com o Solaris 10 não foram das melhores, Linux é user friendly 
Mas hoje tive boas horas com ele, instalei o Dtrace e vi que realmente é uma ferramenta bastante legal, pensando até em instalar o Open Solaris na máquina, mesmo que seja no virtual-box.
]]></description>
			<content:encoded><![CDATA[<p>Bem, minhas experiências com o Solaris 10 não foram das melhores, Linux é user friendly <img src='http://tiago.zusee.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Mas hoje tive boas horas com ele, instalei o <a href="http://en.wikipedia.org/wiki/DTrace">Dtrace</a> e vi que realmente é uma ferramenta bastante legal, pensando até em instalar o Open Solaris na máquina, mesmo que seja no virtual-box.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/08/13/dtrace/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP 5.3 com suporte a closures e funções anônimas</title>
		<link>http://tiago.zusee.com/blog/2008/08/08/php-53-com-suporte-a-closures-e-funcoes-anonimas/</link>
		<comments>http://tiago.zusee.com/blog/2008/08/08/php-53-com-suporte-a-closures-e-funcoes-anonimas/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 02:28:21 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/08/08/php-53-com-suporte-a-closures-e-funcoes-anonimas/</guid>
		<description><![CDATA[Bem, um código vale mais que mil palavras:

$array = array(1, 2, 3, 4, 5);
array_map(function($text) { echo $text, PHP_EOL; }, $array);

Via http://gist.github.com/4646 e http://wiki.php.net/rfc/closures
]]></description>
			<content:encoded><![CDATA[<p>Bem, um código vale mais que mil palavras:</p>
<pre class="prettyprint">
$array = array(1, 2, 3, 4, 5);
array_map(function($text) { echo $text, PHP_EOL; }, $array);
</pre>
<p>Via <a href="http://gist.github.com/4646">http://gist.github.com/4646</a> e <a href="http://wiki.php.net/rfc/closures">http://wiki.php.net/rfc/closures</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/08/08/php-53-com-suporte-a-closures-e-funcoes-anonimas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Para pegar os classificados do Diário do Nordeste com Ruby :D</title>
		<link>http://tiago.zusee.com/blog/2008/08/03/para-pegar-os-classificados-do-diario-do-nordeste-com-ruby-d/</link>
		<comments>http://tiago.zusee.com/blog/2008/08/03/para-pegar-os-classificados-do-diario-do-nordeste-com-ruby-d/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 00:37:03 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[hack]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/08/03/para-pegar-os-classificados-do-diario-do-nordeste-com-ruby-d/</guid>
		<description><![CDATA[Para quem detesta a interface do classificados do Diário do Nordeste (Fortaleza):

#!ruby
require 'rubygems'
require 'hpricot'
require 'open-uri'
doc = Hpricot(open("http://diariodonordeste.globo.com/classif/consultando.asp?Filtro=#{$*[0]}&#038;Operador=OU&#038;Filtro2="))
doc.search(".anuncio").each do &#124; anuncio &#124;
    puts '****'
    puts anuncio.inner_text.strip
    puts anuncio.inner_text.scan(/[0-9]{4}+\.[0-9]{4}+/)
end

Para usar:
ruby diario.rb notebook
]]></description>
			<content:encoded><![CDATA[<p>Para quem detesta a interface do classificados do Diário do Nordeste (Fortaleza):</p>
<pre class="prettyprint">
#!ruby
require 'rubygems'
require 'hpricot'
require 'open-uri'
doc = Hpricot(open("http://diariodonordeste.globo.com/classif/consultando.asp?Filtro=#{$*[0]}&#038;Operador=OU&#038;Filtro2="))
doc.search(".anuncio").each do | anuncio |
    puts '****'
    puts anuncio.inner_text.strip
    puts anuncio.inner_text.scan(/[0-9]{4}+\.[0-9]{4}+/)
end
</pre>
<p>Para usar:<br />
ruby diario.rb notebook</p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/08/03/para-pegar-os-classificados-do-diario-do-nordeste-com-ruby-d/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pegando estatísticas do Memcached usando Sockets</title>
		<link>http://tiago.zusee.com/blog/2008/07/31/pegando-estatisticas-do-memcached-usando-sockets/</link>
		<comments>http://tiago.zusee.com/blog/2008/07/31/pegando-estatisticas-do-memcached-usando-sockets/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 20:32:31 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[bash]]></category>

		<category><![CDATA[memcached]]></category>

		<category><![CDATA[perl]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[sockets]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/07/31/pegando-estatisticas-do-memcached-usando-sockets/</guid>
		<description><![CDATA[Eu queria ver as estatísticas do memcached, então resolvi procurar na internet e achei isso: http://lists.danga.com/pipermail/memcached/2003-October/000354.html, mas ai resolvi mudar um pouco para pegar todos os dados e virou:

#!/usr/bin/perl
use IO::Socket;
my $socket = IO::Socket::INET-&#62;new( PeerAddr =&#62; $ARGV[0],
                    [...]]]></description>
			<content:encoded><![CDATA[<p>Eu queria ver as estatísticas do memcached, então resolvi procurar na internet e achei isso: <a href="http://lists.danga.com/pipermail/memcached/2003-October/000354.html">http://lists.danga.com/pipermail/memcached/2003-October/000354.html</a>, mas ai resolvi mudar um pouco para pegar todos os dados e virou:</p>
<pre class="prettyprint">
#!/usr/bin/perl
use IO::Socket;
my $socket = IO::Socket::INET-&gt;new( PeerAddr =&gt; $ARGV[0],
                                    PeerPort =&gt; $ARGV[1],
                                    Proto    =&gt; "tcp",
                                    Type     =&gt; SOCK_STREAM)
					or die($@);
print $socket "stats\n";
$out = &lt;$socket&gt;
while ($out ne "END\r\n") {
    if ($out =~ m/STAT (\w+) ([0-9.]+)/) {
        print "$1 $2\n";
    }
    $out = &lt;$socket&gt;
}
close($socket);
</pre>
<p>*Para usa: ./memcachecheck.pl IP PORTA</p>
<p>Mas ai um colega de trabalho (Rudy Matela) me falou que podia ser feito em shell script:</p>
<pre class="prettyprint">
#!/bin/sh
echo -e 'stats\nquit' | netcat $1 $2 | grep STAT | sed -e "s/STAT //"  -e "s/ /\\t/"
</pre>
<p>* Para usa: ./memcachecheck.sh IP PORTA</p>
<p>Muito mais legal! Porém resolvi também fazer em Ruby:</p>
<pre class="prettyprint">
#!/usr/bin/ruby
require 'socket'
out = TCPSocket.open($*[0],$*[1]) do |socket|
  socket.puts 'stats'
  socket.puts 'quit'
  socket.read
end
out.each { |line| print line.gsub(/STAT /,"") if line =~ /STAT (\w+) ([0-9.]+)/ }
</pre>
<p>* Para usa: ./memcachecheck.rb IP PORTA</p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/07/31/pegando-estatisticas-do-memcached-usando-sockets/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Diferença de Pro.new para lambda em Ruby</title>
		<link>http://tiago.zusee.com/blog/2008/07/25/diferenca-de-pronew-para-lambda-em-ruby/</link>
		<comments>http://tiago.zusee.com/blog/2008/07/25/diferenca-de-pronew-para-lambda-em-ruby/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 14:52:36 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/07/25/diferenca-de-pronew-para-lambda-em-ruby/</guid>
		<description><![CDATA[Um colega estava com um problema, algo como isso aqui não funcionava como ele desejava:

def g
x = Proc.new { return 'ok' }
x.call
puts "Não irá mostrar isso"
end

Depois da chamada do pro x não se conseguia mais executar o resto da função. Ai tentando com lambda:

def g
x = lambda { return 'ok' }
x.call
puts "Irá mostrar isso"
end

Depois da [...]]]></description>
			<content:encoded><![CDATA[<p>Um colega estava com um problema, algo como isso aqui não funcionava como ele desejava:</p>
<pre class="prettyprint">
def g
x = Proc.new { return 'ok' }
x.call
puts "Não irá mostrar isso"
end
</pre>
<p>Depois da chamada do pro x não se conseguia mais executar o resto da função. Ai tentando com lambda:</p>
<pre class="prettyprint">
def g
x = lambda { return 'ok' }
x.call
puts "Irá mostrar isso"
end
</pre>
<p>Depois da chamada de x a função continuava a ser executada, procurando a diferença, bem é o seguinte, todo o centexto externo é passado para o Proc e assim se é chamado return ele não só executa return no escopo dele, ele executa um return no escopo externo! O mesmo não acontece com o lambda, que apesar de ver o contexto externo ele não &#8220;pega&#8221; para si esse contexto e usa como se fosse o dele.</p>
<p>Olhe esse exemplo:</p>
<pre class="prettyprint">
def x
  y = 1
  f = Proc.new{ return y + 1 }
  f.call
  puts y
end

def z
  h = 1
  f = lambda { return h + 1 }
  f.call
  puts h
end

puts 'x:'
x()
puts 'z:'
z()
</pre>
<p>Vai imprimir:</p>
<pre class="prettyprint">
x:
z:
1
</pre>
<p>Olhem esse outro:</p>
<pre class="prettyprint">
def x
  y = 1
  puts Proc.new{ y = y + 1 }.call
  puts y
end

def z
  h = 1
  puts lambda { h =  h + 1; return h }.call
  puts h
end

puts 'call x'
x()
puts 'call z'
z()
</pre>
<p>No proc ele muda o valor e sem o return dentro ele não saí do contexto de x, já o lambda altera o valor e mesmo com return não sai do contexto de z.</p>
<pre class="prettyprint">
call x
2
2
call z
2
2
</pre>
<p>Veja mais <a href="http://www.innig.net/software/ruby/closures-in-ruby.rb">aqui</a> e <a href="http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Method_Calls">aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/07/25/diferenca-de-pronew-para-lambda-em-ruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dica para Gitweb</title>
		<link>http://tiago.zusee.com/blog/2008/07/23/dica-para-gitweb/</link>
		<comments>http://tiago.zusee.com/blog/2008/07/23/dica-para-gitweb/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 06:23:41 +0000</pubDate>
		<dc:creator>Bastos</dc:creator>
		
		<category><![CDATA[apache]]></category>

		<category><![CDATA[cgi]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://tiago.zusee.com/blog/2008/07/23/dica-para-gitweb/</guid>
		<description><![CDATA[Quando forem colocar o gitweb em um servidor para sevir repositórios sem working copy e com working copy, lembre-se de colocar o usuário do servidor no grupo que tenha acesso a pasta do repositório, aparentemente se ele não estiver no grupo os repositórios criados com a opção &#8220;&#8211;bare&#8221; não aparecem listados.
]]></description>
			<content:encoded><![CDATA[<p>Quando forem colocar o <a href="http://git.or.cz/gitwiki/Gitweb">gitweb</a> em um servidor para sevir repositórios sem working copy e com working copy, lembre-se de colocar o usuário do servidor no grupo que tenha acesso a pasta do repositório, aparentemente se ele não estiver no grupo os repositórios criados com a opção &#8220;<a href="https://37s.backpackit.com/pub/1465067">&#8211;bare</a>&#8221; não aparecem listados.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiago.zusee.com/blog/2008/07/23/dica-para-gitweb/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
