<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Agile Reasoning</title>
	
	<link>http://www.agilereasoning.com</link>
	<description>Whether Web 2.x, SaaS, or the Next Big Thing, latest techniques + Agile project mangement = Winning.</description>
	<lastBuildDate>Thu, 06 Oct 2011 17:09:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
	<div id="fb-root" />
					<script type="text/javascript">
						window.fbAsyncInit = function()
						{
							FB.init({appId: null, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AgileReasoning" /><feedburner:info uri="agilereasoning" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>AgileReasoning</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Stay Hungry. Stay Foolish.</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/aQnjcdM9WQs/</link>
		<comments>http://www.agilereasoning.com/2011/10/06/stay-hungry-stay-foolish/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 15:09:44 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Random Thoughts]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=1047</guid>
		<description><![CDATA[In 2005 Steve Jobs gave a commencement address at Stanford that ended with these words. Reading it for the first time on the morning after his passing brought me to tears, and led me to a few realizations. One is &#8230; <a href="http://www.agilereasoning.com/2011/10/06/stay-hungry-stay-foolish/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In 2005 Steve Jobs gave a <a href="http://online.wsj.com/article/SB10001424052970203388804576613572842080228.html">commencement address</a> at Stanford that ended with these words. Reading it for the first time on the morning after his passing brought me to tears, and led me to a few realizations. One is that I often keep thought to myself that I should share even though some will be offended. Those that are offended likely have the most to gain from hearing another point of view.</p>
<p>So let&#8217;s begin with this: I hate my largest current project.</p>
<p>The problem isn&#8217;t that it&#8217;s difficult, or that my client is a jerk. In fact my client is great, and the modifications I&#8217;m making are relatively simple, or at least should be. The real issue is I was handed an existing codebase that was largely written without any consideration given to maintainability. Parts of it are convoluted and fragile, although less so as I gradually clean it up.</p>
<p>The reason I hate it is I&#8217;m wasting its potential as a training ground. For all the reasons I find it tedious at times it&#8217;s the perfect environment to teach a new developer why maintainability is important. The long term value of a codebase rests on whether future developers understand the function and intent of each part so it can be adapted to ever changing business demands without undue pain and suffering.</p>
<p>Because some day soon you&#8217;ll be gone.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/10/06/stay-hungry-stay-foolish/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/aQnjcdM9WQs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/10/06/stay-hungry-stay-foolish/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/10/06/stay-hungry-stay-foolish/</feedburner:origLink></item>
		<item>
		<title>Ruby on Rails on Windows 7 using Cygwin</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/4NVFyeDHKWc/</link>
		<comments>http://www.agilereasoning.com/2011/05/25/ruby-on-rails-on-windows-7-using-cygwin/#comments</comments>
		<pubDate>Wed, 25 May 2011 13:20:24 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=1021</guid>
		<description><![CDATA[If you&#8217;re already familiar with the terminal window environment on Mac OS or Linux, here is how to setup a similar environment on Windows 7 using Cygwin. Install Cygwin Download setup.exe from from the Cygwin install page. Make note of &#8230; <a href="http://www.agilereasoning.com/2011/05/25/ruby-on-rails-on-windows-7-using-cygwin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re already familiar with the terminal window environment on Mac OS or Linux, here is how to setup a similar environment on Windows 7 using Cygwin.</p>
<h3>Install Cygwin</h3>
<ul>
<li>Download setup.exe from from the <a href="http://cygwin.com/install.html">Cygwin install</a> page. Make note of where you save it. In fact, life will be easier if you copy it to the desktop.</li>
<li>Choose &#8216;Install from Internet&#8217; on 2nd page of installer dialog.</li>
<li>Install for &#8216;All Users&#8217; and use the default &#8216;Root Directory&#8217;.</li>
<li>For &#8216;Local Package Directory&#8217;, you may take the default, but I prefer Downloads over Desktop.</li>
<li>Pick an appropriate mirror. No guidance is given on mirror location except some mirrors use country specific domain names. If unsure, US and Canadian users should pick sites ending with &#8216;com&#8217;, &#8216;net&#8217;, &#8216;org&#8217;, or &#8216;ca&#8217;.</li>
<li>Use the search dialog to find and add the following packages. This is easier if you use the View button on the right to switch the display mode to full. Use the leftmost column of the display to toggle. Note: Some packages have similar names. Select exactly these packages:
<ul>
<li>git</li>
<li>git completion</li>
<li>vim</li>
<li>rxvt</li>
<li>ruby</li>
<li>wget</li>
<li>patch</li>
<li>make</li>
<li>gcc</li>
<li>libsqlite3-devel</li>
<li>libxml2-devel</li>
<li>libxslt-devel</li>
</ul>
</li>
<li>Allow Cygwin to create a Desktop icon on completion.</li>
</ul>
<h3>Configure Cygwin</h3>
<ul>
<li>For reasons that aren&#8217;t clear to me, I needed to do the following from a Windows command prompt. Note the prompts are included for clarity.
<pre class="brush: plain; title: ; notranslate">
C:\&gt;cd \cygwin\bin
C:\cygwin\bin&gt;ash
$ /bin/rebaseall
$ exit
C:\cygwin\bin&gt;exit
</pre>
</li>
<li>Right click the Cygwin shortcut and choose edit from the menu. Change the contents to match:
<pre class="brush: plain; title: ; notranslate">@echo off
C:\cygwin\bin\rxvt -sr -sl 1500 -e C:\cygwin\bin\bash.exe --login -i</pre>
</li>
<li>Double click the Cygwin shortcut. It should launch a bash shell which can be maximized to fill the screen. The current directory should be your Cygwin home directory. Most commands after this point should be run from the bash shell. NOTE: The paste function in this window is Shift-LeftMouseClick.</li>
<li>Use `vi .vimrc` to edit your vim configuration. Here&#8217;s what I use:
<pre class="brush: plain; title: ; notranslate">set showcmd
set showmatch
set ignorecase
set smartcase
set incsearch
set hidden
set autoindent
set backup
set ruler
set expandtab
set tabstop=2
set shiftwidth=2
filetype plugin indent on
set spellfile=~/.vim/spellfile.add
set spelllang=en_us
syntax on</pre>
</li>
<li>Use `vi .bashrc` to examine your bash config and uncomment whatever aliases you typically use.</li>
<li>Use pwd to check your home dir. If the name contains a space, you may wish to rename it.
<pre class="brush: plain; title: ; notranslate">cd /home
mv &lt;oldname&gt; &lt;newname&gt;
vi /etc/passwd</pre>
<p>The last line in /etc/passwd should be your account, likely with 3 occurrences of your name. Change the first and last to match the new name from the `mv` command above. I haven&#8217;t tested what happens if your change the middle one but I bet it&#8217;s something bad. After saving your changes, exit from all terminal pages so the new setting can take effect.</li>
</ul>
<h3>Install Rubygems</h3>
<pre class="brush: plain; title: ; notranslate">
wget http://rubyforge.org/frs/download.php/74445/rubygems-1.6.2.tgz
tar -xzf rubygems-1.6.2.tgz
cd rubygems-1.6.2
ruby setup.rb
</pre>
<h3>Install Rails</h3>
<ul>
<li>gem install rails</li>
</ul>
<p>That should be it! I&#8217;ll continue to update as I learn better ways to do this.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/05/25/ruby-on-rails-on-windows-7-using-cygwin/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/4NVFyeDHKWc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/05/25/ruby-on-rails-on-windows-7-using-cygwin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/05/25/ruby-on-rails-on-windows-7-using-cygwin/</feedburner:origLink></item>
		<item>
		<title>RailsConf 2011 QR Collage</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/K_IBw9Mz0l0/</link>
		<comments>http://www.agilereasoning.com/2011/05/21/railsconf-2011-qr-collage/#comments</comments>
		<pubDate>Sat, 21 May 2011 13:36:37 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[QR]]></category>
		<category><![CDATA[RailsConf 2011 Live Blog]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=1002</guid>
		<description><![CDATA[RailsConf 2011 officially ended Thursday, and it was awesome. Knowledge, ideas, and inspiration were in abundance from beginning to end. I left with a lengthy list of tools and techniques to research. I also flew out Friday morning on zero &#8230; <a href="http://www.agilereasoning.com/2011/05/21/railsconf-2011-qr-collage/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>RailsConf 2011 officially ended Thursday, and it was awesome. Knowledge, ideas, and inspiration were in abundance from beginning to end. I left with a lengthy list of tools and techniques to research.</p>
<p>I also flew out Friday morning on zero sleep after a night of coding and fighting Twitter API limits. The immediate result was a handful of command line ruby scripts and a 700KB JPEG. The scripts will become my first 2 gems Real Soon Now™, but the image is ready to share.</p>
<p>Introducing the unofficial RailsConf 2011 QR collage, composed of Twitter avatars from the #railsconf stream. I hope you like it.</p>
<p><a href="http://d1pmh7xjvyr46d.cloudfront.net/wp-content/uploads/2011/05/RailsConf2011AvatarQR.jpg"><img class="aligncenter size-large wp-image-1003" title="RailsConf2011AvatarQR" src="http://d1pmh7xjvyr46d.cloudfront.net/wp-content/uploads/2011/05/RailsConf2011AvatarQR-1024x1024.jpg" alt="" width="640" height="640" /></a></p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/05/21/railsconf-2011-qr-collage/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/K_IBw9Mz0l0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/05/21/railsconf-2011-qr-collage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/05/21/railsconf-2011-qr-collage/</feedburner:origLink></item>
		<item>
		<title>Opening Keynote</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/S2-PN2mu72o/</link>
		<comments>http://www.agilereasoning.com/2011/05/17/opening-keynote/#comments</comments>
		<pubDate>Tue, 17 May 2011 14:17:59 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[RailsConf 2011 Live Blog]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=995</guid>
		<description><![CDATA[#RailsConf starts for real with Chad Fowler from Living Social and Ben Scofield from Heroku at the podium. They start with a few questions. They discover there are many new attendees, and a few all the way back from 2006. &#8230; <a href="http://www.agilereasoning.com/2011/05/17/opening-keynote/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>#RailsConf starts for real with Chad Fowler from Living Social and Ben Scofield from Heroku at the podium. They start with a few questions. They discover there are many new attendees, and a few all the way back from 2006. Also, many were sent by their companies. Yay!</p>
<p>A few annoucements&#8230; BohConf is said to be the un-conference to end all un-conferences. RSVP for the Change.org happy hour tonight. Later on attend Ruby Heroes awards and Bird of a Feather (BOF) sessions.</p>
<p>Video presentation for DonorsChoose.org, whose mission is to change the world for a child. Every badge holder includes a $25 gift card to get started donating. Not sure how that works yet&#8230;</p>
<p>Chad and Ben introduce David Heinemeier Hansson (DHH), creator of Rails. He&#8217;ll focus on features new to Rails 3.1, in particular Asset Pipeline.</p>
<p>He was unhappy with the many javascript files used in BaseCamp. They&#8217;re useful, but were a javascript junk drawer that needed to be managed better. His rule of thumb &#8220;&gt; 13 = :-(&#8220;! javascript_include_tag solved the problem of loading the files quickly for the user, but didn&#8217;t improve management of the codebase.</p>
<p>The solution in Ruby on Rails 3.1 is to add app/assets, lib/assets, and vendor/assets empty folder. Each contains folders for images, stylesheets, and javascripts. This structure creates a place for everything.</p>
<p>Bundler will assist in management of assets from gems and plugins. For example, the jquery-rails gem version will be managed in Gemfile. Oh BTW, jquery-rails is the new default for Rails, but switching back to Prototype is as easy as saying gem &#8216;prototype-rails&#8217;. Things such as Blueprint CSS could be bundled up and manged this way as well. No mention of if there&#8217;s a gem yet.</p>
<p>The change in javascript and the inclusion of CoffeeScript has generated lengthy and passionate discussion on GitHub. DHH recommends reading the thread, but also encourages participants to &#8220;chill the fuck out&#8221;.</p>
<p>CoffeeScript is a language that compiles into javascript, with somewhat less code written.</p>
<p>Sass is also included in Rails 3.1. It&#8217;s a pre-processor for stylesheets, and was created alongside HAML, which DHH has not embraced. Sass looks much like CSS, but includes variable and nesting. It can be combined with erb to use Ruby in Sass to write CSS. Nice!</p>
<p>DHH emphasizes that Rails will continue to include defaults. You don&#8217;t have to stay with the defaults! Sass and CoffeeScript are included in the Gemfile, but not in the Rails gem dependencies.</p>
<p>There is a new rake task called assets:precompile to help performance. Compiled assets filenames include an MD5 hash instead of tagging a request with a timestamp. The is less disruptive to deploy and works better with caching. JS and CSS compression now happen automatically.</p>
<p>Rails 3.1 Release Candidate will appear THIS WEEK during RailsConf.</p>
<p>DHH moved quickly through a few other topics.</p>
<p>BaseCamp mobile is now using Cinco. Backend uses Rails as an API. Frontend uses JavaScript with it&#8217;s own MVC framework. DHH fears this won&#8217;t promote good integration between frontend and backend long term. More to the point, he feels it promotes separate teams. node.js is another possibility, but not attractive to DHH.</p>
<p>Pjax is used to render new content in your page frame without re-rendering the layout, resulting in a speed increase. DHH is already using it, and expects to include it in Rails at some point.</p>
<p>Backbone.js is used for javascript heavy apps to create MVC-ish data structures in the browser and coordinate well with your existing app.</p>
<p>That&#8217;s it.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/05/17/opening-keynote/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/S2-PN2mu72o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/05/17/opening-keynote/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/05/17/opening-keynote/</feedburner:origLink></item>
		<item>
		<title>Tutorial Day Recap</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/smGUgMMuoHY/</link>
		<comments>http://www.agilereasoning.com/2011/05/17/tutorial-day-recap/#comments</comments>
		<pubDate>Tue, 17 May 2011 11:25:11 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[RailsConf 2011 Live Blog]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=989</guid>
		<description><![CDATA[#RailsConf tutorial day was a great success. I&#8217;m say it with confidence because unlike my last RailsConf in 2008 almost everyone in on Twitter, and no problem goes unreported. So except for minor wi-fi issues and a few comments on &#8230; <a href="http://www.agilereasoning.com/2011/05/17/tutorial-day-recap/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>#RailsConf tutorial day was a great success. I&#8217;m say it with confidence because unlike my last RailsConf in 2008 almost everyone in on Twitter, and no problem goes unreported. So except for minor wi-fi issues and a few comments on chilly temps, the day went off without a hitch. I&#8217;m sure the organizers were scrambling behind the scenes, so good job!</p>
<p>The evening events didn&#8217;t disappoint. Ignite RailsConf didn&#8217;t get rolling until 7pm, but once the flow started it was one great talk after another. Some talks were technical, some addressed life balance, but the recurring theme was community. We have an amazing group of people who make the Ruby on Rails community what is it today.</p>
<p>After Ignite wrapped up there ensued a mad dash for taxi cabs, as Max&#8217;s Taphouse held the promise of an open bar on Engine Yard&#8217;s dime. After overfilling the upstairs areas reserved for us, we spread downstairs and took over the entire establishment. I didn&#8217;t hear the damage on the tab, but all who attended owe a big thanks to Engine Yard!</p>
<p>As Day 1 begins I&#8217;m sure there are some interesting stories to hear from Max&#8217;s. There could also be stories of last night from the stage this morning, as rumor has it that DHH&#8217;s evening didn&#8217;t go entirely according to plan.</p>
<p>The conference begins this morning at 9am. If you aren&#8217;t here, you can view the <a href="http://en.oreilly.com/rails2011/public/content/video">video stream</a>, and of course I&#8217;ll be posting <a href="http://www.agilereasoning.com/tag/railsconf-2011-live-blog/">updates</a> as well.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/05/17/tutorial-day-recap/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/smGUgMMuoHY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/05/17/tutorial-day-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/05/17/tutorial-day-recap/</feedburner:origLink></item>
		<item>
		<title>Rails Best Practices</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/iDjl6oX9qF0/</link>
		<comments>http://www.agilereasoning.com/2011/05/16/rails-best-practices/#comments</comments>
		<pubDate>Mon, 16 May 2011 21:00:39 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[RailsConf 2011 Live Blog]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=978</guid>
		<description><![CDATA[Notes from #RailsConf tutorial by Gregg Pollack from Envy Labs. Great presentation on a sometimes contentious subject, with an easy to follow slide deck. Useful advice for journeyman and above coders, and some great &#8216;discussion starters&#8217; as well. Made excellent &#8230; <a href="http://www.agilereasoning.com/2011/05/16/rails-best-practices/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Notes from #RailsConf <a href="http://en.oreilly.com/rails2011/public/schedule/detail/18656">tutorial by Gregg Pollack</a> from <a href="http://envylabs.com/">Envy Labs</a>. Great presentation on a sometimes contentious subject, with an easy to follow <a href="http://courseware.codeschool.com/Rails_Best_Practices_Slides.pdf">slide deck</a>. Useful advice for journeyman and above coders, and some great &#8216;discussion starters&#8217; as well.</p>
<p>Made excellent use of the CodeSchool <a href="http://www.codeschool.com/courses/rails-best-practices">Ruby Best Practices</a> course, which was free to attendees of the talk. Pretty slick stuff. Worth checking out <a href="http://www.codeschool.com/">CodeSchool</a> even if this isn&#8217;t the course for you.</p>
<p>Note that many of the techniques presented use new Rails 3 goodness and won&#8217;t apply in older version.</p>
<p>An overview, with a few observations:</p>
<ul>
<li>Use fat controller/skinny model to maintain good linkage between model data and methods performed on it.</li>
<li>Use named scope to keep complex queries out of controller code, including examples using default_scope, unscoped, and why/when you need to use lambda.</li>
<li>Ruby 1.9 block can include defaults, e.g.
<pre class="brush: ruby; title: ; notranslate">scope :trending, lambda { |num = nil| where('started_trending &gt; ?', 1.day.ago) }</pre>
</li>
<li>Several ways to reduce code duplication for find methods in RESTful controllers. Slides reasoned via circular logic. Needed to use KISS method here.</li>
<li>Use accepts_nested_attributes_for to simplify controller logic on nested forms.</li>
<li>Example of using a non-Rails class capable of taking the place of an ActiveRecord model for items such as a contact form.</li>
<li>Use presenter classes to clean up controllers that must do many different find, by making each find into a presenter method and instantiating the presenter using the &#8216;master&#8217; object the controller is acting on.</li>
<li>Use ActiveSupport::Memoizable instead of things like:
<pre class="brush: ruby; title: ; notranslate">@cache ||= Model.find_by_foo('bar')</pre>
</li>
<li>Be smart about indexing. Avoid adding unneeded indexes. In fact, I say don&#8217;t add them without real-world usage pattern to prove you need it.</li>
<li>Use attr_protected, or better yet attr_accessible</li>
<li>Let the database handle default value by putting them in your migrations.</li>
<li>Gave examples good use of callbacks and more concise validations.</li>
<li>Talked about db/seed.rb. He&#8217;s a fan. I&#8217;m not so sure.</li>
<li>Avoid using find in a loop. Use :includes instead.</li>
<li>Use counter_cache when needed for performance.</li>
<li>Use #find_each to perform long-running tasks in batches of 1000.</li>
<li>Override #to_s where appropriate instead of something like #display_name.</li>
<li>Getting the queries out of your views and into your controllers.</li>
<li>Using helpers to generate proper html in a dry fashion.</li>
<li>Good examples of using partials cleanly.</li>
<li>Really interesting stuff on use of yield and content_for in layouts and views.</li>
</ul>
<p>Need to emphasize again the slide deck was outstanding. It doesn&#8217;t contain the hilarious sound effects, but well worth reviewing.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/05/16/rails-best-practices/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/iDjl6oX9qF0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/05/16/rails-best-practices/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/05/16/rails-best-practices/</feedburner:origLink></item>
		<item>
		<title>HTML5 – Beyond the Buzzwords</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/Yumjlj6SdOY/</link>
		<comments>http://www.agilereasoning.com/2011/05/16/html5-beyond-the-buzzwords/#comments</comments>
		<pubDate>Mon, 16 May 2011 15:39:03 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[RailsConf 2011 Live Blog]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=974</guid>
		<description><![CDATA[Notes from tutorial by Mike Subelsky. Very hands on as we all work through his examples. Browsers are more capable than we&#8217;re use to them being. Features that used to require external dependencies now can be done easily right in &#8230; <a href="http://www.agilereasoning.com/2011/05/16/html5-beyond-the-buzzwords/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Notes from <a href="http://en.oreilly.com/rails2011/public/schedule/detail/18321">tutorial by Mike Subelsky</a>. Very hands on as we all work through his <a href="http://github.com/subelsky/html5tutorial/zipball/master">examples</a>.</p>
<p>Browsers are more capable than we&#8217;re use to them being. Features that used to require external dependencies now can be done easily right in the html. Purpose of tutorial is to explore features many of us are not familiar with and expand our imagination of what&#8217;s possible.</p>
<p>Implementation of HTML5 features varies among browsers. The appropriateness of a given feature depends on the scope of your audience. Resources such as <a href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills">Polyfills</a> help you to fallback gracefully.</p>
<p>The <a href="http://www.modernizr.com/">Modernizr</a> library performs feature detection and edits the class attribute of the &lt;html&gt; element, allowing you to style your page based on browser capabilities.</p>
<p>Canvas exposes a rich set of drawing tools similar to rmagick. Demonstrated using 4 exercises including animation. Live example of use is <a href="http://playbiolab.com/">Biolab Disaster</a>, a game with Flash-like action but coded in javascript/HTML5.</p>
<p>WebSocket allows open connections for message send/receive in real time. Multi-user gameplay example was used to demonstrate. Firefox and Opera have disabled support for WebSocket due to <a href="http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/">protocol security concerns</a>.</p>
<p>Embedded Media allow sound and video retrieval with or without immediate display of control. Playback can be initiated as needed.</p>
<p>Geolocation uses external services to make the approximate location of the user available. Requires an affirmative user action due to privacy concerns.</p>
<p>Web Workers allow background tasks to chug away while the UI continues to function normally. Results of a task can take effect when complete.</p>
<p>Offline Apps techniques use an app manifest to inform the browser of all the resources needed. On reload the manifest is checked and no resources are downloaded if the manifest is unchanged. This technique can be used to make an HTML5 app &#8220;installable&#8221; on a smart phone.</p>
<h2>USEFUL URLs</h2>
<ul>
<li><a href="http://diveintohtml5.org/">Dive Into HTML5</a></li>
<li><a href="http://html5doctor.com/">HTML5 Doctor</a></li>
<li><a href="http://html5demos.com/">HTML5 Demos</a></li>
<li><a href="http://www.html5rocks.com/">HTML5 Rocks</a></li>
<li><a href="https://developer.mozilla.org/en/Canvas_tutorial">Mozilla Canvas Tutorials</a></li>
<li><a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">WHATWG Living Standard</a></li>
</ul>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/05/16/html5-beyond-the-buzzwords/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/Yumjlj6SdOY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/05/16/html5-beyond-the-buzzwords/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/05/16/html5-beyond-the-buzzwords/</feedburner:origLink></item>
		<item>
		<title>Nginx SSL config for PCI Compliance</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/2SkJg4VhFGU/</link>
		<comments>http://www.agilereasoning.com/2011/05/14/nginx-ssl-config-for-pci-compliance/#comments</comments>
		<pubDate>Sat, 14 May 2011 11:47:33 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[PCI Compliance]]></category>
		<category><![CDATA[Phusion Passenger]]></category>
		<category><![CDATA[Ruby on Rails Hosting]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=941</guid>
		<description><![CDATA[Our current preferred setup for Ruby on Rails hosting is Phusion Passenger aka mod_rails on the Nginx web server. However, the default configuration of Nginx SSL isn&#8217;t PCI compliant. To pass a PCI certification scan requires a couple simple changes &#8230; <a href="http://www.agilereasoning.com/2011/05/14/nginx-ssl-config-for-pci-compliance/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://d1pmh7xjvyr46d.cloudfront.net/wp-content/uploads/2011/05/nginx.gif"><img class="alignright size-full wp-image-959" title="nginx" src="http://d1pmh7xjvyr46d.cloudfront.net/wp-content/uploads/2011/05/nginx.gif" alt="" width="150" height="50" /></a>Our current preferred setup for Ruby on Rails hosting is <a href="http://www.modrails.com/">Phusion Passenger</a> aka mod_rails on the Nginx web server. However, the default configuration of Nginx SSL isn&#8217;t PCI compliant. To pass a PCI certification scan requires a couple simple changes to disallow insecure protocols and ciphers.</p>
<h4>Default Nginx SSL settings:</h4>
<pre class="brush: plain; title: ; notranslate">
ssl                       on;
ssl_certificate           cert.pem;
ssl_certificate_key       cert.key;
ssl_session_timeout       5m;
ssl_protocols             SSLv2 SSLv3 TLSv1;
ssl_ciphers               ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
</pre>
<h4>Change ssl_protocols and ssl_ciphers like so:</h4>
<pre class="brush: plain; title: ; notranslate">
ssl_protocols             SSLv3 TLSv1;
ssl_ciphers               HIGH:!ADH:!EXPORT56;
</pre>
<p>Seriously, that&#8217;s it! But if you&#8217;re interest in understanding exactly what these settings mean, see the <a href="http://www.openssl.org/docs/apps/ciphers.html">OpenSSL</a> docs.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/05/14/nginx-ssl-config-for-pci-compliance/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/2SkJg4VhFGU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/05/14/nginx-ssl-config-for-pci-compliance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/05/14/nginx-ssl-config-for-pci-compliance/</feedburner:origLink></item>
		<item>
		<title>RailsConf 2011 Preview</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/dhiJoxZpSNU/</link>
		<comments>http://www.agilereasoning.com/2011/05/12/railsconf-2011-preview/#comments</comments>
		<pubDate>Thu, 12 May 2011 12:59:44 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[RailsConf 2011 Live Blog]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=923</guid>
		<description><![CDATA[Monday marks the beginning of RailsConf 2011 in Baltimore. It&#8217;s the largest conference of the year for Ruby on Rails developers, with projected attendance of 1200+. RailsConf 2011 Co-presented by O&#8217;Reilly and Ruby Central, the conference features: Four entire days &#8230; <a href="http://www.agilereasoning.com/2011/05/12/railsconf-2011-preview/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://d1pmh7xjvyr46d.cloudfront.net/wp-content/uploads/2011/05/rails2011_header.gif"><img class="aligncenter size-full wp-image-924" title="Rails 2011 banner" src="http://d1pmh7xjvyr46d.cloudfront.net/wp-content/uploads/2011/05/rails2011_header.gif" alt="" width="607" height="68" /></a>Monday marks the beginning of <a href="http://en.oreilly.com/rails2011">RailsConf 2011</a> in Baltimore. It&#8217;s the largest conference of the year for Ruby on Rails developers, with projected attendance of 1200+.</p>
<h2>RailsConf 2011</h2>
<p>Co-presented by O&#8217;Reilly and Ruby Central, the conference features:</p>
<ul>
<li>Four entire days dedicated to Ruby on Rails</li>
<li>A program designed around all levels of expertise from beginner to intermediate to advanced</li>
<li>The most innovative and successful Rails experts and companies showcased onstage</li>
<li>A forum for people seeking to collaborate and solve similar problems</li>
<li>A gathering place for the worldwide Rails community, including an important network of experts, alpha geeks, and innovators</li>
<li>Hands-on and in-depth guides for learning how to best employ Rails in a variety of situations and tackle common problems</li>
<li>Ample opportunities for all participants to connect, contribute, and collaborate throughout the event</li>
<li>The chance to hear the latest updates, get information, and meet some of the the Rails core development team</li>
</ul>
<h2>Highlights</h2>
<h3>Monday</h3>
<p>The daytime is primarily devoted to training, with morning and afternoon sessions for novice and experienced developers alike. It also marks the beginning of the parallel BohConf, the official unconference of RailsConf 2011.</p>
<p>At night the fireworks start with <a href="http://igniterailsconf.com/">Ignite RailsConf</a>. 15 speakers, 5 minutes and 20 slides each, with an after-party sponsored by <a href="http://www.engineryard.com/">EngineYard</a>.</p>
<h3>Tuesday</h3>
<p>The conference begins for real. Morning keynote by David Heinemeier Hansson aka DHH (37 Signals). Evening keynote by Eric Ries (Lessons Learned). The schedule runs from 9am-8pm, followed by Birds of a Feather (BoF) sessions until 10pm.</p>
<p>Social events include the Change.org Happy Hour (<a href="http://changeorg.eventbrite.com/">free tickets</a>), and the <a href="http://twitter.com/BlueBox">@BlueBox</a> <a href="http://twitter.com/NewRelic">@NewRelic</a> <a href="http://twitter.com/PivotalLabs">@PivotalLabs</a> gathering at Alewife 9-11pm.</p>
<h3>Wednesday</h3>
<p>Another solid 9am-8pm day. Morning keynotes by Nic Williams (EngineYard) and Aaron Patterson (AT&amp;T Interactive). Evening plenary with Guy Steele (Oracle Labs) and Richard Gabriel (IBM Research).</p>
<p>The party of the evening is possibly the GitHub drinkup, 8:30pm at Pratt Street Ale House across the street from the convention center.</p>
<h3>Thursday</h3>
<p>The final day of the conference, from 9am-4pm. Morning plenaries with Aaron Batalion (LivingSocial), Corey Haines (Corey Haines), and Dan Melton (Code for America). Closing keynotes by Glenn Vanderburg (LivingSocial) and Chad  Dickerson (Etsy). Today is also the last day of BohConf.</p>
<h3>Full Schedule</h3>
<p>These are only the highlights, so here&#8217;s the <a href="http://en.oreilly.com/rails2011/public/schedule/grid">full schedule</a>. RailsConf 2011 keeps 5 rooms busy in every time slot, and there are opportunities to learn in every one. Highly recommended if you&#8217;re a Ruby on Rails developer.</p>
<h2>RailsConf 2011 Live Blog</h2>
<p>I&#8217;ll be posting frequently throughout the 4 days of RailsConf. Subscribe via <a href="http://www.facebook.com/AgileReasoning">Facebook</a>, <a href="http://feeds.feedburner.com/AgileReasoning">RSS</a>, or <a href="http://twitter.com/AgileReasoning">Twitter</a> to hear the latest revelations from DHH and find out which booths give away the coolest swag!</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/05/12/railsconf-2011-preview/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/dhiJoxZpSNU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/05/12/railsconf-2011-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/05/12/railsconf-2011-preview/</feedburner:origLink></item>
		<item>
		<title>Agile Management Tip – Stop Hiring Employees</title>
		<link>http://feedproxy.google.com/~r/AgileReasoning/~3/_0dbgm6lxH8/</link>
		<comments>http://www.agilereasoning.com/2011/05/10/agile-management-tip-stop-hiring-employees/#comments</comments>
		<pubDate>Tue, 10 May 2011 11:53:40 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
				<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Strategy]]></category>

		<guid isPermaLink="false">http://www.agilereasoning.com/?p=879</guid>
		<description><![CDATA[Agile management produces fast flexible responses to opportunities and threats. Your company&#8217;s structure and culture determine your flexibility. Increase your agility to improve your chances of survival. Agile Management Friday&#8217;s Techpoint event focused on &#8220;Building an Agile Company&#8221;. Speaking were &#8230; <a href="http://www.agilereasoning.com/2011/05/10/agile-management-tip-stop-hiring-employees/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-890  alignright" title="Pommel Horse" src="http://d1pmh7xjvyr46d.cloudfront.net/wp-content/uploads/2011/05/PommelHorse-150x150.png" alt="Agile Management illustrated by stick figure on pommel horse" width="150" height="150" />Agile management produces fast flexible responses to opportunities and threats. Your company&#8217;s structure and culture determine your flexibility. Increase your agility to improve your chances of survival.</p>
<h2>Agile Management</h2>
<p>Friday&#8217;s <a href="http://www.techpoint.org/">Techpoint</a> event focused on &#8220;Building an Agile Company&#8221;. Speaking were <a href="http://newsinfo.iu.edu/sb/page/normal/815.html">Daniel DeHayes</a>, Professor Emeritus of Business  Administration at the Kelley School of Business at Indiana University, and  Delphia Croft, the Managing Principal of Solution Revolution  Consulting. Their talk was both enlightening and thought provoking, and was followed by a lively Q&amp;A session.</p>
<p><strong>Summary:</strong> In order to build companies capable of bold, quick, aggressive moves, leadership must foster a culture that <em>embraces change</em>. Hire folks who thrive without rigid structure, and push decision making to the front lines. Resist the temptation to bulk up your payroll, instead using 1099&#8242;s project by project. Avoid capital investment in rapidly changing categories; rent/lease/outsource what you need today instead. Keep your processes simple, because <em>speed wins</em>!</p>
<h2>Agility Killers</h2>
<ul>
<li>Hierarchical decision making will kill you. Witness the paralysis of Tepco while handling the crisis at their Fukushima nuclear power plant.</li>
<li>Reliance on long term strategic planning systems rob you of your ability to capitalize on an emerging opportunity.</li>
<li>Don&#8217;t let budgets become a goal rather than a means to an end. Use rolling projections instead.</li>
<li>Detailed job descriptions put your team members in a box.</li>
</ul>
<h2>Steps to take NOW</h2>
<ul>
<li>Be a fast adopter.</li>
<li>Be intentional all the time — proactive, committed, audacious, focused.</li>
<li>Use real-time data in making decisions.</li>
<li>Reduce complexity in your processes.</li>
<li>Use 1099&#8242;s instead of W2&#8242;s where possible.
<ul>
<li>Pay for output, not hours.</li>
<li>Focus on mastery rather than warm bodies.</li>
<li>Move from managing people to managing contracts.</li>
</ul>
</li>
<li>Be very wary about taking on debt or growing &#8216;at any cost&#8217;.</li>
</ul>
<p><em>Agile Management is about winning tomorrow, not blindly repeating what worked yesterday.</em></p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.agilereasoning.com/2011/05/10/agile-management-tip-stop-hiring-employees/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div><img src="http://feeds.feedburner.com/~r/AgileReasoning/~4/_0dbgm6lxH8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agilereasoning.com/2011/05/10/agile-management-tip-stop-hiring-employees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agilereasoning.com/2011/05/10/agile-management-tip-stop-hiring-employees/</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/43 queries in 0.716 seconds using disk: basic
Object Caching 1093/1192 objects using disk: basic
Content Delivery Network via Amazon Web Services: CloudFront: d1pmh7xjvyr46d.cloudfront.net

Served from: www.agilereasoning.com @ 2012-02-04 07:41:06 -->

