<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Blog of Clint Andrew Hall</title>
	<atom:link href="http://www.clintandrewhall.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.clintandrewhall.com/blog</link>
	<description>Welcome to my corner of the web, where I post my ponderings, pictures and pontifications.</description>
	<lastBuildDate>Tue, 31 Aug 2010 20:27:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Node Knockout 2010: In Response to John Resig</title>
		<link>http://www.clintandrewhall.com/blog/2010/08/node-knockout-2010-in-response-to-john-resig/</link>
		<comments>http://www.clintandrewhall.com/blog/2010/08/node-knockout-2010-in-response-to-john-resig/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 18:49:42 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/?p=125</guid>
		<description><![CDATA[I had to respond to some of John Resig's tweets regarding Node Knockout 2010.]]></description>
			<content:encoded><![CDATA[<h2>First, a bit of background.</h2>
<p>When the Node Knockout competition was announced several months ago, I signed up immediately; it sounded like a helluvalotta fun and lit a fire for me to learn the ins and outs of Node as quickly as possible.  I recruited a couple of my buddies and the contest slipped off my radar and out of my mind.</p>
<p>Days before, though, I was reminded that it was fast approaching! Long story short, I had somehow screwed up our registration, but the gracious folks running the show set up a random-team-name account at the last minute, &#8220;<a href="http://nodeknockout.com/teams/zenith-workloom">Zenith-Workloom</a>&#8220;.  We set to work right away.</p>
<p>I was the only participant who had experience with Node, but the guys were excited to try.  We even had a few geek friends show up when we started, just to see what we were doing and how we were going to do it.</p>
<p>All told, I stayed up for a 36 hour period, crushing against the GitHub, Twitter, Facebook and FourSquare APIs, fussing with relative dates, wrestling with MongoDB&#8230; really a lot of work.  We found ourselves cutting back on our features list with every passing hour, desperate to get things stable before time expired. There is quite a bit to discuss here, but I&#8217;ll save that for a blog post I plan to write later this week.</p>
<h2>The Results</h2>
<p>In the end, we ended up exhausted with relatively solid services and 20% of our desired feature set in the <em>front-end</em>.  I emphasize this because there is quite a bit of code running in Node that didn&#8217;t &#8220;bubble up&#8221; to our front-end effectively&#8230; for example, I couldn&#8217;t get GitHub check-ins to sort nicely with other events before &#8220;last call&#8221;.  This is merely a side-effect of a deadline fast-approaching.</p>
<p>There are some amazing entries in the Node Knockout contest&#8230; I mean, incredibly awesome.  Here are a few of my favorites:</p>
<ul>
<li><a href="http://awesometown.no.de/">Simulchart</a> &#8211; http://awesometown.no.de/ &#8211; Real-time, embeddable data charting.</li>
<li><a href="http://done-js.no.de/">Drop Note</a> &#8211; http://done-js.no.de/ &#8211; Drop a file into your browser and share it instantly.</li>
<li><a href="http://scrabb.ly/">Scrabb.ly</a> &#8211; http://scrabb.ly/ &#8211; Real-time, addictive Scrabble game, (WOW!)</li>
<li><a href="http://nko-team-discovery-channel.heroku.com/">CloudQ</a> &#8211; http://nko-team-discovery-channel.heroku.com/ &#8211; Sandboxed Unit Test runner for GitHub projects.</li>
<li><a href="http://starcraft2destroyedmymarrage.no.de/">Serrano</a> &#8211; http://starcraft2destroyedmymarrage.no.de/ &#8211; Share DOM events and other information with other users simultaneously.</li>
</ul>
<p>These guys kicked our ass.  But here&#8217;s the thing that I take away: I watched folks from these teams on IRC, struggling through issues, getting help, providing it&#8230; I mean, the community was <strong>so f&#8217;ing powerful</strong>.</p>
<p>Halfway through I realized I was going to learn 1000% more just looking at winning teams&#8217; source code than I was in the contest.  I got excited, and have remained so&#8230; and I&#8217;m still proud of what my team managed to accomplish, even though we&#8217;re not <em>realistically</em> in the running.</p>
<h2>Along Comes John Resig</h2>
<p>I took issue with the following <a href="http://twitter.com/jeresig/status/22613175584">tweet</a> by Mr. Resig:</p>
<blockquote><p>Disappointed in the entries to the Node.js Knockout; only a handful of the entries work in non-Chrome/Safari browsers.</p></blockquote>
<p>Wow&#8230; really?  It prompted my <a href="http://twitter.com/clintandrewhall/status/22624807283">reply</a>:</p>
<blockquote><p>Was jQuery coded in 2 days? RT @<a rel="nofollow" href="/jresig">jresig</a>Disappointed in the entries to the Node.js Knockout; few work in non-Chrome/Safari browsers. <a title="#nodeko" rel="nofollow" href="/search?q=%23nodeko">#nodeko</a></p></blockquote>
<p>My point was fairly straightforward:  this wasn&#8217;t for <em>production</em>, this was for <em>fun</em>.  This was to test the limits of Node.js with stunning, whimsical or powerful ideas. Take away the pressure of &#8220;selling something&#8221; and just &#8220;do something&#8221;.</p>
<p>After some retweeting in the node.js hashtag, <a href="http://twitter.com/jeresig/status/22636634068">this reply</a> from Mr. Resig crossed my TweetDeck:</p>
<blockquote><p>@<a rel="nofollow" href="/clintandrewhall">clintandrewhall</a> Teams that made working, fully-functional, cross-browser applications in 48 hours deserve to win &#8211; and get my vote.</p></blockquote>
<p>The more I&#8217;ve thought about it, the more upset his statements have made me.</p>
<h2>In Defense of Node Knockout Teams</h2>
<p>The Twitter medium is the worst place to debate these kinds of points; I mean, Mr. Resig certainly has more to say that 140 characters allows.  And his interpretation of a complete application is probably different than others.  But I have to take issue with his tweets on their face&#8230;</p>
<p>Look, my team&#8217;s entry is cross-browser compatible&#8230; but that was by the grace of a limited feature-set.  Mr. Resig was actually a judge for our entry, and leveled a very fair, honest critique of our missing features&#8230; points of view I share.  But I&#8217;m going to protest on behalf of those other teams who only supported a limited set.</p>
<p>There were people attempting very complicated, near-impossible feats under a very tight timeframe&#8230; and several succeeded!  For a judge to focus on the browser when the <em>teams</em> had been focusing on <em>Node</em> just seems so argumentative.</p>
<p>It&#8217;s one thing if the knockout had been for a week, or maybe if <em>server</em> code had been locked down early with additional time for front-end.  But we&#8217;re talking <strong>48 hours</strong> here, starting <strong>from scratch</strong>.</p>
<p>But more importantly, Node Knockout entries are graded as follows, (from <a href="http://nodeknockout.com/judging">http://nodeknockout.com/judging</a>):</p>
<blockquote><p>Entries will be judged on a 1-5 scale across 4 dimensions:</p>
<ul>
<li><strong>Utility</strong> &#8211; Is the site offering a service you&#8217;d use again and again?</li>
<li><strong>Design</strong> &#8211; How good does it look and feel to use?</li>
<li><strong>Innovation</strong> &#8211; How original is the idea and execution?</li>
<li><strong>Completeness</strong> &#8211; How &#8220;fully baked&#8221; is the site? Are there bugs or dead ends?</li>
</ul>
</blockquote>
<p>First, I concede that judges have every right to pet peeves, sticking points, etc&#8230; and we were told to keep the judges in mind when we were working. Still, I would hope that an entry would still be judged on its merits more so than those irritations.  And to be fair, where in the criteria above is browser compatibility even mentioned?</p>
<p>Perhaps &#8220;completeness&#8221; could include cross-browser compatibility&#8230; but in this context&#8230; <em>should it</em>?</p>
<p>Based on Mr. Resig&#8217;s logic from his tweet, had my team completed our feature set in our present level of compatibility, we&#8217;d have garnered a 5-star vote from him.  That&#8217;s great!  But is he saying that, of the entries I mentioned above, <em>none</em> deserve five star ratings simply because they don&#8217;t work in all browsers?  Is my team&#8217;s simple effort, to compile data feeds chronologically on one page, full orders of magnitude &#8220;better&#8221; than those ideas simply because our CSS happens to be cross-browser compatible?  I certainly don&#8217;t think so&#8230; my team didn&#8217;t even have JS in the front-end&#8230;</p>
<p>Look, I&#8217;m <em>well-known</em> for being a progressive-enhancement nazi, swinging the &#8220;gotta work everywhere&#8221; sword in wide archs&#8230; but I make an exception here.</p>
<p>This contest was about doing freakishly cool things <strong>in Node</strong> in <strong>48 hours</strong>, not <strong>a browser</strong>.  Having participated first-hand, and seeing the absolutely amazing things that were done, I am in awe.  That&#8217;s not even to mention the inspiring, multi-continent community that was flash-created in a 48 hour period.  Even better, most teams have pledged to open source their code for all to see.</p>
<p>Absolutely incredible.</p>
<p>Yet&#8230; that someone, let alone one of the <em>judges</em>, would publicly minimize a team&#8217;s accomplishments by focusing on the tiniest, almost out-of-context point saddens me.</p>
<p>I don&#8217;t think anyone should be &#8220;disappointed&#8221; by these entries.</p>
<h2>Go Explore and Vote</h2>
<p>I encourage all of you reading this, if you haven&#8217;t yet, visit the <a href="http://nodeknockout.com/teams">Node Knockout entries page</a> and comment and vote for your favorites.  Go and see for yourself what amazing things can be done with 48 hours, an idea and a ton of people willing to help.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2010/08/node-knockout-2010-in-response-to-john-resig/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Create Your Own Google Chrome &#8220;App&#8221;</title>
		<link>http://www.clintandrewhall.com/blog/2010/07/create-your-own-google-chrome-app/</link>
		<comments>http://www.clintandrewhall.com/blog/2010/07/create-your-own-google-chrome-app/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 05:29:49 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Idea]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/?p=115</guid>
		<description><![CDATA[I was reading LifeHacker and came across a post regarding how to enable Google Apps in Chrome.  Curious, I dug into the extensions and noticed... well, they're pretty simple.  So I decided to create my own for Facebook]]></description>
			<content:encoded><![CDATA[<p>I was reading LifeHacker and came across <a href="http://lifehacker.com/5587455/try-out-three-early-web-apps-from-the-chrome-web-store-now?skyline=true&amp;s=i" target="_blank">this post</a> regarding how to enable Google Apps in Chrome.  Curious, I dug into the extensions and noticed&#8230; well, they&#8217;re pretty simple.  So I decided to create my own.<br />
<span id="more-115"></span><br />
I decided to create one for Facebook.  It only took me five minutes:</p>
<div id="attachment_116" class="wp-caption alignnone" style="width: 594px"><a href="http://www.clintandrewhall.com/blog/wp-content/uploads/2010/07/Screen-shot-2010-07-16-at-12.18.35-AM.jpg"><img class="size-full wp-image-116" title="Chrome &quot;New Tab&quot; Page" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2010/07/Screen-shot-2010-07-16-at-12.18.35-AM.jpg" alt="Chrome &quot;New Tab&quot; Page" width="584" height="269" /></a><p class="wp-caption-text">The Chrome &quot;New Tab&quot; page with Facebook added...</p></div>
<p>The LifeHacker post contains all the details regarding how to enable apps in the latest Chromium builds.  All you need to do is copy the contents of one of the manifest.json files in one of the apps bundled with Chrome:</p>
<p><code> </code></p>
<p><code></p>
<pre>{
  "name": "Google Calendar",
  "version": "1.3",
  "permissions": [ "notifications" ],
  "icons": {
    "128": "128.png",
    "24": "24.png",
    "32": "32.png",
    "48": "48.png"
  },
  "app": {
    "urls": [
      "*://www.google.com/calendar/"
    ],
    "browse_urls": [
      "https://www.google.com/accounts/"
    ],
    "launch": {
      "container": "tab",
      "web_url": "https://www.google.com/calendar/"
    }
  }
}</pre>
<p></code></p>
<p>and substitute your own values and icons:<br />
<code> </code></p>
<p><code></p>
<pre>{
  "name": "Facebook",
  "version": "0.1",
  "permissions": [  ],
  "icons": {
    "128": "128.png",
    "24": "24.png",
    "32": "32.png",
    "48": "48.png"
  },
  "app": {
    "urls": [
      "*://www.facebook.com/"
    ],
    "browse_urls": [
      "https://www.facebook.com/profile.php"
    ],
    "launch": {
      "container": "tab",
      "web_url": "http://www.facebook.com"
    }
  }
}</pre>
<p></code></p>
<p>If you&#8217;re interested, you can download my ZIP file here, <a href="http://www.clintandrewhall.com/blog/wp-content/uploads/2010/07/facebook-chrome-app.zip">facebook-chrome-app</a>, then follow the same instructions to enable it in your own Chrome browser.</p>
<p>See? Easy&#8230; happy hacking!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2010/07/create-your-own-google-chrome-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Contact Form Experiment</title>
		<link>http://www.clintandrewhall.com/blog/2009/10/contact-form-experiment/</link>
		<comments>http://www.clintandrewhall.com/blog/2009/10/contact-form-experiment/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 21:43:15 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/?p=95</guid>
		<description><![CDATA[Yesterday, I saw this tweet from Smashing Magazine: I took a look at the form, and I must say I was impressed too.  Unfortunately, I was using TweetDeck on my iPhone&#8230; as a result, I didn&#8217;t see the contact form at all because the background image didn&#8217;t load very fast.  That prompted me to post [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I saw this tweet from Smashing Magazine:</p>
<div id="attachment_97" class="wp-caption alignnone" style="width: 614px"><img class="size-full wp-image-97" title="Tweet from Smashing Magazine" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2009/10/Screen-shot-2009-10-22-at-3.46.46-PM1.jpg" alt="Tweet from Smashing Magazine" width="604" height="97" /><p class="wp-caption-text">Tweet from Smashing Magazine</p></div>
<p>I took a look at the form, and I must say I was impressed too.  Unfortunately, I was using TweetDeck on my iPhone&#8230; as a result, I didn&#8217;t see the contact form at all because the background image didn&#8217;t load very fast.  That prompted me to post this reply:</p>
<div id="attachment_98" class="wp-caption alignnone" style="width: 614px"><img class="size-full wp-image-98" title="My Reply" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2009/10/Screen-shot-2009-10-22-at-3.52.34-PM.jpg" alt="My reply on Twitter" width="604" height="112" /><p class="wp-caption-text">My reply on Twitter</p></div>
<p>Being a social media junkie, this tweet was then cross-posted to my Facebook, prompting this reply from a web developer friend of mine:</p>
<div id="attachment_99" class="wp-caption alignnone" style="width: 499px"><img class="size-full wp-image-99" title="Resulting Facebook Conversation" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2009/10/facebook-convo.jpg" alt="...the resulting Facebook conversation." width="489" height="409" /><p class="wp-caption-text">...the resulting Facebook conversation.</p></div>
<p>As you can well imagine, I could not let this stand.  So I decided I would refactor the form to prove that, with a few tweaks to the CSS and markup, this form could avoid the problems I pointed out.</p>
<p><span id="more-95"></span>First, let me preface by saying that I am not saying the code is bad&#8230; on the contrary, I really like the concept.  I just want to:</p>
<ol>
<li>Dispel my friend&#8217;s poor logic, and</li>
<li>Raise awareness about accessibility.</li>
</ol>
<p>That said, I tried to minimize my changes to the original code as much as possible; there are certainly improvements that can be made to the CSS and to the markup, but that was not my goal.</p>
<p>For reference, here are the <a title="Before" href="http://www.clintandrewhall.com/demos/contact-form/before.html" target="_blank">before</a> and the <a title="After" href="http://www.clintandrewhall.com/demos/contact-form/after.html" target="_blank">after</a> demo pages.  I&#8217;d load them in separate tabs; you&#8217;ll see they are identical, almost to the pixel.  I&#8217;ve also added a scripted link to allow you to hide the background image.</p>
<h3>The Accessibility Problem</h3>
<p>First, let&#8217;s define the problem. In the existing CSS, the labels are completely hidden and the background is applied to the form.  As a result, here are screen shots of the contact form, with and without its background image, (notice the dotted lines for each form field):</p>
<div id="attachment_100" class="wp-caption alignleft" style="width: 393px"><img class="size-full wp-image-100   " title="Contact Form with Images On" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2009/10/Screen-shot-2009-10-22-at-3.40.53-PM.jpg" alt="The contact form with images on and fully loaded" width="383" height="400" /><p class="wp-caption-text">The contact form with images on and fully loaded</p></div>
<div id="attachment_101" class="wp-caption alignleft" style="width: 338px"><img class="size-full wp-image-101 " title="Contact Form with No Image" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2009/10/Screen-shot-2009-10-22-at-3.41.08-PM.jpg" alt="The contact form without the image loaded" width="328" height="400" /><p class="wp-caption-text">The contact form without the image loaded</p></div>
<p style="clear:both">
<p style="clear:both">Without the image, the form becomes unusable.  So how can we edit the HTML and style the form to avoid this?</p>
<h3>The Approach</h3>
<p>In short, we need to add labels to each field and have the image hide them if present.  This can be accomplished with z-indexing:</p>
<div id="attachment_103" class="wp-caption alignnone" style="width: 810px"><img class="size-full wp-image-103  " title="Approach Diagram" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2009/10/diagram.jpg" alt="A diagram of the layout" width="800" height="340" /><p class="wp-caption-text">A diagram of the layout</p></div>
<h3>The Solution</h3>
<p>First, I refactored the original form into something a bit more manageable, such as adding a fieldset element to the phone number, adding a header element and consolidating the label and input fields, (and thus removing the pesky &#8220;for&#8221; attribute):</p>
<pre><code>...
&lt;h3&gt;&lt;span&gt;Contact Form&lt;/span&gt;&lt;/h3&gt;
...
&lt;fieldset id="phone-el"&gt;
    &lt;legend&gt;&lt;span&gt;Phone&lt;/span&gt;&lt;/legend&gt;
    &lt;p id="phone-ac-el"&gt;
        &lt;label&gt;
            &lt;span&gt;Area Code&lt;/span&gt;
            &lt;input id="phone-ac" class="text" maxlength="3"
                name="phone-ac" size="3" type="text" /&gt;
        &lt;/label&gt;
    &lt;/p&gt;
...
</code></pre>
<p>Since the legend for the phone fieldset wasn&#8217;t being displayed, I decided I would forgo the addition of any empty element and just use it for the contact form.  A bit of positioning based on existing CSS and some negative text-indent and we were in business:</p>
<pre>body#contact #form legend span {
    background: url(res/contact-content.png) center top no-repeat;
    position: absolute;
    top: -199px;
    left: -180px;
    width: 750px;
    height: 786px;
    display: block;
    text-align: left;
    text-indent: -1000px;
    overflow: hidden;
    z-index: 50;
}</pre>
<h3>The Result</h3>
<p>Now, when the page loads and no images are present, the form looks like this:</p>
<div id="attachment_102" class="wp-caption alignnone" style="width: 314px"><img class="size-full wp-image-102 " title="My Refactor of the Contact Form" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2009/10/Screen-shot-2009-10-22-at-3.41.23-PM.jpg" alt="My refactor of the contact form without the image" width="304" height="400" /><p class="wp-caption-text">My refactor of the contact form without the image</p></div>
<p>With a few simple changes, the form is completely usable&#8230; bulletproof&#8230; regardless of the user&#8217;s situation.</p>
<h3>A Few Closing Remarks</h3>
<p>I hate the oft-uttered mantra of, &#8220;those folks aren&#8217;t in my demographic.&#8221;  That is a dangerous and amateur view of an audience for your website.  You should always be looking to make your forms as simple but as accessible as possible, because, frankly&#8230; your demographic is anyone with a web browser.  Discounting any percentage is not only a disadvantage for your business, but a disservice to all users.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2009/10/contact-form-experiment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Window, No In-source Event</title>
		<link>http://www.clintandrewhall.com/blog/2009/10/new-window-no-in-source-event/</link>
		<comments>http://www.clintandrewhall.com/blog/2009/10/new-window-no-in-source-event/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 17:31:24 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Idea]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/?p=88</guid>
		<description><![CDATA[I was prompted by this Twitter post to cross-post an old blog entry of mine. Having JavaScript events in-source binds you to whatever JavaScript method (and it&#8217;s signature) you&#8217;ve specified, not to mention breaking the tenets of Progressive Enhancement. When wishing to launch an anchor&#8217;s href into a new window while using a STRICT doctype, [...]]]></description>
			<content:encoded><![CDATA[<p><em>I was prompted by <a href="http://twitter.com/scriptandstyle/statuses/4605668102">this</a> Twitter post to cross-post an old blog entry of mine.</em></p>
<p>Having JavaScript events in-source binds you to whatever JavaScript method (and it&#8217;s signature) you&#8217;ve specified, not to mention breaking the tenets of Progressive Enhancement.  When wishing to launch an anchor&#8217;s <code>href</code> into a new window while using a <code>STRICT</code> doctype, using <code>window.popup</code> is the only real option, (as the <code>target</code> attribute is invalid in this case).  Looking at the <a title="W3C specification for Anchor Tags" href="http://www.w3.org/TR/html401/struct/links.html#h-12.2">W3C specification for anchors</a>, the following could be a solution.<br />
<span id="more-88"></span></p>
<h3>Problem Statement</h3>
<p>Recently, a navigation header in one of our solutions had a requirement that all links within its boundary needed to launch their content into a new window, thereby not disturbing any the current page.  Since the <code>target</code> attribute is not an option, this can be accomplished by the <code>window.popup</code> method, a fairly standard method within browsers.  This meant either the call itself would have to be embedded into the anchor, or a surrogate method.  In either case, JavaScript events would have to appear in source:<br />
<code><br />
&lt;a href="http://www.google.com" onclick="window.popup(this.href); return false;"&gt;Link 1&lt;/a&gt;<br />
&lt;a href="http://www.google.com" onclick="return MyNamespace.popup(this);"&gt;Link 2&lt;/a&gt;<br />
</code></p>
<h4>Problem: Obligations Introduced</h4>
<p>The trouble is that whenever script is included in source, it means that you are thereby <em>contractually bound</em> to offer the same method, with the same signature&#8230; regardless of circumstance.  To give a stronger example, suppose I have the following code:</p>
<pre><code>    &lt;div id="navigation"&gt;
        Some content
    &lt;/div&gt;
    &lt;script type="text/javascript"&gt;
        var myAccordion = new Accordion("navigation")
    &lt;/script&gt;
</code></pre>
<p>I am now bound by two things:</p>
<ol>
<li>I must include an <code>Accordion</code> object, even if I don&#8217;t need it or if I want to use a different object based on platform (e.g. iPhone).</li>
<li>I must provide the same API as the <code>Accordion</code> object, because there is a global var called <code>myAccordion</code>, which could be referenced elsewhere.</li>
</ol>
<p>I can still swap out the JavaScript files, but those files <em>must</em> have an object that meet these requirements.</p>
<h4>Solution: Progressive Enhancement through Abstraction</h4>
<p>It would be far easier if the same markup <em>externalized</em> these specifics and applied event handlers through script:</p>
<pre><code>    &lt;div id="navigation"&gt;
        Some content
    &lt;/div&gt;
    &lt;script type="text/javascript"&gt;
        MyNamespace.setup({
            navigation : "navigation"
        });
    &lt;/script&gt;
</code></pre>
<p>In this case, an API is defined within a generic namespace object called <code>MyNamepsace</code>.  The script block invokes <code>setup</code>, which takes (in this case, which may be overkill) a JSON structure defining the objects or parameters to be used in setup.</p>
<p>This kind of generic abstraction allows us to swap out not only the CSS but also the JavaScript depending on capability or browser.</p>
<h3>Proposed Solution: Using the <code>rel</code> Attribute</h3>
<p>In the spec, the <a href="http://www.w3.org/TR/html401/struct/links.html#adef-rel">rel</a> attribute is described as:</p>
<blockquote><p>This attribute describes the relationship from the current document to the anchor specified by the <a class="noxref" href="http://www.w3.org/TR/html401/struct/links.html#adef-href"><samp class="ainst">href</samp></a> attribute. The value of this attribute is a space-separated list of link types.</p></blockquote>
<p>The spec also says that the value of the <code>rel</code> attribute should be one or more of a set of <code>link-types</code>, but this portion of the spec states:</p>
<blockquote><p>Authors may wish to define <span class="index-inst" title="link  type::profiles for new"><a name="idx-link_type-2">additional link types</a></span> not described in this specification. If they do so, they should use a <a href="http://www.w3.org/TR/html401/struct/global.html#profiles">profile</a> to cite the conventions used to define the link types. Please see the <a class="noxref" href="http://www.w3.org/TR/html401/struct/global.html#adef-profile"><samp class="ainst"> profile</samp></a> attribute of the <a class="noxref" href="http://www.w3.org/TR/html401/struct/global.html#edef-HEAD"><samp class="einst">HEAD</samp></a> element for more details.</p></blockquote>
<h3>The Proposal</h3>
<p>Since the goal is to use JavaScript to &#8220;pop&#8221; the new window, we need to identify which anchors &#8220;pop&#8221; their content to a new window, leaving the current document intact.  By creating a <code>rel</code> attribute that specifies this, along with the necessary profile, JavaScript methods could distinguish those anchors from other anchors, thus allowing the popup event handlers to be applied.</p>
<h4>Creating a new profile</h4>
<p>In order to create a new link type, we need<sup>[<a href="#ref1">1</a>]</sup> to create<sup>[<a href="#ref2">2</a>]</sup> a profile.</p>
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
&lt;head&gt;
    &lt;title&gt;Cerner XHTML Profile&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;dl class="profile"&gt;
    &lt;dt id="rel"&gt;rel&lt;/dt&gt;
    &lt;dd&gt;
        &lt;dl&gt;
            &lt;dt id="forked"&gt;forked&lt;/dt&gt;
            &lt;dd&gt;
                Refers to a location that should be, if possible, launched
                into a new window or process without disturbing the
                current page or content.
            &lt;/dd&gt;
        &lt;/dl&gt;
    &lt;/dd&gt;
&lt;/dl&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h4>Using the Profile</h4>
<p>Then, we would use the new link-type defined in the profile for any anchor we&#8217;d want &#8220;popped&#8221; into a new window, (or, indeed, whatever other action we choose, based on platform).</p>
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
&lt;head profile="http://deploymentserver/contextroot/profile.html"&gt;
.
.
.
&lt;ul id="links"&gt;
    &lt;li&gt;&lt;a href="http://www.cerner.com/" rel="forked"&gt;Launch Cerner.com&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.google.com/"&gt;Go to Google.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
.
.
.
&lt;script type="text/javascript"&gt;
    // Example script; should be namespaced, etc.
    var list = document.getElementById("links"), list.getElementsByTagName("A"),
        event = function() {
            // Process the event for the link, (e.g. popup, alert, redirect, etc).
            alert("Forked page.");
        };

    for(var i = 0; i &lt; links.length; i++) {
        var link = links[i], rel = link.rel;

        if(rel.length &lt;= 0) {
            continue;
        }

        var rels = rel.split(" ");

        for(var a = 0; a &lt; rels.length; a++) {
            var l = rels[a];

            if(l == "forked")) {
                link.onclick = function() {
                    return false;
                };
                // Use my established attachEvent method; it has an EventCache
                // to avoid memory leaks, etc, but is beyond the scope of this post.
                Util.attachEvent(link, "click", event);
                continue;
            };
        }
    }
&lt;/script&gt;</pre>
<h3>References</h3>
<ol>
<li>W3C, <a href="http://www.w3.org/TR/html401/types.html#type-links"><code>link-type</code> Specification</a></li>
<li>Tantek Çelik, <a href="http://gmpg.org/xmdp/">XHTML Meta Data Profiles</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2009/10/new-window-no-in-source-event/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating Elements in JavaScript, (any good?)</title>
		<link>http://www.clintandrewhall.com/blog/2009/03/creating-elements-in-javascript-any-good/</link>
		<comments>http://www.clintandrewhall.com/blog/2009/03/creating-elements-in-javascript-any-good/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 21:50:05 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Idea]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/?p=76</guid>
		<description><![CDATA[I&#8217;ve been playing around with a couple of ideas for JavaScript methods, thought I&#8217;d get some feedback. The following link is a code snippet in PasteBin that shows the methods and a quick test: http://pastebin.com/f7b68ab19 Basically, the two I wrote and that I&#8217;m evaluating are: Create Element This method caches a created element instance in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing around with a couple of ideas for JavaScript methods, thought I&#8217;d get some feedback.</p>
<p>The following link is a code snippet in PasteBin that shows the methods and a quick test:</p>
<p><a title="PasteBin Code Snippet" href="http://pastebin.com/f7b68ab19">http://pastebin.com/f7b68ab19</a></p>
<p>Basically, the two I wrote and that I&#8217;m evaluating are:</p>
<dl>
<dt>Create Element</dt>
<dd>This method caches a created element instance in an array.  In some browsers, like Firefox, this method is marginally faster; I&#8217;m thinking the array access is hindering it from being even faster.</dd>
<dt>Create Element with Properties</dt>
<dd>This method basically allows you to set attributes using a JSON object. Nothing fancy, but the developers like it. I&#8217;m concerned about the speed of the loop, and developers have been asking about how to set the runtime style.  Since <code>element.style</code> is, of course, not settable, I&#8217;d have to either expose a second parameter, or allow a more complex object and write more logic, (assuming I decide to support it).
</dd>
</dl>
<p>I&#8217;d love some advice&#8230; here&#8217;s what I don&#8217;t want:</p>
<blockquote><p>Just use jQuery / Prototype / my framework!</p></blockquote>
<p>That kind of defeats the purpose of this exercise! <img src='http://www.clintandrewhall.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2009/03/creating-elements-in-javascript-any-good/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Run Safari 3 and Safari 4 beta on the same Mac</title>
		<link>http://www.clintandrewhall.com/blog/2009/03/run-safari-3-and-safari-4-beta-on-the-same-mac/</link>
		<comments>http://www.clintandrewhall.com/blog/2009/03/run-safari-3-and-safari-4-beta-on-the-same-mac/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 08:21:25 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/?p=63</guid>
		<description><![CDATA[I couldn&#8217;t find a blog post or comprehensive tutorial anywhere, but after a great deal of trial and error, I&#8217;ve managed to get Safari 3 and Safari 4 beta to run on my Macbook Pro at the same time. Most insisted you have to download WebKit&#8230; but you don&#8217;t. It&#8217;s much easier than that, once you [...]]]></description>
			<content:encoded><![CDATA[<p>I couldn&#8217;t find a blog post or comprehensive tutorial anywhere, but after a great deal of trial and error, I&#8217;ve managed to get Safari 3 and Safari 4 beta to run on my Macbook Pro at the same time. Most insisted you have to download WebKit&#8230; but you don&#8217;t.</p>
<p>It&#8217;s much easier than that, once you figure it all out&#8230; here&#8217;s how to do it!</p>
<p><a href="http://twitpic.com/1slq9"><img class="alignnone size-medium wp-image-66" title="Screenshot: Safari 3 and Safari 4 beta, side-by-side" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2009/03/picture-2-300x173.jpg" alt="Screenshot: Safari 3 and Safari 4 beta, side-by-side" width="300" height="173" /></a></p>
<p><span id="more-63"></span></p>
<p>I scoured the Internet, searching for a way to do this&#8230; I ended up referring to more websites than I can remember, mostly from the Safari 3 beta period.  A couple of approaches out there required downloading a copy of WebKit, but I couldn&#8217;t get this to work effectively.  I took a lot from <a href="http://michelf.com/">Michel Fortin</a> and <a href="http://michelf.com/weblog/2005/multi-safari/">his post</a> of the subject. Although his solution didn&#8217;t get me all the way there, a lot of Google searching and web board posts did.</p>
<p>Basically, the trouble is that Apple stores the common WebKit framework for the entire Mac.  Even if you copy Safari 3 somewhere to your machine, it will still use the newer WebKit layout engine.  The trick, then, is to provide the older framework to the older Safari instance.  What&#8217;s nice about this approach is you&#8217;re just &#8220;restoring&#8221; Safari 3 and giving it the older versions of the Frameworks it relied on&#8230; no extra WebKit stuff to worry about.</p>
<p>Here&#8217;s how to do it:</p>
<ol>
<li>Install the Safari 4 beta.  Don&#8217;t worry; Safari 4 saves a copy of your Safari 3 install to an archive.</li>
<li>Go to <code>/Library/Application Support/Apple</code></li>
<li>Extract <code>.Safari4PreviewArchive.tar.gz</code> somewhere, like your Desktop.</li>
<li>The <code>Applications</code> directory contains your Safari application; the <code>System</code> directory contains the older frameworks, like WebKit.</li>
<li>Right-click the Safari application and select Show Contents.</li>
<li>Copy the <code>Frameworks</code>, <code>LaunchAgents</code> and <code>PrivateFrameworks</code> directories from the <code>System/Library</code> directory of the expanded archive to the <code>Contents</code> directory of the Safari application.</li>
<li>Edit <code>Info.plist</code> from the <code>Contents</code> directory in a simple text editor.</li>
<li>Add the following XML snippet beneath the parent &lt;dict&gt; element:</li>
</ol>
<p><code class="block">&lt;key&gt;LSEnvironment&lt;/key&gt;<br />
&lt;dict&gt;<br />
&lt;key&gt;DYLD_FRAMEWORK_PATH&lt;/key&gt;<br />
&lt;string&gt;Contents/Frameworks:Contents/PrivateFrameworks:Contents/Frameworks/WebKit.framework/Versions/A/Frameworks&lt;/string&gt;<br />
&lt;key&gt;WEBKIT_UNSET_DYLD_FRAMEWORK_PATH&lt;/key&gt;<br />
&lt;string&gt;YES&lt;/string&gt;<br />
&lt;/dict&gt;</code></p>
<p>That should do it!  You should now be able to run Safari 3 side-by-side with Safari 4.  If anyone knows a good file share site, I&#8217;ll be happy to post a ZIP of my version.  Hope this helps!</p>
<p>UPDATE: I&#8217;ve uploaded my Safari 3 standalone <a href="http://www.4shared.com/file/94783783/d1a5a4ed/Safari_3_-_Standalone_-_Mac.html">here</a>.</p>
<p>Disclaimer: This is the result of obvious tinkering. I may have torn the fabric of space-time somewhere, and you could make it worse. Considering this possibility, I can&#8217;t imagine being held responsible if something merely goes wrong with your computer&#8230; use at your own risk. <img src='http://www.clintandrewhall.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2009/03/run-safari-3-and-safari-4-beta-on-the-same-mac/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>It&#8217;s BACK!</title>
		<link>http://www.clintandrewhall.com/blog/2009/01/its-back/</link>
		<comments>http://www.clintandrewhall.com/blog/2009/01/its-back/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 21:27:39 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/?p=49</guid>
		<description><![CDATA[After a great deal of effort, blog is back&#8230; I&#8217;ve lost a number of posts, though, as well as my custom WordPress skin. I&#8217;ve also lost all of my non-database-stored work, (e.g. post images, whitepapers, etc). I&#8217;ll keep you posted as to when I&#8217;m back in business. What a pain in the ass.]]></description>
			<content:encoded><![CDATA[<p>After a great deal of effort, blog is back&#8230; I&#8217;ve lost a number of posts, though, as well as my custom WordPress skin.  I&#8217;ve also lost all of my non-database-stored work, (e.g. post images, whitepapers, etc).  I&#8217;ll keep you posted as to when I&#8217;m back in business.</p>
<p>What a pain in the ass.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2009/01/its-back/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>They let ANYONE drive these days&#8230;</title>
		<link>http://www.clintandrewhall.com/blog/2008/01/they-let-anyone-drive-these-days/</link>
		<comments>http://www.clintandrewhall.com/blog/2008/01/they-let-anyone-drive-these-days/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 06:02:45 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Art & Photography]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/2008/01/they-let-anyone-drive-these-days/</guid>
		<description><![CDATA[This&#8230; guy&#8230; gave me a double-take as he was waiting at the Winstead&#8217;s on the Plaza.&#160; Thankfully I had my camera and could stop laughing long enough to take several pictures:]]></description>
			<content:encoded><![CDATA[<p>This&#8230; guy&#8230; gave me a double-take as he was waiting at the Winstead&#8217;s on the Plaza.&#160; Thankfully I had my camera and could stop laughing long enough to take several pictures:</p>
<p style="text-align: center"><a href="http://www.clintandrewhall.com/blog/wp-content/uploads/2008/01/IMG_1961.jpg" target="_blank"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="286" alt="IMG_1961" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2008/01/IMG_1961_thumb.jpg" width="420" border="0" /></a> </p>
<p><span id="more-45"></span></p>
<p style="text-align: center"><a href="http://www.clintandrewhall.com/blog/wp-content/uploads/2008/01/IMG_1958.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="285" alt="IMG_1958" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2008/01/IMG_1958_thumb.jpg" width="420" border="0" /></a> </p>
<p style="text-align: center"><a href="http://www.clintandrewhall.com/blog/wp-content/uploads/2008/01/IMG_1962.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="285" alt="IMG_1962" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2008/01/IMG_1962_thumb.jpg" width="420" border="0" /></a></p>
<p><!--1da825a36d9a3f1e9ab4d8ceb678375f-->
<p><!--27a613125316e9fc09e601dd78ea0448-->
<p>
<p><!--2183b983c4feba36472e178576112388-->
</p>
<p><!--f6529140193ac726574cf8eeff9a0d61--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2008/01/they-let-anyone-drive-these-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Open Letter to a Car Thief</title>
		<link>http://www.clintandrewhall.com/blog/2008/01/an-open-letter-to-a-car-thief/</link>
		<comments>http://www.clintandrewhall.com/blog/2008/01/an-open-letter-to-a-car-thief/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 12:46:06 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/2008/01/an-open-letter-to-a-car-thief/</guid>
		<description><![CDATA[Someone broke into my car... a really ignorant person, who stole things you can't even pawn.]]></description>
			<content:encoded><![CDATA[</p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 15px 0px 0px; border-right-width: 0px" height="170" alt="CIMG0851" src="http://www.clintandrewhall.com/blog/wp-content/uploads/2008/01/CIMG0851.jpg" width="220" align="left" border="0" /> Dear Ignorant Ass,</p>
<p>So last night you scaled a six foot fence and broke into my car.&#160; I suppose I could congratulate you on the extent of the bounty resulting from your daring raid, but the problem is&#8230; you probably don&#8217;t know how to use half the stuff you carted off.</p>
<p><span id="more-44"></span></p>
<p>I&#8217;m not really sure how you decided that there was a car worth breaking into on the other side of my fence; we all get lucky.&#160; But let me see if I have this right:&#160; You&#8230;</p>
<ol>
<li>Roamed the city, in the rain, looking for loot to plunder;</li>
<li>Climbed a six foot fence between an old woman&#8217;s house and my building; </li>
<li>Landed in a muddy patch behind a rolling dumpster; </li>
<li>Ran, (perhaps, <em>skulked?</em>) across my lit parking lot; </li>
<li>Inserted a screwdriver into the channel of my window; </li>
<li>Lifted forcibly, thus shattering it into a jillion pieces without setting off the alarm; </li>
<li>Traipsed mud across my seat as you clambered in; </li>
<li>Began to toss my belongings around like tissue paper. </li>
</ol>
<p>In all, you stole:</p>
<ul>
<li>Two leather jackets</li>
<li>$30 cash (my emergency gas money)</li>
<li>24 port Ethernet switch</li>
<li>Charging cables for my phone (which wasn&#8217;t there)</li>
<li>Bluetooth speaker phone</li>
<li>A Cerner-specific device (which I really needed you <em>not</em> to steal)</li>
</ul>
<p>Forgive my foolishness; I thought my car would be safe from people like you behind a fence.&#160; I know better now.&#160; But, I must ask: do you have any idea how to use even half of the items you stole?&#160; The Cerner device is locked, the Bluetooth speakerphone has a pairing code, the charging cables are worthless without the devices, and&#8230; do you even know what a 24 port Ethernet switch DOES?!?</p>
<p>You ignorant waste of my time and space.&#160; Next time, knock on my door&#8230; I&#8217;ll give you the $200 it costs me to replace my window.</p>
<p><!--abf8609d6a37fb7910f5a4c9fb5002dc-->
</p>
<p><!--ff798f115a340943a01ac8d100c0a2f0--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2008/01/an-open-letter-to-a-car-thief/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introducing Shandy</title>
		<link>http://www.clintandrewhall.com/blog/2008/01/shandy/</link>
		<comments>http://www.clintandrewhall.com/blog/2008/01/shandy/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 18:19:59 +0000</pubDate>
		<dc:creator>Clint</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.clintandrewhall.com/blog/2008/01/heeeeeres-shandy/</guid>
		<description><![CDATA[I&#8217;m a sucker. I was driving to work Friday morning, when I stopped to take a left turn at Gillham and Rockhill. A black puppy was romping around a the top of the hill near the park, and as I came to stop, she ran up to, and then beneath, my car. To make sure [...]]]></description>
			<content:encoded><![CDATA[<p><strong>I&#8217;m a sucker.</strong></p>
<p>I was driving to work Friday morning, when I stopped to take a left turn at Gillham and Rockhill. A black puppy was romping around a the top of the hill near the park, and as I came to stop, she ran up to, and then beneath, my car.</p>
<p>To make sure I didn&#8217;t run her over as I pulled away, I opened my car door to look underneath&#8230;</p>
<p>&#8230; and she jumped in.</p>
<p>She was very dirty, smelled terrible and was shaking from head to toe. So there I was: driving a manual car with a confused, scared puppy, trying to determine what to do. I couldn&#8217;t just toss her out of my car; it was freezing out. At the same time, I couldn&#8217;t just take her home&#8230; she was a stray. So, I did what first occurred to me:</p>
<p><strong>I called 411 for the nearest vet&#8217;s office.</strong></p>
<p>Turned out she had been out for a couple of days, by the vet&#8217;s estimation. They gave her a bath, trimmed her nails and wormed her. She&#8217;s delightful, and takes well to discipline.  The name that has stuck is &#8220;Shandy,&#8221; one of my favorite Guinness drinks.</p>
<p><a title="Gillham and Rockhill" href="http://maps.google.com/maps/ms?ie=UTF8&#038;msa=0&#038;msid=107230864923022938793.000443b2744dc33b2d429&#038;ll=39.046877,-94.578847&#038;spn=0.001958,0.003728&#038;t=h&#038;z=18&#038;om=1&#038;mid=1200333919" target="_blank">This</a> is where I found her, and <a title="Pictures of Shandy" href="http://picasaweb.google.com/clintandrewhall/Shandy" target="_blank">here</a> are some fun pictures:</p>
<table width="194">
<tr>
<td style="background: url('http://picasaweb.google.com/f/img/transparent_album_background.gif'); height: 194px" align="center"><a href="http://picasaweb.google.com/clintandrewhall/Shandy"><img style="margin: 1px 0px 0px 4px" height="160" src="http://lh5.google.com/clintandrewhall/R4ucKsjkp7E/AAAAAAAAERI/PkMI9QffB-Y/s160-c/Shandy.jpg" width="160" /></a></td>
</tr>
<tr>
<td style="font-size: 11px; font-family: arial,sans-serif; text-align: center"><a style="font-weight: bold; color: #4d4d4d; text-decoration: none" href="http://picasaweb.google.com/clintandrewhall/Shandy">Shandy</a></td>
</tr>
</table>
<p>Yet, no matter how adorable she is, and how much I may want to keep her, I&#8217;m posting flyers later today around the area&#8230; if she does have a home that misses her, I&#8217;m going to be returning a happy, healthy puppy to them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clintandrewhall.com/blog/2008/01/shandy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
