<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.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 trabalho</title>
    <link>http://blog.boaideia.inf.br/articles/category/trabalho</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>a personalidade jurídica de andré ribeiro camargo</description>
    <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>Diminuindo o tempo de instalação das Gems</title>
      <description>&lt;p&gt;Dica legal: &lt;a href="http://blog.stevensoroka.ca/2010/04/06/faster-ruby-gem-installs"&gt;Faster Ruby Gems installs&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Normalmente eu passava&amp;#8212;no-rdoc&amp;#8212;no-ri pela linha de comando mesmo.&lt;/p&gt;</description>
      <pubDate>Wed, 28 Jul 2010 08:31:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:2901ddc3-e63a-4304-8f93-97629301937a</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/07/28/diminuindo-o-tempo-de-instala%C3%A7%C3%A3o-das-gems</link>
      <category>trabalho</category>
      <category>nerd</category>
      <category>rails</category>
    </item>
    <item>
      <title>Typical website evolution...</title>
      <description>&lt;p&gt;&lt;a href="http://graphjam.com/2010/07/26/funny-graphs-typical-website-evolution/"&gt;http://graphjam.com/2010/07/26/funny-graphs-typical-website-evolution/&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;BOA&lt;/span&gt;! :-D&lt;/p&gt;</description>
      <pubDate>Tue, 27 Jul 2010 14:16:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:c0d00f5c-dc75-434f-9ec8-dbdc50bf5896</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/07/27/typical-website-evolution</link>
      <category>trabalho</category>
      <category>nerd</category>
    </item>
    <item>
      <title>Acessando o Model da sessão para quem usa ActiveRecordStore</title>
      <description>&lt;p&gt;Esta é útil para quem armazena sessões no banco de dados.&lt;/p&gt;


	&lt;p&gt;Antigamente, para acessar o model bastava &amp;#8220;session.model&amp;#8221;, agora tem que ser através de &amp;#8220;request.env[&amp;#8216;rack.session.record&amp;#8217;]&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;Fica a dica&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Sun, 25 Jul 2010 17:52:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:c18c7806-e4ff-4e0e-898e-934924d72aba</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/07/25/acessando-o-model-da-sess%C3%A3o-para-quem-usa-activerecordstore</link>
      <category>trabalho</category>
      <category>rails</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>Bluff parte II</title>
      <description>&lt;p&gt;Hoje fui converter um gráfico de pizza e notei que o padrão da Gruff é usar percentuais na legenda.&lt;/p&gt;


	&lt;p&gt;Só que a Bluff tava mostrando o valor da série.&lt;/p&gt;


	&lt;p&gt;Então, &lt;a href="http://github.com/acamargo/bluff/commit/b06ca1caa8134ccb5cfba7349d2d9e2c4a8e1823"&gt;ajustei o código&lt;/a&gt; para ficar igual ao gráfico original.&lt;/p&gt;</description>
      <pubDate>Mon, 31 May 2010 20:26:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:796009f6-0205-4747-874c-7dbc3d64e546</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/05/31/bluff-parte-ii</link>
      <category>trabalho</category>
      <category>nerd</category>
    </item>
    <item>
      <title>Gráficos bacanozos com Bluff</title>
      <description>&lt;p&gt;Sou usuário de &lt;a href="http://nubyonrails.com/pages/gruff"&gt;Gruff&lt;/a&gt; há muito tempo, utilizo principalmente gráfico de barras nas estatísticas dos shoppings.&lt;/p&gt;


	&lt;p&gt;Ontem, descobri o &lt;a href="http://bluff.jcoglan.com/"&gt;Bluff&lt;/a&gt;. Que pretende fazer o mesmo que o Gruff, só que usando javascript ao invés de ruby.&lt;/p&gt;


	&lt;p&gt;Gostei muito das tooltips do Bluff, então comecei a ver como seria para migrar o que tenho em Gruff.&lt;/p&gt;


	&lt;p&gt;O detalhe, é que eu queria modificar o conteúdo da tooltip, para mostrar mais dados.&lt;/p&gt;


	&lt;p&gt;A versão oficial do Bluff não suporta este recurso&amp;#8230;&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;MAS&lt;/span&gt;, se vocês precisarem desta funcionalidade, &lt;a href="http://github.com/acamargo/bluff"&gt;peguem o código do meu fork no github&lt;/a&gt; que ele faz isso.&lt;/p&gt;


	&lt;p&gt;Dica de como fazer? &lt;a href="http://github.com/acamargo/bluff/blob/master/test/line_test.html"&gt;Dá uma olhada neste exemplo&lt;/a&gt;, especificamente na função tooltips_renderer do gráfico custom_tooltips.&lt;/p&gt;


	&lt;p&gt;Agora é com a nossa criatividade, happy coding everybody!&lt;/p&gt;


	&lt;p&gt;Dica #2: gem install jake e rodem &amp;#8220;jake&amp;#8221; no diretório do projeto para gerar o arquivo bluff-min.js que deve ser linkado pela sua página.&lt;/p&gt;


	&lt;p&gt;Dica #3: instanciem o gráfico no window.onload&amp;#8230; senão terão problemas no IEka.&lt;/p&gt;</description>
      <pubDate>Wed, 19 May 2010 20:27:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:5f9c2f4f-7bb6-47bc-97b6-c96a1406da6f</guid>
      <author>André Ribeiro Camargo</author>
      <link>http://blog.boaideia.inf.br/articles/2010/05/19/gr%C3%A1ficos-bacanozos-com-bluff</link>
      <category>trabalho</category>
      <category>nerd</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>
