<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 <title>Dejan Simic</title>
 <link href="http://rors.org/articles.xml" rel="self"/>
 <link href="http://rors.org/"/>
 <updated>2010-07-11T14:00:20+02:00</updated>
 <id>http://rors.org/</id>
 <author>
   <name>Dejan Simic</name>
   <email>desimic@gmail.com</email>
 </author>

 
 <entry>
   <title>Yesterday's Weather</title>
   <link href="http://rors.org/2010/07/03/yesterdays-weather.html"/>
   <updated>2010-07-03T00:00:00+02:00</updated>
   <id>http://rors.org/2010/07/03/yesterdays-weather</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://sivers.org/book/Pomodoro'&gt;Pomodoro Technique Illustrated Book&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;A national weather service spent a gigantic amount of money on a new forecast system. All the emerging technology was included, and it had an accuracy rate of almost 70 percent.&lt;/p&gt;

&lt;p&gt;Then a clever person challenged the super machine with a much simpler algorithm. It was called Yesterday’s Weather, and it said, &amp;#8220;Tomorrow will be like today.&amp;#8221; Guess what? It had the same accuracy as the super machine.&lt;/p&gt;
&lt;/blockquote&gt;</content>
 </entry>
 
 <entry>
   <title>Distinct values in Rails</title>
   <link href="http://rors.org/2010/05/23/distinct-values-in-rails.html"/>
   <updated>2010-05-23T00:00:00+02:00</updated>
   <id>http://rors.org/2010/05/23/distinct-values-in-rails</id>
   <content type="html">&lt;p&gt;First of all don&amp;#8217;t do this http://snipplr.com/view/21497/distinct-in-rails. I&amp;#8217;m not even linking it since somehow that&amp;#8217;s already ranked #5 for &amp;#8220;rails distinct&amp;#8221; on Google.&lt;/p&gt;

&lt;p&gt;One way is to use :select option in ActiveRecord finder.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;all&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:select&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;distinct(ip)&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='c1'&gt;#&amp;lt;User ip: &amp;quot;80.74.172.18&amp;quot;&amp;gt;, #&amp;lt;User ip: &amp;quot;80.74.172.13&amp;quot;&amp;gt;, ... ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;As you can see this will give you ActiveRecords with only that attribute initialized. Often you need to do something with those distinct values (and not just display them) so it&amp;#8217;s more suitable to have &lt;em&gt;values&lt;/em&gt; (instead of ActiveRecords) in an array. Use &lt;a href='http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#M001932'&gt;select values&lt;/a&gt; for that:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;connection&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;select_values&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;select distinct(ip) from users&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;80.74.172.18&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;80.74.172.13&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;.&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='o'&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>10 Rails console tricks</title>
   <link href="http://rors.org/2009/12/20/10-rails-console-tricks.html"/>
   <updated>2009-12-20T00:00:00+01:00</updated>
   <id>http://rors.org/2009/12/20/10-rails-console-tricks</id>
   <content type="html">&lt;h2 id='invoking_helper_methods'&gt;Invoking helper methods&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;helper&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;number_to_currency&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;123.45&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='method_definition_finder_irb'&gt;Method definition finder (irb)&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;helper&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;method&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:truncate&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='c1'&gt;#&amp;lt;Method: ActionView::Base(ActionView::Helpers::TextHelper)#truncate&amp;gt;&lt;/span&gt;

&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;method&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:camelize&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='c1'&gt;#&amp;lt;Method: String(ActiveSupport::CoreExtensions::String::Inflections)#camelize&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='method_finder_irb'&gt;Method finder (irb)&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='bash'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;gem install what_methods
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='nb'&gt;require&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;what_methods&amp;#39;&lt;/span&gt;
&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;foo &amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;what?&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;
&lt;span class='s2'&gt;&amp;quot;foo &amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;chop!&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;
&lt;span class='s2'&gt;&amp;quot;foo &amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;chop&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;
&lt;span class='s2'&gt;&amp;quot;foo &amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;strip!&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;
&lt;span class='s2'&gt;&amp;quot;foo &amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;strip&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;
&lt;span class='s2'&gt;&amp;quot;foo &amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;rstrip!&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;
&lt;span class='s2'&gt;&amp;quot;foo &amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;rstrip&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;chop!&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;chop&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;strip!&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;strip&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;rstrip!&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;rstrip&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='method_lookup_irb'&gt;Method lookup (irb)&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;methods&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;grep&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='sr'&gt;/case/&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;sort&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;camelcase&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;casecmp&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;downcase&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;downcase!&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;swapcase&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;swapcase!&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;titlecase&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;upcase&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;upcase!&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='avoid_screenfuls_of_objects_irb'&gt;Avoid screenfuls of objects (irb)&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;people&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;Person&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;all&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='kp'&gt;nil&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='kp'&gt;nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='rollback_database_modifications_on_exit'&gt;Rollback database modifications on exit&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='bash'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;./script/console --sandbox
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='last_expression_irb'&gt;Last expression (irb)&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;Person&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;first&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='c1'&gt;#&amp;lt;Person id: 1, first_name: &amp;quot;Dejan&amp;quot; ... &amp;gt;&lt;/span&gt;
&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;_&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;first_name&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Dejan&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='reload_code_changes'&gt;Reload code changes&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;reload!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='better_object_format_irb'&gt;Better object format (irb)&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;y&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;first&lt;/span&gt;
&lt;span class='o'&gt;---&lt;/span&gt; &lt;span class='o'&gt;!&lt;/span&gt;&lt;span class='n'&gt;ruby&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='n'&gt;object&lt;/span&gt;&lt;span class='ss'&gt;:User&lt;/span&gt; 
&lt;span class='n'&gt;attributes&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; 
  &lt;span class='n'&gt;hashed_password&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;123456789&lt;/span&gt;&lt;span class='n'&gt;cde83xa9b86e36e4627360&lt;/span&gt;
  &lt;span class='n'&gt;last_seen_at&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;2009&lt;/span&gt;&lt;span class='o'&gt;-&lt;/span&gt;&lt;span class='mi'&gt;12&lt;/span&gt;&lt;span class='o'&gt;-&lt;/span&gt;&lt;span class='mi'&gt;09&lt;/span&gt; &lt;span class='mi'&gt;13&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt;&lt;span class='mi'&gt;16&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt;&lt;span class='mi'&gt;44&lt;/span&gt;
  &lt;span class='n'&gt;username&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='n'&gt;dejan&lt;/span&gt;
  &lt;span class='nb'&gt;id&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;1&amp;quot;&lt;/span&gt;
  &lt;span class='n'&gt;created_at&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='mi'&gt;2007&lt;/span&gt;&lt;span class='o'&gt;-&lt;/span&gt;&lt;span class='mo'&gt;01&lt;/span&gt;&lt;span class='o'&gt;-&lt;/span&gt;&lt;span class='mi'&gt;14&lt;/span&gt; &lt;span class='mi'&gt;17&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt;&lt;span class='mi'&gt;30&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt;&lt;span class='mo'&gt;00&lt;/span&gt;
&lt;span class='n'&gt;attributes_cache&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt; &lt;span class='p'&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='scriptconsole_logging'&gt;script/console logging&lt;/h2&gt;

&lt;p&gt;You need &lt;a href='http://toolmantim.com/articles/system_wide_script_console_logging'&gt;this&lt;/a&gt;.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;cached&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:first&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;==&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;Got&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='ss'&gt;:first&lt;/span&gt; &lt;span class='n'&gt;from&lt;/span&gt; &lt;span class='n'&gt;cache&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='mi'&gt;10173&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
  &lt;span class='no'&gt;User&lt;/span&gt; &lt;span class='no'&gt;Load&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;300&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='n'&gt;ms&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;   &lt;span class='no'&gt;SELECT&lt;/span&gt; &lt;span class='o'&gt;*&lt;/span&gt; &lt;span class='no'&gt;FROM&lt;/span&gt; &lt;span class='sb'&gt;`users`&lt;/span&gt; &lt;span class='no'&gt;LIMIT&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;
&lt;span class='o'&gt;==&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;Set&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='ss'&gt;:first&lt;/span&gt; &lt;span class='n'&gt;to&lt;/span&gt; &lt;span class='n'&gt;cache&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='mo'&gt;01512&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='c1'&gt;#&amp;lt;User id: 1, username: &amp;quot;dejan&amp;quot;, ... &amp;gt;&lt;/span&gt;

&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;cached&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:first&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;==&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;Got&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='ss'&gt;:first&lt;/span&gt; &lt;span class='n'&gt;from&lt;/span&gt; &lt;span class='n'&gt;cache&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='mo'&gt;00061&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='c1'&gt;#&amp;lt;User id: 1, username: &amp;quot;dejan&amp;quot;, ... &amp;gt;&lt;/span&gt;

&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;expire_cache&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:first&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;==&amp;gt;&lt;/span&gt; &lt;span class='no'&gt;Deleted&lt;/span&gt; &lt;span class='no'&gt;User&lt;/span&gt;&lt;span class='ss'&gt;:first&lt;/span&gt; &lt;span class='n'&gt;from&lt;/span&gt; &lt;span class='n'&gt;cache&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='mo'&gt;0005&lt;/span&gt;&lt;span class='mi'&gt;9&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='kp'&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='links'&gt;LINKS&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://stackoverflow.com/questions/123494/whats-your-favourite-irb-trick'&gt;http://stackoverflow.com/questions/123494/whats-your-favourite-irb-trick&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas'&gt;http://slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://toolmantim.com/articles/system_wide_script_console_logging'&gt;http://toolmantim.com/articles/system_wide_script_console_logging&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://drnicwilliams.com/2006/10/12/my-irbrc-for-consoleirb'&gt;http://drnicwilliams.com/2006/10/12/my-irbrc-for-consoleirb&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://railscasts.com/episodes/48-console-tricks'&gt;http://railscasts.com/episodes/48-console-tricks&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://pablotron.org/software/wirble'&gt;http://pablotron.org/software/wirble&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Accountability</title>
   <link href="http://rors.org/2009/02/15/accountability.html"/>
   <updated>2009-02-15T00:00:00+01:00</updated>
   <id>http://rors.org/2009/02/15/accountability</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;a href='http://blog.jayfields.com/2009/01/cost-of-net-negative-producing.html'&gt;Jay Fields&lt;/a&gt;: &amp;#8220;I heard once that in Great Britain’s MOD if you design software for a plane you go up in the test plane when the software is beta-tested. If all programmers were held with that level of accountability, how many do you think would still be in our field? How many would you want to collaborate with before you went up in the plane together?&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;</content>
 </entry>
 
 <entry>
   <title>simple_captcha while developing</title>
   <link href="http://rors.org/2008/10/29/simple_captcha-while-developing.html"/>
   <updated>2008-10-29T00:00:00+01:00</updated>
   <id>http://rors.org/2008/10/29/simple_captcha-while-developing</id>
   <content type="html">&lt;p&gt;&lt;em&gt;Type less&lt;/em&gt; is my motto these days. Not just the code, but everything.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re developing an app with the excellent &lt;a href='http://expressica.com/simple_captcha/'&gt;simple_captcha plugin&lt;/a&gt; do your fingers a favor and monkey patch it in development.rb:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='c1'&gt;# type less. autosolve captcha while developing&lt;/span&gt;
&lt;span class='no'&gt;ActionView&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='no'&gt;Base&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;module_eval&lt;/span&gt; &lt;span class='k'&gt;do&lt;/span&gt;
  &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;simple_captcha_field&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;options&lt;/span&gt;&lt;span class='o'&gt;=&lt;/span&gt;&lt;span class='p'&gt;{})&lt;/span&gt;
    &lt;span class='n'&gt;options&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:object&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt; &lt;span class='p'&gt;?&lt;/span&gt;
      &lt;span class='n'&gt;text_field&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;options&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:object&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:captcha&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:value&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;simple_captcha_value&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;simple_captcha_key&lt;/span&gt;&lt;span class='p'&gt;))&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt;
        &lt;span class='n'&gt;hidden_field&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;options&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:object&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:captcha_key&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='ss'&gt;:value&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;options&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:field_value&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;})&lt;/span&gt; &lt;span class='p'&gt;:&lt;/span&gt; 
      &lt;span class='n'&gt;text_field_tag&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:captcha&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;simple_captcha_value&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;simple_captcha_key&lt;/span&gt;&lt;span class='p'&gt;))&lt;/span&gt;
  &lt;span class='k'&gt;end&lt;/span&gt;
&lt;span class='k'&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>Don't escape in Strings</title>
   <link href="http://rors.org/2008/10/26/dont-escape-in-strings.html"/>
   <updated>2008-10-26T00:00:00+02:00</updated>
   <id>http://rors.org/2008/10/26/dont-escape-in-strings</id>
   <content type="html">&lt;p&gt;So don&amp;#8217;t do:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='s2'&gt;&amp;quot;&lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='nb'&gt;name&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt; said: &lt;/span&gt;&lt;span class='se'&gt;\&amp;quot;&lt;/span&gt;&lt;span class='s2'&gt;Clap your hands!&lt;/span&gt;&lt;span class='se'&gt;\&amp;quot;&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;It&amp;#8217;s ugly and you don&amp;#8217;t need it. Ruby has excellent support for arbitrary delimiters for string literals.&lt;/p&gt;

&lt;p&gt;So above can be rewritten as:&lt;/p&gt;

&lt;p&gt;&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='sx'&gt;%-&lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='vi'&gt;@name&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='sx'&gt; says: &amp;quot;Clap your hands!&amp;quot;-&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8230; or if String contains dash:&lt;/p&gt;

&lt;p&gt;&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='sx'&gt;%/&lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='vi'&gt;@name&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='sx'&gt; says: &amp;quot;Play tic-tac-toe!&amp;quot;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8230; or if String contains dash and slash:&lt;/p&gt;

&lt;p&gt;&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='sx'&gt;%Q|&lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='vi'&gt;@name&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='sx'&gt; says: &amp;quot;Try ftp://ruby-lang.org/pub/ruby/1.9/&amp;quot;|&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8230; and so on. No need to escape.&lt;/p&gt;

&lt;p&gt;Excerpt from the great book &lt;a href='http://www.amazon.com/Ruby-Programming-Language-David-Flanagan/dp/0596516177'&gt;The Ruby programming Language&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;The sequence %q begins a string literal that follows single-quoted string rules, and the sequence %Q (or just %) introduces a literal that follows double-qouted string rules. The first character following q or Q is the delimiter, and the string literal continues until a matching delimiter is found. If the opening delimiter is (, [, {, or &amp;lt;, then the matching delimiter is ), ], }, or &amp;gt;. Otherwise, the closing delimiter is the same as the opening delimiter.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;</content>
 </entry>
 
 <entry>
   <title>Alternative join and split in Ruby</title>
   <link href="http://rors.org/2008/07/09/alternative-join-and-split-in-ruby.html"/>
   <updated>2008-07-09T00:00:00+02:00</updated>
   <id>http://rors.org/2008/07/09/alternative-join-and-split-in-ruby</id>
   <content type="html">&lt;h2 id='join'&gt;Join&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='sx'&gt;%w(tic tac toe)&lt;/span&gt; &lt;span class='o'&gt;*&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;-&amp;quot;&lt;/span&gt; 
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;tic-tac-toe&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='split'&gt;Split&lt;/h2&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;tic-tac-toe&amp;quot;&lt;/span&gt; &lt;span class='o'&gt;/&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;-&amp;quot;&lt;/span&gt; 
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;tic&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;tac&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;toe&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Unfortunately, for &lt;em&gt;split&lt;/em&gt; you&amp;#8217;ll need this of course:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='k'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;String&lt;/span&gt;
  &lt;span class='k'&gt;alias&lt;/span&gt; &lt;span class='o'&gt;/&lt;/span&gt; &lt;span class='ss'&gt;:split&lt;/span&gt;
&lt;span class='k'&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;;)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Self or default if empty, DRY way</title>
   <link href="http://rors.org/2008/03/19/self-or-default-if-empty-dry-way.html"/>
   <updated>2008-03-19T00:00:00+01:00</updated>
   <id>http://rors.org/2008/03/19/self-or-default-if-empty-dry-way</id>
   <content type="html">&lt;p&gt;I really appreciate following idiom in Ruby:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='n'&gt;person&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;phone&lt;/span&gt; &lt;span class='o'&gt;||&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;N/A&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;It&amp;#8217;s DRY. No need for conditional structures, and repeating person.phone in condition and as return value.&lt;/p&gt;

&lt;p&gt;But lets say you don&amp;#8217;t control your data source, and there is an empty string instead of nil when data is not available (sounds familiar?). How would you deal with that and keep things simple and DRY?&lt;/p&gt;

&lt;p&gt;Well, basicly all you need is a String method that will return nil if string is empty, or self if it&amp;#8217;s not empty. String object doesn&amp;#8217;t have that kind of method, at least not that specialized. Regexp to rescue. Lets try this:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;[/.&lt;/span&gt;&lt;span class='n'&gt;+&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='n'&gt;m&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='kp'&gt;nil&lt;/span&gt;

&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;ruby&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;[/.&lt;/span&gt;&lt;span class='n'&gt;+&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='n'&gt;m&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
&lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;ruby&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Nice. So solution for the problem above is:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='n'&gt;person&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;phone&lt;/span&gt;&lt;span class='o'&gt;[/.&lt;/span&gt;&lt;span class='n'&gt;+&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='n'&gt;m&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt; &lt;span class='o'&gt;||&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;N/A&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Throw &lt;a href='http://rors.org/2008/3/18/andand'&gt;andand&lt;/a&gt; in game to support both nil and empty value with no cost in complexity:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='n'&gt;person&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;phone&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;andand&lt;/span&gt;&lt;span class='o'&gt;[/.&lt;/span&gt;&lt;span class='n'&gt;+&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='n'&gt;m&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt; &lt;span class='o'&gt;||&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;N/A&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>andand</title>
   <link href="http://rors.org/2008/03/18/andand.html"/>
   <updated>2008-03-18T00:00:00+01:00</updated>
   <id>http://rors.org/2008/03/18/andand</id>
   <content type="html">&lt;p&gt;I really, really like &lt;a href='http://andand.rubyforge.org'&gt;andand&lt;/a&gt;. Try it and stop repeating yourself.&lt;/p&gt;

&lt;p&gt;I mean, why would you want to write this:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='n'&gt;entry&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;at&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class='n'&gt;entry&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;at&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;inner_text&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;when you can write this:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='n'&gt;entry&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;at&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;andand&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;inner_text&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>Eleventh</title>
   <link href="http://rors.org/2008/02/11/eleventh.html"/>
   <updated>2008-02-11T00:00:00+01:00</updated>
   <id>http://rors.org/2008/02/11/eleventh</id>
   <content type="html">&lt;p&gt;Did you know that Ruby was Matz&amp;#8217; eleventh take on creating a programming language? &lt;a href='http://podcast.rubyonrails.org/system/audio/2006/rails-040-Yukihiro_Matz_Matsumoto.mp3'&gt;Listen&lt;/a&gt;. So don&amp;#8217;t despare next time you fail, you are right on track.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I sat down and counted the other day and Ruby was eleventh language I&amp;#8217;ve tried to write. Out of those 4 only had names, 3 of them didn&amp;#8217;t work at all&amp;#8230; the rest of them was just experiments. Ruby is the only one that really worked, so I guess that makes Ruby the first one, but it was one out of eleven attempts.&lt;/p&gt;

&lt;p&gt;~ Matz&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;The road to wisdom? &amp;#8211; Well, it&amp;#8217;s plain and simple to express: Err and err and err again but less and less and less.&lt;/p&gt;

&lt;p&gt;~ Piet Hein&lt;/p&gt;
&lt;/blockquote&gt;</content>
 </entry>
 
 <entry>
   <title>Nested Ternary Operator</title>
   <link href="http://rors.org/2008/01/20/nested-ternary-operator.html"/>
   <updated>2008-01-20T00:00:00+01:00</updated>
   <id>http://rors.org/2008/01/20/nested-ternary-operator</id>
   <content type="html">&lt;p&gt;I was going through some of my old Java code and found this interesting piece of code. It’s basically alternative way of creating switch structure.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;  &lt;span class='kd'&gt;public&lt;/span&gt; &lt;span class='n'&gt;Object&lt;/span&gt; &lt;span class='nf'&gt;getValueAt&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;row&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;col&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='n'&gt;Person&lt;/span&gt; &lt;span class='n'&gt;person&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;data&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;get&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;row&lt;/span&gt;&lt;span class='o'&gt;);&lt;/span&gt;
    &lt;span class='k'&gt;return&lt;/span&gt; 
      &lt;span class='n'&gt;col&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;?&lt;/span&gt; &lt;span class='n'&gt;person&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;getFirstName&lt;/span&gt;&lt;span class='o'&gt;()&lt;/span&gt; 
      &lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='n'&gt;col&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;?&lt;/span&gt; &lt;span class='n'&gt;person&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;getLastName&lt;/span&gt;&lt;span class='o'&gt;()&lt;/span&gt; 
      &lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='n'&gt;col&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='mi'&gt;2&lt;/span&gt;&lt;span class='o'&gt;?&lt;/span&gt; &lt;span class='n'&gt;person&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;getAge&lt;/span&gt;&lt;span class='o'&gt;()&lt;/span&gt;            
      &lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='n'&gt;col&lt;/span&gt;&lt;span class='o'&gt;==&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='o'&gt;?&lt;/span&gt; &lt;span class='n'&gt;person&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;getAddress&lt;/span&gt;&lt;span class='o'&gt;()&lt;/span&gt;
      &lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='kc'&gt;null&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt; 
  &lt;span class='o'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unlike switch, there is no compile time error for duplicated cases&lt;/li&gt;

&lt;li&gt;this is not a standard way of dealing with different values of a variable so you could leave wondering the person that will read your code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;more control over branching logic since expressions are used (switch must use constants as case values)&lt;/li&gt;

&lt;li&gt;this is not a standard way of dealing with different values of a variable so you could be seen as hacker in the eyes of the person that will read your code ;)&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 
</feed>