<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>boa idéia software livre: Category shoppings</title>
    <link>http://blog.boaideia.inf.br/articles/category/shoppings</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>a personalidade jurídica de andré ribeiro camargo</description>
    <item>
      <title>Timezone no Rails3</title>
      <description>&lt;p&gt;Ainda não coloquei em produção a nova versão dos shoppings em Rails3.&lt;/p&gt;


	&lt;p&gt;Inicialmente, resolvi migrar as rotinas de retaguarda (que rodam pelo cron).&lt;/p&gt;


	&lt;p&gt;Foi aí que me dei por conta que a nova aplicação estava &amp;#8220;ratiando&amp;#8221; com as datas e horas.&lt;/p&gt;


	&lt;p&gt;Para deixar como funcionava no Rails 1.1.6, coloquei no config/application.rb:&lt;/p&gt;


&lt;pre&gt;
config.time_zone = 'Brasilia'
config.active_record.default_timezone = :local
&lt;/pre&gt;

	&lt;p&gt;Parece que agora está tudo OK novamente&amp;#8230;&lt;/p&gt;


	&lt;p&gt;2011 já chegou, tenho que fazê-lo melhor do que o ano passado. Particularmente não gostei de 2010, ainda bem que terminou.&lt;/p&gt;</description>
      <pubDate>Wed, 12 Jan 2011 13:20:00 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:ffc3a06b-b9ce-44de-b3cb-d6ebfbea9b52</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2011/01/12/timezone-no-rails3</link>
      <category>trabalho</category>
      <category>nerd</category>
      <category>rails</category>
      <category>shoppings</category>
    </item>
    <item>
      <title>marshall data too short</title>
      <description>&lt;p&gt;&lt;a href="http://jit.nuance9.com/2008/03/marshal-data-too-short.html"&gt;http://jit.nuance9.com/2008/03/marshal-data-too-short.html&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Matador&amp;#8230;.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Dec 2010 18:30:00 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:e77e1979-63a5-47e6-a77a-12083414aedf</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/12/15/marshall-data-too-short</link>
      <category>trabalho</category>
      <category>nerd</category>
      <category>shoppings</category>
    </item>
    <item>
      <title>Aleluia!</title>
      <description>&lt;p&gt;Pela primeira vez na minha vida, vejo isso:&lt;/p&gt;


&lt;pre&gt;
andre@amazonpc:~/rails/shopping3$ rake
(in /home/andre/rails/shopping3)
Loaded suite /home/andre/.rvm/gems/ree-1.8.7-2010.02/gems/rake-0.8.7/lib/rake/rake_test_loader
Started
..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Finished in 10077.328468 seconds.

2062 tests, 36943 assertions, 0 failures, 0 errors
&lt;/pre&gt;

	&lt;p&gt;Significa que todos os testes de integração do shopping passaram.&lt;/p&gt;


	&lt;p&gt;Leva quase 3h para rodar tudo, que dureza.&lt;/p&gt;


	&lt;p&gt;Mas, me encheu de coragem para colocar em produção :-)&lt;/p&gt;


	&lt;p&gt;Estamos próximos do final da migração para Rails3, aleluia!&lt;/p&gt;</description>
      <pubDate>Sat, 27 Nov 2010 19:54:00 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:139d0e49-db90-4d33-ac86-88a24a675149</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/11/27/aleluia</link>
      <category>trabalho</category>
      <category>nerd</category>
      <category>rails</category>
      <category>shoppings</category>
    </item>
    <item>
      <title>Primeiro patch aceito a gente nunca esquece</title>
      <description>&lt;p&gt;Ando quieto por aqui porque o bicho tá pegando na migração da aplicação dos shoppings de Rails 1.1.6 para 3.0.&lt;/p&gt;


	&lt;p&gt;Já tenho testes de integração de todos módulos do sistema, em vários contextos. São mais de 100 arquivos&amp;#8230;&lt;/p&gt;


	&lt;p&gt;Durante este trabalho, acabei descobrindo alguns probleminhas no Rails. O primeiro deles (&lt;a href="https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/5812-fix-for-actionviewtemplaterefresh-in-rails-310beta"&gt;Fix for ActionView::Template#refresh in rails 3.1.0.beta&lt;/a&gt;) já reportei foi incluído no framework. Já o segundo ainda falta criar um teste que reproduza o problema e demonstre que foi resolvido.&lt;/p&gt;


	&lt;p&gt;Nosso servidor de testes já está rodando a versão em Rails 3, mas ainda não está maduro suficiente para publicar em produção.&lt;/p&gt;


	&lt;p&gt;De qualquer forma, gostaria muito de concluir isso ainda este mês.&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;EM TEMPO&lt;/span&gt;, fui me dar por conta somente agora que dia 14 do mês &lt;span class="caps"&gt;PASSADO&lt;/span&gt; o PelotasCenter completou 4 anos &amp;#8220;no ar&amp;#8221;, parabéns a toda equipe o fica meu &lt;span class="caps"&gt;MUITO OBRIGADO&lt;/span&gt; a todos clientes que tornaram isso possível. Ontem ainda publicamos o novo site da &lt;a href="http://www.emilicecalcados.com.br" title="www.emilicecalcados.com.br"&gt;Emilice Calçados&lt;/a&gt; e da &lt;a href="http://www.aeapel.com.br" title="www.aeapel.com.br"&gt;Associação dos Engenheiros Agrônomos de Pelotas&lt;/a&gt; arredondando a conta para 50 sites participantes do portal de negócios pelotense.&lt;/p&gt;


	&lt;p&gt;Por enquanto era isso, eu mando notícias.&lt;/p&gt;</description>
      <pubDate>Fri, 15 Oct 2010 08:07:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:f90f8b1e-bf02-4ff6-a62d-4e5ccc74a9fc</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/10/15/primeiro-patch-a-gente-nunca-esquece</link>
      <category>trabalho</category>
      <category>pessoa jurídica</category>
      <category>rails</category>
      <category>shoppings</category>
    </item>
    <item>
      <title>ActionMailer do Rails 3</title>
      <description>&lt;p&gt;ActionMailer é uma biblioteca do Rails que trata da manipulação de e-mails e nesta versão 3.0 teve várias melhorias.&lt;/p&gt;


	&lt;p&gt;Antigamente, você passava parâmetros para &amp;#8220;view&amp;#8221; através do método &amp;#8220;body&amp;#8221;, mas, na nova implementação você define os parâmetros como variáveis de instância na action do mailer e depois simplesmente as referencia na view.&lt;/p&gt;


	&lt;p&gt;Demorei algumas horas para me dar por conta disso, &amp;#8220;herança&amp;#8221; da versão antiga.&lt;/p&gt;


	&lt;p&gt;Para finalizar, se quiser usar os helpers na view do mailer, inclua na classe do mailer:&lt;/p&gt;


&lt;pre&gt;
helper :application
&lt;/pre&gt;

	&lt;p&gt;Essa dica veio &lt;a href="http://www.ruby-forum.com/topic/89508"&gt;daqui&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Muito legal ;-)&lt;/p&gt;</description>
      <pubDate>Wed, 01 Sep 2010 14:26:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:2453dd96-54a1-4f0a-af03-8e44e518897f</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/09/01/actionmailer-do-rails-3</link>
      <category>trabalho</category>
      <category>nerd</category>
      <category>rails</category>
      <category>shoppings</category>
    </item>
    <item>
      <title>Rails 3 chegou</title>
      <description>&lt;p&gt;Momentos de grande excitação na comunidade Ruby On Rails, a versão 3.0 foi lançada ontem.&lt;/p&gt;


	&lt;p&gt;Já faz alguns dias que estou trabalhando com ele, a experiência está sendo muito boa.&lt;/p&gt;


	&lt;p&gt;No momento, continuo escrevendo testes de integração, já cobri cerca de 1/3 dos módulos da aplicação dos shoppings.&lt;/p&gt;


	&lt;p&gt;Vou continuar no edge, até mesmo porque não sei quando vou terminar de portar isso :-)&lt;/p&gt;</description>
      <pubDate>Mon, 30 Aug 2010 14:49:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:7db9d3e1-846b-403c-a3cd-b3e23029945d</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/08/30/rails-3-chegou</link>
      <category>nerd</category>
      <category>rails</category>
      <category>shoppings</category>
    </item>
    <item>
      <title>O &amp;quot;problema&amp;quot; do parâmetro que contém pontos</title>
      <description>&lt;p&gt;Aventura continua, já tenho doze requisições passando no teste de integração do portal. Antes tinha &lt;span class="caps"&gt;ZERO&lt;/span&gt; testes, então, acho que estamos evoluindo rapidamente.&lt;/p&gt;


	&lt;p&gt;Mas, só passei para avisar aqueles que estão migrando do Rails 1.1.6, para &lt;span class="caps"&gt;QUALQUER&lt;/span&gt; versão superior, sobre o &amp;#8220;problema do parâmetro que contém pontos&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;Exemplo:&lt;/p&gt;


	&lt;p&gt;Aplicação deve processar uma requisição cujo caminho possui pontos, tipo:&lt;/p&gt;


&lt;code&gt;/descadastrar/andre@boaideia.inf.br&lt;/code&gt;

	&lt;p&gt;A rota no Rails 1.1.6 seria:&lt;/p&gt;


&lt;code&gt;map.connect "descadastrar/:email", :controller =&amp;gt; "controlador", :action =&amp;gt; :acao&lt;/code&gt;

	&lt;p&gt;Para funcionar no Rails3, tem que fazer:&lt;/p&gt;


&lt;code&gt;match "descadastrar/:email" =&amp;gt; "controlador#acao", :constraints =&amp;gt; { :email =&amp;gt; /.*/ }&lt;/code&gt;

	&lt;p&gt;Daí vai funcionar beleza, o &amp;#8220;problema&amp;#8221; é que apartir da versão 2.0 o Rails utiliza os pontos para escolher o formato da resposta da requisição.&lt;/p&gt;


	&lt;p&gt;Ai ai, já fazia algumas horas que eu estava procurando entender o motivo pelo qual essa versão 3 me retornava &amp;#8220;No route matches&amp;#8221;. Coisa triste a ignorância.&lt;/p&gt;


	&lt;p&gt;PS: &lt;span class="caps"&gt;NESTE&lt;/span&gt; caso, como o parâmetro é um endereço de correio eletrônico, vocês podem até utilizar um regex mais apropriado do que este do exemplo.&lt;/p&gt;


	&lt;p&gt;Fui!&lt;/p&gt;</description>
      <pubDate>Fri, 23 Jul 2010 22:40:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:38779cd2-d5ea-4ab8-8a16-94942c24b4df</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/07/23/o-problema-do-par%C3%A2metro-que-cont%C3%A9m-pontos</link>
      <category>trabalho</category>
      <category>rails</category>
      <category>shoppings</category>
    </item>
    <item>
      <title>Almejando alcançar o Rails 3</title>
      <description>&lt;p&gt;Meu segundo projeto em Rails, o &lt;a href="http://www.pelotascenter.com.br"&gt;PelotasCenter&lt;/a&gt;, está para completar 4 anos em produção. Implementado em Ruby on Rails 1.1.6, está funcionando bem. Não posso me queixar.&lt;/p&gt;


	&lt;p&gt;Mas, o ecosistema Rails evolui muito rápido, nesses 4 anos muitas ferramentas surgiram ou evoluíram. Atualmente a comunidade vive a expectativa do lançamento da versão 3 do Rails.&lt;/p&gt;


	&lt;p&gt;Agora que os requisitos dos clientes estão satisfeitos e não tenho mais tanta demanda para implementação de novas funcionalidades, vou me concentrar no trabalho de portar a aplicação dos shoppings para o novo Rails.&lt;/p&gt;


	&lt;p&gt;Depois de instalar o Beta4, criei uma nova aplicação e comecei a reimplementação da camada de aplicação (não vou mexer no banco de dados).&lt;/p&gt;


	&lt;p&gt;Gostei do comando &amp;#8220;rails&amp;#8221;, que agora serve para criar uma nova aplicação, carregar o console, executar generators, levantar o servidor web para desenvolvimento e todas aquelas outras funcionalidades que ficavam no diretório scripts do projeto.&lt;/p&gt;


	&lt;p&gt;Gostei também do Bundler, vai ajudar bastante aqueles SysOps que não querem aprender Rails e só precisam instalar o projeto em produção.&lt;/p&gt;


	&lt;p&gt;Achei muito sexy a nova nomenclatura das rotas. Cadastrei a rota raíz do shopping, levantei o WebBrick e acessei a aplicação para ver que dependências precisam ser satisfeitas.&lt;/p&gt;


	&lt;p&gt;Primeira dependência, relacionada aos plugins&amp;#8230; Dependo de vários, isso pode vir a ser uma dor de cabeça, pois alguns deles estão ultrapassados e não foram portados para Rails3.&lt;/p&gt;


	&lt;p&gt;Mas, &amp;#8220;dor de cabeça&amp;#8221;? Calma lá, não tenho pressa de fazer isso funcionar, é para ser um aprendizado, que ao ser finalizado vai para produção hehehe&lt;/p&gt;


	&lt;p&gt;Para I18n no Rails 1.1.6 uso &lt;a href="http://globalize-rails.org/"&gt;Globalize&lt;/a&gt;. Rails3 inclui I18n e vi que o Globalize2 (que parece rodar no Rails3) ainda não suporta todas funcionalidades da versão 1. Bom, não vamos complicar agora, então defini alguns objetos que &amp;#8220;simulam&amp;#8221; o Globalize1, só para ir adiante. Futuramente eu vejo como migrar pro I18n nativo do rails.&lt;/p&gt;


	&lt;p&gt;Depois, foi a vez do &lt;a href="http://www.kanthak.net/opensource/file_column/"&gt;FileColumn&lt;/a&gt;. Sei que é um plugin velhinho, mas supre muito bem minha necessidade. &lt;a href="http://github.com/rust/file_column"&gt;Instalei a versão preparada para Rails 2.2.2&lt;/a&gt; e pelo menos até agora, os helpers estão funcionando. Vamos adiante&amp;#8230;&lt;/p&gt;


	&lt;p&gt;Com isso, já estava conseguindo renderizar a capa do portal, com apenas um problema. hehe&lt;/p&gt;


	&lt;p&gt;No &lt;a href="http://yehudakatz.com/2010/02/01/safebuffers-and-rails-3-0/"&gt;&lt;span class="caps"&gt;ERB&lt;/span&gt; do Rails3&lt;/a&gt; as Strings são &amp;#8220;escapadas&amp;#8221; por padrão, depois de instruir meus helpers para usarem html_safe, a coisa começou a ficar com cara de pronto. Ainda falta portar as actions que carregam conteúdo por &lt;a href="http://pt.wikipedia.org/wiki/XMLHttpRequest"&gt;&lt;span class="caps"&gt;XHR&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Ah! Alguns recursos não fazem mais parte do Rails e viraram plugins, como: acts_as_list e acts_as_tree. Também instalei o prototype_legacy_helpers.&lt;/p&gt;


	&lt;p&gt;Agora de tarde, tem mais&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Wed, 21 Jul 2010 10:45:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:196436dd-4beb-4a6a-9e3d-3bbefe843c60</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/07/21/almejando-alcan%C3%A7ar-o-rails-3</link>
      <category>trabalho</category>
      <category>shoppings</category>
    </item>
    <item>
      <title>MySQL INSERT DELAYED</title>
      <description>&lt;p&gt;Uso MySQL na aplicação dos shoppings com storage InnoDB. Funciona muito bem.&lt;/p&gt;


	&lt;p&gt;Mas ultimamente notei um gargalo de performance no banco quando tenho alguns INSERTs concorrentes na tabela de acessos (tipo uns 9). &lt;span class="caps"&gt;SHOW PROCESSLIST&lt;/span&gt; no console do mysql não mostrava outra coisa que não fosse &lt;span class="caps"&gt;COMMIT&lt;/span&gt; na informação das threads. E as requisições acabam ultrapassando a minha meta de consumir, no máximo, 1 segundo.&lt;/p&gt;


	&lt;p&gt;Pesquisei um pouco a respeito de como otimizar isso e descobri o &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/insert-delayed.html"&gt;&lt;span class="caps"&gt;INSERT DELAYED&lt;/span&gt;&lt;/a&gt;, vamos tentar&amp;#8230;&lt;/p&gt;


	&lt;p&gt;Primeiro mexi no banco, &lt;span class="caps"&gt;ALTER TABLE&lt;/span&gt; nome_da_tabela &lt;span class="caps"&gt;ENGINE&lt;/span&gt;=MYISAM; para converter a tabela de InnoDB para &lt;span class="caps"&gt;MYISAM&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;Depois alterei a aplicação, copiando o método ActiveRecord::Base#create para meu model e  renomeando-o para create_without_callbacks (eu uso before_create para setar alguns atributos e queria manter os callbacks funcionando)&lt;/p&gt;


	&lt;p&gt;E para ver se funcionou, no console do MySQL rode &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/show-status.html"&gt;&lt;span class="caps"&gt;SHOW STATUS LIKE&lt;/span&gt; &amp;#8216;&lt;span&gt;delay&lt;/span&gt;&amp;#8217;;&lt;/a&gt; e &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/server-status-variables.html"&gt; leia aqui o significado de cada variável&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Estou ansioso para comparar os logs de produção :-)&lt;/p&gt;</description>
      <pubDate>Tue, 08 Jun 2010 07:30:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:dca8aa2d-7074-479e-a6ef-61ba29bfccbb</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/06/08/mysql-insert-delayed</link>
      <category>trabalho</category>
      <category>nerd</category>
      <category>pessoa jurídica</category>
      <category>rails</category>
      <category>shoppings</category>
    </item>
    <item>
      <title>Robozinho anônimo do Google Analytics</title>
      <description>&lt;p&gt;Um cliente me pediu para integrar o site dele com o Google Analytics.&lt;/p&gt;


	&lt;p&gt;Até aí, tranquilo, é barbada.&lt;/p&gt;


	&lt;p&gt;Só que, meus portais implementam identificação única (single sign-on). O cara se identifica em um dos sites e ao acessar qualquer outro do portal o sistema mantém ele identificado.&lt;/p&gt;


	&lt;p&gt;Implementei isso autenticando o usuário num site &amp;#8220;central&amp;#8221; e ao acessar os outros sites o sistema faz alguns redirecionamentos para verificar se aquele cara já está logado ou não.&lt;/p&gt;


	&lt;p&gt;Robôs não deviam se identificar, logo, podemos ignorar os redirecionamentos.&lt;/p&gt;


	&lt;p&gt;Aí que veio o problema, o robozinho que verifica se o site tem o código que ativa o Google Analytics não declara User Agent algum nas requisições.&lt;/p&gt;


	&lt;p&gt;Não sei porquê&amp;#8230; Facilitaria a vida de nós (desenvolvedores) na busca do problema que impede a identificação do site pelo GA.&lt;/p&gt;


	&lt;p&gt;Resolvi meu problema, interpretando os logs de acesso do apache para descobrir quais eram as requisições desse cara, então coloquei o IP dele na lista do meu sistema que identifica os robôs, mas&amp;#8230;. quando será que o google vai trocar o IP deste servidor?&lt;/p&gt;


	&lt;p&gt;Se tivesse o User Agent, ficaria menos &lt;span class="caps"&gt;POG&lt;/span&gt;&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Tue, 20 Apr 2010 21:24:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:6f3334a6-b7bb-47ea-911b-80761e627b75</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/04/20/robozinho-an%C3%B4nimo-do-google-analytics</link>
      <category>trabalho</category>
      <category>nerd</category>
      <category>shoppings</category>
    </item>
  </channel>
</rss>

