<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ggomeze.com</title>
    <description>posts</description>
    <link>http://ggomeze.com/posts.rss</link>
    <item>
      <title>Enable logs in console</title>
      <description>&lt;p&gt;If you are one of those developers that like to test things on console before you add them to your code, i&amp;#8217;m sure you&amp;#8217;ll be missing some logs in your ruby console.&lt;/p&gt;
&lt;p&gt;In order to see these logs you just need to run these simple commands:&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.clear_active_connections!&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ger&lt;/p&gt;</description>
      <pubDate>Mon, 08 Mar 2010 09:38:00 +0000</pubDate>
      <link>http://ggomeze.com/2010/03/08/enable-logs-in-console</link>
      <guid>http://ggomeze.com/2010/03/08/enable-logs-in-console</guid>
    </item>
    <item>
      <title>ActiveRecord.save without callbacks</title>
      <description>&lt;p&gt;You already know there is a way to avoid running validations when you save an ActiveRecord&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;project.save(&lt;span class=&quot;pc&quot;&gt;false&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;But, what if you want to skip validations?. There are some ways to achieve this. There are some metaprogramming options, such as adding and removing methods, or calling private methods with send (or send!)&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;project = &lt;span class=&quot;co&quot;&gt;Project&lt;/span&gt;.new(&lt;span class=&quot;sy&quot;&gt;:name&lt;/span&gt; =&amp;gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;ggomeze.com&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)
project.send(&lt;span class=&quot;sy&quot;&gt;:create_without_callbacks&lt;/span&gt;)

project = &lt;span class=&quot;co&quot;&gt;Project&lt;/span&gt;.find(&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;)
project.send(&lt;span class=&quot;sy&quot;&gt;:update_without_callbacks&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If these methods are private, it just because there should be a different way to do the same, no? :-). So here is my favorite:&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# accessors&lt;/span&gt;
  attr_accessor &lt;span class=&quot;sy&quot;&gt;:skip_callbacks&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# callbacks&lt;/span&gt;
  with_options &lt;span class=&quot;sy&quot;&gt;:unless&lt;/span&gt; =&amp;gt; &lt;span class=&quot;sy&quot;&gt;:skip_callbacks&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt; |project|
    project.after_update &lt;span class=&quot;sy&quot;&gt;:do_something&lt;/span&gt;
    project.after_save &lt;span class=&quot;sy&quot;&gt;:do_other_thing&lt;/span&gt;
  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ah, just a note, you might be tempted to use this, instead of attr_accessor:&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;attr_accessor_with_default &lt;span class=&quot;sy&quot;&gt;:skip_callbacks&lt;/span&gt;, &lt;span class=&quot;pc&quot;&gt;false&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;but seems like attr_accessor_with_default creates a class attribute which might be problematic under some circumstances&lt;/p&gt;
&lt;p&gt;Ger&lt;/p&gt;</description>
      <pubDate>Sat, 06 Mar 2010 09:59:00 +0000</pubDate>
      <link>http://ggomeze.com/2010/03/06/activerecord-save-without-callbacks</link>
      <guid>http://ggomeze.com/2010/03/06/activerecord-save-without-callbacks</guid>
    </item>
    <item>
      <title>ActiveRecord.find_by with join from irb</title>
      <description>&lt;p&gt;If you like to run your code on irb before it goes to the project like me, you might find this problem when running &amp;#8220;find_by&amp;#8221; ActiveRecord&amp;#8217;s queries joining multiple tables.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s take this as an initial example of what i mean:&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;projects = &lt;span class=&quot;co&quot;&gt;Projects&lt;/span&gt;.find(&lt;span class=&quot;sy&quot;&gt;:all&lt;/span&gt;,
&lt;span class=&quot;sy&quot;&gt;:select&lt;/span&gt; =&amp;gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;projects.id, projects.title, projects.version, managers.name&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
&lt;span class=&quot;sy&quot;&gt;:joins&lt;/span&gt; =&amp;gt; &lt;span class=&quot;sy&quot;&gt;:manager&lt;/span&gt;,
&lt;span class=&quot;sy&quot;&gt;:conditions&lt;/span&gt; =&amp;gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;projects.technology='Rails'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
&lt;span class=&quot;sy&quot;&gt;:order&lt;/span&gt; =&amp;gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;managers.name asc&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;What would you expect from this?. I would expect a resultset with the values under :selected clause, that is an array of projects, with title, version and manager name.&lt;/p&gt;
&lt;p&gt;However, if you run this from irb, you will get something like this:&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;[#&amp;lt;Project id: 18004351, title: &amp;quot;ggomeze.com&amp;quot;, version: &amp;quot;1.0&amp;quot;&amp;gt;]&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Where is the manager&amp;#8217;s name?. But if you run next command, in the worst case, you will get:&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;&amp;gt;&amp;gt; projects[0].name
=&amp;gt; nil&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Let me explain you what might be happening here: you probably has an instance method in project class with same name!!. Really?, ok, let&amp;#8217;s check it::&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;&amp;gt;&amp;gt;Project.instance_methods.grep(/name/)
[&amp;quot;name&amp;quot;,&amp;quot;name_xxx&amp;quot;]&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There you go!. So applying rule of thumb &amp;#8220;right and top&amp;#8221;, rails is running that method instead of getting the attribute from the resultset. That&amp;#8217;s obviously a flag that we are not doing things right. There are several techniques to refactor that code. Delegates might be one.&lt;/p&gt;
&lt;p&gt;Just to demonstrate manager&amp;#8217;s name is there, let&amp;#8217;s make a small change in our initial code:&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;projects = &lt;span class=&quot;co&quot;&gt;Projects&lt;/span&gt;.find(&lt;span class=&quot;sy&quot;&gt;:all&lt;/span&gt;,
&lt;span class=&quot;sy&quot;&gt;:select&lt;/span&gt; =&amp;gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;projects.id, projects.title, projects.version, managers.name as foo&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
&lt;span class=&quot;sy&quot;&gt;:joins&lt;/span&gt; =&amp;gt; &lt;span class=&quot;sy&quot;&gt;:manager&lt;/span&gt;,
&lt;span class=&quot;sy&quot;&gt;:conditions&lt;/span&gt; =&amp;gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;projects.technology='Rails'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
&lt;span class=&quot;sy&quot;&gt;:order&lt;/span&gt; =&amp;gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;managers.name asc&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And now, back to irb:&lt;/p&gt;
&lt;div class=&quot;CodeRay&quot;&gt;
  &lt;div class=&quot;code&quot;&gt;&lt;pre&gt;[#&amp;lt;Project id: 18004351, title: &amp;quot;ggomeze.com&amp;quot;, version: &amp;quot;1.0&amp;quot;&amp;gt;]
&amp;gt;&amp;gt; projects[0].foo
=&amp;gt; &amp;quot;Gerardo Gomez&amp;quot;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Don&amp;#8217;t be lazy and refactor your models!&lt;/p&gt;
&lt;p&gt;Ger&lt;/p&gt;</description>
      <pubDate>Fri, 05 Mar 2010 09:00:00 +0000</pubDate>
      <link>http://ggomeze.com/2010/03/05/activerecord-find_by-with-join-from-irb</link>
      <guid>http://ggomeze.com/2010/03/05/activerecord-find_by-with-join-from-irb</guid>
    </item>
    <item>
      <title>Los toros, el catal&#225;n... y Loquillo</title>
      <description>&lt;p&gt;Son varias las noticias que est&#225;n llegando recientemente como el refer&#233;ndum por la independencia de Catalu&#241;a, la batalla ling&#252;&#237;stica y por &#250;ltimo la prohibici&#243;n de los toros en Catalu&#241;a.&lt;/p&gt;
&lt;p&gt;El refer&#233;ndum es el claro indicio de los prop&#243;sitos impulsados, no nos olvidemos, por los partidos nacionalistas.&lt;/p&gt;
&lt;p&gt;As&#237;, en Fraga el problema no es s&#243;lo la lengua, sino la inclusi&#243;n de Fraga en los Pa&#237;ses Catalanes, la p&#233;rdida de la categor&#237;a de espa&#241;oles y la catalanizaci&#243;n de los colegios, como ya ha sucedido en Catalu&#241;a. Es s&#243;lo un pasito m&#225;s en su reconocido anti espa&#241;olismo.&lt;/p&gt;
&lt;p&gt;Ahora ha llegado la propuesta de prohibir las corridas de toros al Parlamento Catalan. Nada cabe objetar a quienes consideran que los espect&#225;culos taurinos implican maltrato animal y, en consecuencia, solicitan su erradicaci&#243;n. Pero hasta los promotores de la iniciativa legal para que los toros sean proscritos, as&#237; como los diputados que la han apoyado por convencimiento, convendr&#225;n que defensores de los derechos de los animales los hay en toda Espa&#241;a y en ning&#250;n otro lugar se ha llegado tan lejos. La explicaci&#243;n es clara: la leg&#237;tima aspiraci&#243;n de los antitaurinos ha contado en Catalu&#241;a con un aliado de conveniencia que ha visto la ocasi&#243;n para seguir marcando distancias con el resto de Espa&#241;a. Seamos rigurosos! sin el decidido apoyo de los nacionalistas, el envite nunca hubiera prosperado. Eso quiere decir que no estamos tanto ante un debate social, que lo hay, y no hay que temer abordar, como ante un nuevo pulso pol&#237;tico que contamina de ra&#237;z la pol&#233;mica. Si de verdad el inter&#233;s de los nacionalistas fuera la defensa de los animales, bien podr&#237;an plantear una modificaci&#243;n de las corridas para preservar el festejo evitando que muriera el toro, como sucede por ejemplo en Portugal. O a&#241;adir&#237;an en su empe&#241;o otras actividades como la caza, la pesca, el embuchamiento de ocas&amp;#8230; Su objetivo es otro. No es casualidad que en las manifestaciones antitaurinas en Catalu&#241;a predominen las banderas independentistas, como no lo son tampoco las agresiones que el s&#237;mbolo del toro, en tanto que emblema de lo espa&#241;ol, ha sufrido reiteradamente en esa comunidad.&lt;/p&gt;
&lt;p&gt;En su discurso, los nacionalistas arremeten contra los toros con dos argumentos b&#225;sicos: dicen que es un signo de barbarie e incultura y que se trata de un espect&#225;culo ajeno a la civilizada Catalu&#241;a. Sobre lo primero, baste decir que sociedades m&#225;s cultas y con mayor tradici&#243;n democr&#225;tica como la francesa no se plantean la supresi&#243;n de los toros. Sin ir m&#225;s lejos, esta misma semana Luis Francisco Espl&#225; hablaba a los estudiantes en la Universidad de la Sorbona. Es imposible resumir aqu&#237; todo lo que de manifestaci&#243;n cultural tiene el mundo de los toros, todo lo que ha contribuido a otras artes y la mir&#237;ada de intelectuales que a &#233;l se ha adherido hist&#243;ricamente. Sobre lo segundo, por mucho que se quiera retorcer la realidad, nadie puede negar que s&#243;lo la ciudad de Barcelona ha llegado a tener tres plazas abiertas para satisfacci&#243;n de los miles de aficionados de Catalu&#241;a.&lt;/p&gt;
&lt;p&gt;Pero el debate va incluso m&#225;s all&#225;, porque estamos tambi&#233;n, y sobre todo, ante una cuesti&#243;n de libertad. El problema en Catalu&#241;a es que, cuando hay un conflicto de derechos, para la clase pol&#237;tica pesa m&#225;s lo identitario. Surge entonces el esp&#237;ritu censor, el mismo que ha inspirado otras prohibiciones escandalosas, como la de que el castellano pueda ser lengua vehicular en la ense&#241;anza, que los ni&#241;os puedan hablarlo en el recreo o que los comerciantes lo usen en sus r&#243;tulos. Catalu&#241;a est&#225; a un paso de prohibir los toros arrastrada por un nacionalismo que mantiene firme su escalada de antiespa&#241;olismo, en buena medida por culpa de un &lt;span class=&quot;caps&quot;&gt;PSC&lt;/span&gt; acomplejado que ha atizado un fuego que no deja de arder. Ojal&#225; no llegue tarde la advertencia de su diputado David P&#233;rez en el Parlament, que dijo que se est&#225; imponiendo la tesis seg&#250;n la cual si te gustan los toros, te gusta Loquillo y no eres del Bar&#231;a, &#171;no eres catal&#225;n&#187;.&lt;/p&gt;</description>
      <pubDate>Sun, 20 Dec 2009 09:09:00 +0000</pubDate>
      <link>http://ggomeze.com/2009/12/20/los-toros-el-cataln-y-loquillo</link>
      <guid>http://ggomeze.com/2009/12/20/los-toros-el-cataln-y-loquillo</guid>
    </item>
    <item>
      <title>Hijo, apaga la lavadora!</title>
      <description>&lt;p&gt;Son las 4 de la tarde de un s&#225;bado cualquiera, en un hogar tipico espa&#241;ol, como es la republica independiente de mi casa. La mitad de los miembros de la familia yace en el sofa, intentando echar la siesta. De fondo, la pel&#237;cula de la 3, y los no tan silenciosos electrodom&#233;sticos funcionando, como la lavadora, lavavajillas,&amp;#8230;&lt;/p&gt;
&lt;p&gt;Decido ponerme al ordenador. Estoy trabajando en un proyectillo personal, y quiero darle otro empuj&#243;n. Cuando me dispon&#237;a a conectarme con mi repositorio git remoto, zas!, saltan los fusibles y manda todo al traste. Algo normal, y bastante frecuente, para una instalaci&#243;n arcaica, en la que para poder encender el horno, hay que apagar un fuego, o para encender la lavadora, hay que apagar el lavavajillas. No ser&#225; tampoco la primera vez que apago la televisi&#243;n para poder fre&#237;r un huevo frito, manda narices! Pero vamos sobreviviendo y ahorrando en gastos, que ahora, esta de moda.&lt;/p&gt;
&lt;p&gt;Cuando me dirijo al cuadro el&#233;ctrico para levantar los fusibles, mi madre desde el salon me grita: &amp;#8220;Hijo, apaga la lavadora!&amp;#8221;. Yo extra&#241;ando, reviso los electrodom&#233;sticos en la cocina, y compruebo que el unico funcionando era la lavadora. &amp;quot;Mama, solo esta la lavadora&amp;#8230; &amp;quot;. No hab&#237;a llegado a acabar la frase cuando me encuentro a mi madre en el salon, HP en las rodillas, gafas puestas para no perderse detalle, y dos dedos indices apuntando al teclado extendido, y dispuesta a buscar las letras del que para ella es el mejor juego de &amp;#8220;sopa de letras&amp;#8221; &#250;ltimamente. &amp;#8220;Si, apaga la lavadora, que estoy navegando. Hijo, donde esta la @?&amp;#8221;&lt;/p&gt;
&lt;p&gt;A donde hemos llegado&amp;#8230;&lt;/p&gt;
&lt;p&gt;Ger&lt;/p&gt;</description>
      <pubDate>Tue, 01 Dec 2009 22:30:00 +0000</pubDate>
      <link>http://ggomeze.com/2009/12/01/hijo-apaga-la-lavadora</link>
      <guid>http://ggomeze.com/2009/12/01/hijo-apaga-la-lavadora</guid>
    </item>
  </channel>
</rss>
