<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US">
  <title>Chris O'Meara - Articles</title>
  <id>tag:chrisomeara.com,2008:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.7.3">Mephisto Noh-Varr</generator>
  
  <link href="http://chrisomeara.com/" rel="alternate" type="text/html" />
  <updated>2008-08-28T21:37:01Z</updated>
  <link rel="self" href="http://feeds.feedburner.com/chrisomeara-articles" type="application/atom+xml" /><entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2008-08-28:22</id>
    <published>2008-08-28T16:00:00Z</published>
    <updated>2008-08-28T21:37:01Z</updated>
    <category term="agile" />
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/377498548/agile-house-cleaning" rel="alternate" type="text/html" />
    <title>Agile House Cleaning</title>
<content type="html">
            &lt;p&gt;Here’s the story board we used to coordinate work on the new house.&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://chrisomeara.com/assets/2008/8/28/Agile_House_Cleaning.jpg" alt="Story Board" /&gt;&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/377498548" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2008/8/28/agile-house-cleaning</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2008-08-27:20</id>
    <published>2008-08-27T16:00:00Z</published>
    <updated>2008-08-28T03:32:48Z</updated>
    <category term="agile" />
    <category term="learning" />
    <category term="xp" />
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/376762847/my-first-3-years-experience-with-xp" rel="alternate" type="text/html" />
    <title>My First 3 Years Experience With XP</title>
<summary type="html">&lt;p&gt;I picked up Kent Beck’s white book at JavaOne in 2002 and read it cover to cover before I got home.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;I picked up Kent Beck’s white book at JavaOne in 2002 and read it cover to cover before I got home.&lt;/p&gt;
&lt;p&gt;Written April 6, 2005&lt;/p&gt;


	&lt;p&gt;I picked up Kent Beck’s white book at JavaOne in 2002 and read it cover to cover before I got home.  It sounded too good to be true because, when I learned software engineering, change was bad.  We learned to predict and control, not embrace, change.  I felt shameful because I would rather write code to explore a problem than write documents and draw pictures.  I felt I was somehow less of an engineer because I had a built-in resistance to doing up-front planning and design work I knew would be useless once I started writing code.  The white book was exciting because it fit with what I knew about how software development actually works.&lt;/p&gt;


	&lt;p&gt;Unfortunately I couldn’t do much with the information because of my position in the organization.  As one of many coders all I could do was download and learn JUnit.  So I learned to unit test, something I read a lot about previously but hadn’t ever practiced, and to influence my coworkers.&lt;/p&gt;


	&lt;p&gt;We were a &lt;span class="caps"&gt;RUP&lt;/span&gt; shop and experts at working on cancelled projects.  The failures were not &lt;span class="caps"&gt;RUP&lt;/span&gt;’s fault.  We wrote a lot of documentation, talked to few customers and had a hard time delivering valuable software.  That’s bad business.  After rolling off of yet another cancelled project I asked for some grace to try something new and the people I work for agreed.&lt;/p&gt;


	&lt;p&gt;I started to lead a small group of people to practice some XP principles.  I had one very junior engineer working with me and a project manager that picked up technical tasks at times.  I told the engineer to write his tests first and gave him examples but we didn’t pair.  He didn’t get it.  I got frustrated.  Out of frustration we paired and he got it.  The design got clearer.  The project started moving forward.  I thought pairing would stink but it didn’t really.  We hired another programmer.  He got us set up with an integration environment (automated unit tests but no acceptance tests).  We started meeting daily for 15 minutes and it helped us.  We delivered our first iteration and it was close but not right.  The problem was too little customer involvement so we engaged our product manager (customer proxy) much more regularly and much more in depth.  Everyone involved agreed we built more solid software than had been built in the past. Just as we finished the second release the project was cancelled and the PM got hammered because the team didn’t produce enough documentation.&lt;/p&gt;


	&lt;p&gt;We were discouraged but had built a reputation as a high-powered team.  The management team assigned us to an existing product team, added a few new hires and ended up with a development team of 11 and a project manager.  They asked me to lead cleanup of a huge mess.  The new project had effectively zero unit tests.  No one could run it without crashing because of concurrency problems.  Bug fixing was the &lt;span class="caps"&gt;ONLY&lt;/span&gt; activity going on and the one person that understood the system was home in India for a month.  So I made myself a nuisance constantly asking “what is the simplest thing that could possibly work?”  We collapsed the huge distributed architecture down into a single process. We got issues out of people’s minds and into a simple tracking system.  We cut out dead code and lots of interesting code the customer proxy hadn’t asked for.  We standardized on a simple toolset.  We applied our XP-like pattern from the previous project and the product finally began to turn around, mostly.  We had a couple of people that simply refused to change the way they built software.  We eventually got into a healthy rhythm where we consistently met our commitments.  That time I got hammered by the PM because he thought I was too drastic in the changes I made.  Not being a programmer himself, he thought more was better when it came to lines of code and that more lines of test code meant less progress on production code.  My boss disagreed: I received a glowing review, a raise and a healthy bonus.  Just before product release the company cancelled the project.  No one saw it coming.  We felt dejected and discouraged.  The team was dismantled and the members scattered.  No one else was doing XP or anything remotely like it.  I decided not to look for a new team.&lt;/p&gt;


	&lt;p&gt;In the end XP helps me accept what I already know about building software: only the customer knows if you’re giving them what they need and that code is the central artifact of a software system.  Now that I’ve experienced some &lt;span class="caps"&gt;XP I&lt;/span&gt; want the rest.&lt;/p&gt;


	&lt;p&gt;Some changes I couldn’t effect:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Couldn’t reconfigure office space&lt;/li&gt;
		&lt;li&gt;Couldn’t change how requirements were captured&lt;/li&gt;
		&lt;li&gt;Couldn’t change how projects were planned&lt;/li&gt;
		&lt;li&gt;Couldn’t impact hiring&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Some observations:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Some (most?) people really like to do unproductive things while at the office (e.g. browse the internet, talk on the cell phone, walk around and chat) instead of working.  That includes me at times.  Pair programming challenges people to actually work.&lt;/li&gt;
		&lt;li&gt;Effective standup meetings require diligent facilitation.&lt;/li&gt;
		&lt;li&gt;You can start quickly with &lt;span class="caps"&gt;TDD&lt;/span&gt; and refactoring and experience quick wins.  Mastering the techniques requires discipline and craftsmanship.&lt;/li&gt;
		&lt;li&gt;Giving people room to build good software dramatically improves morale.&lt;/li&gt;
	&lt;/ul&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/376762847" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2008/8/27/my-first-3-years-experience-with-xp</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2008-08-27:21</id>
    <published>2008-08-27T05:00:00Z</published>
    <updated>2008-08-28T03:29:59Z</updated>
    <category term="agile" />
    <category term="lean" />
    <category term="learning" />
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/376762848/stop-the-line" rel="alternate" type="text/html" />
    <title>Stop The Line</title>
<summary type="html">&lt;p&gt;Around ThoughtWorks, lean is in.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Around ThoughtWorks, lean is in.&lt;/p&gt;
&lt;p&gt;Around ThoughtWorks, lean is in. I read “Lean Software Development” by Tom &amp; Mary Popendieck a few years ago but it didn’t really connect. I worked at the time for a huge international company in a very small corner of their IS world. The company needed help with the basics of software development and hired me based on my background with agile things. The lean concepts made sense but I could not envision applying what I learned. The context was all wrong.&lt;/p&gt;


	&lt;p&gt;ThoughtWorks has the right context. I have worked on four teams during the past year. Each delivered working software incrementally. Each took requirements, refined them, designed, built and deployed solutions. Those solutions realize value. Good job. Mission accomplished?&lt;/p&gt;


	&lt;p&gt;Yes, mission accomplished, but… Now that we don’t struggle (so much) with the basics, what next? Trimming the fat, I think.&lt;/p&gt;


	&lt;p&gt;I find myself starting to apply lean concepts like I started to apply XP—alone. That does not mean unsupported but rather starting in my own sphere of influence. I most easily influence myself and my own actions so I must start at home.&lt;/p&gt;


	&lt;p&gt;On my current team, we get a good number of stories back from BA review and QA review.  My new personal mission: nothing comes back.&lt;/p&gt;


	&lt;p&gt;I think we have all the pieces to make it work. No one pushes me to finish a story before I say it’s done. Our analysts produce high-quality narratives. If I bring the discipline and patience, I think stopping the line can help me make sure nothing comes back.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/376762848" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2008/8/27/stop-the-line</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2008-05-21:19</id>
    <published>2008-05-21T02:00:00Z</published>
    <updated>2008-08-28T03:20:38Z</updated>
    <category term="funny" />
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/376762849/brian-regan-on-flying" rel="alternate" type="text/html" />
    <title>Brian Regan On Flying</title>
<content type="html">
            &amp;lt;object height="355" width="425"&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;embed src="http://www.youtube.com/v/jxe0uO2Dpuc&amp;amp;#38;hl=en" height="355" width="425"&gt;&amp;lt;/embed&gt;&amp;lt;/object&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/376762849" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2008/5/21/brian-regan-on-flying</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2008-05-19:18</id>
    <published>2008-05-19T22:00:00Z</published>
    <updated>2008-05-20T01:58:17Z</updated>
    <category term="CMS" />
    <category term="content management" />
    <category term="ruby" />
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/293914159/i-want-a-ruby-cms" rel="alternate" type="text/html" />
    <title>I Want a Ruby CMS</title>
<summary type="html">&lt;p&gt;Having spent a few weeks exploring CMSes during a recent project start in Atlanta, here’s my rambling answer to “please recommend a Ruby &lt;span class="caps"&gt;CMS&lt;/span&gt;”.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Having spent a few weeks exploring CMSes during a recent project start in Atlanta, here’s my rambling answer to “please recommend a Ruby &lt;span class="caps"&gt;CMS&lt;/span&gt;”.&lt;/p&gt;
&lt;p&gt;Having spent a few weeks exploring CMSes during a recent project start in Atlanta, here’s my rambling answer to “please recommend a Ruby &lt;span class="caps"&gt;CMS&lt;/span&gt;”.&lt;/p&gt;


	&lt;p&gt;Content management is a hugely fragmented market. At one extreme you’ve got huge commercial &lt;span class="caps"&gt;CMS&lt;/span&gt; vendors like Vignette and at the other end hundreds of &lt;span class="caps"&gt;OSS&lt;/span&gt; projects, each scratching some particular itch. You can browse a listing at cmsreview.com to get a feel for the sheer number of options: &lt;a href="http://www.cmsreview.com/CMSListing.html"&gt;http://www.cmsreview.com/CMSListing.html&lt;/a&gt;. During a three week period in Atlanta, Brandon Hastings Byars Esq. and I looked at all of the following (some very briefly):&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Radiant&lt;/li&gt;
		&lt;li&gt;Mephisto&lt;/li&gt;
		&lt;li&gt;Comatose&lt;/li&gt;
		&lt;li&gt;Alfresco&lt;/li&gt;
		&lt;li&gt;Magnolia&lt;/li&gt;
		&lt;li&gt;Hippo&lt;/li&gt;
		&lt;li&gt;Daisy&lt;/li&gt;
		&lt;li&gt;Contribute&lt;/li&gt;
		&lt;li&gt;Plone&lt;/li&gt;
		&lt;li&gt;Bricolage&lt;/li&gt;
		&lt;li&gt;CityDesk&lt;/li&gt;
		&lt;li&gt;Joomla&lt;/li&gt;
		&lt;li&gt;More and more and more and more&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;We even took an afternoon and outlined the stories and time needed to roll our own to meet the client’s needs.&lt;/p&gt;


	&lt;p&gt;Cooperatively with the tech and biz owners, we set out to divide the huge solution space using invariants. We built truth statements and used them as guideposts during our conversations and explorations. We repeated them all day long. We started with this one:&lt;/p&gt;


	&lt;p&gt;“We’re building tools which make experts more effective.”&lt;/p&gt;


	&lt;p&gt;That statement helped us guide the evaluations. Any &lt;span class="caps"&gt;CMS&lt;/span&gt; designed to bring authoring to the non-techie masses immediately got the axe.&lt;/p&gt;


	&lt;p&gt;Our client, as have others, initially requested a Ruby &lt;span class="caps"&gt;CMS&lt;/span&gt;. We explored that preference. As it turns out, they understand what it takes to own and operate a Ruby app and felt comfortable deploying another one. Other architectural options, like Plone on Zope (Python), needed some huge benefit to overcome the preference for Ruby. When pressed further, we discovered grand plans to build around this content management &lt;strong&gt;feature&lt;/strong&gt; with other, more dynamic features in the future. When we probed around those plans, we found out they expected to build a custom Rails app around this content, eventually. Our second invariant ended up like this:&lt;/p&gt;


	&lt;p&gt;“Whatever manages the content will not deliver the content.”&lt;/p&gt;


	&lt;p&gt;That statement eliminated most &lt;span class="caps"&gt;CMS&lt;/span&gt; options, as they mostly want to manage &lt;strong&gt;and&lt;/strong&gt; deliver the content ala Radiant or Magnolia. We explored an architecture centered around extracting content from a content repository (google java content repository) but we realized that solution just gutted the &lt;span class="caps"&gt;CMS&lt;/span&gt; products and the remainder provided little real value.&lt;/p&gt;


	&lt;p&gt;To further clarify, we learned along the way they didn’t want live editing (too risky) or to manage layouts and styles (skilled UI designers do that) and that a production-like preview is a &lt;span class="caps"&gt;MUST&lt;/span&gt; have. Oh, and deployment should be push button but release 1 doesn’t need any fancy scheduling.&lt;/p&gt;


	&lt;p&gt;They really wanted help managing their static content, not a content management system. What started out as a stated &lt;span class="caps"&gt;CMS&lt;/span&gt; problem really turned out to be a release management problem. We designed a solution to deal effectively and realistically with static content in their organization and received praise for ways in which we navigated the ambiguous terms and monstrous &lt;span class="caps"&gt;CMS&lt;/span&gt; solution space.&lt;/p&gt;


	&lt;p&gt;Having said all that, I think any client asking for &lt;span class="caps"&gt;CMS&lt;/span&gt; and asking for Ruby should at least explore the notion that Rails, with carefully selected additions, lends itself to rapidly changing content, frequent deployments and tight version-control integrations. Read this to provoke your thinking:&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://rubyredbricks.com/articles/2008/04/09/rails-as-cms"&gt;http://rubyredbricks.com/articles/2008/04/09/rails-as-cms&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Content management is an overloaded term. You gotta ask what it means.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/293914159" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2008/5/19/i-want-a-ruby-cms</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2007-07-18:15</id>
    <published>2007-07-18T17:00:00Z</published>
    <updated>2007-07-19T04:17:18Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/135172230/mental-space" rel="alternate" type="text/html" />
    <title>Mental Space</title>
<summary type="html">&lt;p&gt;Nicole likes the term mental space.  It’s not derogatory like “dude, you got waaaay too much mental space.”  (An obvious reference to the space between my ears where brain should reside.)  No, I like to think of it like a measurement.  You could define it as the distance between any two adjacent parts of one’s life.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Nicole likes the term mental space.  It’s not derogatory like “dude, you got waaaay too much mental space.”  (An obvious reference to the space between my ears where brain should reside.)  No, I like to think of it like a measurement.  You could define it as the distance between any two adjacent parts of one’s life.&lt;/p&gt;
&lt;p&gt;Nicole likes the term mental space.  It’s not derogatory like “dude, you got waaaay too much mental space.”  (An obvious reference to the space between my ears where brain should reside.)  No, I like to think of it like a measurement.  You could define it as the distance between any two adjacent parts of one’s life.  Examples clarify.  If mental space were a function, M, the following equations would be true:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
M(cycling, chores) = 10
M(fatherhood, food) = 12
M(yard care, social standing) = 2
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;When Nicole uses the term she accurately observes very little mental space between my business and any other part of our family’s life.  We discuss the biz in the car, at the ballpark, at the pool, at the dinner table, on a date.  When I have a quiet moment the biz comes to mind.  When I have spare time I spend it in service to the biz.  The biz seems to bleed into and over everything else.&lt;/p&gt;


	&lt;p&gt;The situation looks like this:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
M(biz, cycling) = 1
M(biz, chores) = 1
M(biz, fatherhood) = 1
M(biz, food) = 1
M(biz, yard care) = 1
M(biz, social standing) = 1
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;I think my M function is busted.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/135172230" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2007/7/18/mental-space</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2007-07-18:14</id>
    <published>2007-07-18T16:00:00Z</published>
    <updated>2007-07-19T04:08:42Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/135156185/how-much-do-you-work" rel="alternate" type="text/html" />
    <title>How Much Do You Work?</title>
<summary type="html">&lt;p&gt;Five weeks ago, Danny, Sean, and I were riding in Danny’s late-model &lt;span class="caps"&gt;SUV&lt;/span&gt; whooshing up I-5 toward the California-Oregon border.  It was a comfortable ride; we laughed and talked about life.  My friend Danny dropped a bombshell question: “How much do you work?”&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Five weeks ago, Danny, Sean, and I were riding in Danny’s late-model &lt;span class="caps"&gt;SUV&lt;/span&gt; whooshing up I-5 toward the California-Oregon border.  It was a comfortable ride; we laughed and talked about life.  My friend Danny dropped a bombshell question: “How much do you work?”&lt;/p&gt;
&lt;p&gt;Five weeks ago, Danny, Sean, and I were riding in Danny’s late-model &lt;span class="caps"&gt;SUV&lt;/span&gt; whooshing up I-5 toward the California-Oregon border.  It was a comfortable ride; we laughed and talked about life.  My friend Danny dropped a bombshell question: “How much do you work?”&lt;/p&gt;


	&lt;p&gt;It seemed like an innocent enough question.  Sean worked seven to four.  He dressed in the closet to avoid waking Heidi.  Danny worked ten hour days but felt thankful because he’s on salary rather than commissions now.  He beat traffic by starting early.&lt;/p&gt;


	&lt;p&gt;I sat there, thinking.  My brain worked slowly.  I felt exhausted, with reason.  I spent the previous week working as hard as possible to finish a release for a surly client.  There were just too many late nights and early mornings for my brain to function at full capacity that afternoon.&lt;/p&gt;


	&lt;p&gt;What was the number?  Was it 40, 50, 60?  I blurted out “I bill about 32 hours a week.”  Realizing I sounded like I kept bankers hours, I quickly told them the rest of the story.  I typically wake and check my email.  The email draws me in; something usually catches my attention and I respond.  After a while the family wakes up and invites me down to breakfast.  So I take a quick break for food and a shower then back to the computer to focus on billable work.  Most days I work until dinner on billable work punctuated by appointments to maintain the network, prospect and generally run the biz.  General administration or accounting or email or feeds or system administration or unearthing my desk fill many evenings after dinner and some family time.  Not all, as Nicole and I occasionally enjoy a movie or a date, but many.&lt;/p&gt;


	&lt;p&gt;I don’t know how many working hours that adds up to.  It’s like, all of them, except the ones I don’t.  Running your own biz is like that.&lt;/p&gt;


	&lt;p&gt;Does it have to be?  I’m not sure but I thought a lot about the question the past five weeks.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/135156185" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2007/7/18/how-much-do-you-work</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2007-06-21:11</id>
    <published>2007-06-21T16:45:00Z</published>
    <updated>2007-06-21T16:50:26Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/132644326/hello-world-in-concierge" rel="alternate" type="text/html" />
    <title>Hello, World In Concierge</title>
<content type="html">
            &lt;p&gt;I just posted yet another hello, world app.  This one demonstrates integrating &lt;a href="http://chrisomeara.com/2007/6/16/concierge-library"&gt;Concierge&lt;/a&gt;  into a Rails app.  Hopefully, the article helps answer the "so, what" question with respect to Concierge.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://chrisomeara.com/2007/6/21/concierge-sample"&gt;Say hello to Concierge.&lt;/a&gt;&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/132644326" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2007/6/21/hello-world-in-concierge</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2007-06-19:3</id>
    <published>2007-06-19T14:58:00Z</published>
    <updated>2007-06-19T15:18:46Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/132644327/announcing-concierge" rel="alternate" type="text/html" />
    <title>Announcing Concierge</title>
<content type="html">
            &lt;p&gt;I recently developed and released an open source library called Concierge on Ruby Forge. Concierge provides conventions and plumbing to join service implementations with service consumers.  It represents my attempt to scratch an itch, emulate the Rails coding style and give something back to the Ruby community.  Hope you enjoy it.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://chrisomeara.com/2007/6/16/concierge-library"&gt;Read the introduction.&lt;/a&gt;&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/132644327" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2007/6/19/announcing-concierge</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2007-01-27:7</id>
    <published>2007-01-27T17:00:00Z</published>
    <updated>2007-06-19T18:31:16Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/132644328/how-can-you-love-me-if-you-haven-t-seen-my-code" rel="alternate" type="text/html" />
    <title>How Can You Love Me If You Haven't Seen My Code?</title>
<summary type="html">&lt;blockquote&gt;
    &lt;p&gt;maker: a person or thing that makes or produces something : a cabinetmaker.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I make software just like artists make art, carpenters make woodworks, or chefs make gourmet meals.  You could also call me a creator or a craftsman.  I manipulate code and the result, when executed by a computer, solves real business problems.  I love it.  It's fun and engaging.&lt;/p&gt;</summary><content type="html">
            &lt;blockquote&gt;
    &lt;p&gt;maker: a person or thing that makes or produces something : a cabinetmaker.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I make software just like artists make art, carpenters make woodworks, or chefs make gourmet meals.  You could also call me a creator or a craftsman.  I manipulate code and the result, when executed by a computer, solves real business problems.  I love it.  It's fun and engaging.&lt;/p&gt;
&lt;blockquote&gt;
    &lt;p&gt;maker: a person or thing that makes or produces something : a cabinetmaker.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I make software just like artists make art, carpenters make woodworks, or chefs make gourmet meals.  You could also call me a creator or a craftsman.  I manipulate code and the result, when executed by a computer, solves real business problems.  I love it.  It's fun and engaging.&lt;/p&gt;

&lt;p&gt;So what?&lt;/p&gt;

&lt;p&gt;I recently met two men from a local company.  They informed me that they saw my resume on [insert name of major 'net job site here] and they wanted to meet me; would I come have lunch with them?  I accepted.  &lt;/p&gt;

&lt;p&gt;The meeting was a full court press, an all out effort to convince me to become their employee.  I barely spoke.  They told me war stories about their business, grand plans for market domination, the fumblings of their competitors.  They must have someone with exactly my background and experience to go on fighting the fight.  Flattering, right?  Mostly.&lt;/p&gt;

&lt;p&gt;I barely spoke.  I nodded and occasionally laughed, when appropriate of course.  I wondered when I needed to speak up and prove some of the things they thought they knew about me.  I didn't need to.  When I did speak, I informed them of my preference for contract work.  It's clean, I told them.  You find a need, explain it to me and we agree on what my services are worth.  I make something, you pay me.  It's good.  Repeat as needed.&lt;/p&gt;

&lt;p&gt;Maybe they did not hear me.&lt;/p&gt;

&lt;p&gt;Anyway, they believed they needed me for their job.  But wait...I make stuff, I told myself, and they never let me show what I make.  A question niggled at the back of mind: "how can you love me if you've never seen my code."&lt;/p&gt;

&lt;p&gt;I don't suppose that Mr. Suit must open TextMate and appreciate some elegant bit of metaprogramming.  He probably needs to see the finished product, like evaluating a home builder by walking through a fine home.  He probably needs to see the fine materials, neatly fit and finished walls and cabinetry and perfectly installed fixtures and appliances.  But Mr. Tech, oh he needs to see that elegant bit of metaprogramming because &lt;strong&gt;that&lt;/strong&gt; sets me apart from the other makers out there.  You find the love in the details.&lt;/p&gt;

&lt;p&gt;The result?  It didn't work out.  I just wish I had listened to that little voice earlier.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/132644328" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2007/1/27/how-can-you-love-me-if-you-haven-t-seen-my-code</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2006-12-10:8</id>
    <published>2006-12-10T17:00:00Z</published>
    <updated>2007-06-19T18:35:53Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/132644329/loading-quicktime-content-in-thickbox-on-safari" rel="alternate" type="text/html" />
    <title>Loading QuickTime Content in Thickbox on Safari</title>
<summary type="html">&lt;p&gt;So I've been working on &lt;a href="http://melodysphotography.com" title="Melody's Photography"&gt;melodysphotography.com&lt;/a&gt; and have it pretty far along.  In the &lt;a href="http://melodysphotography.com/portfolio.html" title="Melody's Portfolio"&gt;portfolio&lt;/a&gt; section, I load QuickTime movies into a [thickbox][3].  It's a great effect, very nice and clean but Safari doesn't display the movie when the content loads.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;So I've been working on &lt;a href="http://melodysphotography.com" title="Melody's Photography"&gt;melodysphotography.com&lt;/a&gt; and have it pretty far along.  In the &lt;a href="http://melodysphotography.com/portfolio.html" title="Melody's Portfolio"&gt;portfolio&lt;/a&gt; section, I load QuickTime movies into a [thickbox][3].  It's a great effect, very nice and clean but Safari doesn't display the movie when the content loads.&lt;/p&gt;
&lt;p&gt;So I've been working on &lt;a href="http://melodysphotography.com" title="Melody's Photography"&gt;melodysphotography.com&lt;/a&gt; and have it pretty far along.  In the &lt;a href="http://melodysphotography.com/portfolio.html" title="Melody's Portfolio"&gt;portfolio&lt;/a&gt; section, I load QuickTime movies into a &lt;a href="http://codylindley.com/Javascript/257/thickbox-one-box-to-rule-them-all" title="Thickbox"&gt;thickbox&lt;/a&gt;.  It's a great effect, very nice and clean but Safari doesn't display the movie when the content loads.  After some experimentation, I realized that the hover background color change on the close link is enough to trigger a redraw and the movie appears and starts playing.  So I put together the following script to force the issue.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script type="text/javascript"&amp;gt;
$(document).ready(function() {
  closeButton = document.getElementById("TB_closeWindowButton");
  color = closeButton.style.color;
  closeButton.style.color = "white";
  closeButton.style.color = color;
})
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It works great, problem solved.  By the way, when thickbox loads content, the load event doesn't seem to fire so I included the script just before the close body tag.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/132644329" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2006/12/10/loading-quicktime-content-in-thickbox-on-safari</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2006-12-03:4</id>
    <published>2006-12-03T17:00:00Z</published>
    <updated>2007-06-19T18:32:05Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/132644330/stopping-quicktime-when-thickbox-closes" rel="alternate" type="text/html" />
    <title>Stopping QuickTime When Thickbox Closes</title>
<summary type="html">&lt;p&gt;So I'm working on &lt;a href="http://melodysphotography.com" title="Melody's Photography"&gt;melodysphotography.com&lt;/a&gt; and I want to load QuickTime content in a &lt;a href="http://codylindley.com/Javascript/257/thickbox-one-box-to-rule-them-all" title="Thickbox"&gt;thickbox&lt;/a&gt;.  It works , with the addition of my css hack, fairly well except that the audio track continues to play when the thickbox closes in Safari.  Now that's ugly.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;So I'm working on &lt;a href="http://melodysphotography.com" title="Melody's Photography"&gt;melodysphotography.com&lt;/a&gt; and I want to load QuickTime content in a &lt;a href="http://codylindley.com/Javascript/257/thickbox-one-box-to-rule-them-all" title="Thickbox"&gt;thickbox&lt;/a&gt;.  It works , with the addition of my css hack, fairly well except that the audio track continues to play when the thickbox closes in Safari.  Now that's ugly.&lt;/p&gt;
&lt;p&gt;So I'm working on [melodysphotography.com][1] and I want to load QuickTime content in a [thickbox][2].  It works , with the addition of my css hack, fairly well except that the audio track continues to play when the thickbox closes in Safari.  Now that's ugly.  I googled around and found out that Apple makes a &lt;a href="https://developer.apple.com/documentation/QuickTime/REF/QT41_HTML/QT41WhatsNew-72.html" title="QuickTime JavaScript API"&gt;JavaScript API&lt;/a&gt; available from Safari.  With a little work, I came up with the following script which overrides the thickbox remove function and stops the QuickTime player before calling the original remove function.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;TB_originalRemove = TB_remove;

TB_remove = function() {
  try {
    document.movie1.Stop();
  } catch(err) {}
  try {
    document.movie2.Stop();
  } catch(err) {}
  TB_originalRemove();
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Wondering about the movie1, movie2 stuff?  It's an ugly cross-browser thing required to support Firefox, Safari, and IE on Windoze and OS X.  I'll post another entry with the details and relevant links.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/132644330" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2006/12/3/stopping-quicktime-when-thickbox-closes</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2006-12-03:9</id>
    <published>2006-12-03T17:00:00Z</published>
    <updated>2007-06-19T18:38:52Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/132644331/making-quicktime-object-tags-work-in-ie-firefox-and-safari" rel="alternate" type="text/html" />
    <title>Making QuickTime Object Tags Work in IE, Firefox, and Safari</title>
<content type="html">
            &lt;p&gt;I take no credit for this work, but I wanted to point out an excellent reference for when you're trying to wrangle QuickTime content into IE, Firefox, and Safari without losing your mind.  You might be tempted to go read your favorite reference on the &lt;code&gt;&amp;lt;object&amp;gt;&lt;/code&gt; tag.  Resist the urge and go read the article &lt;a href="http://juicystudio.com/article/object-paranoia.php" title="Object Paranoia at Juicy Studio"&gt;"Object Paranoia" over at Juicy Studio&lt;/a&gt;.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/132644331" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2006/12/3/making-quicktime-object-tags-work-in-ie-firefox-and-safari</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2006-12-01:5</id>
    <published>2006-12-01T17:00:00Z</published>
    <updated>2007-06-19T18:25:34Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/132644332/small-projects-breadcrumbs" rel="alternate" type="text/html" />
    <title>Small Projects: Breadcrumbs</title>
<summary type="html">&lt;p&gt;What must you leave behind on an agile project in order for someone to be able to pick it up and maintain or enhance it in the future?  It's an interesting question because agile projects tend to travel light and carry as few artifacts as possible.  Here are my initial thoughts, please feel free to &lt;a href="mailto:chris@coderhythm.com"&gt;send me your suggestions&lt;/a&gt; and I'll consider adding them to the list.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;What must you leave behind on an agile project in order for someone to be able to pick it up and maintain or enhance it in the future?  It's an interesting question because agile projects tend to travel light and carry as few artifacts as possible.  Here are my initial thoughts, please feel free to &lt;a href="mailto:chris@coderhythm.com"&gt;send me your suggestions&lt;/a&gt; and I'll consider adding them to the list.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A document, somewhere, with these bootstrap instructions in it.  I've walked into several projects where the bootstrap instructions were "ask Joe."  Now, Joe is a great guy and all but Joe probably has another job by now if he's still around at all.  Joe might not remember all the details.  Joe might have gotten hit by a truck last week.  Bummer.  Write this stuff down in a file and check it in.  Put it on a wiki.  Email it to the entire project team.&lt;/li&gt;
&lt;li&gt;Where can I find the source?  Hopefully the answer is "in subversion."&lt;/li&gt;
&lt;li&gt;How do I configure my development environment?  Be sure to mention which version of the editor (e.g. Eclipse, Visual Studio) created the project files.  There's more to the dev environment than just the source though.  Include references to development database instances and schemata, usernames, passwords, test data, etc.&lt;/li&gt;
&lt;li&gt;How do I run the software on my dev host?  Running a project up may require stubs, configurators, magic files, directory structures, environment variables, etc.&lt;/li&gt;
&lt;li&gt;How do I run the tests?  You did write tests, didn't you?  Make sure to mention which suites exist and why.  For example, it's interesting to know that you have unit, integration and acceptance tests available to you.  Just looking at Java source, you might miss Ruby or Javascript tests in the project.&lt;/li&gt;
&lt;li&gt;Who understands this project well enough to answer questions about it from a &lt;em&gt;business&lt;/em&gt; perspective?  When you start enhancing and bug fixing domain expertise may become your scarcest commodity.&lt;/li&gt;
&lt;li&gt;Where is my validation environment and how to I deploy to it?  These things tend to decay so be prepared to spend some time resurrecting the validation environment.&lt;/li&gt;
&lt;li&gt;What is the procedure to deploy to production?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So there's the trail.  Enough?&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/132644332" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2006/12/1/small-projects-breadcrumbs</feedburner:origLink></entry>
  <entry xml:base="http://chrisomeara.com/">
    <author>
      <name>chris</name>
    </author>
    <id>tag:chrisomeara.com,2006-12-01:6</id>
    <published>2006-12-01T17:00:00Z</published>
    <updated>2007-06-19T18:28:01Z</updated>
    <link href="http://feeds.feedburner.com/~r/chrisomeara-articles/~3/132644333/motivation-factors" rel="alternate" type="text/html" />
    <title>Motivation Factors</title>
<content type="html">
            &lt;p&gt;I recently read &lt;a href="http://www.softwarebyrob.com/articles/Nine_Things_Developers_Want_More_Than_Money.aspx"&gt;&lt;em&gt;Nine Things Developers Want More Than Money&lt;/em&gt;&lt;/a&gt; over at &lt;a href="http://www.softwarebyrob.com"&gt;Software By Rob&lt;/a&gt;.  Please read it.  I found it so accurate I almost laughed out loud.  I sent it to my wife.  She almost laughed out loud.  I'm a motivation factor guy, not a hygiene factor guy.  &lt;a href="mailto:chris@coderhythm.com"&gt;Email me&lt;/a&gt; and let me know where you fit in.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/chrisomeara-articles/~4/132644333" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://chrisomeara.com/2006/12/1/motivation-factors</feedburner:origLink></entry>
</feed>
