<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Chris Johnston</title>
	<atom:link href="http://www.fuzzylizard.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fuzzylizard.com</link>
	<description>My thoughts on Agile, Java and Ruby on Rails (mostly)</description>
	<lastBuildDate>Mon, 08 Jun 2009 04:14:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ioXtreme</title>
		<link>http://www.fuzzylizard.com/archives/2009/06/08/1057/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/06/08/1057/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 04:13:48 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1057</guid>
		<description><![CDATA[I have got to get me one of these when they come out. Imagine having all of your programs starting up from scratch with the same speed as if you had maximized them. The ioXtreme is 80GB of high-performance, non-volatile storage in the form of a PCI Express card. 
There are only two problems with [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.fusionio.com/ioxtreme/">I have got to get me one of these when they come out</a>. Imagine having all of your programs starting up from scratch with the same speed as if you had maximized them. The ioXtreme is 80GB of high-performance, non-volatile storage in the form of a PCI Express card. </p>
<p>There are only two problems with it, one, it isn&#8217;t available yet and two, when it is available it will be $895USD.</p>
<p><a href="http://www.fusionio.com/ioxtreme/"><img src="http://www.fuzzylizard.com/wp-content/uploads/2009/06/ioxtreme.jpg" alt="ioXtreme 80 GB high-performance, non-volatile storage" title="ioxtreme" width="460" height="257" class="size-full wp-image-1058" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/06/08/1057/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing imperfection into websites</title>
		<link>http://www.fuzzylizard.com/archives/2009/05/06/1055/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/05/06/1055/#comments</comments>
		<pubDate>Tue, 05 May 2009 16:48:37 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1055</guid>
		<description><![CDATA[Here is an interesting article on the need to design imperfection into websites in order to make them more human and more accessible.
Elegant Web experiences walk a fine line separating simplicity (yawn) from chaos (huh?). And the rules that govern the quality of the attempt are derived from considerations of natural organization. This can still [...]]]></description>
			<content:encoded><![CDATA[<p>Here is an <a href="http://changeorder.typepad.com/weblog/2009/04/that-was-perfect-can-you-do-it-again.html">interesting article on the need to design imperfection into websites</a> in order to make them more human and more accessible.</p>
<blockquote><p>Elegant Web experiences walk a fine line separating simplicity (yawn) from chaos (huh?). And the rules that govern the quality of the attempt are derived from considerations of natural organization. This can still be elegant &#8212; as long as the chaos is modulated within a stable container, constrained by a well-designed illusion of natural order.</p></blockquote>
<blockquote><p>Great Web sites have feel &#8212; what Leonard Koren had called &#8220;heartfelt intelligence.&#8221;&#8230;Feel only comes about when you tear away the illusion of perfection.</p></blockquote>
<blockquote><p>Words are merely the leavings of our intellect, strung together into a story. The same goes for designed artifacts. The more imperfect the artifact, the more they tell of the passage of time, and the more human they become.</p></blockquote>
<blockquote><p>So a postulate I&#8217;d like to put forth is that when the proper amount of imperfection is present in a designed Web experience, it feels more human. A Web site that is more human becomes more useful, right? Here, we have to be careful. A web site is only more useful if it is elegant in its imperfection.</p></blockquote>
<p>I don&#8217;t usually include this many quotes, but with this article, a precis does a much better job then I ever could. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/05/06/1055/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML 4.01 or xHTML 1?</title>
		<link>http://www.fuzzylizard.com/archives/2009/04/29/1053/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/04/29/1053/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 15:53:29 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1053</guid>
		<description><![CDATA[Dave Shea has decided to move away from implementing websites using xHTML and is using HTML 4.01. His main reason:
I made the switch more because of overall trends. Six years ago, many of us thought XHTML would be the future of the web and we’d be living in an XML world by now. But in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mezzoblue.com/archives/2009/04/20/switched/">Dave Shea has decided to move away from implementing websites using xHTML and is using HTML 4.01</a>. His main reason:</p>
<blockquote><p>I made the switch more because of overall trends. Six years ago, many of us thought XHTML would be the future of the web and we’d be living in an XML world by now. But in the intervening time it’s become fairly apparent to myself and others that XHTML2 really isn’t going anywhere, at least not in the realm that we care about. For me, a guy who builds web sites and applications for clients that have to work in today’s browsers, XHTML2 is a non-issue. No browser support, no use to today’s web authors. End of story.</p></blockquote>
<p>This is something I have not really thought about much over the last few years. I made the switch from HTML to xHTML and haven&#8217;t really looked back. Now, I am going to have to look into this. I don&#8217;t really see anything that xHTML offers over HTML 4.01. I do like the fact that xHTML is easier to parse using an XML parser, but this is a small point given libraries like <a href="http://wiki.github.com/why/hpricot">Hpricot</a> and <a href="http://github.com/tenderlove/nokogiri/tree/master">Nokogiri</a>.</p>
<p>What do others think? Is there any reason to use xHTML over HTML 4.01?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/04/29/1053/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Time to move beyond 960?</title>
		<link>http://www.fuzzylizard.com/archives/2009/04/28/1051/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/04/28/1051/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 21:05:44 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1051</guid>
		<description><![CDATA[A width of 960 pixels has become the de facto standard for creating fixed-width web sites. Cameron Moll is asking if it is time to move beyond this width, and if so, what do we move to? I personally really like 960 as a width. It makes for easy to read lines of text and [...]]]></description>
			<content:encoded><![CDATA[<p>A width of 960 pixels has become the de facto standard for creating fixed-width web sites. <a href="http://cameronmoll.com/archives/2009/04/is_it_time_to_move_beyond_960/">Cameron Moll is asking if it is time to move beyond this width</a>, and if so, what do we move to? I personally really like 960 as a width. It makes for easy to read lines of text and helps to ensure that they don&#8217;t get too long. </p>
<p>He proposes widths of 1020, 1040, and 1080. I am not sure the extra 60 to 120 pixels will really make that big of a difference.</p>
<p>With most computer monitors now displaying 1280 or larger horizontal resolutions, it is definitely something to think about.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/04/28/1051/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multistage deployments with Capistrano</title>
		<link>http://www.fuzzylizard.com/archives/2009/04/25/1046/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/04/25/1046/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 15:52:33 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1046</guid>
		<description><![CDATA[I have been trying to set up a Capistrano script for deploying to a staging and production server. I found this very well written tutorial showing how to set up the various cap scripts to work with mod_rails (Passenger). 
One note, Capistrano does not copy over the database.yml file. You need to put this in [...]]]></description>
			<content:encoded><![CDATA[<p>I have been trying to set up a Capistrano script for deploying to a staging and production server. I found <a href="http://www.cjohansen.no/en/rails/multi_staging_environment_for_rails_using_capistrano_and_mod_rails">this very well written tutorial</a> showing how to set up the various cap scripts to work with mod_rails (Passenger). </p>
<p>One note, Capistrano does not copy over the database.yml file. You need to put this in yourself. This tripped me up for a while since I was assuming that it would somehow magically take the database.yml.template file I had and turn it into a database.yml file that I would then have to configure. The Ruby magic doesn&#8217;t extend that far <img src='http://www.fuzzylizard.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/04/25/1046/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keep CSS layout in layouts not in view pages</title>
		<link>http://www.fuzzylizard.com/archives/2009/04/16/1040/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/04/16/1040/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 01:11:43 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1040</guid>
		<description><![CDATA[When using layouts in Rails, I strongly suggest keeping as much of the container elements in the layout and using content_for to create sections in which content can be placed.
I am working on a site right now that has used the YUI Grids to layout the site (something I highly recommend for anyone designing a [...]]]></description>
			<content:encoded><![CDATA[<p>When using layouts in Rails, I strongly suggest keeping as much of the container elements in the layout and using <code>content_for</code> to create sections in which content can be placed.</p>
<p>I am working on a site right now that has used the YUI Grids to layout the site (something I highly recommend for anyone designing a site from scratch). Most of the site uses a two column layout. The <code>application.html.erb</code> file looks like this:</p>
<pre name="code" class="html">
&lt;body&gt;
  &lt;div id="doc" class="yui-t6"&gt;
    &lt;div id="hd" role="banner"&gt;
      &lt;%= render_partial "shared/header" %&gt;
    &lt;/div&gt;

    &lt;div id="bd" role="main"&gt;
      &lt;%= yield :content %&gt;
    &lt;/div&gt;

    &lt;div id="ft" role="contentinfo"&gt;
      &lt;%= render_partial "shared/footer" %&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
</pre>
<p>What is missing is the part that divides the page into your content area and your, in this case, right-hand side area. This part was placed in the rest of the view files. Not only does this mean that it is repeated everywhere and a huge pain to change, it also means that it is much harder for coders, who may not know YUI CSS Grids, to properly lay out pages. In the case of the app that I am modifying, it has also meant that parts of the CSS layout are strewn careless between regular pages and partials.</p>
<p>Instead, this is how the layout page should look:</p>
<pre name="code" class="html">
&lt;body&gt;
  &lt;div id="doc" class="yui-t6"&gt;
    &lt;div id="hd" role="banner"&gt;
      &lt;%= render_partial "shared/header" %&gt;
    &lt;/div&gt;

    &lt;div id="bd" role="main"&gt;
      &lt;div id="yui-main"&gt;
        &lt;div class="yui-b"&gt;
          &lt;div class="yui-g"&gt;
            &lt;%= yield :content %&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="yui-b"&gt;
        &lt;%= yield :side_content %&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div id="ft" role="contentinfo"&gt;
      &lt;%= render_partial "shared/footer" %&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
</pre>
<p>This keeps everything clean and makes for view pages that look like the following.</p>
<pre name="code" class="html">
&lt;% content_for :content do %&gt;
  put content here
&lt;% end %&gt;

&lt;% content_for :side_content do %&gt;
  put side content here
&lt;% end %&gt;
</pre>
<p>I think that makes it much easier to see what is happening within view pages. It also keeps all the layout code in one place.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/04/16/1040/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keep CSS clean</title>
		<link>http://www.fuzzylizard.com/archives/2009/04/14/1038/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/04/14/1038/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 04:23:07 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1038</guid>
		<description><![CDATA[I have spent the last few days working with the CSS in an existing web application. It isn&#8217;t pretty. My biggest pet peeve with it is all the special cases that exist. If you find yourself doing a lot of the following you are in for a world of hurt when it comes time to [...]]]></description>
			<content:encoded><![CDATA[<p>I have spent the last few days working with the CSS in an existing web application. It isn&#8217;t pretty. My biggest pet peeve with it is all the special cases that exist. If you find yourself doing a lot of the following you are in for a world of hurt when it comes time to redesign your site.</p>
<pre name="code" class="css">
.homepage h3 {
  some style
}
.about h3 {
}
div.box h3 {
}
</pre>
<p>My advice is to create a style guide and stick to it throughout the entire site. That way, when you use <code>h3</code> you will know exactly what it is going to look like and it will stay consistent throughout the entire web site.</p>
<p>Another side benefit of doing this is your CSS file will be greatly reduced in size and will be understandable. This will also save on download times for those visiting your site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/04/14/1038/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Filling browser with background colour using YUI Grids</title>
		<link>http://www.fuzzylizard.com/archives/2009/04/08/1035/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/04/08/1035/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 03:07:14 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1035</guid>
		<description><![CDATA[I am not sure if anyone else has had this problem, but one thing I have never liked about using Yahoo! UI Grids library is that I could never get a background colour applied to &#60;body&#62; to fill the entire background. It would only go to the bottom of the #doc div. So if that [...]]]></description>
			<content:encoded><![CDATA[<p>I am not sure if anyone else has had this problem, but one thing I have never liked about using <a href="http://developer.yahoo.com/yui/grids/">Yahoo! UI Grids</a> library is that I could never get a background colour applied to <code>&lt;body&gt;</code> to fill the entire background. It would only go to the bottom of the <code>#doc</code> div. So if that happened to be half way up your browser window you were left with half a window of white.</p>
<p>I finally figured out how to solve this. Grids, or Reset, adds a <code>background</code> CSS attribute to the <code>html</code> element. To get rid of this, and have your background fill the entire browser simply use</p>
<pre>
html {
  background: none;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/04/08/1035/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programatically adding tags to contacts in Highrise</title>
		<link>http://www.fuzzylizard.com/archives/2009/04/03/1028/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/04/03/1028/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 22:53:02 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1028</guid>
		<description><![CDATA[I have been playing with adding tags to contacts in Highrise programatically. Unfortunately, 37Signals has not added this functionality to the API for Highrise so you have to hack it in. Based on a post on adding contacts, the following code will add a single tag to a contact.

require 'rubygems'
require 'net/http'

contact_id = 12345
connection = Net::HTTP.new("your_account.highrisehq.com")
req [...]]]></description>
			<content:encoded><![CDATA[<p>I have been playing with adding tags to contacts in <a href="http://www.highrisehq.com/">Highrise</a> programatically. Unfortunately, 37Signals has not added this functionality to the API for Highrise so you have to hack it in. <a href="http://forum.37signals.com/highrise/posts/search?q=net%3A%3Ahttp">Based on a post on adding contacts</a>, the following code will add a single tag to a contact.</p>
<pre name="code" class="ruby">
require 'rubygems'
require 'net/http'

contact_id = 12345
connection = Net::HTTP.new("your_account.highrisehq.com")
req = Net::HTTP::Post.new("/parties/#{contact_id}/tags")
req["content-type"] = "application/xml"
req.basic_auth("your_api_token", 'X')
req.set_form_data({"name" => "new_or_existing_tag"}, ";")
response = connection.request(req)
puts response
</pre>
<p>This will return a bunch of JavaScript that you can ignore.</p>
<p>For comparison, here is the same code using <a href="http://railstips.org/2008/7/29/it-s-an-httparty-and-everyone-is-invited">HTTParty</a>. A very nice, easy to use library for interacting with ReST services.</p>
<pre name="code" class="ruby">
require 'rubygems'
require 'httparty'

class Tag
  include HTTParty
  base_uri "your_site.highrisehq.com"
  basic_auth 'your_api_token', 'X'

  def add_tag_to_contact(tag, contact_id)
    self.class.post("/parties/#{contact_id}/tags", :query => { :name => tag })
  end
end

puts Tag.new.add_tag_to_contact("tag_as_string", "1")
</pre>
<p>The goal of all this is to create a Highrise API wrapper that includes the ability to manipulate tags. Highrise is great, but the lack of Tags in the API really reduces what you can do with the tool since there is no facility for creating or manipulating lists.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/04/03/1028/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Let people be masters of their time</title>
		<link>http://www.fuzzylizard.com/archives/2009/03/11/1023/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/03/11/1023/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 17:16:58 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1023</guid>
		<description><![CDATA[
&#8230;if you don&#8217;t keep your smartest people fully-informed, you&#8217;re going to wind up telling them what to do. And telling knowledge workers what to do is one of the biggest causes of mistakes, waste, and general low morale that I&#8217;ve ever seen.

I really like this quote from an article about letting employees take control of [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
&#8230;if you don&#8217;t keep your smartest people fully-informed, you&#8217;re going to wind up telling them what to do. And telling knowledge workers what to do is one of the biggest causes of mistakes, waste, and general low morale that I&#8217;ve ever seen.
</p></blockquote>
<p>I really like this quote from an article about letting <a href="http://startuplessonslearned.blogspot.com/2009/03/employees-should-be-masters-of-their.html">employees take control of their time</a>. The two points I got from the article were, one, that in order to make this work, you need to give your employees ownership of the success of the company and, two, that leadership needs to be completely open about everything and tell employees not only the what but the why.</p>
<p>These two points, plus the quote above, translate directly to development teams. One of the practices of an Agile project is group ownership of the code. So if one development pair sees a problem in the code, it is their responsibility to fix it and not ignore it because it is someone elses problem. If there are bugs in the code or a project fails, then responsibility for that is shared by the entire team, not just the developers that implemented it.</p>
<p>Transparency in business decisions can be seen in the use of story cards. I worked on one project were the &#8220;so that&#8221; part of story cards was missing. We were implementing bits of functionality and not adding business value. This lead to a lot of debates with business as to why we were implementing certain things.</p>
<p>As for telling people what to do, this one drives me crazy. One project I was on, story cards were placed on a wall and given out by the tech lead. Dev pairs were not able to sign up for stories. You could request a story, but it amounted to asking for permission to work on a particular story. You could not just pick up the next story without asking if it was okay to play it first.</p>
<p>People need to feel that they are trusted and once you give them that trust, they will surprise you. Trust them, give them ownership of the project they are working on and allow them to understand both the what and the why and you will amazed at what people create, because now they are not creating something for you they are creating something for themselves.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/03/11/1023/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
