<?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>Riopro Blog</title>
	<link>http://blog.riopro.com.br</link>
	<description>Tecnologia e Gestão</description>
	<pubDate>Wed, 03 Feb 2010 19:53:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<item>
		<title>authlogic e subdomain_fu: configurando corretamente o escopo</title>
		<link>http://blog.riopro.com.br/2010/02/03/authlogic-e-subdomain_fu-configurando-corretamente-o-escopo/</link>
		<comments>http://blog.riopro.com.br/2010/02/03/authlogic-e-subdomain_fu-configurando-corretamente-o-escopo/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 19:53:55 +0000</pubDate>
		<dc:creator>otavio</dc:creator>
		
		<category><![CDATA[Rails]]></category>

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

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

		<category><![CDATA[Software Livre]]></category>

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

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2010/02/03/authlogic-e-subdomain_fu-configurando-corretamente-o-escopo/</guid>
		<description><![CDATA[Esse é o pior tipo de erro que acontece: o que não está previsto nos seus testes. Recentemente passamos a usar o authlogic para validar a autenticação de usuários a alguns de nossos sistemas. A validação é muito boa e ainda facilita a criação de testes.
Porém, ao usar um subdomain-fu um erro estranho de validação [...]]]></description>
			<content:encoded><![CDATA[<p>Esse é o pior tipo de erro que acontece: o que não está previsto nos seus testes. Recentemente passamos a usar o <a href="http://github.com/binarylogic/authlogic">authlogic</a> para validar a autenticação de usuários a alguns de nossos sistemas. A validação é muito boa e ainda facilita a criação de testes.</p>
<p>Porém, ao usar um <a href="http://github.com/mbleigh/subdomain-fu/">subdomain-fu</a> um erro estranho de validação de unicidade ocorria. Apesar de termos criado corretamente a validação de unicidade (validates_uniqueness_of), com o escopo correto de account_id (ou seja, apenas validando duplicidades existentes em uma mesma conta, começamos a ter falhas no ambiente de staging.</p>
<p>Sim, os testes previstos para verificar se a validação estava sendo criada com o escopo de account_id tinha sido criada corretamente usando o <a href="http://github.com/carlosbrando/remarkable/">Remarkable</a>. E isso tornava o erro em produção mais estranho ainda.</p>
<p>Após começar a tirar coisa por coisa, pensei que o <em>culpado</em> deveria ser o authlogic. Afinal, se o <a href="http://ar.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html">validates_uniqueness_of </a>passasse a falhar a gente já teria ouvido uma chiadeira danada nos fóruns.</p>
<p>Indo direto para a conclusão, o que precisamos é passar um <em><strong>validations_scope</strong></em> como  parâmetro para a inicialização do <strong>acts_as_authentic</strong><em>. O código fica como abaixo:</p>
<pre>
# authlogic

acts_as_authentic {|config| config.validations_scope = :account_id }</pre>
<p>É óbvio que você não precisa usar o subdomain-fu para esse problema ocorrer. Qualquer escopo que você precisar passar como parâmetro para verificar a unicidade do usuário é suficiente para precisar desse bloco de configuração.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2010/02/03/authlogic-e-subdomain_fu-configurando-corretamente-o-escopo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Testes de integração usando webrat, rspec, authlogic e subdomain_fu</title>
		<link>http://blog.riopro.com.br/2010/01/01/testes-de-integracao-usando-webrat-rspec-authlogic-e-subdomain_fu/</link>
		<comments>http://blog.riopro.com.br/2010/01/01/testes-de-integracao-usando-webrat-rspec-authlogic-e-subdomain_fu/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 19:02:50 +0000</pubDate>
		<dc:creator>otavio</dc:creator>
		
		<category><![CDATA[Rspec]]></category>

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

		<category><![CDATA[Software Livre]]></category>

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

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2010/01/01/testes-de-integracao-usando-webrat-rspec-authlogic-e-subdomain_fu/</guid>
		<description><![CDATA[Post de Reveillon, já que foi começado em 2009 e terminado em 2010. Bom ano a todos.
Esse post vai falar especificamente sobre como usar o Webrat + Rspec para aplicações usando o Authlogic e o subdomain_fu  para testes de integração. Por isso, não vamos mostrar todos os matchers existentes no Webrat. Apenas mostrar como fazemos [...]]]></description>
			<content:encoded><![CDATA[<p>Post de <em>Reveillon</em>, já que foi começado em 2009 e terminado em 2010. Bom ano a todos.</p>
<p>Esse post vai falar especificamente sobre como usar o Webrat + Rspec para aplicações usando o Authlogic e o subdomain_fu  para testes de integração. Por isso, não vamos mostrar todos os matchers existentes no Webrat. Apenas mostrar como fazemos para os testes rodarem.</p>
<p>Testes de integração sempre foram um <a href="http://pt.wikipedia.org/wiki/Aquiles">Calcanhar de Aquiles</a> para mim. Em parte porque as soluções existentes eram trabalhosas e em parte porque demoravam muito para rodar. Por exemplo, gosto muito do <a href="http://github.com/aslakhellesoy/cucumber">Cucumber</a>, e acredito que suas descrições são muito boas para <a href="http://behaviour-driven.org/">BDD</a>. O problema do Cucumber é que ele, tal qual todas as formas de testes, é usado por humanos. E os testes que mostram que as <em>features</em> funcionam são tão fáceis de serem mal escritos ou escritos erradamente quanto qualquer outro teste. Com a diferença que ele acaba por acobertar mais facilmente os problemas existentes nesses testes. Por isso tenho restrições em implementá-lo.</p>
<p>Gosto muito do <a href="http://seleniumhq.org/">Selenium</a> também, e acredito que em determinados momentos, o custo de performance (tempo para rodar os testes) pode ser justificado pelo fato dele realmente usar browsers para realizar os testes.  É muito provável que passemos a usar o Selenium em algum momento futuro aqui na <a href="http://www.riopro.com.br" target="_blank">Riopro</a>.</p>
<p>Mas, por enquanto, preferimos adotar somente o excelente <a href="http://github.com/brynary/webrat">Webrat</a> (sim, porque o Webrat pode ser fácilmente integrado ao Selenium e ao Cucumber). O que o Webrat faz é, em linhas gerais, executar uma chamada http real (usando o método <strong>visit</strong>) e tratar o output gerado com o <a href="http://wiki.github.com/tenderlove/nokogiri">Nokogiri</a> (O Nokogiri é um parser no estilo Hpricot, rápido e com uma ótima navegação do DOM). Além disso, o Webrat provê <strong>matchers</strong> muito úteis. <a href="http://blog.riopro.com.br/2010/01/01/testes-de-integracao-usando-webrat-rspec-authlogic-e-subdomain_fu/#more-139" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2010/01/01/testes-de-integracao-usando-webrat-rspec-authlogic-e-subdomain_fu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Recuperando fotos de um cartão Sony usando o recoverjpeg no Linux</title>
		<link>http://blog.riopro.com.br/2009/12/23/recuperando-fotos-de-um-cartao-sony-usando-o-recoverjpeg-no-linux/</link>
		<comments>http://blog.riopro.com.br/2009/12/23/recuperando-fotos-de-um-cartao-sony-usando-o-recoverjpeg-no-linux/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 16:38:21 +0000</pubDate>
		<dc:creator>otavio</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Software Livre]]></category>

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

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

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

		<category><![CDATA[memory stick]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2009/12/23/recuperando-fotos-de-um-cartao-sony-usando-o-recoverjpeg-no-linux/</guid>
		<description><![CDATA[Recoverjpeg. Esse é o nome mágico que salvou meu dia.
3 comandos e recuperei todas as fotos de um cartão de fotos Sony que havia sido corrompido quando estava gerando thumbnails no computador.
Obs: Esse post foi escrito originalmente no meu site pessoal.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rfc1149.net/devel/recoverjpeg">Recoverjpeg</a>. Esse é o nome mágico que salvou meu dia.</p>
<p>3 comandos e recuperei todas as fotos de um cartão de fotos Sony que havia sido corrompido quando estava gerando thumbnails no computador.</p>
<p>Obs: Esse post foi <a href="http://imightbewrong.com.br/posts/21-Recuperando-fotos-de-um-cart%C3%A3o-Sony-usando-o-recoverjpeg-no-Linux">escrito originalmente</a> no meu <a href="http://imbw.com.br">site pessoal</a>.</p>
<p> <a href="http://blog.riopro.com.br/2009/12/23/recuperando-fotos-de-um-cartao-sony-usando-o-recoverjpeg-no-linux/#more-140" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2009/12/23/recuperando-fotos-de-um-cartao-sony-usando-o-recoverjpeg-no-linux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Converter várias imagens em 1 único arquivo pdf</title>
		<link>http://blog.riopro.com.br/2009/12/17/converter-varias-imagens-em-1-unico-arquivo-pdf/</link>
		<comments>http://blog.riopro.com.br/2009/12/17/converter-varias-imagens-em-1-unico-arquivo-pdf/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 12:56:48 +0000</pubDate>
		<dc:creator>otavio</dc:creator>
		
		<category><![CDATA[Software Livre]]></category>

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2009/12/17/converter-varias-imagens-em-1-unico-arquivo-pdf/</guid>
		<description><![CDATA[Ontem precisei converter 14 imagens em um único pdf. As imagens eram do balanço de 2008 da Riopro que haviam sido scanneadas folha a folha. Ou seja, recebi um brilhante arquivo zip com 14 imagens jpeg (ou jpg se preferir) para repassar a um cliente.
Nem preciso dizer que esse tipo de situação, que ocorre frequentemente [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem precisei converter 14 imagens em um único pdf. As imagens eram do balanço de 2008 da Riopro que haviam sido scanneadas folha a folha. Ou seja, recebi um brilhante arquivo zip com 14 imagens jpeg (ou jpg se preferir) para repassar a um cliente.</p>
<p>Nem preciso dizer que esse tipo de situação, que ocorre frequentemente em qualquer empresa, é inaceitável. Imagina o cliente abrindo imagem a imagem para ver o seu balanço. E se ele quiser imprimir? Era hora então de usar esse <em>mundo</em> incrível chamado <a href="http://pt.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GNU</a> / <a href="http://pt.wikipedia.org/wiki/Linux">Linux</a> / <a href="http://pt.wikipedia.org/wiki/Software_livre" target="_blank">Software Livre</a>.</p>
<p>3 minutos e estava tudo pronto. Usando o <strong>convert</strong>  do <strong>ImageMagick</strong> para converter as imagens para pdf e depois usando o <strong>pdftk</strong> para juntar tudo em 1 único arquivo e a <em>receita de bolo</em> estava pronta. <a href="http://blog.riopro.com.br/2009/12/17/converter-varias-imagens-em-1-unico-arquivo-pdf/#more-136" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2009/12/17/converter-varias-imagens-em-1-unico-arquivo-pdf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ubuntu 9.10, sun jdk e Eclipse: bug ao clicar com o mouse</title>
		<link>http://blog.riopro.com.br/2009/12/09/ubuntu-910-sun-jdk-e-eclipse-bug-ao-clicar-com-o-mouse/</link>
		<comments>http://blog.riopro.com.br/2009/12/09/ubuntu-910-sun-jdk-e-eclipse-bug-ao-clicar-com-o-mouse/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 19:22:06 +0000</pubDate>
		<dc:creator>otavio</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Software Livre]]></category>

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2009/12/09/ubuntu-910-sun-jdk-e-eclipse-bug-ao-clicar-com-o-mouse/</guid>
		<description><![CDATA[Quem estiver usando a combinação Eclipse com o Ubuntu 9.10 (Karmic Koala) e a sun-java6-jdk deve estar passando pelo que passei. Tente fazer uma busca. Você vai reparar que se tentar clicar com o mouse, o botão é selecionado mas a busca não é realizada. Não, o Eclipse não &#8220;parou de funcionar&#8221;. O que ocorre [...]]]></description>
			<content:encoded><![CDATA[<p>Quem estiver usando a combinação Eclipse com o Ubuntu 9.10 (Karmic Koala) e a sun-java6-jdk deve estar passando pelo que passei. Tente fazer uma busca. Você vai reparar que se tentar clicar com o mouse, o botão é selecionado mas a busca não é realizada. Não, o Eclipse não &#8220;parou de funcionar&#8221;. O que ocorre é que ele não está interceptando o comando de click do mouse e associando ao botão. Ou seja, ele não está avisando ao java: &#8220;olha, cliquei o botão de buscar, faz a busca aí&#8221;.</p>
<p>Problema explicado, vamos a uma solução rápida. Criei um arquivo no mesmo diretório aonde fica o binário do Eclipse e chamei o arquivo de <strong>eclipse_startup_ubuntu_9.10.sh</strong>. Em seguida, coloque no arquivo:</p>
<pre>#!/bin/bash

export GDK_NATIVE_WINDOWS=1

cd $(dirname $0)/

./eclipse</pre>
<p>Depois, disse que <strong>eclipse_startup_ubuntu_9.10.sh </strong> é um arquivo executável. Você pode fazer isso clicando com o botão direito nas propriedades do arquivo, ou ir no terminal (sempre uma mão na roda) e digitar:</p>
<pre>
$ chmod a+x ./eclipse_startup_ubuntu_9.10.sh</pre>
<p>Estou supondo que seu terminal está na pasta do Eclipse. Pronto. Agora, ao invés de apontar meu lançador para o binário do Eclipse, aponto ele para esse <strong>eclipse_startup_ubuntu_9.10.sh</strong>.</p>
<p>Agora, explicando um pouco mais. O que o script faz é exportar a variável <strong>GDK_NATIVE_WINDOWS</strong>, dizendo que sim, o Java deve usar o gerenciador nativo de janelas do GDK. Em seguida ele diz que o diretório atual é o diretório aonde o script está localizado e manda abrir o Eclipse.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2009/12/09/ubuntu-910-sun-jdk-e-eclipse-bug-ao-clicar-com-o-mouse/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ubuntu 9.10 e o novo Grub</title>
		<link>http://blog.riopro.com.br/2009/11/24/ubuntu-910-e-o-novo-grub/</link>
		<comments>http://blog.riopro.com.br/2009/11/24/ubuntu-910-e-o-novo-grub/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 12:03:39 +0000</pubDate>
		<dc:creator>otavio</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Sistema Operacional]]></category>

		<category><![CDATA[Software Livre]]></category>

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2009/11/24/ubuntu-910-e-o-novo-grub/</guid>
		<description><![CDATA[Para quem estava acostumado com o caminho de edição do Grub, uma pequena mudança para a versão 9.10 do Ubuntu:
Ao invés da configuração do Grub ficar em:
$ ls /boot/grub/menu.lst
Ela agora fica em:
$ ls /boot/grub/grub.cfg
Ok, mais consistente. Não esqueça que:

Editar implica em risco de ter que recuperar a instalação se você não editar corretamente
antes de editar [...]]]></description>
			<content:encoded><![CDATA[<p>Para quem estava acostumado com o caminho de edição do Grub, uma pequena mudança para a versão 9.10 do Ubuntu:</p>
<p>Ao invés da configuração do Grub ficar em:</p>
<p>$ ls /boot/grub/menu.lst</p>
<p>Ela agora fica em:</p>
<p>$ ls /boot/grub/grub.cfg</p>
<p>Ok, mais consistente. Não esqueça que:</p>
<ol>
<li>Editar implica em risco de ter que recuperar a instalação se você não editar corretamente</li>
<li>antes de editar o grub.cfg, dê um <em>sudo chmod a<strong>+</strong>w</em> no arquivo porque ele agora é só leitura (inclusive para o root)</li>
<li>e depois da edição, fazer um <em>sudo chmod a<strong>-</strong>w</em> para retirar o atributo de leitura</li>
</ol>
<p>Isso porque eu tive que acrescentar o famoso i8042.reset na linha de inicialização do kernel para o meu Dell Vostro 1310 (leia mais sobre esse problema <a href="http://germanodlf.blogspot.com/2009/11/teclado-e-mouse-nao-funcionam-na-tela.html">aqui</a>). Quanto ao Ubuntu, a instalação está muito mais bonita e limpa, além de extremamente rápida. De resto, atualização de pacotes, uma interface um pouco mais bonita.</p>
<p>Um artigo interessante mostrando o que deve ser adicionado ao seu Ubuntu após a instalação pode ser visto <a href="http://blog.thesilentnumber.me/2009/09/top-things-to-do-after-installing.html">aqui</a>. Bem interessante e serve para todos os níveis (só que é em inglês).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2009/11/24/ubuntu-910-e-o-novo-grub/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rspec e os testes para diferentes formatos</title>
		<link>http://blog.riopro.com.br/2009/09/30/rspec-e-os-testes-para-diferentes-formatos/</link>
		<comments>http://blog.riopro.com.br/2009/09/30/rspec-e-os-testes-para-diferentes-formatos/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 20:22:47 +0000</pubDate>
		<dc:creator>otavio</dc:creator>
		
		<category><![CDATA[Rails]]></category>

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

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

		<category><![CDATA[Software Livre]]></category>

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2009/09/30/rspec-e-os-testes-para-diferentes-formatos/</guid>
		<description><![CDATA[Essa será rápida. Há um comportamento estranho nos testes do Rspec para diferentes formatos de página. Se você usar:
get :index, :format =&#62; :xml 
você terá uma resposta 406 &#8220;Not Acceptable&#8221;. Pior, no test.log vai ver que a url foi gerada corretamente. A solução é passar o teste para
get :index, :format =&#62; 'xml'
Que a url será [...]]]></description>
			<content:encoded><![CDATA[<p>Essa será rápida. Há um comportamento estranho nos testes do Rspec para diferentes formatos de página. Se você usar:</p>
<p><code>get :index, :format =&gt; :xml </code></p>
<p>você terá uma resposta 406 &#8220;Not Acceptable&#8221;. Pior, no <em>test.log</em> vai ver que a url foi gerada corretamente. A solução é passar o teste para</p>
<p><code>get :index, :format =&gt; 'xml'</code></p>
<p>Que a url será testada corretamente e o teste não vai retornar uma resposta 406. Daqui pra baixo eu explico o motivo desses testes.<br />
 <a href="http://blog.riopro.com.br/2009/09/30/rspec-e-os-testes-para-diferentes-formatos/#more-132" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2009/09/30/rspec-e-os-testes-para-diferentes-formatos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Alternando entre pares de chaves de autenticação id_rsa no Ubuntu</title>
		<link>http://blog.riopro.com.br/2009/09/01/alternando-entre-pares-de-chaves-de-autenticacao-id_rsa-no-ubuntu/</link>
		<comments>http://blog.riopro.com.br/2009/09/01/alternando-entre-pares-de-chaves-de-autenticacao-id_rsa-no-ubuntu/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 19:41:33 +0000</pubDate>
		<dc:creator>otavio</dc:creator>
		
		<category><![CDATA[Git]]></category>

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

		<category><![CDATA[Sistema Operacional]]></category>

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

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2009/09/01/alternando-entre-pares-de-chaves-de-autenticacao-id_rsa-no-ubuntu/</guid>
		<description><![CDATA[Antes de começar, um aviso. Esse artigo não pretende explicar como funcionam os pares de chaves públicas e privadas do algoritmo RSA (veja também aqui). Nem vai explicar como criar essas chaves. Vou pressupor que você usa o Ubuntu (Debian ou Linux em geral), e que sabe que no seu diretório $HOME/.ssh você possui o [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de começar, um aviso. Esse artigo não pretende explicar <a href="http://pt.wikipedia.org/wiki/RSA#Funcionamento">como funcionam os pares de chaves públicas e privadas do algoritmo RSA</a> (veja também <a href="http://en.wikipedia.org/wiki/Public-key_cryptography">aqui</a>). Nem vai explicar como criar essas chaves. Vou pressupor que você usa o Ubuntu (Debian ou Linux em geral), e que sabe que no seu diretório $HOME/.ssh você possui o seu par de chaves privado e público, como o comando abaixo mostra:</p>
<pre>
$ ls ~/.ssh</pre>
<pre> config  id_rsa  id_rsa.keystore  id_rsa.pub  known_hosts</pre>
<p> <a href="http://blog.riopro.com.br/2009/09/01/alternando-entre-pares-de-chaves-de-autenticacao-id_rsa-no-ubuntu/#more-131" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2009/09/01/alternando-entre-pares-de-chaves-de-autenticacao-id_rsa-no-ubuntu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Alternando facilmente entre várias versões do Ruby no Ubuntu</title>
		<link>http://blog.riopro.com.br/2009/08/05/alternando-facilmente-entre-varias-versoes-do-ruby-no-ubuntu/</link>
		<comments>http://blog.riopro.com.br/2009/08/05/alternando-facilmente-entre-varias-versoes-do-ruby-no-ubuntu/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 16:00:49 +0000</pubDate>
		<dc:creator>rodrigo</dc:creator>
		
		<category><![CDATA[Dicas]]></category>

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

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

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2009/08/05/alternando-facilmente-entre-varias-versoes-do-ruby-no-ubuntu/</guid>
		<description><![CDATA[Li hoje este post do blog da Relevance, que me apresentou à este script muito útil. Ele permite instalar e alternar rapidamente entre diversas versões do Ruby (e JRuby) na usa máquina de desenvolvimento. Extremamente útil para testar se suas aplicações funcionarão corretamente no Ruby 1.9, ou para fazer testes comparativos de performance, por exemplo.
Há [...]]]></description>
			<content:encoded><![CDATA[<p>Li hoje <a href="http://blog.thinkrelevance.com/2009/7/29/ruby-switcher-working-with-multiple-ruby-versions-has-never-been-this-easy" title="Working With Multiple Ruby Versions Has Never Been This Easy">este post do blog da Relevance</a>, que me apresentou à <a href="http://github.com/relevance/etc/blob/3d607c8ac2f76077f27c3cbc0140b04a89f546be/bash/ruby_switcher.sh">este script</a> muito útil. Ele permite instalar e alternar rapidamente entre diversas versões do Ruby (e JRuby) na usa máquina de desenvolvimento. Extremamente útil para testar se suas aplicações funcionarão corretamente no Ruby 1.9, ou para fazer testes comparativos de performance, por exemplo.</p>
<p>Há apenas um porém: o script assume que você está usando Mac OS X (apesar de funcionar &#8220;<em>as is</em>&#8221; no Ubuntu) e não permite retornar ao uso do Ruby nativo (instalado via pacotes) do Ubuntu. Felizmente, modificar o script para resolver estas duas questões foi algo muito simples, e compartilho com vocês abaixo a solução.</p>
<p> <a href="http://blog.riopro.com.br/2009/08/05/alternando-facilmente-entre-varias-versoes-do-ruby-no-ubuntu/#more-130" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2009/08/05/alternando-facilmente-entre-varias-versoes-do-ruby-no-ubuntu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Enviando imagens para S3 assincronamente em Rails</title>
		<link>http://blog.riopro.com.br/2009/08/04/enviando-imagens-para-s3-assincronamente-em-rails/</link>
		<comments>http://blog.riopro.com.br/2009/08/04/enviando-imagens-para-s3-assincronamente-em-rails/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 20:32:46 +0000</pubDate>
		<dc:creator>rodrigo</dc:creator>
		
		<category><![CDATA[Rails]]></category>

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

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

		<guid isPermaLink="false">http://blog.riopro.com.br/2009/08/04/enviando-imagens-para-s3-assincronamente-em-rails/</guid>
		<description><![CDATA[Aplicações web são processadas dentro do ciclo de requisição / resposta do protocolo HTTP. Isso significa que, por diversas razões, operações que demoram muito tempo para serem executadas não devem ser executas dentro deste ciclo, ou seja, devem ser processadas assincronamente. Isso garante uma boa esperiência de uso para o usuário, assim como evita erros [...]]]></description>
			<content:encoded><![CDATA[<p>Aplicações web são processadas dentro do ciclo de requisição / resposta do protocolo HTTP. Isso significa que, por diversas razões, operações que demoram muito tempo para serem executadas não devem ser executas dentro deste ciclo, ou seja, devem ser processadas assincronamente. Isso garante uma boa esperiência de uso para o usuário, assim como evita erros de timeout, etc. Este &#8220;muito tempo&#8221; é algo subjetivo, mas em geral, se demora mais de 1 segundo, é batata: deve ser removido do cliclo requisição / resposta.</p>
<p>Um caso típico de processamento que deve ser assíncrono é quando sua aplicação precisa interfacear com outros sistemas (web services por exemplo). Além de todo o delay inerente em estabelecer a conexão entre os sistemas, outra razão para tornar esta operação assíncrona é a disponibilidade dos serviços, isto é, você não quer que o seu sistema fique indisponível enquanto o sistema associado estiver com problemas.</p>
<p>Em uma aplicação que estamos desenvolvendo, os usuários podem enviar imagens para o sistema, associando-as com outros objetos. O sistema gera vários thumbnails de cada imagem enviada, e armazena os arquivos no serviço de armazenamento de arquivos &#8220;na nuvem&#8221; da Amazon, o <a href="http://aws.amazon.com/s3/" title="Amazon S3">S3</a>. O upload em si das imagens do computador do usuário até o servidor da aplicação não há como remover do ciclo HTTP. Porém, o envio dos arquivos para o S3 sim. Este envio normalmente é rápido, mas pode demorar vários segundos em alguns momentos. Aliás, mesmo quando é rápido, é lento demais para manter no ciclo HTTP.</p>
<p>Assim sendo, eis como fizemos tudo isso em uma aplicação Rails, usando os plugins <a href="http://github.com/technoweenie/attachment_fu/tree/master">attachment_fu</a> e <a href="http://tobi.github.com/delayed_job/">delayed_job</a>.</p>
<p> <a href="http://blog.riopro.com.br/2009/08/04/enviando-imagens-para-s3-assincronamente-em-rails/#more-129" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riopro.com.br/2009/08/04/enviando-imagens-para-s3-assincronamente-em-rails/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

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