<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Tate Johnson</title>
 
 <link href="http://tatey.com/" />
 <updated>2009-11-11T20:45:31+10:00</updated>
 <id>http://tatey.com/</id>
 <author>
   <name>Tate Johnson</name>
   <email>tate@tatey.com</email>
 </author>
 
 
 <link rel="self" href="http://feeds.feedburner.com/tatejohnson" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
   <title>What I aspire to in minimal web design</title>
   <link href="http://tatey.com/2009/11/10/what-i-aspire-to-in-minimal-web-design.html" />
   <updated>2009-11-10T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/11/10/what-i-aspire-to-in-minimal-web-design</id>
   <content type="html">&lt;p&gt;&lt;a href='http://blog.hypsometry.com/'&gt;&lt;img src='/images/posts/2009-11-10-what-i-aspire-to-in-minimal-web-design/hypsometry.jpg' alt='The Hypsometry Blog, by Christopher Boone' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://diveintohtml5.org/'&gt;&lt;img src='/images/posts/2009-11-10-what-i-aspire-to-in-minimal-web-design/diveintohtml5.jpg' alt='Dive Into HTML5' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Constantly impressed with what I find in the &lt;a href='http://wiki.github.com/mojombo/jekyll/sites'&gt;Sites&lt;/a&gt; page on the Jekyll wiki (and my inbox).&lt;/p&gt;

&lt;h4 id='updated_11_nov_2009'&gt;Updated 11 Nov 2009&lt;/h4&gt;

&lt;p&gt;&lt;a href='http://informationarchitects.jp/100e2r/'&gt;The 100% Easy-2-Read Standard&lt;/a&gt; is a fantastic foundation for designing a website. Wishing I read this earlier.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/zjNb58I5m3E" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Quotes is a Sinatra application for browsing and submitting IRC quotes</title>
   <link href="http://tatey.com/2009/11/02/quotes-is-a-sinatra-application-for-browsing-and-submitting-irc-quotes.html" />
   <updated>2009-11-02T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/11/02/quotes-is-a-sinatra-application-for-browsing-and-submitting-irc-quotes</id>
   <content type="html">&lt;p&gt;Having frequented IRC since 1999, I&amp;#8217;ve always been disappointed with existing &lt;a href='http://www.quoteirc.com/'&gt;quote&lt;/a&gt; &lt;a href='http://www.ircquote.org/'&gt;submission applications&lt;/a&gt; for their &lt;a href='http://bash.org/'&gt;ugliness&lt;/a&gt;. Itching to try out &lt;a href='http://www.sinatrarb.com/'&gt;Sinatra&lt;/a&gt;, &lt;a href='http://sequel.rubyforge.org/'&gt;Sequel&lt;/a&gt; and &lt;a href='http://jquery.com/'&gt;jQuery&lt;/a&gt; I started (re)writing Quotes &lt;a href='http://twitter.com/tatejohnson/status/4915592887'&gt;last coding night&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From the code, to the design and ultimately the user experience; the objective of Quotes was to be simple. I wanted users to receive immediate feedback for any action that&amp;#8217;s performed. I want quotes to be so pretty that you&amp;#8217;d scroll up and down the page a couple of times.&lt;/p&gt;

&lt;p&gt;It has a tiny footprint. There&amp;#8217;s only three models, a few actions and a couple of views. Without caching it&amp;#8217;s still fast to load on a resource limited environment, such as DreamHost. Sinatra was a perfect match for this tiny project.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://github.com/tatey/quotes'&gt;Code&lt;/a&gt; is on GitHub and you can view a &lt;a href='http://quotes.tatey.com/'&gt;live example of the application&lt;/a&gt;. Thanks to #lolbot on irc.freenode.com for the motivation, &lt;a href='http://ash.ms/'&gt;Ashley Kyd&lt;/a&gt; for the concept and &lt;a href='http://klepas.org/'&gt;Pascal Klein&lt;/a&gt; for the initial design.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/10r0rEQcp0w" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Simpler deployment for Jekyll using a Rakefile and rsync</title>
   <link href="http://tatey.com/2009/10/29/simpler-deployment-for-jekyll-using-a-rakefile-and-rsync.html" />
   <updated>2009-10-29T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/10/29/simpler-deployment-for-jekyll-using-a-rakefile-and-rsync</id>
   <content type="html">&lt;p&gt;Earlier &lt;a href='/2009/04/29/jekyll-meets-dreamhost-automated-deployment-for-jekyll-with-git.html'&gt;I wrote about using Git and its post-receive hooks for deployment&lt;/a&gt;. After using this configuration for six months, I&amp;#8217;ve concluded that it&amp;#8217;s unnecessarily complicated for my requirements. &lt;a href='http://appden.com/personal/journey-to-jekyll/'&gt;Scott Kyle&lt;/a&gt; and &lt;a href='http://www.benlog.org/2009/10/8/blog-now-powered-by-jekyll/'&gt;Ben Vinegar&lt;/a&gt; agree.&lt;/p&gt;

&lt;p&gt;Using such a configuration makes perfect sense for projects residing on GitHub. The repository already exists, and it&amp;#8217;s a complimentary service that you don&amp;#8217;t have to configure.&lt;/p&gt;

&lt;p&gt;In future, when someone asks me how they should deploy Jekyll, I will recommend using a &lt;a href='http://github.com/tatey/tatey.com/blob/master/Rakefile'&gt;Rakefile&lt;/a&gt; and rsync.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ rake deploy&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Thanks to Scott Kyle for sharing his &lt;a href='http://github.com/appden/appden.github.com/blob/master/Rakefile'&gt;Rakefile&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id='updated_02_nov_2009'&gt;Updated 02 Nov 2009&lt;/h4&gt;

&lt;p&gt;&lt;a href='http://wulfovitch.de/'&gt;Wolfgang König&lt;/a&gt; brought to my attention that you can exclude files from being copied in the build using the exclude option. I&amp;#8217;ve appended this to _config.yml.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;exclude: [&amp;#39;Rakefile&amp;#39;, &amp;#39;README.markdown&amp;#39;]&lt;/code&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/QcahFXaARuI" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Favourite photos from holiday to the United States</title>
   <link href="http://tatey.com/2009/10/07/favourite-photos-from-holiday-to-the-united-states.html" />
   <updated>2009-10-07T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/10/07/favourite-photos-from-holiday-to-the-united-states</id>
   <content type="html">&lt;ul class='images'&gt;
  &lt;li&gt;&lt;a href='http://www.flickr.com/photos/tatejohnson/3965214768/'&gt;&lt;img src='http://farm3.static.flickr.com/2560/3965214768_8d886e4c72_t.jpg' alt='' /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href='http://www.flickr.com/photos/tatejohnson/3965212388/'&gt;&lt;img src='http://farm3.static.flickr.com/2626/3965212388_ba34281d73_t.jpg' alt='' /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href='http://www.flickr.com/photos/tatejohnson/3967441687/'&gt;&lt;img src='http://farm3.static.flickr.com/2499/3967441687_f2041e8b5e_t.jpg' alt='' /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href='http://www.flickr.com/photos/tatejohnson/3968275424/'&gt;&lt;img src='http://farm3.static.flickr.com/2596/3968275424_765e4d1534_t.jpg' alt='' /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href='http://www.flickr.com/photos/tatejohnson/3967462695/'&gt;&lt;img src='http://farm3.static.flickr.com/2516/3967462695_aa175b610b_t.jpg' alt='' /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href='http://www.flickr.com/photos/tatejohnson/3946456902/'&gt;&lt;img src='http://farm3.static.flickr.com/2476/3946456902_a2833ec203_t.jpg' alt='' /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href='http://www.flickr.com/photos/tatejohnson/3958303537/'&gt;&lt;img src='http://farm3.static.flickr.com/2446/3958303537_7ca0a37b9d_t.jpg' alt='' /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href='http://www.flickr.com/photos/tatejohnson/3958302527/'&gt;&lt;img src='http://farm3.static.flickr.com/2524/3958302527_bb9fe7ff12_t.jpg' alt='' /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class='clear_both' /&gt;
&lt;p&gt;You can browse the entire &lt;a href='http://www.flickr.com/photos/tatejohnson/collections/72157622511027402/'&gt;United States 2009&lt;/a&gt; collection on Flickr.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/CXJRUprfi-I" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>A quick comparison of American and Australian slang</title>
   <link href="http://tatey.com/2009/10/06/a-quick-comparison-of-american-and-australian-slang.html" />
   <updated>2009-10-06T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/10/06/a-quick-comparison-of-american-and-australian-slang</id>
   <content type="html">&lt;p&gt;Even though english is the de facto language of the United States and Australia, I&amp;#8217;ve always been interested in the subtle differences of slang between other english speaking countries.&lt;/p&gt;

&lt;p&gt;While in the United States, I compiled a list of common words or phrases which were unknown to me, even with exposure to American media.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;United States&lt;/th&gt;&lt;th&gt;Australia&lt;/th&gt;&lt;th&gt;In a sentence&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style='text-align: left;'&gt;Sandwich&lt;/td&gt;&lt;td style='text-align: left;'&gt;Burger&lt;/td&gt;&lt;td style='text-align: left;'&gt;Extra melted cheese on my &lt;em&gt;sandwhich&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style='text-align: left;'&gt;Grill&lt;/td&gt;&lt;td style='text-align: left;'&gt;Barbecue&lt;/td&gt;&lt;td style='text-align: left;'&gt;Throw a steak on the &lt;em&gt;grill&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style='text-align: left;'&gt;Pitcher&lt;/td&gt;&lt;td style='text-align: left;'&gt;Jug&lt;/td&gt;&lt;td style='text-align: left;'&gt;I&amp;#8217;ll have a &lt;em&gt;pitcher&lt;/em&gt; of beer&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style='text-align: left;'&gt;The check&lt;/td&gt;&lt;td style='text-align: left;'&gt;The bill&lt;/td&gt;&lt;td style='text-align: left;'&gt;Could we have the &lt;em&gt;check&lt;/em&gt; for the table?&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style='text-align: left;'&gt;To-go&lt;/td&gt;&lt;td style='text-align: left;'&gt;Take-away&lt;/td&gt;&lt;td style='text-align: left;'&gt;A smoothie &lt;em&gt;to-go&lt;/em&gt;, please&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style='text-align: left;'&gt;Single&lt;/td&gt;&lt;td style='text-align: left;'&gt;One dollar&lt;/td&gt;&lt;td style='text-align: left;'&gt;Do you have a &lt;em&gt;single&lt;/em&gt;?&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style='text-align: left;'&gt;Elevator&lt;/td&gt;&lt;td style='text-align: left;'&gt;Lift&lt;/td&gt;&lt;td style='text-align: left;'&gt;&lt;em&gt;Elevator&lt;/em&gt; doors are closing, quick!&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;This list does not attempt to be a comprehensive or accurate comparison.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/vLhSOXzP7w8" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>My desktop was minimal before migrating to OS X</title>
   <link href="http://tatey.com/2009/09/20/my-desktop-was-minimal-before-migrating-to-os-x.html" />
   <updated>2009-09-20T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/09/20/my-desktop-was-minimal-before-migrating-to-os-x</id>
   <content type="html">&lt;p&gt;It&amp;#8217;s possible to achieve a minimal Linux desktop, even if you&amp;#8217;re unlikely to see one.&lt;/p&gt;

&lt;h3 id='gnome_with_openbox'&gt;GNOME with OpenBox&lt;/h3&gt;

&lt;p&gt;&lt;a href='http://tatey86.deviantart.com/art/My-desktop-for-February-2007-48042475'&gt;&lt;img src='/images/posts/2009-09-20-my-desktop-was-minimal-before-migrating-to-os-x/My_desktop_for_February_2007_by_Tatey86.png' alt='Minimal OpenBox desktop' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id='gnome_with_beryl_compiz'&gt;GNOME with Beryl (Compiz)&lt;/h3&gt;

&lt;p&gt;&lt;a href='http://tatey86.deviantart.com/art/My-desktop-for-November-45348999'&gt;&lt;img src='/images/posts/2009-09-20-my-desktop-was-minimal-before-migrating-to-os-x/My_desktop_for_November_by_Tatey86.jpg' alt='Minimal GNOME desktop' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do you really need your processor utilisation, network traffic and weather sitting in your panel? It&amp;#8217;s like you&amp;#8217;re supporting the minority use case a majority of the time. As an end user, you shouldn&amp;#8217;t care how much your processor is being utilised. If you really want to know the weather, take a look out the window.&lt;/p&gt;

&lt;p&gt;Panels and task lists are redundant. Looking at the desktop, it&amp;#8217;s easy to identify which applications are at your disposal. When in doubt, Beryl supported an expos&amp;#233;-like feature.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/H6gPhWPeJ5Y" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Holiday to the United States</title>
   <link href="http://tatey.com/2009/09/08/holiday-to-the-united-states.html" />
   <updated>2009-09-08T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/09/08/holiday-to-the-united-states</id>
   <content type="html">&lt;p&gt;Three months ago it was spontaneously suggested that two mates ought to travel overseas. Had the suggestion occurred over IRC, it may have looked like this.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#60;Tate&amp;#62; Hey Jeff, do you want to go to the United States?&lt;br /&gt; &amp;#60;Jeff&amp;#62; Sure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On the 20th of September, Jeff and I will be travelling to the United States for two weeks starting in Los Angeles, California.&lt;/p&gt;

&lt;p&gt;Using a combination of &lt;a href='http://google.com'&gt;Google&lt;/a&gt;, &lt;a href='http://twitter.com/'&gt;Twitter&lt;/a&gt;, &lt;a href='http://maps.google.com/'&gt;Google Maps&lt;/a&gt;, &lt;a href='http://en.wikipedia.org/'&gt;Wikipedia&lt;/a&gt; and &lt;a href='http://vark.com/'&gt;Aardvark&lt;/a&gt; we booked hotels, flights and tours.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve put together a map with the cities and national parks we&amp;#8217;ll be travelling to.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://maps.google.com/maps/ms?hl=en&amp;amp;geocode=&amp;amp;time=&amp;amp;date=&amp;amp;ttype=&amp;amp;ie=UTF8&amp;amp;msa=0&amp;amp;msid=104398371352515838108.000472e8acf54a581e43d&amp;amp;ll=36.368222,-117.729492&amp;amp;spn=10.201435,19.753418&amp;amp;z=6'&gt;&lt;img src='/images/posts/2009-09-08-holiday-to-the-united-states/us_holiday_2009_map.png' alt='Map' /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/Nyi64KwypRs" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Observing escalator etiquette</title>
   <link href="http://tatey.com/2009/08/15/observing-escalator-etiquette.html" />
   <updated>2009-08-15T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/08/15/observing-escalator-etiquette</id>
   <content type="html">&lt;p&gt;When using an escalator in Taiwan, you&amp;#8217;re expected to stand on the right unless you intend to pass quickly. It&amp;#8217;s a simple concept that everyone is already familiar with from driving (Taiwanese drive on the right). More importantly, observing escalator etiquette results in increased efficiency with large crowds.&lt;/p&gt;

&lt;p&gt;Casual commuters remain to one side of the escalator, allowing other commuters to pass without hindrance. Escalator etiquette is win-win.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.flickr.com/photos/poagao/3611570404/'&gt;&lt;img src='/images/posts/2009-08-15-observing-escalator-etiquette/escalator_redux.jpg' alt='Escalator redux' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since returning from Taiwan I have continued to observe escalator etiquette, even if it hasn&amp;#8217;t been adopted in this country. It&amp;#8217;s easy, you ought to observe it too.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/bCZB8fuVmh4" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Don't know C# and love programming? Get on Stack Overflow</title>
   <link href="http://tatey.com/2009/08/13/dont-know-c-sharp-and-love-programming-get-on-stack-overflow.html" />
   <updated>2009-08-13T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/08/13/dont-know-c-sharp-and-love-programming-get-on-stack-overflow</id>
   <content type="html">&lt;p&gt;Ryan Bates on Stack Overflow &lt;a href='http://twitter.com/rbates/status/3270391247'&gt;via Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I would like to see more Rails developers on &lt;a href='http://stackoverflow.com/'&gt;http://stackoverflow.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Great to see a &lt;a href='http://railscasts.com/'&gt;high profile Rails developer&lt;/a&gt; encouraging all Rails developers to start asking and answering questions on &lt;a href='http://stackoverflow.com/'&gt;Stack Overflow&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a step in the right direction, but not enough. The Stack Overflow community is heavily skewed towards C# development. If you don&amp;#8217;t know C# and prefer a less popular language (or set of tools), get involved. You&amp;#8217;re the perfect candidate for a &lt;a href='http://stackoverflow.com/users/login'&gt;new contributor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve compiled five reasons why you ought to consider my invitation.&lt;/p&gt;

&lt;h3 id='share_your_knowledge'&gt;Share your knowledge&lt;/h3&gt;

&lt;p&gt;Your knowledge is invaluable, and only available to you. Make your knowledge available for the benefit of the public. Think about how much easier it would have been had you been able to discover that knowledge earlier.&lt;/p&gt;

&lt;h3 id='build_credibility'&gt;Build credibility&lt;/h3&gt;

&lt;p&gt;With each answer you&amp;#8217;re building credibility. You&amp;#8217;re demonstrating to the public (and potential employers) that you&amp;#8217;re an expert. You even receive reputation and badges for asking good questions and providing excellent answers.&lt;/p&gt;

&lt;h3 id='talking_about_programming_is_interesting'&gt;Talking about programming is interesting&lt;/h3&gt;

&lt;p&gt;Programmers love to talk about programming. Stack Overflow is a community of programmers. We care about that specific, technical topic.&lt;/p&gt;

&lt;h3 id='community_owned_content'&gt;Community owned content&lt;/h3&gt;

&lt;p&gt;Stack Overflow doesn&amp;#8217;t own the content, you do. All questions and answers are licenced under a &lt;a href='http://creativecommons.org/licenses/by-sa/2.5/'&gt;Creative Commons licence&lt;/a&gt; and made available via a database dump.&lt;/p&gt;

&lt;h3 id='foster_growth_in_support_of_your_preferred_tools'&gt;Foster growth in support of your preferred tools&lt;/h3&gt;

&lt;p&gt;Asking and answering questions about less popular tools is the best technique to foster growth in support of your preferred tools. You&amp;#8217;re providing an open and transparent medium for newcomers and veterans alike.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/EYXirKU8iIE" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>JavaScript Rolling Elements with Prototype and script.aculo.us</title>
   <link href="http://tatey.com/2009/07/30/javascript-rolling-elements-with-prototype-and-scriptaculous.html" />
   <updated>2009-07-30T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/07/30/javascript-rolling-elements-with-prototype-and-scriptaculous</id>
   <content type="html">&lt;p&gt;A recent project at work has provided me with the opportunity to create an animated, rolling list of elements capable of iterating through large collections. The idea was inspired by the rolling table on the &lt;a href='http://github.com'&gt;GitHub home page&lt;/a&gt; (You&amp;#8217;ll need to be logged out to view it).&lt;/p&gt;

&lt;p&gt;JavaScript Rolling Elements is a small snippet of JavaScript that features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continuously animated rolling&lt;/li&gt;

&lt;li&gt;No duplicate elements&lt;/li&gt;

&lt;li&gt;Scales with large collections&lt;/li&gt;

&lt;li&gt;Unobtrusive&lt;/li&gt;

&lt;li&gt;Compatible with all modern browsers and IE6&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;View &lt;a href='http://tatey.github.com/javascript_rolling_elements/'&gt;an example of it in action&lt;/a&gt;. The project is hosted on &lt;a href='http://github.com/tatey/javascript_rolling_elements/'&gt;GitHub&lt;/a&gt;, after starting life as a &lt;a href='http://gist.github.com/'&gt;Gist&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/CY71bNnSsLY" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Stack Overflow is the programming forum I've been looking for</title>
   <link href="http://tatey.com/2009/07/26/stack-overflow-is-the-programming-forum-i-have-been-looking-for.html" />
   <updated>2009-07-26T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/07/26/stack-overflow-is-the-programming-forum-i-have-been-looking-for</id>
   <content type="html">&lt;p&gt;&lt;a href='http://stackoverflow.com'&gt;Stack Overflow&lt;/a&gt; has been hard to miss. If you have ever searched for an obscure programming question in Google, chances are you&amp;#8217;ve landed on a question that was posted on Stack Overflow.&lt;/p&gt;

&lt;p&gt;Stack Overflow is a questions and answers site strictly for programmers. There&amp;#8217;s a large, diverse range of questions from the newbie to the expert programmer. Questions are categorised by tags which makes it incredibly easy to filter questions you are or aren&amp;#8217;t interested in.&lt;/p&gt;

&lt;p&gt;More importantly, the quality of answers is typically high. It&amp;#8217;s not uncommon to find a long, well written answer with links to supplementary resources for a narrow-topic question. In addition, an ingenious reputation system provides users with the credibility, motivation and the tools to maintain high standards. That&amp;#8217;s right, tools.&lt;/p&gt;

&lt;p&gt;Previously restricted tools become available to users who achieve defined thresholds of reputation, eventually providing them with the capability to moderate questions and answers.&lt;/p&gt;

&lt;p&gt;What I like most about Stack Overflow is that the data is licenced under the &lt;a href='http://creativecommons.org/licenses/by-sa/2.5/'&gt;Creative Commons&lt;/a&gt; and is &lt;a href='http://blog.stackoverflow.com/2009/06/stack-overflow-creative-commons-data-dump/'&gt;freely available for download&lt;/a&gt; by the public. Irrespective of what happens to Stack Overflow, the community owns the data.&lt;/p&gt;

&lt;p&gt;Stack Overflow has become my favourite destination as a programming forum, replacing my preference for other forums, IRC and mailing lists. It&amp;#8217;s a free service, has a fantastic interface and minimal, unobtrusive ads (It&amp;#8217;s only fair, they&amp;#8217;re providing a free service).&lt;/p&gt;

&lt;p&gt;&lt;a href='http://stackoverflow.com/users/106997/tate-johnson'&gt;I&amp;#8217;ve got 126 reputation and two badges&lt;/a&gt;. It&amp;#8217;s not much, but I&amp;#8217;m getting there and really enjoying it along the way. If you&amp;#8217;re a programmer and love to share your knowledge with others, then I strongly encourage you to join Stack Overflow and contribute.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/VuMzwfhLnI4" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Apollo 11 source code available</title>
   <link href="http://tatey.com/2009/07/22/apollo-11-source-code-available.html" />
   <updated>2009-07-22T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/07/22/apollo-11-source-code-available</id>
   <content type="html">&lt;p&gt;&lt;a href='http://twitter.com/igrigorik/status/2756421525'&gt;Ilya Grigorik pointed out&lt;/a&gt; that the source code used in the Apollo 11 mission is now available on Google Code.&lt;/p&gt;

&lt;p&gt;Interested to see the software responsible for landing a man on the moon, I browsed the &lt;a href='http://code.google.com/p/virtualagc/source/browse/trunk/Luminary099/LUNAR_LANDING_GUIDANCE_EQUATIONS.s?r=258'&gt;lunar landing guidance equations&lt;/a&gt;. I&amp;#8217;m not even going to pretend to understand, as I know full well how difficult programming in assembly can be.&lt;/p&gt;

&lt;p&gt;Just for comparison I&amp;#8217;ve published calculating a factorial in &lt;a href='http://gist.github.com/151309'&gt;assembly&lt;/a&gt; on the Motorola 6800 (80 lines without comments) versus &lt;a href='http://gist.github.com/151316'&gt;Ruby&lt;/a&gt; (3 lines). It really makes me appreciate the abstraction away from the hardware in higher generation languages.&lt;/p&gt;

&lt;p&gt;Hats off to the engineers of the 1960&amp;#8217;s.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/mf606hNWPFk" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Reset stylesheets are overrated</title>
   <link href="http://tatey.com/2009/07/05/reset-stylesheets-are-overrated.html" />
   <updated>2009-07-05T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/07/05/reset-stylesheets-are-overrated</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve recently been involved in a project where the designer insisted on using a &lt;a href='http://meyerweb.com/eric/tools/css/reset/'&gt;reset stylesheet&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reset stylesheets are necessary to eliminate the rendering inconsistencies between browsers by resetting elements to a common baseline.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is &lt;a href='http://dowebsitesneedtolookexactlythesameineverybrowser.com/'&gt;not critical for a website to appear identical between browsers&lt;/a&gt; because no one is going to visit the website in multiple browsers. Only the designer will be aware of [any] browser inconsistencies.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reset stylesheets require significant effort for minimal benefit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Delivering projects on time and within budget is paramount. Productivity is understanding where to invest time to yield the maximum benefit. The benefit of eliminating rendering inconstancies between browsers is outweighed by the time required to maintain it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Increased stylesheet complexity. Redefine all the elements which have been reset&lt;/li&gt;

&lt;li&gt;Additional external stylesheet. That&amp;#8217;s another GET request, right?&lt;/li&gt;

&lt;li&gt;Larger file size than what would have been, had a reset stylesheet been avoided&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I&amp;#8217;ve written thousands of lines of CSS, and have never had the desire to reset an entire stylesheet. In a majority of use cases, browser defaults are satisfactory. Learn to work with them to your advantage, rather than against them.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/HWtlfdTAB1A" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Deploying a rails application to DreamHost</title>
   <link href="http://tatey.com/2009/07/04/deploying-a-rails-application-to-dreamhost.html" />
   <updated>2009-07-04T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/07/04/deploying-a-rails-application-to-dreamhost</id>
   <content type="html">&lt;p&gt;Earlier this week I &lt;a href='http://twitter.com/tatejohnson/status/2402841913'&gt;successfully deployed&lt;/a&gt; a rails 2.3.2 application to DreamHost. Deployment is quick and easy if you know what to do.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enable &lt;a href='http://www.modrails.com/'&gt;Phusion Passenger&lt;/a&gt; in the DreamHost panel&lt;/li&gt;

&lt;li&gt;Point the path to your rails public directory&lt;/li&gt;

&lt;li&gt;Freeze rails and your application&amp;#8217;s gem dependencies&lt;/li&gt;

&lt;li&gt;Restart Passenger with $ touch ~/path/to/rails/app/tmp/restart.txt&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On first request it&amp;#8217;s slow to load as Passenger launches a Ruby instance. With some page caching, you&amp;#8217;ll be able to negate this.&lt;/p&gt;

&lt;p&gt;I wouldn&amp;#8217;t usually recommend deploying to a shared hosting environment. However, this application was for fun, with a tiny audience and performance is not a constraint.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/24I7CpCdey0" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Quantifying what's better about Mac OS X</title>
   <link href="http://tatey.com/2009/06/21/quantifying-what-is-better-about-mac-os-x.html" />
   <updated>2009-06-21T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/06/21/quantifying-what-is-better-about-mac-os-x</id>
   <content type="html">&lt;p&gt;I&amp;#8217;m one of two Mac users out of a group of mates who are mostly Linux and Windows users. Time and time again, my choice of platform is on trial. Common arguments include &amp;#8220;Apple hardware is expensive&amp;#8221;, &amp;#8220;It&amp;#8217;s proprietary and locked down&amp;#8221; and &amp;#8220;I can do everything I need to&amp;#8221;.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://jimwhimpey.com/'&gt;Jim Whimpey&lt;/a&gt; has thought about &lt;a href='http://log.valhallaisland.com/post/126975664'&gt;quantifying what&amp;#8217;s better about Mac OS X&lt;/a&gt;. It&amp;#8217;s the attention to detail on the littlest of things, a consistent user experience and the only platform which stays out of my way the most.&lt;/p&gt;

&lt;p&gt;At work we&amp;#8217;re predominantly a Mac environment with &lt;a href='http://twitter.com/andrew_rock/status/2203657770'&gt;no mandated software&lt;/a&gt;. Everything just works.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/La9MTTF-qng" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>IRB for teaching Ruby interactively</title>
   <link href="http://tatey.com/2009/06/21/irb-for-teaching-ruby-interactively.html" />
   <updated>2009-06-21T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/06/21/irb-for-teaching-ruby-interactively</id>
   <content type="html">&lt;p&gt;As Rubyists, we&amp;#8217;re familiar with the &lt;a href='http://en.wikipedia.org/wiki/Interactive_Ruby_Shell'&gt;IRB&lt;/a&gt; for quickly experimenting with language features and new ideas. I was interested to see how this would translate when demonstrating Ruby in an informal teaching environment.&lt;/p&gt;

&lt;p&gt;I invited &lt;a href='http://blog.ash.ms/'&gt;Ashley Kyd&lt;/a&gt; and &lt;a href='http://owened.net/'&gt;Owen Stickley&lt;/a&gt; for some Ruby 101. Ashley is interested in learning rails and Owen is interested in automating system tasks.&lt;/p&gt;

&lt;p&gt;We each had our own laptops and a projector. Plugged a laptop in to the projector and asked everyone to start the IRB.&lt;/p&gt;

&lt;p&gt;As the teacher, I could demonstrate Ruby&amp;#8217;s features while Ashley and Owen followed and continued to experiment themselves. I think this style of interactive learning is more engaging by providing immediate feedback and lowering the barrier to entry.&lt;/p&gt;

&lt;p&gt;Even after the initial learning phase, I&amp;#8217;m sure that Ashley and Owen will continue to use and appreciate the IRB.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/hjCUwbESy9E" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>220KM round trip, mountains, dams, crisp air and country roads</title>
   <link href="http://tatey.com/2009/05/31/220km-round-trip-mountains-dams-crisp-air-and-country-roads.html" />
   <updated>2009-05-31T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/05/31/220km-round-trip-mountains-dams-crisp-air-and-country-roads</id>
   <content type="html">&lt;p&gt;&lt;a href='http://www.flickr.com/photos/23054854@N06/sets/72157619034796216/'&gt;&lt;img src='/images/posts/2009-05-31-220km-round-trip-mountains-dams-crisp-air-and-country-roads/3580385131_39d208ba69.jpg' alt='Scenic stop on Mount Mee' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s the first weekend I&amp;#8217;ve had no obligations to uni, friends or family. Couldn&amp;#8217;t think of a better way to celebrate than a long ride with my old man and his mate.&lt;/p&gt;

&lt;p&gt;We started on Brisbane&amp;#8217;s southside and followed the Ipswitch motorway. Our route took us over the Wivenhoe Dam wall, past Somerset, through Kilcoy and over Mount Mee with various stops on the way. It was an epic ride, out for a total of seven hours.&lt;/p&gt;

&lt;p&gt;With the recent heavy rains, the inland routes are looking spectacular. The dams had attracted a tonne of people interested in water sports and family picnics.&lt;/p&gt;

&lt;p&gt;Being low to the ground with no obstructions, riding fast in between giant mountains and feeling the wind against your face is amazingly refreshing.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/OV9h7tsb1E4" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Jekyll meets DreamHost. Automated deployment for Jekyll with Git</title>
   <link href="http://tatey.com/2009/04/29/jekyll-meets-dreamhost-automated-deployment-for-jekyll-with-git.html" />
   <updated>2009-04-29T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/04/29/jekyll-meets-dreamhost-automated-deployment-for-jekyll-with-git</id>
   <content type="html">&lt;p&gt;It has been just under a month since I launched this blog, and the first thing I promised myself was to automate deployment. If you have an existing &lt;a href='http://github.com'&gt;GitHub&lt;/a&gt; account you might want to consider &lt;a href='http://pages.github.com/'&gt;GitHub Pages&lt;/a&gt;, it&amp;#8217;s quick and easy.&lt;/p&gt;

&lt;h3 id='why_not_github_pages'&gt;Why not GitHub Pages?&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;CNAME support (Eg: tatey.com) is reserved for paid GitHub accounts&lt;/li&gt;

&lt;li&gt;No desire for a private repository. We host our repositories in-house at work&lt;/li&gt;

&lt;li&gt;Existing &lt;a href='http://dreamhost.com'&gt;DreamHost&lt;/a&gt; customer&lt;/li&gt;

&lt;li&gt;Excuse to play with Git hooks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='how_will_it_work'&gt;How will it work?&lt;/h3&gt;

&lt;p&gt;I am interested in achieving the same functionality offered by GitHub Pages with DreamHost. That is, a single push automatically generates the site, removing the pain of manually copying files and directories.&lt;/p&gt;

&lt;p&gt;We are going to create a bare repository for pushing to. Every time you push, we will use the post-receive hook to execute a Bash script. The Bash script clones the repository with a working directory, executes &lt;a href='http://github.com/mojombo/jekyll/tree/master'&gt;jekyll&lt;/a&gt; and cleans up. &lt;a href='http://www.kernel.org/pub/software/scm/git/docs/githooks.html'&gt;Hooks&lt;/a&gt; in Git behave like events.&lt;/p&gt;

&lt;h3 id='preparing_a_jekyllfriendly_environment'&gt;Preparing a Jekyll-friendly environment&lt;/h3&gt;

&lt;p&gt;Jekyll is not available on DreamHost. You will need to build your own RubyGems and install Jekyll with its dependancies. John Nunemaker has written an excellent &lt;a href='http://railstips.org/2008/11/25/rubygems-yours-mine-and-ours'&gt;guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you are interested in code highlighting, you will also want to install &lt;a href='http://pygments.org/'&gt;Pygments&lt;/a&gt;. Pygments is a Python syntax highlighter that Jekyll uses to parse and wrap your code snippets in the appropriate HTML tags.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;mkdir ~/lib/python
&lt;span class='nv'&gt;$ &lt;/span&gt;&lt;span class='nb'&gt;echo&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;export PYTHONPATH=&amp;quot;$HOME/lib/python:/usr/lib/python2.3&amp;quot;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bash_profile
&lt;span class='nv'&gt;$ &lt;/span&gt;&lt;span class='nb'&gt;source&lt;/span&gt; ~/.bash_profile
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Download and build Pygments from source.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;&lt;span class='nb'&gt;cd&lt;/span&gt; ~/src
&lt;span class='nv'&gt;$ &lt;/span&gt;wget http://pypi.python.org/packages/source/P/Pygments/Pygments-1.0.tar.gz
&lt;span class='nv'&gt;$ &lt;/span&gt;tar -xvzf Pygments-1.0.tar.gz
&lt;span class='nv'&gt;$ &lt;/span&gt;&lt;span class='nb'&gt;cd &lt;/span&gt;Pygments-1.0
&lt;span class='nv'&gt;$ &lt;/span&gt;python setup.py install --home&lt;span class='o'&gt;=&lt;/span&gt;&lt;span class='nv'&gt;$HOME&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 id='git_it_all_together'&gt;Git it all together&lt;/h3&gt;

&lt;p&gt;Initialise a bare repository to push to. It is potentially dangerous to push to a remote repository with a working directory.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;mkdir ~/src/your_git_repo.git
&lt;span class='nv'&gt;$ &lt;/span&gt;&lt;span class='nb'&gt;cd&lt;/span&gt; ~/src/your_git_repo.git
&lt;span class='nv'&gt;$ &lt;/span&gt;git --bare init
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Add DreamHost as a remote in your local repository.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;git remote add dreamhost ssh://user@server.com/home/user/src/your_git_repo.git
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Write a Bash script to clone the repository, execute Jekyll and clean up. Jekyll will generate its output in to your publicly accessible directory.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='c'&gt;# ~/bin/generate_public_www&lt;/span&gt;
&lt;span class='c'&gt;#!/bin/bash&lt;/span&gt;
&lt;span class='nv'&gt;GIT_REPO&lt;/span&gt;&lt;span class='o'&gt;=&lt;/span&gt;&lt;span class='nv'&gt;$HOME&lt;/span&gt;/src/your_git_repo.git
&lt;span class='nv'&gt;TMP_GIT_CLONE&lt;/span&gt;&lt;span class='o'&gt;=&lt;/span&gt;&lt;span class='nv'&gt;$HOME&lt;/span&gt;/tmp/your_git_repo
&lt;span class='nv'&gt;PUBLIC_WWW&lt;/span&gt;&lt;span class='o'&gt;=&lt;/span&gt;&lt;span class='nv'&gt;$HOME&lt;/span&gt;/var/www/your_site

git clone &lt;span class='nv'&gt;$GIT_REPO&lt;/span&gt; &lt;span class='nv'&gt;$TMP_GIT_CLONE&lt;/span&gt;
jekyll &lt;span class='nv'&gt;$TMP_GIT_CLONE&lt;/span&gt; &lt;span class='nv'&gt;$PUBLIC_WWW&lt;/span&gt; --pygments
rm -Rf &lt;span class='nv'&gt;$TMP_GIT_CLONE&lt;/span&gt;
&lt;span class='nb'&gt;exit&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;chmod +x ~/bin/generate_public_www
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Add the Bash script in the post-receive hook of your bare repository. Hooks are Bash scripts too.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='c'&gt;# ~/src/your_git_repo.git/hooks/post-receive&lt;/span&gt;
&lt;span class='c'&gt;#!/bin/sh&lt;/span&gt;
&lt;span class='nv'&gt;$HOME&lt;/span&gt;/bin/generate_public_www
&lt;span class='nb'&gt;exit&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;chmod +x ~/src/your_git_repo.git/hooks/post-receive
&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 id='programmers_should_be_lazy'&gt;Programmers should be lazy&lt;/h3&gt;

&lt;p&gt;Congratulations, you&amp;#8217;re done! Every time you push to DreamHost, Jekyll will build the site. Cool, huh?!&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;git push dreamhost master
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Bonus: You now have a redundant copy of your repository.&lt;/p&gt;

&lt;h4 id='updated_31_may_2009'&gt;Updated 31 May 2009&lt;/h4&gt;

&lt;p&gt;Jay Williams followed this guide and experienced an annoying problem with the Git post-receive hook. After some trouble-shooting, it appeared that the hook was never executed because the user he was shelling in with didn&amp;#8217;t have the access to the compiled binaries in its path.&lt;/p&gt;

&lt;p&gt;Copying your &lt;code&gt;.bash_profile&lt;/code&gt; to &lt;code&gt;.bashrc&lt;/code&gt; should solve the issue for non-login shells.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;&lt;span class='nb'&gt;cd&lt;/span&gt; ~/
&lt;span class='nv'&gt;$ &lt;/span&gt;cp .bashrc .bashrc.old
&lt;span class='nv'&gt;$ &lt;/span&gt;cp .bash_profile .bashrc
&lt;/pre&gt;
&lt;/div&gt;
&lt;h4 id='updated_29_oct_2009'&gt;Updated 29 Oct 2009&lt;/h4&gt;

&lt;p&gt;I no longer recommend using this configuration for deployment. See &lt;a href='/2009/10/29/simpler-deployment-for-jekyll-using-a-rakefile-and-rsync.html'&gt;simpler deployment for Jekyll using a Rakefile and rsync&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/GAl5JbIuMKQ" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Git rebase for linear history</title>
   <link href="http://tatey.com/2009/04/23/git-rebase-for-linear-history.html" />
   <updated>2009-04-23T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/04/23/git-rebase-for-linear-history</id>
   <content type="html">&lt;p&gt;Subject: Suggestion to rebase after committing and before pushing&lt;br /&gt;To: Development Team&lt;br /&gt;Date: 20 April 1:54:29 PM&lt;/p&gt;

&lt;h3 id='whats_the_issue'&gt;What&amp;#8217;s the issue?&lt;/h3&gt;

&lt;p&gt;Looking at our history, I&amp;#8217;ve noticed that there is a lot of &amp;#8220;Merge branch &amp;#8216;master&amp;#8217; of XYZ&amp;#8221;. Technically, this is fine but I feel it obscures the important history of the repository. No one cares that there was a merge, and following funky, rainbow lines in &lt;a href='http://gitx.frim.nl/'&gt;GitX&lt;/a&gt; is unnecessary effort.&lt;/p&gt;

&lt;h3 id='why_does_this_happen'&gt;Why does this happen?&lt;/h3&gt;

&lt;p&gt;Sometimes it&amp;#8217;s unavoidable. If you&amp;#8217;ve been developing on a separate branch, you&amp;#8217;re eventually going to have to merge it in to master. I&amp;#8217;m not talking about that. In fact, you&amp;#8217;d probably &lt;strong&gt;want&lt;/strong&gt; to know about that merge.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s look at a simplified scenario for a merge we don&amp;#8217;t care about.&lt;/p&gt;

&lt;p&gt;&amp;#8217;X&amp;#8217; and &amp;#8216;Y&amp;#8217; pull from the repository at 9AM. &amp;#8216;X&amp;#8217; works on a patch, commits, pulls and pushes to the repository at 9:30AM. &amp;#8216;Y&amp;#8217; works on a patch, commits, pulls and pushes to the repository at 10AM. Sounds good, right?&lt;/p&gt;

&lt;p&gt;Pulling is equivalent to fetching and merging, resulting in &amp;#8220;Merge branch &amp;#8216;master&amp;#8217; of XYZ&amp;#8221; and more funky, rainbow lines.&lt;/p&gt;

&lt;h3 id='suggestion'&gt;Suggestion&lt;/h3&gt;

&lt;p&gt;You could stash your changes, pull, pop and push. That&amp;#8217;s great until you have about 2 or 3 commits you want to push. Plus, I don&amp;#8217;t want to have to think about this.&lt;/p&gt;

&lt;p&gt;Enter rebase.&lt;/p&gt;

&lt;p&gt;You can rebase your &amp;#8220;local/master&amp;#8221; branch against &amp;#8220;origin/master&amp;#8221;. This is not the same as rebasing an already shared branch, because your commits have not been published. You should &lt;strong&gt;never&lt;/strong&gt; rebase something you&amp;#8217;ve already pulled down.&lt;/p&gt;

&lt;p&gt;Suggested workflow might look something like this.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;git commit
&lt;span class='nv'&gt;$ &lt;/span&gt;git pull
&lt;span class='nv'&gt;$ &lt;/span&gt;git rebase -i origin/master
&lt;span class='nv'&gt;$ &lt;/span&gt;git push origin master
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This has the advantage that you don&amp;#8217;t need to execute the last two commands if there is nothing new pulled down from the second command. It also gives you a chance to squash commits into something more meaningful. Sometimes you want to do this, sometimes it&amp;#8217;s better to keep them separate. I&amp;#8217;ll leave that to you.&lt;/p&gt;

&lt;p&gt;Generally this isn&amp;#8217;t an issue, but last week we saw a flurry of commits to the repository. Such a process would keep the history nice and linear.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br /&gt;Tatey&lt;/p&gt;

&lt;p&gt;PS: I&amp;#8217;ve been secretly doing this.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/mEvNeD8TLwo" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Layouts with Smarty</title>
   <link href="http://tatey.com/2009/04/12/layouts-with-smarty.html" />
   <updated>2009-04-12T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/04/12/layouts-with-smarty</id>
   <content type="html">&lt;p&gt;&lt;a href='http://smarty.net/'&gt;Smarty&lt;/a&gt; doesn&amp;#8217;t appear to support layouts, an incredibly useful concept for separating reusable markup in views.&lt;/p&gt;

&lt;p&gt;Documentation has an &lt;a href='http://smarty.net/manual/en/language.function.include.php'&gt;example&lt;/a&gt; using the {include} tags for including a header and footer template in to each of your views. I think this approach is repetitive and not as flexible as it ought to be.&lt;/p&gt;

&lt;p&gt;My expectations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single function&lt;/li&gt;

&lt;li&gt;Specify view&lt;/li&gt;

&lt;li&gt;Specify layout or fallback to default&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fortunately, there is a &lt;a href='http://smarty.net/manual/en/api.fetch.php'&gt;fetch()&lt;/a&gt; function that returns the template output as a string. Taking the earlier example of the header and footer, I wrote a simple wrapper function to do this for me.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='c1'&gt;// includes/controllers/base_controller.php&lt;/span&gt;
&lt;span class='k'&gt;require&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Smarty.class.php&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;

&lt;span class='k'&gt;public&lt;/span&gt; &lt;span class='k'&gt;function&lt;/span&gt; &lt;span class='nf'&gt;__construct&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt;
&lt;span class='p'&gt;{&lt;/span&gt;
  &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;smarty&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;Smarty&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;

&lt;span class='k'&gt;public&lt;/span&gt; &lt;span class='k'&gt;function&lt;/span&gt; &lt;span class='nf'&gt;render_layout&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$view&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;$layout&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;application&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='p'&gt;{&lt;/span&gt;
  &lt;span class='k'&gt;echo&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;
    &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;smarty&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;fetch&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;layouts/&amp;#39;&lt;/span&gt; &lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='nv'&gt;$layout&lt;/span&gt; &lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;/header.tpl&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;.&lt;/span&gt;
    &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;smarty&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;fetch&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$view&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;.&lt;/span&gt;
    &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;smarty&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;fetch&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;layouts/&amp;#39;&lt;/span&gt; &lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='nv'&gt;$layout&lt;/span&gt; &lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;/footer.tpl&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
  &lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='c1'&gt;// includes/controllers/items_controller.php&lt;/span&gt;
&lt;span class='k'&gt;public&lt;/span&gt; &lt;span class='k'&gt;function&lt;/span&gt; &lt;span class='nf'&gt;show&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt;
&lt;span class='p'&gt;{&lt;/span&gt;
  &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;smarty&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;assign_by_ref&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;item&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;Item&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='na'&gt;find_by_id&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;params&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;]));&lt;/span&gt;
  &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;render_layout&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;items/show&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;While it&amp;#8217;s no where near as nice as &lt;a href='http://guides.rubyonrails.org/layouts_and_rendering.html'&gt;layouts in Rails&lt;/a&gt;, it is a small amount of effort for greater flexibility in your views with Smarty.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/8NAi94azX0g" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Having a flashback</title>
   <link href="http://tatey.com/2009/04/06/having-a-flashback.html" />
   <updated>2009-04-06T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/04/06/having-a-flashback</id>
   <content type="html">&lt;p&gt;Searching for a mock up in my abandoned design directory, I stumbeld on some interesting images. They were created in Flash, when it was owned by Macromedia and the major release number was 4.&lt;/p&gt;

&lt;h3 id='p200'&gt;P200&lt;/h3&gt;

&lt;p&gt;&lt;a href='/images/posts/2009-04-06-having-a-flashback/p200.jpg'&gt;&lt;img src='/images/posts/2009-04-06-having-a-flashback/p200_thumb.jpg' alt='P200' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Second family computer. Intel Pentium 200Mhz with a 17&amp;#8221; CRT. Memories of Command &amp;amp; Conquer, Team Fortress Classic, mIRC, FrontPage, non-breaking spaces and Internet Explorer 4.0.&lt;/p&gt;

&lt;h3 id='the_water_tank'&gt;The Water Tank&lt;/h3&gt;

&lt;p&gt;&lt;a href='/images/posts/2009-04-06-having-a-flashback/the_water_tower.jpg'&gt;&lt;img src='/images/posts/2009-04-06-having-a-flashback/the_water_tower_thumb.jpg' alt='The Water Tank' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Second or third personal computer. Intel Pentium 4 1.6GHz with water cooling and an 16x2 LCD for displaying system statistics. Memories of Warcraft 3, Counter-Strike, Mandrake Linux, Stylesheet enlightenment, Photoshop 5.0, and Mozilla Phoenix.&lt;/p&gt;

&lt;p&gt;Like P200, there was suppose to be a matching display. I drew it, I just can&amp;#8217;t find it. I had the intention that the &amp;#8220;on&amp;#8221; button would boot the computer in to Windows XP.&lt;/p&gt;

&lt;p&gt;&lt;a href='/images/posts/2009-04-06-having-a-flashback/the_water_tower_photo.jpg'&gt;View a photo of the box&lt;/a&gt; in all its glory. Like anyone else interested in PC hardware as a young teenager, you had a powerful computer and a shitty desk, chair and keyboard.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/dHOo_ge3rO8" height="1" width="1"/&gt;</content>
 </entry>
 
 <entry>
   <title>Obligatory hello, world!</title>
   <link href="http://tatey.com/2009/04/05/obligatory-hello-world.html" />
   <updated>2009-04-05T00:00:00+10:00</updated>
   <id>http://tatey.com/2009/04/05/obligatory-hello-world</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve spent a good part of today on the seventh iteration of tatey.com.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design&lt;/li&gt;

&lt;li&gt;XHTML/CSS&lt;/li&gt;

&lt;li&gt;Jekyllfy&lt;/li&gt;

&lt;li&gt;About content&lt;/li&gt;

&lt;li&gt;Generate and publish&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It&amp;#8217;s generated by &lt;a href='http://github.com/mojombo/jekyll/tree/master'&gt;Jekyll&lt;/a&gt;, a blog-aware, static site generator in Ruby. Posts are in &lt;a href='http://daringfireball.net/projects/markdown/'&gt;Markdown&lt;/a&gt; and the source resides on &lt;a href='http://github.com/tatey/tatey.com/tree/master'&gt;GitHub&lt;/a&gt;, never to be lost again! Site conforms to the XHTML 1.0 and CSS 2.1 specifications. All pages are valid and semantic. I&amp;#8217;ve only tested in Firefox 3.0.8 and Safari 4b on Mac OS X. If you find an error, &lt;a href='mailto:tate@tatey.com'&gt;please let me know&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Next step is to automate deployment.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tatejohnson/~4/LqwjG61raKg" height="1" width="1"/&gt;</content>
 </entry>
 
 
</feed>
