<?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:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://clint-hill.com/wp-atom.php">
	<title type="text">Clint Hill</title>
	<subtitle type="text">your everyday nerd</subtitle>

	<updated>2009-09-25T19:50:14Z</updated>
	<generator uri="http://wordpress.org/" version="2.8.5">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://clint-hill.com" />
	<id>http://clint-hill.com/feed/atom/</id>
	

			<link rel="self" href="http://feeds.feedburner.com/ClintHill" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[No room to gripe]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/gpc-Y9RKB5s/" />
		<id>http://clint-hill.com/?p=390</id>
		<updated>2009-09-25T19:50:14Z</updated>
		<published>2009-09-25T19:50:14Z</published>
		<category scheme="http://clint-hill.com" term="Uncategorized" />		<summary type="html"><![CDATA[I just caused a release to miss production.
Regular Expression bug. 
No room to gripe about anything. Whatever righteous ground I thought I might have had is now negated. Back to square 1.
]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/09/25/no-room-to-gripe/">&lt;p&gt;I just caused a release to miss production.&lt;/p&gt;
&lt;p&gt;Regular Expression bug. &lt;/p&gt;
&lt;p&gt;No room to gripe about anything. Whatever righteous ground I thought I might have had is now negated. Back to square 1.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/gpc-Y9RKB5s" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/09/25/no-room-to-gripe/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/09/25/no-room-to-gripe/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/09/25/no-room-to-gripe/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[Why Microsoft is still losing]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/V14WOOmU4zc/" />
		<id>http://clint-hill.com/?p=387</id>
		<updated>2009-09-25T16:00:38Z</updated>
		<published>2009-09-25T16:00:38Z</published>
		<category scheme="http://clint-hill.com" term="Uncategorized" />		<summary type="html"><![CDATA[Microsoft is making another push to gain more developers. As if they already didn&#8217;t have enough in the corporate world.
They created a program called WebSiteSpark. It&#8217;s a package a developer can by for $100. It even let&#8217;s the developer pay that money after 3 years. For that $100 you get a package deal probably worth [...]]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/09/25/why-microsoft-is-still-losing/">&lt;p&gt;Microsoft is making another push to gain more developers. As if they already didn&amp;#8217;t have enough in the corporate world.&lt;/p&gt;
&lt;p&gt;They created a program called &lt;a href="http://www.microsoft.com/web/websitespark/"&gt;WebSiteSpark&lt;/a&gt;. It&amp;#8217;s a package a developer can by for $100. It even let&amp;#8217;s the developer pay that money after 3 years. For that $100 you get a package deal probably worth more than $5000 (I didn&amp;#8217;t do the math &amp;#8211; but it&amp;#8217;s a generous package). It&amp;#8217;s a pitch to developers to use Microsoft products without the big licensing costs up-front.&lt;/p&gt;
&lt;p&gt;But that&amp;#8217;s only the pitch. The reality is all of the strings attached. The first requirement I find troubling is that within 6 months you have to submit back to Microsoft a website you developed with those tools. This must be for verification? And not &amp;#8220;all&amp;#8221; developers can get involved. You have to be a legit business, less than 10 employees and not a public company. As well it&amp;#8217;s not just $100. It&amp;#8217;s a hook to get an annual fee after the three years if you want to keep the software/licenses. Then it&amp;#8217;s an option of paying for the whole thing at $999/year or just the server licenses at $199/year.&lt;/p&gt;
&lt;p&gt;In any case, it&amp;#8217;s not cheap. Nor is it really flexible.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s go over a hypothetical.&lt;/p&gt;
&lt;p&gt;Two developers looking to get started with a website idea. They both have paid the same amount of money for a laptop. Developer A chooses to use Microsoft platform tools and sticks with the Windows XP/7 installation that comes with your typical Best Buy laptop. Developer B, with the same laptop decides to reformat his laptop with one of the dozens of free linux platforms.&lt;/p&gt;
&lt;p&gt;Developer A pays Microsoft the money to get into the program and submits to the regiment required. After spending the time registering to be a part of the program, downloading the GBs of software (or waiting for snail mail) spends the hour just installing all of the software he needs to get going.&lt;/p&gt;
&lt;p&gt;Developer B opens up Terminal and begins coding.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m certainly being dramatic. But for developers who have worked both sides of this fence know that I&amp;#8217;m mostly right.&lt;/p&gt;
&lt;p&gt;And I&amp;#8217;ll throw this out &amp;#8211; for roughly the same money the two developers spent on their (really well outfitted high performing) developer laptop &amp;#8211; I can by a Mac and skip all of the steps above. If I want to spend money I can by TextMate (&amp;lt; $100).&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/V14WOOmU4zc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/09/25/why-microsoft-is-still-losing/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/09/25/why-microsoft-is-still-losing/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/09/25/why-microsoft-is-still-losing/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[NullReferenceException]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/qccKecYkrS0/" />
		<id>http://clint-hill.com/?p=385</id>
		<updated>2009-09-24T15:17:01Z</updated>
		<published>2009-09-24T15:17:01Z</published>
		<category scheme="http://clint-hill.com" term="Uncategorized" />		<summary type="html"><![CDATA[Yesterday I wrote a bug.
That bug got to QA.
I fixed the bug, re-released to QA and QA then approved my code.
We should be releasing to PROD today.
My boss &#8220;questioned&#8221; my code.
There&#8217;s a lot more to this than what I&#8217;m bemoaning here. During the development of this application I had to be involved in all aspects. [...]]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/09/24/nullreferenceexception/">&lt;p&gt;Yesterday I wrote a bug.&lt;/p&gt;
&lt;p&gt;That bug got to QA.&lt;/p&gt;
&lt;p&gt;I fixed the bug, re-released to QA and QA then approved my code.&lt;/p&gt;
&lt;p&gt;We should be releasing to PROD today.&lt;/p&gt;
&lt;p&gt;My boss &amp;#8220;questioned&amp;#8221; my code.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a lot more to this than what I&amp;#8217;m bemoaning here. During the development of this application I had to be involved in all aspects. From the business to QA and PROD operations. While I still don&amp;#8217;t know a lot about the environment, I was asked to assure the success of the release of my code to brand new servers. And all of the dependencies. And all of the network ports being open. And all of the URL routes.  &lt;/p&gt;
&lt;p&gt;On top of this I learned a critical lesson about the process here. The UI/UX team has final say on everything. This is good information. See during development when I was working with the business (those who actually asked for the app) they requested changes to the UI. I obliged. This was, as I have learned, the absolute wrong thing to do.&lt;/p&gt;
&lt;p&gt;And that&amp;#8217;s where the bug came from. I had code written to accommodate the business requests. At the 11th hour I had to change it back to accommodate the UI/UX team. &lt;/p&gt;
&lt;p&gt;In a rush I made a mistake. Not a mistake I would normally make. A mistake that makes me look as though I have only been writing code for the last year (not 10). My boss questioning my code stings. I take ownership of the mistake &amp;#8211; but I want someone to take ownership of the process that led me to make it.&lt;/p&gt;
&lt;p&gt;NullReferenceException is an exception that occurs when you try to perform an action on something that doesn&amp;#8217;t exist.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/qccKecYkrS0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/09/24/nullreferenceexception/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/09/24/nullreferenceexception/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/09/24/nullreferenceexception/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[JavaScript and my work]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/zwknWEaB-uk/" />
		<id>http://clint-hill.com/?p=382</id>
		<updated>2009-09-10T16:14:20Z</updated>
		<published>2009-09-10T16:14:20Z</published>
		<category scheme="http://clint-hill.com" term="Uncategorized" />		<summary type="html"><![CDATA[At work I am doing a lot of JavaScript development. There is an interesting observation to make about this.
I first saw JavaScript in 1998. I wasn&#8217;t a real developer then but I was aspiring to be. It started while I was working a pretty weird job as a Education Consultant at IKON Education Services. My [...]]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/09/10/javascript-and-my-work/">&lt;p&gt;At work I am doing a lot of JavaScript development. There is an interesting observation to make about this.&lt;/p&gt;
&lt;p&gt;I first saw JavaScript in 1998. I wasn&amp;#8217;t a real developer then but I was aspiring to be. It started while I was working a pretty weird job as a Education Consultant at IKON Education Services. My job was to talk people into taking Microsoft certification courses at IKON. Strangely I got the job because (at the time) I wanted to be in sales and account management. Looking back I was really &amp;#8230; really stupid. Anyways a co-worker was into fantasy football and he knew HTML and a little JavaScript. Almost every day he was changing his profile page to show an image or some funny text. One day I asked him &amp;#8220;how do you do that?&amp;#8221;&lt;/p&gt;
&lt;p&gt;A year later, and after taking some of those courses I was selling, I got a job at a small web development company. My first job there was to develop a game based on the popular board game &amp;#8220;&lt;a href="http://en.wikipedia.org/wiki/Mastermind_(board_game)"&gt;MasterMind&lt;/a&gt;&amp;#8220;. I was told &amp;#8220;it would be easiest to develop it all in JavaScript&amp;#8221;. The part that I remember the most was thinking that JavaScript was totally wrong for the job because it was only good at &lt;a href="http://www.google.com/search?hl=en&amp;#038;q=javascript+onmouseover+image+swap"&gt;swapping out images on mouse-overs&lt;/a&gt;. I scoffed at the thought, but continued.&lt;/p&gt;
&lt;p&gt;I moved on from that company because I felt I wanted to do &amp;#8220;real&amp;#8221; development with languages that were &amp;#8220;better and stronger&amp;#8221; than JavaScript. Slowly but surely along the way I got more and more familiar with JavaScript because everywhere I turned I had to use it in some fashion. I eventually learned it&amp;#8217;s inherent powers and ability. &lt;/p&gt;
&lt;p&gt;Now I&amp;#8217;m in a job where JavaScript is my number one tool. And I know so much more about the language than I did back then. &lt;/p&gt;
&lt;p&gt;The observation is that sometimes there are powerful tools at your disposal right in front of you and you don&amp;#8217;t know it, because you don&amp;#8217;t know the tools. &lt;/p&gt;
&lt;p&gt;I used to say &amp;#8220;I know JavaScript and have used it&amp;#8221;. Now I say &amp;#8220;I&amp;#8217;m a JavaScript developer&amp;#8221;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/zwknWEaB-uk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/09/10/javascript-and-my-work/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/09/10/javascript-and-my-work/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/09/10/javascript-and-my-work/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[Leah Ronnie Jean Hill]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/pNHNkMNlnw8/" />
		<id>http://clint-hill.com/?p=378</id>
		<updated>2009-08-05T12:59:38Z</updated>
		<published>2009-08-05T12:57:34Z</published>
		<category scheme="http://clint-hill.com" term="Life" />		<summary type="html"><![CDATA[Our third baby girl came on 7/31/2009. While we had a little scare during the delivery &#8211; everything worked out. She is a beautiful girl and weighed 7 lbs 7 oz. Mommy is doing great and frankly is an amazing woman. I&#8217;m a happy daddy and a lucky boy.

]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/08/05/leah-ronnie-jean-hill/">&lt;p&gt;Our third baby girl came on 7/31/2009. While we had a little scare during the delivery &amp;#8211; everything worked out. She is a beautiful girl and weighed 7 lbs 7 oz. Mommy is doing great and frankly is an amazing woman. I&amp;#8217;m a happy daddy and a lucky boy.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://clint-hill.com/wp-content/uploads/2009/08/p8280193.jpg"&gt;&lt;img src="http://clint-hill.com/wp-content/uploads/2009/08/p8280193-300x225.jpg" alt="Leah Ronnie Jean Hill" title="Leah Ronnie Jean Hill" width="300" height="225" class="aligncenter size-medium wp-image-380" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/pNHNkMNlnw8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/08/05/leah-ronnie-jean-hill/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/08/05/leah-ronnie-jean-hill/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/08/05/leah-ronnie-jean-hill/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[SIF Message Parsing made easy &#8230; with Siffer]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/do8F3zo7gs0/" />
		<id>http://clint-hill.com/?p=372</id>
		<updated>2009-07-15T02:38:30Z</updated>
		<published>2009-07-15T02:35:58Z</published>
		<category scheme="http://clint-hill.com" term="Code" />		<summary type="html"><![CDATA[Forgive the formatting of this post. But I wanted to share the XML parsing I added to Siffer with an example.

require 'rubygems'
require 'siffer'
xml = "&#60;SIF_Message Version=\"2.3\" xmlns=\"http://www.sifinfo.org/infrastructure/2.x\"&#62;
&#60;SIF_Ack&#62;
&#60;SIF_Header&#62;
&#60;SIF_MsgId&#62;AB1058CD3261545A31905937B265CE01&#60;/SIF_MsgId&#62;
&#60;SIF_Timestamp&#62;2006-02-18T08:39:40-08:00&#60;/SIF_Timestamp&#62;
&#60;SIF_SourceId&#62;SifInfo_TestZIS&#60;/SIF_SourceId&#62;&#60;/SIF_Header&#62;
&#60;SIF_OriginalSourceId&#62;RamseyLib&#60;/SIF_OriginalSourceId&#62;
&#60;SIF_OriginalMsgId&#62;1298ACEF3261545A31905937B265CE01&#60;/SIF_OriginalMsgId&#62;
&#60;SIF_Status&#62;&#60;SIF_Code&#62;0&#60;/SIF_Code&#62;
&#60;SIF_Data&#62;&#60;SIF_Message Version=\"2.3\"&#62;&#60;SIF_Request&#62;
&#60;SIF_Header&#62;&#60;SIF_MsgId&#62;A3E90785EFDA330DACB00785EFDA330D&#60;/SIF_MsgId&#62;
&#60;SIF_Timestamp&#62;2006-02-18T08:39:02-08:00&#60;/SIF_Timestamp&#62;&#60;
SIF_SourceId&#62;RamseySIS&#60;/SIF_SourceId&#62;&#60;/SIF_Header&#62;
&#60;SIF_Version&#62;2.*&#60;/SIF_Version&#62;&#60;SIF_MaxBufferSize&#62;1048576&#60;/SIF_MaxBufferSize&#62;&#60;
SIF_Query&#62;&#60;SIF_QueryObject ObjectName=\"LibraryPatronStatus\" /&#62;
&#60;SIF_ConditionGroup Type=\"None\"&#62;&#60;SIF_Conditions Type=\"None\"&#62;&#60;SIF_Condition&#62;
&#60;SIF_Element&#62;@SIF_RefObject&#60;/SIF_Element&#62;&#60;SIF_Operator&#62;EQ&#60;/SIF_Operator&#62;
&#60;SIF_Value&#62;StaffPersonal&#60;/SIF_Value&#62;&#60;/SIF_Condition&#62;&#60;/SIF_Conditions&#62;&#60;/SIF_ConditionGroup&#62;&#60;/SIF_Query&#62;
&#60;/SIF_Request&#62;&#60;/SIF_Message&#62;&#60;/SIF_Data&#62;&#60;/SIF_Status&#62;&#60;/SIF_Ack&#62;&#60;/SIF_Message&#62;"

msg = Message.parse(xml)
puts msg.is_a?(Ack)
puts msg.status.code == "0"

Notice that the msg object returned from parse is actually the Ack object and can return the attributes [...]]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/07/15/sif-message-parsing-made-easy-with-siffer/">&lt;p&gt;Forgive the formatting of this post. But I wanted to share the XML parsing I added to &lt;a href="http://h3osoftware.com/siffer/"&gt;Siffer&lt;/a&gt; with an example.&lt;/p&gt;
&lt;pre&gt;
require 'rubygems'
require 'siffer'
xml = "&amp;lt;SIF_Message Version=\"2.3\" xmlns=\"http://www.sifinfo.org/infrastructure/2.x\"&amp;gt;
&amp;lt;SIF_Ack&amp;gt;
&amp;lt;SIF_Header&amp;gt;
&amp;lt;SIF_MsgId&amp;gt;AB1058CD3261545A31905937B265CE01&amp;lt;/SIF_MsgId&amp;gt;
&amp;lt;SIF_Timestamp&amp;gt;2006-02-18T08:39:40-08:00&amp;lt;/SIF_Timestamp&amp;gt;
&amp;lt;SIF_SourceId&amp;gt;SifInfo_TestZIS&amp;lt;/SIF_SourceId&amp;gt;&amp;lt;/SIF_Header&amp;gt;
&amp;lt;SIF_OriginalSourceId&amp;gt;RamseyLib&amp;lt;/SIF_OriginalSourceId&amp;gt;
&amp;lt;SIF_OriginalMsgId&amp;gt;1298ACEF3261545A31905937B265CE01&amp;lt;/SIF_OriginalMsgId&amp;gt;
&amp;lt;SIF_Status&amp;gt;&amp;lt;SIF_Code&amp;gt;0&amp;lt;/SIF_Code&amp;gt;
&amp;lt;SIF_Data&amp;gt;&amp;lt;SIF_Message Version=\"2.3\"&amp;gt;&amp;lt;SIF_Request&amp;gt;
&amp;lt;SIF_Header&amp;gt;&amp;lt;SIF_MsgId&amp;gt;A3E90785EFDA330DACB00785EFDA330D&amp;lt;/SIF_MsgId&amp;gt;
&amp;lt;SIF_Timestamp&amp;gt;2006-02-18T08:39:02-08:00&amp;lt;/SIF_Timestamp&amp;gt;&amp;lt;
SIF_SourceId&amp;gt;RamseySIS&amp;lt;/SIF_SourceId&amp;gt;&amp;lt;/SIF_Header&amp;gt;
&amp;lt;SIF_Version&amp;gt;2.*&amp;lt;/SIF_Version&amp;gt;&amp;lt;SIF_MaxBufferSize&amp;gt;1048576&amp;lt;/SIF_MaxBufferSize&amp;gt;&amp;lt;
SIF_Query&amp;gt;&amp;lt;SIF_QueryObject ObjectName=\"LibraryPatronStatus\" /&amp;gt;
&amp;lt;SIF_ConditionGroup Type=\"None\"&amp;gt;&amp;lt;SIF_Conditions Type=\"None\"&amp;gt;&amp;lt;SIF_Condition&amp;gt;
&amp;lt;SIF_Element&amp;gt;@SIF_RefObject&amp;lt;/SIF_Element&amp;gt;&amp;lt;SIF_Operator&amp;gt;EQ&amp;lt;/SIF_Operator&amp;gt;
&amp;lt;SIF_Value&amp;gt;StaffPersonal&amp;lt;/SIF_Value&amp;gt;&amp;lt;/SIF_Condition&amp;gt;&amp;lt;/SIF_Conditions&amp;gt;&amp;lt;/SIF_ConditionGroup&amp;gt;&amp;lt;/SIF_Query&amp;gt;
&amp;lt;/SIF_Request&amp;gt;&amp;lt;/SIF_Message&amp;gt;&amp;lt;/SIF_Data&amp;gt;&amp;lt;/SIF_Status&amp;gt;&amp;lt;/SIF_Ack&amp;gt;&amp;lt;/SIF_Message&amp;gt;"

msg = Message.parse(xml)
puts msg.is_a?(Ack)
puts msg.status.code == "0"
&lt;/pre&gt;
&lt;p&gt;Notice that the &lt;code&gt;msg&lt;/code&gt; object returned from &lt;code&gt;parse&lt;/code&gt; is actually the &lt;code&gt;Ack&lt;/code&gt; object and can return the attributes accordingly.&lt;/p&gt;
&lt;p&gt;The way to do this yourself is the following:&lt;/p&gt;
&lt;pre&gt;
gem install siffer -v 0.0.7
&lt;/pre&gt;
&lt;p&gt;Then create a file with the proper require statements you see above. Grab an example SIF Message XML and call &lt;code&gt;Message.parse&lt;/code&gt;. The parse method will return the proper object of the parsed messgae (i.e. Request message will return a Request object back).&lt;/p&gt;
&lt;p&gt;There are edge cases yet to be debugged &amp;#8211; but 90% of all SIF messages are now parsing and Siffer includes all SIF Message objects.&lt;/p&gt;
&lt;p&gt;Stay tuned for PUSH/PULL Agents!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/do8F3zo7gs0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/07/15/sif-message-parsing-made-easy-with-siffer/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/07/15/sif-message-parsing-made-easy-with-siffer/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/07/15/sif-message-parsing-made-easy-with-siffer/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[ZenTest dropped redgreen]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/OOq-eTm6TRc/" />
		<id>http://clint-hill.com/?p=361</id>
		<updated>2009-07-05T15:19:10Z</updated>
		<published>2009-07-05T15:19:09Z</published>
		<category scheme="http://clint-hill.com" term="Code" />		<summary type="html"><![CDATA[If you&#8217;re used to running autospec for your spec tests, and you recently updated all of your gems, you might notice that the red/green coloring of your terminal disappeared. In fact you might notice that require 'autotest/redgreen' is throwing an exception.
Well I just found out that ZenTest dropped most of it&#8217;s plugins (redgreen being one) [...]]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/07/05/zentest-dropped-redgreen/">&lt;p&gt;If you&amp;#8217;re used to running autospec for your spec tests, and you recently updated all of your gems, you might notice that the red/green coloring of your terminal disappeared. In fact you might notice that &lt;code&gt;require 'autotest/redgreen'&lt;/code&gt; is throwing an exception.&lt;/p&gt;
&lt;p&gt;Well I just found out that ZenTest &lt;a href="http://blog.zenspider.com/2009/03/wanted-27-cute-little-puppies.html"&gt;dropped most of it&amp;#8217;s plugins&lt;/a&gt; (redgreen being one) as of version 4.1.0.  &lt;/p&gt;
&lt;p&gt;The fix for me was to uninstall ZenTest then install ZenTest 4.0.0.&lt;/p&gt;
&lt;p&gt;Maybe someone will give me the better solution? Did the plugin get a gem?&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/OOq-eTm6TRc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/07/05/zentest-dropped-redgreen/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/07/05/zentest-dropped-redgreen/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/07/05/zentest-dropped-redgreen/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[Construction Driven Design]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/5hH2HqJWCcU/" />
		<id>http://clint-hill.com/?p=355</id>
		<updated>2009-07-11T13:14:07Z</updated>
		<published>2009-07-04T17:56:08Z</published>
		<category scheme="http://clint-hill.com" term="Code" />		<summary type="html"><![CDATA[[UPDATE] I made significant updates to Siffer because of this post and as a result the code you see here is no longer up-to-date. http://github.com/clinth3o/siffer and look at the Siffer::Xml. 
A part of the SIF that I am implementing in Siffer is the Data Models. This part of Siffer could be extremely tedious. There are [...]]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/07/04/construction-driven-design/">&lt;p&gt;[UPDATE] I made significant updates to Siffer because of this post and as a result the code you see here is no longer up-to-date. &lt;a href="http://github.com/clinth3o/siffer"&gt;http://github.com/clinth3o/siffer&lt;/a&gt; and look at the Siffer::Xml. &lt;/p&gt;
&lt;p&gt;A part of the &lt;a href="http://specification.sifinfo.org/Implementation/2.3/index.html"&gt;SIF&lt;/a&gt; that I am implementing in &lt;a href="http://h3osoftware.com/siffer/"&gt;Siffer&lt;/a&gt; is the &lt;a href="http://specification.sifinfo.org/Implementation/2.3/IndexOfCommonElements.html#IndexOfCommonElements"&gt;Data Models&lt;/a&gt;. This part of Siffer could be extremely tedious. There are 101 of these things.&lt;/p&gt;
&lt;p&gt;Each data model has it&amp;#8217;s own elements (values if you will), which some are repeatable, conditional or mandatory. I also have to be able to output them in XML format. The end goal would be to output something like this for an Address Data Model:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;Address Type="0123"&amp;gt;
  &amp;lt;Street&amp;gt;
    &amp;lt;Line1&amp;gt;1 IBM Plaza&amp;lt;/Line1&amp;gt;
    &amp;lt;Line2&amp;gt;Suite 2000&amp;lt;/Line2&amp;gt;
    &amp;lt;StreetNumber&amp;gt;1&amp;lt;/StreetNumber&amp;gt;
    &amp;lt;StreetName&amp;gt;IBM&amp;lt;/StreetName&amp;gt;
    &amp;lt;StreetType&amp;gt;Plaza&amp;lt;/StreetType&amp;gt;
    &amp;lt;ApartmentType&amp;gt;Suite&amp;lt;/ApartmentType&amp;gt;
    &amp;lt;ApartmentNumber&amp;gt;2000&amp;lt;/ApartmentNumber&amp;gt;
  &amp;lt;/Street&amp;gt;
  &amp;lt;City&amp;gt;Chicago&amp;lt;/City&amp;gt;
  &amp;lt;County&amp;gt;Cook&amp;lt;/County&amp;gt;
  &amp;lt;StateProvince&amp;gt;IL&amp;lt;/StateProvince&amp;gt;
  &amp;lt;Country&amp;gt;US&amp;lt;/Country&amp;gt;
  &amp;lt;PostalCode&amp;gt;60611&amp;lt;/PostalCode&amp;gt;
  &amp;lt;GridLocation&amp;gt;
    &amp;lt;Latitude&amp;gt;41.850000&amp;lt;/Latitude&amp;gt;
    &amp;lt;Longitude&amp;gt;-87.650000&amp;lt;/Longitude&amp;gt;
  &amp;lt;/GridLocation&amp;gt;
&amp;lt;/Address&amp;gt;
&lt;/pre&gt;
&lt;p&gt;I don&amp;#8217;t want to write a class for each Data Model (remember there are 101 of them). That would suck. But it&amp;#8217;s a required portion of the framework and I have to. So how do I do them in a way that is easy and &lt;em&gt;fun&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;I call it &lt;strong&gt;C&lt;/strong&gt;onstruction &lt;strong&gt;D&lt;/strong&gt;riven &lt;strong&gt;D&lt;/strong&gt;esign. I&amp;#8217;m not sure I am the first to really come up with this concept. I did some googling and couldn&amp;#8217;t find anything so I thought I&amp;#8217;d share my idea. So here is the best definition I can come up with:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
Defining the template of a class and &lt;strong&gt;how you want to write&lt;/strong&gt; the class prior to any implementation.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Which is to say: Mock up the way you want to code each class, then fill in the details to make it work. The template portion of the definition is the key. First you create how you will &amp;#8220;template&amp;#8221; each of these similar classes before the &amp;#8220;base&amp;#8221; class ever exists. The most important part however is the &lt;strong&gt;how&lt;/strong&gt;. You are defining how you want to write all of these classes. And that is where the term &amp;#8220;Construction&amp;#8221; comes into play. The design of the code is driven by how you want to &lt;strong&gt;construct&lt;/strong&gt; the code physically. The &lt;a href="http://specification.sifinfo.org/Implementation/2.3/DataModel.html"&gt;Data Model&lt;/a&gt; section of the SIF is really the best example of when to use CDD. The circumstance is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;there are 100s of classes to create&lt;/li&gt;
&lt;li&gt;they all share features and/or functionality&lt;/li&gt;
&lt;li&gt;you can&amp;#8217;t really make them all dynamic or runtime only, rather they have to be &amp;#8220;physical&amp;#8221;&lt;/li&gt;
&lt;li&gt;and the most important part: you don&amp;#8217;t want to spend the time coding each one with all of the appropriate getters/setters and methods&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;#8217;s look at the Data Model code I created for Siffer, but first let&amp;#8217;s look at what we might have to do for just the &lt;a href="http://specification.sifinfo.org/Implementation/2.3/DataModel.html#621Address"&gt;Address Data Model&lt;/a&gt; using the more traditional way:&lt;/p&gt;
&lt;pre&gt;
require 'builder'
class Address

  attr_accessor :type, :street, :city, :county, :state_province
  attr_accessor :country, :postal_code, :grid_location

  def initialize(type, street, city, county, state, country, postal, grid)
    raise "Type is mandatory" unless type
    @type = type
    raise "Street is mandatory" unless street
    @street = street
    raise "City is mandatory" unless city
    @city = city
    @county = county
    raise "State/Province is mandatory" unless state
    @state_province = state
    raise "Postal Code is mandatory" unless postal
    @postal_code = postal
    raise "Country is mandatory" unless country
    @country = country
    @grid_location = grid
  end

  def to_xml
    xml = Builder::XmlMarkup.new
    xml.Address(:type =&gt; type) do |body|
      body.Street(street)
      body.City(city)
      body.State(state_province)
      body.County(county)
      body.Country(country)
      body.PostalCode(postal_code)
      body.GridLocation(grid_location)
    end
    xml.target!
  end

end
&lt;/pre&gt;
&lt;p&gt;This would be the simplest form of the Address class. Whew. One down and only 100 more to go! Keep in mind though we are missing the conditional feature as well as repeatable attributes. Now the &lt;code&gt;initialize&lt;/code&gt; method just got 5-10 lines longer. And consider this: &lt;a href="http://specification.sifinfo.org/Implementation/2.3/DataModel.html#621Address"&gt;Address contains elements that are themselves Data Models&lt;/a&gt;. Look at Street for example. It has it&amp;#8217;s own sub elements. Now we can see that just to accomplish the Address Data Model we might be in for a hour or more of just typing. Bleh.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t want to do this for 101 classes. So I sat down for a few minutes and thought about how I &lt;em&gt;would&lt;/em&gt; want to write the classes. Let&amp;#8217;s begin CDD!&lt;/p&gt;
&lt;p&gt;Here is what I came up with:&lt;/p&gt;
&lt;pre&gt;
class Address
  attribute :type
  element :street, :mandatory
  element :city
  element :county
  element :state_province
  element :country
  element :postal_code
  element :grid_location
end
&lt;/pre&gt;
&lt;p&gt;As you can see, this way I write far few lines. The class definition is very easy to understand and I can control each element for mandatory, conditional and repeatable. I wouldn&amp;#8217;t mind doing this for 101 classes!&lt;/p&gt;
&lt;p&gt;Now that I have &lt;em&gt;how&lt;/em&gt; I want to &lt;em&gt;type&lt;/em&gt; each class, I need to implement the code that will make this all work. (a little note about Ruby &amp;#8211; it&amp;#8217;s beautiful in the way it can accomplish this). First I need a way to capture the method calls &lt;code&gt;attribute&lt;/code&gt; and &lt;code&gt;element&lt;/code&gt;. Let&amp;#8217;s build a module:&lt;/p&gt;
&lt;pre&gt;
module DataElement
  module ClassMethods

    def element(name, type = &lt;img src='http://clint-hill.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /&gt; ptional, *conditions)
      class_eval "def #{name};@values[:#{name}];end"
      class_eval "def #{name}=(value);@values[:#{name}] = value;end"
      @mandatory ||= []
      @conditional ||= {}
      @mandatory &lt;&lt; name if type == :mandatory
      @conditional[name] = conditions if type == :conditional
    end

    def attribute(name, default = nil)
      @attributes ||= {}
      @attributes[name] = default
    end

  end

  def self.included(base)
    base.extend ClassMethods
  end
end
&lt;/pre&gt;
&lt;p&gt;Now I can make the Address class above include this module to get the &lt;code&gt;attribute&lt;/code&gt; and &lt;code&gt;element&lt;/code&gt; methods:&lt;/p&gt;
&lt;pre&gt;
class Address
  include DataElement
  attribute :type
  element :street, :mandatory
  element :city
  element :county
  element :state_province
  element :country
  element :postal_code
  element :grid_location
end
&lt;/pre&gt;
&lt;p&gt;That's a good look. The &lt;code&gt;include&lt;/code&gt; statement defines the class as a data element. Now piece by piece I'll explain the module.&lt;/p&gt;
&lt;p&gt;First the &lt;code&gt;element&lt;/code&gt; method receives three arguments. The name of the element, the type (mandatory, conditional, repeatable) and the conditions if it's conditional. With those arguments we can create instance methods for each element. This dynamically builds our getters and setters (no more typing by hand!). Then it stores the mandatory and conditional elements for use later to perform validations. The &lt;code&gt;attribute&lt;/code&gt; method does the same thing for the attributes of the Data Model.&lt;/p&gt;
&lt;p&gt;But we're missing the way to &lt;code&gt;initialize&lt;/code&gt; new instances of these Data models in an automated way. Again - we don't want to write an &lt;code&gt;initialize&lt;/code&gt; method for all 101 of these classes. Stick it in the module!&lt;/p&gt;
&lt;pre&gt;
  def initialize(values = {})
    write_attributes(values)
    values = remove_attributes(values)
    write(values)
    check_mandatory(values)
    check_conditional(values)
  end

  def write_attributes(values)
    @attributes ||= {}
    unless class_attributes.nil?
      class_attributes.each{|k,v| @attributes[k] = v}
      attr_values = values.slice(*class_attributes.keys)
      attr_values.each{|k,v| @attributes[k] = v}
    end
  end

  def remove_attributes(values)
    values.except(*class_attributes.keys) rescue values
  end

  def write(values)
    @values ||= {}
    values.each{|k,v| @values[k] = v}
  end

  def check_mandatory(values)
    mandatory.each do |element|
      unless values.keys.include?(element)
        raise "#{element.to_s.humanize} is mandatory for #{self.class}."
      end
    end
  end

  def check_conditional(values)
    unless values.keys.any?{|v| conditional.keys.include?(v)}
      conditional.each do |element, conditions|
        unless conditions.any?{|c| values.keys.include?(c)}
          raise "#{element.to_s.humanize} is mandatory for #{self.class}\
           if #{conditions.map{|c| c.to_s.humanize}.join(" or ")} is missing"
        end
      end
    end
  end

  def class_attributes
    self.class.instance_variable_get("@attributes")
  end

  def mandatory
    self.class.instance_variable_get("@mandatory")
  end

  def conditional
    self.class.instance_variable_get("@conditional")
  end
&lt;/pre&gt;
&lt;p&gt;With these methods now in place we can initialize an Address like this:&lt;/p&gt;
&lt;pre&gt;
@street = Street.new(:line_1 =&gt; "13618 W. Port Royale")
@grid = GridLocation.new(:longitude =&gt; 3.098, :latitude =&gt; 4.566)
@address = Address.new(:type =&gt;"0123",
                        :street =&gt; @street,
                        :city =&gt; "Surprise",
                        :county =&gt; "Maricopa",
                        :state_province =&gt; "AZ",
                        :country =&gt; "US",
                        :postal_code =&gt; 85379,
                        :grid_location =&gt; @grid)
&lt;/pre&gt;
&lt;p&gt;Hey - I snuck in the Street and GridLocation models there didn't I! Here they are:&lt;/p&gt;
&lt;pre&gt;
class Street
  include DataElement
  element :line_1, :mandatory
  element :line_2
  element :line_3
  element :complex
  element :street_number
  element :street_prefix
  element :street_name
  element :street_type
  element :street_suffix
  element :apartment_type
  element :apartment_number_prefix
  element :apartment_number
  element :apartment_number_suffix
end

class GridLocation
  include DataElement
  element :longitude
  element :latitude
end
&lt;/pre&gt;
&lt;p&gt;And then to get the xml output we need for each of these data models:&lt;/p&gt;
&lt;pre&gt;
  def to_xml
    xml = Builder::XmlMarkup.new
    args = (attributes.nil?) ? self.class.to_s : [self.class.to_s, attributes]
    xml.tag!(*args) { |body|
      @values.each do |key, value|
        if(value.is_a?(DataElement))
          body &lt;&lt; value.to_xml
        else
          body.tag!(key.to_s.classify, value)
        end
      end
    }
    xml.target!
  end

  alias :to_s :to_xml
&lt;/pre&gt;
&lt;p&gt;So with all of this now I can create any Data Model I wish like this:&lt;/p&gt;
&lt;pre&gt;
class ConstructionDrivenDesign
  include DataElement
  attribute :type, "kick-ass"
  element :laziness
  element :speed, :conditional, :laziness
end
@cdd = ConstructionDrivenDesign.new(:laziness =&gt; true)
@cdd_fast = ConstructionDrivenDesign.new(:type =&gt; "mach-1", :speed =&gt; "fast")
puts @cdd
puts @cdd_fast
&amp;lt;ConstructionDrivenDesign type="kick-ass"&amp;gt;&amp;lt;Lazines&amp;gt;true&amp;lt;/Lazines&amp;gt;&amp;lt;/ConstructionDrivenDesign&amp;gt;
&amp;lt;ConstructionDrivenDesign type="mach-1"&amp;gt;&amp;lt;Speed&amp;gt;fast&amp;lt;/Speed&amp;gt;&amp;lt;/ConstructionDrivenDesign&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Hopefully this illustrates Construction Driven Design. It's not rocket science. It's just a way for a lazy developer to get a lot done in the fewest keystrokes.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/5hH2HqJWCcU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/07/04/construction-driven-design/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/07/04/construction-driven-design/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/07/04/construction-driven-design/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[Projects retropsective]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/llOOlgi5Is0/" />
		<id>http://clint-hill.com/?p=351</id>
		<updated>2009-07-01T15:39:07Z</updated>
		<published>2009-07-01T15:35:53Z</published>
		<category scheme="http://clint-hill.com" term="Work" />		<summary type="html"><![CDATA[I wanted to document the last two projects a little &#8230;
Accomplishments
The first was a website for a property management company. This should go live today or tomorrow and I&#8217;ll probably post it here. This site took a while to get through because of conflicting timelines and deadlines. Fortunately the client was extremely patient. I&#8217;m proud [...]]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/07/01/projects-retropsective/">&lt;p&gt;I wanted to document the last two projects a little &amp;#8230;&lt;/p&gt;
&lt;h4&gt;Accomplishments&lt;/h4&gt;
&lt;p&gt;The first was a website for a property management company. This should go live today or tomorrow and I&amp;#8217;ll probably post it here. This site took a while to get through because of conflicting timelines and deadlines. Fortunately the client was extremely patient. I&amp;#8217;m proud of the work. The site design is really nice and the work was pleasing. &lt;/p&gt;
&lt;p&gt;The second was a website for a payment gateway. It should be live in a day or two as well. This project was good for me. It forced me to step back into .NET and made me learn a domain I hadn&amp;#8217;t completely understood yet. Going back into .NET, specifically C# was good because I was able to bring some Ruby mentality to the code. I noticed that I wrote fewer lines of code and only wrote code I absolutely needed. This isn&amp;#8217;t Ruby idiomatic per se, but it&amp;#8217;s the style I learned best from Ruby &amp;#8211; not C#. I also noticed that my design process was much more fluid than in the past. I didn&amp;#8217;t sit down with UML diagrams first to mock up the design, rather I sat down and started writing. &lt;/p&gt;
&lt;h4&gt;Lessons&lt;/h4&gt;
&lt;p&gt;I call these lessons because it&amp;#8217;s true, I did learn. But it&amp;#8217;s not new lessons as much as reminders. I know all of this stuff. I just need to be more disciplined. &lt;/p&gt;
&lt;p&gt;First I learned that I shouldn&amp;#8217;t write notes in too many different places. I found I had too many places with notes and sketches. This was problematic because when I&amp;#8217;d get to writing code I may only have one piece of info in front of me, even though I had a couple of pieces of info somewhere else. There were quite a few times I&amp;#8217;d post products for review and whole requirements were missed simply because I was looking at the wrong note. I did a great job of note-taking but a pretty poor job of note-reading. Right now I have four notepads and two clients and the notes are scattered amongst all of the notepads. The result is that going forward I will put each client project into it&amp;#8217;s own &lt;a href="http://www.moleskine.com/"&gt;Moleskine&lt;/a&gt;. This way I can deal with only one notepad at a time for each client. &lt;/p&gt;
&lt;p&gt;I learned I should stick to my guns. The second project was requested to be done in 40 hours. Given the requirements I read at the time it seemed doable. And I agreed to do it &amp;#8211; even though I quoted more than 40 to finish it. In fact I folded on that twice. My original quote was 60-80 hours. Then it turned into 30-50. I conceded to the client&amp;#8217;s wish and agreed to try and do it in more like 40. Turns out we are really closer to 60-80 when it&amp;#8217;s all said and done. Funny thing &amp;#8211; I don&amp;#8217;t feel bad for having missed the deadline as much as I feel bad for agreeing to do it in that short amount of time. Software requirements change and timelines should change with them. Looking back on the work I did it is much bigger than 40 hours, and the original requirements I was provided represent half of the whole project.&lt;/p&gt;
&lt;p&gt;The last thing I learned was to take my time in the first week of a project. I need to really absorb the whole product before I dig in. I still need to write code early, but I shouldn&amp;#8217;t do it to simply fulfill one or two of the requirements. I should do it with the whole product in mind. There were a number of times where in the middle of writing code for a feature I would realize that there were actually two or three features hidden in the one I was working on. &lt;/p&gt;
&lt;p&gt;Pretty good work for the last few months. And from now on I&amp;#8217;m going to focus my notes, stand my ground on expectations and take the time to think out the whole product early and often.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/llOOlgi5Is0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/07/01/projects-retropsective/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/07/01/projects-retropsective/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/07/01/projects-retropsective/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>clinthill</name>
						<uri>http://clint-hill.com</uri>
					</author>
		<title type="html"><![CDATA[Madi and Nola Speak]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ClintHill/~3/qDpcPd2832w/" />
		<id>http://clint-hill.com/?p=347</id>
		<updated>2009-06-10T04:41:00Z</updated>
		<published>2009-06-10T04:40:59Z</published>
		<category scheme="http://clint-hill.com" term="Life" />		<summary type="html"><![CDATA[For posterity I wanted to list some of the words I&#8217;ve heard my daughters use. There are some keepers here. These are the few I could think of. There are more.
margarita: diarrhea
none young rings: onion rings
tex cuss: Texas
olive oil: aloe vera
lamb old laid: lemonade
ba da ba ba bah: McDonald&#8217;s
boo boo: blanket
]]></summary>
		<content type="html" xml:base="http://clint-hill.com/2009/06/10/madi-and-nola-speak/">&lt;p&gt;For posterity I wanted to list some of the words I&amp;#8217;ve heard my daughters use. There are some keepers here. These are the few I could think of. There are more.&lt;/p&gt;
&lt;p&gt;margarita: diarrhea&lt;/p&gt;
&lt;p&gt;none young rings: onion rings&lt;/p&gt;
&lt;p&gt;tex cuss: Texas&lt;/p&gt;
&lt;p&gt;olive oil: aloe vera&lt;/p&gt;
&lt;p&gt;lamb old laid: lemonade&lt;/p&gt;
&lt;p&gt;ba da ba ba bah: McDonald&amp;#8217;s&lt;/p&gt;
&lt;p&gt;boo boo: blanket&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ClintHill/~4/qDpcPd2832w" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://clint-hill.com/2009/06/10/madi-and-nola-speak/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://clint-hill.com/2009/06/10/madi-and-nola-speak/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://clint-hill.com/2009/06/10/madi-and-nola-speak/</feedburner:origLink></entry>
	</feed>
