<?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" href="http://feeds.feedburner.com/subimage" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><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>
    <item>
      <title>Minority Report interface is real</title>
      <description>&lt;p&gt;I&amp;#8217;m one of those people who always used to complain about the &amp;quot;hacker&amp;quot; computer interfaces presented in most movies. People breaking into computer systems in minutes with pretty graphics and pictures zooming by. I find them an assault on my throwback days of hacking Taco Bell billing systems, hotel climate controls, and unprotected unix boxes. What can I say, I was young and bored&amp;#8230;&lt;/p&gt;
&lt;p&gt;Despite this fact, I&amp;#8217;m also a sucker for those futuristic computer interfaces presented in movies like &lt;a href="http://www.imdb.com/title/tt0181689/"&gt;Minority Report&lt;/a&gt;, and the &lt;a href="http://video.aol.com/video-detail/007-ui-design/2508252521"&gt;new 007 movie&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Imagine my shock when I ran across this video today showcasing that a group named &lt;a href="http://oblong.com/"&gt;Oblong Industries&lt;/a&gt; has recreated the Minority Report interface for real!&lt;/p&gt;

&lt;div align="center"&gt;
&lt;object width="400" height="225"&gt;
&lt;param value="true" name="allowfullscreen" /&gt;
&lt;param value="always" name="allowscriptaccess" /&gt;
&lt;param value="http://vimeo.com/moogaloop.swf?clip_id=2229299&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" name="movie" /&gt;&lt;embed width="400" height="225" allowscriptaccess="always" allowfullscreen="true" type="application/x-shockwave-flash" src="http://vimeo.com/moogaloop.swf?clip_id=2229299&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;&lt;br /&gt;
&lt;a href="http://vimeo.com/2229299"&gt;g-speak overview 1828121108&lt;/a&gt; from &lt;a href="http://vimeo.com/user922585"&gt;john underkoffler&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/subimage?a=B9aXrwTY"&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=XW2crpYX"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=XW2crpYX" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=0O35kN4t"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=0O35kN4t" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=Wd3Lc3Zx"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=Wd3Lc3Zx" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sat, 15 Nov 2008 16:29:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:a17597a7-77dc-4743-9b34-4ef602fef201</guid>
      <comments>http://sublog.subimage.com/2008/11/15/minority-report-interface-is-real#comments</comments>
      <category>User Interface</category>
      <category>ui</category>
      <category>design</category>
      <category>user</category>
      <category>interface</category>
      <category>futuristic</category>
      <category>computer</category>
      <category>future</category>
      <category>computers</category>
      <link>http://sublog.subimage.com/2008/11/15/minority-report-interface-is-real</link>
    </item>
    <item>
      <title>Cashboard logo exploration</title>
      <description>&lt;p&gt;Here&amp;#8217;s a group of logos I came up with during the recent Cashboard rebranding.&lt;/p&gt;
&lt;p&gt;The final, accepted logos are at the top left. Losers were rejected for a variety of reasons, but I thought some people might enjoy seeing the thought process that goes into an effort like that.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://sublog.subimage.com/files/cashboard_logo_exploration.gif" /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/subimage?a=8QOZ1kET"&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=d6Pwv5zW"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=d6Pwv5zW" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=rrOlcNkF"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=rrOlcNkF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=i27IHwUQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=i27IHwUQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 10 Nov 2008 22:14:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:19b5ca46-e5ab-4eed-a1f4-90ab616e6800</guid>
      <comments>http://sublog.subimage.com/2008/11/10/cashboard-logo-exploration#comments</comments>
      <category>Cashboard</category>
      <category>Design</category>
      <link>http://sublog.subimage.com/2008/11/10/cashboard-logo-exploration</link>
    </item>
    <item>
      <title>Cashboard gets new-new branding</title>
      <description>&lt;p&gt;Sometimes I just can&amp;#8217;t leave things alone. I refreshed the Cashboard brand a few weeks ago in preparation for an event I needed to attend. The results were OK, but nothing I was overjoyed with.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve since taken the time to really update the brand. I believe the new look reflects the quality of service that we&amp;#8217;re providing with Cashboard.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://sublog.subimage.com/files/cb_screen.jpg" /&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;That, and I just love looking better than the competition&amp;#8230;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/subimage?a=71CKLIas"&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=X6BL2oDi"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=X6BL2oDi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=ZfOxzJrX"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=ZfOxzJrX" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/subimage?a=6X0H2LPF"&gt;&lt;img src="http://feeds.feedburner.com/~f/subimage?i=6X0H2LPF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 09 Nov 2008 19:11:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7780535d-a21e-4ea2-86a3-010cf9c5893b</guid>
      <comments>http://sublog.subimage.com/2008/11/09/cashboard-gets-new-new-branding#comments</comments>
      <category>Cashboard</category>
      <category>Design</category>
      <link>http://sublog.subimage.com/2008/11/09/cashboard-gets-new-new-branding</link>
    </item>
  </channel>
</rss>
