<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>Obie Fernandez</title>
    
    <link rel="alternate" type="text/html" href="http://blog.obiefernandez.com/content/" />
    <id>tag:typepad.com,2003:weblog-1546920</id>
    <updated>2012-05-22T15:47:06-04:00</updated>
    <subtitle>the one and only</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/obie" /><feedburner:info uri="obie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><entry>
        <title>Redis on Rails - RedDotRubyConf 2012</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/M43KJHiZcns/redis-on-rails-reddotrubyconf-2012.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/05/redis-on-rails-reddotrubyconf-2012.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca9118833016305bbaf4c970d</id>
        <published>2012-05-22T15:47:06-04:00</published>
        <updated>2012-05-22T15:47:06-04:00</updated>
        <summary>This past weekend I had the pleasure of delivering a wide-ranging talk in Singapore about using Redis as a complement to your main relational database. It was essentially a much enhanced redo of my RailsConf 2012 talk of the same...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Redis" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Development" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="NoSQL" />
        <category scheme="http://sixapart.com/ns/types#tag" term="Redis" />
        <category scheme="http://sixapart.com/ns/types#tag" term="Ruby on Rails" />
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;This past weekend I had the pleasure of delivering a wide-ranging talk in Singapore about using Redis as a complement to your main relational database. It was essentially a much enhanced redo of my RailsConf 2012 talk of the same name. The challenge of covering this topic effectively is that Redis is quite popular so at a single-track conference such as RedDotRubyConf, I was sure the audience would include many people that are already using Redis in production. For that reason, I cut down on the introductory material and dove into aspects of Redis, related libraries and programming techniques that I hoped would be of use to as much of the audience as possible. Apparently that strategy worked, because I was happy to get a lot of positive feedback from almost everyone at the conference.&lt;/p&gt;&#xD;
&lt;p&gt;The slides below are not particularly useful without the associated talk material, especially since I spent most of the time inside of the sample app doing live coding and code walkthroughs with explanations. However, the slides do provide you with pointers to a number of different libraries that are of definite use to you if you're using Redis to complement your relational database. I have every intention of expounding on this topic here on this blog since the technique has been very useful to me in development of DueProps. With that said, here are my slides. Enjoy.&lt;/p&gt;&#xD;
&lt;div style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/obiefernandez/redis-on-rails-reddotrubyconf-2012" title="Redis on Rails (RedDotRubyConf 2012)"&gt;Redis on Rails (RedDotRubyConf 2012)&lt;/a&gt;&lt;/strong&gt; &#xD;
&lt;object height="355" id="__sse13033501" width="425"&gt;&#xD;
&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rdrc2012-120522142952-phpapp02&amp;amp;stripped_title=redis-on-rails-reddotrubyconf-2012&amp;amp;userName=obiefernandez"&gt;&lt;/param&gt;&#xD;
&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&#xD;
&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&#xD;
&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed allowfullscreen="true" allowscriptaccess="always" height="355" name="__sse13033501" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rdrc2012-120522142952-phpapp02&amp;amp;stripped_title=redis-on-rails-reddotrubyconf-2012&amp;amp;userName=obiefernandez" type="application/x-shockwave-flash" width="425" wmode="transparent"&gt;&lt;/embed&gt;&#xD;
&lt;/object&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div id="__ss_13033501" style="width: 425px;"&gt;&#xD;
&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/obiefernandez"&gt;Obie Fernandez&lt;/a&gt;.&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;amp;c2=7400849&amp;amp;c3=1&amp;amp;c4=&amp;amp;c5=&amp;amp;c6="&gt;&lt;/script&gt;&#xD;
&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;amp;c2=7400849&amp;amp;c3=1&amp;amp;c4=&amp;amp;c5=&amp;amp;c6="&gt;&lt;/script&gt;&#xD;
&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;amp;c2=7400849&amp;amp;c3=1&amp;amp;c4=&amp;amp;c5=&amp;amp;c6="&gt;&lt;/script&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=M43KJHiZcns:dlAvqjLsNjc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=M43KJHiZcns:dlAvqjLsNjc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=M43KJHiZcns:dlAvqjLsNjc:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=M43KJHiZcns:dlAvqjLsNjc:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=M43KJHiZcns:dlAvqjLsNjc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=M43KJHiZcns:dlAvqjLsNjc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=M43KJHiZcns:dlAvqjLsNjc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=M43KJHiZcns:dlAvqjLsNjc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=M43KJHiZcns:dlAvqjLsNjc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/05/redis-on-rails-reddotrubyconf-2012.html</feedburner:origLink></entry>
    <entry>
        <title>The Rails Dilemma</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/CF1_GZhbBZA/the-rails-dilemma.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/05/the-rails-dilemma.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330168eb7ecb8a970c</id>
        <published>2012-05-14T20:31:31-04:00</published>
        <updated>2012-05-14T20:31:31-04:00</updated>
        <summary>The growth of the Rails community worldwide appears to be relentless, but there's a dark underside to that growth that does not get enough attention: In terms of sheer numbers, there just doesn't appear to be enough Rails developers to properly serve the needs of the market.</summary>
        <author>
            <name>Rusty Zarse</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Ruby on Rails" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Development" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;em&gt;This is a guest post by &lt;a href="http://www.linkedin.com/in/zarse" target="_self"&gt;Rusty Zarse&lt;/a&gt; CTO of Search Discovery, spurred by a series of email conversations that we had regarding the difficulty of finding experienced Rails talent. Rusty leads the Atlanta iOS Developers meetup and is one of the better known technologists in our city.&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;h2&gt;&lt;strong&gt;Where'd Every RoR Go?&lt;/strong&gt;&lt;/h2&gt;&#xD;
&lt;p&gt;&lt;em&gt;“Rails is hot,”&lt;/em&gt; ain’t no headline today. Five years ago, Ruby on Rails was an underdog, the somebody to watch, the next big thing. It's not news that the Rails community continues evolving and growing while its members do a good job protecting the integrity and quality of the platform. Rails 4 is visible on the horizon and looks better than ever. The growth of the Rails community worldwide appears to be relentless, but there's a dark underside to that growth that does not get enough attention: In terms of sheer numbers, there just doesn't appear to be enough Rails developers to properly serve the needs of the market.&lt;/p&gt;&#xD;
&lt;p&gt;Technical organizations (particularly at the CTO and Director level that I inhabit) are now faced with a stark decision of choosing the Rails platform on its virtues or reluctantly giving the nod to another technology that carries less staffing risk.&lt;/p&gt;&#xD;
&lt;p&gt;On the face of it, people might think that this situation is good for Rails developers because it means that they continue commanding astronomical billable rates, higher quality coding practices and standards for their professional ecosystem and the aura of elite superstars. But Rails remains a community-driven platform and so it's up to the community itself to identify the needs of the market and identify what can be done for our overall growth to continue to flourish.&lt;/p&gt;&#xD;
&lt;h2&gt;Attracting Rails Talent&lt;/h2&gt;&#xD;
&lt;p&gt;Our &lt;a href="http://www.searchdiscovery.com/satellite/" target="_self"&gt;core product at SearchDiscovery&lt;/a&gt; does things that truly push the envelope. There's a lot of work remaining to be done, but we feel that it already does what nothing else in the world can do. We owe a lot to the &lt;a href="http://hashrocket.com/work/satellite" target="_self"&gt;exceptional genius of our Hashrocket team&lt;/a&gt; and the wizardry of the lead developer they provided to us. During my career I've led many projects and never seen a product reach this level of complexity without falling apart due to compromises and shortcuts made along the way. I attribute our success in no small part to the principles and practices that Rails embodies. It is the motivation that I had for choosing Ruby on Rails as our web development platform to begin with and continues to provide a level of quality and productivity that I believe is unmatchable.&lt;/p&gt;&#xD;
&lt;p&gt;Our dilemma is that in over 3 months of arduous searching, we have not been able to find even a single Rubyist in Atlanta interested in joining our team. I'm not talking about having to turn down interested applicants; I'm talking about not having any interested applicants to begin with.&lt;/p&gt;&#xD;
&lt;p&gt;Now we have new products in the pipeline and our CEO is pushing to choose an alternative platform. Some of us know PHP and I personally know .NET. My experience with PHP is that its a great hacky tool to tweak wordpress and everything else just becomes spaghetti soup. Microsoft .NET is the platform of choice for developers who like to write the same oil tanker full of plumbing code over and over again just to show how great they are at doing things "better" than everyone else. Here in Atlanta, a common alternative to Rails is .NET, given the large Microsoft contingent we have in town. In my opinion, .NET doesn't deliver quickly enough and PHP inevitably becomes a maintenance nightmare.&lt;/p&gt;&#xD;
&lt;p&gt;Why on earth would we consider switching off Rails? The painful truth is that we need a team of professionals more than we need the best technology. We don't even need to hire an entire army of engineers immediately. We're specifically looking to fill at least &lt;em&gt;one&lt;/em&gt; senior position so that this individual can cultivate Ruby on Rails talent within our walls. Our long-term goal is to become that company everyone in Atlanta wants to work at. We admire companies who posses an organic energy and self-managed excellence within their development team and we're willing to invest the capital needed to get there. I feel  that we have the professional atmosphere and culture that would be attractive to Rails professionals, but where are they?&lt;/p&gt;&#xD;
&lt;h2&gt;Rails in Atlanta&lt;/h2&gt;&#xD;
&lt;p&gt;Obviously, timing is everything. I've tapped the local user group community and will continue to do so, but so far have not seen much interest in the position. When I do connect with a local Atlanta Rails expert, often the professional courteousness is not reciprocated. I don't want to complain about specific people, but c'mon it just isn't necessary to be rude when someone asks if you are available. Clearly I'm trying to recruit someone, but I'm a CTO not a recruiter. Is politeness too much to ask for? Most technical people in Atlanta are nice and as helpful but there are a handful of dudes with serious reputations that apparently forget that we're all in this together. Their dismissive attitudes are toxic to non programmers who just want to run a business.&lt;/p&gt;&#xD;
&lt;p&gt;Worse, these bad attitudes get back to my bosses. I can argue all day about the gazillion benefits that using Rails brings to the table, but I can’t argue against the facts of our recruiting problem!  &lt;/p&gt;&#xD;
&lt;h2&gt;A Plea to the Community&lt;/h2&gt;&#xD;
&lt;p&gt;I wrote this post at Obie's request when I asked him for advice. I'd failed to consider that this is more than just my problem, more than just a hiring problem: It's a Rails community concern. The Rails platform is not bleeding edge anymore. It's proven, mature, reliable, amazing and a proper choice for just about any web development problem domain you might encounter. I don't know what the solution is, but I do know that we need to ensure that it continues to be the platform of choice for innovation.  We’re committed enough in the concept to &lt;a href="http://www.searchdiscovery.com/careers/ruby-on-rails-developer/" target="_self"&gt;put our money where our mouth is&lt;/a&gt;.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;What do you think? Is this actually a community problem? Let's get a greater dialogue going.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=CF1_GZhbBZA:8MSo47QFnKo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=CF1_GZhbBZA:8MSo47QFnKo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=CF1_GZhbBZA:8MSo47QFnKo:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=CF1_GZhbBZA:8MSo47QFnKo:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=CF1_GZhbBZA:8MSo47QFnKo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=CF1_GZhbBZA:8MSo47QFnKo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=CF1_GZhbBZA:8MSo47QFnKo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=CF1_GZhbBZA:8MSo47QFnKo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=CF1_GZhbBZA:8MSo47QFnKo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/05/the-rails-dilemma.html</feedburner:origLink></entry>
    <entry>
        <title>Andrei Apologized</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/if9tYD6PfEg/andrei-apologized.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/03/andrei-apologized.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330163030de56c970d</id>
        <published>2012-03-20T01:38:06-04:00</published>
        <updated>2012-03-20T01:38:06-04:00</updated>
        <summary>Since I got a sincere-sounding apology from Andrei, I have un-published my last blog post and hope this will be the end of the matter. Thanks to everyone that had my back about the way I handled it, and also...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Since I got a sincere-sounding apology from Andrei, I have un-published my last blog post and hope this will be the end of the matter. Thanks to everyone that had my back about the way I handled it, and also those that gave me advice and support about it.&lt;/p&gt;&#xD;
&lt;p&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=if9tYD6PfEg:OrRjKHBsW-k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=if9tYD6PfEg:OrRjKHBsW-k:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=if9tYD6PfEg:OrRjKHBsW-k:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=if9tYD6PfEg:OrRjKHBsW-k:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=if9tYD6PfEg:OrRjKHBsW-k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=if9tYD6PfEg:OrRjKHBsW-k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=if9tYD6PfEg:OrRjKHBsW-k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=if9tYD6PfEg:OrRjKHBsW-k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=if9tYD6PfEg:OrRjKHBsW-k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/03/andrei-apologized.html</feedburner:origLink></entry>
    <entry>
        <title>Seeking iOS Expert</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/n0JHq4HLGXw/seeking-ios-expert.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/03/seeking-ios-expert.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330168e8c9aebe970c</id>
        <published>2012-03-14T11:29:28-04:00</published>
        <updated>2012-03-14T11:29:28-04:00</updated>
        <summary>I'm so dumb sometimes. I was just in the kitchen making myself a sandwich and it hit me why I have such a mental block about hiring anyone to do remote iOS development for me: I don't know anything about...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Development" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I'm so dumb sometimes. I was just in the kitchen making myself a sandwich and it hit me why I have such a mental block about hiring anyone to do remote iOS development for me: I don't know anything about it! But how to get past that? I don't have time to teach myself, it would take too long and my first few projects would be crap. Too risky.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.obiefernandez.com/content/2011/03/hey-web-startups-hire-consulting-firms-on-the-cheap.html" target="_blank"&gt;Perhaps I should follow my own advice&lt;/a&gt; on the subject? D'oh! What I really need is an expert to come pair with me on building the iOS version of DueProps &lt;em&gt;at my location&lt;/em&gt;.&lt;/p&gt;&#xD;
&lt;p&gt;The way I see it that buys me getting:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;past the initial learning curve of iOS&lt;/li&gt;&#xD;
&lt;li&gt;an early version of the actual software that I'm happy with&lt;/li&gt;&#xD;
&lt;li&gt;more than a prayer of being able to maintain the thing myself afterwards&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Now I just need to find my expert. Please &lt;strong&gt;&lt;a href="mailto:obie@dueprops.com" target="_self"&gt;email me&lt;/a&gt;&lt;/strong&gt; if you are an expert iOS developer and willing to take a short-term contract (approx 1 week) onsite with me in Atlanta at DueProps HQ. Travel expenses covered and hourly rate commensurate with your experience level.&lt;/p&gt;&#xD;
&lt;p&gt;Alternatively, I'm also willing to barter time (and still pay for your travel expenses to my location). Meaning, if you are an iOS developer that needs help getting a Rails webapp up and running, I can trade my time for yours in exchange for a full or partial reduction in your rate.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=n0JHq4HLGXw:oYKdcgttv04:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=n0JHq4HLGXw:oYKdcgttv04:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=n0JHq4HLGXw:oYKdcgttv04:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=n0JHq4HLGXw:oYKdcgttv04:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=n0JHq4HLGXw:oYKdcgttv04:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=n0JHq4HLGXw:oYKdcgttv04:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=n0JHq4HLGXw:oYKdcgttv04:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=n0JHq4HLGXw:oYKdcgttv04:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=n0JHq4HLGXw:oYKdcgttv04:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/03/seeking-ios-expert.html</feedburner:origLink></entry>
    <entry>
        <title>How Insignificant Is Internet Explorer These Days?</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/hENzgms2b9E/how-insignificant-is-internet-explorer-these-days.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/03/how-insignificant-is-internet-explorer-these-days.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330163028c65e2970d</id>
        <published>2012-03-07T09:28:00-05:00</published>
        <updated>2012-03-07T09:28:00-05:00</updated>
        <summary>Maybe Super Tuesday got me in a mood to play with numbers tonight. I was poking around analytics stats for DueProps and noticed that my users are not fans of Internet Explorer in any significant numbers and among them, most...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Web/Tech" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Maybe Super Tuesday got me in a mood to play with numbers tonight. I was poking around analytics stats for DueProps and noticed that my users are not fans of Internet Explorer in any significant numbers and among them, most use modern versions of IE (8,9) by a huge margin. These visit percentages are across many tens of thousands of visits since we opened our beta last year. &lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.obiefernandez.com/.a/6a00e54fdca91188330163028c13a0970d-pi" style="display: inline;"&gt;&lt;img alt="Iestats" border="0" class="asset  asset-image at-xid-6a00e54fdca91188330163028c13a0970d image-full" src="http://blog.obiefernandez.com/.a/6a00e54fdca91188330163028c13a0970d-800wi" title="Iestats"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Admittedly these numbers reflect an early adopter crowd, but still, they're much smaller than I would have guessed. Does this information mean we don't need to invest much effort in maintaining compatibility with IE? Does IE9 have enough penetration to be the only one to worry about?&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=hENzgms2b9E:jWOqSZU3AKA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hENzgms2b9E:jWOqSZU3AKA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hENzgms2b9E:jWOqSZU3AKA:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=hENzgms2b9E:jWOqSZU3AKA:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hENzgms2b9E:jWOqSZU3AKA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=hENzgms2b9E:jWOqSZU3AKA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hENzgms2b9E:jWOqSZU3AKA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=hENzgms2b9E:jWOqSZU3AKA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hENzgms2b9E:jWOqSZU3AKA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/03/how-insignificant-is-internet-explorer-these-days.html</feedburner:origLink></entry>
    <entry>
        <title>Forced to disable Firefox Inspect Element due to muscle memory</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/YqpW4ZPcKXA/forced-to-disable-firefox-inspect-element-due-to-muscle-memory.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/03/forced-to-disable-firefox-inspect-element-due-to-muscle-memory.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330168e8490115970c</id>
        <published>2012-03-02T11:35:48-05:00</published>
        <updated>2012-03-02T11:35:48-05:00</updated>
        <summary>It's amazing how much we take for granted certain little tasks that we do so often they become muscle memory. The latest powerful example of that fact for me has been the annoyance provoked by the addition of a native Inspect Element option to the Firefox 10 context menu, exactly where Firebug's Inspect Element used to reside.</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Development" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Web/Tech" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="css" />
        <category scheme="http://sixapart.com/ns/types#tag" term="Firebug" />
        <category scheme="http://sixapart.com/ns/types#tag" term="Firefox" />
        <category scheme="http://sixapart.com/ns/types#tag" term="front-end development" />
        <category scheme="http://sixapart.com/ns/types#tag" term="hacks" />
        <category scheme="http://sixapart.com/ns/types#tag" term="html" />
        <category scheme="http://sixapart.com/ns/types#tag" term="Inspect Element" />
        <category scheme="http://sixapart.com/ns/types#tag" term="motor learning" />
        <category scheme="http://sixapart.com/ns/types#tag" term="muscle memory" />
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;It's amazing how much we take for granted certain little tasks that we do so often they become &lt;a href="http://en.wikipedia.org/wiki/Muscle_memory" target="_blank"&gt;muscle memory&lt;/a&gt;. The latest powerful example of that fact for me has been the annoyance provoked by the addition of a native Inspect Element option to the Firefox 10 context menu, exactly where Firebug's Inspect Element used to reside.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.obiefernandez.com/.a/6a00e54fdca91188330168e848c3c4970c-pi" style="display: inline;"&gt;&lt;img alt="Screen shot 2012-03-02 at 11.02.51 AM.png" class="asset  asset-image at-xid-6a00e54fdca91188330168e848c3c4970c" src="http://blog.obiefernandez.com/.a/6a00e54fdca91188330168e848c3c4970c-500wi" title="Screen shot 2012-03-02 at 11.02.51 AM.png"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;If you had asked me last week how many times I hit inspect element in a given day, I might have guessed a dozen or so... Ha! Turns out I do it more like &lt;em&gt;hundreds&lt;/em&gt; of times a day! And you build serious muscle memory when you do something so often. Yesterday, despite repeatedly making mental notes of the fact that I needed to move my pointer 1 more menu item down the list to the "Inspect Element with Firebug" item, I would just forget. Over, and over, and over again. Sometimes 30 seconds apart. To the point of crying out in frustration.&lt;/p&gt;&#xD;
&lt;div class="kwout" style="text-align: center;"&gt;&lt;img alt="https://twitter.com/#!/obie/status/175433829446721536" height="135" src="http://kwout.com/cutout/b/ni/h4/x5a_bor_sha.jpg" style="border: none;" title="Twitter / @obie: Just accidentally clicked ..." usemap="#map_bnih4x5a" width="412"&gt;&lt;/img&gt; &#xD;
&lt;map id="map_bnih4x5a" name="map_bnih4x5a"&gt;&#xD;
&lt;area coords="59,12,89,25" href="https://twitter.com/#!/obie" shape="rect"&gt;&lt;/area&gt;&#xD;
&lt;area coords="59,26,89,38" href="https://twitter.com/#!/obie/status/175433829446721536/embed" shape="rect"&gt;&lt;/area&gt; &#xD;
&lt;/map&gt;&#xD;
&lt;p style="margin-top: 10px; text-align: center;"&gt;&lt;a href="https://twitter.com/#!/obie/status/175433829446721536"&gt;Twitter / @obie: Just accidentally clicked ...&lt;/a&gt; via &lt;a href="http://kwout.com/quote/bnih4x5a"&gt;kwout&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;Of course, you can turn off that menu item using Firefox's about:config screen, which I suspected was possible but had resisted researching based on, well, based on I don't know what, some perveted sense of principle that I should be able to learn something so simple! Still, major props to Jared Habeck:&lt;/p&gt;&#xD;
&lt;div class="kwout" style="text-align: center;"&gt;&lt;img alt="https://twitter.com/#!/smotchkkiss/status/175609120567721984" height="121" src="http://kwout.com/cutout/f/2u/2w/dc3_bor_sha.jpg" style="border: none;" title="Twitter / @smotchkkiss: @obie about:config, devtoo ..." usemap="#map_f2u2wdc3" width="423"&gt;&lt;/img&gt;&#xD;
&lt;map id="map_f2u2wdc3" name="map_f2u2wdc3"&gt;&#xD;
&lt;area coords="65,15,152,28" href="https://twitter.com/#!/smotchkkiss" shape="rect"&gt;&lt;/area&gt;&#xD;
&lt;area coords="65,29,133,42" href="https://twitter.com/#!/smotchkkiss/status/175609120567721984/embed" shape="rect"&gt;&lt;/area&gt;&#xD;
&lt;area coords="22,56,70,72" href="https://twitter.com/obie" shape="rect"&gt;&lt;/area&gt;&#xD;
&lt;/map&gt;&#xD;
&lt;p style="margin-top: 10px; text-align: center;"&gt;&lt;a href="https://twitter.com/#!/smotchkkiss/status/175609120567721984"&gt;Twitter / @smotchkkiss: @obie about:config, devtoo ...&lt;/a&gt; via &lt;a href="http://kwout.com/quote/f2u2wdc3"&gt;kwout&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;So the remarkable part of this experience was realizing just how ingrained that particular operation was that no matter how hard I tried, occasionally even sometimes when I was purposely thinking about "ok self, remember to click Inspect Element with Firefox" MY FINGER STILL DID THE WRONG THING!&lt;/p&gt;&#xD;
&lt;p&gt;Crazy. As a sidenote, I've tried the Safari and Chrome's inspector modules and they don't even come close to competing with Firebug. I don't use Firefox for anything else other than development, which has the convenient side effect of letting me CMD-Tab over to Chrome for everything else that you browse for during development, and then back to Firefox when I'm ready to keep working. It's a nice little workflow hack IMO. Anyone else do something similar?&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=YqpW4ZPcKXA:eyBfvI9hHi0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YqpW4ZPcKXA:eyBfvI9hHi0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YqpW4ZPcKXA:eyBfvI9hHi0:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=YqpW4ZPcKXA:eyBfvI9hHi0:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YqpW4ZPcKXA:eyBfvI9hHi0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=YqpW4ZPcKXA:eyBfvI9hHi0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YqpW4ZPcKXA:eyBfvI9hHi0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=YqpW4ZPcKXA:eyBfvI9hHi0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YqpW4ZPcKXA:eyBfvI9hHi0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/03/forced-to-disable-firefox-inspect-element-due-to-muscle-memory.html</feedburner:origLink></entry>
    <entry>
        <title>Metaprogramming Your ActiveRecord Objects at Runtime</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/W8_zlAMmiNg/metaprogramming-your-activerecord-objects-at-runtime.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/02/metaprogramming-your-activerecord-objects-at-runtime.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca9118833016302297650970d</id>
        <published>2012-02-28T14:57:36-05:00</published>
        <updated>2012-02-28T15:05:38-05:00</updated>
        <summary>I often store Ruby code in the fields of ActiveRecord object, giving me the ability to morph the system's behavior at runtime. Metaprogramming in the large, if you will. This is one of my favorite techniques in the Ruby on Rails sphere and one of the reasons I love dynamic languages.</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        
        <category scheme="http://sixapart.com/ns/types#tag" term="advance programming techniques" />
        <category scheme="http://sixapart.com/ns/types#tag" term="code" />
        <category scheme="http://sixapart.com/ns/types#tag" term="coding" />
        <category scheme="http://sixapart.com/ns/types#tag" term="DueProps" />
        <category scheme="http://sixapart.com/ns/types#tag" term="examples" />
        <category scheme="http://sixapart.com/ns/types#tag" term="metaprogramming" />
        <category scheme="http://sixapart.com/ns/types#tag" term="Rails" />
        <category scheme="http://sixapart.com/ns/types#tag" term="Ruby" />
        <category scheme="http://sixapart.com/ns/types#tag" term="Ruby on Rails" />
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I often store Ruby code in the fields of ActiveRecord object, giving me the ability to morph the system's behavior at runtime. &lt;em&gt;Metaprogramming in the large&lt;/em&gt;, if you will. This is one of my favorite techniques in the Ruby on Rails sphere and one of the reasons I love working with dynamic languages. I'm not exactly recommending this technique to anyone, since it's akin to juggling live chainsaws. You especially don't want to architect an entire production system this way, since there are negative implications for peformance and testability. However, the implementations can be simple and a little bit here and there have gone a long way for me over the years.&lt;/p&gt;&#xD;
&lt;p&gt;While there are many ways to leverage this technique, today I'm going to cover an advanced style that involves changing metaclass behavior of a particular object instance using a real example from &lt;a href="http://dueprops.com" target="_self"&gt;DueProps&lt;/a&gt;.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://dueprops.com" target="_blank"&gt;&lt;img alt="Screen shot 2012-02-28 at 1.37.51 PM" class="asset  asset-image at-xid-6a00e54fdca91188330167631df6c8970b" src="http://blog.obiefernandez.com/.a/6a00e54fdca91188330167631df6c8970b-500wi" style="display: block; margin-left: auto; margin-right: auto;" title="Screen shot 2012-02-28 at 1.37.51 PM"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;The central domain object in DueProps is the Prop (aka "Award"). Props are virtual tokens of appreciation that are exchanged amongst users. I'm trying to build a game, not greeting cards, so from the inception of the project I've wanted each Prop to exhibit unique behavior. However, Props are produced by my creative team and uploaded to the app as data: a collection of images with fields for description, points and multiplier values, etc. Programmers don't create individual classes of Props in source code, we have one class called &lt;span style="font-family: 'andale mono', times;"&gt;Award &lt;/span&gt;with many instances.&lt;/p&gt;&#xD;
&lt;p&gt;Six months into production, we already have over 100 unique Prop instances and plan to have thousands over time. Having a class for each one, or even necessarily for each &lt;em&gt;type&lt;/em&gt; of Prop won't scale development-wise. Therefore I devised a configuration system that allows us to program behavior related to Props at runtime, without needing to add new attributes to its database table everytime we come up with a cool new idea. Ruby and Rails already have the building blocks for doing exactly that.&lt;/p&gt;&#xD;
&lt;p&gt;Note that I'm not making much of an attempt to generalize the example code presented here. If you are able to wield this kind of technique then you'll be able to figure out how to apply it to your own problem domain. Here we go...&lt;/p&gt;&#xD;
&lt;p&gt;First I'll add a &lt;span style="font-family: 'andale mono', times;"&gt;modifier_expr&lt;/span&gt; text field to my &lt;span style="font-family: 'andale mono', times;"&gt;Award&lt;/span&gt; records.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;class AddNominationClassExprToAwards &amp;lt; ActiveRecord::Migration&lt;br&gt;&lt;/span&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  def change&lt;br&gt;    add_column :awards, :modifier_expr, :text&lt;br&gt;  end&lt;br&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Now I'll add an &lt;span style="font-family: 'andale mono', times;"&gt;after_initialize&lt;/span&gt; callback to my Nomination ActiveRecord class, which is what I want to be modified by Award at runtime.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;class Nomination &amp;lt; ActiveRecord::Base&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  belongs_to :award&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  after_initialize :modify,&lt;br&gt;    if: lambda { award &amp;amp;&amp;amp; award.modifier_expr? }&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;I only want to run this callback if I have an award instance, and only if that award instance has a non-nil &lt;span style="font-family: 'andale mono', times;"&gt;nom_modifier&lt;/span&gt; value, hence the &lt;span style="font-family: 'andale mono', times;"&gt;if&lt;/span&gt; expression.&lt;/p&gt;&#xD;
&lt;p&gt;Now the private &lt;span style="font-family: 'andale mono', times;"&gt;modify&lt;/span&gt; method, which uses &lt;span style="font-family: 'andale mono', times;"&gt;instance_eval&lt;/span&gt; to alter &lt;a href="http://yehudakatz.com/2009/11/15/metaprogramming-in-ruby-its-all-about-the-self/" target="_blank"&gt;this object's metaclass object&lt;/a&gt;:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  private&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt; &lt;/span&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  def modify&lt;br&gt;    instance_eval award.modifier_expr&lt;br&gt;  end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;Altering the object's metaclass&lt;/em&gt; means that I can add or override its class methods without affecting any other Award instance with my modifications. For example, under normal circumstances Awards don't allow you to nominate yourself (give yourself a Prop) and that rule is enforced with a validation method:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;class Nomination &amp;lt; ActiveRecord::Base&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  validate :normal_validations&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  def normal_validations&lt;br&gt;&lt;/span&gt;&lt;span style="font-family: 'andale mono', times;"&gt;    if users.include?(submitter)&lt;br&gt;      errors.add(:user_ids, "You can't nominate yourself")&lt;br&gt;    end&lt;br&gt;  end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Note that I've left out other standard validations for clarity, because the one that matters here is the one that I want to override in the example. I named the method &lt;span style="font-family: 'andale mono', times;"&gt;normal_validations&lt;/span&gt; to remind myself of its intention.&lt;/p&gt;&#xD;
&lt;p&gt;Let's make it so that &lt;a href="http://dueprops.com/awards/teamwork" target="_self"&gt;Teamwork&lt;/a&gt; props can be given to yourself and others, but not only to yourself. We'll add this code snippet as its &lt;span style="font-family: 'andale mono', times;"&gt;modifier_expr&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;def normal_validations&lt;br&gt;  if users.size == 1 &amp;amp;&amp;amp; users.include?(submitter)&lt;br&gt;    errors.add(:user_ids,&lt;br&gt;      "You can't give Teamwork Props to only yourself")&lt;br&gt;  end&lt;br&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Now when validations run for a Teamwork nomination, my replacement &lt;span style="font-family: 'andale mono', times;"&gt;normal_validations&lt;/span&gt; method will run instead of the original. Over time, as I build up a history of interesting validations, I may abstract them out into a module, giving myself an in-app API for the behavior of nominations instead of having to code things out explicitly.&lt;/p&gt;&#xD;
&lt;p&gt;Incidentally, I wrote this code very recently using TDD. Here is a &lt;a href="https://gist.github.com/1934672" target="_blank"&gt;gist of the resulting spec&lt;/a&gt;:&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
&lt;script src="https://gist.github.com/1934672.js?file=special_nomination_spec.rb"&gt;&lt;/script&gt;&#xD;
&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=W8_zlAMmiNg:LHwACH-KxxM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=W8_zlAMmiNg:LHwACH-KxxM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=W8_zlAMmiNg:LHwACH-KxxM:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=W8_zlAMmiNg:LHwACH-KxxM:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=W8_zlAMmiNg:LHwACH-KxxM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=W8_zlAMmiNg:LHwACH-KxxM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=W8_zlAMmiNg:LHwACH-KxxM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=W8_zlAMmiNg:LHwACH-KxxM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=W8_zlAMmiNg:LHwACH-KxxM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/02/metaprogramming-your-activerecord-objects-at-runtime.html</feedburner:origLink></entry>
    <entry>
        <title />
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/hC5OuWaMCl0/my-last-blog-post-had-the-primary-effect-i-wanted-which-was-to-get-a-bunch-of-iphone-developers-familiar-with-the-parameters.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/02/my-last-blog-post-had-the-primary-effect-i-wanted-which-was-to-get-a-bunch-of-iphone-developers-familiar-with-the-parameters.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330168e71b311c970c</id>
        <published>2012-02-10T11:12:10-05:00</published>
        <updated>2012-02-10T11:12:10-05:00</updated>
        <summary>My last blog post had the primary effect I wanted, which was to get a bunch of iPhone developers familiar with the parameters of my project and to contact me with their proposal for how they might work with me....</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;My last blog post had the primary effect I wanted, which was to get a bunch of iPhone developers familiar with the parameters of my project and to contact me with their proposal for how they might work with me.&lt;br&gt;&#xD;
&lt;br&gt;&#xD;
By the way, I did get a lot of incoming interest in the opportunity and the reason I haven't gotten back to most of you is because I've been at a small conference (speakerconf) all week. I'll be back to normal operations next week.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=hC5OuWaMCl0:mpOVQlV7Vog:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hC5OuWaMCl0:mpOVQlV7Vog:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hC5OuWaMCl0:mpOVQlV7Vog:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=hC5OuWaMCl0:mpOVQlV7Vog:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hC5OuWaMCl0:mpOVQlV7Vog:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=hC5OuWaMCl0:mpOVQlV7Vog:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hC5OuWaMCl0:mpOVQlV7Vog:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=hC5OuWaMCl0:mpOVQlV7Vog:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=hC5OuWaMCl0:mpOVQlV7Vog:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/02/my-last-blog-post-had-the-primary-effect-i-wanted-which-was-to-get-a-bunch-of-iphone-developers-familiar-with-the-parameters.html</feedburner:origLink></entry>
    <entry>
        <title>Can I Find an Agile, Design-Savvy iPhone Developer?</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/3M50jjOOAJs/can-i-find-an-agile-design-savvy-iphone-developer.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/02/can-i-find-an-agile-design-savvy-iphone-developer.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330167619db268970b</id>
        <published>2012-02-03T13:35:39-05:00</published>
        <updated>2012-03-14T11:34:42-04:00</updated>
        <summary>UPDATE: I realized that my approach to this problem was all wrong so I deleted this post. See my new post Seeking iOS Expert for more information.</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Development" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;p&gt;&lt;strong&gt;UPDATE: I realized that my approach to this problem was all wrong so I deleted this post. See my new post &lt;a href="http://blog.obiefernandez.com/content/2012/03/seeking-ios-expert.html" target="_self"&gt;Seeking iOS Expert&lt;/a&gt; for more information.&lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=3M50jjOOAJs:Dd7rsxT_9dI:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=3M50jjOOAJs:Dd7rsxT_9dI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=3M50jjOOAJs:Dd7rsxT_9dI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/02/can-i-find-an-agile-design-savvy-iphone-developer.html</feedburner:origLink></entry>
    <entry>
        <title>Rendering Collections of Heterogeneous Objects in Rails 3.2</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/HqmUy5WI5LM/rendering-collections-of-heterogeneous-objects-in-rails-32.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/01/rendering-collections-of-heterogeneous-objects-in-rails-32.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330168e661f9b8970c</id>
        <published>2012-01-30T19:10:46-05:00</published>
        <updated>2012-03-06T14:55:21-05:00</updated>
        <summary>This commit by Grant Hutchins &amp; Peter Jaros back in July 2011 gives ActiveModels the ability to define their own partial paths by implementing a to_partial_path method. (You can find a great explanation of this killer new feature on José...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;This &lt;a href="https://github.com/rails/rails/commit/bf812074fd55e7dcfa426d6c9bfd4d8d68922194" target="_blank"&gt;commit&lt;/a&gt; by Grant Hutchins &amp;amp; Peter Jaros back in July 2011 gives ActiveModels the ability to define their own partial paths by implementing a &lt;strong&gt;to_partial_path&lt;/strong&gt; method. (You can find a great explanation of this killer new feature on &lt;a href="http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/" target="_blank"&gt;José Valim's blog post about it&lt;/a&gt;. Just scroll down to #4 Custom Partial Paths.)&lt;/p&gt;&#xD;
&lt;p&gt;I'm blogging about it here, because it impacts a technique that I described in May 2011 as &lt;a href="http://blog.obiefernandez.com/content/2011/05/rending-collections-of-heterogeneous-objects-in-rails.html" target="_self"&gt;Rendering Heterogeneous Collections of Objects in Rails&lt;/a&gt;. If you happen to be using that technique or anything like it involving the use of ActiveModel's &lt;strong&gt;partial_path&lt;/strong&gt; method, you'll get deprecation warnings like this when upgrading to Rails 3.2:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;DEPRECATION WARNING: partial_path is deprecated and will be removed from Rails 3.2 (ActiveModel::Name#partial_path is deprecated. Call #to_partial_path on model instances directly instead.). (called from partial_path at .../config/initializers/partial_path.rb:12)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;In this blog post I describe how to update my technique and get rid of the deprecation warning.&lt;/p&gt;&#xD;
&lt;p&gt;The &lt;em&gt;heterogeneous&lt;/em&gt; aspect of my technique had to do with rendering collections of STI objects that all inherited from a single &lt;strong&gt;Event&lt;/strong&gt; base class. For organizational reasons, I wanted to put all my disparate event partials in a single &lt;strong&gt;app/view/events&lt;/strong&gt; directory. Without the hack, they'd need to be in their own &lt;strong&gt;view/foo_events/_foo_event.html.erb&lt;/strong&gt; partials. Ugh.&lt;/p&gt;&#xD;
&lt;p&gt;In Rails 3.2, instead of having to monkey patch the framework to fix that crap, I can just implement &lt;strong&gt;to_partial_path&lt;/strong&gt; on the &lt;strong&gt;Event&lt;/strong&gt; base class like this:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;class Event&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  def to_partial_path&lt;/span&gt;&lt;br&gt;&lt;span style="font-family: 'andale mono', times;"&gt;    "events/#{self.class.name.underscore}"&lt;/span&gt;&lt;br&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  end &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Ahh, that's much cleaner. Unfortunately, there's still a catch, but only if you use controller namespaces.&lt;/p&gt;&#xD;
&lt;p&gt;Rails 3.2 keeps the annoying merge of the namespace prefix as part of the generated partial path even if you override it using &lt;strong&gt;to_partial_path&lt;/strong&gt;. The good news is that it is easier to get rid of it in Rails 3.2 than before. The monkeypatch in my earlier blog post now becomes:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;ActionView::PartialRenderer.class_eval do&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt; &lt;/span&gt;&lt;span style="font-family: 'andale mono', times;"&gt; private&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  def merge_prefix_into_object_path(pfx, path)&lt;br&gt;    path&lt;br&gt;&lt;/span&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  end &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;What this little bit of duck punching does is to ensure that when you try to render a collection of objects, it will always return the same partial path regardless of whether you are inside a controller namespace or not. I feel that behavior should be default or at least optional (which is why I describe the feature as annoying.) Let me know if you think it's worth submitting a patch.&lt;/p&gt;&#xD;
&lt;p&gt;Incidentally, in his &lt;a href="http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/" target="_blank"&gt;blog post mentioned above&lt;/a&gt; Jose mentions needing to add an &lt;strong&gt;as: &lt;/strong&gt;parameter to your call to render, like this:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;render :partial =&amp;gt; @activities, :as =&amp;gt; :activity&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;In my testing and examination of the underlying Rails code, it is clear that the &lt;strong&gt;:as&lt;/strong&gt; option is not necessary. The &lt;strong&gt;PartialRenderer&lt;/strong&gt; object always checks for the existence of a &lt;strong&gt;to_partial_path&lt;/strong&gt; method on the object being rendered and calls it if present. &lt;/p&gt;&#xD;
&lt;p&gt;One more thing. &lt;a href="https://github.com/rails/rails/blob/efed2d56e22069fc142016f398625588684ce008/actionpack/lib/action_view/renderer/partial_renderer.rb" target="_blank"&gt;Currently&lt;/a&gt; the documentation states the following (italics mine):&lt;/p&gt;&#xD;
&lt;blockquote&gt;&#xD;
&lt;p&gt;Instead of explicitly naming the location of a partial, you can also let PartialRenderer do the work and pick the proper path by checking `to_proper_path` method. If the object passed to render is a collection, &lt;em&gt;all objects must return the same path&lt;/em&gt;.&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;I'm not quite sure why it says that all objects must return the same path, or why that would even be considered desirable behavior (it's really not!) The good news is that I can verify for you that it does work to return different partial paths within the collection, in other words, you can still do the rendering heterogeneous objects trick. In fact, depending on your naming convention, you may even get correctly name local variables in your partial for free.&lt;/p&gt;&#xD;
&lt;p&gt;The following method determines what to call your partial's automatic local variable corresponding to the current item of the collection being rendered:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;def retrieve_variable(path)&lt;br&gt;&lt;/span&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  variable =&lt;br&gt;    @options[:as].try(:to_sym) || path[%r'_?(\w+)(\.\w+)*$', 1].to_sym&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  variable_counter = :"#{variable}_counter" if @collection&lt;br&gt;  [variable, variable_counter]&lt;br&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;That regex is a little tricky, but whether it's the intentional behavior or not, it's going to grab whatever is between the last underscore of your partial name and the dot to use as the variable name. In the case of my own Event hierarchy, that means each partial will get its own &lt;strong&gt;event&lt;/strong&gt; local variable, even though the partials are named _user_created_event, _nomination_event, etc.&lt;/p&gt;&#xD;
&lt;p&gt;Perfect. Now to hope someone doesn't fuck it up in a future release thinking it's a bug :)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Important Update:&lt;/strong&gt; Check out my buddy &lt;a href="http://www.supaspoida.com/2012/03/02/rendering-collections-of-heterogeneous-objects-with-view-resolvers.html" target="_self"&gt;Lar's take on this stuff in Rails 3&lt;/a&gt; using view resolver classes so that you don't have to monkeypatch anything.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=HqmUy5WI5LM:S7ALpJ9tmRc:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=HqmUy5WI5LM:S7ALpJ9tmRc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=HqmUy5WI5LM:S7ALpJ9tmRc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/01/rendering-collections-of-heterogeneous-objects-in-rails-32.html</feedburner:origLink></entry>
 
<entry><title type="text">Links for 2010-08-31 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/MSuSkxH4q-4/obie" /><updated>2010-09-01T00:00:00-07:00</updated><id>http://del.icio.us/obie#2010-08-31</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://news.ycombinator.com/item?id=1649065"&gt;Hacker News | Ask HN: Are there any good online communities for UX design?&lt;/a&gt;&lt;br/&gt;
Links to good UX communities&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2010-08-31</feedburner:origLink></entry><entry><title type="text">Links for 2009-09-12 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/kvboVgVqgRE/obie" /><updated>2009-09-13T00:00:00-07:00</updated><id>http://del.icio.us/obie#2009-09-12</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.teehanlax.com/blog/?p=1628"&gt;teehan+lax &amp;raquo; Blog Archive &amp;raquo; iPhone GUI PSD 3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-09-12</feedburner:origLink></entry><entry><title type="text">Links for 2009-04-25 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/EdavQebPZ3E/obie" /><updated>2009-04-26T00:00:00-07:00</updated><id>http://del.icio.us/obie#2009-04-25</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.snowgiraffe.com/tech/462/rails-devs-for-foreign-keys/"&gt;Rails Devs for Foreign Keys&lt;/a&gt;&lt;br/&gt;
Interesting commentary and plugin from Rails guys who believe in using database constraints.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-04-25</feedburner:origLink></entry><entry><title type="text">Links for 2009-03-01 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/n_R3UQgBiQI/obie" /><updated>2009-03-02T00:00:00-08:00</updated><id>http://del.icio.us/obie#2009-03-01</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.erebor.com/2009/01/16/telling-stories-in-nashville/"&gt;Ereblog  &amp;raquo; Blog Archive   &amp;raquo; Telling stories in Nashville&lt;/a&gt;&lt;br/&gt;
Fawesome story about guest-pairing with the OGC guys. I think the guest-pairing meme is catching on.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-03-01</feedburner:origLink></entry><entry><title type="text">Links for 2009-02-18 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/yLvaY8nc5bg/obie" /><updated>2009-02-19T00:00:00-08:00</updated><id>http://del.icio.us/obie#2009-02-18</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.digidave.org/adventures_in_freelancing/2009/02/a-journoentrepreneurs-important-relationships.html"&gt;DigiDave | Communication is Key: A Journo-Entrepreneur's Important Relationships&lt;/a&gt;&lt;br/&gt;
Today one of the most important relationships I have is with my developers. The joke goes &amp;quot;developers are the new teamsters.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-02-18</feedburner:origLink></entry><entry><title type="text">Links for 2009-02-17 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/CE3xWgEsAiQ/obie" /><updated>2009-02-18T00:00:00-08:00</updated><id>http://del.icio.us/obie#2009-02-17</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://wevouchfor.org/"&gt;We Vouch For...&lt;/a&gt;&lt;br/&gt;
Interesting take on a &amp;quot;network of excellence&amp;quot; concept by Brian Marick&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sparkboxx.com/sparkboxx/2009/02/rails-maturity-model-certification-and-the-rails-ecosystem.html"&gt;Sparkboxx - Wilco van Duinkerken: Rails Maturity Model, Certification and the Rails Ecosystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.akitaonrails.com/2009/2/17/rails-im-maturity-model"&gt;%w(Akita On Rails) * 2.0 / Rails (Im)maturity Model?&lt;/a&gt;&lt;br/&gt;
Fabio&amp;#039;s take on the subject of RMM and CMMi in general. He seems to know what he&amp;#039;s talking about based on experience.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-02-17</feedburner:origLink></entry><entry><title type="text">Links for 2009-02-05 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/N91c_E8BXOo/obie" /><updated>2009-02-06T00:00:00-08:00</updated><id>http://del.icio.us/obie#2009-02-05</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://agiletesting.blogspot.com/2009/02/load-balancing-in-amazon-ec2-with.html"&gt;Agile Testing: Load Balancing in Amazon EC2 with HAProxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-02-05</feedburner:origLink></entry></feed><!-- ph=1 -->

