<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Matt Stine&#039;s Blog &#187; Uncategorized</title>
	<atom:link href="http://mattstine.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://mattstine.com</link>
	<description>Thoughts on Java, Groovy, Grails, Agile Development, etc. etc. etc.</description>
	<lastBuildDate>Tue, 17 May 2011 17:02:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mattstine.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Matt Stine&#039;s Blog &#187; Uncategorized</title>
		<link>http://mattstine.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mattstine.com/osd.xml" title="Matt Stine&#039;s Blog" />
	<atom:link rel='hub' href='http://mattstine.com/?pushpress=hub'/>
		<item>
		<title>2010 in review: the automated analysis&#8230;</title>
		<link>http://mattstine.com/2011/01/02/2010-in-review-the-automated-analysis/</link>
		<comments>http://mattstine.com/2011/01/02/2010-in-review-the-automated-analysis/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 02:28:25 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mattstine.com/?p=405</guid>
		<description><![CDATA[The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here&#8217;s a high level summary of its overall blog health: The Blog-Health-o-Meter™ reads Fresher than ever. Crunchy numbers A helper monkey made this abstract painting, inspired by your stats. A Boeing 747-400 passenger jet can hold 416 passengers. This blog [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=405&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[
<p>The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here&#8217;s a high level summary of its overall blog health:</p>
<p align="center"><img style="border:1px solid #ddd;background:#f5f5f5;padding:20px;" src="http://s0.wp.com/i/annual-recap/meter-healthy3.gif" width="250" height="183" alt="Healthy blog!"></p>
<p align="center">The <em>Blog-Health-o-Meter™</em> reads Fresher than ever.</p>
<h2>Crunchy numbers</h2>
<div style="width:288px;float:right;border:1px solid #ddd;background:#fff;margin:0 0 1em 1em;padding:6px;">
<p>				<img src="http://s0.wp.com/i/annual-recap/abstract-stats-1.png" alt="Featured image" /><br />
				<br /><em>A helper monkey made this abstract painting, inspired by your stats.</em></p></div>
<p>A Boeing 747-400 passenger jet can hold 416 passengers.  This blog was viewed about <strong>6,600</strong> times in 2010.  That&#8217;s about 16 full 747s.</p>
<p>
<p>In 2010, there were <strong>15</strong> new posts, growing the total archive of this blog to 115 posts. There were <strong>24</strong> pictures uploaded, taking up a total of 979kb. That&#8217;s about 2 pictures per month.</p>
<p>The busiest day of the year was June 4th with <strong>139</strong> views. The most popular post that day was <a style="color:#08c;" href="http://mattstine.com/2010/06/03/dont-build-software-thats-too-smart/">Don&#8217;t build software that&#8217;s TOO smart!</a>.</p>
<p></p>
<h2>Where did they come from?</h2>
<p>The top referring sites in 2010 were <strong>agile.dzone.com</strong>, <strong>java.dzone.com</strong>, <strong>twitter.com</strong>, <strong>Google Reader</strong>, and <strong>javablogs.com</strong>.</p>
<p>Some visitors came searching, mostly for <strong>matt stine</strong>, <strong>groovy http post</strong>, <strong>groovy post</strong>, <strong>groovy url post</strong>, and <strong>groovy url encode</strong>.</p>
<div style="clear:both;"></div>
<h2>Attractions in 2010</h2>
<p>These are the posts and pages that got the most views in 2010.</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">1</div>
<p>					<a style="margin-right:10px;" href="http://mattstine.com/2010/06/03/dont-build-software-thats-too-smart/">Don&#8217;t build software that&#8217;s TOO smart!</a> <span style="color:#999;font-size:8pt;">June 2010</span><br />1 comment											</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">2</div>
<p>					<a style="margin-right:10px;" href="http://mattstine.com/2009/04/25/groovy-post-to-a-url/">Groovy: Post to a URL</a> <span style="color:#999;font-size:8pt;">April 2009</span><br />4 comments											</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">3</div>
<p>					<a style="margin-right:10px;" href="http://mattstine.com/resume/">Resume</a> <span style="color:#999;font-size:8pt;">March 2009</span>											</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">4</div>
<p>					<a style="margin-right:10px;" href="http://mattstine.com/2009/03/29/deploying-grails-with-groovy/">Deploying Grails with Groovy</a> <span style="color:#999;font-size:8pt;">March 2009</span>											</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">5</div>
<p>					<a style="margin-right:10px;" href="http://mattstine.com/2009/04/02/loty-time-again-scala-or-clojure/">LOTY Time Again: Scala or Clojure?!?!</a> <span style="color:#999;font-size:8pt;">April 2009</span><br />17 comments											</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/405/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=405&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2011/01/02/2010-in-review-the-automated-analysis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>

		<media:content url="http://s0.wp.com/i/annual-recap/meter-healthy3.gif" medium="image">
			<media:title type="html">Healthy blog!</media:title>
		</media:content>

		<media:content url="http://s0.wp.com/i/annual-recap/abstract-stats-1.png" medium="image">
			<media:title type="html">Featured image</media:title>
		</media:content>
	</item>
		<item>
		<title>Two new NFJS talks for this fall!</title>
		<link>http://mattstine.com/2010/07/06/two-new-nfjs-talks-for-this-fall/</link>
		<comments>http://mattstine.com/2010/07/06/two-new-nfjs-talks-for-this-fall/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 02:40:00 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mattstine.com/?p=367</guid>
		<description><![CDATA[I&#8217;m excited to announce that I am working up two brand new talks for this Fall to go along side my regular fare. Both of these talks are already scheduled for shows in Boston, MA and Seattle, WA. The first talk is entitled &#8220;The Seven Wastes of Software Development.&#8221; We&#8217;ll begin by examining one of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=367&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m excited to announce that I am working up two brand new talks for this Fall to go along side my regular fare. Both of these talks are already scheduled for shows in Boston, MA and Seattle, WA.</p>
<p>The first talk is entitled &#8220;The Seven Wastes of Software Development.&#8221; We&#8217;ll begin by examining one of the key tenets of Lean Software Development, that of eliminating waste. We&#8217;ll then walk through the seven wastes identified by Mary and Tom Poppendieck in their books:</p>
<ul>
<li>Partially Done Work</li>
<li>Extra Processes</li>
<li>Extra Features</li>
<li>Task Switching</li>
<li>Waiting</li>
<li>Motion</li>
<li>Defects</li>
</ul>
<p>We&#8217;ll examine each of these wastes and look at some of their common manifestations, both in our coding practices and in our development methodologies. We&#8217;ll also examine strategies for eliminating each of these wastes from our development efforts.  </p>
<p>The second talk is entitled &#8220;Yes You Kanban!&#8221; Kanban is sweeping through the agile software development space. Is it hype? Or is it a useful tool to add to our belt? In this session, we&#8217;ll walk through the following topics and I&#8217;ll let you be the judge:</p>
<ul>
<li>What is Kanban?</li>
<li>What is Kanban NOT?</li>
<li>Comparison to SCRUM</li>
<li>Roots of Kanban</li>
<li>David Anderson&#8217;s five essential elements/principles of Kanban (Visualize workflow, Limit work-in-progress, Measure &amp; manage flow, Make process policies explicit, Use models to recognize improvement opportunities)</li>
<li>Examples of Kanban systems</li>
</ul>
<p>I hope to see some of you in these talks this Fall and I look forward to our discussions!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/367/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=367&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2010/07/06/two-new-nfjs-talks-for-this-fall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
		<item>
		<title>Announcing NOSQL Summer Memphis</title>
		<link>http://mattstine.com/2010/05/28/announcing-nosql-summer-memphis/</link>
		<comments>http://mattstine.com/2010/05/28/announcing-nosql-summer-memphis/#comments</comments>
		<pubDate>Fri, 28 May 2010 14:21:43 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[cloud]]></category>
		<category><![CDATA[jug]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mattstine.com/?p=352</guid>
		<description><![CDATA[I recently stumbled across the NOSQL Summer website via my friend Alex Miller&#8217;s blog. The idea is to setup a summer reading club focused around databases and distributed systems. Groups will gather &#8220;worldwide&#8221; to discuss various papers and the hopefully submit the substance of their discussions back to the NOSQL Summer website in the form [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=352&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently stumbled across the <a href="http://nosqlsummer.org/">NOSQL Summer</a> website via my friend Alex Miller&#8217;s <a href="http://tech.puredanger.com/2010/05/25/nosql-summer-st-louis/">blog</a>. The idea is to setup a summer reading club focused around databases and distributed systems. Groups will gather &#8220;worldwide&#8221; to discuss various papers and the hopefully submit the substance of their discussions back to the NOSQL Summer website in the form of annotated papers.</p>
<p>This sounded like a great idea to me, so I decided that we&#8217;d co-locate a NOSQL Summer discussion with our monthly Memphis JUG meetings. You can find the details of our NOSQL meetings at <a href="http://nosqlsummer.org/city/memphis">http://nosqlsummer.org/city/memphis</a>. We&#8217;ll start at 5:30 and run until 6:15-6:30. If you&#8217;re interested in these discussions, come on out to Southwest TN Community College on June 24th (even if you&#8217;re not a Java type!).</p>
<p>Our first paper will be <a href="http://nosqlsummer.org/paper/end-of-architectural-era">The End of an Architectural Era (It&#8217;s Time for a Complete Rewrite)</a>. Please read it before the meeting and come prepared to mindshare.</p>
<p>If there&#8217;s enough interest in these discussions, we could start having a lunch time discussion at a centrally located restaurant halfway between each JUG meeting. We can discuss this at our first meeting in June. I hope to see you there!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/352/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/352/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/352/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=352&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2010/05/28/announcing-nosql-summer-memphis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
		<item>
		<title>LOTY/TOTY for 2010</title>
		<link>http://mattstine.com/2010/01/06/lotytoty-for-2010/</link>
		<comments>http://mattstine.com/2010/01/06/lotytoty-for-2010/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 19:25:09 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[loty]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/2010/01/06/lotytoty-for-2010/</guid>
		<description><![CDATA[If anyone&#8217;s interested, here&#8217;s a clue as to what I&#8217;m working on in 2010:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=284&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If anyone&#8217;s interested, here&#8217;s a clue as to what I&#8217;m working on in 2010:</p>
<p><img src="http://mattstine.files.wordpress.com/2010/05/helloiphone.jpg?w=570" alt="" title=""   class="aligncenter size-full wp-image-338" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/284/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/284/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/284/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/284/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/284/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/284/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/284/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/284/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/284/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/284/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/284/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/284/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/284/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/284/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=284&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2010/01/06/lotytoty-for-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>

		<media:content url="http://mattstine.files.wordpress.com/2010/05/helloiphone.jpg" medium="image" />
	</item>
		<item>
		<title>#JavaOne 2009 Return of the Puzzlers: Schlock and Awe</title>
		<link>http://mattstine.com/2009/06/09/javaone-2009-return-of-the-puzzlers-schlock-and-awe/</link>
		<comments>http://mattstine.com/2009/06/09/javaone-2009-return-of-the-puzzlers-schlock-and-awe/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 01:19:30 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/?p=223</guid>
		<description><![CDATA[For several years now, Neal Gafter (Microsoft) and Joshua Block (Google), have made a habit of presenting various incarnations of this technical session, focused on what they call &#8220;Java Puzzlers.&#8221; Java Puzzlers are nothing more than short Java programs with curious behavior. It is a somewhat interactive session, with each puzzler&#8217;s code listing followed by [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=223&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For several years now, Neal Gafter (Microsoft) and Joshua Block (Google), have made a habit of presenting various incarnations of this technical session, focused on what they call &#8220;Java Puzzlers.&#8221; Java Puzzlers are nothing more than short Java programs with curious behavior. It is a somewhat interactive session, with each puzzler&#8217;s code listing followed by a four possible choices (A,B,C,D) to answer the question: &#8220;What does it print?&#8221; Neal and Joshua &#8220;require&#8221; that every attendee vote for their answer. After the vote, they reveal the correct answer and how to fix the problem. At the end of each problem presentation is the most important part, which is the Java programming principle that is illuminated by the puzzler. These are important tools to carry with you as you go forth a develop your Java code.</p>
<p>The following is a listing of the problem titles that were presented:</p>
<ol>
<li>Life&#8217;s Persistent Questions</li>
<li>Instruments of Torture</li>
<li>Iterator Titillator</li>
<li>Searching for the One</li>
<li>Cogito Ergo Sum</li>
<li>Thread Friendly</li>
<li>When Words Collide</li>
</ol>
<p>I&#8217;m going to spend my time focused on the last puzzler, as it was the one for which I was ABSOLUTELY CERTAIN that I knew the correct answer. Here&#8217;s the code listing:</p>
<pre class="brush: java">
public class PrintWords {
  public static void main(String[] args) {
    System.out.println(
      Words.FIRST + " " + Words.SECOND + " " + Words.THIRD);
  }
}

public class Words { // Compile PrintWords against this version
  public static final String FIRST  = "the";
  public static final String SECOND = null;
  public static final String THIRD  = "set";
}

public class Words { // Run against this version
  public static final String FIRST  = "physics";
  public static final String SECOND = "chemistry";
  public static final String THIRD  = "biology";
}
</pre>
<p>So here&#8217;s the problem. We have two versions of class &#8220;Words.&#8221; We compile class &#8220;PrintWords&#8221; against the first version and we then run the class against the second version. What does it print out? I used my trusty &#8220;seasoned Java programmer&#8221; knowledge to assert that the program would print &#8220;the null set.&#8221; Why? Well, any seasoned Java programmer realizes that static final variables (or &#8220;constant variables&#8221; &#8211; what a curious concept) are inlined by the compiler. So it&#8217;s quite obvious that &#8220;the&#8221; would be inlined wherever FIRST appears, null would be inlined wherever SECOND appears, and &#8220;set&#8221; would be inlined wherever THIRD appears.</p>
<p>Imagine my frustration when Josh and Neil announced that the program would in fact print &#8220;the chemistry set.&#8221; As it turns out, null cannot be inlined! It is not a constant variable. So when we run our Java program, the JVM smartly picks up the non-null value of SECOND that is is able to find in the new version of Words.</p>
<p>Simply because this one got me, I wanted to highlight it for my readers. The &#8220;moral&#8221; of this story is that only primitives and strings can be constant, and that null is not a constant. One should use a constant field ONLY if its value will NEVER change. For final fields whose value may change, they suggest the use of an ident() method:</p>
<pre class="brush: java">
// Returns its argument
private static String ident(String s) {
  return s;
}

// None of these fields are constant variables
public class Words {
  public static final String FIRST  = ident("the");
  public static final String SECOND = ident(null);
}
</pre>
<p>The compile will not inline the call to ident.</p>
<p>Want more? Pick up a copy of Neal and Josh&#8217;s book, <em>Java Puzzlers: Traps, Pitfalls, and Corner Cases!</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=223&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2009/06/09/javaone-2009-return-of-the-puzzlers-schlock-and-awe/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
		<item>
		<title>Latest Wordle</title>
		<link>http://mattstine.com/2009/04/24/latest-wordle/</link>
		<comments>http://mattstine.com/2009/04/24/latest-wordle/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 04:30:32 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/?p=133</guid>
		<description><![CDATA[Alex Miller&#8217;s Twitter background inspired me to generate a Wordle from my feed. How fitting that &#8220;Code&#8221; is more prominent than anything.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=133&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.com/puredanger">Alex Miller&#8217;s Twitter background</a> inspired me to generate a Wordle from my feed. How fitting that &#8220;Code&#8221; is more prominent than anything.</p>
<div style="text-align:center;">
<a href="http://www.wordle.net/gallery/wrdl/780295/Matt_Stine%27s_Blog_Feed" title="Wordle: Matt Stine&#039;s Blog Feed"><img src="http://www.wordle.net/thumb/wrdl/780295/Matt_Stine%27s_Blog_Feed" alt="Wordle: Matt Stine&#039;s Blog Feed" style="border:1px solid #ddd;padding:4px;"></a></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/133/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=133&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2009/04/24/latest-wordle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>

		<media:content url="http://www.wordle.net/thumb/wrdl/780295/Matt_Stine%27s_Blog_Feed" medium="image">
			<media:title type="html">Wordle: Matt Stine&#039;s Blog Feed</media:title>
		</media:content>
	</item>
		<item>
		<title>Awesome April Fools Joke</title>
		<link>http://mattstine.com/2009/04/01/awesome-april-fools-joke/</link>
		<comments>http://mattstine.com/2009/04/01/awesome-april-fools-joke/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 20:58:57 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/2009/04/01/awesome-april-fools-joke/</guid>
		<description><![CDATA[I didn&#8217;t have one this year, but Expedia did. Check it out!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=105&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I didn&#8217;t have one this year, but Expedia did. Check it out!</p>
<div style="padding:5px 0;"><a href="http://www.expedia.com/daily/mars/flights-to-mars/?mcicid=Mars_us" target="_blank"><img src="http://media.expedia.com/media/content/expus/graphics/other/dawnstar/et.jpg" border="0" width="210" height="200" alt="Flights to Mars - Expedia Blog Badge" /></a></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/105/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=105&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2009/04/01/awesome-april-fools-joke/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>

		<media:content url="http://media.expedia.com/media/content/expus/graphics/other/dawnstar/et.jpg" medium="image">
			<media:title type="html">Flights to Mars - Expedia Blog Badge</media:title>
		</media:content>
	</item>
		<item>
		<title>The Manifesto for Software Craftsmanship</title>
		<link>http://mattstine.com/2009/03/15/the-manifesto-for-software-craftsmanship/</link>
		<comments>http://mattstine.com/2009/03/15/the-manifesto-for-software-craftsmanship/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 03:45:00 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/?p=69</guid>
		<description><![CDATA[So as I&#8217;m sitting here thumbing through my InfoQ feed on Google Reader, I come across the following posting: Software Craftsmanship Manifesto: A Call to Arms. It seems that a group of &#8220;programming patriots&#8221; has struck again (see the Manifesto for Agile Software Development &#8211; circa 2001), complete with a &#8220;founding document&#8221; look and feel. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=69&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://5386.openphoto.net"><img src="http://openphoto.net/cgi-bin/image?image_id=5386" width="251" height="193" style="float:left;padding-right:10px;"></a>So as I&#8217;m sitting here thumbing through my <a href="http://www.infoq.com">InfoQ</a> feed on <a href="http://www.google.com/reader">Google Reader</a>, I come across the following posting: <a href="http://www.infoq.com/news/2009/03/software_craftsmanship">Software Craftsmanship Manifesto: A Call to Arms</a>. It seems that a group of &#8220;programming patriots&#8221; has struck again (see the <a href="http://agilemanifesto.org">Manifesto for Agile Software Development</a> &#8211; circa 2001), complete with a &#8220;founding document&#8221; look and feel. Clicking through <a href="http://manifesto.softwarecraftsmanship.org/">the source link</a>, one finds the following:</p>
<blockquote><p>As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:
<ul>
<li>Not only working software, but also well-crafted software</li>
<p>
<li>Not only responding to change, but also steadily adding value</li>
<p>
<li>Not only individuals and interactions, but also a community of professionals</li>
<p>
<li>Not only customer collaboration,but also productive partnerships</li>
<p></ul>
<p>That is, in pursuit of the items on the left we have found the items on the right to be indispensable.</p>
<p>© 2009, the undersigned. this statement may be freely copied in any form, but only in its entirety through this notice.</p></blockquote>
<p>You can&#8217;t even imagine my excitement in reading this. This statement of values is something that I have been trying to get across without having the needed words for quite some time. </p>
<p>The motivation, says the InfoQ article, is right on target:</p>
<blockquote><p>The members of the manifesto group answered two key questions: “How will it help solve the problems of crap code?” and “What will motivate &#8220;The developer just churning out code&#8221; to become a craftsman?” &#8211; the distinction is between the developer who is just getting it done vs the one getting it done right.</p></blockquote>
<p>I have felt for a long time that the elements of craftsmanship are something sorely missing from our field. We, as programmers, are often so consumed with getting the job done that we do often neglect getting it done right. In our haste to move on to the next exciting project and/or technology, we neglect the tenets of simple design, test-driven development, merciless refactoring, clean code, etc. We&#8217;re often quite satisfied with the &#8220;hacky solution here&#8221; and the &#8220;quick and dirty solution there.&#8221;</p>
<p>Quite frankly, I&#8217;ve had enough of that. I&#8217;m not satisfied when the contractor building my house cuts corners. I&#8217;m quite irritable when my mechanic does a less than thorough job with my car. Why should I expect my clients to settle for software built like that?</p>
<p>So, to make this a practical rant, I thought I&#8217;d share a couple of the things that we&#8217;re doing in our team to move us in the right direction:
<ol>
<li>First of all, we started a weekly &#8220;brown bag lunch/workshop,&#8221; inspired by Andy Hunt and Venkat Subramaniam&#8217;s discussion in <span style="font-style:italic;"><a href="http://pragprog.com/titles/pad/practices-of-an-agile-developer">Practices of an Agile Developer</a></span>.</li>
<p>
<li>Second, we selected books to read as a team that will point us in the right direction. Our first two titles were <span style="font-style:italic;"><a href="http://pragprog.com/titles/tpp/the-pragmatic-programmer">The Pragmatic Programmer: From Journeyman to Master</a></span> (see, there&#8217;s craftsmanship right away!) and <span style="font-style:italic;"><a href="http://www.pearsonhighered.com/educator/academic/product/1,3110,0132350882,00.html">Clean Code: A Handbook of Agile Software Craftsmanship</a></span> (sense a pattern yet?).</li>
<p>
<li>Third, we make a point of our weekly discussions to look at ways we can integrate the principles and practices that we&#8217;re learning into our daily work. An example: We&#8217;re working to integrate peer code review into our development process. The principles, patterns, and practices that we&#8217;re picking up from <span style="font-style:italic;">Clean Code</span> will be informing us as we review code and look for possible improvements.</li>
<p></ol>
<p>So, with that said, tonight I became a signatory of the manifesto. <a href="http://manifesto.softwarecraftsmanship.org/sign/new">Why don&#8217;t you join me and fight the fight against crappy code!</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=69&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2009/03/15/the-manifesto-for-software-craftsmanship/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>

		<media:content url="http://openphoto.net/cgi-bin/image?image_id=5386" medium="image" />
	</item>
		<item>
		<title>Grails+Dojo Ajax File Upload</title>
		<link>http://mattstine.com/2009/03/13/grailsdojo-ajax-file-upload/</link>
		<comments>http://mattstine.com/2009/03/13/grailsdojo-ajax-file-upload/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 03:08:00 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/?p=68</guid>
		<description><![CDATA[I&#8217;m currently working on a Grails application with a requirement for uploading product images, which are subsequently resized into thumbnails of various sizes for different shopping screens. Since it took a bit of doing to get this done, I thought I&#8217;d post my solution here in case anyone could benefit from it. First, to set [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=68&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently working on a <a href="http://grails.org/">Grails</a> application with a requirement for uploading product images, which are subsequently resized into thumbnails of various sizes for different shopping screens. Since it took a bit of doing to get this done, I thought I&#8217;d post my solution here in case anyone could benefit from it.</p>
<p>First, to set the stage, I&#8217;ve upgraded the application all the way to the newly released <a href="http://www.springsource.org/node/1107">Grails 1.1</a>.</p>
<p>To start off, I naively attempted to use the built-in Prototype library to do the upload with a simple <code>&lt;g:submitRemote/&gt;</code> tag. You might have guessed that this didn&#8217;t work at all. Continuing to learn the hard way (without reading the manual I might add), I submitted this as a bug to the Grails project. Graeme ever so politely informed me that this was known and expected behavior, as Prototype doesn&#8217;t support such a thing. However, it was Graeme that also tipped me off to try Dojo.</p>
<p>So, continuing down this path, I proceeded to install the Grails Dojo plugin. Once this is done, a <code>&lt;g:javascript library="dojo"/&amp;gt</code> is supposedly all that is required to convert your Ajax calls from Prototype to Dojo. This turned out to not be the case for me, with Javascript errors popping up all over the place, not the least of which was that dojo.js seemed to be installed in an unexpected location via the plugin. The hacker in me simply copied this to the expected location and moved along. However, as I attempted to work with Dojo&#8217;s file upload support, I discovered that the version of Dojo shipped with the plugin seemed at first glance to be way behind. Frustrated by this, I went ahead and stripped the Dojo plugin out and installed <a href="http://download.dojotoolkit.org/release-1.2.3/dojo.js">the latest version available (at this writing 1.2.3)</a>, and set about to develop my solution.</p>
<p>Here goes:</p>
<p><strong>1. Add the necessary Dojo dependencies to your GSP:</strong></p>
<pre class="brush: js; html-script: true">
&lt;script type="text/javascript" src="${createLinkTo(dir: 'js/dojo', file: 'dojo.js')}"
   djConfig="parseOnLoad:true, isDebug:true"&gt;&lt;/script&gt;
&lt;g:javascript&gt;
   dojo.require("dojo.io.iframe");
&lt;/g:javascript&gt;
</pre>
<p><strong>2. Write a function using dojo.io.iframe to send the form:</strong></p>
<pre class="brush: js">
function submitForm() {
   dojo.io.iframe.send({
      form: 'uploadProductImageForm',
      load: function (data) {
         dojo.byId('productImage').innerHTML = data;
      }
   });
}
</pre>
<p><strong>3. Create the file upload form:</strong></p>
<pre class="brush: xml">
&lt;g:form name="uploadProductImageForm" method="post" action="uploadProductImage" enctype="multipart/form-data"&gt;
   &lt;input type="hidden" name="id" value="${productInstance?.id}"/&gt;
   &lt;input type="file" name="newProductImage"/&gt;
   &lt;span class="button"&gt;&lt;input class="add" type="button" name="uploadImage" value="Upload Image" onclick="submitForm()"/&gt;&lt;/span&gt;
&lt;/g:form&gt;
</pre>
<p><strong>4. Create the controller method:</strong></p>
<pre class="brush: groovy">
def uploadProductImage = {
   def f = request.getFile('newProductImage')
   if (!f.empty) {

   def imagePath = grailsApplication.config.store.productImages.location

   //Create unique name for this image set based on current timestamp
   def name = "image" + new Date().getTime()

   //Store the file
   def file = new File("${imagePath}/${originalFilename}")
   f.transferTo(file)

   //Do some image processing (resizing, etc.)
   ...

   //Dojo requires returning the result nested in an HTML document containing a body and textarea tag. Do this with
   //Groovy's built-in MarkupBuilder

   def writer = new StringWriter()
   def xml = new MarkupBuilder(writer)

   xml.html {
     body {
       textarea {
         img(src: resource(dir: grailsApplication.config.store.productImages.webPath, file: product.mediumImage.name), width: '250')
       }
     }
   }

   render writer.toString()
   }
   else {
      flash.message = 'file cannot be empty'
      redirect(action: show)
   }
}
</pre>
<p>And there you have it. Let me know what you think of this solution. It definitely works for me. You will notice that I didn&#8217;t include an upload progress bar &#8211; I&#8217;ll be doing this in a future iteration of the project. Cheers!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=68&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2009/03/13/grailsdojo-ajax-file-upload/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
		<item>
		<title>Little Man</title>
		<link>http://mattstine.com/2008/08/14/little-man/</link>
		<comments>http://mattstine.com/2008/08/14/little-man/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 03:54:00 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/?p=64</guid>
		<description><![CDATA[Here&#8217;s little man Grant himself smiling for the camera!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=64&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;margin:0 auto 10px;"><a href="http://4.bp.blogspot.com/_Vo63LRwAZbk/SKT-AuXbffI/AAAAAAAAAfQ/559p4D5Sv5E/s1600-h/P8110208.JPG"><img alt="" src="http://4.bp.blogspot.com/_Vo63LRwAZbk/SKT-AuXbffI/AAAAAAAAAfQ/559p4D5Sv5E/s400/P8110208.JPG" border="0" /></a><br />Here&#8217;s little man Grant himself smiling for the camera!</div>
<div style='clear:both;text-align:CENTER;'><a href='http://picasa.google.com/blogger/' target='ext'><img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border:0 none;background:transparent none repeat scroll 0 50%;padding:0;' align='middle' border='0' /></a></div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mattstine.wordpress.com/64/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mattstine.wordpress.com/64/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/64/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=64&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2008/08/14/little-man/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>

		<media:content url="http://4.bp.blogspot.com/_Vo63LRwAZbk/SKT-AuXbffI/AAAAAAAAAfQ/559p4D5Sv5E/s400/P8110208.JPG" medium="image" />

		<media:content url="http://photos1.blogger.com/pbp.gif" medium="image">
			<media:title type="html">Posted by Picasa</media:title>
		</media:content>
	</item>
	</channel>
</rss>
