<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>MouseOver Studio</title>
	
	<link>http://www.mouseoverstudio.com/blog</link>
	<description />
	<pubDate>Wed, 25 Aug 2010 02:03:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MouseoverStudio" /><feedburner:info uri="mouseoverstudio" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Realiza deploys à la Heroku de tuas aplicações Rails 3 com Inploy</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/M_O5mLNN4po/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/08/24/realiza-deploys-a-la-heroku-de-tuas-aplicacoes-rails-3-com-inploy/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 02:02:58 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Heroku]]></category>

		<category><![CDATA[Inploy]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[rails3]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=211</guid>
		<description><![CDATA[Eu não sou fã dos deploys estilo Heroku, mas sei que muitas pessoas são e que muitas delas não sabem que o Inploy suporta um estilo similar de realizar essa tarefa.
Thomas Ritz contribuiu com um template no Inploy chamado rails3_push que no setup cria um repositorio no servidor e no update da um push nele, [...]]]></description>
			<content:encoded><![CDATA[<p>Eu não sou fã dos deploys estilo <a href="http://heroku.com/">Heroku</a>, mas sei que muitas pessoas são e que muitas delas não sabem que o <a href="http://github.com/dcrec1/inploy">Inploy</a> suporta um estilo similar de realizar essa tarefa.</p>
<p><a href="http://github.com/thomasritz">Thomas Ritz</a> contribuiu com um template no <a href="http://github.com/dcrec1/inploy">Inploy</a> chamado <a href="http://github.com/dcrec1/inploy/blob/master/lib/inploy/templates/rails3_push.rb">rails3_push</a> que no setup cria um repositorio no servidor e no update da um <a href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html">push</a> nele, seguido por todas as tasks que o <a href="http://github.com/dcrec1/inploy">Inploy</a> executa normalmente em cada deploy.</p>
<p>Para utilizar esse template. que nem com qualquer outro, basta especificar ele no arquivo deploy.rb:</p>
<pre class="prettyprint">template = :rails3_push
application = "tweerrer"
hosts = %w(...)
...</pre>
<p>Após isso, para configurar o ambiente e realizar deploys em todos os servidores, basta executar respectivamente os seguintes comandos:</p>
<pre class="prettyprint">inploy setup
inploy</pre>
<p><em>Considera me <a href="http://www.workingwithrails.com/recommendation/new/person/13580-diego-carrion">recomendar</a> no <a href="http://workingwithrails.com/">Working With Rails</a>. Para ficar mais perto das novidades, não deixa de me <a href="http://twitter.com/dcrec1">seguir</a> no Twitter.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/08/24/realiza-deploys-a-la-heroku-de-tuas-aplicacoes-rails-3-com-inploy/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/08/24/realiza-deploys-a-la-heroku-de-tuas-aplicacoes-rails-3-com-inploy/</feedburner:origLink></item>
		<item>
		<title>Otimiza a comunicação na tua empresa com Shouty</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/HbGl6EgcHZY/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/07/08/otimiza-a-comunicacao-na-tua-empresa-com-shouty/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 22:49:49 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[gonow]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[rails2]]></category>

		<category><![CDATA[shouty]]></category>

		<category><![CDATA[rails3]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=210</guid>
		<description><![CDATA[Em poucas palavras, o Shouty é uma espécie de Twitter que nem o Yammer, Present.ly ou o Identi.ca, porém com muito menos funcionalidades.
Faz um tempo, quando alguém na Gonow queria compartilhar alguma coisa simples com o resto da empresa, ela enviava um email para um endereço que inclui todos os membros da grande equipe. Esses [...]]]></description>
			<content:encoded><![CDATA[<p>Em poucas palavras, o <a href="http://github.com/dcrec1/shouty">Shouty</a> é uma espécie de <a href="http://www.twitter.com">Twitter</a> que nem o <a href="http://www.yammer.com">Yammer</a>, <a href="http://www.presently.com/">Present.ly</a> ou o <a href="http://identi.ca/">Identi.ca</a>, porém com muito menos funcionalidades.</p>
<p>Faz um tempo, quando alguém na <a href="http://www.gonow.com.br">Gonow</a> queria compartilhar alguma coisa simples com o resto da empresa, ela enviava um email para um endereço que inclui todos os membros da grande equipe. Esses emails eram muito chatos porque além de demorarem muito para serem escritos, demoravam muitos para serem lidos.</p>
<p>Com o tempo algumas pessoas começaram a utilizar o <a href="http://www.yammer.com">Yammer</a> mas eu não gostei dele porque você consegue seguir pessoas e conseqüentemente se restringir a ver somente as mensagens das pessoas que você segue, pelo que foram sendo criadas panelinhas. Com isso, quando alguém queria enviar uma mensagem para a panela, a pessoa utilizava o <a href="http://www.yammer.com">Yammer</a>, quando alguém queria enviar uma mensagem para tudo mundo, a pessoa utilizava o email.</p>
<p>Na época procurei outras alternativas mas nenhuma me agradou por terem muitas coisas que não precisava e não fazerem de um modo simples o que eu queria. O que eu queria era uma ferramenta que ajudasse a todos os membros da <a href="http://www.gonow.com.br">Gonow</a> se comunicarem de um jeito simples e rápido, sem a opção de criar grupos, que tudo mundo se comunicasse com tudo mundo.</p>
<p>Foi assim que mais ou menos sete meses atrás nasceu o <a href="http://github.com/dcrec1/shouty">Shouty</a>, uma aplicação que satisfez certas necessidades da <a href="http://www.gonow.com.br">Gonow</a>, gerou algumas outras e criou algumas oportunidades de negócio.</p>
<p>De conversa em conversa, algumas empresas ficaram sabendo que a <a href="http://www.gonow.com.br">Gonow</a> estava muito interessada em otimizar a comunicação interna e que tinha expertise sobre uma ferramenta, pelo que nos contataram para aplicar algumas regras no <a href="http://github.com/dcrec1/shouty">Shouty</a> de acordo com as necessidades que tinham e criar uma versão personalizada. Hoje a <a href="http://www.gonow.com.br">Gonow</a> tem nos repositórios privados mais ou menos quatro branches diferentes do <a href="http://github.com/dcrec1/shouty">Shouty</a>, cada um representado uma versão para um cliente diferente.</p>
<p>O <a href="http://github.com/dcrec1/shouty">Shouty</a> é open source e esta disponível para você baixar e utilizar ele na tua rede, podendo realizar modificações a vontade. Caso alguma dessas modificações seja de utilidade também para outras pessoas e não comprometa o objetivo da aplicação, não esquece de me mandar um pull request.</p>
<p><em>Considera me <a href="http://www.workingwithrails.com/recommendation/new/person/13580-diego-carrion">recomendar</a> no <a href="http://workingwithrails.com/">Working With Rails</a>. Para ficar mais perto das novidades, não deixa de me <a href="http://twitter.com/dcrec1">seguir</a> no Twitter.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/07/08/otimiza-a-comunicacao-na-tua-empresa-com-shouty/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/07/08/otimiza-a-comunicacao-na-tua-empresa-com-shouty/</feedburner:origLink></item>
		<item>
		<title>Testa hoje teu código JavaScript numa aplicação Rails 3 com Blue Ridge</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/5ixuVg4UkhY/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/06/27/testa-hoje-teu-codigo-javascript-numa-aplicacao-rails-3-com-blue-ridge/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 20:32:09 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Blue Ridge]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[rails3]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=202</guid>
		<description><![CDATA[Caso queiram testar hoje seu código JavaScript numa aplicação Rails 3 de jeito bem simples, o Kristian Mandrup criou um fork do Blue-Ridge onde adaptou os geradores para a nova interface. Os commits dele ainda não foram adicionados ao repositorio oficial e o branch tem uns bugs leves, pelo que criei outro fork e corrigi [...]]]></description>
			<content:encoded><![CDATA[<p>Caso queiram testar hoje seu código JavaScript numa aplicação <a href="http://rubyonrails.org/">Rails</a> 3 de jeito bem simples, o <a href="http://twitter.com/kmandrup">Kristian Mandrup</a> criou um fork do <a href="http://github.com/relevance/blue-ridge">Blue-Ridge</a> onde adaptou os geradores para a nova interface. Os commits dele ainda não foram adicionados ao repositorio oficial e o branch tem uns bugs leves, pelo que criei outro <a href="http://github.com/dcrec1/blue-ridge/tree/rails3">fork</a> e corrigi eles.</p>
<p>Ate que todos os commits sejam aceitos no repositorio oficial, o que podem executar para ter o ambiente configurado é o seguinte:</p>
<pre class="prettyprint">git submodule add -b rails3 git://github.com/dcrec1/blue-ridge.git ./vendor/plugins/blue-ridge
rails g blue_ridge:skeleton
rails g blue_ridge:javascript_spec core
rake spec:javascripts</pre>
<p>Caso não conheçam o <a href="http://github.com/relevance/blue-ridge">Blue-Ridge</a>, o <a href="http://twitter.com/drnic">Dr. Nic</a> publicou faz um tempo um <a href="http://drnicwilliams.com/2009/11/12/dead-simple-javascript-unit-testing-in-rails/">post</a> onde explica a ferramenta e onde também publicou o video de uma palestra que ele deu no <a href="http://skillsmatter.com/event/ajax-ria/rails-underground-2009">Rails Underground 2009</a>.</p>
<p><em>Considera me <a href="http://www.workingwithrails.com/recommendation/new/person/13580-diego-carrion">recomendar</a> no <a href="http://workingwithrails.com/">Working With Rails</a>. Para ficar mais perto das novidades, não deixa de me <a href="http://twitter.com/dcrec1">seguir</a> no Twitter.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/06/27/testa-hoje-teu-codigo-javascript-numa-aplicacao-rails-3-com-blue-ridge/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/06/27/testa-hoje-teu-codigo-javascript-numa-aplicacao-rails-3-com-blue-ridge/</feedburner:origLink></item>
		<item>
		<title>Testando Sinatra com RSpec</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/l7WSBpXWtME/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/06/16/testando-sinatra-com-rspec/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 00:28:01 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Sinatra]]></category>

		<category><![CDATA[bdd]]></category>

		<category><![CDATA[gonow]]></category>

		<category><![CDATA[rspec]]></category>

		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=200</guid>
		<description><![CDATA[Recentemente a Gonow foi contratada para trabalhar num projeto que já tinha passado por outras duas consultorias com desenvolvedores bastante reconhecidos no mercado nacional. A aplicação foi construída sobre Sinatra e algo que me chamou muito a atenção é que a aplicação não tinha uma linha de teste. Mesmo não sendo uma justificativa, aparentemente não [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente a <a href="http://www.gonow.com.br/">Gonow</a> foi contratada para trabalhar num projeto que já tinha passado por outras duas consultorias com desenvolvedores bastante reconhecidos no mercado nacional. A aplicação foi construída sobre <a href="http://www.sinatrarb.com/">Sinatra</a> e algo que me chamou muito a atenção é que a aplicação não tinha uma linha de teste. Mesmo não sendo uma justificativa, aparentemente não existe nada em português falando sobre como integrar o <a href="http://www.sinatrarb.com/">Sinatra</a> com o <a href="http://rspec.info/">RSpec</a> e por isso vou aproveitar para dar uma receita de bolo, de modo que o processo fique mais simples ainda:</p>
<p>* <strong>spec/spec_helper.rb:</strong><br />
<code>
<pre class="prettyprint">require File.join(File.dirname(__FILE__), '..', 'main.rb')

require 'spec'
require 'rack/test'

Spec::Runner.configure do |conf|
  conf.include Rack::Test::Methods
end

def app
  Sinatra::Application
end</pre>
<p></code></p>
<p><strong>* spec/main_spec.rb:</strong><br />
<code>
<pre class="prettyprint">require 'spec_helper'

describe Sinatra::Application do
  context "responding to GET /" do
    it "should return status code 200"
      get '/'
      last_response.code.should == 200
    end
  end
end</pre>
<p></code></p>
<p><strong>* Rakefile:</strong><br />
<code>
<pre class="prettyprint">...
require 'spec/rake/spectask'

desc "Run all specs"
Spec::Rake::SpecTask.new do |t|
  t.spec_opts = %w(--format specdoc --color)
end</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/06/16/testando-sinatra-com-rspec/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/06/16/testando-sinatra-com-rspec/</feedburner:origLink></item>
		<item>
		<title>Porque o Signal não tem isso nem aquilo?</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/R1P0Lr2NROM/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/05/25/porque-o-signal-nao-tem-isso-nem-aquilo/#comments</comments>
		<pubDate>Tue, 25 May 2010 21:33:54 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Integração Continua]]></category>

		<category><![CDATA[signal]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=198</guid>
		<description><![CDATA[Muitas pessoas me perguntam porque o Signal não tem diversas funcionalidades que outras ferramentas tem e se seria legal implementar elas. Nesse post vou explicar rapidamente a motivação para o Signal ser do jeito que é, sem entrar em muito detalhe, devido a que já existe muita informação sobre o assunto.
Antes de começar, é bom [...]]]></description>
			<content:encoded><![CDATA[<p>Muitas pessoas me perguntam porque o <a href="http://github.com/dcrec1/signal">Signal</a> não tem diversas funcionalidades que outras ferramentas tem e se seria legal implementar elas. Nesse post vou explicar rapidamente a motivação para o <a href="http://github.com/dcrec1/signal">Signal</a> ser do jeito que é, sem entrar em muito detalhe, devido a que já existe muita <a href="http://www.google.com.br/search?q=continuous+integration&#038;ie=utf-8&#038;oe=utf-8&#038;aq=t&#038;rls=org.mozilla:en-US:official&#038;client=firefox-a">informação</a> sobre o assunto.</p>
<p>Antes de começar, é bom ter bem claro que <a href="http://martinfowler.com/articles/continuousIntegration.html">integração continua</a> é uma pratica e não uma ferramenta.</p>
<p>Uma das práticas da integração continua é <a href="http://martinfowler.com/articles/continuousIntegration.html#AutomateTheBuild">automatizar o build</a> e é por tal motivo que o <a href="http://github.com/dcrec1/signal">Signal</a> executa unicamente um comando e não oferece, por exemplo, a funcionalidade de executar varias coisas antes de de rodar o build ou rodar ele com diferentes versões do <a href="http://www.ruby-lang.org/en/">Ruby</a>.</p>
<p>Outra prática da integração continua é <a href="http://martinfowler.com/articles/continuousIntegration.html#EveryCommitShouldBuildTheMainlineOnAnIntegrationMachine">rodar o build em cada atualização</a> do repositório central, o que explica por que no <a href="http://github.com/dcrec1/signal">Signal</a> você não consegue agendar os builds, ele espera que você os execute no momento certo, após cada atualização, chamando a devida URL.</p>
<p>Algumas pessoas me pediram que o <a href="http://github.com/dcrec1/signal">Signal</a> mostre o histórico dos builds, de modo que alguém consiga saber em qual momento o build quebrou. Essa funcionalidade é valiosa quando o build fica quebrado por um tempo e certo dia queremos consertar ele, o que devemos evitar acontecer. Que nem o <a href="http://martinfowler.com/">Martin Fowler</a> explicou no último link, uma atualização de código somente pode ser considerada completa quando o build decretou sucesso, caso contrario, devemos corrigir ele na hora.</p>
<p>Para finalizar, uma quarta prática da integração continua é <a href="http://martinfowler.com/articles/continuousIntegration.html#AutomateDeployment">automatizar os deploys</a>. Algumas ferramentas oferecem algumas funcionalidades para o usuário poder configurar quando realizar o deploy, como por exemplo quando o build der sucesso. O <a href="http://github.com/dcrec1/signal">Signal</a> não oferece essa funcionalidade porque acredito que essa lógica deve ser independente da ferramenta, deve ser parte do processo a ser executado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/05/25/porque-o-signal-nao-tem-isso-nem-aquilo/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/05/25/porque-o-signal-nao-tem-isso-nem-aquilo/</feedburner:origLink></item>
		<item>
		<title>Desenvolve em Rails 3 com tuas gems favoritas sem dores de cabeça</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/jnbVUI8gE9o/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/05/24/desenvolve-em-rails-3-com-tuas-gems-favoritas-sem-dores-de-cabeca/#comments</comments>
		<pubDate>Mon, 24 May 2010 20:17:19 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Template]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[rails3]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=197</guid>
		<description><![CDATA[Hoje, iniciar uma aplicação com Rails 3, utilizando as bibliotecas padrão, é muito fácil. Porém, quando queremos utilizar aquelas ferramentas que nos facilitavam tanto a vida no Rails 2, alguns problemas começam a aparecer.
Esses problemas não se devem de nenhum jeito à que o Rails ou as bibliotecas estão instáveis. O que acontece é que [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje, iniciar uma aplicação com <a href="http://rubyonrails.org/">Rails</a> 3, utilizando as bibliotecas padrão, é muito fácil. Porém, quando queremos utilizar aquelas ferramentas que nos facilitavam tanto a vida no <a href="http://rubyonrails.org/">Rails</a> 2, alguns problemas começam a aparecer.</p>
<p>Esses problemas não se devem de nenhum jeito à que o <a href="http://rubyonrails.org/">Rails</a> ou as bibliotecas estão instáveis. O que acontece é que diversos plugins e gems tiveram que mudar sua integração com o framework e alguns optaram por criar versões pre-release, outros por criar branches e outros simplesmente por criar uma nova versão, o que quer dizer que temos que sair caçando qual versão utilizar e da onde para as funcionalidades serem compatíveis.</p>
<p>Para facilitar o trabalho de muita gente e incentivar a adoção do Rails 3 decidi criar um <a href="http://github.com/dcrec1/rails3_template/">template</a> que configura as gems que sempre utilizo nos meus projetos e as instala na aplicação, além de outras tarefas que podem ser identificadas facilmente seguindo o <a href="http://github.com/dcrec1/rails3_template/blob/master/main.rb">script</a>.</p>
<p><em>Caso o template ajudade você, considera me <a href="http://www.workingwithrails.com/recommendation/new/person/13580-diego-carrion">recomendar</a> no <a href="http://workingwithrails.com/">Working With Rails</a>. Para ficar mais perto das novidades, não deixa de me <a href="http://twitter.com/dcrec1">seguir</a> no Twitter.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/05/24/desenvolve-em-rails-3-com-tuas-gems-favoritas-sem-dores-de-cabeca/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/05/24/desenvolve-em-rails-3-com-tuas-gems-favoritas-sem-dores-de-cabeca/</feedburner:origLink></item>
		<item>
		<title>Adicionando um ‘Carregando…’ em todas as requisições Ajax com uma linha de código</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/ia0j3zdb6Vc/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/05/14/adicionando-um-carregando-em-todas-as-requisicoes-ajax-com-uma-linha-de-codigo/#comments</comments>
		<pubDate>Sat, 15 May 2010 01:14:53 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[jQuery]]></category>

		<category><![CDATA[plugin]]></category>

		<category><![CDATA[loading]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=196</guid>
		<description><![CDATA[Caso estejam trabalhando com jQuery e precisem de uma imagem/mensagem estilo &#8220;Carregando&#8230;&#8221; em todas suas requisições Ajax, o plugin jquery.loading fornece essa funcionalidade com somente um linha de código. No meu caso ficou assim:
$.loading({
  onAjax: true,
  text: 'Carregando...',
  mask: true
});
A opção mask serve para adicionar uma div transparente que impossibilite novas ações [...]]]></description>
			<content:encoded><![CDATA[<p>Caso estejam trabalhando com <a href="http://jquery.com/">jQuery</a> e precisem de uma imagem/mensagem estilo &#8220;Carregando&#8230;&#8221; em todas suas requisições <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">Ajax</a>, o plugin <a href="http://plugins.jquery.com/project/loading">jquery.loading</a> fornece essa funcionalidade com somente um linha de código. No meu caso ficou assim:</p>
<pre class="prettyprint"><code>$.loading({
  onAjax: true,
  text: 'Carregando...',
  mask: true
});</code></pre>
<p>A opção <em>mask</em> serve para adicionar uma <em>div</em> transparente que impossibilite novas ações ate a requisição acabar.</p>
<p>Esse funcionalidade é possível devido que as requisições Ajax do jQuery disparam certos <a href="http://docs.jquery.com/Ajax_Events">eventos</a> ao longo do processo, o que nos permite fazer coisas muito legais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/05/14/adicionando-um-carregando-em-todas-as-requisicoes-ajax-com-uma-linha-de-codigo/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/05/14/adicionando-um-carregando-em-todas-as-requisicoes-ajax-com-uma-linha-de-codigo/</feedburner:origLink></item>
		<item>
		<title>Desenvolvendo com Spree, a introdução em 5 minutos</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/q4NM2rKPuWI/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/05/11/desenvolvendo-com-spree-a-introducao-em-5-minutos/#comments</comments>
		<pubDate>Tue, 11 May 2010 05:34:58 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Ecommerce]]></category>

		<category><![CDATA[Spree]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=195</guid>
		<description><![CDATA[Na Gonow estamos desenvolvendo uma aplicação sobre o Spree. Por mas que eu já conhecia o conceito desse e-commerce por cima, teve que investir um tempo considerável lendo a excelente documentação dele e fazendo muita coisa errada, o que me fez aprender bastante.
O que vou escrever nesse post foi o que mais ou menos passei, [...]]]></description>
			<content:encoded><![CDATA[<p>Na <a href="http://www.gonow.com.br/">Gonow</a> estamos desenvolvendo uma aplicação sobre o <a href="http://spreecommerce.com">Spree</a>. Por mas que eu já conhecia o conceito desse <a href="http://pt.wikipedia.org/wiki/Com%C3%A9rcio_eletr%C3%B4nico">e-commerce</a> por cima, teve que investir um tempo considerável lendo a excelente <a href="http://spreecommerce.com/documentation/">documentação</a> dele e fazendo muita coisa errada, o que me fez aprender bastante.</p>
<p>O que vou escrever nesse post foi o que mais ou menos passei, de jeito bem simples, para outros membros da minha equipe que não conheciam tecnicamente o <a href="http://spreecommerce.com">Spree</a> e que ajudou eles a entenderem como funciona internamente e a começar a desenvolver sobre ele sem maiores problemas, sabendo onde procurar as coisas quando necessárias.</p>
<p>Deixei de lado o pagamento porque não tinha claro como explicar ele de forma simples e breve, talvez para outro post.</p>
<p><strong>Conceitos básicos</strong></p>
<p>Uma aplicação criada sobre o <a href="http://spreecommerce.com/">Spree</a> é composta de um core e uma ou mais <a href="http://spreecommerce.com/documentation/extensions.html">extensões</a>. O core é basicamente uma aplicação <a href="http://rubyonrails.org/">Rails</a> sem view. Uma extensão é basicamente uma aplicação <a href="http://rubyonrails.org/">Rails</a> que complementa o core. Quando baixamos o <a href="http://spreecommerce.com/">Spree</a> ele já vem com diversas extensões, como por exemplo o tema padrão pelo qual navegamos na loja e o suporte a pagamentos com cartão via <a href="http://www.authorize.net/">Authorize.net</a>. As extensões estão localizadas na pasta <em>vendor/extensions</em>.</p>
<p>Quando começamos a desenvolver nosso código encima do <a href="http://spreecommerce.com/">Spree</a> fazemos isso numa extensão chamada por padrão de <em><a href="http://spreecommerce.com/documentation/customization_overview.html#thesiteextension">site</a></em>. Para gerar o esqueleto dessa extensão podemos executar <em>script/generate extension site</em>. A extensão <em>site</em> é por default a última a ser carregada, mas existem diversas maneiras de mudar esse comportamento, alterando o <a href="http://spreecommerce.com/documentation/customization_overview.html#extensionloadorder">load order</a>.</p>
<p>Quando uma extensão é carregada, além do comportamento esperado ao inicializar uma aplicação <a href="http://rubyonrails.org/">Rails</a>, o <a href="http://spreecommerce.com/">Spree</a> executa a tarefa rake <em>spree:extensions:<nome>:update</nome></em> e executa dois arquivos: name_extension.rb e name_hooks.rb, onde <em>name</em> é o nome da extensão. A tarefa rake copia todos os assets (javascripts, css, &#8230;) da extensão para a pasta <em>public</em> do projeto. </p>
<p>O arquivo de <a href="http://spreecommerce.com/documentation/theming.html#hooks">hooks</a> serve para estender os <a href="http://spreecommerce.com/documentation/theming.html">temas</a> do Spree, como o que vem por padrão. A idéia dos hooks é que possamos remover, substituir ou inserir código antes e depois de cada seção numa view, de modo que não tenhamos que duplicar todo o conteúdo para editar algo pequeno.</p>
<p>No arquivo de extensões podemos declarar dependências de gems, <a href="http://spreecommerce.com/documentation/payments.html#registeringyourpaymentmethod">registrar</a> métodos de <a href="http://spreecommerce.com/documentation/payments.html">pagamento</a> e abrir algumas classes e módulos, como por exemplo a classe <a href="http://github.com/railsdog/spree/blob/master/app/models/app_configuration.rb">AppConfiguration</a>, que define as <a href="http://spreecommerce.com/documentation/preferences.html">preferências</a> do sistema.</p>
<p><strong>Taxons</strong></p>
<p>No <a href="http://spreecommerce.com">Spree</a> existe o conceito de taxon e <a href="http://spreecommerce.com/documentation/taxonomy.html">taxonomia</a>. Um taxon é uma espécie de tag que pode pertencer a um pai e pode ter vários filhos. Quando falamos de pais e filhos, estamos falando de uma hierarquia e uma taxonomia é justamente isso, uma hierarquia de taxons.</p>
<p>O <a href="http://spreecommerce.com">Spree</a> vem com um tarefa rake chamada <em>db:bootstrap</em> que popula o banco com dados de demonstração e cria duas taxonomias. A primeira taxonomia tem com pai o taxon <em>marca</em> e a segunda tem como pai o taxon <em>categoria</em>. Desse modo, um produto pode ter o taxon <em>Ferrari</em> e o taxon <em>Esportivos</em>, podendo pertencer a duas taxonomias ao mesmo tempo.</p>
<p><strong>Métodos de envío</strong></p>
<p>Uma vez que o usuário escolheu os produtos que ele quer comprar, ele deve escolher a <a href="http://spreecommerce.com/documentation/shipping.html">forma de envio</a> deles. Cada forma de envio esta mapeada a uma <a href="http://spreecommerce.com/documentation/zones.html">zona</a>. Uma zona pode ser composta por uma combinação de países, estados e outras zonas. Caso queiram utilizar estados brasileiros, podem utilizar esse <a href="http://gist.github.com/383737">seed</a>.</p>
<p><strong>Calculadoras</strong></p>
<p>Quando mapeamos uma forma de envio à uma zona, devemos escolher uma <a href="http://spreecommerce.com/documentation/calculators.html">calculadora</a>. Uma calculadora é uma classe que recebe um pedido e computa o valor final, após aplicar impostos e coisas similares.</p>
<p>O core do <a href="http://spreecommerce.com">Spree</a> ja vem com distintas calculadoras, mas elas são somente <a href="http://spreecommerce.com/documentation/calculators.html#registeringa-custom-calculator">ativadas</a> pela extensão <em>calculators</em>, que vem junto com a aplicação.</p>
<p><em>Caso esse post tenha ajudado você, considera me <a href="http://www.workingwithrails.com/recommendation/new/person/13580-diego-carrion">recomendar</a> no <a href="http://workingwithrails.com/">Working With Rails</a>. Para ficar mais perto das novidades, não deixa de me <a href="http://twitter.com/dcrec1">seguir</a> no Twitter.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/05/11/desenvolvendo-com-spree-a-introducao-em-5-minutos/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/05/11/desenvolvendo-com-spree-a-introducao-em-5-minutos/</feedburner:origLink></item>
		<item>
		<title>Anotações em Ruby</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/2odK2dQ2Gw0/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/05/01/anotacoes-em-ruby/#comments</comments>
		<pubDate>Sat, 01 May 2010 23:03:37 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Annotations]]></category>

		<category><![CDATA[Meta Programming]]></category>

		<category><![CDATA[cucumber]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[vraptor]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=194</guid>
		<description><![CDATA[Na mundo da programação, uma anotação é um jeito de marcar o código que esta embaixo dele para diversos fins. No Cucumber, as tags que ele utiliza são uma espécie de anotação para poder aplicar callbacks e classificar algumas funcionalidades e cenários:

@billing
Feature: Verify billing

  @important
  Scenario: Missing product description

  Scenario: Several products

No [...]]]></description>
			<content:encoded><![CDATA[<p>Na mundo da programação, uma anotação é um jeito de marcar o código que esta embaixo dele para diversos fins. No <a href="http://cukes.info/">Cucumber</a>, as tags que ele utiliza são uma espécie de anotação para poder aplicar callbacks e classificar algumas funcionalidades e cenários:</p>
<p><code>
<pre class="prettyprint">@billing
Feature: Verify billing

  @important
  Scenario: Missing product description

  Scenario: Several products</pre>
<p></code></p>
<p>No caso do <a href="http://vraptor.caelum.com.br">VRaptor</a> temos anotações para poder classificar um controller como recurso <a href="http://pt.wikipedia.org/wiki/REST">REST</a> ou especificar o acesso a uma action:</p>
<p><code>
<pre class="prettyprint">@Resource
public class ShoppingCartController {
    ...
}

public class ProductsController {
    @Post
    @Path("/products")
    public void add(Product product) {...}
    ...
}</pre>
<p></code></p>
<p>Em <a href="http://www.ruby-lang.org">Ruby</a>, duas anotações que utilizamos bastante são os métodos <a href="http://ruby-doc.org/core/classes/Module.html#M001641">private</a> e <a href="http://ruby-doc.org/core/classes/Module.html#M001640">protected</a>, que sem argumentos restringem a visibilidade dos métodos definidos embaixo deles:</p>
<p><code>
<pre class="prettyprint">class User
  def jump; end;

  protected
  def eat; end;
  def flirt; end;

  private
  def sleep; end;
  def dream; end;
end</pre>
<p></code></p>
<p>Dependendo do caso, podemos querer anotar nosso código nesse estilo, como por exemplo para especificar que um método esta depreciado, funcionalidade que podemos obter com a gem <a href="http://github.com/qmx/canivete">Canivete</a> do <a href="http://twitter.com/qmx">Douglas Campos</a>:</p>
<p><code>
<pre class="prettyprint">class Bomb
  deprecate
  def explode; end
end</pre>
<p></code></p>
<p>No código acima, quando alguém chamar o método Bomb#explode, o interpretador ira efetivamente executar o método, mas além disso ira imprimir: <em>Warning: calling deprecated method Bomb.explode</em>.</p>
<p>Esse comportamento pode ser obtido por causa do método <a href="http://ruby-doc.org/core/classes/Module.html#M001662">method_added</a>, presente em todos os módulos do Ruby, que é chamado toda vez que um método e definido, recebendo o nome do mesmo como parâmetro.</p>
<p>Podemos utilizar esse método então por exemplo para criar uma anotação que serva para especificar que os métodos declarados após ela somente podem ser chamados por um admin, algo assim:</p>
<p><code>
<pre class="prettyprint">class Module
  def method_added(name)
    unless @_admin_only.nil? or @_proxy_method
      @_proxy_method = true
      alias_method "_admin_#{name}", name
      module_eval <<-STRING
        def #{name}(*args, &amp;block)
          _admin_#{name}(*args, &amp;block) if admin?
        end
      STRING
      @_proxy_method = false
    end
  end

  def admin_only
    @_admin_only = true
  end
end

class User
  def admin?
    [true, false][rand(2)]
  end

  admin_only

  def update_password
    puts "password updated"
  end

  def restart_server
    puts "server restarted"
  end
end</pre>
<p></code></p>
<p>Nó código acima, #admin? ira devolver verdadeiro ou falso aleatoriamente e dependendo do resultado, o método chamado ira ser executado ou não.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/05/01/anotacoes-em-ruby/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/05/01/anotacoes-em-ruby/</feedburner:origLink></item>
		<item>
		<title>Acompanhando projetos no Pivotal Tracker com Kilt</title>
		<link>http://feedproxy.google.com/~r/MouseoverStudio/~3/shsg9vD-dwI/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/03/22/acompanhando-projetos-no-pivotal-tracker-com-kilt/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 22:38:36 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Kilt]]></category>

		<category><![CDATA[Pivotal Tracker]]></category>

		<category><![CDATA[gem]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=193</guid>
		<description><![CDATA[Eu sou fan do Pivotal Tracker. Quando utilizava ele na Gonow, a equipe na qual eu estava ficava sentada toda numa unica mesa e isso era muito legal porque mesmo utilizando a ferramenta, era muito fácil avisar todo mundo que um estava pegando certa tarefa ou entregando aquela.
Quando utilizei o Pivotal com uma equipe remota [...]]]></description>
			<content:encoded><![CDATA[<p>Eu sou fan do <a href="http://www.pivotaltracker.com/">Pivotal Tracker</a>. Quando utilizava ele na <a href="http://www.gonow.com.br">Gonow</a>, a equipe na qual eu estava ficava sentada toda numa unica mesa e isso era muito legal porque mesmo utilizando a ferramenta, era muito fácil avisar todo mundo que um estava pegando certa tarefa ou entregando aquela.</p>
<p>Quando utilizei o Pivotal com uma equipe remota senti falta de saber o que estava acontecendo em tempo real, pelo que decidi criar o <a href="http://github.com/dcrec1/kilt">Kilt</a>.</p>
<p>O <a href="http://github.com/dcrec1/kilt">Kilt</a> é um daemon criado em Ruby que fica solicitando as atualizações dos projetos do usuário configurado e mostra uma notificação de alerta para cada uma recebida:</p>
<p><img src="http://img684.imageshack.us/img684/4875/screenshot20100319at349.png" alt="Kilt" /></p>
<p>Com o <a href="http://github.com/dcrec1/kilt">Kilt</a> consigo ficar programando e ao mesmo tempo ficar sabendo de tudo o que esta acontecendo com os projetos nos quais estou envolvido no Pivotal.</p>
<p>Para instalar o <a href="http://github.com/dcrec1/kilt">Kilt</a> basta baixar a gem e chamar kilt-install com o token do usuário desejado:</p>
<pre class="prettyprint"><code>sudo gem install kilt
kilt-install TOKEN</code></pre>
<p>Caso não conheçam o token do usuário, podem executar:</p>
<pre class="prettyprint"><code>curl -u USERNAME:PASSWORD -X GET https://www.pivotaltracker.com/services/v3/tokens/active</code></pre>
<p>o que devolvera um documento xml com o id e o token do usuário. Caso desejem outro método para solicitar o token, podem se referir à <a href="http://www.pivotaltracker.com/help/api?version=v3#retrieve_token">documentação</a> do Pivotal.</p>
<p>Uma vez instalado o <a href="http://github.com/dcrec1/kilt">Kilt</a>, para rodar ele basta executar:</p>
<pre class="prettyprint"><code>kilt-app</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/03/22/acompanhando-projetos-no-pivotal-tracker-com-kilt/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mouseoverstudio.com/blog/2010/03/22/acompanhando-projetos-no-pivotal-tracker-com-kilt/</feedburner:origLink></item>
	</channel>
</rss>
