<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <id>tag:blog.shadowmaru.org,2005:/posts</id>
  <link type="text/html" rel="alternate" href="http://blog.shadowmaru.org"/>
  <link type="application/atom+xml" rel="self" href="http://blog.shadowmaru.org/posts.atom"/>
  <title>shadowmaru.org</title>
  <updated>2014-08-27T17:44:00Z</updated>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/85</id>
    <published>2014-08-27T18:06:49Z</published>
    <updated>2014-08-27T18:17:11Z</updated>
    <link type="text/html" rel="alternate" href="/2014/8/27/organizando-textos-para-leitura"/>
    <title>Organizando textos para leitura</title>
    <content type="html">&lt;p&gt;Faz anos que acabei a faculdade, mas nunca parei de estudar. No mundo de TI manter-se atualizado &#233; obrigat&#243;rio (a n&#227;o ser que voc&#234; queira fazer a mesma coisa pelo resto da sua vida &amp;#8211; n&#227;o recomendo). Foi assim que descobri Ruby, a ascens&#227;o do JavaScript e os in&#250;meros esquemas de deployment e virtualiza&#231;&#227;o que existem hoje.&lt;/p&gt;
&lt;p&gt;As informa&#231;&#245;es est&#227;o por todo lado na internet, mas v&#234;m de muitos lugares diferentes, e nem sempre d&#225; pra ler aquele artigo naquela hora que voc&#234; o encontrou. Ent&#227;o como guardar este texto e salv&#225;-lo para ler depois? Que ferramentas usar?&lt;/p&gt;
&lt;p&gt;H&#225; muitas op&#231;&#245;es por a&#237;, muitas free, outras pagas. Depois de muito experimentar, acabei chegando num esquema que considero adequado. L&#243;gico, as coisas podem mudar (&lt;span class=&quot;caps&quot;&gt;RIP&lt;/span&gt; Google Reader), ent&#227;o &#233; sempre bom estar atento a todas as ferramentas.&lt;/p&gt;
&lt;h3&gt;As ferramentas&lt;/h3&gt;
&lt;p&gt;Vou explicar detalhadamente como uso cada uma delas, mas segue a&#237; a lista do que uso atualmente:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Pocket&lt;/li&gt;
	&lt;li&gt;Evernote&lt;/li&gt;
	&lt;li&gt;Feedly&lt;/li&gt;
	&lt;li&gt;Kindle (ou iPad mini)&lt;/li&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;IFTTT&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fontes de informa&#231;&#227;o&lt;/h3&gt;
&lt;p&gt;Al&#233;m do &lt;a href=&quot;http://feedly.com&quot;&gt;Feedly&lt;/a&gt;, onde assino os feeds que mais me interessam, as informa&#231;&#245;es podem vir do Twitter (&lt;a href=&quot;http://twitter.com/shadowmaru&quot;&gt;siga-me!&lt;/a&gt;), do Facebook ou mesmo de uma busca por algo espec&#237;fico no Google.&lt;/p&gt;
&lt;h3&gt;Para textos simples&lt;/h3&gt;
&lt;p&gt;Se &#233; um texto simples, mando direto para o &lt;a href=&quot;https://getpocket.com&quot;&gt;Pocket&lt;/a&gt;. Praticamente todas as fontes de informa&#231;&#227;o t&#234;m suporte para envio para o Pocket (extens&#245;es para browsers cobrem o resto), ent&#227;o &#233; algo realmente simples. Depois de lido posso arquivar ou enviar para o Evernote. Da&#237; o pr&#243;ximo t&#243;pico.&lt;/p&gt;
&lt;h3&gt;Para arquivar&lt;/h3&gt;
&lt;p&gt;O &lt;a href=&quot;https://www.evernote.com/referral/Registration.action?uid=95652&amp;sig=29d814b39335afff161af742e5055eaf&quot;&gt;Evernote&lt;/a&gt; &#233; &#243;timo para manter um arquivo de absolutamente tudo. Eu fa&#231;o backup das fotos do Instagram, checkins do &lt;strike&gt;Foursquare&lt;/strike&gt; Swarm (via &lt;span class=&quot;caps&quot;&gt;IFTTT&lt;/span&gt; &amp;#8211; ver abaixo), tiro fotos de contas para pagar depois e principalmente arquivo tudo o que me &#233; relevante para ter a informa&#231;&#227;o sempre que eu precisar. Voc&#234; pode organizar as notas em notebooks e tags. Especificamente, eu uso um notebook chamado &#8216;Bookmarks&#8217;, que posteriormente posso organizar por assunto que eu esteja estudando. As tags ajudam a (excelente) busca.&lt;/p&gt;
&lt;h3&gt;Leituras longas&lt;/h3&gt;
&lt;p&gt;Nada bate o Kindle e seu e-ink para leituras mais longas. Eu tenho um &lt;a href=&quot;http://www.amazon.com.br/dp/B00JG8GBDM/ref=nav_kdvcscw&quot;&gt;Kindle Paperwhite&lt;/a&gt; e adoro. Ent&#227;o se vejo que um texto &#233; muito grande, j&#225; mando pro Kindle (via email ou extens&#227;o de browser) e tamb&#233;m pro Evernote. L&#243;gico que livros entram nessa categoria. J&#225; livros em &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt;, que talvez n&#227;o fiquem bem no Kindle eu mando para o iBooks, da&#237; eu leio no iPad mini. Tamb&#233;m &#233; poss&#237;vel mandar a partir do Pocket (ver abaixo).&lt;/p&gt;
&lt;h3&gt;Integrando com o &lt;span class=&quot;caps&quot;&gt;IFTTT&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;O &lt;a href=&quot;http://ifttt.com&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IFTTT&lt;/span&gt;&lt;/a&gt; (If This Then That) &#233; uma excelente ferramenta para automatizar coisas. As receitas que utilizo para organizar meus textos:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;From Pocket to Kindle &amp;#8211; &#224;s vezes salvo um artigo no Pocket mas reparo que ele &#233; meio longo, e seria melhor ler no Kindle. Sem problemas, aplico a tag &#8216;kindle&#8217; no Pocket e ele envia para o meu email registrado no Kindle para receber textos&lt;/li&gt;
	&lt;li&gt;From Pocket to Evernote&lt;/li&gt;
	&lt;li&gt;Save favourite tweets to Evernote&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E voc&#234;? Como faz para organizar os seus textos para leitura? Descreva nos coment&#225;rios.&lt;/p&gt;
&lt;p&gt;PS: este post faz parte de uma iniciativa do &lt;a href=&quot;http://twitter.com/rafaelrosafu&quot;&gt;@rafaelrosafu&lt;/a&gt; chamada &lt;a href=&quot;https://twitter.com/search?q=%23clubedosposts&quot;&gt;#ClubeDosPosts&lt;/a&gt; de incentivar as pessoas a escreverem pelo menos um post por m&#234;s relacionado a TI. Se quiser participar, acesse a &lt;a href=&quot;http://bit.ly/clubedosposts&quot;&gt;planilha&lt;/a&gt; e inclua seu twitter handle.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/84</id>
    <published>2011-05-15T14:13:07Z</published>
    <updated>2011-05-15T14:22:45Z</updated>
    <link type="text/html" rel="alternate" href="/2011/5/15/railsconf-2011-here-i-go"/>
    <title>RailsConf 2011, here I go</title>
    <content type="html">&lt;p&gt;Primeiro post do ano, como o tempo passou. N&#227;o foi nem falta de tempo, mas falta do que escrever mesmo. Mas agora (hoje) parto para a &lt;a href=&quot;http://railsconf.org&quot;&gt;RailsConf 2011&lt;/a&gt; em Baltimore, e espero ter muitas coisas para escrever depois de voltar.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/43/original/RailsConf.gif&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Destaco algumas palestras que devo assistir:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;From 1,000 Transactions a Month to 1 million in a Day: Lessons in Credit Card Processing from LivingSocial&lt;/li&gt;
	&lt;li&gt;Keeping Rails on the Tracks&lt;/li&gt;
	&lt;li&gt;Solving Performance Problems with Horizontal Scale. (The Worker Pattern)&lt;/li&gt;
	&lt;li&gt;Beyond &lt;span class=&quot;caps&quot;&gt;MVC&lt;/span&gt; &amp;#8212; &lt;span class=&quot;caps&quot;&gt;DCI&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Antes da RailsConf, tamb&#233;m participarei da Ignite RailsConf, com palestras de 5 minutos, 20 slides.&lt;/p&gt;
&lt;p&gt;Depois da confer&#234;ncia, tiro alguns dias de f&#233;rias para visitar Nova York, e realizar um de meus sonhos: assistir a um jogo no Yankee Stadium.&lt;/p&gt;
&lt;p&gt;Agrade&#231;o &#224; &lt;a href=&quot;http://www.bioritmo.com.br&quot;&gt;Bio Ritmo&lt;/a&gt; por possibilitar essa experi&#234;ncia que ser&#225; muito importante para minha vida e carreira.&lt;/p&gt;
&lt;p&gt;At&#233; a volta!&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/83</id>
    <published>2010-12-02T22:56:28Z</published>
    <updated>2010-12-02T22:57:00Z</updated>
    <link type="text/html" rel="alternate" href="/2010/12/2/win"/>
    <title>#win</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;http://blog.shadowmaru.org/system/assets/42/original/Screen_shot_2010-12-02_at_8.53.09_PM.png&quot; /&gt;&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/82</id>
    <published>2010-10-25T15:35:52Z</published>
    <updated>2010-10-25T15:37:32Z</updated>
    <link type="text/html" rel="alternate" href="/2010/10/25/rubyconf-brasil-va-de-bike"/>
    <title>RubyConf Brasil, v&#225; de bike</title>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.rubyconf.com.br?utm_campaign=RubyConf&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=img_125x125&quot;&gt;&lt;img src=&quot;http://www.rubyconf.com.br/system/imgs/3/original/rubyConf_125x125_participante.gif&quot;	alt=&quot;Eu vou participar do RubyConf Brasil 2010&quot; align=&quot;left&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Este ano a &lt;a href=&quot;http://www.rubyconf.com.br&quot;&gt;RubyConf Brasil&lt;/a&gt; (anteriormente RailsSummit Latin America) ser&#225; em outro local, o &lt;a href=&quot;http://www.convencoesfreicaneca.com.br/&quot;&gt;Centro de Conven&#231;&#245;es Frei Caneca&lt;/a&gt;. No ano passado o evento foi no Anhembi.&lt;/p&gt;
&lt;p&gt;Ficando em uma regi&#227;o central, e bem servida de transporte p&#250;blico (2 esta&#231;&#245;es de metr&#244; &amp;#8211; Consola&#231;&#227;o e Anhangaba&#250;) e dezenas de linhas de &#244;nibus pr&#243;ximas), seria bobagem ir de carro pra l&#225; (e pagar uma bica de estacionamento). Mas pensem em outro jeito de ir para l&#225;: de bicicleta.&lt;/p&gt;
&lt;p&gt;O Shopping Frei Caneca conta com um biciclet&#225;rio &lt;a href=&quot;http://www.usebike.com.br&quot;&gt;UseBike&lt;/a&gt;, parceria entre o Instituto Parada Vital, Porto Seguro e Estapar. L&#225; voc&#234; pode estacionar sua bicicleta, gratuitamente, das 6h &#224;s 22h. Voc&#234; tamb&#233;m pode alugar e devolver uma bicicleta, sendo que a primeira hora &#233; gr&#225;tis.&lt;/p&gt;
&lt;p&gt;Ent&#227;o uma das possibilidades &#233; alugar uma bicicleta no estacionamento do Col&#233;gio S&#227;o Luis ou do Conjunto Nacional, e de l&#225; pedalar at&#233; o Frei Caneca. N&#227;o d&#225; nem 5 minutos pra chegar l&#225;, mas poupa a caminhada. Se voc&#234; est&#225; mais pr&#243;ximo da Linha Vermelha, fa&#231;a o mesmo na esta&#231;&#227;o Anhangaba&#250; do metr&#244;.&lt;/p&gt;
&lt;p&gt;Para estacionar a bicicleta &#233; necess&#225;rio um cadastro pr&#233;vio. Leve RG, &lt;span class=&quot;caps&quot;&gt;CPF&lt;/span&gt; e comprovante de resid&#234;ncia. Para alugar tamb&#233;m &#233; necess&#225;rio um cart&#227;o de cr&#233;dito.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/81</id>
    <published>2010-07-26T13:31:49Z</published>
    <updated>2010-07-26T20:51:39Z</updated>
    <link type="text/html" rel="alternate" href="/2010/7/26/o-que-eu-levo-na-minha-messenger-bag"/>
    <title>O que eu levo na minha messenger bag</title>
    <content type="html">&lt;p&gt;Este post &#233; uma participa&#231;&#227;o no concurso do &lt;a href=&quot;http://www.efetividade.net&quot;&gt;Efetividade.net&lt;/a&gt;, com o t&#237;tulo &lt;a href=&quot;http://www.efetividade.net/2010/07/19/promocao-mochilas/&quot;&gt;&amp;quot;O que voc&#234; carrega na sua mochila (ou bolsa&amp;#8230;) de trabalho?&amp;quot;&lt;/a&gt; Bom, eu na verdade uso uma messenger bag, parecida com a dos bike messengers de Nova York, por isso o t&#237;tulo do post.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.shadowmaru.org/system/assets/41/original/DSCF9161.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A messenger bag &#233; da marca Timbuk2, original de San Francisco, e eles s&#227;o especializados nesse tipo de bolsa, embora fabriquem outros modelos, como mochilas e bolsas para mulher. A minha &#233; uma &lt;a href=&quot;http://www.timbuk2.com.br/produto/laptop/coder-ballistic-fabric/&quot;&gt;&lt;strong&gt;Coder&lt;/strong&gt;&lt;/a&gt;, que tem espa&#231;o e prote&#231;&#227;o para notebooks.&lt;/p&gt;
&lt;p&gt;Como vou de bicicleta para o trabalho, prefiro n&#227;o carregar muito peso nas costas, portanto a lista &#233; pequena. O resto vai numa bolsa de guid&#227;o (ferramentas), num alforge (roupas e compras) e nos bolsos (carteira, celular, iPod).&lt;/p&gt;
&lt;p&gt;Segue a lista:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Notebook de 13&amp;quot;&lt;/li&gt;
	&lt;li&gt;Capa sleeve para o notebook&lt;/li&gt;
	&lt;li&gt;Carregador do notebook&lt;/li&gt;
	&lt;li&gt;Cabo do iPod&lt;/li&gt;
	&lt;li&gt;Mouse&lt;/li&gt;
	&lt;li&gt;Mini Moleskine&lt;/li&gt;
	&lt;li&gt;Caneta uni pin 0.005&lt;/li&gt;
	&lt;li&gt;Adaptador de video para monitor externo&lt;/li&gt;
	&lt;li&gt;Livro &amp;#8220;Descubra seus pontos fortes&amp;#8221;&lt;/li&gt;
	&lt;li&gt;Trident&lt;/li&gt;
	&lt;li&gt;Toalha para enxugar o suor na chegada :)&lt;/li&gt;
	&lt;li&gt;&#211;culos escuros&lt;/li&gt;
	&lt;li&gt;Ecobag para n&#227;o pegar sacos pl&#225;sticos no supermercado&lt;/li&gt;
	&lt;li&gt;Molho de chaves&lt;/li&gt;
&lt;/ul&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/80</id>
    <published>2010-07-23T05:10:33Z</published>
    <updated>2010-07-23T05:12:23Z</updated>
    <link type="text/html" rel="alternate" href="/2010/3/22/migrando-senhas-com-authlogic"/>
    <title>Migrando senhas com Authlogic</title>
    <content type="html">&lt;p&gt;Estou no processo de migra&#231;&#227;o de uma aplica&#231;&#227;o de Rails 1.2.6 (!!) para Rails 2.3.5. Como muita coisa mudou, estou refazendo do zero. S&#243; que um dos problemas &#233; a base legada, com muitos usu&#225;rios. Na &#233;poca, os sistemas de autentica&#231;&#227;o como restful_authentication, Authlogic e Devise nem existiam, ent&#227;o a autentica&#231;&#227;o foi feita na m&#227;o.&lt;/p&gt;
&lt;p&gt;O desafio era migrar tudo para Authlogic. Seria dif&#237;cil, se n&#227;o fosse uma feature pouco conhecida do Authlogic: transition_from_crypto_providers&lt;/p&gt;
&lt;p&gt;Essa configura&#231;&#227;o faz com que quando um usu&#225;rio fizer login, o Authlogic compare a senha com a encripta&#231;&#227;o normal dele, se n&#227;o funcionar ele tenta as outras que voc&#234; define assim:&lt;/p&gt;
&lt;script src='http://gist.github.com/340694.js'&gt;&lt;/script&gt;&lt;pre class=&quot;degrade&quot;&gt;
acts_as_authentic do |c|
   c.transition_from_crypto_providers = [UserPasswordCryptSHA, UserPasswordCryptMD5]
end
&lt;/pre&gt;
&lt;p&gt;Neste exemplo, configuramos dois m&#233;todos de encripta&#231;&#227;o legados. Quando o Authlogic validar a senha com um desses m&#233;todos, ele automaticamente encripta a senha novamente usando o m&#233;todo novo. Isso acontece tamb&#233;m para registros novos. E para configurar um m&#233;todo legado, &#233; s&#243; criar um arquivo na lib:&lt;/p&gt;
&lt;script src='http://gist.github.com/340696.js'&gt;&lt;/script&gt;&lt;pre class=&quot;degrade&quot;&gt;
class UserPasswordCryptMD5
     def self.encrypt(*tokens)
          Digest::MD5.hexdigest(*tokens)
     end

  def self.matches?(crypted_password, *tokens)
    encrypt(*tokens) == crypted_password
  end

     def self.type
          &quot;MD5&quot;
     end
end
&lt;/pre&gt;
&lt;p&gt;O Authlogic pede somente dois m&#233;todos, encrypt e matches?. N&#227;o preciso explicar, n&#233;?&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/79</id>
    <published>2010-07-23T05:08:05Z</published>
    <updated>2010-07-23T05:14:24Z</updated>
    <link type="text/html" rel="alternate" href="/2010/2/22/redirecionando-rotas-antigas-com-apache-e-nginx"/>
    <title>Redirecionando rotas antigas com Apache e Nginx</title>
    <content type="html">&lt;p&gt;Aqui na &lt;a href=&quot;http://www.bioritmo.com.br&quot;&gt;Bio Ritmo&lt;/a&gt; recentemente migramos o site da &lt;a href=&quot;http://www.smartfit.com.br&quot;&gt;SmartFit&lt;/a&gt; de &lt;a href=&quot;http://sledge.boo-box.com/list/page/UEhQXyMjX2JveF8jI190YWdnaW5nLXRvb2xfIyNfNDI0-44&quot; class=&quot;bbli&quot;&gt;&lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;&lt;/a&gt; para &lt;a href=&quot;http://sledge.boo-box.com/list/page/cmFpbHNfIyNfYm94XyMjX3RhZ2dpbmctdG9vbF8jI18xMjEwNjg=-52&quot; class=&quot;bbli&quot;&gt;Rails&lt;/a&gt;, e com isso muitas p&#225;ginas que estavam indexadas pelo Google ficaram com endere&#231;os diferentes. Pensando no &lt;span class=&quot;caps&quot;&gt;SEO&lt;/span&gt;, e para n&#227;o perder as visitas por causa dessa migra&#231;&#227;o, fizemos um redirecionamento permanente (301) com o Apache, usando .htaccess:&lt;/p&gt;
&lt;script src='http://gist.github.com/309129.js'&gt;&lt;/script&gt;&lt;pre class=&quot;degrade&quot;&gt;
Redirect /atendimento.php http://www.smartfit.com.br/atendimento
Redirect /unidades.php http://www.smartfit.com.br/unidades
Redirect /franquias.php http://www.smartfit.com.br/franchises/new

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/a-smartfit.php$
RewriteCond %{QUERY_STRING} ^idUnidade=1$
RewriteRule ^.*$ http://www.smartfit.com.br/unidades/brasilia? [L,R=301]
RewriteCond %{REQUEST_URI} ^/a-smartfit.php$
RewriteCond %{QUERY_STRING} ^idUnidade=2$
RewriteRule ^.*$ http://www.smartfit.com.br/unidades/morumbi? [L,R=301]
RewriteCond %{REQUEST_URI} ^/a-smartfit.php$
RewriteCond %{QUERY_STRING} ^idUnidade=3$
RewriteRule ^.*$ http://www.smartfit.com.br/unidades/porto-alegre? [L,R=301]
RewriteCond %{REQUEST_URI} ^/a-smartfit.php$
RewriteCond %{QUERY_STRING} ^idUnidade=4$
RewriteRule ^.*$ http://www.smartfit.com.br/unidades/copacabana-i? [L,R=301]
RewriteCond %{REQUEST_URI} ^/a-smartfit.php$
RewriteCond %{QUERY_STRING} ^idUnidade=5$
RewriteRule ^.*$ http://www.smartfit.com.br/unidades/copacabana-ii? [L,R=301]
RewriteCond %{REQUEST_URI} ^/a-smartfit.php$
RewriteCond %{QUERY_STRING} ^idUnidade=6$
RewriteRule ^.*$ http://www.smartfit.com.br/unidades/botafogo? [L,R=301]
&lt;/pre&gt;
&lt;p&gt;Repare que as p&#225;ginas que tinham par&#226;metros din&#226;micos foram um pouco mais trabalhosas, pois precisamos usar mod_rewrite.&lt;/p&gt;
&lt;p&gt;S&#243; que nesta semana migramos o servidor para Nginx, e ap&#243;s muita pesquisa e experimenta&#231;&#227;o, cheguei na seguinte configura&#231;&#227;o:&lt;/p&gt;
&lt;script src='http://gist.github.com/309131.js'&gt;&lt;/script&gt;&lt;pre class=&quot;degrade&quot;&gt;
location /atendimento.php {
  rewrite /atendimento.php http://www.smartfit.com.br/atendimento permanent;
}

location /franquias.php {
  rewrite /franquias.php http://www.smartfit.com.br/franchises/new permanent;
}

location /unidades.php {
  rewrite /unidades.php http://www.smartfit.com.br/unidades permanent;
}

location /a-smartfit.php {
  if ($args ~ idUnidade=1) {
   rewrite ^ http://www.smartfit.com.br/unidades/brasilia? permanent;
  }
  if ($args ~ idUnidade=2) {
   rewrite ^ http://www.smartfit.com.br/unidades/morumbi? permanent;
  }
  if ($args ~ idUnidade=3) {
   rewrite ^ http://www.smartfit.com.br/unidades/porto-alegre? permanent;
  }
  if ($args ~ idUnidade=4) {
   rewrite ^ http://www.smartfit.com.br/unidades/copacabana-i? permanent;
  }
  if ($args ~ idUnidade=5) {
   rewrite ^ http://www.smartfit.com.br/unidades/copacabana-ii? permanent;
  }
  if ($args ~ idUnidade=6) {
   rewrite ^ http://www.smartfit.com.br/unidades/botafogo? permanent;
  }
}
&lt;/pre&gt;
&lt;p&gt;Achei mais limpo que o Apache, funciona sem problemas, e sem perder page ranking.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/78</id>
    <published>2010-07-23T04:32:06Z</published>
    <updated>2010-07-23T05:02:10Z</updated>
    <link type="text/html" rel="alternate" href="/2009/11/10/ultimos-eventos"/>
    <title>&#218;ltimos eventos</title>
    <content type="html">&lt;p&gt;Ol&#225;, sei que tenho negligenciado um pouco este blog, mas muita coisa est&#225; acontecendo ultimamente, profissionalmente e pessoalmente, o que n&#227;o vem ao caso comentar.&lt;/p&gt;
&lt;p&gt;Estou trabalhando agora na &lt;a href=&quot;http://www.bioritmo.com.br&quot;&gt;Bio Ritmo&lt;/a&gt;, mais precisamente cuidando dos sistemas da &lt;a href=&quot;http://www.smartfit.com.br&quot;&gt;SmartFit&lt;/a&gt;, na companhia de outros talentosos desenvolvedores &lt;a href=&quot;http://sledge.boo-box.com/list/page/UmFpbHNfIyNfYm94XyMjX3RhZ2dpbmctdG9vbF8jI18xMjEwNjg=-52&quot; class=&quot;bbli&quot;&gt;Rails[bb]&lt;/a&gt;. Foi muito bom meu per&#237;odo na &lt;a href=&quot;http://www.dburnsdesign.com&quot;&gt;DBurns Design&lt;/a&gt;, e agrade&#231;o muito ao &lt;a href=&quot;http://www.marciotrindade.com&quot;&gt;Marcio Trindade&lt;/a&gt; pela oportunidade.&lt;/p&gt;
&lt;p&gt;L&#243;gico que estive no &#250;ltimo &lt;a href=&quot;http://www.railssummit.com.br&quot;&gt;Rails Summit&lt;/a&gt;, mas ainda n&#227;o tive tempo de escrever sobre tudo. O que eu j&#225; escrevi voc&#234;s podem conferir na &lt;a href=&quot;http://www.infoq.com/br&quot;&gt;InfoQ Brasil&lt;/a&gt;, &#233; s&#243; ver &lt;a href=&quot;http://www.infoq.com/br/bycategory.action?authorName=Ricardo-Yasuda&quot;&gt;meu conte&#250;do publicado&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ainda sobre eventos, no dia 28/11/2009 acontece o primeiro &lt;a href=&quot;http://www.devinsampa.com.br&quot;&gt;Dev In Sampa&lt;/a&gt;, e pretendo ir, se conseguir uma vaga :)&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/77</id>
    <published>2010-07-23T04:29:33Z</published>
    <updated>2010-07-23T04:29:33Z</updated>
    <link type="text/html" rel="alternate" href="/2009/9/25/6o-encontro-do-guru-sp-testes"/>
    <title>6o Encontro do Guru-SP - Testes</title>
    <content type="html">&lt;p&gt;O &lt;a href=&quot;http://www.guru-sp.org&quot;&gt;Guru-SP&lt;/a&gt; &#233; o Grupo de Usu&#225;rios Ruby de S&#227;o Paulo, fundado no ano passado para discutir, promover eventos, e talvez futuramente elaborar um projeto, tudo relacionado a Ruby, e n&#227;o necessariamente limitado a Rails.&lt;/p&gt;
&lt;p&gt;Neste s&#225;bado (26/09/2009) acontecer&#225; o 6o encontro do grupo. Faremos uma mesa de debates sobre um assunto que ainda nem todos dominam: testes. Fui gentilmente convidado para participar da mesa de debates, juntamente com &lt;a href=&quot;http://cassiomarques.wordpress.com&quot;&gt;C&#225;ssio Marques&lt;/a&gt;, &lt;a href=&quot;http://www.mouseoverstudio.com/blog/&quot;&gt;Diego Carrion&lt;/a&gt;, &lt;a href=&quot;http://fabiokung.com/&quot;&gt;Fabio Kung&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/jorgediz&quot;&gt;Jorge Diz&lt;/a&gt;, &lt;a href=&quot;http://www.aniche.com.br/&quot;&gt;Mauricio Aniche&lt;/a&gt; e &lt;a href=&quot;http://twitter.com/scalone&quot;&gt;Thiago Scalone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O encontro acontecer&#225; na &lt;a href=&quot;http://www.gonow.com.br&quot;&gt;Gonow&lt;/a&gt; que mais uma vez ceder&#225; suas depend&#234;ncias para um evento de Ruby, como no &lt;a href=&quot;http://blog.shadowmaru.org/2009/8/22/rails-rumble-2009&quot;&gt;Rails Rumble&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mais detalhes no &lt;a href=&quot;http://www.rubyinside.com.br/6o-encontro-do-guru-sp-fechados-os-detalhes-2217&quot;&gt;RubyInside&lt;/a&gt;&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/76</id>
    <published>2010-07-23T04:24:36Z</published>
    <updated>2010-07-23T04:24:36Z</updated>
    <link type="text/html" rel="alternate" href="/2009/9/21/rails-summit-2009"/>
    <title>Rails Summit 2009</title>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=vouParticipar_210x60&quot;&gt;Rails Summit 2009&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Seguindo o grande sucesso de 2008, que eu relatei no blog em 3 posts (&lt;a href=&quot;http://blog.shadowmaru.org/2008/10/16/rails-summit-latin-america-dia-1&quot;&gt;Dia 1&lt;/a&gt;, &lt;a href=&quot;http://blog.shadowmaru.org/2008/10/17/rails-summit-latin-america-dia-2&quot;&gt;Dia 2&lt;/a&gt; e a &lt;a href=&quot;http://blog.shadowmaru.org/2008/10/17/rails-summit-a-experiencia-pessoal&quot;&gt;Experi&#234;ncia Pessoal&lt;/a&gt;) teremos mais uma vez o &lt;a href=&quot;http://www.railssummit.com.br&quot;&gt;Rails Summit Latin America&lt;/a&gt;, que ser&#225; realizado nos dias 13 e 14 de outubro de 2009, no Audit&#243;rio Elis Regina do Centro de Conven&#231;&#245;es do Anhembi.&lt;/p&gt;
&lt;p&gt;O Rails Summit Latin America, para quem n&#227;o conhece, &#233; um confer&#234;ncia internacional de Ruby e Rails que re&#250;ne toda a comunidade brasileira e mais alguns desenvolvedores dos demais pa&#237;ses da Am&#233;rica Latina. &#201; uma grande oportunidade para aprender e conhecer outros desenvolvedores, e por que n&#227;o, conseguir um emprego na &#225;rea.&lt;/p&gt;
&lt;p&gt;Eu estarei presente, cobrindo o evento para a &lt;a href=&quot;http://www.infoq.com/br&quot;&gt;InfoQ Brasil&lt;/a&gt;, onde colaboro com &lt;a href=&quot;http://www.infoq.com/br/bycategory.action?authorName=Ricardo-Yasuda&quot;&gt;tradu&#231;&#245;es de not&#237;cias, entrevistas e artigos&lt;/a&gt;. A &lt;a href=&quot;http://www.fratech.net&quot;&gt;Fratech&lt;/a&gt; gentilmente cedeu cortesias atrav&#233;s de sorteio aos seus editores e eu fui um dos vencedores. Agrade&#231;o a organiza&#231;&#227;o do Rails Summit e a Fratech por isso.&lt;/p&gt;
&lt;p&gt;Este ano teremos palestras de nomes consagrados da comunidade Ruby/Rails nacional e internacional. Vejam a lista de palestrantes:&lt;/p&gt;
&lt;h3&gt;Palestrantes nacionais&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Arthur Zapparoli (Arthurgeek)&lt;/li&gt;
	&lt;li&gt;Bruno Miranda&lt;/li&gt;
	&lt;li&gt;Carlos Brando&lt;/li&gt;
	&lt;li&gt;Carlos Villela&lt;/li&gt;
	&lt;li&gt;Fabio Kung&lt;/li&gt;
	&lt;li&gt;Jos&#233; Valim&lt;/li&gt;
	&lt;li&gt;Leonardo Borges&lt;/li&gt;
	&lt;li&gt;Marcos Tapaj&#243;s&lt;/li&gt;
	&lt;li&gt;Nando Vieira&lt;/li&gt;
	&lt;li&gt;Vin&#237;cius Telles&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Palestrantes internacionais&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Bryan Lyles (&lt;a href=&quot;http://rubyhoedown2008.confreaks.com/05-bryan-liles-lightning-talk-tatft-test-all-the-f-in-time.html&quot;&gt;&lt;span class=&quot;caps&quot;&gt;TATFT&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;Chad Fowler&lt;/li&gt;
	&lt;li&gt;David Chelimsky&lt;/li&gt;
	&lt;li&gt;Glenn Vanderburg&lt;/li&gt;
	&lt;li&gt;Gregg Pollack&lt;/li&gt;
	&lt;li&gt;Ilya Grigorik&lt;/li&gt;
	&lt;li&gt;Jason Seifer&lt;/li&gt;
	&lt;li&gt;Matt Aimonetti&lt;/li&gt;
	&lt;li&gt;Obie Fernandez&lt;/li&gt;
	&lt;li&gt;Pratik Naik&lt;/li&gt;
	&lt;li&gt;Richard Kilmer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se voc&#234; for, deixe um coment&#225;rio, nos encontramos por l&#225;.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/75</id>
    <published>2009-09-16T02:43:43Z</published>
    <updated>2009-09-17T01:42:29Z</updated>
    <link type="text/html" rel="alternate" href="/2009/9/16/formate-melhor-seu-console-do-rails-ou-irb-com-hirb"/>
    <title>Formate melhor seu console do Rails ou irb com Hirb</title>
    <content type="html">&lt;p&gt;Geralmente quando quero testar alguma coisa no ActiveRecord do Rails eu abro um console, usando o &lt;code&gt;script/console&lt;/code&gt;. O problema &#233; que a formata&#231;&#227;o dele (e consequentemente do irb, que &#233; a engine por tr&#225;s do console) &#233; muito ruim, mostrando os resultados em forma de Hash.&lt;/p&gt;
&lt;p&gt;Entra &lt;a href=&quot;http://tagaholic.me/hirb/&quot;&gt;Hirb&lt;/a&gt;. Ele &#233;, segundo o autor, Gabriel Horner, &amp;#8216;um miniframework de visualiza&#231;&#227;o para console/irb&amp;#8217;. As melhorias incluem formata&#231;&#227;o em tabelas de Arrays e Hashes, pagina&#231;&#227;o, visualiza&#231;&#227;o em &#225;rvore e menu.&lt;/p&gt;
&lt;p&gt;Para instalar,&lt;/p&gt;
&lt;pre&gt;sudo gem install cldwalker-hirb --source http://gems.github.com&lt;/pre&gt;
&lt;p&gt;e para usar, entre no irb/console, fa&#231;a o require e ative&lt;/p&gt;
&lt;script src='http://gist.github.com/187833.js'&gt;&lt;/script&gt;
&lt;pre class=&quot;degrade&quot;&gt;
$ script/console
Loading development environment (Rails 2.3.4)
&amp;gt;&amp;gt; require 'hirb'
=&amp;gt; []
&amp;gt;&amp;gt; Hirb.enable
=&amp;gt; nil
&lt;/pre&gt;
&lt;p&gt;Se quiser que o Hirb sempre esteja habilitado, crie ou edite o arquivo ~/.irbrc&lt;/p&gt;
&lt;script src='http://gist.github.com/187834.js'&gt;&lt;/script&gt;
&lt;pre class=&quot;degrade&quot;&gt;
if ENV['RAILS_ENV']
  require 'rubygems'
  require 'hirb'
  Hirb.enable
end
&lt;/pre&gt;
&lt;p&gt;Vamos ver um exemplo com ActiveRecord:&lt;/p&gt;
&lt;script src='http://gist.github.com/187835.js'&gt;&lt;/script&gt;
&lt;pre class=&quot;degrade&quot;&gt;
&amp;gt;&amp;gt; Post.all :limit =&amp;gt; 5
+----+---------------+---------------+---------------+---------------+---------+---------------+---------------+-----------+---------------+
| id | name          | body          | published_at  | permalink     | user_id | created_at    | updated_at    | published | comments_c... |
+----+---------------+---------------+---------------+---------------+---------+---------------+---------------+-----------+---------------+
| 74 | Manipuland... | Uma das d?... | 2009-06-09... | manipuland... | 1       | 2009-06-09... | 2009-08-11... | true      | 3             |
| 73 | Limpando o... | !/system/a... | 2009-04-22... | limpando-o... | 1       | 2009-04-22... | 2009-08-11... | true      | 0             |
| 72 | Why's (poi... | &amp;lt;img src=&quot;... | 2009-04-09... | why-s-poig... | 1       | 2009-04-09... | 2009-08-11... | true      | 0             |
| 70 | Evento: Ru... | No dia 4 d... | 2009-03-10... | evento-rub... | 1       | 2009-03-10... | 2009-08-10... | true      | 1             |
| 68 | Dica r&#225;pi... | O &amp;lt;a href=... | 2009-03-06... | dica-rapid... | 1       | 2009-03-06... | 2009-03-06... | true      | 1             | 
+----+---------------+---------------+---------------+---------------+---------+---------------+---------------+-----------+---------------+
5 rows in set
&lt;/pre&gt;
&lt;p&gt;Repare que na linha que tem um acento ele recua um caractere, deve ser um problema ainda a ser resolvido com caracteres especiais.&lt;/p&gt;
&lt;p&gt;Uma outra coisa legal &#233; a visualiza&#231;&#227;o em &#225;rvore. Digamos que voc&#234; tenha um model Page com &lt;a href=&quot;http://github.com/rails/acts_as_tree&quot;&gt;acts_as_tree&lt;/a&gt;, ou seja, uma inst&#226;ncia de Page tem um parent_id, e pode ter filhas.&lt;/p&gt;
&lt;script src='http://gist.github.com/187837.js'&gt;&lt;/script&gt;
&lt;pre class=&quot;degrade&quot;&gt;
&amp;gt;&amp;gt; extend Hirb::Console
=&amp;gt; main

&amp;gt;&amp;gt; view Page.find_by_name('About Us'), :class =&amp;gt; :parent_child_tree, :type =&amp;gt; :directory
About Us
|-- Contact
|-- Our History
|-- Mission
|-- Privacy Policy
`-- Terms of Use
=&amp;gt; true
&lt;/pre&gt;
&lt;p&gt;Pr&#225;tico, n&#227;o? Isso &#233; s&#243; uma parte do que o Hirb pode fazer, recomendo olhar o &lt;a href=&quot;http://github.com/cldwalker/hirb&quot;&gt;projeto no github&lt;/a&gt; e a &lt;a href=&quot;http://tagaholic.me/hirb/doc/index.html&quot;&gt;documenta&#231;&#227;o&lt;/a&gt;, tem muita coisa interessante.&lt;br /&gt;
&lt;/pre&gt;&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/74</id>
    <published>2009-06-09T20:30:39Z</published>
    <updated>2009-08-11T22:39:06Z</updated>
    <link type="text/html" rel="alternate" href="/2009/6/9/manipulando-imagens-com-rails-bordas-arredondadas-no-paperclip"/>
    <title>Manipulando imagens com Rails: bordas arredondadas no Paperclip</title>
    <content type="html">&lt;p&gt;Uma das d&#250;vidas mais recorrentes de usu&#225;rios do &lt;a href=&quot;http://www.thoughtbot.com/projects/paperclip&quot;&gt;Paperclip&lt;/a&gt; &#233; como tornar as bordas dos thumbnails arredondadas. Felizmente o Paperclip usa o ImageMagick para lidar com imagens e d&#225; para passar op&#231;&#245;es para a linha de comando do convert:&lt;/p&gt;
&lt;pre&gt;
has_attached_file :image, 
             :styles =&amp;gt; { :thumb =&amp;gt; ['400x300#', :png] },
             :convert_options =&amp;gt; { 
                :thumb =&amp;gt; &quot;\\( +clone  -threshold -1 \
                     -draw 'fill black polygon 0,0 0,15 15,0 fill white circle 15,15 15,0' \
                     \\( +clone -flip \\) -compose Multiply -composite \
                     \\( +clone -flop \\) -compose Multiply -composite \
                     \\) +matte -compose CopyOpacity -composite&quot;
                }
&lt;/pre&gt;
&lt;p&gt;N&#227;o esque&#231;a que a imagem resultante ser&#225; um &lt;span class=&quot;caps&quot;&gt;PNG&lt;/span&gt;, ent&#227;o voc&#234; precisa passar o formato na defini&#231;&#227;o do thumb. Essas op&#231;&#245;es tamb&#233;m funcionam no ImageMagick diretamente na linha de comando.&lt;/p&gt;
&lt;p&gt;O resultado &#233; esse:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/39/original/Boston_City_Flow.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Confira outras &lt;a href=&quot;http://www.imagemagick.org/Usage/thumbnails/&quot;&gt;op&#231;&#245;es do ImageMagick&lt;/a&gt;.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/73</id>
    <published>2009-04-22T20:49:28Z</published>
    <updated>2009-08-11T22:37:51Z</updated>
    <link type="text/html" rel="alternate" href="/2009/4/22/limpando-o-cache-de-outros-models-no-rails"/>
    <title>Limpando o cache de outros models no Rails</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/system/assets/38/original/2236762500_5d8ba8e4d7.jpg.jpeg&quot; title=&quot;Photo:Ange Soleil (a.k.a Tweng)&quot; alt=&quot;Photo:Ange Soleil (a.k.a Tweng)&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Frequentemente fazemos Page Cache na &lt;a href=&quot;http://www.dburnsdesign.com&quot;&gt;DBurns&lt;/a&gt;, para melhorar a performance das nossas aplica&#231;&#245;es. Um dos problemas que temos enfrentado nos &#250;ltimos projetos &#233; limpar o cache de outros models, quando modificamos alguma p&#225;gina no nosso &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;, principalmente quando temos um submenu din&#226;mico, com as filhas de uma p&#225;gina.&lt;/p&gt;
&lt;p&gt;Digamos que temos um model Page e um model NewsArticle. Quando alteramos alguma coisa no Page queremos limpar o cache, atrav&#233;s de um sweeper, tanto de Page como de NewsArticle.&lt;/p&gt;
&lt;p&gt;Todas as solu&#231;&#245;es que encontramos, entre elas o tutorial de cache do &lt;a href=&quot;http://www.railsenvy.com&quot;&gt;Rails Envy&lt;/a&gt;, diziam para mudar o diret&#243;rio de cache e apag&#225;-lo por inteiro. Veja no &lt;a href=&quot;http://www.railsenvy.com/2007/2/28/rails-caching-tutorial&quot;&gt;tutorial&lt;/a&gt; mais detalhes de como fazer isso.&lt;/p&gt;
&lt;p&gt;S&#243; que o problema &#233; que tanto o Mongrel quanto o Apache n&#227;o sabem ler o cache se n&#227;o for o padr&#227;o (em /public). Ent&#227;o voc&#234; precisaria fazer um &lt;a href=&quot;http://rubyforge.org/tracker/index.php?func=detail&amp;amp;aid=17713&amp;amp;group_id=1306&amp;amp;atid=5147&quot;&gt;patch no Mongrel&lt;/a&gt; e uma mudan&#231;a no httpd.conf do Apache:&lt;/p&gt;
&lt;filter:code lang=&quot;apache&quot;&gt;
&lt;p&gt;RewriteEngine On&lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^/$ /cache/index.html [&lt;span class=&quot;caps&quot;&gt;QSA&lt;/span&gt;,L]&lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^/(.*)$ /cache/$1.html [&lt;span class=&quot;caps&quot;&gt;QSA&lt;/span&gt;,L]&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;OK, f&#225;cil, mas nem sempre temos acesso &#224;s configura&#231;&#245;es do Apache em produ&#231;&#227;o, e por .htaccess n&#227;o funciona, j&#225; tentamos. Para n&#227;o depender do servidor onde fazemos deploy, a solu&#231;&#227;o foi usar o mesmo procedimento (apagar o diret&#243;rio inteiro), s&#243; que usando o diret&#243;rio padr&#227;o de cache.&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;class PageSweeper &amp;lt; ActionController::Caching::Sweeper&lt;br /&gt;
  observe Page&lt;/p&gt;
def after_save(page)
clear_page_cache
end
def after_destroy(page)
clear_page_cache
end
def clear_page_cache
expire_page(&amp;#8216;/index&amp;#8217;)
dirs = %w{ pages news }
dirs.each do |dir|
cache_dir = RAILS_ROOT + &amp;#8220;/public/#{dir}&amp;#8221;
FileUtils.rm_r(Dir.glob(cache_dir+&amp;quot;/*&amp;quot;)) rescue Errno::&lt;span class=&quot;caps&quot;&gt;ENOENT&lt;/span&gt;
RAILS_DEFAULT_LOGGER.info(&amp;#8220;Cache directory &amp;#8216;#{cache_dir}&amp;#8217; fully swept.&amp;#8221;)
end
end
&lt;p&gt;end&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;Fiz isso, da&#237; o &lt;a href=&quot;http://www.marciotrindade.com&quot;&gt;Marcio Trindade&lt;/a&gt; deu a id&#233;ia de transformar em um m&#233;todo e colocar numa lib, adicionando o m&#233;todo ao ActionController::Caching::Sweeper. Da&#237; poder&#237;amos aproveitar para outros sweepers. Foi o que eu fiz, colocando o arquivo em config/initializers:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;module ActionController&lt;br /&gt;
  module Caching&lt;/p&gt;
class Sweeper
def sweep_directory(dirs)
dirs.each do |dir|
cache_dir = RAILS_ROOT + &amp;#8220;/public/#{dir}&amp;#8221;
FileUtils.rm_r(Dir.glob(cache_dir+&amp;quot;/*&amp;quot;)) rescue Errno::&lt;span class=&quot;caps&quot;&gt;ENOENT&lt;/span&gt;
RAILS_DEFAULT_LOGGER.info(&amp;#8220;Cache directory &amp;#8216;#{cache_dir}&amp;#8217; fully swept.&amp;#8221;)
end
end
end
end
&lt;p&gt;end&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;E o sweeper ficou:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;class PageSweeper &amp;lt; ActionController::Caching::Sweeper&lt;br /&gt;
  observe Page&lt;/p&gt;
def after_save(page)
clear_page_cache
end
def after_destroy(page)
clear_page_cache
end
def clear_page_cache
expire_page(&amp;#8216;/index&amp;#8217;)
dirs = %w{ pages news }
sweep_directory(dirs)
end
&lt;p&gt;end&lt;/p&gt;
&lt;/filter:code&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/72</id>
    <published>2009-04-09T14:14:27Z</published>
    <updated>2009-08-11T22:36:40Z</updated>
    <link type="text/html" rel="alternate" href="/2009/4/9/why-s-poignant-guide-to-ruby-em-portugu&#234;s"/>
    <title>Why's (poignant) Guide to Ruby em Portugu&#234;s</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/system/assets/36/original/2006.cover.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Finalmente, saiu! O &lt;a href=&quot;http://www.nomedojogo.com&quot;&gt;Carlos Brando&lt;/a&gt; acabou de anunciar o lan&#231;amento da &lt;a href=&quot;http://www.nomedojogo.com/2009/04/09/o-comovente-guia-de-ruby-do-why/&quot;&gt;vers&#227;o 1.0 de &amp;#8220;O (comovente) guia de Ruby do Why&amp;#8221;&lt;/a&gt;, que &#233; a tradu&#231;&#227;o do &amp;#8220;Why&amp;#8217;s (poignant) guide to Ruby&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Ajudei na tradu&#231;&#227;o nos est&#225;gios iniciais, fiz algumas revis&#245;es, mas o trabalho pesado, da revis&#227;o final, foi do &lt;a href=&quot;http://www.agaelebe.com.br&quot;&gt;agaelebe&lt;/a&gt;, que tamb&#233;m faz parte do &lt;a href=&quot;http://www.guru-sp.org&quot;&gt;Guru-SP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O livro ensina a programar em Ruby, mas de uma forma muito descontra&#237;da e com v&#225;rias historinhas. Fora que o Why the lucky stiff &#233; um artista, ent&#227;o h&#225; v&#225;rias tirinhas e desenhos, o que torna o aprendizado mais l&#250;dico.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/37/original/the-foxes-2.png&quot; width=&quot;600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A vers&#227;o em &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; do livro pode ser encontrada &lt;a href=&quot;http://why.nomedojogo.com&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aproveitem!&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/70</id>
    <published>2009-03-10T23:16:10Z</published>
    <updated>2009-08-10T11:34:13Z</updated>
    <link type="text/html" rel="alternate" href="/2009/3/10/evento-ruby-e-rails-no-mundo-real"/>
    <title>Evento: Ruby e Rails no Mundo Real</title>
    <content type="html">&lt;p&gt;No dia 4 de abril de 2009 acontecer&#225; mais um evento relacionado a Ruby e Rails em S&#227;o Paulo. O evento, &amp;#8216;Ruby e Rails no Mundo Real&amp;#8217;, &#233; organizado pelo &lt;a href=&quot;http://www.guru-sp.com&quot; title=&quot;Grupo de Usu&#225;rios Ruby de S&#227;o Paulo&quot;&gt;Guru-SP&lt;/a&gt; e com o apoio da Tempo Real Eventos, Sun e Caelum.&lt;/p&gt;
&lt;p&gt;Haver&#225; palestras sobre aplica&#231;&#245;es Ruby e Rails no &amp;#8216;mundo real&amp;#8217;, ou seja, coisas que est&#227;o no ar em produ&#231;&#227;o, experi&#234;ncias reais. Vai al&#233;m das &amp;#8216;palestras tutoriais&amp;#8217;.&lt;/p&gt;
&lt;p&gt;Confira a programa&#231;&#227;o e os palestrantes:&lt;/p&gt;
&lt;p&gt;08:30 as 09:00: Credenciamento&lt;/p&gt;
&lt;p&gt;09:00 as 09:15: Abertura do evento&lt;/p&gt;
&lt;p&gt;09:15 as 10:30: Criando um Instant Messenger usando Rails (Vin&#237;cius Baggio)&lt;/p&gt;
&lt;p&gt;10:30 as 10:45: Ruby, Rails e empreendedorismo (&lt;a href=&quot;http://www.agaelebe.com.br/&quot;&gt;Hugo Lima Borges&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;10:45 as 11:00: Coffee break&lt;/p&gt;
&lt;p&gt;11:00 as 12:00: Ruby Desktop (&lt;a href=&quot;http://www.hypequino.com/&quot;&gt;Marcelo Castellani&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;12:00 as 13:00: Almo&#231;o&lt;/p&gt;
&lt;p&gt;13:00 as 14:00: Outsorcing, ou como trabalhar para empresas gringas (&lt;a href=&quot;http://caffo.chaosnet.org/&quot;&gt;Caffo&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;14:00 as 15:00: GlassFish on Rails: Escalabilidade e Confiabilidade (Maur&#237;cio Leal &amp;#8211; Sun Microsystems)&lt;/p&gt;
&lt;p&gt;15:00 as 16:00: S&#243; os imaturos n&#227;o testam (&lt;a href=&quot;http://www.nomedojogo.com&quot;&gt;Carlos Brando&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;16:00 as 16:15: Coffee break&lt;/p&gt;
&lt;p&gt;16:15 as 16:30: O que &#233; e como funciona o RubyLearning (Willian Molinari)&lt;/p&gt;
&lt;p&gt;16:30 as 17:30: Ruby, muito mais do que reflexivo! (&lt;a href=&quot;http://www.fabiokung.com/&quot;&gt;F&#225;bio Kung&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;17:30 as 18:00: Desconfer&#234;ncia e Encerramento&lt;/p&gt;
&lt;p&gt;Ser&#225; realizado no Century Flat Paulista, na Rua Teixeira da Silva, 647, perto do metr&#244; Brigadeiro.&lt;/p&gt;
&lt;p&gt;A inscri&#231;&#227;o custa R$69 (at&#233; 31/03) e pode ser feita na &lt;a href=&quot;http://www.temporealeventos.com.br/?area=130&amp;tipo=1&amp;id=2476&quot;&gt;p&#225;gina oficial do evento&lt;/a&gt;.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/68</id>
    <published>2009-03-06T22:38:52Z</published>
    <updated>2009-03-06T22:42:15Z</updated>
    <link type="text/html" rel="alternate" href="/2009/3/6/dica-rapida-thumbnail-de-pdf-no-paperclip"/>
    <title>Dica r&#225;pida: Thumbnail de PDF no Paperclip</title>
    <content type="html">&lt;p&gt;O &lt;a href=&quot;http://www.thoughtbot.com/projects/paperclip&quot;&gt;Paperclip&lt;/a&gt; consegue fazer thumbnail da primeira p&#225;gina de um &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt;. Para isso, escreva:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;has_attached_file :pdf, :styles { :thumb =&amp;gt; &amp;#8220;100&amp;#215;200#&amp;#8221; }&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;como voc&#234; faz para qualquer imagem. Por&#233;m, al&#233;m de ter o ImageMagick instalado, voc&#234; vai precisar tamb&#233;m instalar o GhostScript, que &#233; a biblioteca para interpretar e salvar PDFs. Sen&#227;o voc&#234; vai ter erros como o seguinte:&lt;/p&gt;
&lt;filter:code lang=&quot;shell-unix-generic&quot;&gt;
&lt;p&gt;An error was received while processing: #&amp;lt;Paperclip::NotIdentifiedByImageMagickError: &lt;br /&gt;
/var/folders/xz/xz9+JOHXHse6kcOo1B2kMk+++TI/-Tmp-/stream.29062.0 &lt;br /&gt;
is not recognized by the &amp;#8216;identify&amp;#8217; command.&amp;gt;&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;que &#233; o mesmo erro que acontece quando voc&#234; n&#227;o tem o ImageMagick instalado, ou o Paperclip n&#227;o consegue achar. &lt;a href=&quot;http://blog.shadowmaru.org/2008/11/14/dica-configuracao-do-paperclip&quot;&gt;Escrevi sobre isso neste post&lt;/a&gt;. Para testar se voc&#234; tem o GhostScript instalado, fa&#231;a:&lt;/p&gt;
&lt;filter:code lang=&quot;shell-unix-generic&quot;&gt;
&lt;p&gt;identify -format &amp;#8220;%wx%h&amp;#8221; algumarquivo.pdf&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;Se der erro de arquivo n&#227;o encontrado, voc&#234; precisa instalar o GhostScript:&lt;/p&gt;
&lt;filter:code lang=&quot;shell-unix-generic&quot;&gt;
&lt;ol&gt;
	&lt;li&gt;Leopard&lt;br /&gt;
sudo port install ghostscript&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
	&lt;li&gt;Ubuntu&lt;br /&gt;
sudo apt-get install ghostscript&lt;br /&gt;
&lt;/filter:code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Teste de novo e o comando supracitado dever&#225; retornar a largura e altura do &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#fikdik&lt;/code&gt;&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/64</id>
    <published>2009-02-09T19:08:52Z</published>
    <updated>2009-02-09T19:09:51Z</updated>
    <link type="text/html" rel="alternate" href="/2009/2/9/spree-production-ready-really"/>
    <title>Spree: Production ready, really?</title>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.shadowmaru.org/2009/2/9/spree-pronto-para-producao-serio&quot;&gt;Portuguese version here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Three months ago I wrote about how &lt;a href=&quot;http://blog.shadowmaru.org/2008/11/25/e-commerce-usando-spree&quot;&gt;I helped the Spree project&lt;/a&gt; (in Portuguese) with some features. I was developing a store for a client, but we got nothing but headaches. We had 3 stores being developed under Spree, and&amp;#8230; none are in production at the moment.&lt;/p&gt;
&lt;p&gt;Two were taken down and are being released this week as a Miva Merchant customization, and one has been completely rewritten, still using Rails, ActiveMerchant, ActiveShipping, but without any Spree logic.&lt;/p&gt;
&lt;p&gt;Ironically, we had problems using Authorize.net and &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; in production mode with ActiveShipping. Ironically because it was exactly these two features I&amp;#8217;ve worked back in November. My boss decided to drop Spree for good and we started over as a Miva Merchant customization.&lt;/p&gt;
&lt;p&gt;What we learned from this? Spree is not really production ready, when you have a client constantly asking for changes, features that are fairly common in an e-commerce, but Spree didn&amp;#8217;t have. The customization in Spree is far from being easy. Although the extensions system is a really nice idea, the reality is that everything gets really confusing. You never know where is the file you need to change. It totally goes against being &lt;span class=&quot;caps&quot;&gt;DRY&lt;/span&gt; and the organization of Rails.&lt;/p&gt;
&lt;p&gt;I see that Sean Schofield and several people are constantly developing Spree to make it better, so I wish them good luck. I&amp;#8217;ll try to help in everything that&amp;#8217;s possible, but for my company, we&amp;#8217;ll wait version 1.0 to try it again.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/63</id>
    <published>2009-02-09T19:05:27Z</published>
    <updated>2009-02-09T19:09:08Z</updated>
    <link type="text/html" rel="alternate" href="/2009/2/9/spree-pronto-para-producao-serio"/>
    <title>Spree: pronto para produ&#231;&#227;o, s&#233;rio?</title>
    <content type="html">&lt;p&gt;Tr&#234;s meses atr&#225;s eu escrevi sobre como eu &lt;a href=&quot;http://blog.shadowmaru.org/2008/11/25/e-commerce-usando-spree&quot;&gt;ajudei o projeto Spree&lt;/a&gt; com algumas funcionalidades. Eu estava desenvolvendo uma loja para um cliente, mas n&#227;o conseguimos nada al&#233;m de dores de cabe&#231;a. T&#237;nhamos 3 lojas sendo desenvolvidas usando Spree, e&amp;#8230;. nenhum est&#225; em produ&#231;&#227;o no momento.&lt;/p&gt;
&lt;p&gt;Duas foram canceladas e est&#227;o sendo lan&#231;adas esta semana como uma customiza&#231;&#227;o do Miva Merchant, e a outra est&#225; sendo completamente reescrita, ainda usando Rails, ActiveMerchant e ActiveShipping, mas sem qualquer l&#243;gica do Spree.&lt;/p&gt;
&lt;p&gt;Ironicamente, tivemos problemas usando Authorize.net e &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; em produ&#231;&#227;o com ActiveShipping. Ironicamente porque foram exatamente estas duas funcionalidades que eu adicionei em Novembro. Meu chefe decidiu abandonar o Spree e recome&#231;amos como uma customiza&#231;&#227;o do Miva.&lt;/p&gt;
&lt;p&gt;O que aprendemos com isso? O Spree ainda n&#227;o est&#225; pronto para produ&#231;&#227;o, quando voc&#234; tem um cliente pedindo mudan&#231;as constantes, funcionalidades que s&#227;o bem comuns para um e-commerce, mas o Spree n&#227;o tinha. A customiza&#231;&#227;o do Spree est&#225; longe de ser f&#225;cil. Embora o sistema de extens&#245;es seja uma boa id&#233;ia, a realidade &#233; que tudo fica muito confuso. Voc&#234; nunca sabe onde est&#225; o arquivo que voc&#234; precisa mudar. Vai totalmente contra ser &lt;span class=&quot;caps&quot;&gt;DRY&lt;/span&gt; e a organiza&#231;&#227;o do Rails.&lt;/p&gt;
&lt;p&gt;Eu estou vendo que o Sean Schofield e v&#225;rias outras pessoas est&#227;o constantemente desenvolvendo o Spree para faz&#234;-lo melhor, ent&#227;o lhes desejo boa sorte. Tentarei ajudar no que for poss&#237;vel, mas para minha empresa, esperaremos a vers&#227;o 1.0 para tentar novamente.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/59</id>
    <published>2008-12-29T21:19:34Z</published>
    <updated>2008-12-29T21:25:18Z</updated>
    <link type="text/html" rel="alternate" href="/2008/12/29/traducao-trazendo-provides-display-do-merb-para-o-rails-3"/>
    <title>Tradu&#231;&#227;o: Trazendo provides/display do Merb para o Rails 3</title>
    <content type="html">&lt;p&gt;A essa altura todos j&#225; sabem sobre a &lt;a href=&quot;http://weblog.rubyonrails.com/2008/12/23/merb-gets-merged-into-rails-3&quot;&gt;fus&#227;o de Rails e Merb&lt;/a&gt;, ent&#227;o n&#227;o me dar ao trabalho de noticiar ou comentar.&lt;/p&gt;
&lt;p&gt;O interessante agora vai ser ver exatamente o que de bom do Merb que o Rails vai ter na vers&#227;o 3. &lt;a href=&quot;http://www.loudthinking.com/posts/37-bringing-merbs-providesdisplay-into-rails-3&quot;&gt;O &lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt; j&#225; postou uma das mudan&#231;as&lt;/a&gt; e eu traduzo abaixo:&lt;/p&gt;
&lt;h3&gt;Trazendo provides/display do Merb para o Rails 3&lt;/h3&gt;
&lt;p&gt;O fluxo de id&#233;ias do Merb para o Rails 3 j&#225; est&#225; caminhando. Deixe-me mostrar um dos primeiros exemplos que estive trabalhando no design. Merb tem uma feature relacionada &#224; estrutura do respond_to do Rails que funciona para os casos gen&#233;ricos onde voc&#234; tem um objeto ou cole&#231;&#227;o que voc&#234; gostaria de servir em diferentes formatos. Aqui est&#225; um exemplo:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;class Users &amp;lt; Application&lt;/p&gt;
provides :xml, :json
def index
@users = User.all
display @users
end
&lt;p&gt;end&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;Este controller pode responder a requisi&#231;&#245;es html, xml e json. Quando display for executado, ele primeiro checar&#225; se existe um template dispon&#237;vel para o tipo requisitado, o que &#233; normalmente o caso com &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;, e caso contr&#225;rio tentar&#225; converter o objeto. Ent&#227;o @users.to_xml como resultado de uma requisi&#231;&#227;o &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;As aplica&#231;&#245;es em que eu trabalhei nunca tiveram realmente este caso, no entanto. Sempre tive que fazer mais do que apenas converter o objeto para o tipo ou renderizar um template. Ou eu precisava fazer um redirecionamento para um dos tipos em vez de renderizar ou eu precisava fazer outra coisa al&#233;m de renderizar. Ent&#227;o eu nunca passei muito tempo com o caso default que j&#225; vem com os scaffolds:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;class PostsController &amp;lt; ApplicationController&lt;/p&gt;
def index
@posts = Post.find(:all)
respond_to do |format|
format.html
format.xml { render :xml =&amp;gt; @posts }
end
end
def show
@post = Post.find(params[:id])
respond_to do |format|
format.html
format.xml { render :xml =&amp;gt; @post }
end
end
&lt;p&gt;end&lt;/p&gt;
&lt;/filter:code&gt;
&lt;h4&gt;Corte duplica&#231;&#227;o quando poss&#237;vel, d&#234; controle total quando n&#227;o&lt;/h4&gt;
&lt;p&gt;Mas o caso da duplica&#231;&#227;o &#233; definitivamente real para algumas classes de aplica&#231;&#245;es. E isso &#233; muito feio. Os blocos respond_to se repetem para index, show e geralmente mesmo no edit. Isso &#233; tr&#234;s vezes uma estrutura razoavelmente peso-pesada. Este &#233; o caso em que provides/display vem a calhar e elimina a duplica&#231;&#227;o.&lt;/p&gt;
&lt;p&gt;Para o Rails 3, n&#243;s queremos o melhor dos dois mundos. A estrutura completa do respond_to quando voc&#234; precisa fazer coisas que n&#227;o estavam na estrutura gen&#233;rica, mas ainda ter a abordagem gen&#233;rica na manga para quando as circunst&#226;ncias estiverem dispon&#237;veis para seu uso.&lt;/p&gt;
&lt;h4&gt;Lidando com simetria e expans&#227;o progressiva do design da &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;H&#225; algumas desvantagens na dupla provides/display, por&#233;m, que gostar&#237;amos de lidar ao mesmo tempo. A primeira &#233; a falta de simetria nos nomes dos m&#233;todos. As palavras &amp;#8220;provides&amp;#8221; e &amp;#8220;display&amp;#8221; n&#227;o refletem o seu relacionamento pr&#243;ximo e se voc&#234; ainda levar em conta o fato que eles est&#227;o realmente relacionados &#224; renderiza&#231;&#227;o, a coisa fica ainda mais feia.&lt;/p&gt;
&lt;p&gt;A simetria se relaciona com outro ponto no design da &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; que estive interessado ultimamente: expans&#227;o progressiva. Deveria haver um caminho suave do caso simples para o caso complexo. Deveria ser como um Ogro, ele deve ter camadas. Aqui est&#225; o resultado que chegamos:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;class PostsController &amp;lt; ApplicationController&lt;br /&gt;
  respond_to :html, :xml, :json&lt;/p&gt;
def index
@posts = Post.find(:all)
respond_with(@posts)
end
def show
@post = Post.find(params[:id])
respond_with(@post)
end
&lt;p&gt;end&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;Esse &#233; o exemplo padr&#227;o de provides/display, mas ele tem a simetria no respond_to como m&#233;todo de classe, respond_with como m&#233;todo de inst&#226;ncia, e os blocos originais respond_to. Ent&#227;o ele tamb&#233;m parece progressivo quando voc&#234; abre o respond_with e o transforma em um respond_to completo se voc&#234; repentinamente precisa de diferen&#231;as por formato.&lt;/p&gt;
&lt;p&gt;O design tamb&#233;m estende o estilo de trabalhar somente em n&#237;vel de inst&#226;ncia sem os default de n&#237;vel de classe:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;class DealsController &amp;lt; SubjectsController&lt;/p&gt;
def index
@deals = Deal.all
respond_with(@deals, :to =&amp;gt; [ :html, :xml, :json, :atom ])
end
def new
respond_with(Deal.new, :to =&amp;gt; [ :html, :xml ])
end
&lt;p&gt;end&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;&#201; bastante frequente que a action index tenha responsabilidades de formato diferentes do new ou do show ou de qualquer outra coisa. Esse design aborda todos esses cen&#225;rios.&lt;/p&gt;
&lt;p&gt;Yehuda tamb&#233;m esteve interessado em melhorar a performance do respond_to/with ao eliminar os blocos necess&#225;rios. Especialmente quando voc&#234; est&#225; apenas usando respond_with que n&#227;o precisa declarar bloco algum.&lt;/p&gt;
&lt;p&gt;Levando em conta tudo isso, acho que este &#233; um grande exemplo to tipo de funcionalidade superior que pode sair de id&#233;ias misturadas dos dois lados. Estamos certamente animados em fazer o mesmo truque em v&#225;rios outros elementos do framework. Tenho explorado como um roteador revisado que importa as melhores id&#233;ias de ambos poderia ser. Escreverei sobre isso quando tiver algo real para compartilhar.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/57</id>
    <published>2008-12-19T14:26:28Z</published>
    <updated>2008-12-19T14:26:29Z</updated>
    <link type="text/html" rel="alternate" href="/2008/12/19/plugins-de-rails-que-eu-normalmente-uso"/>
    <title>Plugins de Rails que eu normalmente uso</title>
    <content type="html">&lt;p&gt;Neste post vou listar alguns plugins (ou gems) que eu normalmente uso quando estou desenvolvendo em Ruby on Rails. A decis&#227;o de us&#225;-los ou n&#227;o, naturalmente, cabe a voc&#234;:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;JRails &amp;#8211; substitui o prototype.js pelo jQuery e altera alguns helpers do Rails que utilizam JavaScript&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Paperclip &amp;#8211; para upload de imagens (com transforma&#231;&#245;es) e outros arquivos. A vantagem &#233; ele atuar como se fosse um atributo do model, sem precisar de models adicionais&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;resource_controller &amp;#8211; para facilitar &lt;acronym title=&quot;Create, Read, Update, Delete&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CRUD&lt;/span&gt;&lt;/acronym&gt; em &#225;reas de administra&#231;&#227;o&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;restful-authentication &amp;#8211; praticamente obrigat&#243;rio nas minhas aplica&#231;&#245;es, para autentica&#231;&#227;o de usu&#225;rios&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Shoulda &amp;#8211; estou atualmente utilizando o Shoulda para meus testes. Ele &#233; um conjunto de macros para o Test::Unit do Rails, e lembra (mas n&#227;o &#233;) &lt;acronym title=&quot;Behavior Driven Development&quot;&gt;&lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt;&lt;acronym&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;tlsmail &amp;#8211; para enviar e-mail usando uma conta do Gmail&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Ultrasphinx &amp;#8211; para buscas mais complexas, geralmente envolvendo v&#225;rios models.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Will Paginate &amp;#8211; para pagina&#231;&#227;o&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Zen Test (gem) &amp;#8211; para usar o autotest. Ele roda todos os seus testes e quando algum arquivo monitorado &#233; salvo roda novamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Colocaria os links, mas estou com pregui&#231;a, procure no Google :)&lt;/p&gt;
&lt;p&gt;E voc&#234;? Quais plugins utiliza no Rails?&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/55</id>
    <published>2008-11-25T19:19:11Z</published>
    <updated>2009-08-11T22:36:58Z</updated>
    <link type="text/html" rel="alternate" href="/2008/11/25/e-commerce-usando-spree"/>
    <title>E-commerce usando Spree</title>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://spreehq.org/articles/2008/11/25/integrated-authorize-net-support/&quot;&gt;&lt;img src=&quot;/system/assets/35/original/Picture_2.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Como o &lt;a href=&quot;http://www.marciotrindade.com/2008/11/18/spree&quot;&gt;Marcio Trindade falou no seu blog&lt;/a&gt;, implementei, junto com a equipe da &lt;a href=&quot;http://www.dburnsdesign.com&quot;&gt;DBurns Design&lt;/a&gt;, um e-commerce em Rails usando como base o &lt;a href=&quot;http://www.spreehq.org&quot;&gt;Spree&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O Spree tem o b&#225;sico para um e-commerce: produtos, carrinho de compras, checkout, pagamento por cart&#227;o de cr&#233;dito (usando o ActiveMerchant) e taxonomias (categoriza&#231;&#227;o). O resto pode ser customizado por voc&#234; mesmo usando extens&#245;es. No nosso caso, fizemos uma extens&#227;o para mudar todo o layout da loja, outra para as p&#225;ginas de conte&#250;do usando o nosso &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; pr&#243;prio, outra para imagens para imprensa, e adicionei uma &lt;a href=&quot;http://github.com/edmundo/spree-search/tree/master&quot;&gt;extens&#227;o para busca&lt;/a&gt; feita pelo Edmundo Valle Neto. O site n&#227;o est&#225; no ar ainda, mas deve estar em breve.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://spreehq.org/articles/2008/11/20/integrated-ssl-support/&quot;&gt;&lt;img src=&quot;/system/assets/34/original/Picture_1.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Durante o desenvolvimento do projeto, notei que faltavam algumas features que o cliente exigia: suporte a &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; e pagamentos atrav&#233;s do Authorize.Net (at&#233; ent&#227;o suportava apenas Linkpoint e PayPal). No melhor esp&#237;rito open source, postei na lista, o mantenedor (Sean Schofield) me pediu para implementar e o fiz. O Sean aprovou os patches e os incorporou ao projeto, portanto agora o Spree suporta &lt;a href=&quot;http://spreehq.org/articles/2008/11/25/integrated-authorize-net-support/&quot;&gt;pagamentos pelo Authorize.Net&lt;/a&gt; e &lt;a href=&quot;http://spreehq.org/articles/2008/11/20/integrated-ssl-support/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/53</id>
    <published>2008-11-20T20:02:40Z</published>
    <updated>2009-08-11T20:18:03Z</updated>
    <link type="text/html" rel="alternate" href="/2008/11/20/turbo-pascal-25-anos"/>
    <title>Turbo Pascal: 25 anos</title>
    <content type="html">&lt;p&gt;Hoje o &lt;a href=&quot;http://en.wikipedia.org/wiki/Turbo_Pascal&quot;&gt;Turbo Pascal&lt;/a&gt; completa 25 anos. Foi lan&#231;ado em 20 de novembro de 1983 (duh). Pelo que pesquisei, foi a primeira &lt;acronym title=&quot;Integrated Development Environment&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IDE&lt;/span&gt;&lt;/acronym&gt; a ser lan&#231;ada, pois al&#233;m de editar os c&#243;digos, tamb&#233;m compilava, debugava e gerava execut&#225;veis.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/33/original/300px-Turbo_Pascal_60_screenshot.gif&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Foi com o Turbo Pascal que eu comecei a programar, quando entrei na faculdade (hoje em dia isso &#233; considerado muito tarde), em 1995 (olhem s&#243;, justamente quando a Borland deixou de desenvolv&#234;-lo, por causa do Delphi). A disciplina de Introdu&#231;&#227;o &#224; Computa&#231;&#227;o (&lt;span class=&quot;caps&quot;&gt;MAC&lt;/span&gt;-110) era dada em Pascal, e no laborat&#243;rio do &lt;a href=&quot;http://www.ime.usp.br&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IME&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;USP&lt;/span&gt;&lt;/a&gt; (&lt;acronym title=&quot;Centro de Ensino de Computa&#231;&#227;o&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CEC&lt;/span&gt;&lt;/acronym&gt;) t&#237;nhamos o Turbo Pascal instalado para fazermos os EPs (exerc&#237;cio-programa).&lt;/p&gt;
&lt;p&gt;Achei o Pascal uma linguagem bem f&#225;cil para aprender a programar (tanto que Niklaus Wirth a criou justamente para ensinar programa&#231;&#227;o estruturada), por sua semelhan&#231;a com o ingl&#234;s, como &#233; hoje o Ruby.&lt;/p&gt;
&lt;p&gt;Depois do primeiro ano nunca mais programei em Pascal (nem em Delphi). J&#225; passei por C, C++, Perl, Java, &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;, Ruby, at&#233; Cobol e Clipper, mas sempre vou lembrar do Turbo Pascal e sua interface no &lt;span class=&quot;caps&quot;&gt;DOS&lt;/span&gt;, me matando para terminar os EPs at&#233; a hora da entrega :)&lt;/p&gt;
&lt;p&gt;Tem alguma hist&#243;ria sobre o Turbo Pascal? Comente aqui.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/50</id>
    <published>2008-11-14T17:55:04Z</published>
    <updated>2009-08-11T20:16:56Z</updated>
    <link type="text/html" rel="alternate" href="/2008/11/14/dica-configuracao-do-paperclip"/>
    <title>Dica: Configura&#231;&#227;o do Paperclip</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/system/assets/32/original/116-classic-paperclip-money-clip-image-1.jpg&quot; align=&quot;left&quot; width=&quot;150&quot; style=&quot;margin-right:10px;&quot; hspace=&quot;10&quot; /&gt;&lt;a href=&quot;http://www.thoughtbot.com/projects/paperclip&quot;&gt;Paperclip&lt;/a&gt; &#233; um plugin para Rails que permite o upload de arquivos para a aplica&#231;&#227;o, e ainda faz transforma&#231;&#245;es em imagens usando o ImageMagick. Tamb&#233;m possibilita o armazenamento do arquivo no pr&#243;prio servidor, ou em servi&#231;os como o Amazon S3.&lt;/p&gt;
&lt;p&gt;Comecei a us&#225;-lo em abril, algum tempo depois de ser lan&#231;ado em mar&#231;o. Achei um plugin mais f&#225;cil de usar e mais simples que o attachment_fu, por exemplo. Agora vejo muita gente migrando do attachment_fu para o Paperclip, saindo posts em v&#225;rios blogs da comunidade, como &lt;a href=&quot;http://www.nomedojogo.com/2008/11/12/por-que-paperclip/&quot;&gt;Carlos Brando&lt;/a&gt;, Peter Cooper (via &lt;a href=&quot;http://www.railsinside.com/plugins/149-paperclip-file-attachment-image-upload-plugin-for-rails.html&quot;&gt;Rails Inside&lt;/a&gt;) e &lt;a href=&quot;http://railscasts.com/episodes/134-paperclip&quot;&gt;Ryan Bates&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Um problema comum que estou vendo em muita gente que est&#225; come&#231;ando a usar o Paperclip (&lt;span class=&quot;caps&quot;&gt;EDIT&lt;/span&gt;: e se estiver usando Passenger, como bem lembrou o dookie) &#233; subir uma imagem que tenha diferentes vers&#245;es (:medium e :thumb, por exemplo), mas s&#243; aparecer no diret&#243;rio a vers&#227;o original. Isso geralmente acontece porque voc&#234; precisa configurar o caminho para o execut&#225;vel do ImageMagick, o &lt;code&gt;convert&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ent&#227;o, se voc&#234; estiver em um sistema *nix, digite:&lt;/p&gt;
&lt;filter:code lang=&quot;shell-unix-generic&quot;&gt;
&lt;p&gt;which convert&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;e ele retornar&#225; o caminho, no meu caso &lt;code&gt;/usr/local/bin/convert&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Da&#237; &#233; s&#243; criar um initializer (em config/initializers), por exemplo, paperclip.rb e colocar o conte&#250;do:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;Paperclip.options[:command_path] = &amp;#8216;/usr/local/bin&amp;#8217;&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;Se quiser ter configura&#231;&#245;es diferentes dependendo do ambiente, fa&#231;a:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;if RAILS_ENV=development&lt;br /&gt;
     Paperclip.options[:command_path] = &amp;#8216;/usr/local/bin&amp;#8217;&lt;br /&gt;
else&lt;br /&gt;
     Paperclip.options[:command_path] = &amp;#8216;/opt/local/bin&amp;#8217;&lt;br /&gt;
end&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;Agora reinicie o servidor e tente subir a imagem novamente.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;UPDATE&lt;/span&gt;: Paperclip.options[:image_magick_path] foi deprecado em favor de Paperclip.options[:command_path]. Post corrigido.&lt;/p&gt;
&lt;pre&gt;#ficadica&lt;/pre&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/49</id>
    <published>2008-11-12T13:23:40Z</published>
    <updated>2008-11-12T13:27:50Z</updated>
    <link type="text/html" rel="alternate" href="/2008/11/12/quickpost-o-que-significa-git"/>
    <title>QuickPost: o que significa git?</title>
    <content type="html">&lt;p&gt;Hoje me perguntaram no trabalho o que significa &amp;#8216;git&amp;#8217;. Respondi: &amp;#8216;n&#227;o sei&amp;#8217;. Mas como nunca me dou por satisfeito em n&#227;o saber alguma coisa, procurei, &#243;bvio. Achei no &lt;a href=&quot;http://git.or.cz/gitwiki/GitFaq#head-90fa13ebe170116f1586156e73b549cc2135b784&quot;&gt;&lt;span class=&quot;caps&quot;&gt;FAQ&lt;/span&gt; do git&lt;/a&gt; e traduzo abaixo:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Por que o nome &amp;#8216;git&amp;#8217;?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Parafraseando Linus [Torvalds, criador do Linux e do git]: &amp;#8220;Sou um ego&#237;sta de &lt;strong&gt;*&lt;/strong&gt;, e nomeio todos os meus projetos baseados no meu pr&#243;prio nome. Primeiro &amp;#8216;Linux&amp;#8217;, e agora &amp;#8216;git&amp;#8217;&amp;#8221;.&lt;/p&gt;
&lt;p&gt;(&amp;#8216;git&amp;#8217; &#233; uma g&#237;ria inglesa para &amp;#8220;idiota, est&#250;pido, ou pessoa que n&#227;o vale a pena&amp;#8221;).&lt;/p&gt;
&lt;p&gt;Alternativamente, nas pr&#243;prias palavras de Linus como inventor do git: &amp;#8220;git&amp;#8221; pode significar qualquer coisa, dependendo do seu humor:&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;Combina&#231;&#227;o aleat&#243;ria de 3 letras que &#233; pronunci&#225;vel, e n&#227;o usada por algum comando &lt;span class=&quot;caps&quot;&gt;UNIX&lt;/span&gt; comum. O fato de ser &amp;#8220;get&amp;#8221; mal-pronunciado pode ou n&#227;o ser relevante.&lt;/li&gt;
    &lt;li&gt;Est&#250;pido. Lament&#225;vel e indesejado. Simples. Escolha do seu dicion&#225;rio de g&#237;rias.&lt;/li&gt;
    &lt;li&gt;&amp;#8220;Global information tracker&amp;#8221; (Rastreador de informa&#231;&#227;o global): voc&#234; est&#225; de bom humor, e ele realmente funciona para voc&#234;. Anjos cantam, e uma luz de repente invade a sala.&lt;/li&gt;
    &lt;li&gt;&amp;#8220;Goddamn idiotic truckload of sh*t&amp;#8221; (Maldito caminh&#227;o de m**a idiota): quando d&#225; pau&lt;/li&gt;
&lt;/ul&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/48</id>
    <published>2008-11-10T22:06:47Z</published>
    <updated>2009-08-11T20:15:38Z</updated>
    <link type="text/html" rel="alternate" href="/2008/11/10/infoq-brasil"/>
    <title>InfoQ Brasil</title>
    <content type="html">&lt;div style=&quot;background-color:#fff; width:500px; padding:10px; margin-top:15px;&quot;&gt;&lt;img src=&quot;/system/assets/30/original/InfoQ_Brasil.png&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;
&lt;p&gt;Este deve ser o &#250;ltimo post da s&#233;rie de eventos que fui entre setembro e novembro. Acho que compareci em tantos que neste &#250;ltimo o Alexandre Gomes, da &lt;span class=&quot;caps&quot;&gt;SEA&lt;/span&gt; Tecnologia e o Fabio Akita comentaram: &amp;#8220;Voc&#234; tamb&#233;m est&#225; em todas, hein?&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Bom, no dia 01/11 aconteceu em uma unidade da Anhembi-Morumbi da Vila Ol&#237;mpia o lan&#231;amento do portal &lt;a href=&quot;http://www.infoq.com/br&quot;&gt;InfoQ Brasil&lt;/a&gt; (InfoQ Launch Meeting). O portal &lt;a href=&quot;http://www.infoq.com&quot;&gt;InfoQ internacional&lt;/a&gt; &#233; bastante conhecido da comunidade de desenvolvedores, abordando temas (queues, da&#237; o nome) como Java, .&lt;span class=&quot;caps&quot;&gt;NET&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;SOA&lt;/span&gt;, Arquitetura, Ruby e Agile, sendo que os assuntos que mais me interessam s&#227;o os 3 &#250;ltimos. Pensando nisso, o portal conta com um recurso interessante: &#233; poss&#237;vel personalizar a visualiza&#231;&#227;o, escolhendo apenas os assuntos que s&#227;o do seu interesse.&lt;/p&gt;
&lt;p&gt;Voltando ao assunto, &lt;a href=&quot;http://www.infoq.com/br/news/2008/11/Infoq-br-sirva-se-a-vontade&quot;&gt;o Brasil ganhou uma vers&#227;o&lt;/a&gt; do mesmo portal, com artigos e not&#237;cias em Portugu&#234;s, traduzido pela comunidade de editores, de modo volunt&#225;rio, e organizado pela &lt;a href=&quot;http://www.fratech.net/&quot;&gt;Fratech It&lt;/a&gt;, que tem feito um &#243;timo trabalho nesse sentido. Sou um dos editores, e por enquanto traduzi uma das not&#237;cias que fizeram parte do lan&#231;amento do portal, sobre o &lt;a href=&quot;http://www.infoq.com/br/news/2008/10/MagLevAtRailsConf&quot;&gt;lan&#231;amento do MagLev na RailsConf deste ano&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/31/original/screenshot_infoq.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Outro destaque do conte&#250;do de lan&#231;amento &#233; o famoso livro &lt;a href=&quot;http://www.infoq.com/br/minibooks/scrum-xp-from-the-trenches&quot;&gt;&amp;#8220;Scrum e XP direto das trincheiras&amp;#8221;&lt;/a&gt;, que foi traduzido por v&#225;rios volunt&#225;rios, com a &lt;a href=&quot;http://blog.seatecnologia.com.br/articles/2008/11/06/construindo-um-brasil-melhor-lancamento-do-scrum-e-xp-direto-das-trincheiras&quot;&gt;organiza&#231;&#227;o&lt;/a&gt; da &lt;a href=&quot;http://seatecnologia.com.br&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SEA&lt;/span&gt; Tecnologia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O Launch Meeting teve palestras sobre os temas tratados na InfoQ e dois pain&#233;is, sobre plataformas distribu&#237;das e m&#233;todos &#225;geis. O evento contou com a participa&#231;&#227;o de Giovanni Bassi, F&#225;bio Akita, Henry Concei&#231;&#227;o, Vin&#237;cius Senger, Alexandre Gomes, Felipe Rodrigues, Yara Senger, Victor Hugo, Rodrigo Yoshima, Hugo Corbucci, Wagner Santos e Manoel Pimentel, al&#233;m dos internacionais Floyd Marinescu (fundador da InfoQ Internacional) e Max Lafranconi, do &lt;span class=&quot;caps&quot;&gt;JCP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Parab&#233;ns &#224; Fratech It pelo bom trabalho! E quem quiser ajudar, traduzindo ou produzindo artigos, &#233; s&#243; entrar em contato.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/47</id>
    <published>2008-11-10T13:36:12Z</published>
    <updated>2009-08-11T20:14:04Z</updated>
    <link type="text/html" rel="alternate" href="/2008/11/10/intercon-2008"/>
    <title>InterCon 2008</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/system/assets/29/original/DSC00065-1.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;E mais um evento&amp;#8230;. no dia seguinte ao &lt;a href=&quot;http://blog.shadowmaru.org/2008/10/23/falando-em-agile-dia-1&quot;&gt;Falando em Agile&lt;/a&gt; l&#225; estava eu no Teatro do Shopping Frei Caneca para o &lt;a href=&quot;http://imasters.uol.com.br/intercon/2008/cobertura/&quot;&gt;iMasters InterCon 2008&lt;/a&gt;. O evento, que eu &lt;a href=&quot;http://imasters.uol.com.br/intercon/2005/&quot;&gt;fui pela primeira vez em 2005&lt;/a&gt;, tem como tema a Internet, e &#233; voltada principalmente para designers, desenvolvedores e empreendedores que trabalham com web.&lt;/p&gt;
&lt;p&gt;O tema deste ano era a inova&#231;&#227;o digital. Para isso, nada melhor que apostar num formato inovador de evento, id&#233;ia do consagrado &lt;a href=&quot;http://www.luli.com.br&quot;&gt;Luli Radfahrer&lt;/a&gt;. A id&#233;ia era ter 4 sess&#245;es paralelas, sendo duas no mesmo audit&#243;rio, o pr&#243;prio Teatro Frei Caneca, e dois workshops (de design e programa&#231;&#227;o) no sagu&#227;o externo. Mas como fazer duas palestras paralelas? Solu&#231;&#227;o simples: usar os r&#225;dios normalmente utlizados em tradu&#231;&#245;es simult&#226;neas. Em um canal, a palestra da direita, e em outro a palestra da esquerda.&lt;/p&gt;
&lt;p&gt;&#211;bvio que, como em toda inova&#231;&#227;o, o sistema estava sujeito a falhas, e n&#227;o deu outra: na primeira palestra houve problemas no &#225;udio e s&#243; uma palestra p&#244;de ser apresentada. Mas tudo bem: depois do almo&#231;o foi resolvido e foi mesmo muito legal ver cabe&#231;as para um lado e para outro. Luli at&#233; se emocionou.&lt;/p&gt;
&lt;p&gt;Sem d&#250;vida as palestras do FF (que segundo o Luli n&#227;o &#233; Fast Forward, nem Final Fantasy, nem FireFox&amp;#8230; ou tudo isso) foram melhores, pois tratavam da inova&#231;&#227;o em si. Palestras como a do Videolog, do &lt;a href=&quot;http://www.manoellemos.com&quot;&gt;Manoel Lemos&lt;/a&gt;, do &lt;a href=&quot;http://www.crisdias.com&quot;&gt;Cris Dias&lt;/a&gt;, do &lt;a href=&quot;http://www.marcogomes.com&quot;&gt;Marco Gomes&lt;/a&gt; com certeza eram mais interessantes que palestras da Oracle ou sobre Ger&#234;ncia de Projetos em ag&#234;ncias de publicidade (ainda mais indo contra princ&#237;pios das metodologias &#225;geis).&lt;/p&gt;
&lt;p&gt;Resumindo, foi um evento muito legal, que valeu a pena tamb&#233;m pelo networking e ver ao vivo figuras t&#227;o conhecidas na blogosfera.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/46</id>
    <published>2008-11-03T13:41:12Z</published>
    <updated>2009-08-11T20:12:14Z</updated>
    <link type="text/html" rel="alternate" href="/2008/11/3/falando-em-agile-dia-2"/>
    <title>Falando em Agile - Dia 2</title>
    <content type="html">&lt;p&gt;Atrasado em uma semana, mas vamos l&#225;. Ainda tenho muito o que escrever.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.shadowmaru.org/assets/2008/11/3/DSC00061-1.jpg&quot; /&gt;&lt;br /&gt;
&lt;small&gt;O evento foi no sal&#227;o Ruby &amp;#8211; Coincid&#234;ncia?&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;O segundo dia do &lt;a href=&quot;http://www.falandoemagile.com.br&quot;&gt;Falando em Agile&lt;/a&gt; (veja o primeiro dia) come&#231;ou com o keynote do &lt;a href=&quot;http://amagno.blogspot.com&quot;&gt;Alexandre Magno&lt;/a&gt;, que falou sobre Scrum em ambientes PMBok. Ele fez uma compara&#231;&#227;o entre pr&#225;ticas do Scrum que podem ser aplicadas usando o PMBok. E acredito que vale n&#227;o somente para o PMBok, mas para a maioria dos ambientes que usam os m&#233;todos tradicionais de desenvolvimento de software.&lt;/p&gt;
&lt;p&gt;A pr&#243;xima palestra foi do Daniel Bardusco, que apresentou como a Globo.com come&#231;ou a usar Scrum e como foi a evolu&#231;&#227;o da ado&#231;&#227;o. Interessante foi ver como a Globo.com &#233; refer&#234;ncia no uso de Scrum no Brasil, apesar do pouco tempo de ado&#231;&#227;o. S&#243; neste evento foram 4 palestrantes que j&#225; passaram ou ainda est&#227;o na empresa.&lt;/p&gt;
&lt;p&gt;Logo em seguida &lt;a href=&quot;http://agileandart.blogspot.com/&quot;&gt;Daniel Cukier&lt;/a&gt; e &lt;a href=&quot;http://www.ime.usp.br/~kon&quot;&gt;Fabio Kon&lt;/a&gt;, do &lt;a href=&quot;http://www.ime.usp.br&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IME&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;USP&lt;/span&gt;&lt;/a&gt; falaram sobre &amp;#8220;Padr&#245;es para Introdu&#231;&#227;o de Novas Id&#233;ias na Ind&#250;stria de Software&amp;#8221;, tema da disserta&#231;&#227;o de mestrado do Daniel no &lt;span class=&quot;caps&quot;&gt;IME&lt;/span&gt;. Foi um resumo do livro &lt;a href=&quot;http://www.amazon.com/Fearless-Change-Patterns-Introducing-Ideas/dp/0201741571/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1225718594&amp;sr=8-1&quot;&gt;&amp;#8220;Fearless Change&amp;#8221;&lt;/a&gt;, de Linda Rising e Mary Lynn Manns, que fala sobre t&#233;cnicas para convencer uma empresa a adotar novas id&#233;ias para o desenvolvimento de software. Esse assunto &#233; particularmente importante, visto que ainda &#233; dif&#237;cil convencer as empresas na ado&#231;&#227;o de m&#233;todos &#225;geis.&lt;/p&gt;
&lt;p&gt;Ap&#243;s o almo&#231;o Daniel Wildt falou sobre a experi&#234;ncia dele na ado&#231;&#227;o gradativa de m&#233;todos &#225;geis na Dell, que &#233; uma empresa global. Ele apresentou os tr&#234;s projetos que trabalhou neste per&#237;odo, com ambientes bem distintos e as mudan&#231;as que foram implementadas, tais como &lt;span class=&quot;caps&quot;&gt;TDD&lt;/span&gt;, Code Coverage, e Scrum of Scrums.&lt;/p&gt;
&lt;p&gt;Em seguida foi a vez de Antonio Carlos Silveira, do Yahoo! (e ex-Globo.com) falar sobre o papel do Product Owner no Scrum e a sua import&#226;ncia na prioriza&#231;&#227;o do Product Backlog. Foi interessante pois na maioria das palestras sobre Scrum fala-se sobre o time, a ado&#231;&#227;o, o Scrum Master mas pouco se fala sobre o PO, que &#233; parte fundamental para o bom funcionamento do Scrum, afinal ele representa o cliente, cuja satisfa&#231;&#227;o &#233; o objetivo final de qualquer projeto.&lt;/p&gt;
&lt;p&gt;A pen&#250;ltima palestra do dia foi do Robinson Caiado, da Borland, e eu j&#225; sabia que seria uma grande propaganda dos produtos da empresa, para implementar m&#233;todos &#225;geis. Muitas vezes as pessoas perguntam sobre qual a melhor ferramenta para m&#233;todos &#225;geis, e na minha opini&#227;o, nada melhor que o quadro na parede e a conversa. Ferramentas online s&#227;o boas para times distribu&#237;dos e remotos, no entanto. A gota d&amp;#8217;&#225;gua da palestra foi quando ele falou que os dados &amp;#8220;foram retirados diretamente do &amp;#8216;ch&#227;o da f&#225;brica de software&amp;#8217;&amp;#8221;. Sinceramente&amp;#8230;&lt;/p&gt;
&lt;p&gt;O evento encerrou com a palestra do &lt;a href=&quot;http://blog.fragmental.com.br/&quot;&gt;Phillip Cal&#231;ado (Shoes)&lt;/a&gt;, da ThoughtWorks Australia, que falou justamente sobre &amp;#8220;A maldi&#231;&#227;o da f&#225;brica de software &#225;gil&amp;#8221;. Ele deu dois exemplos de projetos que abandonaram algumas pr&#225;ticas &#225;geis, sem pensar no impacto que causaria no ciclo.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/28/original/DSC00062-1.jpg&quot; /&gt;&lt;br /&gt;
&lt;small&gt;Como todo bom evento de agile, foi feita uma retrospectiva&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Enfim, foi um &#243;timo evento, com palestras muito interessantes (n&#227;o todas, claro&amp;#8230;), e a Caelum est&#225; de parab&#233;ns pela organiza&#231;&#227;o. No fim do evento, Alexandre Magno anunciou que em 2009 teremos no Brasil o &lt;a href=&quot;http://www.scrumalliance.org/gathering&quot;&gt;Scrum Gathering&lt;/a&gt;. &#201; o Brasil entrando de vez na rota dos grandes eventos de TI. Primeiro com o &lt;a href=&quot;http://blog.shadowmaru.org/2008/10/16/rails-summit-latin-america-dia-1&quot;&gt;Rails&lt;/a&gt;, e agora com agile.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/44</id>
    <published>2008-10-23T23:28:32Z</published>
    <updated>2009-08-11T20:09:58Z</updated>
    <link type="text/html" rel="alternate" href="/2008/10/23/falando-em-agile-dia-1"/>
    <title>Falando em Agile - Dia 1</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/system/assets/26/original/falando-agile-site_06.gif&quot;  align=&quot;left&quot; style=&quot;margin-right:10px;&quot; vspace=&quot;5&quot; /&gt; Consegui fazer a minha inscri&#231;&#227;o de &#250;ltima hora, ent&#227;o hoje fui ao &lt;a href=&quot;http://www.falandoemagile.com.br&quot;&gt;Falando em Agile&lt;/a&gt;, evento promovido pela &lt;a href=&quot;http://www.caelum.com.br&quot;&gt;Caelum&lt;/a&gt; cujo tema s&#227;o os m&#233;todos &#225;geis.&lt;/p&gt;
&lt;p&gt;Foi legal ver o &lt;a href=&quot;http://amagno.blogspot.com&quot;&gt;Alexandre Magno&lt;/a&gt;, professor do curso de Certified Scrum Master que fiz, e o Fabiano Milani, assistente deste curso, e eles me reconhecerem. S&#243; n&#227;o fizeram o cumprimento secreto :)&lt;/p&gt;
&lt;p&gt;O evento come&#231;ou com o keynote de David Anderson, membro do time que criou a &lt;acronym title=&quot;Feature Driven Development&quot;&gt;&lt;span class=&quot;caps&quot;&gt;FDD&lt;/span&gt;&lt;/acronym&gt;. Ele focou seu keynote na qualidade de c&#243;digo e como o sistema kanban pode ajudar na sua receita para o sucesso:&lt;/p&gt;
&lt;p&gt;- Foco em qualidade&lt;br /&gt;
- Reduzir (ou limitar) o &lt;i&gt;work in progress&lt;/i&gt;&lt;br /&gt;
- Equilibrar demanda e taxa de transfer&#234;ncia&lt;br /&gt;
- Prioriza&#231;&#227;o&lt;br /&gt;
- Reduzir a variabilidade&lt;/p&gt;
&lt;p&gt;Depois do almo&#231;o foi a palestra do &lt;a href=&quot;http://www.dtsato.com&quot;&gt;Danilo Sato&lt;/a&gt; e do Francisco Trindade, da ThoughtWorks, que falaram sobre &amp;#8220;Agilidade de Tartaruga&amp;#8221;, ou seja, problemas que eles encontraram na vida real ao implementar m&#233;todos &#225;geis em clientes. O que ficou da palestra foi a seguinte frase:&lt;/p&gt;
&lt;p&gt;&lt;q&gt;M&#233;todos &#225;geis para muitos s&#227;o pr&#225;ticas, mas o importante s&#227;o os princ&#237;pios.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;Em seguida tivemos a paletra do Adail Retamal, que falou sobre Agile Thinking (pensamento &#225;gil). Apresentou ferramentas como &lt;i&gt;mind maps&lt;/i&gt; e &lt;span class=&quot;caps&quot;&gt;UML&lt;/span&gt; em cores, e explicou a Teoria das Restri&#231;&#245;es.  Ap&#243;s o coffee-break o pessoal da &lt;span class=&quot;caps&quot;&gt;SEA&lt;/span&gt; Tecnologia, de Bras&#237;lia, apresentou um case de sucesso de m&#233;todos &#225;geis na Aeron&#225;utica, lidando com uma cultura militar, mais r&#237;gida.&lt;/p&gt;
&lt;p&gt;Jos&#233; Papo falou sobre um assunto que ainda gera muitas d&#250;vidas: como elaborar contratos que contemplam m&#233;todos &#225;geis? Apresentou os problemas dos m&#233;todos tradicionais de contrata&#231;&#227;o (pre&#231;o fixo) e tamb&#233;m as alternativas (contratos de escopo vari&#225;vel, aquisi&#231;&#227;o progressiva).&lt;/p&gt;
&lt;p&gt;A &#250;ltima palestra do dia, na minha opini&#227;o a melhor, talvez pelo meu interesse no assunto, foi do &lt;a href=&quot;http://gc.blog.br&quot;&gt;Guilherme Chapiewski&lt;/a&gt;, da globo.com, que falou sobre &amp;#8220;Liderando Equipes &#193;geis&amp;#8221;. As caracter&#237;sticas de um l&#237;der de equipes &#225;geis, o que deve e o que n&#227;o deve fazer para proteger e motivar sua equipe.&lt;/p&gt;
&lt;p&gt;&#201; isso a&#237;, amanh&#227; tem mais.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/40</id>
    <published>2008-10-17T16:26:00Z</published>
    <updated>2008-10-17T16:30:33Z</updated>
    <link type="text/html" rel="alternate" href="/2008/10/17/rails-summit-a-experiencia-pessoal"/>
    <title>Rails Summit - A experi&#234;ncia pessoal</title>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/shadow11/2948766891/&quot; title=&quot;Rails Summit Latin America - Assinaturas by shadow11, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3223/2948766891_e88f308734.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Rails Summit Latin America - Assinaturas&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bom, agora que escrevi sobre o que aconteceu nos dois dias de Rails Summit Latin America (&lt;a href=&quot;http://blog.shadowmaru.org/2008/10/16/rails-summit-latin-america-dia-1&quot;&gt;dia 1&lt;/a&gt; e &lt;a href=&quot;http://blog.shadowmaru.org/2008/10/17/rails-summit-latin-america-dia-2&quot;&gt;dia 2&lt;/a&gt;), vou falar sobre o que esta experi&#234;ncia significou para mim.&lt;/p&gt;
&lt;p&gt;Sempre participei de eventos de tecnologia, congressos e etc., mas introvertido que sou, sempre fiquei na minha e s&#243; assistia. A Rails Summit proporcionou um encontro com pessoas que eu j&#225; conhecia online, na lista rails-br, no twitter, e tamb&#233;m presencialmente, como no &lt;a href=&quot;http://www.akitaonrails.com/2008/8/15/happy-hour-de-railers-de-sampa&quot;&gt;happy-hour de railers em Agosto&lt;/a&gt; e o pessoal da Webco. Foi muito legal ser reconhecido pelo que fa&#231;o online (&amp;#8220;ah, &lt;b&gt;voc&#234; &lt;/b&gt; &#233; o Shadow&amp;#8230;&amp;#8221;).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/shadow11/2948767061/&quot; title=&quot;Rails Summit Latin America - Assinaturas by shadow11, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3136/2948767061_9f22e0b04e.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Rails Summit Latin America - Assinaturas&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mais que isso, os palestrantes se mostraram muito abertos &#224; conversa, e socializaram bastante durante o evento e ap&#243;s ele. Vai parecer propaganda de cart&#227;o de cr&#233;dito, mas a possibilidade de conversar com Chad Fowler, Obie Fernandez, Dr. Nic, Hongli Lai e Ninh Bui (al&#233;m dos palestrantes brasileiros) &lt;b&gt;n&#227;o tem pre&#231;o&lt;/b&gt;. Fora o pessoal que nem era palestrante mas estava l&#225;. &lt;a href=&quot;http://gc.blog.br&quot;&gt;Guilherme Chapiewski&lt;/a&gt; por exemplo. O ingresso para o evento ficou muito barato de repente.&lt;/p&gt;
&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/shadow11/2949620622/&quot; title=&quot;Rails Summit - After by shadow11, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3187/2949620622_26ec9a8f76.jpg&quot; width=&quot;375&quot; height=&quot;500&quot; alt=&quot;Rails Summit - After&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;O que quero dizer com isso &#233;: n&#227;o perca essas oportunidades. &#192;s vezes n&#227;o &#233; nem pelo conte&#250;do das palestras, mas pelo networking e pela chance de aprender com as feras. N&#227;o reclame de pre&#231;o. &#201; por isso que os eventos n&#227;o falam em custo. Falam em investimento. E realmente &#233; um investimento, na sua carreira e em voc&#234; como pessoa (aproveitando o gancho motivacional de algumas palestras do Summit).&lt;/p&gt;
&lt;p&gt;E &#233; isso.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/38</id>
    <published>2008-10-17T13:57:45Z</published>
    <updated>2008-10-17T15:00:33Z</updated>
    <link type="text/html" rel="alternate" href="/2008/10/17/rails-summit-latin-america-dia-2"/>
    <title>Rails Summit Latin America - Dia 2</title>
    <content type="html">&lt;p&gt;O segundo dia do &lt;a href=&quot;http://www.locaweb.com.br/railssummit/&quot;&gt;Rails Summit Latin America&lt;/a&gt; (veja o &lt;a href=&quot;http://blog.shadowmaru.org/2008/10/16/rails-summit-latin-america-dia-1&quot;&gt;primeiro dia&lt;/a&gt;) come&#231;ou bem. O pessoal da &lt;a href=&quot;http://phusion.nl&quot;&gt;Phusion (Ninh Bui e Hongli Lai)&lt;/a&gt; deu uma palestra show sobre o Passenger e escalabilidade, com direito a Megaman, Star Wars e Scarlett Johansson.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/shadow11/2949619770/&quot; title=&quot;Rails Summit Latin America - Phusion by shadow11, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3203/2949619770_62507844d1.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Rails Summit Latin America - Phusion&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A palestra seguinte foi uma videoconfer&#234;ncia com Charles Nutter e Thomas Enebo, sobre &lt;a href=&quot;http://jruby.codehaus.org/&quot;&gt;JRuby&lt;/a&gt;. N&#227;o sou dos maiores f&#227;s de Java, ent&#227;o n&#227;o prestei muita aten&#231;&#227;o &#224; apresenta&#231;&#227;o, que por problemas de conex&#227;o teve muitas falhas de &#225;udio.&lt;/p&gt;
&lt;p&gt;A seguir come&#231;aram as sess&#245;es paralelas. Eu assisti somente &#224;s brasileiras, j&#225; que as estrangeiras estavam sendo gravadas. A primeira foi do &lt;a href=&quot;http://blog.georgeguimaraes.com/&quot;&gt;George Guimar&#227;es&lt;/a&gt;, do &lt;a href=&quot;http://www.pagestacker.com&quot;&gt;Pagestacker&lt;/a&gt;, sobre como colocar uma aplica&#231;&#227;o Rails em produ&#231;&#227;o e monitor&#225;-la.&lt;/p&gt;
&lt;p&gt;Depois do almo&#231;o, duas palestras sobre empreendedorismo, de duas empresas brasileiras. A primeira foi da WebCo, dada por &lt;a href=&quot;http://manoellemos.com&quot;&gt;Manoel Lemos&lt;/a&gt;, &lt;a href=&quot;http://logbr.reflectivesurface.com&quot;&gt;Ronaldo Ferraz&lt;/a&gt; e &lt;a href=&quot;http://simplesideias.com&quot;&gt;Nando Vieira&lt;/a&gt;. Como come&#231;ou o &lt;a href=&quot;http://blogblogs.com.br&quot;&gt;BlogBlogs&lt;/a&gt;, como ele cresceu e o que foi feito para escalar a aplica&#231;&#227;o. Tamb&#233;m falaram sobre o &lt;a href=&quot;http://brasigo.com.br&quot;&gt;Brasigo&lt;/a&gt; e o dia-a-dia da empresa.&lt;/p&gt;
&lt;p&gt;A segunda palestra foi do &lt;a href=&quot;http://blog.improveit.com.br&quot;&gt;Vinicius Teles, da ImproveIT&lt;/a&gt;. Foi uma palestra dividida com o &lt;a href=&quot;http://blog.youngbloods.org&quot;&gt;Carl Youngblood&lt;/a&gt;, da &lt;a href=&quot;http://surgeworks.com&quot;&gt;Surgeworks&lt;/a&gt;, mais uma vez falando motivacionalmente, como voc&#234; pode fazer a diferen&#231;a, principalmente no Brasil.&lt;/p&gt;
&lt;p&gt;A palestra seguinte foi sobre testes automatizados, com o &lt;a href=&quot;http://www.dtsato.com&quot;&gt;Danilo Sato&lt;/a&gt;. Foi uma passagem sobre os testes que voc&#234; pode fazer na sua aplica&#231;&#227;o Rails e alguns problemas e li&#231;&#245;es aprendidas com os testes.&lt;/p&gt;
&lt;p&gt;As sess&#245;es paralelas seguintes n&#227;o me interessavam (Ruby on Windows e mais JRuby), ent&#227;o aproveitei para come&#231;ar a escrever este post :)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/shadow11/2949620452/&quot; title=&quot;Rails Summit Latin America - Obie Fernandez by shadow11, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3241/2949620452_8580afaa75.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Rails Summit Latin America - Obie Fernandez&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O keynote de encerramento foi do &lt;a href=&quot;http://blog.obiefernandez.com/content/&quot;&gt;Obie Fernandez&lt;/a&gt;, falando sobre a &lt;a href=&quot;http://www.hashrocket.com&quot;&gt;Hashrocket&lt;/a&gt; e como eles adotam os princ&#237;pios do &lt;a href=&quot;http://agilemanifesto.org&quot;&gt;Manifesto &#193;gil&lt;/a&gt; da sua pr&#243;pria maneira. Como muitas outras palestras nesta Rails Summit, muito inspirador.&lt;/p&gt;
&lt;p&gt;Assim acabou a Rails Summit (oficialmente). Mas espere, tem mais! No pr&#243;ximo post&amp;#8230;.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/37</id>
    <published>2008-10-16T14:37:29Z</published>
    <updated>2009-08-11T20:06:52Z</updated>
    <link type="text/html" rel="alternate" href="/2008/10/16/rails-summit-latin-america-dia-1"/>
    <title>Rails Summit Latin America - Dia 1</title>
    <content type="html">&lt;p&gt;O &lt;a href=&quot;http://www.locaweb.com.br/railssummit/&quot;&gt;Rails Summit Latin America&lt;/a&gt; come&#231;ou no dia 15/10, no Audit&#243;rio Elis Regina, no Anhembi. &#201; o maior evento de Ruby on Rails da Am&#233;rica Latina, e trouxe alguns dos maiores nomes de Rails do mundo.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/shadow11/2946127358/&quot; title=&quot;Rails Summit - Abertura by shadow11, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3069/2946127358_3c27ddcb75.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Rails Summit - Abertura&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O primeiro dia teve a abertura de Gilberto Mautner e &lt;a href=&quot;http://www.akitaonrails.com&quot;&gt;Fabio Akita&lt;/a&gt;, da Locaweb. Logo em seguida tivemos uma sess&#227;o de perguntas e respostas com &lt;a href=&quot;http://www.loudthinking.com&quot;&gt;David Heinemeier Hansson (&lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt;)&lt;/a&gt;, o criador do Rails. Ele respondeu perguntas ao vivo da plat&#233;ia atrav&#233;s de videoconfer&#234;ncia. Apesar de algumas perguntas parecerem suporte t&#233;cnico, outras foram bem interessantes, como sobre as novidades do Rails 2.2 e o futuro do framework.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/shadow11/2946127368/&quot; title=&quot;Rails Summit - DHH by shadow11, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3158/2946127368_24f5c15025.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Rails Summit - DHH&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Em seguida tivemos o keynote de &lt;a href=&quot;http://chadfowler.com&quot;&gt;Chad Fowler&lt;/a&gt;. Chad, sem a barba que lhe &#233; caracter&#237;stica, falou sobre como ser marcante (remarkable). Segue mais ou menos a linha do seu livro, &lt;a href=&quot;http://www.pragprog.com/titles/mjwti/my-job-went-to-india&quot;&gt;&amp;#8220;My Job Went to India&amp;#8221;&lt;/a&gt;. Algumas frases da apresenta&#231;&#227;o foram realmente marcantes, como:&lt;/p&gt;
&lt;p&gt;&lt;q&gt;Cada dia fa&#231;a uma coisa melhor que o dia anterior&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;&lt;q&gt;Voc&#234; &#233; um produto&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;&lt;q&gt;Fa&#231;a barulho&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/shadow11/2946127374/&quot; title=&quot;Rails Summit - Chad Fowler by shadow11, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3011/2946127374_da14a0c08a.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Rails Summit - Chad Fowler&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Depois do almo&#231;o, na sess&#227;o dupla, assisti &#224; palestra de &lt;a href=&quot;http://nutrun.com/&quot;&gt;George Malamidis&lt;/a&gt; e &lt;a href=&quot;http://www.dtsato.com&quot;&gt;Danilo Sato&lt;/a&gt;, que falaram sobre &lt;a href=&quot;http://en.wikipedia.org/wiki/REST&quot;&gt;&lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt;&lt;/a&gt;. Foi uma palestra bem te&#243;rica, e boa para quem ainda n&#227;o est&#225; familiarizado com o conceito de RESTful Web Services. A palestra paralela, que n&#227;o assisti, foi do Akita, que pelo que ouvi, foi bem b&#225;sica, sobre o b&#225;sico de Rails.&lt;/p&gt;
&lt;p&gt;A palestra seguinte foi do &lt;a href=&quot;http://drnicwilliams.com/&quot;&gt;Dr. Nic Williams&lt;/a&gt;, cujo tema foi &amp;#8220;Todos podem contribuir&amp;#8221;. Foi bastante similar &#224; do Chad Fowler, motivacional, incentivando todos a contribuir para projetos open source, e falou sobre os &amp;#8216;segredos&amp;#8217; para se tornar sensacional: aprenda testes unit&#225;rios, comece um blog, aprenda a criar, e melhore seus conhecimentos. A sess&#227;o paralela foi com &lt;a href=&quot;http://www.nomedojogo.com&quot;&gt;Carlos Brando&lt;/a&gt;, que falou como &#233; trabalhar para uma empresa de fora do Brasil.&lt;/p&gt;
&lt;p&gt;Todos voltaram ao audit&#243;rio principal para o keynote de &lt;a href=&quot;http://errtheblog.com&quot;&gt;Chris Wanstrath&lt;/a&gt;, do &lt;a href=&quot;http://github.com&quot;&gt;github&lt;/a&gt;. Uma palestra tamb&#233;m motivacional, muito parecida com a que ele deu no Ruby Hoedown deste ano.&lt;/p&gt;
&lt;p&gt;Ap&#243;s a &#250;ltima palestra, come&#231;ou o Birds of a Feather, que na verdade acabou sendo Lightning Talks, palestras bem r&#225;pidas sobre algum assunto relacionado. Infelizmente alguns participantes n&#227;o captaram a mensagem e falaram sobre coisas totalmente sem rela&#231;&#227;o com Ruby ou Rails, inclusive pol&#237;tica (?). As melhores, sem d&#250;vida, foram a do pessoal da Phusion, que demonstraram um interpretador Brainfuck em Ruby, e a do &lt;a href=&quot;http://maisweb.org/blogdoelomar/&quot;&gt;Elomar Fran&#231;a&lt;/a&gt;, de apenas 17 anos, que deu um show na sua apresenta&#231;&#227;o sobre o grupo de estudos &lt;a href=&quot;http://groups.google.com/group/aprendendo-rails&quot;&gt;aprendendo-rails&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Assim acabou o primeiro dia de Rails Summit. Hoje tem mais!&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/36</id>
    <published>2008-10-14T13:40:56Z</published>
    <updated>2009-08-11T20:05:30Z</updated>
    <link type="text/html" rel="alternate" href="/2008/10/14/encontro-agil-2008-relato"/>
    <title>Encontro &#193;gil 2008 - Relato</title>
    <content type="html">&lt;p&gt;Dando in&#237;cio &#224; minha temporada de eventos (de &lt;a href=&quot;http://blog.shadowmaru.org/2008/8/25/eventos&quot;&gt;Rails/internet&lt;/a&gt; e &lt;a href=&quot;http://blog.shadowmaru.org/2008/9/16/mais-eventos-agora-sobre-agile&quot;&gt;Agile&lt;/a&gt;), neste s&#225;bado (11/10/2008) retornei ao &lt;a href=&quot;http://www.ime.usp.br&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IME&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;USP&lt;/span&gt;&lt;/a&gt; (depois de me formar l&#225; em 2005) para o &lt;a href=&quot;http://www.encontroagil.com.br&quot;&gt;Encontro &#193;gil&lt;/a&gt;, evento organizado pelo &lt;a href=&quot;http://www.agilcoop.org.br/&quot;&gt;AgilCoop&lt;/a&gt;, e que tem como tema as metodologias &#225;geis. Vou falar sobre as palestras que participei.&lt;/p&gt;
&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;/system/assets/25/original/logoEncontroAgil.png&quot; /&gt;&lt;/div&gt;
&lt;p&gt;A primeira palestra foi do Dairton Bassi, do &lt;a href=&quot;http://www.ikwa.com.br&quot;&gt;Ikwa&lt;/a&gt;, que falou sobre &amp;#8220;Planejamento &#225;gil de projetos&amp;#8221;: prioriza&#231;&#227;o, estimativas, preparar para mudan&#231;as, planejamento por n&#237;veis.&lt;/p&gt;
&lt;p&gt;A segunda palestra seria &amp;#8220;Desconfiom&#233;tricas&amp;#8221;, mas o palestrante (Jorge Diz) teve um impedimento (pneu furado), mas foi rapidamente substitu&#237;do pelo Hugo Corbucci, que tamb&#233;m falou sobre m&#233;tricas. A palestra do Jorge foi para o Open Space, no hor&#225;rio seguinte, mas eu j&#225; havia me programado para assistir &#224; palestra do Fabio Kon, sobre &amp;#8220;Dificuldade na implanta&#231;&#227;o de M&#233;todos &#193;geis&amp;#8221;. Muito interessante, ele falou sobre v&#225;rios problemas que ele enfrentou, mas n&#227;o deu nenhuma solu&#231;&#227;o, o que arrancou v&#225;rios risos da plat&#233;ia.&lt;/p&gt;
&lt;p&gt;Ap&#243;s o almo&#231;o (patrocinado), peguei um caf&#233; espresso na m&#225;quina do andar de cima (&#224;s vezes &#233; bom conhecer o lugar) e fui para a sess&#227;o do Birds of a Feather sobre &amp;#8220;Espa&#231;os &#193;geis&amp;#8221;, que tinha como meta esbo&#231;ar um escrit&#243;rio ideal para pr&#225;ticas &#225;geis. Foram pensadas solu&#231;&#245;es para Pair Programming (tamb&#233;m considerando privacidade individual), comida/bebida, divers&#227;o (Wii, &#233; claro) e conforto (pufes, vesti&#225;rio/chuveiro pra quem vem de &lt;a href=&quot;http://www.amoodeiosp.com.br/tags/bike&quot;&gt;bike&lt;/a&gt;). Foi um debate muito interessante.&lt;/p&gt;
&lt;p&gt;A &#250;ltima palestra (ap&#243;s o coffee break) foi sobre um case do &lt;span class=&quot;caps&quot;&gt;UOL&lt;/span&gt;, que est&#225; utilizando Scrum com algumas pr&#225;ticas do XP (principalmente testes) em alguns projetos. Houve uma compara&#231;&#227;o com projetos j&#225; realizados usando &lt;acronym title=&quot;Rational Unified Process&quot;&gt;&lt;span class=&quot;caps&quot;&gt;RUP&lt;/span&gt;&lt;/acronym&gt;.&lt;/p&gt;
&lt;p&gt;No geral, foi um &#243;timo evento, principalmente se considerarmos que foi gratuito. Algumas coisas n&#227;o foram boas, mas como foi feita uma retrospectiva do evento, a tend&#234;ncia &#233; melhorar no pr&#243;ximo. Assim como toda metodologia &#225;gil.&lt;/p&gt;
&lt;p&gt;Amanh&#227; tem Rails Summit!&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/31</id>
    <published>2008-10-03T19:59:08Z</published>
    <updated>2009-08-11T17:54:21Z</updated>
    <link type="text/html" rel="alternate" href="/2008/10/3/mudanca-de-emprego"/>
    <title>Mudan&#231;a (de emprego)</title>
    <content type="html">&lt;p&gt;H&#225; algum tempo (acho que dois anos) tomei contato com esse framework impressionante que &#233; o Rails. Desde ent&#227;o decidi que iria investir no aprendizado da linguagem (Ruby) e do framework (Rails), assim como seus usuais agregados: Mac OS, Git, &lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt;, Agile methods, para algum dia trabalhar a maior parte do tempo com isso, visto que estava preso a v&#225;rios sistemas que estavam em &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/24/original/dburns.png&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Agora tudo come&#231;a a valer a pena. A partir deste m&#234;s sou mais um railer a se juntar ao excelente time da &lt;a href=&quot;http://www.dburnsdesign.com&quot;&gt;DBurns Design&lt;/a&gt;. Ser&#225; fascinante trabalhar full-time com aquilo que eu me dediquei tanto a aprender: Rails, Git, &lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt;, XP, Scrum, e por a&#237; vai, ainda mais com uma equipe que est&#225; crescendo e se dedicando cada vez mais ao Rails.&lt;/p&gt;
&lt;p&gt;Agrade&#231;o os meus colegas de trabalho da &lt;a href=&quot;http://spaceprod.com.br&quot;&gt;Space&lt;/a&gt; que me aguentaram por mais de sete anos, mas &#233; hora de mudar.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/30</id>
    <published>2008-09-16T15:54:11Z</published>
    <updated>2008-10-14T13:43:51Z</updated>
    <link type="text/html" rel="alternate" href="/2008/9/16/mais-eventos-agora-sobre-agile"/>
    <title>Mais Eventos - agora sobre Agile</title>
    <content type="html">&lt;p&gt;Como disse no &lt;a href=&quot;http://blog.shadowmaru.org/2008/8/25/eventos&quot;&gt;post anterior&lt;/a&gt;, parece que Outubro &#233; mesmo o m&#234;s dos eventos de TI. Nele eu falei sobre os eventos relacionados a Rails e Web. Agora vou falar sobre os eventos sobre Agile.&lt;/p&gt;
&lt;p&gt;Para quem n&#227;o sabe, os m&#233;todos &#225;geis de desenvolvimento surgiram para otimizar as entregas e entregar realmente aquilo que o cliente considera importante. Recomendo a leitura do &lt;a href=&quot;http://agilemanifesto.org&quot;&gt;Manifesto Agile&lt;/a&gt;. Pois bem, na &#250;ltima semana fiz um curso sobre &lt;a href=&quot;http://en.wikipedia.org/wiki/Scrum_(development)&quot;&gt;Scrum&lt;/a&gt;, e tamb&#233;m estou lendo sobre &lt;a href=&quot;http://en.wikipedia.org/wiki/Extreme_programming&quot;&gt;Extreme Programming (XP)&lt;/a&gt;. Agora tamb&#233;m vou come&#231;ar a participar das listas e dos eventos relacionados a agile. Em outubro teremos os seguintes eventos (em S&#227;o Paulo) nos quais estarei presente:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.encontroagil.com.br&quot;&gt;Encontro &#193;gil&lt;/a&gt; &amp;#8211; gratuito, e ser&#225; realizado no dia 11/10/2008 no &lt;a href=&quot;http://www.ime.usp.br&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IME&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;USP&lt;/span&gt;&lt;/a&gt;, faculdade onde estudei. Contar&#225; com a presen&#231;a do Vinicius Teles, da ImproveIT, que tamb&#233;m &#233; um nome forte na comunidade Rails.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.falandoemagile.com.br&quot;&gt;Falando em Agile&lt;/a&gt; &amp;#8211; organizado pela Caelum, onde fiz o curso de &lt;span class=&quot;caps&quot;&gt;CSM&lt;/span&gt;. Vai contar com grandes nomes de Agile no Brasil e tamb&#233;m de fora: Alexandre Magno, David Anderson, o time brasileiro da ThoughtWorks que tamb&#233;m desenvolve em Rails, Guilherme Chapiewski da globo.com, entre outros.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/27</id>
    <published>2008-09-12T15:49:05Z</published>
    <updated>2008-09-21T23:59:50Z</updated>
    <link type="text/html" rel="alternate" href="/2008/9/12/problema-com-coment&#225;rios"/>
    <title>Problema com coment&#225;rios</title>
    <content type="html">&lt;p&gt;Hum, aparentemente o Mephisto est&#225; tendo problemas com coment&#225;rios. Quando j&#225; existe um postado, o seguinte n&#227;o vai. Deve ser algum problema de cache do Mephisto, pelo que andei investigando.&lt;/p&gt;
&lt;p&gt;Eu j&#225; devia ter suspeitado, j&#225; que nenhum artigo meu tinha mais de 1 coment&#225;rio. S&#243; achei que eles n&#227;o eram t&#227;o populares :)&lt;/p&gt;
&lt;p&gt;Vou tentar ver o que est&#225; acontecendo, mas qualquer coment&#225;rio envie para mim mesmo: shadow11 (at) gmail&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;EDIT&lt;/span&gt;: Ok, resolvido, era um bug antigo, na verdade, mas s&#243; percebi agora. Tem a ver com o Apache colocando uma barra &amp;#8216;/&amp;#8217; no final da &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt;, e isso zoava o cache do Mephisto (nos logs aparecia 302). Para corrigir, &#233; s&#243; colocar no &lt;code&gt;/public/.htaccess&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DirectorySlash Off&lt;/code&gt;&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/25</id>
    <published>2008-09-11T15:22:28Z</published>
    <updated>2009-08-11T17:53:02Z</updated>
    <link type="text/html" rel="alternate" href="/2008/9/11/identificando-seu-branch-do-git-no-prompt"/>
    <title>Identificando seu branch do git no prompt</title>
    <content type="html">&lt;p&gt;Uma das coisas que mais me atraem no git &#233; a facilidade de lidar com branches, ou seja, uma vers&#227;o do seu reposit&#243;rio que n&#227;o interfere no principal, que j&#225; est&#225; funcionando. Geralmente se usa para adicionar novas funcionalidades sem quebrar o c&#243;digo original, podendo fazer commit &#224; vontade.&lt;/p&gt;
&lt;p&gt;Pois bem, certas vezes vi alguns &lt;a href=&quot;http://blog.shadowmaru.org/2008/8/27/aprenda-rails-assistindo-screencasts&quot;&gt;screencasts&lt;/a&gt; sobre Rails e git onde o prompt do terminal tinha o branch do git atual. Isso &#233; muito &#250;til para saber em que branch voc&#234; est&#225; e lembrar voc&#234; de fazer um branch em vez de alterar o master. Vi um tweet do Nando com o prompt dele alterado, e resolvi ir atr&#225;s. Sinceramente n&#227;o lembro onde eu achei o c&#243;digo, mas segue ele aqui um pouco adaptado para o meu gosto, usando o bash:&lt;/p&gt;
&lt;filter:code lang=&quot;shell-unix-generic&quot;&gt;
&lt;p&gt;function parse_git_branch {&lt;br /&gt;
git branch &amp;#8212;no-color 2&amp;gt; /dev/null | sed -e &amp;#8216;/^[^*]/d&amp;#8217; -e &amp;#8216;s/* \(.*\)/(\1)/&amp;#8217;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;export PS1=&amp;quot;\u@\h:\W \$(parse_git_branch)\$ &amp;quot;&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;Bom, PS1 &#233; a vari&#225;vel de ambiente do bash que define o prompt. Aqui &lt;code&gt;\u&lt;/code&gt; &#233; o seu login, &lt;code&gt;\h&lt;/code&gt; &#233; o hostname (nome da sua m&#225;quina), &lt;code&gt;\W&lt;/code&gt; &#233; o diret&#243;rio atual, e &lt;code&gt;\$&lt;/code&gt; no final &#233; o s&#237;mbolo de cifr&#227;o mesmo. A sacada aqui &#233; o &lt;code&gt;\$(parse_git_branch)&lt;/code&gt;. Ele faz uma chamada para a fun&#231;&#227;o &lt;code&gt;parse_git_branch&lt;/code&gt; definida acima.&lt;/p&gt;
&lt;p&gt;E o que essa fun&#231;&#227;o retorna &#233; justamente o seu branch atual entre par&#234;nteses, pegando a sa&#237;da do comando &lt;code&gt;git branch&lt;/code&gt; e usando express&#245;es regulares para formatar a sa&#237;da usando o &lt;code&gt;sed&lt;/code&gt;. O primeiro par&#226;metro do &lt;code&gt;sed&lt;/code&gt; pega o branch atual (que &#233; o que tem o * na frente) e o segundo coloca somente o texto do branch entre par&#234;nteses.&lt;/p&gt;
&lt;p&gt;Meu prompt ficou assim:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/23/original/prompt.png&quot; /&gt;&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/24</id>
    <published>2008-09-04T18:18:37Z</published>
    <updated>2009-08-11T00:14:17Z</updated>
    <link type="text/html" rel="alternate" href="/2008/9/4/rails-para-designers"/>
    <title>Rails para designers</title>
    <content type="html">&lt;p&gt;Este post &#233; para designers que pretendem trabalhar com Rails e querem um guia inicial para poderem se dar bem com o programador. &#201; bem introdut&#243;rio, ent&#227;o muita gente que j&#225; conhece Rails vai falar &amp;#8216;putz, isso &#233; muito b&#225;sico&amp;#8217;. E &#233; mesmo. Mas pra quem n&#227;o manja nada de programa&#231;&#227;o vai ajudar. Vou falar de &lt;span class=&quot;caps&quot;&gt;MVC&lt;/span&gt;, a estrutura do Rails e tamb&#233;m sobre partials e helpers (um pouco mais avan&#231;ado).&lt;/p&gt;
&lt;h2&gt;&lt;span class=&quot;caps&quot;&gt;MVC&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;MVC&lt;/span&gt; quer dizer &amp;#8216;Model, View, Controller&amp;#8217; e &#233; um jeito de separar as camadas de um sistema. O que vai interessar a voc&#234; s&#227;o as Views, que s&#227;o o front-end do sistema. Voc&#234; n&#227;o vai ter que ficar olhando aquele c&#243;digo enorme de programa&#231;&#227;o antes do seu &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;. Talvez nem no meio. S&#243; para complementar, no Model s&#227;o implementadas as regras de neg&#243;cio do sistema e as conex&#245;es com o banco de dados, e no Controller a l&#243;gica de processamento, ou seja, a intermedia&#231;&#227;o do Model com as Views. &#201; no controller que as vari&#225;veis que ser&#227;o usadas nas Views s&#227;o geradas.&lt;/p&gt;
&lt;h2&gt;Estrutura do Rails&lt;/h2&gt;
&lt;p&gt;Para facilitar a sua vida, todos os arquivos que voc&#234; precisar&#225; editar est&#227;o ou em &lt;code&gt;app/views/&lt;/code&gt; ou em &lt;code&gt;public/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Existem duas estruturas b&#225;sicas para as URLs em Rails, uma seguindo o padr&#227;o &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; e outra que era padr&#227;o at&#233; o Rails 1.2. Voc&#234; n&#227;o precisa saber exatamente o que &#233; &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt;, mas precisa saber qual view editar. Qualquer d&#250;vida, pergunte ao programador se ele est&#225; usando alguma rota espec&#237;fica ou fora do padr&#227;o. Para n&#227;o complicar muito, digamos que o seu sistema segue o padr&#227;o &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; (ou seja, &#233; RESTful):&lt;/p&gt;
&lt;p&gt;http://dominio.com/posts/1&lt;/p&gt;
&lt;p&gt;Segundo o padr&#227;o &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; do Rails, o controller posts vai chamar a action &amp;#8216;show&amp;#8217;, portanto o arquivo que voc&#234; ter&#225; que editar ser&#225; o &lt;code&gt;app/views/posts/show.html.erb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;J&#225; se a &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; for&lt;/p&gt;
&lt;p&gt;http://dominio.com/posts/new&lt;/p&gt;
&lt;p&gt;o arquivo ser&#225; &lt;code&gt;app/views/posts/new.html.erb&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Public&lt;/h2&gt;
&lt;p&gt;No diret&#243;rio &lt;code&gt;public/&lt;/code&gt; est&#227;o todos os artefatos que voc&#234; normalmente usa numa p&#225;gina web: imagens, estilos, JavaScript, Flash, cada um no seu respectivo diret&#243;rio:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;public/images&lt;/li&gt;
	&lt;li&gt;public/stylesheets&lt;/li&gt;
	&lt;li&gt;public/javascripts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E para cham&#225;-los &#233; s&#243; imaginar o diret&#243;rio &lt;code&gt;public/&lt;/code&gt; como a raiz do seu dom&#237;nio, por exemplo&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&amp;lt;img src=&quot;/images/logo.jpg&quot; /&amp;gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ou usando um helper do Rails:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&amp;lt;%= image_tag 'logo.jpg' %&amp;gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Veja que voc&#234; n&#227;o precisa declarar o diret&#243;rio images, o Rails j&#225; sabe que tem que buscar l&#225;.&lt;/p&gt;
&lt;h2&gt;Layouts&lt;/h2&gt;
&lt;p&gt;Bom, layouts s&#227;o basicamente templates. Eles est&#227;o em &lt;code&gt;app/views/layouts&lt;/code&gt;. &#201; onde voc&#234; inclui elementos comuns de um site, como topo, rodap&#233; e o conte&#250;do principal vai no meio. Aquilo que vai no meio da p&#225;gina &#233; o conte&#250;do das views e tudo em volta faz parte do layout. Bem, ent&#227;o como eu coloco esse conte&#250;do das views? &#201; s&#243; incluir a tag &lt;code&gt;&amp;lt;%= yield %&amp;gt;&lt;/code&gt; onde voc&#234; quiser que ele apare&#231;a.&lt;/p&gt;
&lt;p&gt;O padr&#227;o no Rails &#233; que seja renderizado o layout com o mesmo nome do controller. Se esse layout n&#227;o existir, &lt;code&gt;app/views/layouts/application.html.erb&lt;/code&gt; &#233; utilizado.&lt;/p&gt;
&lt;p&gt;Um arquivo &lt;code&gt;.html.erb&lt;/code&gt; &#233; como se fosse um arquivo &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; normal, s&#243; que com algum c&#243;digo Ruby embutido (ERb &#233; embedded ruby).&lt;/p&gt;
&lt;p&gt;Vamos ver um exemplo de layout:&lt;/p&gt;
&lt;filter:code lang=&quot;html&quot;&gt;
&lt;p&gt;&amp;lt;!&lt;span class=&quot;caps&quot;&gt;DOCTYPE&lt;/span&gt; html &lt;span class=&quot;caps&quot;&gt;PUBLIC&lt;/span&gt; &amp;#8220;-//W3C//&lt;span class=&quot;caps&quot;&gt;DTD&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;XHTML&lt;/span&gt; 1.0 Strict//EN&amp;#8221;&lt;br /&gt;
        &amp;#8220;http://www.w3.org/TR/xhtml1/&lt;span class=&quot;caps&quot;&gt;DTD&lt;/span&gt;/xhtml1-strict.dtd&amp;#8221;&amp;gt;&lt;br /&gt;
&lt;html&gt;&lt;/p&gt;
&lt;head&gt;
    &lt;title&gt;&amp;lt;%= @title || &amp;#8220;T&#237;tulo&amp;#8221; %&amp;gt;&lt;/title&gt;
&amp;lt;%= stylesheet_link_tag &amp;#8216;site&amp;#8217; %&amp;gt;
&amp;lt;%= javascript_include_tag &amp;#8216;application&amp;#8217;, &amp;#8216;prototype&amp;#8217;, &amp;#8216;effects&amp;#8217; %&amp;gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div id=&quot;header&quot;&gt;
&amp;lt;%= render :partial =&amp;gt; &amp;#8216;shared/header&amp;#8217; %&amp;gt;
&lt;/div&gt;
&lt;div id=&quot;content&quot;&gt;
&amp;lt;%= yield %&amp;gt;
&lt;/div&gt;
&lt;div id=&quot;footer&quot;&gt;
&amp;lt;%= render :partial =&amp;gt; &amp;#8216;shared/footer&amp;#8217; %&amp;gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;p&gt;&lt;/html&gt;&lt;/filter:code&gt;&lt;/p&gt;
&lt;p&gt;Veja, parece um &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; normal, que voc&#234; j&#225; est&#225; acostumado a ver e escrever. Vamos ver alguns detalhes:&lt;/p&gt;
&lt;filter:code lang=&quot;html_rails&quot;&gt;
 &lt;title&gt;&amp;lt;%= @title || &amp;#8220;T&#237;tulo&amp;#8221; %&amp;gt;&lt;/title&gt;
&lt;/filter:code&gt;
&lt;p&gt;&lt;code&gt;@title&lt;/code&gt; aqui &#233; uma vari&#225;vel, que vai estar definida em algum controller. Se ela n&#227;o existir, ser&#225; usada a string &amp;#8220;T&#237;tulo&amp;#8221;. O &lt;code&gt;||&lt;/code&gt; quer dizer &amp;#8216;ou&amp;#8217;.&lt;/p&gt;
&lt;filter:code lang=&quot;html_rails&quot;&gt;
&lt;p&gt;&amp;lt;%= stylesheet_link_tag &amp;#8216;site&amp;#8217; &lt;span&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;/span&gt;= javascript_include_tag &amp;#8216;application&amp;#8217;, &amp;#8216;prototype&amp;#8217;, &amp;#8216;effects&amp;#8217; %&amp;gt;&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;Estas s&#227;o os helpers no Rails para inclus&#227;o de &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; e JavaScript. No caso, eles v&#227;o automaticamente gerar uma tag para &lt;code&gt;/stylesheets/site.css&lt;/code&gt; e tags para os arquivos &lt;code&gt;/javascripts/application.js&lt;/code&gt;, &lt;code&gt;/javascripts/prototype.js&lt;/code&gt; e &lt;code&gt;/javascripts/effects.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Existem muitos outros helpers que podem ajudar voc&#234; (e o programador) a gerar c&#243;digo &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;. Para mais informa&#231;&#245;es, consulte a &lt;a href=&quot;http://api.rubyonrails.org&quot;&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; do Rails&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Partials&lt;/h2&gt;
&lt;p&gt;Vejamos esta chamada:&lt;/p&gt;
&lt;filter:code lang=&quot;html_rails&quot;&gt;
&lt;p&gt;&amp;lt;%= render :partial =&amp;gt; &amp;#8216;shared/header&amp;#8217; %&amp;gt;&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;J&#225; viu no &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; algo assim?&lt;/p&gt;
&lt;filter:code lang=&quot;php&quot;&gt;
&lt;p&gt;&amp;lt;?php include &amp;#8216;header.php&amp;#8217;;?&amp;gt;&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;Ent&#227;o, &#233; parecido. S&#227;o pequenos peda&#231;os de &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; que s&#227;o comuns a v&#225;rias p&#225;ginas que voc&#234; gostaria de reutilizar. Ali&#225;s esse &#233; um dos princ&#237;pios do Rails: &lt;span class=&quot;caps&quot;&gt;DRY&lt;/span&gt; (Don&amp;#8217;t Repeat Yourself). O arquivo que ele vai chamar tem que ter um &amp;#8216;\_&amp;#8217; na frente, no caso &lt;code&gt;app/views/shared/_header.html.erb&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;DISCLAIMER&lt;/span&gt;: este artigo &#233; inspirado e muito baseado neste post (embora n&#227;o seja uma tradu&#231;&#227;o literal): http://glu.ttono.us/articles/2006/03/21/rails-for-designers&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/23</id>
    <published>2008-09-01T18:00:14Z</published>
    <updated>2008-09-01T18:13:33Z</updated>
    <link type="text/html" rel="alternate" href="/2008/9/1/conte-sua-historia-sobre-rails"/>
    <title>Conte sua hist&#243;ria sobre Rails</title>
    <content type="html">&lt;p&gt;No blog &lt;a href=&quot;http://weblog.rubyonrails.com&quot;&gt;Riding Rails&lt;/a&gt; (o blog oficial do Rails), o &lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt; &lt;a href=&quot;http://weblog.rubyonrails.com/2008/8/30/tell-your-rails-story&quot;&gt;pediu para as pessoas contarem sua hist&#243;ria pessoal com o Rails&lt;/a&gt;. Segue o post traduzido:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Tenho recebido algumas hist&#243;rias realmente tocantes sobre pessoas que se tornaram programadores Rails a partir de diversas origens durante esses anos. Eu at&#233; conversei uma vez com um taxista que estava me levando para o aeroporto que estava programando em Rails. Ou os caras que queriam largar a programa&#231;&#227;o, mas come&#231;aram a se divertir noovamente com Rails.&lt;/p&gt;
&lt;p&gt;Todas essas s&#227;o hist&#243;rias poderosas que eu adoraria poder compartilh&#225;-las com o mundo. Ent&#227;o vamos tentar fazer isso! Se voc&#234; tem uma &#243;tima hist&#243;ria sobre como voc&#234; chegou ao Rails, ent&#227;o por favor mande para david arroba loudthinking ponto com com o assunto &amp;#8220;My Rails story&amp;#8221;. Eu flitrarei todas as mensagens em uma pasta e veremos um jeito de public&#225;-las&amp;quot;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Minha hist&#243;ria n&#227;o &#233; nada sensacional. Eu j&#225; era programador, quando um outro desenvolvedor foi contratado, e ele queria programar em Rails, e nos convenceu a fazer isso. Eu comecei a ver o que ele fazia, estudar e comecei a mexer com Rails tamb&#233;m.&lt;/p&gt;
&lt;p&gt;Mas quem sabe a sua hist&#243;ria n&#227;o &#233; sensacional, a ponto do &lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt; public&#225;-la?&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/20</id>
    <published>2008-08-27T14:21:33Z</published>
    <updated>2008-08-29T13:49:52Z</updated>
    <link type="text/html" rel="alternate" href="/2008/8/27/aprenda-rails-assistindo-screencasts"/>
    <title>Aprenda Rails assistindo Screencasts</title>
    <content type="html">&lt;p&gt;Al&#233;m dos &lt;a href=&quot;http://blog.shadowmaru.org/2008/5/27/livros-de-rails-e-suas-versoes&quot;&gt;livros&lt;/a&gt;, uma outra forma de aprender Rails me ajudou muito: os screencasts. Eles s&#227;o uma forma de aprendizado mais din&#226;mica que os livros, e mais visual que os podcasts. Segue uma lista dos screencasts que eu j&#225; assisti e recomendo:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.peepcode.com&quot;&gt;Peepcode&lt;/a&gt; &amp;#8211; &#233; um dos mais antigos, portanto um dos que tem mais conte&#250;do. &#201; pago (9 &lt;span class=&quot;caps&quot;&gt;USD&lt;/span&gt; cada) mas vale cada centavo, al&#233;m de ter uma &lt;a href=&quot;http://blog.shadowmaru.org/2008/2/20/peepcode-unlimited-screencasts-sobre-rails-por-um-ano&quot;&gt;assinatura anual&lt;/a&gt; (149 &lt;span class=&quot;caps&quot;&gt;USD&lt;/span&gt;). Os screencasts s&#227;o longos, ent&#227;o cuidado para n&#227;o dormir :) Por Geoffrey Grosenbach (putz, acertei de primeira)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.railscasts.com&quot;&gt;Railscasts&lt;/a&gt; &amp;#8211; gr&#225;tis, epis&#243;dios curtos e focados. Excelente. Feito por Ryan Bates.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.nomedojogo.com/2008/08/29/os-screencasts-perdidos-do-nome-do-jogo/&quot;&gt;Nome do Jogo&lt;/a&gt; &amp;#8211; infelizmente o Carlos Brando interrompeu a s&#233;rie de screencasts, que ia muito na linha do Railscasts. Quem sabe n&#227;o volta?&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.pragprog.com&quot;&gt;Pragmatic Screencasts&lt;/a&gt; &amp;#8211; pago tamb&#233;m, feito por v&#225;rias pessoas e organizado pela Pragmatic Programmers, mais conhecida pelos seus livros.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.buildingwebapps.com/podcasts&quot;&gt;Learning Rails&lt;/a&gt; &amp;#8211; gratuito, e cobre o b&#225;sico para criar sua aplica&#231;&#227;o Rails. Come&#231;ou como podcast, e virou screencast.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.envycasts.com&quot;&gt;Envycasts&lt;/a&gt; &amp;#8211; lan&#231;ado recentemente, &#233; pago (9 &lt;span class=&quot;caps&quot;&gt;USD&lt;/span&gt; cada), a qualidade &#233; &#243;tima, o conte&#250;do muito bom e conta com todo o senso de humor do Gregg Pollack e do Jason Seifer, que voc&#234;s podem conferir tamb&#233;m no Rails Envy e no Rails Envy Podcast.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Reparem que quase todos os screencasts s&#227;o em ingl&#234;s. Mais um motivo ent&#227;o para aprender ingl&#234;s, que eu considero fundamental para qualquer programador, apesar de haver muito &lt;a href=&quot;http://gettingreal.37signals.com/GR_por.php&quot;&gt;material&lt;/a&gt; &lt;a href=&quot;http://blog.shadowmaru.org/2008/1/24/aprenda-a-programar&quot;&gt;traduzido&lt;/a&gt; por a&#237;, com esfor&#231;os da comunidade.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/19</id>
    <published>2008-08-25T23:20:01Z</published>
    <updated>2008-10-14T13:44:05Z</updated>
    <link type="text/html" rel="alternate" href="/2008/8/25/eventos"/>
    <title>Eventos</title>
    <content type="html">&lt;p&gt;Parece que o segundo semestre se estabeleceu como o per&#237;odo dos grandes eventos, pelo menos na &#225;rea de TI/Web. Depois de um primeiro semestre meio inerte, o segundo promete!&lt;/p&gt;
&lt;p&gt;Tivemos nesta sexta-feira o primeiro &lt;a href=&quot;http://www.akitaonrails.com/2008/8/15/happy-hour-de-railers-de-sampa&quot;&gt;Happy Hour de Railers em S&#227;o Paulo&lt;/a&gt;, no Bar do Juarez. Foi bem legal, tinha umas 30 pessoas, incluindo gente da WebCo, Pagestacker e boo-box. Quem sabe isso n&#227;o motiva encontros regionais em outras cidades?&lt;/p&gt;
&lt;p&gt;Vamos ter o &lt;a href=&quot;http://imasters.uol.com.br/intercon/2008/&quot;&gt;InterCon 2008&lt;/a&gt;, evento sobre web e tend&#234;ncias, onde v&#227;o palestrar grandes nomes da web/blogosfera brasileira, como Fabio Seixas, Manoel Lemos, Marco Gomes, Fabio Akita, Cris Dias e o grande Luli Radfahrer. O InterCon acontece no dia 25 de outubro e tem como tema a inova&#231;&#227;o digital. &lt;strong&gt;Eu vou!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ainda em outubro, nos dias 15 e 16, teremos o grande evento de Rails do ano, que eu j&#225; mencionei no post anterior, aqui em S&#227;o Paulo: a &lt;a href=&quot;http://www.locaweb.com.br/railssummit/&quot;&gt;Rails Summit Latin America&lt;/a&gt;. &lt;strong&gt;Eu vou!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sem confirma&#231;&#227;o ainda, deve acontecer em setembro o &lt;a href=&quot;http://www.minasonrails.org/&quot;&gt;Minas on Rails&lt;/a&gt;. Se realmente acontecer, vou fazer um esfor&#231;o para comparecer.&lt;/p&gt;
&lt;p&gt;Isso fora o &lt;a href=&quot;http://www.expomoney.com.br&quot;&gt;ExpoMoney&lt;/a&gt;, mas isso &#233; assunto para outro &lt;a href=&quot;http://www.conscienciafinanceira.com.br&quot;&gt;blog&lt;/a&gt;.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/17</id>
    <published>2008-07-13T01:33:25Z</published>
    <updated>2008-10-14T13:44:18Z</updated>
    <link type="text/html" rel="alternate" href="/2008/7/13/rails-summit-brazil-2008-hospedagem"/>
    <title>Rails Summit Latin America 2008 - Hospedagem</title>
    <content type="html">&lt;p&gt;Como o &lt;a href=&quot;http://akitaonrails.com&quot;&gt;Fabio Akita&lt;/a&gt; anunciou no seu blog, em outubro (dias 15 e 16) haver&#225; a &lt;a href=&quot;http://akitaonrails.com/2008/7/4/est-chegando-a-hora-rails-summit-brazil-2008&quot;&gt;Rails Summit &lt;strike&gt;Brazil&lt;/strike&gt; Latin America 2008&lt;/a&gt;. Vai ser o primeiro grande evento de Rails no Brasil, com presen&#231;as internacionais como Chad Fowler, Obie Fernandez, Dr. Nic Williams e at&#233; o pr&#243;prio &lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt; (por v&#237;deo-confer&#234;ncia), e nacionais como &lt;a href=&quot;http://www.manoellemos.com&quot;&gt;Manoel Lemos&lt;/a&gt; e &lt;a href=&quot;http://www.improveit.com.br&quot;&gt;Vinicius Teles&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para colaborar um pouco com o evento e a divulga&#231;&#227;o, resolvi fazer (inspirado por uma &lt;a href=&quot;http://twitter.com/tapajos/statuses/853140229&quot;&gt;pergunta do Tapaj&#243;s no Twitter&lt;/a&gt;) uma listagem dos hot&#233;is que ficam perto do local do evento, o Anhembi, para as pessoas que n&#227;o s&#227;o de S&#227;o Paulo. N&#227;o sei se haver&#225; hospedagem oficial, mas o que importa &#233; a liberdade de escolha :)&lt;/p&gt;
&lt;p&gt;Segue a lista (os pre&#231;os variam conforme o tipo de quarto):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.hinnbrasil.com.br/hotel_sao_hipa_home.php&quot;&gt;Holiday Inn Parque Anhembi&lt;/a&gt;&lt;br /&gt;
&#201; definitivamente o hotel mais perto, ele fica &lt;b&gt;dentro&lt;/b&gt; do complexo do Anhembi.&lt;br /&gt;
Di&#225;ria: de R$250 a R$400&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.accorhotels.com.br/guiahoteis/Ibis/hotel_main.asp?cd_hotel=33&quot;&gt;Ibis Barra Funda&lt;/a&gt;&lt;br /&gt;
Di&#225;ria: R$135 (+R$9,50 com caf&#233; da manh&#227;)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.accorhotels.com.br/guiahoteis/novotel/hotel_main.asp?cd_hotel=18&quot;&gt;Novotel Center Norte&lt;/a&gt;&lt;br /&gt;
Di&#225;ria: R$145 a R$320&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.accorhotels.com.br/guiahoteis/mercure/hotel_main.asp?cd_hotel=179&quot;&gt;Mercure Apt Nortel&lt;/a&gt;&lt;br /&gt;
Di&#225;ria: R$150 a R$220&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.bwmetrotietehotel.com.br/home&quot;&gt;Best Western Metr&#244; Tiet&#234;&lt;/a&gt;&lt;br /&gt;
&lt;strike&gt;N&#227;o est&#225; dispon&#237;vel para o per&#237;odo.&lt;/strike&gt; &lt;span class=&quot;caps&quot;&gt;UPDATE&lt;/span&gt;: O &lt;a href=&quot;http://blog.improveit.com.br/articles/2008/07/29/rails-summit-latin-america-2008&quot;&gt;Tapaj&#243;s&lt;/a&gt; conseguiu reserva l&#225;, ent&#227;o estou mudando o status.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;iframe width=&quot;425&quot; height=&quot;350&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; src=&quot;http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;s=AARTsJqgV2nwuj5YC0Xh92dc3AKX1p_ipQ&amp;amp;msa=0&amp;amp;msid=100925736882151121931.000451dddee08a50ac21b&amp;amp;ll=-23.508589,-46.63456&amp;amp;spn=0.055095,0.072956&amp;amp;z=13&amp;amp;output=embed&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href=&quot;http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=100925736882151121931.000451dddee08a50ac21b&amp;amp;ll=-23.508589,-46.63456&amp;amp;spn=0.055095,0.072956&amp;amp;z=13&amp;amp;source=embed&quot; style=&quot;text-align:left&quot;&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/15</id>
    <published>2008-06-12T13:28:09Z</published>
    <updated>2009-08-11T17:43:05Z</updated>
    <link type="text/html" rel="alternate" href="/2008/6/12/rails-2-1-what-s-new"/>
    <title>Rails 2.1: What's new?</title>
    <content type="html">&lt;div style=&quot;width:640px;margin:10px auto;&quot;&gt;&lt;img src=&quot;/system/assets/22/original/ruby_on_rails_2_1.jpg&quot; /&gt; &lt;img src=&quot;/system/assets/21/original/cover.jpg&quot; /&gt;&lt;/div&gt;
&lt;p&gt;Mais um projeto de tradu&#231;&#227;o do qual eu participei (o outro foi o &lt;a href=&quot;http://blog.shadowmaru.org/2008/1/24/aprenda-a-programar&quot;&gt;Learn to Program&lt;/a&gt;): &#233; a &lt;a href=&quot;http://www.nomedojogo.com/2008/06/09/new-free-book-ruby-on-rails-21-whats-new/&quot;&gt;tradu&#231;&#227;o&lt;/a&gt;, desta vez do Portugu&#234;s para o Ingl&#234;s do e-book do &lt;a href=&quot;http://www.nomedojogo.com&quot;&gt;Carlos Brando&lt;/a&gt;, sobre as novidades do Rails 2.1, lan&#231;ado oficialmente durante a &lt;a href=&quot;http://www.railsconf.com&quot;&gt;RailsConf 2008&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Traduzi somente o cap&#237;tulo 14 (todos os outros j&#225; &amp;#8220;tinham dono&amp;#8221;), mas pelo menos pude contribuir. Foi o primeiro livro a ser lan&#231;ado sobre o assunto, tanto em Portugu&#234;s como em Ingl&#234;s, e fico feliz por ter feito parte desse projeto. Agora deve sair at&#233; &lt;a href=&quot;http://ruby-it.org/pages/traduzione%20rails%202.1%20dal%20portoghese&quot;&gt;vers&#227;o em italiano&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.nomedojogo.com/2008/06/06/o-primeiro-livro-sobre-rails-21-e-brasileiro/&quot;&gt;Veja a vers&#227;o em Portugu&#234;s&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.nomedojogo.com/2008/06/09/new-free-book-ruby-on-rails-21-whats-new/&quot;&gt;Veja a vers&#227;o em Ingl&#234;s&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gostou? Recomende o pessoal no &lt;a href=&quot;http://workingwithrails.com&quot;&gt;Working with Rails&lt;/a&gt;!&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/12</id>
    <published>2008-05-27T14:28:52Z</published>
    <updated>2009-08-11T17:26:07Z</updated>
    <link type="text/html" rel="alternate" href="/2008/5/27/livros-de-rails-e-suas-versoes"/>
    <title>Livros de Rails e suas vers&#245;es</title>
    <content type="html">&lt;p&gt;Uma das melhores maneiras de se aprender uma linguagem (ou, no caso, um framework) &#233; lendo um livro. O problema em aprender Rails atrav&#233;s de livros &#233; que a linguagem muda frequentemente, ent&#227;o as vers&#245;es nas quais os livros foram escritos tornam-se desatualizadas muito rapidamente.&lt;/p&gt;
&lt;p&gt;Veja as vers&#245;es e suas datas de lan&#231;amento:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Rails 1.0 &amp;#8211; 13/12/2005&lt;/li&gt;
	&lt;li&gt;Rails 1.1 &amp;#8211; 27/03/2006&lt;/li&gt;
	&lt;li&gt;Rails 1.2 &amp;#8211; 17/01/2007&lt;/li&gt;
	&lt;li&gt;Rails 2.0 &amp;#8211; 06/12/2007&lt;/li&gt;
	&lt;li&gt;Rails 2.1 &amp;#8211; 31/05/2008&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para ajudar o iniciante que quer aprender &lt;a href=&quot;http://boo-box.com/link/bid:424/lang:en-US/tags:Rails+livro/format:box&quot; class=&quot;bbli&quot;&gt;Ruby on Rails&lt;img src=&quot;http://boo-box.com/bbli&quot; alt=&quot;[bb]&quot; class=&quot;bbic&quot; /&gt;&lt;/a&gt;&lt;script src=&quot;http://stable.boo-box.com/&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;, compilei uma lista com os livros mais populares com suas respectivas vers&#245;es:&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/9/original/agile_web_development_with_rails1.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Agile Web Development with Rails 1ed. (2005)&lt;br /&gt;
Dave Thomas/David Heinemeier Hansson&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 1.0&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/10/original/agile_web_development_with_rails2.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Agile Web Development with Rails 2ed. (2006)&lt;br /&gt;
Dave Thomas/David Heinemeier Hansson&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 1.2&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/11/original/agile_web_development_with_rails3beta.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Agile Web Development with Rails 3ed. (beta)&lt;br /&gt;
Sam Ruby/Dave Thomas&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 2.x&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/16/original/rails_recipes.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Rails Recipes (2006)&lt;br /&gt;
Chad Fowler&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 1.1&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/8/original/advanced_rails_recipes.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Advanced Rails Recipes (2008)&lt;br /&gt;
Mike Clark&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 2.0&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/19/original/the_rails_way.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;The Rails Way (2007)&lt;br /&gt;
Obie Fernandez&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 2.0&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/20/original/ndphpr.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Rails for &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; Developers (2008)&lt;br /&gt;
Derek DeVries/Mike Naberezny&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 2.0&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/17/original/repensando_a_web_com_rails.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Repensando a Web com Rails (2006)&lt;br /&gt;
Fabio Akita&lt;br /&gt;
Portugu&#234;s&lt;br /&gt;
Rails 1.1.2&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/15/original/rails_para_desenvolvedores_java.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Rails para Desenvolvedores Java (2007)&lt;br /&gt;
Stuart Halloway/Justin Gehtland&lt;br /&gt;
Portugu&#234;s&lt;br /&gt;
Rails 1.1&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/18/original/ruby_on_rails_executando.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Ruby on Rails: Executando (2006)&lt;br /&gt;
Curt Hibbs/Bruce Tate&lt;br /&gt;
Portugu&#234;s&lt;br /&gt;
Rails 1.1&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/12/original/ajax_on_rails.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Ajax on Rails (2007)&lt;br /&gt;
Scott Raymond&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 1.1&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/14/original/rails_cookbook.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Rails Cookbook (2007)&lt;br /&gt;
Rob Orsini&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 1.2&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/system/assets/13/original/beginning_rails.png&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Beginning Rails (2007)&lt;br /&gt;
Cloves Carneiro Jr./Jeffrey Allan Hardy&lt;br /&gt;
Ingl&#234;s&lt;br /&gt;
Rails 1.2.3&lt;/p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pode-se ver que a oferta &#233; grande mas as vers&#245;es n&#227;o s&#227;o as mais atuais. Minha sugest&#227;o: se n&#227;o tiver acesso a um livro mais recente, aprenda com a vers&#227;o do livro que voc&#234; tem (e baixe a vers&#227;o do Rails correspondente), e depois veja quais foram as altera&#231;&#245;es de uma vers&#227;o para a outra.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/11</id>
    <published>2008-05-09T21:57:08Z</published>
    <updated>2008-05-13T22:21:16Z</updated>
    <link type="text/html" rel="alternate" href="/2008/5/9/de-mudan&#231;a-de-provedor"/>
    <title>De mudan&#231;a (de provedor)</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;http://www.railsplayground.com/images/logos/rails_playground.jpg&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;Quick note: Este blog deve ficar fora do ar por algum tempo &amp;mdash; espero que pouco &amp;mdash; pois abri uma conta na &lt;a href=&quot;http://railsplayground.net&quot;&gt;Rails Playground&lt;/a&gt; e vou tentar migrar meus sites neste fim de semana.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;EDIT&lt;/span&gt;: blog j&#225; movido. Fora um pequeno problema com o fcgi (aqui eles usam mod_fcgid) est&#225; tudo rodando beleza!&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/10</id>
    <published>2008-04-15T21:15:47Z</published>
    <updated>2008-04-15T21:22:02Z</updated>
    <link type="text/html" rel="alternate" href="/2008/4/15/name-that-code"/>
    <title>Name That Code</title>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.oneplusyou.com/q/v/code&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.oneplusyou.com/q/img/badges/code_100.jpg&quot; alt=&quot;Name That Code&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Created by &lt;a href=&quot;http://www.oneplusyou.com/&quot;&gt;OnePlusYou&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Por esta eu n&#227;o esperava. J&#225; estudei diversas linguagens de programa&#231;&#227;o, mas programar pra valer, s&#243; Perl, &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; e Ruby on Rails mesmo. Pelo visto, conhe&#231;o (mesmo n&#227;o gostando &amp;#8211; essa foi direta pro &lt;span class=&quot;caps&quot;&gt;ASP&lt;/span&gt;) mais linguagens do que imaginava.&lt;/p&gt;
&lt;p&gt;Obs: uma delas eu chutei. Mas foi por elimina&#231;&#227;o.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/9</id>
    <published>2008-04-11T19:57:58Z</published>
    <updated>2008-04-11T19:58:42Z</updated>
    <link type="text/html" rel="alternate" href="/2008/4/11/rails-com-mod_rails-para-apache"/>
    <title>Rails com mod_rails para Apache</title>
    <content type="html">&lt;p&gt;Um dos maiores motivos para resist&#234;ncia &#224; mudan&#231;a dos nossos sistemas na empresa, de &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; para Ruby on Rails, sempre foi o &lt;i&gt;deploy&lt;/i&gt;. Convenhamos, colocar um sistema Rails em produ&#231;&#227;o n&#227;o &#233; a coisa mais f&#225;cil do mundo. FastCGI, Mongrel, Mongrel Cluster, Apache&amp;#8230;&lt;/p&gt;
&lt;p&gt;Agora a coisa parece mudar de figura e ficar t&#227;o f&#225;cil como o mod_php. Foi lan&#231;ado hoje o &lt;a href=&quot;http://www.modrails.com/&quot;&gt;Phusion Passenger&lt;/a&gt; (ou mod_rails), um m&#243;dulo do &lt;a href=&quot;http://httpd.apache.org&quot;&gt;Apache&lt;/a&gt; que torna o &lt;i&gt;deploy&lt;/i&gt; t&#227;o simples como copiar os arquivos pro servidor e configurar o caminho no Apache.&lt;/p&gt;
&lt;p&gt;Acredito que a partir de agora a ades&#227;o ao Rails (principalmente por parte das empresas de &lt;i&gt;hosting&lt;/i&gt;) ser&#225; ainda maior&amp;#8230;&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/8</id>
    <published>2008-02-20T20:25:03Z</published>
    <updated>2009-08-11T17:10:58Z</updated>
    <link type="text/html" rel="alternate" href="/2008/2/20/peepcode-unlimited-screencasts-sobre-rails-por-um-ano"/>
    <title>PeepCode Unlimited - Screencasts sobre Rails, por um ano</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/system/assets/7/original/peepcode.png&quot; align=&quot;left&quot; style=&quot;margin-right:10px;&quot; /&gt;&lt;a href=&quot;http://peepcode.com&quot;&gt;PeepCode&lt;/a&gt; &#233; um site que vende screencasts e PDFs sobre Rails e assuntos relacionados (como &lt;span class=&quot;caps&quot;&gt;GIT&lt;/span&gt;, prototype.js e RSpec). Voc&#234; pode, por apenas US$9, comprar um screencast de alt&#237;ssima qualidade (tanto de conte&#250;do como &#225;udio e v&#237;deo) e aprender sobre algum aspecto do Rails. Existem pacotes de 5 e 10 screencasts/PDFs, que custam US$40 e US$70, respectivamente. Eu mesmo j&#225; comprei 6 screencasts e recomendo.&lt;/p&gt;
&lt;p&gt;Hoje, Geoffrey Grosenbach anunciou um novo pacote de assinatura: o &lt;a href=&quot;http://peepcode.com/products/unlimited&quot;&gt;PeepCode Unlimited&lt;/a&gt;. O pacote custa US$139 e inclui todos os screencasts e PDFs j&#225; publicados e tudo o que for publicado por um ano. Para voc&#234; ter uma id&#233;ia, o primeiro screencast foi publicado em dezembro de 2006, e j&#225; temos 17 screencasts e 4 livros em &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Para voc&#234; que pretende entrar de cabe&#231;a no mundo Rails, esta &#233; uma &#243;tima oportunidade, j&#225; que o pre&#231;o sobe para US$149 em 21/03/2008.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;EDIT&lt;/span&gt; 20/03/2008: Acabei de comprar o meu! J&#225; baixei RESTful Rails, Caching e &lt;span class=&quot;caps&quot;&gt;RJS&lt;/span&gt; templates. Tenho j&#225; o bastante para o feriado :)&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/7</id>
    <published>2008-01-24T13:39:55Z</published>
    <updated>2009-08-11T15:55:32Z</updated>
    <link type="text/html" rel="alternate" href="/2008/1/24/aprenda-a-programar"/>
    <title>Aprenda a Programar</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/system/assets/6/original/LTP_cover.jpg&quot; alt=&quot;Capa do livro Learn to Program, por Chris Pine&quot; align=&quot;left&quot; hspace=&quot;10&quot; vspace=&quot;5&quot; style=&quot;margin-right:10px;&quot; /&gt; Voc&#234; &#233; webdesigner e tem dificuldades de entender todo aquele c&#243;digo que o programador deixou? Voc&#234; trabalha com suporte de software e n&#227;o tem a menor id&#233;ia de como ele foi feito? Voc&#234; sempre quis saber como esses maravilhosos programadores (ok, agora exagerei) conseguem fazer as coisas funcionarem? Seus problemas acabaram! (hehe).&lt;/p&gt;
&lt;p&gt;Agora s&#233;rio, deixa eu divulgar aqui esse excelente livro feito por Chris Pine, que eu, entre muitos outros programadores, ajudei a traduzir/revisar. O livro chama-se &lt;a href=&quot;http://aprendaaprogramar.rubyonrails.pro.br/introducao&quot;&gt;Aprenda a Programar&lt;/a&gt; e foi traduzido gra&#231;as &#224; iniciativa de &lt;a href=&quot;http://www.akitaonrails.com&quot;&gt;Fabio Akita&lt;/a&gt; e com a ajuda da comunidade Rails-br.&lt;/p&gt;
&lt;p&gt;Recomendo esse livro para uma introdu&#231;&#227;o ao mundo da programa&#231;&#227;o. A linguagem &#233; descontra&#237;da e f&#225;cil de entender. At&#233; os webdesigners v&#227;o entender &amp;lt;/maldade&amp;gt;&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/4</id>
    <published>2007-12-19T20:52:50Z</published>
    <updated>2007-12-19T21:29:21Z</updated>
    <link type="text/html" rel="alternate" href="/2007/12/19/tirando-os-acentos"/>
    <title>Tirando os acentos</title>
    <content type="html">&lt;p&gt;Recentemente tive que fazer uma rotina para tirar os acentos de um arquivo texto (fornecido pelo cliente) antes de serem processados, pois as diferen&#231;as de charset (tipicamente &lt;span class=&quot;caps&quot;&gt;ISO&lt;/span&gt;-8859-1 vs. &lt;span class=&quot;caps&quot;&gt;UTF&lt;/span&gt;-8) levavam a linha a ter um comprimento maior que o esperado. Assim, o script que interpretava a linha entendia tudo errado, pois &#233; baseado em comprimento de strings. Procurei muito na internet (quero dizer, Google) mas n&#227;o achei nada que pudesse resolver o problema. Ent&#227;o fui explorando a documenta&#231;&#227;o do Ruby e experimentando no &lt;span class=&quot;caps&quot;&gt;IRB&lt;/span&gt; at&#233; chegar nessa solu&#231;&#227;o:&lt;/p&gt;
&lt;filter:code lang=&quot;ruby&quot;&gt;
&lt;p&gt;f = File.open(filename,&amp;#8216;r&amp;#8217;)&lt;/p&gt;
&lt;p&gt;f.each_line do |line|&lt;br /&gt;
	line = line.strip&lt;br /&gt;
	next if line.length == 0&lt;/p&gt;
&lt;p&gt;lines.push line&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;replace accented characters to avoid charset conflicts&lt;br /&gt;
        line = line.tr(&amp;#8220;\301\300\303\302\341\340\343\342&amp;#8221;,&amp;#8216;a&amp;#8217;)&lt;br /&gt;
        line = line.tr(&amp;#8220;\311\312\351\352&amp;#8221;,&amp;#8216;e&amp;#8217;)&lt;br /&gt;
        line = line.tr(&amp;#8220;\315\355&amp;#8221;,&amp;#8216;i&amp;#8217;)&lt;br /&gt;
        line = line.tr(&amp;#8220;\323\325\324\363\365\364&amp;#8221;,&amp;#8216;o&amp;#8217;)&lt;br /&gt;
        line = line.tr(&amp;#8220;\332\372&amp;#8221;,&amp;#8216;u&amp;#8217;)&lt;br /&gt;
        line = line.tr(&amp;#8220;\307\347&amp;#8221;,&amp;#8216;c&amp;#8217;)&lt;br /&gt;
        line = line.tr(&amp;#8220;\321\361&amp;#8221;,&amp;#8216;n&amp;#8217;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;# processamento da linha aqui&lt;br /&gt;
end&lt;/p&gt;
&lt;/filter:code&gt;
&lt;p&gt;N&#227;o ficou l&#225; muito elegante, mas pelo menos pra mim funcionou. Alguma sugest&#227;o de refactoring?&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/3</id>
    <published>2007-11-26T18:54:10Z</published>
    <updated>2007-12-07T12:46:42Z</updated>
    <link type="text/html" rel="alternate" href="/2007/12/7/sou-78-por-cento-geek-e-90-por-cento-viciado-em-cafe"/>
    <title>Sou 78% geek e 90% viciado em caf&#233;. Novidade?</title>
    <content type="html">&lt;p&gt;Para mim n&#227;o &#233; novidade alguma. Mas se voc&#234; quiser saber o quanto geek voc&#234; &#233; ou o quanto voc&#234; precisa de um caf&#233; neste momento, siga os links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.justsayhi.com/bb/geek&quot; style=&quot;text-decoration: none; background: url('http://assets.justsayhi.com/badges/339/467/geek_badge1_green.4uqdvaevqb.jpg') no-repeat; display: block; width: 268px; height: 82px;&quot;&gt;&lt;span style=&quot;display: block; padding-left: 125px; padding-top: 28px; color: #000; font-family: Arial; font-size: 22px;&quot;&gt;78% Geek&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;background: url('http://assets.justsayhi.com/badges/394/728/coffee.0r90iqkf48.jpg') no-repeat; width: 265px; height: 211px;&quot;&gt;&lt;a style=&quot;display: block; text-align: center; padding-top: 167px;  height: 35px; font-size: 16px; font-family: Arial; text-decoration: none; color: #fff;&quot; href=&quot;http://www.justsayhi.com/bb/view/how-addicted-to-coffee-are-you&quot;&gt;I am 90% Addicted to Coffee&lt;/a&gt;&lt;/div&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/2</id>
    <published>2007-11-07T14:44:32Z</published>
    <updated>2009-08-11T15:53:46Z</updated>
    <link type="text/html" rel="alternate" href="/2007/11/7/o-tema"/>
    <title>O Tema</title>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/system/assets/5/original/textmate.png&quot; align=&quot;left&quot; hspace=&quot;5&quot; /&gt;O tema que eu coloquei aqui neste Mephisto foi baseado na &lt;em&gt;syntax highlighting&lt;/em&gt; de Ruby do &lt;a href=&quot;http://macromates.com&quot;&gt;TextMate&lt;/a&gt;, na minha opini&#227;o o melhor editor de texto que eu j&#225; usei para programa&#231;&#227;o. Mas eu estou achando ele meio escuro, o que acham? Talvez clarear um pouco o texto&amp;#8230;. n&#227;o sei, n&#227;o sou designer.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;UPDATE&lt;/span&gt;: j&#225; mudei a cor do texto normal para #777, acho que ficou um pouco melhor.&lt;/p&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.shadowmaru.org,2005:Post/1</id>
    <published>2007-11-01T21:03:22Z</published>
    <updated>2007-11-12T15:29:48Z</updated>
    <link type="text/html" rel="alternate" href="/2007/11/1/first-post"/>
    <title>First Post</title>
    <content type="html">&lt;p&gt;Oh n&#227;o! Outro blog para ficar desatualizado!&lt;/p&gt;
&lt;p&gt;Espero que n&#227;o.&lt;/p&gt;
&lt;p&gt;Como dessa vez espero falar sobre mais assuntos, e n&#227;o apenas finan&#231;as (como em &lt;a href=&quot;http://conscienciafinanceira.com.br&quot;&gt;Consci&#234;ncia Financeira&lt;/a&gt;) ou o meu casamento (em &lt;a href=&quot;http://casamento.yasuda.eti.br&quot;&gt;casamento.yasuda.eti.br&lt;/a&gt; &amp;#8211; na verdade eu n&#227;o escrevi nada no blog, foi a Gizela &amp;#8211; eu s&#243; fiz o site), acho que este blog n&#227;o vai ficar desatualizado. Caso fique, siga-me no &lt;a href=&quot;http://twitter.com/shadow11&quot;&gt;twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O conte&#250;do? Sei l&#225;, qualquer coisa. Na verdade eu instalei mais pra testar o &lt;a href=&quot;http://mephistoblog.com&quot;&gt;Mephisto&lt;/a&gt;, que &#233; feito em &lt;a href=&quot;http://boo-box.com/link/aff:submarinoid/uid:173710/tags:ruby rails&quot; class=&quot;bbli&quot;&gt;Ruby on Rails&amp;lt;img src=&amp;#8220;http://boo-box.com/bbli&amp;#8221; alt=&amp;#8220;[bb]&amp;#8221; class=&amp;#8220;bbic&amp;#8221; /&lt;/a&gt;, meu novo v&#237;cio tecnol&#243;gico. Mas quem sabe aparece algo interessante?&lt;/p&gt;
&lt;script src=&quot;http://stable.boo-box.com&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</content>
    <author>
      <name>
      </name>
    </author>
  </entry>
</feed>
