<?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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>The Napkin ~ A Blog By Highgroove Studios</title>
    <link>http://cleanair.highgroove.com/</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>The Napkin ~ A Blog By Highgroove Studios</description>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/cleanair" /><feedburner:info uri="cleanair" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>The Rapid Feedback Loop</title>
      <description>&lt;p&gt;One of the best features of &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; development is the &amp;#8220;Rapid Feedback Loop&amp;#8221; that allows developers to quickly make a change and see right away how that new feature, enhancement, (or bug fix) behaves and looks in real-time.&lt;/p&gt;


	&lt;p&gt;This Rapid Feedback Loop actually becomes even cooler when you loop in the client&amp;#8212;the product owner requesting a new feature or enhancement.  At &lt;a href="http://highgroove.com"&gt;Highgroove&lt;/a&gt;, we do outsourced development and feature additions for many different projects.  We&amp;#8217;re always looking for ways to enhance that feedback loop with our clients.  Here are few tools for quickly enabling an even more rapid feedback loop, that we can&amp;#8217;t live without&amp;#8230;.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.skype.com"&gt;Skype&lt;/a&gt; &amp;#8211; Skype&amp;#8217;s Screenshare capability is fantastic, it works anywhere, between Macs and PCs, and is so quick to setup.  We use it every day to say &amp;#8220;is this what you mean?&amp;#8221;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://skitch.com/"&gt;Skitch&lt;/a&gt; &amp;#8211; Plastiq&amp;#8217;s Skitch is a screenshot tool that can go from screenshot to a private, shareable link you can send to anyone in about 2 seconds.  It&amp;#8217;s the bee&amp;#8217;s knees for sending over a fix or showing off a new feature.  Here&amp;#8217;s a sample that we sent a client just recently pointing out a few quick changes:&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;&lt;img style="padding-left: 40px;" height=230 width=320 src ="http://img.skitch.com/20100226-1qasf1jhpih7hbkneb3pwxyn8y.png" /&gt;&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.capify.org/"&gt;Capistrano&lt;/a&gt; and the &lt;a href="http://github.com/jamis/capistrano-ext#readme"&gt;Capistrano Extensions&lt;/a&gt; &amp;#8211; Capistrano enables us to setup production and staging servers.  We can push changes to a staging server in one command, so everyone can actually kick the tires on a new feature before pushing out to production in another one line command, with no downtime.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;The Extra Desk in our Office &amp;#8211; one of our favorite clients reminded me that they love the fact that can come sit with us in our office.  When we say &amp;#8220;is this what you mean,&amp;#8221; we can simply point to our screen.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;&lt;img style="padding-left: 40px;" height=230 width=320 src ="http://img.skitch.com/20100226-rb4wba7pj7b5t8jt5iyma1tms1.png" /&gt;&lt;/p&gt;


	&lt;h2&gt;Summary&lt;/h2&gt;


	&lt;p&gt;The quicker we can enable our clients to see and feel changes, the quicker they can realize real value from a rapidly evolving project.  We don&amp;#8217;t run into the problems traditional software companies face where developers can go off into a room and code for days before presenting their black box back to the stakeholders.  Even with all the specifications in the world, nothing beats kicking the tires and rapidly iterating on a feature until it&amp;#8217;s perfect.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=qMPcY5Iahwo:mb2OSwu3V9k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=qMPcY5Iahwo:mb2OSwu3V9k:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/qMPcY5Iahwo" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Feb 2010 22:25:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2010/02/25/the-rapid-feedback-loop</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/qMPcY5Iahwo/the-rapid-feedback-loop</link>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/149</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2010/02/25/the-rapid-feedback-loop</feedburner:origLink></item>
    <item>
      <title>Iteration Based Contracts</title>
      <description>&lt;p&gt;On the &lt;a href="http://groups.google.com/group/rails-business"&gt;rails-business list&lt;/a&gt;, someone asked recently about Iteration Based Contracts.&lt;/p&gt;


	&lt;p&gt;&amp;#8220;Iterations&amp;#8221; in the software development world are a simple, yet powerful concept for developers and businesses.  An Iteration is a pre-defined timeframe, usually 1 or 2 weeks, a pre-defined cost, and a general overview of the functionality and goals of an iteration (see also: &lt;a href="http://en.wikipedia.org/wiki/Iterative_and_incremental_development"&gt;Iterative and Incremental Development&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;Some examples of Iterative development might have one goal:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Develop a simple back-end server for an iPhone application that allows user registration, signup, and stores user profile information.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Or may include a package of goals, usually building on a previous iteration:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Add a simple Software-as-a-Service payment processing system to user registration.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Most businesses looking for development &lt;strong&gt;really don&amp;#8217;t care about the hourly rates when it really boils down to work&lt;/strong&gt; (i.e., $20/hr for 5 hours of development for one developer or team == $100/hr for 1 hour of development for another developer or team).  They really just want their product or service to work, and they would really like to know how much it will cost and how long it will take.&lt;/p&gt;


	&lt;p&gt;There is an old adage (backed up by some &lt;a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month"&gt;empirical evidence&lt;/a&gt;  and &lt;a href="http://gettingreal.37signals.com/ch02_Fix_Time_and_Budget_Flex_Scope.php"&gt;real-world proof&lt;/a&gt;) that says:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&amp;#8220;you can build software 1) on time, 2) on budget, and 3) on scope, but you can only pick two&amp;#8230;.&amp;#8221;&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;This is not to say that no developer team could never do all three, but it&amp;#8217;s actually a lot more manageable (and fun) for businesses and developers to fix &amp;#8220;time&amp;#8221; and &amp;#8220;budget&amp;#8221;, and alter the scope in Iteration based development.&lt;/p&gt;


	&lt;p&gt;You might be thinking that we&amp;#8217;re still back in Square 1&amp;#8212;i.e. aren&amp;#8217;t those pesky developers just packaging up a set of hours and time&amp;#8212;how will I know what will get developed in that time and for that cost?  &lt;strong&gt;But, something very cool happens when you really embrace those constraints&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;With an iteration, both parties are agreeing to a fixed amount of money and time, and the developers (and product owners) will develop as much functionality and business value within the Iteration. If development on an Iteration begins, and then the business owners suddenly have a fantastic new idea (which usually happens right after the first demo, once they have working software in their hands), they can simply ask the developers to make it happen.  Similarly, if the developers think of a great way to simplify a process, leverage an existing plugin or library, or add (or remove) an additional feature, they can propose it without recourse.  Both parties know how it affects the Iteration, and thus, the bottom line.  There &lt;strong&gt;is no concept of the &amp;#8220;change-order&amp;#8221;&lt;/strong&gt; and the rapid-feedback-loop created from iterating makes sure that what is being developed by the developers is exactly what the business owners want.&lt;/p&gt;


	&lt;p&gt;At &lt;a href="http://highgroove.com"&gt;Highgroove&lt;/a&gt;, we have a Master Services Agreement for Iteration Based Contracts, and without posting all the nitty gritty details, the meat of it revolves around the compensation and deliverables:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;Compensation.  Highgroove shall be compensated for Services at the rate of: 
  Development per Iteration (Ruby/Rails/JavaScript/HTML/CSS): $xxx&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;Deliverables are always outlined as attachments to the agreement, and are usually story-based (see &lt;a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development"&gt;BDD&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;Iteration Based Contracts require quite a few more mechanisms to ensure that developers are not just packaging up X number of hours&amp;#8212;there has to be agreed upon functionality and time-frames surrounding those deliverables within the Iteration(s).&lt;/p&gt;


	&lt;p&gt;We&amp;#8217;ve found that our best clients &lt;strong&gt;are really seeking a proven process&lt;/strong&gt;, and a team that can execute on that process: being transparent and delivering real business value at every step.  Iteration Based Contracts are a great way to structure this relationship.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=zPv1f-WXwkA:oxPndxRWpSI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=zPv1f-WXwkA:oxPndxRWpSI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/zPv1f-WXwkA" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 23 Feb 2010 20:42:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2010/02/23/iteration-based-contracts</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/zPv1f-WXwkA/iteration-based-contracts</link>
      <category>Business</category>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/147</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2010/02/23/iteration-based-contracts</feedburner:origLink></item>
    <item>
      <title>Making the Case for Redis</title>
      <description>&lt;p&gt;Most database-backed applications, especially Ruby applications written in Rails do fine with a &lt;span class="caps"&gt;SQL &lt;/span&gt;Database, like MySQL.  Adam Wiggins of &lt;a href="http://heroku.com/"&gt;Heroku&lt;/a&gt; does a great job explaining how &lt;a href="http://adamblog.heroku.com/past/2009/7/8/sql_databases_are_an_overapplied_solution_and_what_to_use_instead/"&gt;SQL Databases are an Overapplied Solution&lt;/a&gt;.  There are definitely a few cases we&amp;#8217;ve seen where a NoSQL solution like Redis can really shine.&lt;/p&gt;


	&lt;p&gt;At Highgroove, we&amp;#8217;ve got several projects utilizing the &lt;a href="http://code.google.com/p/redis/"&gt;Redis&lt;/a&gt; key-value store.  Here are a few reasons you might want to look into Redis:&lt;/p&gt;


	&lt;p&gt;1) &lt;strong&gt;&amp;#8221;Data is frequently written, infrequently read&amp;#8221;&lt;/strong&gt; &amp;#8211; if you are making tons of writes and MySQL can&amp;#8217;t keep up, Redis has been clocked at 110000 SETs (the &lt;span class="caps"&gt;INSERT&lt;/span&gt; equivalent) per second!&lt;/p&gt;


	&lt;p&gt;2) &lt;strong&gt;&amp;#8221;Data can be expired&amp;#8221;&lt;/strong&gt; &amp;#8211; if you have data that can be expired on a regular basis, over time, or explicitly, like stats, logs, and session data, Redis can explicitly expire whole keys or quickly trim large lists of data in no time.&lt;/p&gt;


	&lt;p&gt;3) &lt;strong&gt;&amp;#8221;Data is a collection of &lt;span class="caps"&gt;COUN&lt;/span&gt;Ts, or SUMs of other data.&amp;#8221;&lt;/strong&gt; &amp;#8211; if you have ever written an &lt;span class="caps"&gt;UPDATE&lt;/span&gt; statement that adds +1 to a record, you probably know that it is quite expensive, and could possibly be wrong.  Redis has built in support for incrementing and decrementing values, quickly.&lt;/p&gt;


	&lt;p&gt;We love &lt;span class="caps"&gt;SQL &lt;/span&gt;Databases, so you won&amp;#8217;t see us abandoning them any time soon, but we enjoy adding tools like Redis to our toolbelt.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;More Information on Redis:&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Redis Project Page &amp;#8211; &lt;a href="http://code.google.com/p/redis/"&gt;http://code.google.com/p/redis/&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Redis (wikipedia entry) &amp;#8211; &lt;a href="http://en.wikipedia.org/wiki/Redis_(dbms" title="dbms"&gt;http://en.wikipedia.org/wiki/Redis_&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;A Collection of Redis Use Cases &amp;#8211; &lt;a href="http://www.paperplanes.de/2010/2/16/a_collection_of_redis_use_cases.html"&gt;http://www.paperplanes.de/2010/2/16/a_collection_of_redis_use_cases.html&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=JHT8zNUJsQw:rLjHcbUw9UY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=JHT8zNUJsQw:rLjHcbUw9UY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/JHT8zNUJsQw" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 18 Feb 2010 14:55:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2010/02/18/redis-wip</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/JHT8zNUJsQw/redis-wip</link>
      <category>Open Source</category>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/146</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2010/02/18/redis-wip</feedburner:origLink></item>
    <item>
      <title>Production Server Sysadmin Essentials from the Scout Team</title>
      <description>&lt;p&gt;Deploying Rails applications has definitely become easier with the use of tools like &lt;a href="http://www.capify.org/"&gt;Capistrano&lt;/a&gt; and &lt;a href="http://www.modrails.com/"&gt;Phusion Passenger&lt;/a&gt; (a.k.a. mod_rails/mod_rack), but really keeping them serviceable, maintainable, and always humming along can require a bit of work.&lt;/p&gt;


	&lt;p&gt;Andre over at &lt;a href="http://scoutapp.com/"&gt;Scout&lt;/a&gt; has written a fantastic guide&amp;#8212;a checklist, really for putting a Rails or Sinatra application in production and keeping it up in tip-top shape.&lt;/p&gt;


	&lt;p&gt;Read the &lt;a href="http://blog.scoutapp.com/articles/2010/02/01/production-server-sysadmin-essentials"&gt;Production Server Sysadmin Essentials&lt;/a&gt; or, as Andre likes to call it: &amp;#8220;Sysadmin Eye for the Dev Guy&amp;#8221;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=eKZH6iBmrGI:OaGHOzzDRcE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=eKZH6iBmrGI:OaGHOzzDRcE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/eKZH6iBmrGI" height="1" width="1"/&gt;</description>
      <pubDate>Tue,  2 Feb 2010 08:40:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2010/02/02/production-server-sysadmin-essentials-by-the-scoutapp-com-team</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/eKZH6iBmrGI/production-server-sysadmin-essentials-by-the-scoutapp-com-team</link>
      <category>Scout</category>
      <category>Ruby on Rails</category>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/145</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2010/02/02/production-server-sysadmin-essentials-by-the-scoutapp-com-team</feedburner:origLink></item>
    <item>
      <title>Open-Source in Action</title>
      <description>&lt;p&gt;A new client of ours had a big problem.  The site they built was getting too many searches (a very good problem to have).  The searches all used Andre&amp;#8217;s &lt;a href="http://geokit.rubyforge.org/"&gt;geokit gem&lt;/a&gt; and the &lt;a href="http://github.com/andre/geokit-rails"&gt;geokit-rails&lt;/a&gt; plugin to provide local results.&lt;/p&gt;


	&lt;p&gt;Even with the library&amp;#8217;s multi-geocoder support (Google, with failover to Yahoo), the site was hitting the limits imposed by both services every day!&lt;/p&gt;


	&lt;p&gt;So, we quickly implemented a query caching mechanism that caches geocoding lookups that don&amp;#8217;t change very regularly, saving the site from making all those &lt;span class="caps"&gt;API&lt;/span&gt; calls.  But, the cool part is, &lt;strong&gt;we actually added this functionality to the open-source library itself&lt;/strong&gt;, and the client&amp;#8217;s application now directly benefits.&lt;/p&gt;


	&lt;p&gt;Several things will now happen, because we contributed back to the open-source library, instead of keeping this &amp;#8220;addition&amp;#8221; to ourself (and the client):&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;other developers facing this same problem can now leverage our code when they use geokit&lt;/li&gt;
		&lt;li&gt;other developers can now submit even more functionality, fixes or enhancements to our code, and even better support for problems we may have one day, meaning that we will eventually benefit from this too&lt;/li&gt;
		&lt;li&gt;our client now knows that the code they relied on us to develop now has even &lt;a href="http://en.wikipedia.org/wiki/Linus'_Law"&gt;more developers eyeing it&lt;/a&gt;, making sure it works&lt;/li&gt;
		&lt;li&gt;our client (through us) is contributing to open-source, and can feel good about using open-source technologies, having fulfilled their part of the agreement they implicitly made, by leveraging the gains (and price) of implementing a solution based on open-source software&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Truly leveraging open-source technology, when done right, can be a huge win for everyone: the client, vendor, and community.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=SsFAiQ3pDuA:vjpSX5x1YZM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=SsFAiQ3pDuA:vjpSX5x1YZM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/SsFAiQ3pDuA" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 24 Jan 2010 17:23:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2010/01/24/open-source-in-action</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/SsFAiQ3pDuA/open-source-in-action</link>
      <category>Open Source</category>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/144</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2010/01/24/open-source-in-action</feedburner:origLink></item>
    <item>
      <title>Atlanta Startup Weekend Nov 13-15</title>
      <description>&lt;p&gt;Alanta&amp;#8217;s (3rd?) &lt;a href="http://atlanta.startupweekend.org/"&gt;Startup Weekend&lt;/a&gt; is on Nov 13 &amp;#8211; Nov 15 at &lt;a href="http://www.atdc.org/"&gt;ATDC&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;We&amp;#8217;re big fans of Startup Weekend for a couple of reasons:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;the constraints&lt;/strong&gt;&amp;#8212;successful businesses are built on limited resources. A single weekend to come up with ideas, plan, execute, and launch a business is a daunting and fantastic lesson for anyone interested in starting a business. &lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;the people&lt;/strong&gt;&amp;#8212;what happens when you get 15 crazy developers, 20 biz-dev folk, sprinkle in some opinionated graphic designers and some marketing know-it-alls?  Sheer madness, of course!  I don&amp;#8217;t think you could build a better simulation for working with a diverse team towards a common goal.&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;the camaraderie&lt;/strong&gt;&amp;#8212;the business(es) coming out of Startup Weekend may not ever become the next Google (or &lt;a href="http://skribit.com/about"&gt;Skribit&lt;/a&gt;), but the ideas and lessons learned by all are sure to make &lt;a href="http://en.wikipedia.org/wiki/A_rising_tide_lifts_all_boats"&gt;the tide rise&lt;/a&gt; here in Atlanta!&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;A very big thank you to our friends at &lt;a href="http://www.kauffman.org/"&gt;The Kauffman Foundation&lt;/a&gt;, &lt;a href="http://www.atdc.org/"&gt;ATDC&lt;/a&gt; (and all the other sponsors) for their support of this Atlanta event.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=NZf7qysbKEw:lEFwK_dOEVA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=NZf7qysbKEw:lEFwK_dOEVA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/NZf7qysbKEw" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 23 Oct 2009 09:57:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2009/10/23/atlanta-startup-weekend-nov-13-15</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/NZf7qysbKEw/atlanta-startup-weekend-nov-13-15</link>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/142</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2009/10/23/atlanta-startup-weekend-nov-13-15</feedburner:origLink></item>
    <item>
      <title>Part II: We Just Undid Three Months of Dev work. Here's What We Learned.</title>
      <description>&lt;p&gt;&lt;img src="http://blog.scoutapp.com/images/scout_logo.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;We published &lt;a href="http://blog.scoutapp.com/articles/2009/10/20/part-ii-we-just-undid-three-months-of-dev-work-heres-what-we-learned"&gt;Part 2 of our lessons learned&lt;/a&gt; from undoing 3 months worth of development work on &lt;a href="http://scoutapp.com/"&gt;Scout&lt;/a&gt;, our server monitoring service.&lt;/p&gt;


	&lt;p&gt;As developers, we love technically beautiful solutions.  But sometimes the &lt;strong&gt;best features&lt;/strong&gt; are the ones that get the job done&amp;#8212;and prove themselves by providing real business value.&lt;/p&gt;


	&lt;p&gt;We hope you enjoy us sharing these lessons, if so: &lt;a href="http://news.ycombinator.com/item?id=892986"&gt;up-vote us on Hacker News&lt;/a&gt; and be sure to subscribe to the &lt;a href="http://feeds.feedburner.com/scoutapp"&gt;Scout &lt;span class="caps"&gt;RSS &lt;/span&gt;Feed&lt;/a&gt; or &lt;a href="http://twitter.com/scoutapp"&gt;Follow Us on Twitter&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=cGb0wbwli0k:UVHqeeGkTM4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=cGb0wbwli0k:UVHqeeGkTM4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/cGb0wbwli0k" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 20 Oct 2009 19:38:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2009/10/20/part-ii-we-just-undid-three-months-of-dev-work-heres-what-we-learned</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/cGb0wbwli0k/part-ii-we-just-undid-three-months-of-dev-work-heres-what-we-learned</link>
      <category>Scout</category>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/141</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2009/10/20/part-ii-we-just-undid-three-months-of-dev-work-heres-what-we-learned</feedburner:origLink></item>
    <item>
      <title>We Just Undid Three Months of Dev work. Here's What We Learned.</title>
      <description>&lt;p&gt;&lt;img src="http://blog.scoutapp.com/images/scout_logo.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://scoutapp.com"&gt;Scout, our server monitoring service&lt;/a&gt;, has grown quite a bit in 2009.&lt;/p&gt;


	&lt;p&gt;We&amp;#8217;ve documented 2 big lessons we&amp;#8217;ve learned &lt;a href="http://blog.scoutapp.com/articles/2009/10/06/we-just-undid-three-months-of-dev-work-heres-what-we-learned"&gt;on the Scout Blog&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;If you find it helpful, &lt;a href="http://news.ycombinator.com/item?id=867286"&gt;give us a vote on Hacker News&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=mHy0IYiqxSU:Ro7QzxnWWZc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=mHy0IYiqxSU:Ro7QzxnWWZc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/mHy0IYiqxSU" height="1" width="1"/&gt;</description>
      <pubDate>Wed,  7 Oct 2009 13:22:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2009/10/07/we-just-undid-three-months-of-dev-work-heres-what-we-learned</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/mHy0IYiqxSU/we-just-undid-three-months-of-dev-work-heres-what-we-learned</link>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/140</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2009/10/07/we-just-undid-three-months-of-dev-work-heres-what-we-learned</feedburner:origLink></item>
    <item>
      <title>Teaching Ruby on Rails</title>
      <description>&lt;p&gt;At last month&amp;#8217;s &lt;a href="http://www.atlrug.org/"&gt;Atlanta Ruby User Group&lt;/a&gt; (&lt;a href="http://www.meetup.com/atlantaruby/"&gt;Meetp&lt;/a&gt;), I gave a presentation on &amp;#8220;Teaching Ruby on Rails.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ve taught Ruby on Rails for the Big Nerd Ranch for almost 4 years now, and given on-site trainings all over the world, from Wells Fargo to the New York Times, to startups and even government agencies.  I&amp;#8217;ve also done this talk before at the first &lt;a href="http://www.actsasconference.com/"&gt;Acts As Conference&lt;/a&gt; (Ruby on Rails local conference in Orlando, Florida), but I have refined it a bit based on more experience teaching Rails at various organizations.&lt;/p&gt;


	&lt;p&gt;Being an effective teacher, and thus, Teaching Rails (and for that matter, any real technical programming language and framework) boils down to 4 main points:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Define Your Purpose&lt;/li&gt;
		&lt;li&gt;Know Your Audience&lt;/li&gt;
		&lt;li&gt;Give Relevant Examples&lt;/li&gt;
		&lt;li&gt;Teach How to Learn&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;We&amp;#8217;re hoping to get video of the presentation up soon, but if you just want access to the slides with notes, I&amp;#8217;ve provided them in the footnotes.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://napkin.highgroove.com/articles/2008/02/11/lessons-from-the-trenches-at-acts-as-conference"&gt;Lessons from the Trenches at Acts As Conference&lt;/a&gt; Highgroove Article on Acts As Conference Talk&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://highgroove.com/assets/Teaching%20the%20Rails%20Presentation%20with%20Notes.pdf"&gt;Teaching the Rails&lt;/a&gt; Slides and Notes from Atlanta Ruby User Group Talk&lt;/li&gt;
	&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=SPPFpeCfkPI:h5oSXnqiWQk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=SPPFpeCfkPI:h5oSXnqiWQk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/SPPFpeCfkPI" height="1" width="1"/&gt;</description>
      <pubDate>Sat, 22 Aug 2009 17:27:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2009/08/22/teaching-ruby-on-rails</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/SPPFpeCfkPI/teaching-ruby-on-rails</link>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/139</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2009/08/22/teaching-ruby-on-rails</feedburner:origLink></item>
    <item>
      <title>Apache Page Caching and Multiview</title>
      <description>&lt;p&gt;I just wanted to post a quick note to anyone searching for problems with Rails Page Caching with Apache.&lt;/p&gt;


	&lt;p&gt;We just helped a client through a tricky issue that manifested itself through some strangely generated cached files.&lt;/p&gt;


	&lt;h2&gt;The Problem&lt;/h2&gt;


	&lt;p&gt;A visit to the resource:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
http://example.com/articles
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Would correctly generate the page:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
/path/to/app/public/articles.html
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Subsequent visits would load the cached page.&lt;/p&gt;
&lt;p&gt;However, if you then tried to visit a page like:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
http://example.com/articles/2
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Where a route used that for pagination, or simply any action off that resource, you apache would try and request a file like:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
/path/to/app/public/articles.html/2.html
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;This is problematic, and does not work.&lt;/p&gt;


	&lt;p&gt;If, however, you removed the cached file and instead created the directory first, like so:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
/path/to/app/public/articles/
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;When you requested the resource:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
http://example.com/articles
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;it would correctly generate an index file:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
/path/to/app/public/articles/index.html
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;And then correctly generate any cached pages inside the directory like 2.html, 3.html for pagination (if setup in rails routes correctly).&lt;/p&gt;


	&lt;h2&gt;The Solution&lt;/h2&gt;


	&lt;p&gt;The problem was that Apache has the MultiViews option turned on.&lt;/p&gt;


	&lt;p&gt;We changed the server configuration file from this:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
&amp;lt;Location /&amp;gt;
Options All FollowSymLinks MultiViews -Indexes
&amp;lt;/Location&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;to this:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
&amp;lt;Location /&amp;gt;
Options All FollowSymLinks -Indexes
&amp;lt;/Location&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;When you remove this option from the configuration, you get the correct caching behavior, which is that requests to:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
http://example.com/articles
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Still generate the cached file:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
/path/to/app/public/articles/index.html
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;But now, requests to the slash-ending url and resources off that route:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
http://example.com/articles/
http://example.com/articles/2
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Now correctly generate a folder with an index.html and 2.html, which caches just fine.&lt;/p&gt;


	&lt;p&gt;I hope this helps someone else out!&lt;/p&gt;


	&lt;h2&gt;References&lt;/h2&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://discuss.joyent.com/viewtopic.php?id=24960"&gt;Passenger aka mod_rails delivering cached content for edit-route&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.gerd-riesselmann.net/archives/2005/04/beware-of-apaches-multiviews"&gt;Beware of Apache&amp;#8217;s MultiView&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=iG4sBRzHgLo:_c6CNyWTqbY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cleanair?a=iG4sBRzHgLo:_c6CNyWTqbY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cleanair?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/cleanair/~4/iG4sBRzHgLo" height="1" width="1"/&gt;</description>
      <pubDate>Tue,  4 Aug 2009 17:24:00 EST</pubDate>
      <guid isPermaLink="false">http://cleanair.highgroove.com/articles/2009/08/04/apache-page-caching-and-multiview</guid>
      <link>http://feedproxy.google.com/~r/cleanair/~3/iG4sBRzHgLo/apache-page-caching-and-multiview</link>
      <category>HowTo</category>
      <trackback:ping>http://cleanair.highgroove.com/articles/trackback/137</trackback:ping>
    <feedburner:origLink>http://cleanair.highgroove.com/articles/2009/08/04/apache-page-caching-and-multiview</feedburner:origLink></item>
  </channel>
</rss>
