<?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>Jeff Grigg&#039;s Blog</title>
	<atom:link href="http://jeffgrigg.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jeffgrigg.wordpress.com</link>
	<description></description>
	<lastBuildDate>Thu, 11 Aug 2011 12:23:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jeffgrigg.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Jeff Grigg&#039;s Blog</title>
		<link>http://jeffgrigg.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jeffgrigg.wordpress.com/osd.xml" title="Jeff Grigg&#039;s Blog" />
	<atom:link rel='hub' href='http://jeffgrigg.wordpress.com/?pushpress=hub'/>
		<item>
		<title>My Experiences with Requirements Traceability</title>
		<link>http://jeffgrigg.wordpress.com/2011/08/03/my-experiences-with-requirements-traceability/</link>
		<comments>http://jeffgrigg.wordpress.com/2011/08/03/my-experiences-with-requirements-traceability/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 20:49:10 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Extreme Programming]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/?p=103</guid>
		<description><![CDATA[With some positive feedback on my post on the Yahoo Test-driven Development group, I thought I&#8217;d post my comments here, to make them more accessible: &#8212; abrar arshadwrote: Yeah I know requirements traceability has always been related to formal requirements specification and in agile with don&#8217;t have formal documentation. &#8230; For instances, how do you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=103&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>With some positive feedback on <a title="my post on the Yahoo Test-driven Development group" href="http://tech.groups.yahoo.com/group/testdrivendevelopment/message/34742">my post on the Yahoo Test-driven Development group</a>, I thought I&#8217;d post my comments here, to make them more accessible:</p>
<p>&#8212; abrar arshadwrote:</p>
<blockquote><p>Yeah I know requirements traceability has always been related to formal requirements specification and in agile with don&#8217;t have formal documentation. &#8230; For instances, how do you know where to make changes if your client wants you to change a feature which already has been developed. There is a chance that changing one feature might effect the others as well.  &#8230;</p></blockquote>
<p>I was involved in Document-Driven approaches for quite a few years before joining the XP community. &#8220;Requirements Tracability&#8221; was always a promise of the document-driven approach, used in part to justify its high cost. But honestly, I have never seen it deliver as promised:</p>
<p>Requirements tracability advocates say that it will show you where to make a new change, and that it will highlight conflicting requirements. I have never seen this happen in practice.</p>
<p>Consider this example: We have a system that is computing hourly pay in several divisions at several union plants. There is a fair amount of hard-coded conditional code. We just renegotiated the overtime rates for one of the divisions at two plants.</p>
<p>For requirements tracability to be useful, it has to be easier to find the original requirements for these divisions and to trace these requirements down to code than it would be to find the code directly. And to see conflicts, one would have to go from all the requirements that are relevant to the code back to the requirements documents &#8212; and then somehow figure out what to do with a whole bunch of requirements statements &#8212; to see if they conflict or overlap in any way, and how to resolve the issues.</p>
<p>Generally, in practice, it&#8217;s pretty easy to find the relevant code, even without any external requirements documentation. It&#8217;s easier to find the code than to trace through a tangled mess of requirement number references.</p>
<p>And to make the change&#8230; Add or change tests. Then change the code so that it passes the tests. If there are conflicting requirements, other tests will fail.  You&#8217;ll look at the other tests and probably learn something. Sometimes it&#8217;s a technical issue, easily solved. Sometimes it is a real conflict in the business requirements. In that case, you will probably have to go back to the business requirements and maybe to the people who specify them to resolve the business issue.</p>
<p>So requirements tracability is not only costly and quickly out of date, it turns out to not be very useful. About the only good thing I&#8217;ve seen requirements tracability do is to serve as a checklist of all the things the system must do: When they&#8217;re all checked off, then you have reason to believe that the system does everything that&#8217;s been requested. User stories with automated acceptance tests also do this &#8212; with much higher justifiable confidence levels.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=103&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2011/08/03/my-experiences-with-requirements-traceability/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
		<item>
		<title>What if your bug crashes the Mars rover?</title>
		<link>http://jeffgrigg.wordpress.com/2011/01/23/what-if-your-bug-crashes-the-mars-rover/</link>
		<comments>http://jeffgrigg.wordpress.com/2011/01/23/what-if-your-bug-crashes-the-mars-rover/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 15:39:24 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/?p=98</guid>
		<description><![CDATA[In &#8220;This Developer&#8217;s Life&#8221; podcast &#8220;1.0.3 Problems&#8221; mentioned on Scott Hanselman&#8217;s blog Regarding the &#8220;1.0.3 Problems&#8221; comments about how bad it would be to have written &#8220;the bug&#8221; that trashed a Mars rover:  I don&#8217;t think we have to speculate too much about hypothetical situations.  We have the Hubble telescope mirror, for instance: http://en.wikipedia.org/wiki/Hubble_Space_Telescope#Flawed_mirror and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=98&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In &#8220;This Developer&#8217;s Life&#8221; podcast &#8220;<a title="1.0.3 Problems" href="http://thisdeveloperslife.com/post/1-0-3-problems">1.0.3 Problems</a>&#8221; mentioned on <a href="http://www.hanselman.com/blog/CommentView.aspx?title=ThisDevelopersLife104BeingMean">Scott Hanselman&#8217;s blog</a></p>
<p>Regarding the &#8220;1.0.3 Problems&#8221; comments about how bad it would be to have written &#8220;the bug&#8221; that trashed a Mars rover:  I don&#8217;t think we have to speculate too much about hypothetical situations.  We have the Hubble telescope mirror, for instance:</p>
<p><a href="http://en.wikipedia.org/wiki/Hubble_Space_Telescope#Flawed_mirror">http://en.wikipedia.org/wiki/Hubble_Space_Telescope#Flawed_mirror</a></p>
<p>and the Mars orbiter thing too:</p>
<p><a href="http://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Encounter_with_Mars">http://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Encounter_with_Mars</a></p>
<p>&#8220;Bummer, dude&#8221; is one possible response.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/98/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=98&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2011/01/23/what-if-your-bug-crashes-the-mars-rover/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
		<item>
		<title>Lemp Haunted Mansion Tour</title>
		<link>http://jeffgrigg.wordpress.com/2010/04/16/lemp-haunted-mansion-tour/</link>
		<comments>http://jeffgrigg.wordpress.com/2010/04/16/lemp-haunted-mansion-tour/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 15:45:51 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[Caving]]></category>
		<category><![CDATA[Skeptic]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/?p=94</guid>
		<description><![CDATA[I went on the Lemp &#8220;Haunted&#8221; Mansion tour on Thursday night, led by members of a &#8220;supernatural investigation&#8221; group. A little over a dozen of us from the Saint Louis skeptics group went together on the tour. As skeptics, we had plenty of flashlights and cameras of our own. And we also played with two [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=94&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I went on the Lemp &#8220;Haunted&#8221; Mansion tour on Thursday night, led by members of a &#8220;supernatural investigation&#8221; group.  A little over a dozen of us from the Saint Louis skeptics group went together on the tour.  As skeptics, we had plenty of flashlights and cameras of our own.  And we also played with two of our host&#8217;s infrared cameras.</p>
<p><a href="http://www.lempmansion.com/lempExperience.pdf">http://www.lempmansion.com/lempExperience.pdf</a></p>
<p>I found the indoor aviary room (downstairs; part of the restaurant) most creepy, due to the dark painted outdoor scene.  Unlike in my previous visit to the mansion, the gift shop was <strong>not freakishly cold</strong> this time.  (The weather was different; previous trip was early winter, this trip was after a week of quite warm weather.)</p>
<p>It&#8217;s a nice bead and breakfast place:  The two large 2nd floor rooms are very nice.  I liked the cozy and modern bathroom in the Elsa Lemp Suite.  I&#8217;d like to stay there.</p>
<p><a href="http://www.lempmansion.com/bb.html">http://www.lempmansion.com/bb.html</a></p>
<p>Being a caver, I am of course very interested in the cave under the mansion.  Here is a very good site describing the cave:</p>
<p><a href="http://www.trickykegstands.com/cherokeeCaveTour.html">http://www.trickykegstands.com/cherokeeCaveTour.html</a></p>
<p>Looks like when I stood on the 3&#215;3 ft wood cover in the basement, I was probably standing right over a nasty 34 ft drop into the cave.  Nice.  Good thing I didn&#8217;t jump up and down on it.  ;-&gt;</p>
<p>Here is a <strong>much</strong> better map of the cave than the one shown in the Lemp Mansion gift shop:</p>
<p><a href="http://www.trickykegstands.com/media/cherokeeFull.jpg">http://www.trickykegstands.com/media/cherokeeFull.jpg</a></p>
<p>(And the pool is properly marked on this map.)</p>
<p>Postcard from the old Cherokee Cave public tours shown at the bottom of this page:</p>
<p><a href="http://www.stlouistimeportal.com/postcard_advertisement.htm">http://www.stlouistimeportal.com/postcard_advertisement.htm</a></p>
<p>I have a VHS video tape that includes a <strong>legal</strong> visit to Cherokee Cave (and also the storm drains under Forest Park and the River des Peres.  It&#8217;s a 50-minute KETC Channel 9 special called &#8220;Under St. Louis&#8221;, &#8220;St. Louis Chronicles&#8221;, 1998.  &#8220;Produced in cooperation with the Missouri Historical Society.&#8221;  I think it was a bonus sent to KETC members.  (See it pays to be a contributing member of your local public TV and radio stations!  ;-)</p>
<p>The eleven minute portion about Cherokee Cave is available on You Tube here:</p>
<p><object width="450" height="363"><param name="movie" value="http://www.youtube.com/v/epOn_hI8PiY&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/epOn_hI8PiY&#038;fs=1" type="application/x-shockwave-flash" width="450" height="363" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Here&#8217;s a blog, with good pictures, of someone trespassing into the cave, a practice that is <strong>ILLEGAL and DANGEROUS!!!</strong></p>
<p><a href="http://sf0.org/MyrnaMinx/taskDetail/?id=816">http://sf0.org/MyrnaMinx/taskDetail/?id=816</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=94&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2010/04/16/lemp-haunted-mansion-tour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
		<item>
		<title>Now Senior Technical Integration Consultant at Guidewire Software</title>
		<link>http://jeffgrigg.wordpress.com/2010/01/22/90/</link>
		<comments>http://jeffgrigg.wordpress.com/2010/01/22/90/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 17:12:03 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[Job Search]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/2010/01/22/90/</guid>
		<description><![CDATA[I just accepted a position as a Senior Technical Integration Consultant at Guidewire Software, starting the first of next month.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=90&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just accepted a position as a Senior Technical Integration Consultant at <a href="http://www.guidewire.com/about_guidewire">Guidewire Software</a>, starting the first of next month.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=90&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2010/01/22/90/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
		<item>
		<title>Express-Scripts Layoff</title>
		<link>http://jeffgrigg.wordpress.com/2010/01/03/86/</link>
		<comments>http://jeffgrigg.wordpress.com/2010/01/03/86/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 21:53:46 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[Job Search]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/?p=86</guid>
		<description><![CDATA[Yes, I was part of the ESI layoff of 90% of contractors last month. I am working with Advantage Consulting and partners to find a new position. As always, I am particularly interested in highly challenging and rewarding opportunities. And I am willing to take on a heavy travel schedule and to relocate.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=86&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yes, I was part of the ESI layoff of 90% of contractors last month.  I am working with Advantage Consulting and partners to find a new position.</p>
<p>As always, I am particularly interested in highly challenging and rewarding opportunities.  And I am willing to take on a heavy travel schedule and to relocate.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/86/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=86&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2010/01/03/86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
		<item>
		<title>Roller Coasters</title>
		<link>http://jeffgrigg.wordpress.com/2009/06/20/roller-coasters/</link>
		<comments>http://jeffgrigg.wordpress.com/2009/06/20/roller-coasters/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 17:38:46 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/?p=75</guid>
		<description><![CDATA[ "Top Thrill Dragster" roller coaster at the Cedar Point Amusement Park -- fastest, tallest, etc.

And references to "the world's slowest" too?<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=75&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The &#8220;Top Thrill Dragster&#8221; roller coaster at the Cedar Point Amusement Park in Sandusky, Ohio caught my eye recently.  (One of my relatives spammed me with pictures of it.  ;-)</p>
<p>Here are a few links:</p>
<ul>
<li><a href="http://www.cedarpoint.com/public/park/rides/coasters/top_thrill_dragster/index.cfm">Official Amusement Park page</a></li>
<li><a href="http://en.wikipedia.org/wiki/Top_Thrill_Dragster">Wikipedia Entry</a></li>
<li><a href="http://www.youtube.com/watch?v=kCTlExoMbdM">Professional shots</a> (all from the ground, watching the action)</li>
<li><a href="http://www.youtube.com/watch?v=VPjN7zArwiI">Helicopter, then forward and then backwards</a> (watching people&#8217;s faces) shots</li>
<li><a href="http://www.yourdailymedia.com/media/1128947783">Discovery channel.  6 minutes.</a>  Lots of technical detail.  Includes several runs on the ride.  (No full screen option.)</li>
<ul>
<li><a href="http://nothingtoxic.com/media/1128931200/Top_Thrill_Dragster">Just the 30 second front row shot.</a>  (With full screen option.)</li>
</ul>
</ul>
<p>For something a little slower, try this:</p>
<ul>
<li><a href="http://images.google.com/images?q=Skycycle%2C%20Washuzan%20Highland%20Park%2C%20Okayama">Skycycle</a></li>
<li><a href="http://www.slightlywarped.com/crapfactory/curiosities/skycycle.htm">More Pictures</a></li>
<li><a href="http://translate.google.com/translate?hl=en&amp;u=http%3A%2F%2Fdrkssk2.fc2web.com%2Fwashuzan%2Fskycycle%2Fcycle.html">A very good sequence of pictures with moderate-to-bad translation of the text</a> from <a href="http://drkssk2.fc2web.com/washuzan/skycycle/cycle.html">this untranslated page</a></li>
</ul>
<p>Found another&#8230;  a &#8220;racing bicycle monorail&#8221;, the &#8220;Shweeb&#8221;, in New Zeland:</p>
<ul>
<li><a href="http://www.youtube.com/watch?v=GDpwkZirSNU">You Tube Video</a></li>
<li><a href="http://www.knighttimes.co.uk/blog/2009/01/shweeb-human-powered-monorail-racetrack-review/">Local Article</a></li>
<li><a href="http://www.igreenspot.com/green-fun-with-the-shweeb-human-powered-monorail/">Earlier Pictures</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=75&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2009/06/20/roller-coasters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
		<item>
		<title>Caving Boots</title>
		<link>http://jeffgrigg.wordpress.com/2009/04/03/caving-boots/</link>
		<comments>http://jeffgrigg.wordpress.com/2009/04/03/caving-boots/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 16:17:11 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[Caving]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/?p=72</guid>
		<description><![CDATA[The &#8220;Wellies&#8221; (Wellington boots) in the Facebook &#8220;Caving Gear&#8221; application inspired some brief conversations on good caving boots: Some Wellington boots come with felt on the tread &#8212; which I&#8217;m told is good for traction on slippery rocks while fishing. Some caving groups, such as the Chouteau Grotto, are known for using shoes with football [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=72&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The &#8220;Wellies&#8221; (<a href="http://en.wikipedia.org/wiki/Wellington_boots">Wellington boots</a>) in the <a href="http://apps.facebook.com/caving-gear-beejfa/">Facebook &#8220;Caving Gear&#8221; application</a> inspired some brief conversations on good caving boots:</p>
<p>Some Wellington boots come with felt on the tread &#8212; which I&#8217;m told is good for traction on slippery rocks while fishing.</p>
<p>Some caving groups, such as the Chouteau Grotto, are known for using shoes with football cleats in very muddy caves like <a href="http://www.mostateparks.com/rockbridge/cave.htm">the Devil&#8217;s Icebox</a>.  And it occurs to me that this might be useful in <a href="http://carrollcave.org/">Carol Cave</a> as well &#8212; as long as the boots tie firmly enough to the foot as to not get pulled off when pulling feet out of mud!  ;-&gt;</p>
<p>Last night at <a href="http://www.alpineshop.com/Events/misc/09banff.htm">the Banff film festival</a>, the <a href="http://shopfiveten.com/P-3001050019501/Canyoneer-2---50">&#8220;Canyoneer 2&#8243; shoe</a>, at <a href="http://www.fiveten.com/">five-ten</a> was recommended.  (See &#8220;Footwear -&gt; Water&#8221; on their flash site.)  Looks like it would hold onto the foot well, and keep most mud and sand out of the shoe.  But the tread doesn&#8217;t look very ambitious.  Maybe I should try these for my next pair of caving boots.</p>
<hr />
<p><em>(A visitor was looking for <a href="http://www.google.com/products?q=otb+sar+boots">OTB Footwear Sar Water Boots</a>, so I thought I&#8217;d mention them.)</em></p>
<hr />
<p>Bottom line:  I have to recommend the <a href="http://www.foreandaftmarine.com/749289.htm">Norcross Shrimp Boots</a>, recommended by John Hargreaves.<br />
(See comments.)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/72/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=72&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2009/04/03/caving-boots/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
		<item>
		<title>Start date at Monsanto</title>
		<link>http://jeffgrigg.wordpress.com/2009/03/24/start-date-at-monsanto/</link>
		<comments>http://jeffgrigg.wordpress.com/2009/03/24/start-date-at-monsanto/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 01:14:20 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[Job Search]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/?p=69</guid>
		<description><![CDATA[I have a start date to serve our customer, the research side of Monsanto, working through Comsys and Advantage consulting:  Monday, April 6th.   Monsanto is one of the best customers I&#8217;ve had the pleasure of working with, and I look forward to the opportunity to serve with them again.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=69&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin:0;"><span style="font-size:small;"><span style="font-family:Times New Roman;">I have a start date to serve our customer, the research side of Monsanto, working through Comsys and Advantage consulting:<span>  </span>Monday, April 6th.</span></span></p>
<p class="MsoNormal" style="margin:0;"> </p>
<p class="MsoNormal" style="margin:0;"><span style="font-size:12pt;font-family:&quot;">Monsanto is one of the best customers I&#8217;ve had the pleasure of working with, and I look forward to the opportunity to serve with them again.</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=69&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2009/03/24/start-date-at-monsanto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
		<item>
		<title>Minor Fresh Concrete Crisis</title>
		<link>http://jeffgrigg.wordpress.com/2009/03/17/minor-fresh-concrete-crisis/</link>
		<comments>http://jeffgrigg.wordpress.com/2009/03/17/minor-fresh-concrete-crisis/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 14:47:58 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/?p=59</guid>
		<description><![CDATA[Local color: They just poured concrete to repair the road outside my house this morning. Within seconds of them leaving, the neighbor&#8217;s youngest fell in it. I pulled him out by his feet; and while his parents washed him off, I caught the workers on the next street so they could fix the concrete. They [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=59&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Local color: They just poured concrete to repair the road outside my house this morning. Within seconds of them leaving, the neighbor&#8217;s youngest fell in it. I pulled him out by his feet; and while his parents washed him off, I caught the workers on the next street so they could fix the concrete. They said that things like this happen all the time. ;-&gt;</p>
<p>This one could be harder to explain to your supervisor, however:<br />
<a href="http://fataldelay.com/Wrecks/concretecop.jpg">Police car in fresh concrete</a> <a href="http://www.norcalblogs.com/post_scripts/2007/04/#a004182">(from this page)</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=59&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2009/03/17/minor-fresh-concrete-crisis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
		<item>
		<title>The Pure Danger of Unfair Read-Write Locks</title>
		<link>http://jeffgrigg.wordpress.com/2009/03/13/the-pure-danger-of-unfair-read-write-locks/</link>
		<comments>http://jeffgrigg.wordpress.com/2009/03/13/the-pure-danger-of-unfair-read-write-locks/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 22:32:19 +0000</pubDate>
		<dc:creator>Jeff Grigg</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[NFJS Conference]]></category>

		<guid isPermaLink="false">http://jeffgrigg.wordpress.com/?p=57</guid>
		<description><![CDATA[A code sample where "unfair locks" are found to be more "fair" than expected.  (YMMV!)<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=57&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Attending the local <a href="http://www.nofluffjuststuff.com/">No Fluff Just Stuff</a> conference <a href="http://www.nofluffjuststuff.com/conference/st_louis/2009/03/index.html">in Saint Louis</a> on Friday, I raised a question during <a href="http://www.nofluffjuststuff.com/speaker_topic_view.jsp?topicId=753">Alex Miller&#8217;s talk on Java Concurrency Idioms</a> regarding the <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html">documented behavior of the ReentrantReadWriteLock</a> of &#8220;A nonfair lock that is continously contended may indefinitely postpone one or more reader or writer threads, <em><span style="color:#999999;">[...]</span></em>&#8220;</p>
<p>So I commented on Alex&#8217;s <a href="http://tech.puredanger.com/2009/03/08/read-write-wait/">&#8220;Writing while reads pile up&#8221; blog entry</a>, saying:</p>
<blockquote><p>My question on Friday was regarding the potential for a sequential set of overlapping readers locking out a waiting writer forever. It seems that this could happen, as the JavaDoc explicitly says, “A nonfair lock that is continously contended may indefinitely postpone one or more reader or writer threads”.<br />
The scenario I had in mind would work like this:<br />
1. Reader 1 gets a read lock.<br />
2. The writer requests a write lock, and is blocked.<br />
3. Reader 2 requests a read lock — and let’s say they get it.<br />
4. Reader 1 releases their read lock.<br />
5. Reader 3 requests a read lock — and let’s say they get it.<br />
6. Reader 2 releases their read lock.<br />
As long as steps 5 and 6 are repeated as shown above, the writer would be delayed indefinately.<br />
However, in writing tests for this, I’m finding that the ‘java.util.concurrent.locks.ReentrantReadWriteLock’ class has the (apparently undocumented) behavior that it stops granting read locks when a write lock is requested. So it appears that even in non-fair mode, readers will NOT block writers indefinitely. (…as long as every lock holder releases their lock within a reasonable period of time!)<br />
What I find is that in step 3 above, Reader 2 is delayed until the writer gets, uses and releases the write lock. So the write does NOT get indefinitely postponed in this scenario.</p></blockquote>
<p>Not wanting to keep secrets, I am posting here the code I&#8217;m using to come to this conclusion:<br />
<code><br />
import java.util.ArrayList;<br />
import java.util.List;<br />
import java.util.concurrent.locks.ReentrantReadWriteLock;<br />
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;<br />
import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;<br />
import org.junit.Test;</code></p>
<p>public class LockTest {<br />
private List readThreads = new ArrayList();</p>
<p>@Test<br />
public void runTest() throws InterruptedException {<br />
final boolean isFair = false;<br />
final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock(isFair);<br />
final ReadLock readLock = readWriteLock.readLock();<br />
final WriteLock writeLock = readWriteLock.writeLock();</p>
<p>System.out.println(&#8220;===================================&#8221;);<br />
System.out.println(&#8220;&#8211;&gt; Start working read threads.&#8221;);<br />
final int readersPerBatch = 5;<br />
for (int idx = 0; idx Start blocking read threads.&#8221;);<br />
for (int idx = 0; idx &gt;&gt; WRITE LOGIC HERE &lt;&lt;&lt;&#8221;);<br />
writeLock.unlock();<br />
System.out.println(&#8220;Main: Released write lock.&#8221;);<br />
System.out.println(&#8220;===================================&#8221;);</p>
<p>for (final Thread thread : readThreads) {<br />
thread.join();<br />
}<br />
System.out.println(&#8220;===================================&#8221;);<br />
System.out.println(&#8220;Done.&#8221;);<br />
}</p>
<p>private void startReadLockThread(final ReadLock readLock, final int thisReaderNumber) {<br />
final Thread thread = new Thread(new Runnable() {<br />
@Override<br />
public void run() {<br />
final String messagePrefix = &#8220;Reader &#8221; + thisReaderNumber + &#8220;: &#8220;;<br />
System.out.println(messagePrefix + &#8220;Started.&#8221;);<br />
sleepSeconds(1);<br />
System.out.println(messagePrefix + &#8220;Asking for read lock.&#8221;);<br />
readLock.lock();<br />
try {<br />
System.out.println(messagePrefix + &#8220;Has read lock.&#8221;);<br />
System.out.println(messagePrefix + &#8220;&#8216;Working&#8217; with read lock.&#8221;);<br />
sleepSeconds(6);<br />
} finally {<br />
System.out.println(messagePrefix + &#8220;Releasing read lock.&#8221;);<br />
readLock.unlock();<br />
}<br />
}<br />
});<br />
readThreads.add(thread);<br />
thread.start();<br />
}</p>
<p>private static void sleepSeconds(double seconds) {<br />
try {<br />
final long milliseconds = Math.round(seconds * 1000);<br />
Thread.sleep(milliseconds);<br />
} catch (InterruptedException ex) {<br />
ex.printStackTrace();<br />
}<br />
}<br />
}</p>
<p>Sample Output:<br />
<code><br />
===================================<br />
--&gt; Start working read threads.<br />
Reader 1: Started.<br />
Reader 3: Started.<br />
Reader 2: Started.<br />
Main: Sleeping.<br />
Reader 5: Started.<br />
Reader 4: Started.<br />
Reader 5: Asking for read lock.<br />
Reader 5: Has read lock.<br />
Reader 5: 'Working' with read lock.<br />
Reader 3: Asking for read lock.<br />
Reader 3: Has read lock.<br />
Reader 3: 'Working' with read lock.<br />
Reader 1: Asking for read lock.<br />
Reader 1: Has read lock.<br />
Reader 1: 'Working' with read lock.<br />
Reader 4: Asking for read lock.<br />
Reader 4: Has read lock.<br />
Reader 4: 'Working' with read lock.<br />
Reader 2: Asking for read lock.<br />
Reader 2: Has read lock.<br />
Reader 2: 'Working' with read lock.<br />
===================================<br />
--&gt; Start blocking read threads.<br />
Reader 6: Started.<br />
Reader 8: Started.<br />
Reader 7: Started.<br />
Reader 9: Started.<br />
Main: Attempting to acquire write lock.<br />
Reader 10: Started.<br />
Reader 8: Asking for read lock.<br />
Reader 10: Asking for read lock.<br />
Reader 9: Asking for read lock.<br />
Reader 7: Asking for read lock.<br />
Reader 6: Asking for read lock.<br />
Reader 2: Releasing read lock.<br />
Reader 4: Releasing read lock.<br />
Reader 1: Releasing read lock.<br />
Reader 3: Releasing read lock.<br />
Reader 5: Releasing read lock.<br />
===================================<br />
Main: Has write lock.<br />
Main: &gt;&gt;&gt; WRITE LOGIC HERE &lt;&lt;&lt;<br />
Main: Released write lock.<br />
===================================<br />
Reader 8: Has read lock.<br />
Reader 8: 'Working' with read lock.<br />
Reader 10: Has read lock.<br />
Reader 10: 'Working' with read lock.<br />
Reader 6: Has read lock.<br />
Reader 6: 'Working' with read lock.<br />
Reader 7: Has read lock.<br />
Reader 7: 'Working' with read lock.<br />
Reader 9: Has read lock.<br />
Reader 9: 'Working' with read lock.<br />
Reader 8: Releasing read lock.<br />
Reader 6: Releasing read lock.<br />
Reader 10: Releasing read lock.<br />
Reader 7: Releasing read lock.<br />
Reader 9: Releasing read lock.<br />
===================================<br />
Done.<br />
</code></p>
<p>Observe that the Main thread starts up five Reader threads, and waits for them to acquire read locks and start &#8220;working.&#8221; Main then fires up five more read threads and requests a write lock before the new threads request their read locks. Notice that the five new Reader threads WAIT until the first five threads finish, and the main thread acquires, uses and releases the write lock. And then the five Reader threads that have been waiting all get their locks, do their &#8220;work&#8221; and finish.</p>
<p>This is much better behavior than I had expected.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffgrigg.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffgrigg.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffgrigg.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffgrigg.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffgrigg.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffgrigg.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffgrigg.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffgrigg.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffgrigg.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffgrigg.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffgrigg.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffgrigg.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffgrigg.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffgrigg.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffgrigg.wordpress.com&amp;blog=6435232&amp;post=57&amp;subd=jeffgrigg&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffgrigg.wordpress.com/2009/03/13/the-pure-danger-of-unfair-read-write-locks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d8556a4a66c932f05c672bca5adb414?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jeffgrigg</media:title>
		</media:content>
	</item>
	</channel>
</rss>
