<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>sublog : </title>
    <link>http://sublog.subimage.com/.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>News and information from subimage llc</description>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/subimage" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="subimage" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Why OpenID sucks from a user experience perspective</title>
      <description>&lt;p&gt;Many people seem to be touting &lt;a href="http://en.wikipedia.org/wiki/OpenID"&gt;OpenID&lt;/a&gt; as &lt;em&gt;the next big thing&lt;/em&gt; in authentication.  Early adopters request it, web geeks love it, and sites having it claim to be easier to use and more modern. The idea of maintaining only one login to access everything else sounds like a great idea until you thoroughly examine it.  I personally have been considering the concept, especially since many &lt;a href="http://cashboard.uservoice.com/forums/3765-feature-requests/suggestions/28182-openid-support?ref=title"&gt;Cashboard customers are requesting OpenID login as a feature addition.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;What problem are we solving exactly?&lt;/h3&gt;
&lt;p&gt;The first gripe most people have with regular login systems is memory. There&amp;#8217;s no doubt about it, maintaining all of the login information across your accounts can become tedious.&lt;/p&gt;
&lt;p&gt;I personally have about 40 web logins and passwords I have to maintain for various services. The idea of having only one login to remember is nice, but is this really a problem?&lt;/p&gt;
&lt;p&gt;Today all browsers allow you to save your login/password information, and if you&amp;#8217;re worried about security you can always use &lt;a href="http://www.splashdata.com/splashid/index.asp"&gt;a program to manage your passwords&lt;/a&gt; which also encrypts everything for safe keeping. Most password managers also have mobile versions for your phone so you can take login information with you on the go.&lt;/p&gt;
&lt;h3&gt;Replacing non-problems with confusion&lt;/h3&gt;
&lt;p&gt;OpenID claims to solve this memory &amp;quot;problem&amp;quot; another way, by providing one password to rule them all. It sounds good in theory, but in reality quickly it falls apart from a usability perspective.&lt;/p&gt;
&lt;p&gt;I stumbled across a great article that explains &lt;a href="http://electronicmuseum.org.uk/2008/07/16/openid-fail/"&gt;the usability downfalls of OpenID&lt;/a&gt; which I suggest you check out. I won&amp;#8217;t rehash all of the discussion there. Rather, I&amp;#8217;d like to take a look at a real world example I personally ran into on&amp;nbsp;&lt;a href="http://www.stackoverflow.com"&gt;Stackoverflow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Stackoverflow login screen" width="400" class="screenshot" src="/files/open_id_login.png" /&gt;&lt;/p&gt;
&lt;p&gt;One can imagine the following thoughts racing through the average web visitor&amp;#8217;s head when this screen initially pops up.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Huh?&lt;/li&gt;
    &lt;li&gt;Where&amp;#8217;s the username and password fields?&lt;/li&gt;
    &lt;li&gt;I like Google, but don&amp;#8217;t like Yahoo. Should I click Google?&lt;/li&gt;
    &lt;li&gt;What do I type here?&lt;/li&gt;
    &lt;li&gt;What&amp;#8217;s my OpenID &lt;span class="caps"&gt;URL&lt;/span&gt;?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even those that know what OpenID is could be challenged when presented a screen like this. I personally have a Google account, 2 Yahoo accounts, a WordPress account, and an &lt;span class="caps"&gt;AIM&lt;/span&gt;/AOL login. Which one do I use to login here?&lt;/p&gt;
&lt;p&gt;At least with the majority of my other accounts I use a standard email address which I&amp;#8217;ve been conditioned to remember. OpenID invents a whole new bag of problems, this being just the first.&lt;/p&gt;
&lt;h3&gt;New problems being invented with OpenID&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;ve actually logged into Stackoverflow before and had linked it with my Yahoo account.  Returning to the StackOverflow site to ask a question I attempted to login with my Yahoo OpenID once again. The problem is, now Stackoverflow didn&amp;#8217;t recognize my Yahoo OpenID.&lt;/p&gt;
&lt;p&gt;Instead of being logged in after completing the OpenID process I was greeted with this screen.&lt;/p&gt;
&lt;p&gt;&lt;img alt="OpenID not found" width="400" class="screenshot" src="/files/confirm_open_id.png" /&gt;&lt;/p&gt;
&lt;p&gt;I thought I must have forgotten which OpenID I used to login. Perhaps it was my Google account? Nope, not that one&amp;#8230;not any of them in fact.&lt;/p&gt;
&lt;p&gt;Feeling frustrated I finally stumbled to  &lt;a href="http://stackoverflow.com/users/account-recovery"&gt;this page&lt;/a&gt; which is supposed to email your forgotten login information.&amp;nbsp;I played roulette with my different email addresses, finally hitting one that it found acceptable.&lt;/p&gt;
&lt;p&gt;When I received the &amp;quot;account recovery&amp;quot; email it told me something quite bizarre; I had linked my account to my Yahoo/Flickr OpenID.&amp;nbsp;The problem is I had just deleted my Flickr account a couple of days ago thinking I would never use it again. Even though I still had a Yahoo account, I did not have my Flickr account.&amp;nbsp;It turns out that you can actually have &lt;span class="caps"&gt;MULTIPLE&lt;/span&gt; OpenIDs through the same provider.&lt;/p&gt;
&lt;p&gt;This is supposed to be better than a regular username / password combination how?&lt;/p&gt;
&lt;p&gt;&lt;img alt="Select a Yahoo OpenID" width="400" class="screenshot" src="/files/open_id_yahoo.png" /&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately there is simply no way to ever login again to the site, or reset my account to be linked with another OpenID.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What a horrible user experience.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Where do we go from here?&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;m sure the example I ran into is just one of many usability scenarios that nobody has bothered to think through. Multiple this by the number of sites implementing OpenID logins and you can quickly start to imagine the myriad of usabilty problems being invented daily.&lt;/p&gt;
&lt;p&gt;OpenID does solve a number of interesting security problems, but at the moment I think it&amp;#8217;s not mature enough from a usability standpoint to be useful.&lt;/p&gt;
&lt;p&gt;I hope the interaction problems surrounding OpenID continue to be worked on, as Yahoo is doing. They&amp;#8217;ve conducted &lt;a href="http://developer.yahoo.net/blog/archives/2008/10/open_id_research.html"&gt;a very thorough usability study on OpenID&lt;/a&gt;, which I encourage you to read if you&amp;#8217;re interested in the topic. It appears they&amp;#8217;re making progress, but at a slow pace.&lt;/p&gt;
&lt;h3&gt;Alternatives&lt;/h3&gt;
&lt;p&gt;There seems to be a few great implementations of Facebook connect and Twitter oauth starting to pop up around the web.&lt;/p&gt;
&lt;p&gt;I really like what &lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt; is doing with blog commenting and linking to the social web, and I&amp;#8217;m sure we&amp;#8217;ll continue to see more interesting alternatives appear.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m interested to see where things go from here. Have you seen any great implementations of OpenID yet? Share them with me.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/subimage?a=d1QTa7I49bk:yQR1mB_NOsE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=d1QTa7I49bk:yQR1mB_NOsE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=d1QTa7I49bk:yQR1mB_NOsE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=d1QTa7I49bk:yQR1mB_NOsE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=d1QTa7I49bk:yQR1mB_NOsE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=d1QTa7I49bk:yQR1mB_NOsE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=d1QTa7I49bk:yQR1mB_NOsE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 17 Feb 2010 19:48:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:1401998e-290f-434b-a2f2-ce2fab9a7773</guid>
      <comments>http://sublog.subimage.com/2010/02/17/why-openid-sucks-from-a-user-experience-perspective#comments</comments>
      <category>Software</category>
      <category>User Interface</category>
      <category>openid</category>
      <category>twitter</category>
      <category>oauth</category>
      <category>facebook</category>
      <category>stackoverflow</category>
      <category>usability</category>
      <link>http://sublog.subimage.com/2010/02/17/why-openid-sucks-from-a-user-experience-perspective</link>
    </item>
    <item>
      <title>Making Workling::Return::Store predictable</title>
      <description>&lt;p&gt;This took me about 4 hours to figure out today, so I figured I might as well blog about it.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m using the &lt;a href="http://github.com/purzelrakete/workling"&gt;Workling&lt;/a&gt; / &lt;a href="http://github.com/starling/starling"&gt;Starling&lt;/a&gt; combo to handle background processing tasks on Cashboard for various things.&lt;/p&gt;
&lt;p&gt;One of those things is the &lt;a href="http://info.getcashboard.com/integration"&gt;Cashboard / Basecamp project sync&lt;/a&gt;, which provides a really nice progress bar while it does it&amp;#8217;s thing.&lt;/p&gt;
&lt;p&gt;I was encountering unpredictable results when I started refactoring some code from the worker into various models, and stumbled upon this oddity.&lt;/p&gt;
&lt;pre&gt;
&amp;amp;gt;&amp;amp;gt; Workling.return.set('foo', 'bar')
=&amp;amp;gt; &amp;amp;quot;STORED\r\n&amp;amp;quot; 
&amp;amp;gt;&amp;amp;gt; Workling.return.get('foo')
=&amp;amp;gt; &amp;amp;quot;bar&amp;amp;quot; 
&amp;amp;gt;&amp;amp;gt; Workling.return.get('foo')
=&amp;amp;gt; nil
&lt;/pre&gt;
&lt;p&gt;I expected Workling.return.get to be a non-destructive action, but I was dead wrong. It turns out that the default Memcache Workling::Return::Store client acts like a first-in-first-out (FIFO) stack on each key.&lt;/p&gt;
&lt;p&gt;Adding these methods allow me to use any Workling::Return::Store as I initially expected. This will add the methods to the default MemoryReturnStore (for testing), and the StarlingReturnStore (for dev/production).&lt;/p&gt;
&lt;script src='http://pastie.org/669467.js'&gt;&lt;/script&gt;
&lt;p&gt;Now I can run the following code with no problem.&lt;/p&gt;
&lt;pre&gt;
&amp;amp;gt;&amp;amp;gt; Workling.return['foo'] = 'bar'
=&amp;amp;gt; &amp;amp;quot;STORED\r\n&amp;amp;quot; 
&amp;amp;gt;&amp;amp;gt; Workling.return['foo']
=&amp;amp;gt; &amp;amp;quot;bar&amp;amp;quot; 
&amp;amp;gt;&amp;amp;gt; Workling.return['foo']
=&amp;amp;gt; &amp;amp;quot;bar&amp;amp;quot; 
&lt;/pre&gt;
&lt;p&gt;Hopefully this helps someone bashing their head against the wall, like I was. Don&amp;#8217;t hurt yourself.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/subimage?a=zjzXukBTVEM:-IRYVnwWGhE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=zjzXukBTVEM:-IRYVnwWGhE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=zjzXukBTVEM:-IRYVnwWGhE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=zjzXukBTVEM:-IRYVnwWGhE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=zjzXukBTVEM:-IRYVnwWGhE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=zjzXukBTVEM:-IRYVnwWGhE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=zjzXukBTVEM:-IRYVnwWGhE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 25 Oct 2009 02:56:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:60e47479-f59c-434c-a899-86bc6f72b516</guid>
      <comments>http://sublog.subimage.com/2009/10/25/making-workling-return-store-predictable#comments</comments>
      <category>Rails</category>
      <category>Software</category>
      <category>rails</category>
      <category>ruby</category>
      <category>memcache</category>
      <category>workling</category>
      <category>starling</category>
      <category>workling</category>
      <category>Return</category>
      <category>Store</category>
      <link>http://sublog.subimage.com/2009/10/25/making-workling-return-store-predictable</link>
    </item>
    <item>
      <title>Cashboard sponsors Rails Rumble 09</title>
      <description>&lt;p&gt;&lt;img align="left" alt="" src="/files/rr09_badge_125.png" style="margin: 10px;" /&gt;&lt;/p&gt;
&lt;p&gt;Each year since its inception we&amp;#8217;ve sponsored the &lt;a href="http://r09.railsrumble.com/"&gt;Rails Rumble&lt;/a&gt; by offering comped &lt;a href="http://www.getcashboard.com"&gt;Cashboard&lt;/a&gt; accounts for each member of the winning teams. This year is no different as we&amp;#8217;re providing free &lt;span class="caps"&gt;DYNAMIC&lt;/span&gt; accounts for all winners.&lt;/p&gt;
&lt;p&gt;The Rumble is getting ready to kick off this weekend, with over 200 teams competing for &lt;a href="http://blog.railsrumble.com/prizes"&gt;top prizes&lt;/a&gt; from many different companies.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you&amp;#8217;re not familiar with the Rails Rumble, here&amp;#8217;s a primer&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Rails Rumble is a 48 hour web application development competition. As a &lt;strong&gt;contestant&lt;/strong&gt;, your team gets one weekend to design, develop, and deploy the best web property that you can, using the awesome power of &lt;a href="http://ruby-lang.org/"&gt;Ruby&lt;/a&gt; and &lt;a href="http://rubyonrails.com/"&gt;Rails&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As a &lt;strong&gt;judge&lt;/strong&gt;, you get to review some fun new micro applications and help determine which teams fare best in a number of categories. Along the way, you might discover a new service that&amp;#8217;s really useful or fun.&lt;/p&gt;
&lt;p&gt;Oh yeah, and there are prizes too. For both contestants and judges. Sounds great, eh?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There have been many excellent entries in the past, some going on to become full fledged commercial services. If I were starting a new app this would be a great way to get some press for it, especially with the attention the event is getting from the business world.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m excited to see what this year&amp;#8217;s contestants come up with.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/subimage?a=OwFvlB970T8:pDX2RykgTKM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=OwFvlB970T8:pDX2RykgTKM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=OwFvlB970T8:pDX2RykgTKM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=OwFvlB970T8:pDX2RykgTKM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=OwFvlB970T8:pDX2RykgTKM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=OwFvlB970T8:pDX2RykgTKM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=OwFvlB970T8:pDX2RykgTKM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 21 Aug 2009 16:25:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:70924119-2e48-417d-af02-efdbd3b9a0f3</guid>
      <comments>http://sublog.subimage.com/2009/08/21/cashboard-sponsors-rails-rumble-09#comments</comments>
      <category>Cashboard</category>
      <category>Rails</category>
      <category>Software</category>
      <category>rails</category>
      <category>rumble</category>
      <category>cashboard</category>
      <category>programming</category>
      <enclosure type="image/gif" url="http://sublog.subimage.com/files/rails_rumble_logo.gif" length="7086" />
      <link>http://sublog.subimage.com/2009/08/21/cashboard-sponsors-rails-rumble-09</link>
    </item>
    <item>
      <title>Using concerned_with and autotest for Rails models</title>
      <description>&lt;p&gt;&lt;a href="http://www.getcashboard.com"&gt;Cashboard&lt;/a&gt; is growing to be a huge software project, over 11k lines of code, written in &lt;a href="http://www.rubyonrails.com"&gt;Rails&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some of the models have gotten extremely fat using &lt;a href="http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model"&gt;Jamis Buck&amp;#8217;s advice about &amp;quot;skinny controllers, fat models&amp;quot;&lt;/a&gt;. One obese file in particular was causing me a ton of stress due to it&amp;#8217;s massive content, even though I comment liberally and tend to break up sections in the code with large &lt;span class="caps"&gt;ASCII&lt;/span&gt; dividers.&lt;/p&gt;
&lt;p&gt;To compound the stress, my &lt;a href="http://guides.rubyonrails.org/testing.html#unit-testing-your-models"&gt;unit tests&lt;/a&gt; were also getting extremely bloated and hard to read. I couldn&amp;#8217;t tell if I&amp;#8217;d tested a particular behavior at a glance. Things were becoming extremely hard to manage on both fronts.&lt;/p&gt;
&lt;p&gt;I ended up searching out ways to break chunks of logic into separate files and finally settled on using &lt;a href="http://m.onkey.org/2008/9/15/active-record-tips-and-tricks"&gt;the concerned_with trick for ActiveRecord&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Autotest problems&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;m a firm believer in using &lt;a href="http://www.zenspider.com/ZSS/Products/ZenTest/"&gt;autotest&lt;/a&gt; while developing. There&amp;#8217;s no way I could manage a huge project like Cashboard myself without it. I&amp;#8217;ve come to rely on it.&lt;/p&gt;
&lt;p&gt;The &lt;i&gt;concerned_with&lt;/i&gt; trick is great to break up logic into multiple files for one model, but I ran into some issues with the trick and autotest.&lt;/p&gt;
&lt;p&gt;All of my tests for a model were still crammed into one huge file and the unit test didn&amp;#8217;t even run when I saved one of my new &amp;quot;concern&amp;quot; files.&lt;/p&gt;
&lt;h2&gt;Solutions&lt;/h2&gt;
&lt;p&gt;Through some trial and error, I stumbled across a wonderful way to structure all of my files &lt;i&gt;and&lt;/i&gt; hooked up autotest to recognize them all properly. Hopefully it helps someone else out there fighting with the same issues.&lt;/p&gt;
&lt;p&gt;Right now I&amp;#8217;ve got my project structured like so.&lt;/p&gt;
&lt;pre&gt;

  app/models/
  * account.rb
  * account/
  ** billing.rb
  ** validation.rb
  ** ...
  test/units
  * account_test.rb
  * account/
  ** billing_test.rb
  ** validation_test.rb
  &lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Using this layout, I&amp;#8217;d expect the billing_test.rb file to get run by autotest if I saved the billing.rb file. &lt;i&gt;This is quite easily accomplished by adding a .autotest file to the root directory of your Rails project&lt;/i&gt; &amp;#8211; &lt;a href="http://www.subelsky.com/2008/01/autotest-with-verbose-flag-on.html"&gt;as described in this article&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The contents of my .autotest file automatically map my concerned_with files to my custom unit tests for model behavior.&lt;/p&gt;
&lt;script src='http://pastie.org/470666.js'&gt;&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/subimage?a=gVi-wL9qTJI:CkT3_i5TT0Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=gVi-wL9qTJI:CkT3_i5TT0Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=gVi-wL9qTJI:CkT3_i5TT0Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=gVi-wL9qTJI:CkT3_i5TT0Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=gVi-wL9qTJI:CkT3_i5TT0Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/subimage?a=gVi-wL9qTJI:CkT3_i5TT0Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/subimage?i=gVi-wL9qTJI:CkT3_i5TT0Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 06 May 2009 19:10:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d2fc5627-cac9-4a66-9cb9-584d0f20e4d7</guid>
      <comments>http://sublog.subimage.com/2009/05/06/using-concerned_with-and-autotest-for-rails-models#comments</comments>
      <category>Rails</category>
      <category>Software</category>
      <category>autotest</category>
      <category>concerned_with</category>
      <category>activerecord</category>
      <category>rails</category>
      <category>software</category>
      <category>testing</category>
      <category>tdd</category>
      <link>http://sublog.subimage.com/2009/05/06/using-concerned_with-and-autotest-for-rails-models</link>
    </item>
    <item>
      <title>Post subversion changes to twitter</title>
      <description>&lt;p&gt;Here&amp;#8217;s a quick post-commit script for subversion that posts changes directly to &lt;a href="http://www.twitter.com"&gt;www.twitter.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m using it to power the &lt;a href="http://www.twitter.com/cashboard"&gt;Cashboard twitter feed&lt;/a&gt;. If you preface any &lt;span class="caps"&gt;SVN&lt;/span&gt; commit message with &amp;quot;tweet&amp;quot; the rest of the commit message will be pushed to twitter.&lt;/p&gt;
&lt;script src='http://pastie.org/379893.js'&gt;&lt;/script&gt;
&lt;p&gt;Just modify the twitter username and password, then the script in your subversion &amp;quot;hooks&amp;quot; directory, and mark it as an executable (chmod +x post-commit).&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/subimage?a=U2JjO9e6"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=2KG63GNC"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=2KG63GNC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=bgvYv9Uo"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=bgvYv9Uo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=PLBRlqTe"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=PLBRlqTe" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 04 Feb 2009 15:45:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:43c05811-8e17-424d-8976-4e227738dac2</guid>
      <comments>http://sublog.subimage.com/2009/02/04/post-subversion-changes-to-twitter#comments</comments>
      <category>Software</category>
      <category>twitter</category>
      <category>svn</category>
      <category>subversion</category>
      <category>programming</category>
      <category>development</category>
      <category>tools</category>
      <category>dev</category>
      <link>http://sublog.subimage.com/2009/02/04/post-subversion-changes-to-twitter</link>
    </item>
    <item>
      <title>Solo nintendo game developer's 100 day protest</title>
      <description>&lt;p&gt;Anyone who has ever thought of developing a platform game knows it&amp;#8217;s a hard biz to crack. First you have to have a great concept, then you have to develop that concept into a marketable product. More often than not it requires you have a team of talented and motivated people working with you to achieve your vision.&lt;/p&gt;
&lt;p&gt;On top of that Nintendo, Playstation, and the rest require you purchase a very expensive (multi-thousand dollar) software development kit from them &lt;em&gt;and&lt;/em&gt; gain their approval of your title before releasing it. All of that is enough to discourage even the most motivated of people.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.bobsgame.com/"&gt;Bob is a solo developer who has created a 20-hour long 2D role playing game for the Nintendo DS&lt;/a&gt; &amp;#8211; &lt;strong&gt;by himself&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Step back for a minute and think what that requires&amp;#8230;better yet, I&amp;#8217;ll quote him in his own words.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="font_11"&gt;&amp;quot;bob&amp;#8217;s game&amp;quot; is a sort of masterpiece   for me. I&amp;#8217;ve invested well over &lt;em&gt;&lt;strong&gt;&lt;br /&gt;
15,000 hours&lt;/strong&gt;&lt;/em&gt; into its development over 5 years of dedication-&lt;br /&gt;
That is no exaggeration, and it shows!&lt;/p&gt;
&lt;p class="font_11"&gt;All concepts, story, code, sprites,   tiles, music, samples, fonts, &lt;br /&gt;
etc. were created entirely from scratch by me- and I had    to &lt;br /&gt;
teach myself the skills as I went along, with no training!&lt;/p&gt;
&lt;p class="font_11"&gt;The code is straight C, the music is   tracked, and the art is all &lt;br /&gt;
completely hand-clicked tiles and sprites- done the right way, &lt;br /&gt;
pixel by pixel, like the classics we all know and love.&lt;/p&gt;
I intend this to become one of the last   great old-school &lt;br /&gt;
2D retail console games- truly the design of a single mind.&lt;br /&gt;
&lt;br /&gt;
It&amp;#8217;s the game I wanted to play when I   was younger, &lt;br /&gt;
a vision I&amp;#8217;ve been following since then.&lt;/blockquote&gt;
&lt;p&gt;&lt;img width="250" align="right" src="http://sublog.subimage.com/files/bobsgamecam.jpg" alt="Bob is protesting" style="margin: 20px;" /&gt;&lt;/p&gt;
&lt;p&gt;This dude is a mad genius. A mad, obsessive compulsive genius. &lt;a href="http://www.youtube.com/watch?v=vZf2E_wBvng&amp;amp;eurl=http://sublog.subimage.com/&amp;amp;feature=player_embedded"&gt;Some people are giving Bob a hard time on youtube&lt;/a&gt;, but I have nothing but respect for his effort. Anyone that can see out their vision with only their time and hard work is ok in my book. Props to Bob.&lt;/p&gt;
&lt;p&gt;Problem is, Nintendo won&amp;#8217;t even sell the guy a &lt;span class="caps"&gt;SDK&lt;/span&gt; so he can release his game on the &lt;a href="http://www.nintendo.com/ds"&gt;Nintendo DS&lt;/a&gt;. Because of this, Bob is staging a 100 day protest. He&amp;#8217;s locked and barricaded himself in his room, with friends delivering food once weekly. Man, he&amp;#8217;s not just really smart and motivated &amp;#8211; he&amp;#8217;s crazy too! This could be the worst adult temper tantrum ever, or one of the most clever viral marketing campaigns to date. I can&amp;#8217;t tell and I don&amp;#8217;t really care. Gotta love a guy like that.&lt;/p&gt;
&lt;p&gt;Anyhow, Bob would like for everyone to &lt;a href="http://www.nintendo.com/consumer/webform.jsp"&gt;write Nintendo and tell them you want to play his game&lt;/a&gt;. Simple as that. Please take a few minutes out of your day to help him out. Crazy Bob should have the chance to succeed or fail, just like everyone else. There are a number of titles out for the DS that are of questionable quality, but they seemed to get released just fine. His game actually looks like something I might play.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Trailer for &amp;quot;bob&amp;#8217;s game&amp;quot;&lt;/b&gt;&lt;/p&gt;
&lt;object width="425" height="344"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/vZf2E_wBvng&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="425" height="344" src="http://www.youtube.com/v/vZf2E_wBvng&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/subimage?a=7OnWtIAV"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=7EYHR4UG"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=7EYHR4UG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=dVirUugZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=dVirUugZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=nLxfDypF"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=nLxfDypF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sat, 03 Jan 2009 10:08:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:5d1c18dc-7e45-43e6-9b06-8b3dca3db770</guid>
      <comments>http://sublog.subimage.com/2009/01/03/solo-nintendo-game-developers-100-day-protest#comments</comments>
      <category>Design</category>
      <category>nintendo</category>
      <category>ds</category>
      <category>rpg</category>
      <category>bob</category>
      <category>s</category>
      <category>game</category>
      <link>http://sublog.subimage.com/2009/01/03/solo-nintendo-game-developers-100-day-protest</link>
    </item>
    <item>
      <title>Designing like an engineer is bad for business</title>
      <description>&lt;p&gt;Making great software is a huge challenge.&lt;/p&gt;
&lt;p&gt;The challenge only gets harder for those that have to wear multiple hats because of constraints, self-imposed or otherwise.&lt;/p&gt;
&lt;p&gt;As most readers of the blog know I act as the main designer and developer for &lt;a href="http://www.getcashboard.com" target="_blank"&gt;Cashboard&lt;/a&gt; (shameless plug #10384).  This situation arose from many factors, but the main one being I wanted to get the product up and running under my own power. I&amp;#8217;ve seen too many projects fail and I didn&amp;#8217;t want anyone to blame on this one but myself.&lt;/p&gt;
&lt;p&gt;I tell most people I&amp;#8217;m a designer first, but I program out of necessity. Anyone in the software engineering field knows this is usually a bad idea and results in a shit product, yet I believe I&amp;#8217;m able to pull it off because I&amp;#8217;m able to &amp;quot;switch modes&amp;quot; or &amp;quot;switch hats&amp;quot; most of the time.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m damn good at what I do, but I&amp;#8217;m definitely not above the classic problem. I routinely have to catch myself &amp;quot;designing like an engineer&amp;quot; instead of designing as a user experience person. Case in point, Cashboard&amp;#8217;s &amp;quot;Account Preferences&amp;quot; screen.&lt;/p&gt;

&lt;p&gt;The old screen is shown below in all of it&amp;#8217;s fucked up, cluttered, and confusing failure.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sublog.subimage.com/files/old_prefs.gif" target="_blank"&gt;&lt;img width="500" border="0" src="http://sublog.subimage.com/files/old_prefs.gif" alt="Old Cashboard preferences screen" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This particular screen was built over time. Sections were added as the product grew, and it shows.&lt;/p&gt;
&lt;p&gt;The design made complete sense to the programmer side of my brain. Sections of the screen directly map to functions of the code. As it usually turns out in situations like this, it was the exact &lt;b&gt;wrong&lt;/b&gt; way to approach the design of that screen.&lt;/p&gt;
&lt;p&gt;Non-relevant information is shown which clutters the view and detracts from the goal at hand. Things aren&amp;#8217;t logically grouped from a customer&amp;#8217;s point of view, and worst yet the screen has an overall busy look that&amp;#8217;s quite perplexing.&lt;/p&gt;
&lt;p&gt;There are two forms on the page, with two buttons, and a link to update other relevant information on yet &lt;i&gt;another&lt;/i&gt; screen. (yuck!)&lt;/p&gt;
&lt;h3&gt;Preferences Screen Remix&lt;/h3&gt;
&lt;p&gt;Finally fed up with the design I took it upon myself to give that screen a makeover. Putting on my designer hat I busted out the design documents necessary, re-assessed the goals of customers visiting that screen, and had a revelation.&lt;/p&gt;
&lt;p&gt;Customers of the app visiting this screen just want to update their preferences. They don&amp;#8217;t care that changing their currency is a different operation from setting their date formats or billing address on the back-end, and they shouldn&amp;#8217;t have to.&lt;/p&gt;
&lt;p&gt;As with most design breakthroughs, this one was sitting right in front of my face. The solution was plainly there, yet I was missing it up until now because I wasn&amp;#8217;t paying attention.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sublog.subimage.com/files/new_prefs.gif" target="_blank"&gt;&lt;img width="500" border="0" src="http://sublog.subimage.com/files/new_prefs.gif" alt="New Cashboard preferences screen" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The updated design eliminates unnecessary information presented from the first screen, brings the &amp;quot;billing address&amp;quot; fields into the mix, and consolidates the multiple forms into one.&lt;/p&gt;
&lt;p&gt;The result is a much cleaner looking form that actually makes sense for the goals at hand and is pleasing to look at as well.&lt;/p&gt;
&lt;p&gt;As someone once told me &amp;#8211; it doesn&amp;#8217;t cost a thing to pay attention, but not paying attention can cost you dearly. True words indeed.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/subimage?a=dJHGUrPX"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=u9TiRgoq"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=u9TiRgoq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=EM0xuqoW"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=EM0xuqoW" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=7BRyUQfY"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=7BRyUQfY" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 22 Dec 2008 15:02:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:11a40ab7-e861-466b-8abb-8395d53d8f5e</guid>
      <comments>http://sublog.subimage.com/2008/12/22/designing-like-an-engineer-is-bad-for-business#comments</comments>
      <category>Cashboard</category>
      <category>Design</category>
      <category>User Interface</category>
      <category>design</category>
      <category>cashboard</category>
      <category>user</category>
      <category>experience</category>
      <category>interaction</category>
      <category>coding</category>
      <category>programming</category>
      <category>gui</category>
      <link>http://sublog.subimage.com/2008/12/22/designing-like-an-engineer-is-bad-for-business</link>
    </item>
    <item>
      <title>Import production SQL to your development box with Capistrano</title>
      <description>&lt;p&gt;I got sick of using &lt;a href="http://www.navicat.com/"&gt;Navicat&lt;/a&gt; to import production data from our servers in order to test it locally on a development box.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pastie.org/335531"&gt;Here&amp;#8217;s a quick Capistrano task&lt;/a&gt; that imports production data from your server to your development box locally.&lt;/p&gt;
&lt;p&gt;This is great way to debug problems that are happening on your production server. It gives you the ability to mess with things locally without the risk of fucking up someone&amp;#8217;s important data ;)&lt;/p&gt;

&lt;div style="width:100%;overflow:hidden;"&gt;
&lt;script src='http://pastie.org/335531.js'&gt;&lt;/script&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/subimage?a=RHBfRt6p"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=bcUNUG8Q"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=bcUNUG8Q" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=S8xxzRwx"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=S8xxzRwx" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=Lop0uQea"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=Lop0uQea" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 09 Dec 2008 21:48:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:432e2a4f-a64c-42c4-8641-bed8f12377d6</guid>
      <comments>http://sublog.subimage.com/2008/12/09/import-production-sql-to-your-development-box-with-capistrano#comments</comments>
      <category>Rails</category>
      <category>Software</category>
      <category>rails</category>
      <category>capistrano</category>
      <category>sql</category>
      <category>mysql</category>
      <link>http://sublog.subimage.com/2008/12/09/import-production-sql-to-your-development-box-with-capistrano</link>
    </item>
    <item>
      <title>Killing lazy dogs</title>
      <description>&lt;p&gt;&lt;a href="http://lazydog.subimage.com"&gt;&lt;img border="0" align="right" style="margin: 10px;" class="screenshot" alt="Kill the lazy dog - create a pangram" src="http://sublog.subimage.com/files/lazydog.gif" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sometimes working on one thing gets pretty tedious.&lt;/p&gt;
&lt;p&gt;Last night while taking a break from &lt;a href="http://www.getcashboard.com"&gt;Cashboard&lt;/a&gt; I had some fun and wrote a simple web app that was inspired by a &lt;a href="http://www.qbn.com"&gt;design board I frequent often&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lazydog.subimage.com"&gt;Kill the lazy dog&lt;/a&gt; is a small Ruby app written with &lt;a href="http://sinatra.rubyforge.org/"&gt;Sinatra&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The objective is to come up with a pangram &amp;#8211; a phrase that uses every letter of the alphabet.&lt;/p&gt;
&lt;div style="clear:both;height:1px;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/subimage?a=H2O77zVF"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=yJ2vw2PD"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=yJ2vw2PD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=TTyG7T8N"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=TTyG7T8N" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=GLtZa2Tq"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=GLtZa2Tq" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 09 Dec 2008 11:36:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d4e31310-9f6c-4896-978e-5348558c336a</guid>
      <comments>http://sublog.subimage.com/2008/12/09/killing-lazy-dogs#comments</comments>
      <category>Site Releases</category>
      <category>software</category>
      <category>ruby</category>
      <category>sinatra</category>
      <category>pangram</category>
      <link>http://sublog.subimage.com/2008/12/09/killing-lazy-dogs</link>
    </item>
    <item>
      <title>Send any audio to your stereo system via airport</title>
      <description>&lt;p&gt;One of the gadgets I love the most is my &lt;a href="http://www.apple.com/airportexpress/"&gt;Airport Express&lt;/a&gt; from Apple.&lt;/p&gt;
&lt;p&gt;It gets the most use streaming audio from iTunes onto my stereo system. One major gripe I&amp;#8217;ve had with the Airport Express is that I &lt;em&gt;have to use iTunes&lt;/em&gt; to send music to it.&lt;/p&gt;
&lt;p&gt;Luckilly I stumbled across &lt;a href="http://www.rogueamoeba.com/airfoil/"&gt;Airfoil for Mac and Windows&lt;/a&gt;, which streams &lt;em&gt;any&lt;/em&gt; audio on your computer to the Airport Express.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img width="500" src="http://sublog.subimage.com/files/pandora_airfoil.jpg" alt="Pandora Radio with Airfoil" /&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve got it running with &lt;a href="http://pandora.com/"&gt;Pandora Radio&lt;/a&gt; right now, and it&amp;#8217;s working perfectly.&lt;/p&gt;
&lt;p&gt;I love technology.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;UPDATE&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I also must say, they have a genius way to make you purchase the damn software. They get you hooked listening to your favorite music, then overlay white noise on top of the broadcast after a few minutes and prompt you with a dialog to purchase.&lt;/p&gt;
&lt;p&gt;Now if I could only build in something like that to &lt;a href="http://www.getcashboard.com"&gt;Cashboard&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/subimage?a=Ks8AzRpl"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=aGteK8vw"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=aGteK8vw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=tTw2qJqe"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=tTw2qJqe" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=6gqYGKZx"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=6gqYGKZx" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 17 Nov 2008 03:31:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:458f18a7-86ea-41cc-beb2-4be5a50b6bbb</guid>
      <comments>http://sublog.subimage.com/2008/11/17/send-any-audio-to-your-stereo-system-via-airport#comments</comments>
      <category>gadgets</category>
      <category>technology</category>
      <category>music</category>
      <category>airport</category>
      <category>express</category>
      <category>itunes</category>
      <link>http://sublog.subimage.com/2008/11/17/send-any-audio-to-your-stereo-system-via-airport</link>
    </item>
  </channel>
</rss>
