<?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" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US">
  <id>tag:keithpitty.com,2005:/feed</id>
  <link rel="alternate" type="text/html" href="http://keithpitty.com" />
  
  <title>Keith Pitty</title>
  <updated>2013-04-05T12:46:42+11:00</updated>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/keithpitty" /><feedburner:info uri="keithpitty" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <id>tag:keithpitty.com,2005:BlogPost/28</id>
    <published>2013-04-05T12:46:42+11:00</published>
    <updated>2013-04-05T12:47:42+11:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/4fZ01521HM4/2013-04-05-being-productive-without-coding" />
    <title>Being productive without coding</title>
    <content type="html">&lt;p&gt;I feel like I&amp;#8217;ve been quite productive over the last day or so even if I haven&amp;#8217;t written any code.&lt;/p&gt;
&lt;p&gt;The requirements I had for a new feature were a little vague so I spent some time:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;investigating third-party open source libraries (in this case Ruby gems) that may have helped&lt;/li&gt;
	&lt;li&gt;exploring the code base of our own application&lt;/li&gt;
	&lt;li&gt;talking with stake-holders in order to clarify the scope and steer the first iteration of this feature towards gaining a small set of big wins for the users&lt;/li&gt;
	&lt;li&gt;sketching a possible solution in brief notes rather than code&lt;/li&gt;
	&lt;li&gt;reviewing my intended approach with a colleague&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now I&amp;#8217;ve reached the point where I think it&amp;#8217;s a good time to start coding.&lt;/p&gt;
&lt;p&gt;Different people have different approaches to solving software problems. I&amp;#8217;m quite systematic and methodical by nature.&lt;/p&gt;
&lt;p&gt;In any case, I wanted to share this experience because I think that sometimes it pays to spend time thinking, exploring and talking before diving into coding.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/4fZ01521HM4" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2013-04-05-being-productive-without-coding</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/27</id>
    <published>2013-03-09T00:59:40+11:00</published>
    <updated>2013-03-09T01:00:50+11:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/K8hDbP7NIWg/2013-03-09-installing-ruby-1-8-7-with-rbenv" />
    <title>Installing Ruby 1.8.7 with rbenv</title>
    <content type="html">&lt;p&gt;Having considered the move for quite a while, this evening I finally decided to migrate from &lt;a href="https://rvm.io/"&gt;&lt;span class="caps"&gt;RVM&lt;/span&gt;&lt;/a&gt; to &lt;a href="https://github.com/sstephenson/rbenv"&gt;rbenv&lt;/a&gt;. The tipping point came as I was freeing up space on my laptop&amp;#8217;s hard disk and discovered that the .rvm directory was occupying 21G, which seemed rather excessive.&lt;/p&gt;
&lt;p&gt;Having jettisoned &lt;span class="caps"&gt;RVM&lt;/span&gt;, installed rbenv and &lt;a href="https://github.com/sstephenson/ruby-build"&gt;ruby-build&lt;/a&gt;, I set about installing various versions of Ruby.&lt;/p&gt;
&lt;p&gt;Despite the fact that Ruby 2.0.0 has recently been released and Matz has &lt;a href="https://blog.heroku.com/archives/2013/3/6/matz_highlights_ruby_2_0_at_waza"&gt;strongly encouraged&lt;/a&gt; users to upgrade from 1.8.7, which is due for end of life this June, I still have one customer I need to support on 1.8.7 for the time being.&lt;/p&gt;
&lt;p&gt;This brings me to the point of this post. Unlike later versions, I struck a couple of problems with installing 1.8.7 with rbenv, just as I had done recently with &lt;span class="caps"&gt;RVM&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;The solution was to use configuration options to tell rbenv where to get readline and to not bother with installing tcl and tk:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;
$ CONFIGURE_OPTS=&amp;quot;--with-readline-dir=$(brew --prefix readline) --without-tcl --without-tk&amp;quot; rbenv install 1.8.7-p371
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/K8hDbP7NIWg" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2013-03-09-installing-ruby-1-8-7-with-rbenv</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/26</id>
    <published>2013-02-15T14:43:10+11:00</published>
    <updated>2013-02-15T14:52:16+11:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/kNj4ae9pfWA/2013-02-15-anticipating-rubyconf-austalia-2013" />
    <title>Anticipating RubyConf Austalia 2013</title>
    <content type="html">&lt;p&gt;We are on the home stretch!&lt;/p&gt;
&lt;p&gt;Just over a year ago I made a commitment to ensure that the inaugural Australian Ruby programming conference would become a reality. Next week, in Melbourne, it will.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.rubyconf.org.au/"&gt;RubyConf Australia 2013&lt;/a&gt; will kick off with a day of &lt;a href="http://www.rubyconf.org.au/workshops"&gt;workshops&lt;/a&gt; on Wednesday before more than 350 delegates gather at the conference to hear &lt;a href="http://www.rubyconf.org.au/speakers"&gt;speakers&lt;/a&gt; present a variety of Ruby-related talks on Thursday and Friday.&lt;/p&gt;
&lt;p&gt;With less than a week to go, you may wonder why I have chosen to devote time to a blog post now.  You&amp;#8217;d think I would be flat out doing last minute things in preparation.  Of course I am, but I guess I thought it would be therapeutic to spend a few minutes sharing my reflections about organising the conference.&lt;/p&gt;
&lt;p&gt;I won&amp;#8217;t go into exhaustive detail now but I do want to emphasise several factors which have underpinned the conference organisation. Without them, I doubt we would have got to where we are today without much more pain.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The establishment of &lt;a href="http://ruby.org.au"&gt;Ruby Australia&lt;/a&gt; as a non-profit organisation to support the conference (and Rails Camps) was a crucial first step. This avoided individuals being liable and clearly marked the conference as being owned by the Australian Ruby community.&lt;/li&gt;
	&lt;li&gt;The partnership with &lt;a href="http://www.yowconference.com.au/"&gt;&lt;span class="caps"&gt;YOW&lt;/span&gt;!&lt;/a&gt; has been invaluable. They have run very successful software development conferences in Australia for several years and it made sense to utilise their expertise.&lt;/li&gt;
	&lt;li&gt;A small core group of organisers has also worked well. I am indebted to &lt;a href="http://twitter.com/kouky"&gt;Mike Koukoullis&lt;/a&gt; and Martin Stannard for their collaborative support. I think we&amp;#8217;ve made a very effective team.&lt;/li&gt;
	&lt;li&gt;Having underlined the importance of the core organising group, it would be remiss of me not to acknowledge a host of others in the community who have helped, or will be helping, in different ways at various times. They know who they are.&lt;/li&gt;
	&lt;li&gt;Another point worth mentioning was the use of a &lt;a href="https://github.com/rubyaustralia/rubyconfau-2013-cfp"&gt;GitHub repository&lt;/a&gt; for collecting and managing talk proposals. I liked it&amp;#8217;s openness, it worked well and I would recommend it to other organisers of technical conferences.&lt;/li&gt;
	&lt;li&gt;Finally, we have been able to attract more than 15 overseas presenters and sell the tickets at a reasonable price only because of the generosity of our &lt;a href="http://www.rubyconf.org.au/sponsors"&gt;sponsors&lt;/a&gt;, whom we much appreciate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;#8217;s it for now. I&amp;#8217;m not sure how insightful that was for you. It was somewhat cathartic for me but not as helpful as the drinks at the conference closing party will be.&lt;/p&gt;
&lt;p&gt;Wish us luck!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/kNj4ae9pfWA" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2013-02-15-anticipating-rubyconf-austalia-2013</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/25</id>
    <published>2013-01-28T13:46:54+11:00</published>
    <updated>2013-01-28T13:48:58+11:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/ALj5BHEO1ag/2013-01-28-twitter-bootstrap-to-the-rescue" />
    <title>Twitter Bootstrap to the Rescue</title>
    <content type="html">&lt;p&gt;OK, I admit it. I have finally acknowledged that web design is something I should not waste my time on.&lt;/p&gt;
&lt;p&gt;The design of this site has gone through several phases, all my own attempts and none that I was satisfied with. So yesterday I finally bit the bullet, jettisoned my old home grown styles and images and resorted to &lt;a href="http://twitter.github.com/bootstrap"&gt;Twitter Bootstrap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Whilst a quick glance reveals the obvious use of Twitter Bootstrap, I&amp;#8217;m encouraged by the result. I can now rely on a popular, well-designed, well-documented tool to produce an acceptable looking site rather than struggling with my own incompetence. For me, Twitter Bootstrap hits the sweet spot. After all, it is aimed at programmers who don&amp;#8217;t have good web design skills.&lt;/p&gt;
&lt;h2&gt;The Conversion&lt;/h2&gt;
&lt;p&gt;For those interested in what it took to convert a Rails site to use Twitter Bootstrap, here are some of the steps I followed:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;installed the &lt;a href="https://github.com/seyhunak/twitter-bootstrap-rails"&gt;twitter-boostrap-rails&lt;/a&gt; gem&lt;/li&gt;
	&lt;li&gt;enabled the Twitter Bootstrap responsive styles&lt;/li&gt;
	&lt;li&gt;tailored my layouts to use Twitter Bootstrap&lt;/li&gt;
	&lt;li&gt;removed my old styles&lt;/li&gt;
	&lt;li&gt;converted forms to use the &lt;a href="https://github.com/plataformatec/simple_form"&gt;simple_form&lt;/a&gt; gem, which supports Twitter Bootstrap&lt;/li&gt;
	&lt;li&gt;made use of the various classes in Twitter Bootstrap to easily improve the appearance of forms, buttons and tables&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Responsive Design&lt;/h2&gt;
&lt;p&gt;One aspect I&amp;#8217;m delighted with is the fact that Twitter Bootstrap supports responsive design out of the box. I&amp;#8217;ve found it interesting that one of the barriers to adding content to this site has been it&amp;#8217;s poor display on mobile devices. Not only did the site look ugly, but it didn&amp;#8217;t facilitate easy browsing on mobiles.&lt;/p&gt;
&lt;p&gt;Not any more. As a by-product of using Twitter Bootstrap, my site is now responsive!&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Having used Twitter Bootstrap before, it was a fairly painless exercise to convert the site. All it took was a rainy day on a long weekend to finally encourage me to bite the bullet.&lt;/p&gt;
&lt;p&gt;Now I have one less excuse for writing blog posts!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/ALj5BHEO1ag" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2013-01-28-twitter-bootstrap-to-the-rescue</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/24</id>
    <published>2012-06-11T13:51:35+10:00</published>
    <updated>2012-06-11T13:51:35+10:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/OO14pX3Q9sU/2012-06-11-is-tdd-enough" />
    <title>Is TDD Enough?</title>
    <content type="html">&lt;p&gt;One thing that the Rails community prides itself on is that test-driven development (&lt;span class="caps"&gt;TDD&lt;/span&gt;) is widely employed. But is this sufficient to produce good quality code that stands the test of changing requirements over a long period of time?&lt;/p&gt;
&lt;p&gt;In my recent roundup of &lt;a href="http://keithpitty.com/blog/archives/2012-06-06-ruby-resources-on-my-radar"&gt;Ruby resources&lt;/a&gt;, Sandi Metz is one author I recommended. In &lt;a href="http://vimeo.com/12350535"&gt;her excellent talk&lt;/a&gt; at the 2009 Gotham Ruby Conference, Sandi contested that &lt;span class="caps"&gt;TDD&lt;/span&gt; is not enough. Sandi&amp;#8217;s talk, which concentrates on applying &lt;a href="http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)"&gt;&lt;span class="caps"&gt;SOLID&lt;/span&gt; design principles&lt;/a&gt; in Ruby, is well worth listening to in its entirety.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://player.vimeo.com/video/12350535" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt; &lt;p&gt;&lt;a href="http://vimeo.com/12350535"&gt;2009 &amp;#8211; Sandi Metz &amp;#8211; &lt;span class="caps"&gt;SOLID&lt;/span&gt; Object-Oriented Design&lt;/a&gt; from &lt;a href="http://vimeo.com/goruco"&gt;Gotham Ruby Conference&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;As Sandi explains, central to &lt;span class="caps"&gt;SOLID&lt;/span&gt; design is avoiding dependencies by striving for code that is:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;loosely coupled&lt;/li&gt;
	&lt;li&gt;highly cohesive&lt;/li&gt;
	&lt;li&gt;easily composable&lt;/li&gt;
	&lt;li&gt;context independent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As she demonstrates applying these principles through refactoring a small Ruby application, Sandi shows that, if we want code to endure in a state that makes it fun to work with, we need to do more than use &lt;span class="caps"&gt;TDD&lt;/span&gt;. As Sandi refactors she emphasises that when we reach a point where the tests pass, we should not be satisfied. Nor should ensuring that the code is &lt;a href="http://c2.com/cgi/wiki?DontRepeatYourself"&gt;&lt;span class="caps"&gt;DRY&lt;/span&gt;&lt;/a&gt; be enough. Other questions that need to be asked about the class under test are:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Does it have one responsibility?&lt;/li&gt;
	&lt;li&gt;Does everything in it change at the same rate?&lt;/li&gt;
	&lt;li&gt;Does it depend on things that change less often than it does?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Only when the answer to all of these questions is &amp;#8220;yes&amp;#8221; should we move on.&lt;/p&gt;
&lt;p&gt;I know these are questions I should ask myself more often. As Sandi stresses, &amp;#8220;test driven development is good, but it&amp;#8217;s not enough.&amp;#8221;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/OO14pX3Q9sU" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2012-06-11-is-tdd-enough</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/23</id>
    <published>2012-06-06T00:44:33+10:00</published>
    <updated>2012-06-06T13:10:07+10:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/BR91tQ4f_2c/2012-06-06-ruby-resources-on-my-radar" />
    <title>Ruby Resources on my Radar</title>
    <content type="html">&lt;p&gt;There&amp;#8217;s never enough time!&lt;/p&gt;
&lt;p&gt;I&amp;#8217;d love to have more time to make use of all the resources I have at my disposal to learn more about the Ruby programming language.&lt;/p&gt;
&lt;p&gt;It is eight years since I first encountered Ruby and nearly five since I moved to using Ruby as my language of choice to earn a living. So I&amp;#8217;ve collected many different resources during those years as I have progressed through my journey to hopefully become a more proficient practitioner of the language that Matz designed to make programming a happier experience.&lt;/p&gt;
&lt;h2&gt;Inspiration&lt;/h2&gt;
&lt;p&gt;Recently I gave a lightning talk at the &lt;a href="http://ruby.org.au/meetups/syd.html"&gt;Sydney Ruby&lt;/a&gt; meetup (a.k.a. rorosyd) inspired by the Ruby Rogues podcast. I love the format that Charles Max Wood et al use, particularly their &amp;#8220;picks&amp;#8221; at the end of the show. So I decided I&amp;#8217;d give the podcast a plug, provide some picks of my own and then open it up to the audience to share their picks.&lt;/p&gt;
&lt;p&gt;The experience set me thinking about all the wonderful resources now available to Ruby programmers &amp;#8211; so many to choose from. I thought I&amp;#8217;d take the time to share my viewpoint. Hopefully you&amp;#8217;ll take away something useful.&lt;/p&gt;
&lt;p&gt;First of all, here are the picks I chose to share at &amp;#8220;rorosyd&amp;#8221; and why I chose them.&lt;/p&gt;
&lt;h3&gt;Podcast: Ruby Rogues&lt;/h3&gt;
&lt;p&gt;Ever since I started listening to the &lt;a href="http://rubyrogues.com/"&gt;Ruby Rogues&lt;/a&gt; podcast a few months ago I have found it compelling.  Regular panelists Charles Max Wood, Avdi Grimm, Josh Susser, James Edward Gray II and David Brady always present a lively and entertaining podcast. When combined with the views of their guest, the discussion never fails to leave me with lessons learned and thoughts provoked.&lt;/p&gt;
&lt;h3&gt;Book: Objects on Rails &amp;#8211; Avdi Grimm&lt;/h3&gt;
&lt;p&gt;Even though I&amp;#8217;m still working my way through Avdi&amp;#8217;s book I&amp;#8217;ve read enough to know that I can thoroughly recommend his approach. As the title implies, Avdi encourages readers of &lt;a href="http://objectsonrails.com/"&gt;Objects on Rails&lt;/a&gt; to go beyond blindly using Rails and think in terms of Ruby objects. His use of what he calls Exhibits to bridge the gap between views and models is exemplary.&lt;/p&gt;
&lt;h3&gt;Book: The Rails View &amp;#8211; John Athayde and Bruce Williams&lt;/h3&gt;
&lt;p&gt;Although not strictly a Ruby book, it is one that I nevertheless thoroughly recommend to all Rails developers. &lt;a href="http://pragprog.com/book/warv/the-rails-view"&gt;The Rails View&lt;/a&gt; provides a long overdue, comprehensive coverage of the one part of the Rails &lt;span class="caps"&gt;MVC&lt;/span&gt; triad that has been often overlooked in the past. With the advent of the Rails 3.1 Asset Pipeline, this is a timely addition.&lt;/p&gt;
&lt;h3&gt;Screencasts: Railscasts Pro &amp;#8211; Ryan Bates&lt;/h3&gt;
&lt;p&gt;For years Ryan Bates endeared himself to the Ruby on Rails community by providing free, informative, well prepared and presented &lt;a href="http://railscasts.com"&gt;Railscasts&lt;/a&gt; about various Rails topics on a weekly basis. Ryan manages to summarise the essence of his topics in 10 or 15 minutes per episode. Now he has launched &lt;a href="http://railscasts.com/pro"&gt;Railscasts Pro&lt;/a&gt;, and at $9 per month I consider them a steal.&lt;/p&gt;
&lt;h3&gt;Github Ruby Style Guide&lt;/h3&gt;
&lt;p&gt;Whilst there are numerous resources about how to solve various problems with the Ruby language, the &lt;a href="https://github.com/styleguide/ruby"&gt;Github Ruby Style Guide&lt;/a&gt; provides an excellent guide to the nuances of the style with which Ruby code should be formatted.&lt;/p&gt;
&lt;h3&gt;Podcast: The Ruby Show&lt;/h3&gt;
&lt;p&gt;For several years I&amp;#8217;ve been enjoying &lt;a href="http://rubyshow.com/"&gt;The Ruby Show&lt;/a&gt;, a weekly Ruby news podcast hosted by Peter Cooper, of &lt;em&gt;Ruby Inside&lt;/em&gt; fame, and Jason Seifer. I like their informal style of banter during which they also manage to deliver a good coverage of what&amp;#8217;s topical in the world of Ruby programming.&lt;/p&gt;
&lt;h2&gt;More Resources on my Radar&lt;/h2&gt;
&lt;p&gt;When I delved further into my library of Ruby resources, I found more excellent examples, some more thoroughly explored than others.&lt;/p&gt;
&lt;h3&gt;Articles: Practicing Ruby &amp;#8211; Gregory Brown&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;ve found some gems of understanding about Ruby within the articles of &lt;a href="http://practicingruby.com/"&gt;Practicing Ruby&lt;/a&gt;, which Gregory Brown describes as &amp;#8220;an eclectic journal for the dedicated hacker&amp;#8221;. It certainly comes under the category of &amp;#8220;Ruby resources I&amp;#8217;d love to fully utilise if I had more time&amp;#8221;. If you want to explore the nuances of programming with Ruby, I thoroughly recommend &lt;em&gt;Practicing Ruby&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Book: Practical Object-Oriented Design in Ruby &amp;#8211; Sandi Metz&lt;/h3&gt;
&lt;p&gt;In fact, it was within a &lt;em&gt;Practicing Ruby&lt;/em&gt; article about &lt;em&gt;&lt;span class="caps"&gt;SOLID&lt;/span&gt; Design Principles&lt;/em&gt; that I first came across the excellent work of Sandi Metz through a recommendation Gregory gave about a talk she gave at GoRuCo in 2009. Now Sandi is in the process of releasing her book, &lt;a href="http://my.safaribooksonline.com/book/programming/ruby/9780132930895"&gt;Practical Object-Oriented Design in Ruby&lt;/a&gt;. Sandi shows how to design Ruby classes so that programmers who use your code later will thank you.&lt;/p&gt;
&lt;h3&gt;Book: Eloquent Ruby &amp;#8211; Russ Olsen&lt;/h3&gt;
&lt;p&gt;How could Ruby programmer who values craftsmanship and who has already read Russ Olsen&amp;#8217;s work not be tempted by his book &lt;em&gt;Eloquent Ruby&lt;/em&gt;? This book guides the reader through a series of rules of thumb about how to make the most of Ruby&amp;#8217;s many facets. For more, see the book&amp;#8217;s &lt;a href="http://eloquentruby.com/"&gt;companion site&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Book: Metaprogramming Ruby &amp;#8211; Paolo Perrotta&lt;/h3&gt;
&lt;p&gt;Want a thorough treatment of metaprogramming techniques in Ruby? Look no further than Paolo Perrotta&amp;#8217;s book, &lt;a href="http://pragprog.com/book/ppmetr/metaprogramming-ruby"&gt;Metaprogamming Ruby&lt;/a&gt;. It guides the reader through the fundamentals of metaprogramming before exploring the way it was used in the Rails 2.3 codebase. Also included are some useful appendices about common Ruby idioms and how DSLs overlap with metaprogramming.&lt;/p&gt;
&lt;h3&gt;Screencast: The Ruby 1.9 Walkthrough &amp;#8211; Peter Cooper&lt;/h3&gt;
&lt;p&gt;At the time of writing I&amp;#8217;m about half way through watching Peter Cooper&amp;#8217;s detailed screencast about what&amp;#8217;s new in Ruby 1.9. What&amp;#8217;s really instructive is the tool that Peter uses throughout to show how snippets of Ruby code produce different results in different versions of Ruby, all as part of the same output. This is a superb way of demonstrating the improvements in Ruby 1.9. Obviously very well researched, &lt;a href="https://cooperpress.com/19walkthrough"&gt;The Ruby 1.9 Walkthrough&lt;/a&gt; is to be thoroughly recommended.&lt;/p&gt;
&lt;h2&gt;Some Old Favourites&lt;/h2&gt;
&lt;h3&gt;Peepcode Screencasts &amp;#8211; Geoffrey Grosenbach&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;m a self-confessed fan of &lt;a href="https://peepcode.com/"&gt;Peepcode Screencasts&lt;/a&gt;. Whilst Peepcode now covers a broad range of technologies there are some excellent recent screencasts which focus on Ruby, such as the Play by Play episodes featuring &lt;a href="https://peepcode.com/products/play-by-play-tenderlove-ruby-on-rails"&gt;Aaron Patterson&lt;/a&gt; and &lt;a href="https://peepcode.com/products/play-by-play-jimweirich-ruby"&gt;Jim Weirich&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Book: The Ruby Programming Language &amp;#8211; David Flanagan &amp;amp; Yukihiro Matsumoto&lt;/h3&gt;
&lt;p&gt;Finally, if you want a definitive reference, &lt;a href="http://shop.oreilly.com/product/9780596516178.do"&gt;The Ruby Programming Language&lt;/a&gt; provides a comprehensive yet concise coverage.&lt;/p&gt;
&lt;h2&gt;In Conclusion&lt;/h2&gt;
&lt;p&gt;The resources about the language have proliferated since 2001 when Dave Thomas and Andy Hunt helped spread Ruby beyond Japan through their book popularly known as &lt;em&gt;The Pickaxe&lt;/em&gt;, which has &lt;a href="http://pragprog.com/book/ruby3/programming-ruby-1-9"&gt;been updated&lt;/a&gt; to cover Ruby 1.9.&lt;/p&gt;
&lt;p&gt;Wherever you are along your journey with exploring programming in Ruby, I hope there is something in this list that you will find useful.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/BR91tQ4f_2c" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2012-06-06-ruby-resources-on-my-radar</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/22</id>
    <published>2011-06-24T22:28:55+10:00</published>
    <updated>2011-06-24T23:53:04+10:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/TaUtmpW2FMg/2011-06-24-rails-camp-9" />
    <title>Rails Camp 9</title>
    <content type="html">&lt;p&gt;Phew! I&amp;#8217;ve just about recovered from Rails Camp 9, an event that may be described as an unconference. It took place over the June long weekend at Lake Ainsworth near Byron Bay on the &lt;span class="caps"&gt;NSW&lt;/span&gt; far north coast.&lt;/p&gt;
&lt;p&gt;For this camp, it was my honour to be one of the organisers. Fortunately, Rails Camp now has a well-established pattern and there were many organisers of previous camps willing to help and advise. And I had a terrific team amongst whom to share the workload.&lt;/p&gt;
&lt;p&gt;Nevertheless, for the benefit of future Rails Camp organisers, I thought I&amp;#8217;d share a few recollections of how our team went about organising Rails Camp 9.&lt;/p&gt;
&lt;h2&gt;The Organising Crew&lt;/h2&gt;
&lt;p&gt;I present the wonderful bunch of Rails hackers who all played their part in ensuring that Rails Camp 9 was, to use an over-used adjective du jour, awesome: &lt;a href="http://twitter.com/snapperwolf"&gt;Jason Crane&lt;/a&gt;, &lt;a href="http://twitter.com/scottharveyco"&gt;Scott Harvey&lt;/a&gt;, &lt;a href="http://twitter.com/zenlunacy"&gt;Zubin Henner&lt;/a&gt;, &lt;a href="http://twitter.com/ben_h"&gt;Ben Hoskings&lt;/a&gt;, &lt;a href="http://twitter.com/tjmcewan"&gt;Tim McEwan&lt;/a&gt;, &lt;a href="http://twitter.com/aemeredith"&gt;Elle Meredith&lt;/a&gt;, &lt;a href="http://twitter.com/keithpitty"&gt;Keith Pitty&lt;/a&gt; and &lt;a href="http://twitter.com/j_stirk"&gt;Jason Stirk&lt;/a&gt;. (Trivia note: half of this crew were at the inaugural Rails Camp at Somersby in 2007.)&lt;/p&gt;
&lt;h2&gt;The Venue: Lake Ainsworth&lt;/h2&gt;
&lt;p&gt;How did we choose the venue? Once we had settled on the idea of holding Rails Camp in the Byron Bay area, the locals in the organising crew &amp;#8211; Zubin Henner, Elle Meredith and Jason Stirk &amp;#8211; scoured the region looking for a suitable venue and came up with only one that could accommodate the numbers we were expecting.&lt;/p&gt;
&lt;p&gt;In many respects &lt;a href="http://www.dsr.nsw.gov.au/lakeainsworth/index.asp"&gt;Lake Ainsworth&lt;/a&gt; was a perfect venue. Nestled between the lake and the beach it had excellent facilities for our needs. The staff were very helpful and I can really only think of two negatives: we were obliged to deal with some unexpected government bureaucracy and we had to hold the camp on a long weekend.&lt;/p&gt;
&lt;h2&gt;How we organised Rails Camp 9&lt;/h2&gt;
&lt;p&gt;Settling on the venue was half the battle. Happily, as this photo shows, we were also able to organise the essential ingredients of Rails Camp.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/keithpitty/5862838749/" title="Rails Camp 9 Ingredients by keithpitty, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5079/5862838749_72b54459cc.jpg" width="640" height="427" alt="Rails Camp 9 Ingredients"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks go to Zubin for organising the beer and Elle for organising the coffee machine. As for the coffee itself, Jason Crane ensured we had excellent beans and well trained baristas!&lt;/p&gt;
&lt;p&gt;Speaking of essential ingredients, securing the services of Ben Hoskings to again set up the server and wifi was wonderful. Apart from one brief power outage during the weekend, everything ran as smooth as clockwork. So coffee, beer and wifi were sorted, ensuring happy campers!&lt;/p&gt;
&lt;p&gt;Some of the other things we did to keep the organisation on track leading up to the weekend were:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Set up a &lt;a href="http://basecamphq.com/"&gt;Basecamp&lt;/a&gt; project, which may have been overkill but proved to be invaluable&lt;/li&gt;
	&lt;li&gt;Distributed responsibilities &amp;#8211; e.g. finance, sponsorship, ticket sales, coffee, beer &amp;#8211; to various members of the crew&lt;/li&gt;
	&lt;li&gt;Held regular virtual meetings via &lt;span class="caps"&gt;IRC&lt;/span&gt;, capturing the logs in Basecamp for reference&lt;/li&gt;
	&lt;li&gt;Used &lt;a href="http://eventbrite.com"&gt;Eventbrite&lt;/a&gt;, &lt;a href="http://paypal.com"&gt;Paypal&lt;/a&gt; and a joint bank account to manage ticket sales&lt;/li&gt;
	&lt;li&gt;Sent messages and encouraged communication via the &lt;a href="http://groups.google.com/group/railscamp"&gt;Railscamp Google Group&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Sent messages via the &lt;a href="http://twitter.com/keithpitty"&gt;@railscamp_au&lt;/a&gt; Twitter account&lt;/li&gt;
	&lt;li&gt;Took advantage of &lt;a href="http://railscampteev7.toolmantim.com/"&gt;the skills&lt;/a&gt; of &lt;a href="http://twitter.com/toolmantim"&gt;Tim Lucas&lt;/a&gt; and &lt;a href="http://twitter.com/waferbaby"&gt;Daniel Bogan&lt;/a&gt; to get the t-shirts designed and ordered&lt;/li&gt;
	&lt;li&gt;Created a &lt;a href="http://github.com/keithpitty/rc9peeps"&gt;simple Rails app&lt;/a&gt; that, amongst other things, enabled sending emails to participants via MailChimp and facilitated printing lanyard inserts&lt;/li&gt;
	&lt;li&gt;Organised buses to transport campers between Gold Coast airport and Lake Ainsworth&lt;/li&gt;
	&lt;li&gt;Created a &lt;a href="http://twitter.com/#!/railscamp_au/railscamp9"&gt;Rails Camp 9 Twitter list&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Organised a welcome &lt;span class="caps"&gt;BBQ&lt;/span&gt; (thanks Zubin) for those who arrived early enough on the Friday&lt;/li&gt;
	&lt;li&gt;Thanks to Elle and &lt;a href="http://twitter.com/gabehollombe"&gt;Gabe Hollombe&lt;/a&gt;, provided an &lt;a href="https://github.com/elle/ideagora"&gt;Ideagora app&lt;/a&gt; for sharing interests, projects and talks&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Running the event&lt;/h2&gt;
&lt;p&gt;One of the wonderful things about an unconference such as Rails Camp is that, once it starts, it is largely self-organising. The 146 participants of Rails Camp 9 decided how they would spend the weekend. Many chose projects to work on and talks to either present or listen to. Some simply appreciated the opportunity to socialise amongst like-minded people. And, of course, there were games of &lt;a href="http://www.amazon.com/Asmodee-849418-Werewolves-Millers-Hollow/dp/B0009Z3M8S"&gt;Werewolf&lt;/a&gt; to be played.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/keithpitty/5862838317/" title="Rails Camp 9 Hacking by keithpitty, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5261/5862838317_6ee37ddca7_z.jpg" width="640" height="427" alt="Rails Camp 9 Hacking"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As an organiser, once the camp had started, I found my role was largely to be alert to the possibility of requests for assistance. Whilst this did keep me reasonably busy I did have the chance to catch up with and meet lots of Ruby people from around Austalia and New Zealand. I also managed, thanks to &lt;a href="http://twitter.com/philoye"&gt;Phil Oye&lt;/a&gt;, to remember how to use &lt;a href="https://github.com/toolmantim/bananajour"&gt;Bananajour&lt;/a&gt; so that I could submit a couple of patches to Ideagora. And, there was one particularly epic game of Werewolf (thanks &lt;a href="http://twitter.com/cjwoodward"&gt;Carl&lt;/a&gt;) to remember.&lt;/p&gt;
&lt;h2&gt;Thanks to our Sponsors&lt;/h2&gt;
&lt;p&gt;A wrap of Rails Camp 9 would not be complete without thanking our sponsors. So, on behalf of the organising crew, I extend a big thank you to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.thoughtworks.com/"&gt;Thoughtworks&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.fivesenses.com.au/"&gt;Five Senses Coffee&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.bluebox.net/"&gt;Blue Box&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.rosenfeldmedia.com/"&gt;Rosenfeld Media&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://ninefold.com/"&gt;Ninefold&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.sitepoint.com/"&gt;Sitepoint&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.lonelyplanet.com/"&gt;Lonely Planet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Future Australian Rails Camps&lt;/h2&gt;
&lt;p&gt;Another heartening thing about the Australian Rails Camp community is that by the end of one camp a volunteer invariably steps up to take responsibility for organising the next camp. Happily, &lt;a href="http://twitter.com/vonconrad"&gt;Sebastian von Conrad&lt;/a&gt; did just that at Lake Ainsworth, agreeing to take possession of the virtual baton to ensure that Rails Camp 10 happens near Adelaide.&lt;/p&gt;
&lt;p&gt;Not only that, there have already been discussions about the possibility of Rails Camp 11 in Queensland and Rails Camp 12 in Tasmania!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/TaUtmpW2FMg" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2011-06-24-rails-camp-9</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/21</id>
    <published>2011-05-13T10:57:11+10:00</published>
    <updated>2011-05-13T10:57:11+10:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/UPtWhg37LYg/2011-05-13-committed-stand-ups" />
    <title>Committed Stand-Ups</title>
    <content type="html">&lt;p&gt;How effective is your daily stand-up meeting? Is it energising the team or does it have a &amp;#8220;going through the motions&amp;#8221; feel to it?&lt;/p&gt;
&lt;p&gt;In his book, &lt;a href="http://pragprog.com/titles/jtrap/the-agile-samurai"&gt;&lt;em&gt;The Agile Samurai&lt;/em&gt;&lt;/a&gt;, Jonathan Rasmusson recommends that each person tell the rest of the team:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;What you did to change the world yesterday&lt;/li&gt;
	&lt;li&gt;How you are going to crush it today&lt;/li&gt;
	&lt;li&gt;How you are going to blast though any obstacles unfortunate enough to be standing in your way&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;#8217;s a change of emphasis that I think is worth trying. As Jonathan says, it is a demonstration of commitment to the team and &amp;#8220;dramatically increases the chances of you getting it done.&amp;#8221;&lt;/p&gt;
&lt;p&gt;However, if being so positive feels uncomfortable or forced, this probably indicates that there are other problems affecting the team&amp;#8217;s morale that need to be dealt with.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/UPtWhg37LYg" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2011-05-13-committed-stand-ups</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/20</id>
    <published>2011-04-27T23:35:11+10:00</published>
    <updated>2011-04-27T23:35:19+10:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/K6IKbKCvVFw/2011-04-27-on-agile" />
    <title>On Agile</title>
    <content type="html">&lt;h2&gt;Bingo&lt;/h2&gt;
&lt;p&gt;Before you turn off, I realise that the term &amp;#8220;agile&amp;#8221; in the context of software development has been overused to death. My aim is not to write a buzzword-compliant essay. Rather, having endured many projects run under the misapprehensions of outmoded assumptions and having endeavoured to get the best out of so-called &amp;#8220;agile&amp;#8221; approaches to software development, I feel I have a worthwhile perspective to offer.&lt;/p&gt;
&lt;h2&gt;Different Perspectives&lt;/h2&gt;
&lt;p&gt;I think the crux of discussing &amp;#8220;agile&amp;#8221; is to acknowledge the differing points of view of the developer and the customer. This may seem obvious but, in my view, it&amp;#8217;s a crucial point.&lt;/p&gt;
&lt;h3&gt;The Developer&amp;#8217;s Viewpoint&lt;/h3&gt;
&lt;p&gt;As a developer, I&amp;#8217;ve had a lot of time to reflect upon shortcomings of the more traditional approach to building software. I well remember attending in-house courses on &amp;#8220;Requirements, Planning and Estimating&amp;#8221; and &amp;#8220;Project Management&amp;#8221; at &lt;span class="caps"&gt;IBM&lt;/span&gt;, early in my career, in the mid-80s. At the time there was much emphasis on documentation. The requirements, the external design and the internal design all had to be documented and formally approved before one line of code was written.&lt;/p&gt;
&lt;p&gt;To be fair, in some cases, projects were divided into stages but, by and large, my experience of project management in the 1980s and 1990s was dominated by the &lt;a href="http://en.wikipedia.org/wiki/Waterfall_model"&gt;waterfall model&lt;/a&gt;. The idea of iterative development had yet to hit the mainstream.&lt;/p&gt;
&lt;p&gt;Central to the problems of the waterfall model is the difficulty in estimating accurately when grappling with initial requirements and designing an application. Usually, throughout the course of a software development project, understanding of requirements and design changes significantly. So it is very unlikely that an accurate estimate can be given at the outset. No doubt this is why &lt;a href="http://www.thomsettinternational.com/main/articles/hot/games.htm"&gt;estimation games&lt;/a&gt; have been well practiced in the software industry.&lt;/p&gt;
&lt;p&gt;As described in Jonathan Rasmusson&amp;#8217;s excellent book, &lt;a href="http://pragprog.com/titles/jtrap/the-agile-samurai"&gt;&lt;em&gt;The Agile Samurai&lt;/em&gt;&lt;/a&gt;, all projects are bound by four variables: Time, Budget, Quality and Scope. The problem with basing a software development project on the waterfall model is that this often leads to an expectation that all four variables will be fixed. Given the inherent difficulty in accurate software project estimation, this is obviously unrealistic.&lt;/p&gt;
&lt;p&gt;The agile approach addresses these problems by treating scope as the only variable and delivering software in frequent iterations. As shown in &lt;a href="http://www.extremeprogramming.org/rules/planninggame.html"&gt;Extreme Programming Release Planning&lt;/a&gt;, which I first experienced about ten years ago, requirements are broken up into &amp;#8220;user stories&amp;#8221;, each of which is estimated and prioritised.&lt;/p&gt;
&lt;p&gt;A key point is the unit of estimation. In the agile approach, it is not a measurement of actual work hours which may be translated into a monetary amount. In original XP planning, the unit was an ideal week. The name of the unit may be arbitrary. It doesn&amp;#8217;t matter what you call it. What really matters is that each user story is estimated relative to others. This enables allocation of user stories to releases more accurately as the developers discover roughly how many units they can complete in each iteration. Also, since iterations are kept small in duration, user feedback allows timely modification and exploration of user stories that will comprise subsequent iterations.&lt;/p&gt;
&lt;p&gt;All the elements of agile planning make sense to me as a developer. However, a customer, not necessarily used to software development, may be less easily persuaded.&lt;/p&gt;
&lt;h3&gt;The Customer&amp;#8217;s Viewpoint&lt;/h3&gt;
&lt;p&gt;As a customer, speaking generally, I expect value for money. For most goods and services I am used to having a fixed-price quotation honoured for clearly agreed specifications.&lt;/p&gt;
&lt;p&gt;Why should I expect any different for software development? If I ask how much it will cost for a specific software application to be built, why should I not expect the supplier to let me know in advance?&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s this talk about estimating requirements in terms of arbitrary points? And what&amp;#8217;s this I hear about &lt;a href="http://www.extremeprogramming.org/rules/pair.html"&gt;pair programming&lt;/a&gt;? Do you seriously expect me to pay for two developers working on the same piece of code at the same time?&lt;/p&gt;
&lt;p&gt;At this point I should emphasise that I am trying to think of various customers that I have dealt with over the years and put myself in their shoes. As I do that I am reminded that these customers have had various degrees of acquaintance with the complexities of developing software. I think that this gets to the heart of the matter. As a customer, if there is a good reason why I should not expect a fixed-price quotation then the developer must be able to explain that reason clearly to me.&lt;/p&gt;
&lt;p&gt;After all, the customer is paying the bills. Any argument for embracing an agile approach must be compelling in monetary terms.&lt;/p&gt;
&lt;h2&gt;Bridging the Gap&lt;/h2&gt;
&lt;p&gt;When we consider the agile approach to software development, I think it is clear that there is a gap between what proponents see as benefits of this approach and the expectations of many customers.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re still with me, you may be expecting that at this point I will reveal my brilliant answer to the conundrum. I am sorry to disappoint you. If there was a brilliant answer I am sure someone else would have capitalised on it before now. Obviously, it is critical for an agile software developer to clearly describe to their customer at the very beginning of an engagement what to expect. As with so much in life, setting expectations is crucial. It is a lesson I need to keep reminding myself.&lt;/p&gt;
&lt;p&gt;Every customer is different. Every relationship will differ. And relationships change over time. I forget where I read it, but the essence of the quote was that &amp;#8220;in a good agile relationship, trust improves with every iteration&amp;#8221;. I like the spirit of that statement.&lt;/p&gt;
&lt;p&gt;It is also important to allow your approach to evolve. As &lt;a href="http://twitter.com/benwebster"&gt;Ben Webster&lt;/a&gt; said recently, &amp;#8220;embracing as many mistakes as possible on the job&amp;#8221; is a useful resource as an agile practitioner.&lt;/p&gt;
&lt;h2&gt;In Conclusion&lt;/h2&gt;
&lt;p&gt;To borrow from &lt;a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month"&gt;&lt;em&gt;The Mythical Man-Month&lt;/em&gt;&lt;/a&gt; by Fred Brooks, there is no silver bullet. Making the most of the agile approach to software development requires an individual response. If you would like to share elements of yours, I look forward to your comments.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/K6IKbKCvVFw" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2011-04-27-on-agile</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/19</id>
    <published>2011-04-05T22:02:19+10:00</published>
    <updated>2011-04-05T22:02:19+10:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/w-0wJy11Z7A/2011-04-05-maintaining-a-legacy-rails-app" />
    <title>Maintaining a Legacy Rails App</title>
    <content type="html">&lt;p&gt;Last night I deployed a new release of a Rails app.&lt;/p&gt;
&lt;p&gt;Having deployed apps built with Rails 3 or at the very least Rails 2 apps using Bundler, the experience of deploying a Rails 2.3.5 app left me with a keen desire to at least bring this app up to Rails 2.3.11 with Bundler.&lt;/p&gt;
&lt;p&gt;One of the delights of last night&amp;#8217;s deployment was having to update RubyGems on the target machine. Usually this is as simple as:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;
gem update --system
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That is, unless you are forced to upgrade to a specific, old release of RubyGems. Being at Rails 2.3.5 with this app, we were &lt;a href="http://excid3.com/blog/2011/02/undefined-local-variable-or-method-version_requirements-for-nameerror/"&gt;in this situation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Speaking of &amp;#8220;not exactly state of the art&amp;#8221;, the version of Ruby on the target machine is Ruby Enterprise Edition 1.8.6.&lt;/p&gt;
&lt;p&gt;Obviously, the preferred option would be to upgrade to Ruby 1.9.2 and Rails 3.0.5 forthwith.&lt;/p&gt;
&lt;p&gt;However, it&amp;#8217;s not my money that will be funding the upgrade. First steps first.  I&amp;#8217;m aiming for the following path:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Rails 2.3.11 with Bundler and latest compatible gems.&lt;/li&gt;
	&lt;li&gt;Ruby 1.9.2&lt;/li&gt;
	&lt;li&gt;Rails 3.0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wish me luck!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/w-0wJy11Z7A" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2011-04-05-maintaining-a-legacy-rails-app</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/18</id>
    <published>2011-03-04T00:38:09+11:00</published>
    <updated>2013-02-17T13:23:37+11:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/7MA1F8vRRWA/2011-03-04-reflections-on-yow-2010-conference" />
    <title>Reflections on YOW 2010 Conference</title>
    <content type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Perhaps I needed time to reflect on such a wonderful conference.&lt;/p&gt;
&lt;p&gt;Ever since the &lt;a href="http://www.yowconference.com.au/melbourne/events_tracks/index_tracks.html"&gt;&lt;span class="caps"&gt;YOW&lt;/span&gt;! Developer Conference&lt;/a&gt; in Melbourne last December, I&amp;#8217;ve been meaning to share some of my impressions. It may be three months down the track but I&amp;#8217;m finally getting around to it!&lt;/p&gt;
&lt;h2&gt;Five Favourite Talks&lt;/h2&gt;
&lt;p&gt;The conference deserved praise for many reasons but I&amp;#8217;ll narrow it down to some brief reflections on five talks that impressed me for different reasons.&lt;/p&gt;
&lt;h3&gt;Neal Ford&lt;/h3&gt;
&lt;p&gt;A small percentage of Rails developers have the opportunity to work in teams developing large, enterprise-scale apps. A not insignificant number of aspersions have been levelled at Rails, claiming that it can&amp;#8217;t scale. So it was refreshing to hear Neal Ford talk about &lt;a href="http://www.yowconference.com.au/melbourne/events_tracks/event_details.html?eventId=2598"&gt;Rails in the Large&lt;/a&gt;, based on his experiences leading a team that has built arguably the biggest Rails app in the world.&lt;/p&gt;
&lt;p&gt;Neal&amp;#8217;s invigorating talk reviewed the lessons learned in the project such as effective testing strategies. For example, he unsurprisingly impressed the audience by relating how, with the help of &lt;a href="https://github.com/dan-manges/unit-record"&gt;UnitRecord&lt;/a&gt;, the team was able to run just under 9,000 tests in 41 seconds! Neal described other testing techniques as well as strategies for aspects such as continuous integration, effective communication in a development team and automation. Crucially, he emphasised ingenious ways that the team kept a sense of fun to the fore at all times.&lt;/p&gt;
&lt;p&gt;There were many more nuggets that this talk contained. If you get the chance to hear Neal speak I thoroughly recommend it.&lt;/p&gt;
&lt;h3&gt;Keynote by Guy Steele and Richard Gabriel&lt;/h3&gt;
&lt;p&gt;I cannot find the words to adequately describe the gem that was the &lt;a href="http://www.yowconference.com.au/melbourne/events_tracks/event_details.html?eventId=2596"&gt;50 in 50&lt;/a&gt; keynote by Guy Steele and Richard Gabriel.&lt;/p&gt;
&lt;p&gt;So I&amp;#8217;ll keep my reflections brief. Wise, well-informed and witty, this talk by Guy and Richard was rich in its perspective of the often weird and wonderful paths that computer languages have followed over the last 50 years. A perfect tonic to prepare us for the conference party!&lt;/p&gt;
&lt;h3&gt;Eric Evans&lt;/h3&gt;
&lt;p&gt;Getting a message across through dry humour is a gift which Eric Evans demonstrated amply in his talk entitled &lt;a href="http://www.yowconference.com.au/melbourne/events_tracks/event_details.html?eventId=2637"&gt;Strategic Design: Avoiding Responsibility Traps&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Eric led the audience through a story about several sub-optimal scenarios that can eventuate when a software development team is faced with the challenge of augmenting a legacy system. His key messages included the importance of distilling the core domain, using context mapping and building an anti-corruption layer. Eric&amp;#8217;s parting recommendations were to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;look for assets in the legacy&lt;/li&gt;
	&lt;li&gt;work in the core domain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And, of course, to make use of his book, &lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215"&gt;Domain-Driven Design&lt;/a&gt;, even if only to read Chapter 14.&lt;/p&gt;
&lt;h3&gt;Jason Yip&lt;/h3&gt;
&lt;p&gt;I love the tagline on Jason Yip&amp;#8217;s blog: &amp;#8220;Making software is about making people.&amp;#8221; So true.&lt;/p&gt;
&lt;p&gt;Jason&amp;#8217;s talk, &lt;a href="http://www.yowconference.com.au/melbourne/events_tracks/event_details.html?eventId=2619"&gt;Row Together, Row in the Right Direction, Row Faster: Improving alignment and throughput in software development&lt;/a&gt;, tuned into vital aspects of collaboration, whether at the level of a team, department or organisation.&lt;/p&gt;
&lt;p&gt;After setting the stage with a few amusing but relevant anecdotes, Jason expanded on his contention that groups of people maximise their collective effectiveness by:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;being aligned and coordinated;&lt;/li&gt;
	&lt;li&gt;sharing the same direction and vision;&lt;/li&gt;
	&lt;li&gt;improving productivity by mastering skills&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jason emphasised that what he had presented was intended to be more of a useful metaphor than the result of rigorous analysis. It would be interesting to see Jason&amp;#8217;s observations validated by quantitative research. Meanwhile, I&amp;#8217;m glad I listened to Jason&amp;#8217;s typically thoughtful, entertaining and thought-provoking talk.&lt;/p&gt;
&lt;h3&gt;Dan Ingalls&lt;/h3&gt;
&lt;p&gt;As someone who, when first exploring object-oriented programming cut his teeth on Smalltalk, I was fortunatate to be able to listen to Dan Ingalls reminisce about his &lt;a href="http://www.yowconference.com.au/melbourne/events_tracks/event_details.html?eventId=2738"&gt;Forty Years of Fun with Computers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It was amazing to listen to Dan speak so humbly about his experiences when they included working with Alan Kay and attending lectures given by Don Knuth, not to mention being the principal architect of five generations of Smalltalk environments. Regardless of all his achievements what shone through above all was his enduring sense of fun. I won&amp;#8217;t attempt to describe the specifics of Dan&amp;#8217;s talk. Suffice to say it was a privilege to be there and a special way to end the conference. If you get the chance to hear Dan speak, grasp it!&lt;/p&gt;
&lt;p&gt;Dan concluded his talk with this wonderful advice:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Keep things simple, general and flexible and you&amp;#8217;ll have fun.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;A Conference to be Recommended&lt;/h2&gt;
&lt;p&gt;So there you have it. Five of my favourite talks from the &lt;span class="caps"&gt;YOW&lt;/span&gt;! Australia 2010 Developer Conference.&lt;/p&gt;
&lt;p&gt;Belated congratulations to Dave Thomas and Lisa Cumes from Bedarra Research Labs for attracting such a superb collection of speakers covering a broad range of topics. The whole conference was a blast and I certainly wholeheartedly recommend the 2011 edition to other Australian developers.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/7MA1F8vRRWA" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2011-03-04-reflections-on-yow-2010-conference</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/17</id>
    <published>2011-02-27T20:53:10+11:00</published>
    <updated>2011-04-28T02:37:51+10:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/5cPinVulrzo/2011-02-27-upgrading-to-rails-3" />
    <title>Upgrading to Rails 3</title>
    <content type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;It was long overdue.&lt;/p&gt;
&lt;p&gt;Rails 3.0.5 is out and I&amp;#8217;ve finally bitten the bullet and upgraded this site to Rails 3 and Ruby 1.9.2.  The site had its genesis back in mid-2007 as I was preparing to start my own business. Since 2008 the codebase hasn&amp;#8217;t received much love. Indeed, I have only published articles here in dribs and drabs over the last couple of years.&lt;/p&gt;
&lt;p&gt;So, as I embarked on this upgrade, I was aware that it also represented an opportunity to clean up some of my code as well as update third party libraries.&lt;/p&gt;
&lt;p&gt;What follows is a story of how the upgrade unfolded including some decisions I made along the way and some lessons I learned.&lt;/p&gt;
&lt;h2&gt;Ruby 1.9.2&lt;/h2&gt;
&lt;p&gt;My initial intention was to just upgrade the app to use Ruby 1.9.2 and attack the Rails 3 upgrade later. However, as I soon found out, getting the app to work on Ruby 1.9 wasn&amp;#8217;t as easy as I had anticipated. Sure, using &lt;span class="caps"&gt;RVM&lt;/span&gt; it was easy to change to using Ruby 1.9.2 in development. I also chose to move to Bundler even though my intention was to stay at Rails 2.3 for now.&lt;/p&gt;
&lt;p&gt;However, I quickly discovered that not all the plugins I was using had been upgraded to run on Ruby 1.9.&lt;/p&gt;
&lt;h2&gt;Syntax Highlighting Adventures&lt;/h2&gt;
&lt;p&gt;Back in 2008 when I &lt;a href="/blog/archives/2008-10-17-code-syntax-highlighting"&gt;implemented syntax code highlighting&lt;/a&gt; I chose to use the tm_syntax_highlighting plugin, which is based on &lt;a href="http://ultraviolet.rubyforge.org/"&gt;Ultraviolet&lt;/a&gt;. Unfortunately, the original tm_syntax_highlighting plugin is not supported on Ruby 1.9. There is a &lt;a href="https://github.com/dasil003/tm_syntax_highlighting"&gt;gem derived from it&lt;/a&gt; that claims to support Ruby 1.9 but I failed to get this to work.&lt;/p&gt;
&lt;p&gt;I had a look at the &lt;a href="http://asciicasts.com/episodes/207-syntax-highlighting"&gt;suggestions from Ryan Bates&lt;/a&gt; and, because I had been using a solution based on Ultraviolet, I considered using &lt;a href="https://github.com/michaeledgar/harsh"&gt;Harsh&lt;/a&gt; but soon found that it was not supported on Ruby 1.9.&lt;/p&gt;
&lt;p&gt;At this point I decided to go the whole hog and upgrade to Rails 3. As for supporting syntax highlighting, I ended up switching to use &lt;a href="http://coderay.rubychan.de/"&gt;CodeRay&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Rails 3 Here I Come&lt;/h2&gt;
&lt;p&gt;First point of call for anybody embarking on a Rails 3 upgrade has to be Jeremy McAnally&amp;#8217;s &lt;a href="http://www.railsupgradehandbook.com/"&gt;Rails 3 Upgrade Handbook&lt;/a&gt;. This invaluable resource not only guides you through using the official &amp;#8220;rails upgrade&amp;#8221; tool but explains how to make the most of the improvements in Rails 3.&lt;/p&gt;
&lt;p&gt;So I methodically worked my way through the upgrade to the point where I was able to start and use the Rails console. This was a real milestone but I still had much to do before I could consider my upgrade complete.&lt;/p&gt;
&lt;h2&gt;Time to jettison old plugins&lt;/h2&gt;
&lt;p&gt;When I attempted to get the app running via a browser it quickly became evident that it was high time I jettisoned some ancient plugins.&lt;/p&gt;
&lt;p&gt;Chief of these was the acts_as_authenticated plugin. Yes, I did say ancient. I&amp;#8217;m aware that &lt;a href="https://github.com/plataformatec/devise"&gt;Devise&lt;/a&gt; is a favoured authentication solution for Rails 3. However, having had success in other projects with &lt;a href="https://github.com/binarylogic/authlogic"&gt;Authlogic&lt;/a&gt;, I chose to use it in the interests of expediency.&lt;/p&gt;
&lt;p&gt;Another old plugin that needed replacing was acts_as_taggable_on_steroids. The &lt;a href="https://github.com/mbleigh/acts-as-taggable-on"&gt;acts_as_taggable_on&lt;/a&gt; gem proved to be an effective replacement for this with minimal changes required.&lt;/p&gt;
&lt;p&gt;The final old plugin to be jettisoned was akismetor, which I replaced with the &lt;a href="https://github.com/joshfrench/rakismet"&gt;Rakismet&lt;/a&gt; gem.&lt;/p&gt;
&lt;h2&gt;Some comments about testing&lt;/h2&gt;
&lt;p&gt;I haven&amp;#8217;t said anything about automated tests to this point. That is quite simply because I haven&amp;#8217;t touched them. I know I should but, since this is a relatively small app that really only affects me, I decided to bypass automated testing in favour of completing the upgrade quickly. Some may scold me for this decision but I couldn&amp;#8217;t justify the effort to myself. I&amp;#8217;ll come back and get the automated tests working again later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If this was a larger app for a customer I would be far less inclined to bypass the task of ensuring that the automated tests work before considering the upgrade complete.&lt;/p&gt;
&lt;h2&gt;Reflections&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;m glad I&amp;#8217;ve taken the time to upgrade this app to Rails 3 and Ruby 1.9.2. It has given me the chance to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;replace old plugins with more recent gems;&lt;/li&gt;
	&lt;li&gt;take advantage of Bundler;&lt;/li&gt;
	&lt;li&gt;practice upgrading to Rails 3;&lt;/li&gt;
	&lt;li&gt;position the app for further code improvements courtesy of Rails 3 and Ruby 1.9.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And, of course, now I can say that I have upgraded an old Rails app to Rails 3!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/5cPinVulrzo" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2011-02-27-upgrading-to-rails-3</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/16</id>
    <published>2010-08-11T12:11:34+10:00</published>
    <updated>2011-02-26T09:42:15+11:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/_FLjIuYt5hQ/2010-08-11-rvm-bundler-and-ruby-tracker" />
    <title>RVM, Bundler and Ruby Tracker</title>
    <content type="html">&lt;h2&gt;Lightning Talk at rorosyd&lt;/h2&gt;
&lt;p&gt;Here are the slides from a lightning talk I gave at &lt;a href="http://rubyonrails.com.au/2010/8/3/sydney-meetup-august-2010"&gt;rorosyd&lt;/a&gt; last night. Having found &lt;a href="http://rvm.beginrescueend.com/"&gt;&lt;span class="caps"&gt;RVM&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://gembundler.com/"&gt;Bundler&lt;/a&gt; and &lt;a href="http://rubytracker.com/"&gt;Ruby Tracker&lt;/a&gt; to be a useful set of tools this year, I thought I&amp;#8217;d take the opportunity to share my experiences. And, as I mentioned during the talk, kudos to Mikel Lindsaar for his &lt;a href="http://lindsaar.net/2010/3/31/bundle_me_some_sanity"&gt;blog post&lt;/a&gt; earlier this year which alerted me to the power of creating a .rvmrc file.&lt;/p&gt;
&lt;div style="width:425px" id="__ss_4940768"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/keithpitty/rvm-bundler-ruby-tracker" title="RVM, Bundler and Ruby Tracker"&gt;&lt;span class="caps"&gt;RVM&lt;/span&gt;, Bundler and Ruby Tracker&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse4940768" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rvmbundlerrubytracker-100810205131-phpapp02&amp;stripped_title=rvm-bundler-ruby-tracker" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse4940768" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rvmbundlerrubytracker-100810205131-phpapp02&amp;stripped_title=rvm-bundler-ruby-tracker" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/keithpitty"&gt;Keith Pitty&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/_FLjIuYt5hQ" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2010-08-11-rvm-bundler-and-ruby-tracker</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/15</id>
    <published>2010-02-10T22:28:00+11:00</published>
    <updated>2011-02-25T19:52:04+11:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/adN5LoewMpk/2010-02-10-ten-years-on" />
    <title>Ten Years On</title>
    <content type="html">&lt;p&gt;Ten years is a long time in technology.&lt;/p&gt;
&lt;p&gt;Recently, on New Year&amp;#8217;s Day, whilst waiting for the Spirit of Tasmania to leave Devonport after a family holiday, I was killing time on Twitter. Several tweets with the tag #10yearsago set me thinking. For a start, ten years ago I&amp;#8217;m sure I wouldn&amp;#8217;t have dreamed of using an application like Twitter on a device like an iPhone.&lt;/p&gt;
&lt;p&gt;Turning my thoughts back in time, I wondered what was significant about my programming career at the turn of the century? After a little thought and stroking of my greying beard my response was that &lt;a href="http://twitter.com/keithpitty/status/7264608249"&gt;10 years ago I was leaving mainframes behind and about to enter the world of EJBs.&lt;/a&gt; For me that was quite a milestone. After earning a living within the realm of &lt;span class="caps"&gt;IBM&lt;/span&gt; mainframe programming since 1983 and delving into object-orientation and the emerging world of web development during the 1990s, the transition to working full-time with Servlets and Enterprise JavaBeans was an exciting step.&lt;/p&gt;
&lt;p&gt;Fast forward to the present and it would appear that I have left the Enterprise Java world behind. Over the last couple of years I haven&amp;#8217;t used Java in anger, instead using &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; as my language of choice in conjunction with frameworks like &lt;a href="http://rubyonrails.org/"&gt;Rails&lt;/a&gt; and &lt;a href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt; for developing web applications.&lt;/p&gt;
&lt;p&gt;You may have noticed that I&amp;#8217;ve only mentioned server-side technologies so far. This is not just because I have felt more at home developing server-side rather than client-side software. When I started down my path of developing web applications, &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt; was the subject of scorn for valid reasons that I won&amp;#8217;t elaborate on here. However, in 2010 I can see that JavaScript is definitely growing in importance. Developer-friendly libraries such as &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt; that have been well tested on all major browsers have changed what JavaScript brings to the table. &lt;a href="http://www.adaptivepath.com/ideas/essays/archives/000385.php"&gt;Ajax&lt;/a&gt; has earned it&amp;#8217;s place in web applications. &lt;a href="http://raphaeljs.com/"&gt;RaphaÃ«l&lt;/a&gt; is an example of sexy visual effects that can be added to a site via a JS library.&lt;/p&gt;
&lt;p&gt;So I have becoming aware that I need to focus more on improving my JavaScript skills to better equip me to enhance user experiences of web applications via JS that runs in a web browser.&lt;/p&gt;
&lt;p&gt;But it turns out that my reasons to learn more about Javascript aren&amp;#8217;t confined to web browsers. Late last year I became aware of &lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt;, which enables the development of event-driven servers using JavaScript. I&amp;#8217;ve barely scratched the surface but I know that others, like &lt;a href="http://simonwillison.net/2009/Nov/23/node/"&gt;Simon Willison&lt;/a&gt;, are very excited by Node.&lt;/p&gt;
&lt;p&gt;Meanwhile, I&amp;#8217;m going back to fundamentals and have started reading &lt;a href="http://www.quirksmode.org/book/"&gt;&lt;em&gt;&lt;span class="caps"&gt;PPK&lt;/span&gt; on JavaScript&lt;/em&gt;&lt;/a&gt; to give me a more solid basis on which to build my JS skills.&lt;/p&gt;
&lt;p&gt;So ten years since I left mainframes behind to enter the world of EJBs I love programming in Ruby and am giving more focus to JavaScript. As for trips down memory lane, maybe another time I&amp;#8217;ll write about the technology I was using 20 years ago&amp;#8230;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/adN5LoewMpk" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2010-02-10-ten-years-on</feedburner:origLink></entry>
  <entry>
    <id>tag:keithpitty.com,2005:BlogPost/14</id>
    <published>2009-10-10T01:11:00+11:00</published>
    <updated>2011-02-25T07:59:19+11:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/keithpitty/~3/Qq4cmPUHPCA/2009-10-10-configuring-capgun" />
    <title>Configuring CapGun</title>
    <content type="html">&lt;p&gt;I&amp;#8217;ve long been a fan of &lt;a href="http://capify.org"&gt;Capistrano&lt;/a&gt;, the Ruby deployment tool that is typically used for deploying Rails applications. And I&amp;#8217;ve also been impressed by the work of Glenn Vanderburg and his colleagues at &lt;a href="http://thinkrelevance.com/"&gt;Relevance&lt;/a&gt;. So I took notice when I recently read &lt;a href="http://blog.thinkrelevance.com/2009/9/16/easy-build-notifications-with-capgun"&gt;about CapGun&lt;/a&gt;, which is useful for sending email notifications whenever a project is deployed.&lt;/p&gt;
&lt;p&gt;The point of this post is that very recently I had the opportunity to install and configure CapGun for a client. The blurb on github told me how to install and configure CapGun. Under the heading of Usage I was encouraged to read the first paragraph:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Good news: it just works.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, almost. CapGun does &amp;#8220;just work&amp;#8221; once you&amp;#8217;ve configured it correctly. Included in the config sample to be added to deploy.rb was:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;
&lt;span class="comment"&gt;# define the options for the actual emails that go out -- :recipients is the only required option&lt;/span&gt;
set &lt;span class="symbol"&gt;:cap_gun_email_envelope&lt;/span&gt;, { &lt;span class="symbol"&gt;:recipients&lt;/span&gt; =&amp;gt; &lt;span class="string"&gt;&lt;span class="delimiter"&gt;%w[&lt;/span&gt;&lt;span class="content"&gt;joe@example.com, jane@example.com&lt;/span&gt;&lt;span class="delimiter"&gt;]&lt;/span&gt;&lt;/span&gt; }
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Unfortunately this was not quite complete enough for CapGun to work. Instead it died deep in the bowels of net/smtp.rb:&lt;/p&gt;
&lt;pre&gt;/usr/local/lib/ruby/1.8/net/smtp.rb:930:in `check_response': 555 5.5.2 Syntax error. 7sm1592402qwb.55 (Net::SMTPFatalError)
	from /usr/local/lib/ruby/1.8/net/smtp.rb:899:in `getok'
	from /usr/local/lib/ruby/1.8/net/smtp.rb:828:in `mailfrom'
	from /usr/local/lib/ruby/1.8/net/smtp.rb:653:in `sendmail'
	from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-2.3.4/lib/action_mailer/base.rb:684:in `perform_delivery_smtp'
	from /usr/local/lib/ruby/1.8/net/smtp.rb:526:in `start'
	from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-2.3.4/lib/action_mailer/base.rb:682:in `perform_delivery_smtp'
	from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-2.3.4/lib/action_mailer/base.rb:523:in `__send__'
	from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-2.3.4/lib/action_mailer/base.rb:523:in `deliver!'
	from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-2.3.4/lib/action_mailer/base.rb:395:in `method_missing'
	from ./vendor/plugins/cap_gun/lib/cap_gun.rb:70&lt;/pre&gt;
&lt;p&gt;The lesson was that the &lt;strong&gt;:cap_gun_email_envelope&lt;/strong&gt; needed to be configured with &lt;strong&gt;:from&lt;/strong&gt; as well as &lt;strong&gt;:recipients&lt;/strong&gt;. And the good news is that the people at Relevance have just accepted my documentation patch.&lt;/p&gt;
&lt;p&gt;And the even better news is that now &lt;a href="http://github.com/relevance/cap_gun"&gt;CapGun&lt;/a&gt; does &amp;#8220;just work&amp;#8221;. It&amp;#8217;s a very handy tool for keeping everyone in a team informed about deployments in an automated and timely manner.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/keithpitty/~4/Qq4cmPUHPCA" height="1" width="1"/&gt;</content>
    <author>
      <name>Keith Pitty</name>
      <email>keith@keithpitty.com</email>
    </author>
  <feedburner:origLink>http://keithpitty.com/blog_posts/2009-10-10-configuring-capgun</feedburner:origLink></entry>
</feed>
