<?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"
	>

<channel>
	<title>papodenerd.net</title>
	<atom:link href="http://www.papodenerd.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.papodenerd.net</link>
	<description>puts "NOT just another development weblog"</description>
	<pubDate>Sun, 28 Dec 2008 19:04:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Dica rápida: Twittando a partir da linha de comando</title>
		<link>http://www.papodenerd.net/dica-rapida-twittando-a-partir-da-linha-de-comando/</link>
		<comments>http://www.papodenerd.net/dica-rapida-twittando-a-partir-da-linha-de-comando/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 19:03:59 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
		
		<category><![CDATA[Dica Rápida]]></category>

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

		<guid isPermaLink="false">http://www.papodenerd.net/?p=86</guid>
		<description><![CDATA[Estava procurando uma forma de escrever no twitter de forma rápida e sem precisar abrir nenhum cliente, nem mesmo o site. Foi quando uma pergunta rápida ao guru me trouxe esse artigo.
Fiz algumas modificações (não conseguia postar mensagems com !) e acabei com esse script:

#!/usr/bin/ruby
`curl --basic --user &#34;&#60;myusername&#62;:&#60;mysecretpassword&#62;&#34; --data-ascii &#34;status=#{ARGV.join(&#34; &#34;)}&#34; &#34;http://twitter.com/statuses/update.json&#34;`

Substitua  e  [...]]]></description>
			<content:encoded><![CDATA[<p>Estava procurando uma forma de escrever no twitter de forma rápida e sem precisar abrir nenhum cliente, nem mesmo o site. Foi quando uma pergunta rápida ao <a href="http://www.google.com.br">guru</a> me trouxe <a href="http://binnyva.blogspot.com/2007/03/using-twitter-part-1-command-line.html">esse artigo</a>.<br />
Fiz algumas modificações (não conseguia postar mensagems com !) e acabei com esse script:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/ruby</span>
<span style="color:#996600;">`curl --basic --user &quot;&lt;myusername&gt;:&lt;mysecretpassword&gt;&quot; --data-ascii &quot;status=#{ARGV.join(&quot; &quot;)}&quot; &quot;http://twitter.com/statuses/update.json&quot;`</span></pre></div></div>

<p>Substitua <myusername> e <mypassword> com seu usuário e sua senha, salve o arquivo com o nome de twit em /usr/bin ou qualquer pasta no seu path, de permissão de execução (chmod +x /usr/bin/twit) e execute:</p>
<pre>
$ twit Estou postando a partir da linha de comando!
</pre>
<p>Se essa dica foi útil à você, poste nos comentários. <img src='http://www.papodenerd.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.papodenerd.net/dica-rapida-twittando-a-partir-da-linha-de-comando/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dica rápida: simplificando a chamada do método I18n.localize no Rails 2.2</title>
		<link>http://www.papodenerd.net/dica-rapida-simplificando-a-chamada-do-metodo-i18nlocalize-no-rails-22/</link>
		<comments>http://www.papodenerd.net/dica-rapida-simplificando-a-chamada-do-metodo-i18nlocalize-no-rails-22/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 19:14:49 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
		
		<category><![CDATA[Dica Rápida]]></category>

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

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

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

		<guid isPermaLink="false">http://www.papodenerd.net/?p=82</guid>
		<description><![CDATA[Fiquei um longo período sem postar nada. A coisa está corrida por aqui. Estou fazendo o deployment da minha aplicação, refatorando pedaços de código, corrigindo bugs, enfim, aparando as últimas arestas antes de colocar no ar.
Assim sendo, vamos com uma dica rápida para facilitar o acesso aos recursos de internacionalização inseridos no Rails 2.2.
Até o [...]]]></description>
			<content:encoded><![CDATA[<p>Fiquei um longo período sem postar nada. A coisa está corrida por aqui. Estou fazendo o deployment da minha aplicação, refatorando pedaços de código, corrigindo bugs, enfim, aparando as últimas arestas antes de colocar no ar.<br />
Assim sendo, vamos com uma dica rápida para facilitar o acesso aos recursos de internacionalização inseridos no <a href="http://www.rubyonrails.pro.br/">Rails</a> 2.2.</p>
<p>Até o Rails 2.1 eu usava o <a href="http://www.improveit.com.br/software_livre/brazilian_rails">Brazilian Rails</a> para a formatação de datas, moeda, etc. Resolvi que era hora de tentar o I18n do Rails 2.2.</p>
<p>Primeiro passo: criar o locale &#8216;pt-BR.yml&#8217; dentro de config/locales/:</p>

<div class="wp_syntax"><div class="code"><pre class="yaml" style="font-family:monospace;">time:
    formats:
      default: &quot;%A, %d de %B de %Y, %H:%M&quot;
      short: &quot;%d/%m, %H:%M&quot;
      long: &quot;%A, %d de %B de %Y, %H:%M&quot;
      hour: &quot;%H:%M&quot;
    am: ''
    pm: ''</pre></div></div>

<p>no config/environment.rb:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;">I18n.<span style="color:#9900CC;">default_locale</span> = <span style="color:#996600;">&quot;pt-BR&quot;</span></pre></div></div>

<p>e vualá:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> I18n.<span style="color:#9900CC;">localize</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Segunda, 08 de Dezembro de 2008, 17:00&quot;</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> I18n.<span style="color:#9900CC;">localize</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span>, <span style="color:#ff3333; font-weight:bold;">:format</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:short</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;08/12, 17:00&quot;</span></pre></div></div>

<p>Muito bem. Tudo funcionando. Mas é muito chato ter que chamar a classe I18n todo o tempo. Então vamos usar o poder de DSLs que Ruby nos dá.<br />
Crie um arquivo em config/initalizers com o nome que preferir e adicione:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC00FF; font-weight:bold;">Time</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> localize<span style="color:#006600; font-weight:bold;">&#40;</span>options=<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    I18n.<span style="color:#9900CC;">localize</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">self</span>, options<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Agora ficou muito mais fácil e intuitivo:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span>.<span style="color:#9900CC;">localize</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Segunda, 08 de Dezembro de 2008, 17:04&quot;</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span>.<span style="color:#9900CC;">localize</span> <span style="color:#ff3333; font-weight:bold;">:format</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:short</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;08/12, 17:04&quot;</span></pre></div></div>

<p>Isso pode ser feito similarmente com outros métodos, de outras classes também. Fica para o próximo post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.papodenerd.net/dica-rapida-simplificando-a-chamada-do-metodo-i18nlocalize-no-rails-22/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JRuby 1.1.4 vs Ruby 1.8 no Rails 2.2</title>
		<link>http://www.papodenerd.net/jruby-114-vs-ruby-18-no-rails-22/</link>
		<comments>http://www.papodenerd.net/jruby-114-vs-ruby-18-no-rails-22/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 18:58:18 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
		
		<category><![CDATA[Rails]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.papodenerd.net/?p=70</guid>
		<description><![CDATA[Continuando a série de benchmarks começada ao comparar o Rails 2.1 com o Rails 2.2 em cima do Ruby 1.8, agora é a vez de comparar o JRuby e Ruby.
Se você não leu a explicação das diferenças do modelo de threading entre Ruby 1.8, Ruby 1.9 e JRuby, leia antes de prosseguir.
Estou rodando os testes [...]]]></description>
			<content:encoded><![CDATA[<p>Continuando a série de benchmarks começada ao <a href="http://www.papodenerd.net/comparacoes-entre-rails-211-e-rails-22/">comparar o Rails 2.1 com o Rails 2.2</a> em cima do Ruby 1.8, agora é a vez de comparar o JRuby e Ruby.<br />
Se você não leu a explicação das <a href="http://www.papodenerd.net/green-threads-native-threads-gil-ruby-e-rails/">diferenças do modelo de threading entre Ruby 1.8, Ruby 1.9 e JRuby</a>, leia antes de prosseguir.<br />
Estou rodando os testes no meu computador pessoal, que é um Pentium 4 3.0 HT, com 1Gb de memória rodando Ubuntu Linux. Já é um PC um tanto quanto ultrapassado, portanto o tempo de resposta acaba sendo um pouco alto, além de que ao mesmo tempo em que rodam os testes rodam também outros programas, como o Firefox por exemplo.<br />
Vamos ao que interessa:</p>
<h3>Ruby 1.8</h3>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ ruby script<span style="color: #000000; font-weight: bold;">/</span>server <span style="color: #660033;">-p</span> <span style="color: #000000;">3001</span> <span style="color: #660033;">-e</span> production
$ ab <span style="color: #660033;">-n</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">5</span> http:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">3000</span><span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
Concurrency Level:      <span style="color: #000000;">5</span>
Time taken <span style="color: #000000; font-weight: bold;">for</span> tests:   <span style="color: #000000;">3.903964</span> seconds
Complete requests:      <span style="color: #000000;">50</span>
Failed requests:        0
Write errors:           0
Total transferred:      <span style="color: #000000;">573554</span> bytes
HTML transferred:       <span style="color: #000000;">547350</span> bytes
Requests per second:    <span style="color: #000000;">12.81</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #666666; font-style: italic;">#/sec] (mean)</span>
Time per request:       <span style="color: #000000;">390.396</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Time per request:       <span style="color: #000000;">78.079</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean, across all concurrent requests<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Transfer rate:          <span style="color: #000000;">143.44</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Kbytes<span style="color: #000000; font-weight: bold;">/</span>sec<span style="color: #7a0874; font-weight: bold;">&#93;</span> received</pre></div></div>

<h3>JRuby 1.1.4</h3>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ jruby -J-Djruby.objectspace.enabled=<span style="color: #c20cb9; font-weight: bold;">false</span> <span style="color: #660033;">-J-Xmn128m</span> <span style="color: #660033;">-J-Xms512m</span> <span style="color: #660033;">-J-Xmx512m</span> <span style="color: #660033;">-J-server</span> -J-Djruby.thread.pooling=<span style="color: #c20cb9; font-weight: bold;">true</span> script<span style="color: #000000; font-weight: bold;">/</span>server <span style="color: #660033;">-e</span> production
$ ab <span style="color: #660033;">-n</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">5</span> http:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">3000</span><span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
Concurrency Level:      <span style="color: #000000;">5</span>
Time taken <span style="color: #000000; font-weight: bold;">for</span> tests:   <span style="color: #000000;">7.976448</span> seconds
Complete requests:      <span style="color: #000000;">50</span>
Failed requests:        0
Write errors:           0
Total transferred:      <span style="color: #000000;">573600</span> bytes
HTML transferred:       <span style="color: #000000;">547350</span> bytes
Requests per second:    <span style="color: #000000;">6.27</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #666666; font-style: italic;">#/sec] (mean)</span>
Time per request:       <span style="color: #000000;">797.645</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Time per request:       <span style="color: #000000;">159.529</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean, across all concurrent requests<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Transfer rate:          <span style="color: #000000;">70.21</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Kbytes<span style="color: #000000; font-weight: bold;">/</span>sec<span style="color: #7a0874; font-weight: bold;">&#93;</span> received</pre></div></div>

<p>Mesmo utilizando todas as flags de <a href="http://wiki.jruby.org/wiki/Performance_Tuning">performance tunning</a> da <a href="http://wiki.jruby.org/">wiki do JRuby</a>, ele ainda se mostrou mais lento. Isso significa que o JRuby não vai tirar proveito do threadsafeting do Rails 2.2? Não!<br />
Pelo que eu entendi pesquisando brevemente, ainda é preciso fazer alterações no código do JRuby pra que ele ofereça a melhor performance possível. Mesmo a última barreira para que o Rails possa ser executado em modo multi-threaded tenha sido removida, ainda é preciso implementar essa função no core do JRuby. Me corrijam se eu estiver errado.</p>
<p>Tempo de carga de uma única requisição no JRuby:</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">Processing IndexController<span style="color: #666666; font-style: italic;">#index (for 127.0.0.1 at 2008-10-30 18:44:58) [GET]</span>
Completed <span style="color: #000000; font-weight: bold;">in</span> 186ms <span style="color: #7a0874; font-weight: bold;">&#40;</span>View: <span style="color: #000000;">116</span>, DB: <span style="color: #000000;">7</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> | <span style="color: #000000;">200</span> OK <span style="color: #7a0874; font-weight: bold;">&#91;</span>http:<span style="color: #000000; font-weight: bold;">//</span>localhost<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></div></div>

<p>&#8230;e no Ruby:</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">Processing IndexController<span style="color: #666666; font-style: italic;">#index (for 127.0.0.1 at 2008-10-30 18:45:13) [GET]</span>
Completed <span style="color: #000000; font-weight: bold;">in</span> 131ms <span style="color: #7a0874; font-weight: bold;">&#40;</span>View: <span style="color: #000000;">60</span>, DB: <span style="color: #000000;">20</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> | <span style="color: #000000;">200</span> OK <span style="color: #7a0874; font-weight: bold;">&#91;</span>http:<span style="color: #000000; font-weight: bold;">//</span>localhost<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></div></div>

<p>O Ruby é 2x mais rápido que o JRuby ao renderizar a view, mas quase 3x mais lento em consultas ao banco.<br />
Alguém já brincou com o JRuby e Rails 2.2? Obteve resultados melhores? Comentem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.papodenerd.net/jruby-114-vs-ruby-18-no-rails-22/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Green Threads, Native Threads, GIL, Ruby e Rails&#8230;</title>
		<link>http://www.papodenerd.net/green-threads-native-threads-gil-ruby-e-rails/</link>
		<comments>http://www.papodenerd.net/green-threads-native-threads-gil-ruby-e-rails/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 14:24:19 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
		
		<category><![CDATA[Rails]]></category>

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

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

		<guid isPermaLink="false">http://www.papodenerd.net/?p=56</guid>
		<description><![CDATA[No post passado eu falei sobre os benefícios do Rails 2.2 em termos de performance que obtive na minha aplicação. Porém, não deixei bem claro que a intenção dos meus testes eram comparar a diferença entre as duas versões do Rails apenas, sem tocar no interpretador Ruby. Então pra deixar as coisas mais claras, vou [...]]]></description>
			<content:encoded><![CDATA[<p>No post passado eu falei sobre os <a href="http://www.papodenerd.net/comparacoes-entre-rails-211-e-rails-22/">benefícios do Rails 2.2</a> em termos de performance que obtive na minha aplicação. Porém, não deixei bem claro que a intenção dos meus testes eram comparar a diferença entre as duas versões do Rails apenas, sem tocar no interpretador Ruby. Então pra deixar as coisas mais claras, vou analizar aqui as diferenças entre os interpretadores Ruby 1.8 (MRI), Ruby 1.9 (YARV) e JRuby (JVM).</p>
<h3>Ruby 1.8</h3>
<p>É o Ruby estável atual. Suporta apenas Green Threads.<br />
Isso significa que, não importa quantas threads você rode no seu programa, haverá apenas uma Thread alocada no kernel do sistema operacional. O efeito colateral disso é a necessidade de esperar que uma Thread termine a sua execução para começar outra Thread.<br />
Até pouco tempo a solução para esse problema eram clusters de servidores. Com vários servidores rodando, cada um fica responsável por uma requisição, permitindo a execução de mais de um processo ao mesmo tempo (não concorrente). Mas gerava um outro problema: cada servidor precisava carregar na memória todas as bibliotecas, classes do framework, classes da aplicação, etc, o que gera um overload de memória.<br />
Então chegaram os <a href="http://phusion.nl">Phusion Guys</a> com o Passenger e o Ruby Enterprise Edition, que juntos otimizaram esse processo. O que o Ruby Enterprise Edition fez foi compartilhar os objetos iguais entre as instâncias de Rails, diminuindo o overload. Contúdo você ainda tem conexões de banco, código de aplicação e dados em memória criados depois da inicialização duplicados.</p>
<h3>Ruby 1.9</h3>
<p>O Ruby 1.9 implementa o YARV (desenvolvido pelo Matz assim como o MRI) como virtual machine, o qual suporta Native Threads. Isso significa que cada Thread Ruby terá sua própria Thread no kernel do sistema operacional. Porém, isso não significa que haverá paralelismo entre as execuções das Threads. Somente um processo rodará por vez, independente de quantos cores tenha o servidor. Isso acontece devido ao GIL (Global Interpreter Lock), que também está presente no MRI.<br />
O GIL nada mais é que uma trava gerada quando são solicitados processos de IO, para impedir que seja compartilhado código que não é Thread Safe entre as Threads.<br />
Remover o GIL beneficiaria a utilização de mais de 1 core no servidor, pois possibilitaria a execução paralela de Threads. O problema é que muitas extensões feitas em C precisariam ser reescritas, o que atrasaria o lançamento. Talvez isso esteja nos planos para a versão 2.0.</p>
<h3>JRuby</h3>
<p>O JRuby usa JVM, a máquina virtual Java, e que suporta Native Threads e execução simultânea.<br />
Isso significa dizer que várias requisições poderão ser executadas paralelamente, dependendo únicamente da quantidade de cores do seu servidor.</p>
<h3>Então por que houve melhora na performance sem trocar o interpretador?</h3>
<p>O que acontecia com o Rails até a versão 2.1.1 é que havia um lock único sobre cada requisição, e que fora substituido na versão 2.2 por locks menores, sobre os recursos compartilhados apenas. Porém, ao meu ver, mais importante que isso para a melhora de performance é o pool de conexões. Na versão 2.2, você pode configurar um pool de conexões com o banco de dados que serão acessados ao mesmo tempo.<br />
No seu blog o Carlos Brando explicou como o <a href="http://www.nomedojogo.com/2008/09/09/edge-rails-pool-de-conexoes-no-rails/">pool de conexões</a> funciona. Vale o acesso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.papodenerd.net/green-threads-native-threads-gil-ruby-e-rails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Comparações entre Rails 2.1.1 e Rails 2.2</title>
		<link>http://www.papodenerd.net/comparacoes-entre-rails-211-e-rails-22/</link>
		<comments>http://www.papodenerd.net/comparacoes-entre-rails-211-e-rails-22/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 18:32:33 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
		
		<category><![CDATA[Rails]]></category>

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

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

		<guid isPermaLink="false">http://www.papodenerd.net/?p=48</guid>
		<description><![CDATA[Hoje resolvi testar a minha aplicação de várias formas, pra ver se a nova versão do Rails traria algum benefício de fato para mim.
Primeiro rodei o Apache Benchmark na aplicação do jeito que ela estava, como Rails 2.1.1:

$ ab -n 50 -c 5 http://localhost:3000/
&#160;
Concurrency Level:      5
Time taken for tests:  [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje resolvi testar a minha aplicação de várias formas, pra ver se a nova versão do Rails traria algum benefício de fato para mim.</p>
<p>Primeiro rodei o Apache Benchmark na aplicação do jeito que ela estava, como Rails 2.1.1:</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ ab <span style="color: #660033;">-n</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">5</span> http:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">3000</span><span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
Concurrency Level:      <span style="color: #000000;">5</span>
Time taken <span style="color: #000000; font-weight: bold;">for</span> tests:   <span style="color: #000000;">39.938685</span> seconds
Complete requests:      <span style="color: #000000;">50</span>
Failed requests:        0
Write errors:           0
Total transferred:      <span style="color: #000000;">1036850</span> bytes
HTML transferred:       <span style="color: #000000;">1010700</span> bytes
Requests per second:    <span style="color: #000000;">1.25</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #666666; font-style: italic;">#/sec] (mean)</span>
Time per request:       <span style="color: #000000;">3993.869</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Time per request:       <span style="color: #000000;">798.774</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean, across all concurrent requests<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Transfer rate:          <span style="color: #000000;">25.34</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Kbytes<span style="color: #000000; font-weight: bold;">/</span>sec<span style="color: #7a0874; font-weight: bold;">&#93;</span> received</pre></div></div>

<p>Hummm.. lento.. muito lento. Já estava preocupado com a hora de colocar isso em produção.</p>
<p>Atualizando o Rails para a versão 2.2 e rodando o benchmark:</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ ab <span style="color: #660033;">-n</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">5</span> http:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">3000</span><span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
Concurrency Level:      <span style="color: #000000;">5</span>
Time taken <span style="color: #000000; font-weight: bold;">for</span> tests:   <span style="color: #000000;">32.228686</span> seconds
Complete requests:      <span style="color: #000000;">50</span>
Failed requests:        0
Write errors:           0
Total transferred:      <span style="color: #000000;">590650</span> bytes
HTML transferred:       <span style="color: #000000;">564400</span> bytes
Requests per second:    <span style="color: #000000;">1.55</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #666666; font-style: italic;">#/sec] (mean)</span>
Time per request:       <span style="color: #000000;">3222.869</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Time per request:       <span style="color: #000000;">644.574</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean, across all concurrent requests<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Transfer rate:          <span style="color: #000000;">17.87</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Kbytes<span style="color: #000000; font-weight: bold;">/</span>sec<span style="color: #7a0874; font-weight: bold;">&#93;</span> received</pre></div></div>

<p>What?? Cadê a melhora de performance? Rails não é Threadsafe agora?<br />
É! Mas você tem que habilitar o recurso nas configurações pequeno Padawan:</p>
<p>No seu arquivo config/development.rb adicione no final:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;">config.<span style="color:#9900CC;">threadsafe</span>!</pre></div></div>

<p>Rodando o Benchmark:</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ ab <span style="color: #660033;">-n</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">5</span> http:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">3000</span><span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
Concurrency Level:      <span style="color: #000000;">5</span>
Time taken <span style="color: #000000; font-weight: bold;">for</span> tests:   <span style="color: #000000;">6.807438</span> seconds
Complete requests:      <span style="color: #000000;">50</span>
Failed requests:        0
Write errors:           0
Total transferred:      <span style="color: #000000;">590620</span> bytes
HTML transferred:       <span style="color: #000000;">564400</span> bytes
Requests per second:    <span style="color: #000000;">7.34</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #666666; font-style: italic;">#/sec] (mean)</span>
Time per request:       <span style="color: #000000;">680.744</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Time per request:       <span style="color: #000000;">136.149</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean, across all concurrent requests<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Transfer rate:          <span style="color: #000000;">84.61</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Kbytes<span style="color: #000000; font-weight: bold;">/</span>sec<span style="color: #7a0874; font-weight: bold;">&#93;</span> received</pre></div></div>

<p>Muito melhor não?! Uma melhora de quase 500%! Mas e se rodassemos em modo de produção?</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ ab <span style="color: #660033;">-n</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">5</span> http:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">3000</span><span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
Concurrency Level:      <span style="color: #000000;">5</span>
Time taken <span style="color: #000000; font-weight: bold;">for</span> tests:   <span style="color: #000000;">3.693437</span> seconds
Complete requests:      <span style="color: #000000;">50</span>
Failed requests:        0
Write errors:           0
Total transferred:      <span style="color: #000000;">573555</span> bytes
HTML transferred:       <span style="color: #000000;">547350</span> bytes
Requests per second:    <span style="color: #000000;">13.54</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #666666; font-style: italic;">#/sec] (mean)</span>
Time per request:       <span style="color: #000000;">369.344</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Time per request:       <span style="color: #000000;">73.869</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean, across all concurrent requests<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Transfer rate:          <span style="color: #000000;">151.62</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Kbytes<span style="color: #000000; font-weight: bold;">/</span>sec<span style="color: #7a0874; font-weight: bold;">&#93;</span> received</pre></div></div>

<p>Impressionado pequeno Padawan? Cuidado! Nada disso aqui significa que sua aplicação vai ficar tão melhor quanto a minha somente com a nova versão do Rails. A aplicação em questão aqui envolve muitos cálculos complexos, e por isso tira vantagem do threading.<br />
Tentei fazer alguns testes com o <a href="http://github.com/oldmoe/mysqlplus/tree/master">mysqlplus</a>, driver de mysql pra ruby que promete acesso assíncrono ao banco de dados. O <a href="http://www.igvita.com/2008/10/27/scaling-activerecord-with-mysqlplus/">tutorial</a> que eu segui simplesmente não funcionou no meu ambiente. Li em algum dos posts que pesquisei que eles estavam concentrando esforços pra fazer funcionar com o Rails 2.2 e corrigir alguns bugs.<br />
Rails escala? Pra minha aplicação sim. E pra sua?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.papodenerd.net/comparacoes-entre-rails-211-e-rails-22/feed/</wfw:commentRss>
		</item>
		<item>
		<title>GTBox - Controle de caixa</title>
		<link>http://www.papodenerd.net/gtbox-controle-de-caixa/</link>
		<comments>http://www.papodenerd.net/gtbox-controle-de-caixa/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 19:38:58 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
		
		<category><![CDATA[Python]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.papodenerd.net/?p=42</guid>
		<description><![CDATA[UPDATE (03/11/08): Salvando apropriadamente agora. O problema era que eu mandava o Gazpacho salvar meus campos como String no data-type, mas ele não salvava nada. Solução: abra os arquivos salvos com o gazpacho em um editor de texto qualquer e sete a opção data-type como str, int ou whatever.

A avaliação de uma das matérias do [...]]]></description>
			<content:encoded><![CDATA[<p><b>UPDATE (03/11/08)</b>: Salvando apropriadamente agora. O problema era que eu mandava o Gazpacho salvar meus campos como String no data-type, mas ele não salvava nada. Solução: abra os arquivos salvos com o gazpacho em um editor de texto qualquer e sete a opção data-type como str, int ou whatever.<br />
<br/><br/><br />
A avaliação de uma das matérias do meu curso é a construção de um sistema em Python ou em Java que se comunique com o banco de dados. Muito simples mesmo.</p>
<p>Então comecei um projetinho usando Python + Kiwi + SQLObject+ Gazpacho, que na breve pesquisa que eu fiz acreditei ser a melhor opção. Mas aí me deparei com um grande problema: a falta de documentação do Kiwi. Vários probleminhas que concerteza são muito simples, mas que sem nenhuma referência são difíceis de resolver apareceram.</p>
<p>Tudo está <strong>aparentemente </strong>certo. Mas quando eu mando salvar as alterações para o banco, todos os campos são salvos como Null.</p>
<p>Pra quem quiser dar uma olhada no projeto ou até mesmo contribuir eu o coloquei no github:</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">git clone git:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>mauriciozaffari<span style="color: #000000; font-weight: bold;">/</span>gtbox.git</pre></div></div>

<p>A intenção não é de forma alguma fazer algo muito sofisticado e qualquer ajuda será muito bem vinda.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.papodenerd.net/gtbox-controle-de-caixa/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rails Summit Latin America 2008</title>
		<link>http://www.papodenerd.net/rails-summit-latin-america-2008/</link>
		<comments>http://www.papodenerd.net/rails-summit-latin-america-2008/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 02:08:44 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
		
		<category><![CDATA[Rails]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.papodenerd.net/?p=28</guid>
		<description><![CDATA[Semana passada tivemos o Rails Summit, primeiro grande evento de Rails no Brasil. O Ozéias organizou uma van para levar o pessoal do Paraná, e uns perdidos de Santa Catarina também, e eu embarquei nessa.
Foram 13 horas de viagem não muito confortável, mas também não insuportável. Não fosse alguém que não parava de falar um [...]]]></description>
			<content:encoded><![CDATA[<p>Semana passada tivemos o Rails Summit, primeiro grande evento de Rails no Brasil. O <a title="RailsBox" href="http://railsbox.org" target="_blank">Ozéias</a> organizou uma van para levar o pessoal do Paraná, e uns perdidos de Santa Catarina também, e eu embarquei nessa.</p>
<div id="attachment_31" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.papodenerd.net/wp-content/uploads/2008/10/van.jpg"><img class="size-medium wp-image-31" title="Galera da Van" src="http://www.papodenerd.net/wp-content/uploads/2008/10/van-300x225.jpg" alt="Galera da Van" width="300" height="225" /></a><p class="wp-caption-text">Galera da Van</p></div>
<p>Foram 13 horas de viagem não muito confortável, mas também não insuportável. Não fosse <a title="Davis Cabral" href="http://www.daviscabral.com.br" target="_blank">alguém</a> que não parava de falar um minuto a viagem teria sido menos cansativa. Chegamos antes das 7 horas da manhã e fomos direto para o evento, nem aberto tava ainda. Fomos os primeiros a chegar!</p>
<div id="attachment_34" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.papodenerd.net/wp-content/uploads/2008/10/primeiros.jpg"><img class="size-medium wp-image-34" title="Primeiros a Chegar" src="http://www.papodenerd.net/wp-content/uploads/2008/10/primeiros-300x225.jpg" alt="Primeiros a Chegar" width="300" height="225" /></a><p class="wp-caption-text">Chegamos pra abrir as portas do evento </p></div>
<p>A <a title="LocaWeb" href="http://www.locaweb.com.br/railssummit/" target="_blank">organização</a> estava ótima! Desde a organização das palestras aos coffee breaks e almoços. Parabéns ao <a title="AkitaOnRails" href="http://www.akitaonrails.com/2008/10/20/rails-summit-sucesso-comunidade" target="_blank">Fabio Akita</a> e para todo o pessoal da Locaweb que se esforçaram muito para fazer desse um evento muito bom.</p>
<p>As palestras foram muito boas mesmo, mas o ponto alto do evento foi conhecer o pessoal. Nerds de todos os tipos estavam presentes.. nunca vi tanto MacBook no mesmo lugar. Conheci muita gente legal, mas ao mesmo tempo não tive tempo de conhecer melhor muita gente. A galera twittou o tempo inteiro, foi aberto um canal no irc e até foi criado um <span style="text-decoration: line-through;">belo</span> <a title="Morena Opensource" href="http://github.com/ricardoalmeida/morena_opensource" target="_blank">projeto</a> no github! Graças ao <a title="Livestream BlogBlogs" href="http://blogblogs.com.br/livestream/name/railssummit" target="_blank">livestream do BlogBlogs</a> foi possível acompanhar tudo que era comentado sobre o evento em vários serviços.</p>
<div id="attachment_33" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.papodenerd.net/wp-content/uploads/2008/10/dr-nic.jpg"><img class="size-medium wp-image-33" title="Dr. Nic" src="http://www.papodenerd.net/wp-content/uploads/2008/10/dr-nic-300x225.jpg" alt="Um dos clones do Dr. Nic estava presente" width="300" height="225" /></a><p class="wp-caption-text">Um dos clones do Dr. Nic estava presente</p></div>
<p>Nesse evento foi possível ver como a comunidade ruby é uma comunidade unida. O pessoal sempre prestativo e atencioso, até nos FAILcasts da vida! Ao pessoal que não pôde estar presente, dêem um jeito de aparecer ano que vêm. Satisfação garantida <span style="text-decoration: line-through;">ou seu dinheiro de volta</span>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.papodenerd.net/rails-summit-latin-america-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hello World!</title>
		<link>http://www.papodenerd.net/hello-world/</link>
		<comments>http://www.papodenerd.net/hello-world/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 17:25:31 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
		
		<category><![CDATA[Off-Topic]]></category>

		<guid isPermaLink="false">http://www.papodenerd.net/?p=11</guid>
		<description><![CDATA[Como todo blog que fale sobre tecnologia e programação que se preze, este também tem que começar com um post &#8220;Hello World!&#8221;. Ou no caso deste, recomeçar.
Eu acabei deixando o blog morrer da primeira vez, mas isso não vai acontecer denovo não.
Aqui eu vou falar tudo que me der na telha, provavelmente sobre o assunto [...]]]></description>
			<content:encoded><![CDATA[<p>Como todo blog que fale sobre tecnologia e programação que se preze, este também tem que começar com um post &#8220;Hello World!&#8221;. Ou no caso deste, recomeçar.</p>
<p>Eu acabei deixando o blog morrer da primeira vez, mas isso não vai acontecer denovo não.</p>
<p>Aqui eu vou falar tudo que me der na telha, provavelmente sobre o assunto que mais me interessar no momento. Ruby, Rails, Desenvolvimento em geral, Metodologias ágeis, são apenas alguns dos assuntos abordados aqui.</p>
<p>Então é isso ai&#8230; let&#8217;s get it started!<br/></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> blog
  <span style="color:#0066ff; font-weight:bold;">@papodenerd</span> = Blog.<span style="color:#9900CC;">new</span> <span style="color:#ff3333; font-weight:bold;">:about</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Ruby on Rails&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.papodenerd.net/hello-world/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
