<?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>Sliding up the banister</title>
	<atom:link href="http://joelneely.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://joelneely.wordpress.com</link>
	<description>Sneaking up on functional programming</description>
	<lastBuildDate>Mon, 30 Jan 2012 17:03:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='joelneely.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Sliding up the banister</title>
		<link>http://joelneely.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://joelneely.wordpress.com/osd.xml" title="Sliding up the banister" />
	<atom:link rel='hub' href='http://joelneely.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Lab Rat Code</title>
		<link>http://joelneely.wordpress.com/2012/01/30/lab-rat-code/</link>
		<comments>http://joelneely.wordpress.com/2012/01/30/lab-rat-code/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 17:03:22 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[education]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/?p=337</guid>
		<description><![CDATA[My older son has gone back to school to study IT, and we occasionally discuss his courses or internship (though not his homework). As a graphic artist, musician, gamer, and box-builder, he is an experienced user, but thinking as a programmer is new to him. Therefore I find his perspective on programming an interesting counterpoint [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=337&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My older son has gone back to school to study IT, and we occasionally discuss his courses or internship (though not his homework). As a graphic artist, musician, gamer, and box-builder, he is an experienced user, but thinking as a programmer is new to him. Therefore I find his perspective on programming an interesting counterpoint to my own:</p>
<ul>
<li>I have been programming long enough to have forgotten what seemed clear or opaque when I was a beginner.</li>
<li>Our backgrounds (artistic versus mathematical) provided different sets of expectations and metaphors.</li>
<li>He can take advantage of, and for granted, an enormous variety of resources that did not exist when I started, from a wealth of alternative programming languages and open-source code to pervasive consumer-level use of the Internet.</li>
</ul>
<p><img src="http://joelneely.files.wordpress.com/2012/01/codemazesmall.jpg?w=168&#038;h=169" alt="CodeMazeSmall.jpg" border="0" width="168" height="169" align="right" /></p>
<p>He has also encountered a phenomenon that has frustrated me throughout my time as a student, teacher, and practitioner: <em><strong>lab rat code</strong></em>.</p>
<p>Illustrative code in blogs, articles, and textbooks is often unrealistic for the same reason that physics homework refers to friction-free pool tables and the stereotypical psychology lab is filled with rats and mazes. A writer who wants to illustrate a technique needs to apply it to a task that is simple enough not to create distraction. Stated from the other perspective, a reader who doesn&#8217;t understand the goal will likely not appreciate the path.</p>
<p>So the canonical first program in a new language prints &#8220;Hello, world!&#8221; to standard output, often soon followed by YAFG (Yet Another Fibonacci Generator).</p>
<p>The challenge remains for the reader to ignore distraction. I&#8217;d like to offer some strategies that I find helpful in that role.</p>
<ol>
<li>If the sample task seems too trivial, then the author succeeded in picking a goal that doesn&#8217;t require much of your attention. Stop reading long enough to sketch out what you regard as the obvious solution, then resume reading to see if the author’s solution offers you any new insights.</li>
<li>If the task seems unfamiliar, then the author may have used more detail than necessary. Skim the problem statement, then examine the solution to see how many of those details actually matter for the illustration.</li>
<li>If the solution seems too heavy, the author may be illustrating it on a problem that doesn&#8217;t require its full power. Check to see whether the author follows up with a harder problem that exploits more of the solution&#8217;s capabilities. Or create your own example of a harder problem with similar characteristics. Delaying the natural tendency to think, &#8220;<em>I can solve this more easily another way!</em>&#8221; may provide an opportunity to understand the reasons for the apparent complexity.</li>
<li>Develop a tolerance for uncertainty. I have developed a better appreciation for some concepts only through repeated exposure. (It really doesn&#8217;t matter whether that statement is about the concept or about me. The result was worth the process.) Similarly, I have sometimes learned something interesting from a solution to a problem outside my experience or interest. Over time you may develop a sense for what you can safely ignore.</li>
</ol>
<p>The author who wants to reduce the risk of distraction might consider some of these strategies:</p>
<ol>
<li>Avoid cliches like the plague. Instead of offering YAFG, come up with a fresher example (unless you know your readers really LIKE Fibonacci numbers.) Which brings me to my next cliche&#8230;</li>
<li>Know your audience. I have heard busy practitioners dismiss a technique because (IMHO) they had never been shown its application to a problem about which they cared. A bill-of-materials example might illustrate recursion to an industrial programmer far better than parsing or binary tree traversal.</li>
<li>When using a lab-rat example, be explicit about that fact. At least then your reader will be forewarned.</li>
<li>If realism, or an agenda beyond the single example, prompts you to include more detail than necessary for the current illustration, consider the structure of your presentation. Can those details be delayed? If not, than being explicit about which ones are important to the solution may help your reader avoid bogging down on the less relevant ones.</li>
</ol>
<p>I’ll try to apply those practices myself, both as reader and writer.</p>
<br />Filed under: <a href='http://joelneely.wordpress.com/category/education/'>education</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/337/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=337&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2012/01/30/lab-rat-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2012/01/codemazesmall.jpg" medium="image">
			<media:title type="html">CodeMazeSmall.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Protect Innocence against Persecuting Assault</title>
		<link>http://joelneely.wordpress.com/2012/01/19/protect-innocence-against-persecuting-assault/</link>
		<comments>http://joelneely.wordpress.com/2012/01/19/protect-innocence-against-persecuting-assault/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 13:39:45 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/2012/01/19/protect-innocence-against-persecuting-assault/</guid>
		<description><![CDATA[Convenience stores sometimes get robbed. That&#8217;s wrong. But suppose lobbyists for the convenience store industry got congress to pass legislation that would authorize the stores to: Keep assault weapons under the counters; Use them at will under a &#8220;shoot first, ask questions later&#8221; policy; and Exempt them from responsibility for using deadly force if they [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=335&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Convenience stores sometimes get robbed. That&#8217;s wrong.</p>
<p>But suppose lobbyists for the convenience store industry got congress to pass legislation that would authorize the stores to:</p>
<ol>
<li>Keep assault weapons under the counters;</li>
<li>Use them at will under a &#8220;shoot first, ask questions later&#8221; policy; and</li>
<li>Exempt them from responsibility for using deadly force if they could say, &#8220;he/she looked suspicious to me!&#8221;</li>
</ol>
<p>That is the equivalent of what the backers of SOPA / PIPA are attempting to do.</p>
<p>Don&#8217;t just take my word for it. Please <a title="SOPA and PIPA" href="http://www.youtube.com/watch?v=tzqMoOk9NWc">watch the video</a> from <a title="Khan Academy" href="http://www.khanacademy.org/">Khan Academy</a> that explains the reach and risks of these proposals.</p>
<p>Stop PIPA.</p>
<p>But don&#8217;t stop there.</p>
<p>(And now, back to our regularly-scheduled programming…)</p>
<p> </p>
<br />Filed under: <a href='http://joelneely.wordpress.com/category/uncategorized/'>Uncategorized</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/335/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=335&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2012/01/19/protect-innocence-against-persecuting-assault/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>
	</item>
		<item>
		<title>Stop Oligopolies and Paranoia, America</title>
		<link>http://joelneely.wordpress.com/2012/01/18/stop-oligopolies-and-paranoia-america/</link>
		<comments>http://joelneely.wordpress.com/2012/01/18/stop-oligopolies-and-paranoia-america/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 13:37:51 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/?p=211</guid>
		<description><![CDATA[There was a time when saying, &#8220;This is a nation governed by law&#8220;, brought honor and pride. That statement was associated with many others, such as, &#8220;All persons are equal before the law&#8220;, that emphasized that the same rules applied to everyone, regardless of economics, education, race, or any of the other attributes that in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=211&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There was a time when saying, &#8220;<em>This is a nation governed by law</em>&#8220;, brought honor and pride.</p>
<p>That statement was associated with many others, such as, &#8220;<em>All persons are equal before the law</em>&#8220;, that emphasized that the same rules applied to everyone, regardless of economics, education, race, or any of the other attributes that in various times and places have been used to diminish the access of some to justice, opportunity, and fair treatment.</p>
<p>Many in this country still hold to those principles, for which I am grateful. As one who grew up during the Civil Rights Movement, I honor the courage of those who used the rule and power of law to move a society toward justice. That journey is not complete, but equality before the law has been a powerful aid along the path to freedom.</p>
<p>But freedom and equality, as with physical health, clean dishes, a mowed lawn, and a bug-free code base, are not persistent states. They require constant scrutiny and action, both preventative and corrective.</p>
<p>Legislative corruption threatens to replace the bright vision of rule by law with the dark specter of power for sale to the highest bidder. Uncontrolled lobbying and so-called &#8220;campaign contributions&#8221;, unlimited terms of office, and the apparent willful technological ignorance of many in congress, threaten to bring the grim scenarios of the cyberpunk genre to reality.</p>
<p>I do not advocate violating the law. I respect the need for a society to have structures in place by which creativity&ndash;artistic or technical&ndash;can be encouraged. And that includes paying fairly for its benefits.</p>
<p>But I regard as misguided any attempt to pervert our legal process to allow preemptive or punitive action without due process. I regard as toxic to health and progress the attempts to provide artificial protection for obsolete business or technological structures that resist change simply because people with money want to keep making more money in the same way.</p>
<p>And I regard as fatal to any virtue in the concept of rule by law the risk that our legislative, regulatory, and enforcement institutions are for sale.</p>
<p>Stop SOPA.</p>
<p>But don&#8217;t stop there.</p>
<p>(And now, back to our regularly-scheduled programming&#8230;)</p>
<br />Filed under: <a href='http://joelneely.wordpress.com/category/uncategorized/'>Uncategorized</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/211/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=211&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2012/01/18/stop-oligopolies-and-paranoia-america/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>
	</item>
		<item>
		<title>Technical deficit spending</title>
		<link>http://joelneely.wordpress.com/2011/06/07/technical-deficit-spending/</link>
		<comments>http://joelneely.wordpress.com/2011/06/07/technical-deficit-spending/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 12:38:31 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[style]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/?p=208</guid>
		<description><![CDATA[Hungry and in a hurry, I dropped into the diner and ordered eggs and toast. The server returned shortly with an electric skillet, a toaster, two whole eggs, and two slices of bread. As I cracked the eggs into the skillet, the server came back along the counter with a bag of coffee beans and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=208&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/05/eggs_and_toast2.jpg?w=193&#038;h=149" alt="eggs_and_toast.jpg" border="0" width="193" height="149" /></div>
<p>Hungry and in a hurry, I dropped into the diner and ordered eggs and toast. The server returned shortly with an electric skillet, a toaster, two whole eggs, and two slices of bread. As I cracked the eggs into the skillet, the server came back along the counter with a bag of coffee beans and a grinder, asking, &#8220;Want coffee with that?&#8221;</p>
<p>At this point, you&#8217;re probably questioning my choice of restuarant. Especially if I make a habit of eating there. And what does this have to do with software development?</p>
<h3>Deficit Spending</h3>
<p>The concept of <a href="http://www.martinfowler.com/bliki/TechnicalDebt.html">technical</a> <a href="http://javaposse.com/java_posse_273_roundup_09_managing_technical_debt">debt</a> is well established by now. In the best case it means buying a near-term benefit by deliberately taking on a future responsibility, as in, &#8220;I&#8217;l take out a loan to replace my monster truck with a hybrid, and will make the payments out of what I&#8217;m saving in gas!&#8221; Sometimes we take a short-cut in the interest of advancing a project, but also know that we&#8217;ll pay it back later.</p>
<p>It&#8217;s more troublesome when the obligation is created by someone who will not have to deal with the consequences. To put it bluntly, separating a decision from its consequences is a recipe for bad design. It is both easier for the decision-maker to add costs <strong>and</strong> harder for the ones who will bear those costs to see the debt growing.</p>
<p>I propose to borrow the term &#8220;<em>deficit spending</em>&#8221; to refer to technical debt imposed by someone else. And to keep this from being an abstract rant, will follow with a few additional posts to identify kinds and causes of technical debt spending.</p>
<br />Filed under: <a href='http://joelneely.wordpress.com/category/design/'>design</a>, <a href='http://joelneely.wordpress.com/category/style/'>style</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=208&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2011/06/07/technical-deficit-spending/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/05/eggs_and_toast2.jpg" medium="image">
			<media:title type="html">eggs_and_toast.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Why Data Structures Matter</title>
		<link>http://joelneely.wordpress.com/2011/03/05/why-data-structures-matter/</link>
		<comments>http://joelneely.wordpress.com/2011/03/05/why-data-structures-matter/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 23:06:17 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[algorithms]]></category>
		<category><![CDATA[JPR]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Scala]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/?p=188</guid>
		<description><![CDATA[Our experience on Day 0 of JPR11 yielded a nice example of the need to choose an appropriate implementation of an abstract concept. As I mentioned in the previous post, we experimented with Michael Barker&#8217;s Scala implementation of Guy Steele&#8217;s parallelizable word-splitting algorithm (slides 51-67). Here&#8217;s the core of the issue. Given a type-compatible associative [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=188&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Our experience on <a href="http://joelneely.wordpress.com/2011/02/24/jpr-2011-day-0/">Day 0 of JPR11</a> yielded a nice example of the need to choose an appropriate implementation of an abstract concept. As I mentioned in the previous post, we experimented with <a href="https://github.com/mikeb01/jpr11-dojo/">Michael Barker&#8217;s Scala implementation</a> of Guy Steele&#8217;s <a href="http://strangeloop2010.com/talks/14299">parallelizable word-splitting algorithm</a> (slides 51-67). Here&#8217;s the core of the issue.</p>
<p>Given a type-compatible associative operator and sequence of values, we can fold the operator over the sequence to obtain a single accumulated value.  For example, because addition of integers is associative, addition can be folded over the sequence:</p>
<blockquote><p><code>1, 2, 3, 4, 5, 6, 7, 8</code></p></blockquote>
<p>from the left:</p>
<blockquote><p><code>((((((1 + 2) + 3) + 4) + 5) + 6) + 7) + 8</code></p></blockquote>
<p>or the right:</p>
<blockquote><p><code>1 + (2 + (3 + (4 + (5 + (6 + (7 + 8))))))</code></p></blockquote>
<p>or from the middle outward, by recursive/parallel splitting:</p>
<blockquote><p><code>((1 + 2) + (3 + 4)) + ((5 + 6) + (7 + 8))</code></p></blockquote>
<p>A 2-D view shows even more clearly the opportunity to evaluate sub-expressions in parallel. Assuming that addition is a constant-time operation, the left fold:</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/03/foldleftplain.jpg?w=219&#038;h=325" alt="foldLeftPlain.jpg" border="0" width="219" height="325" /></div>
<p>and the right fold:</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/03/foldrightplain.jpg?w=219&#038;h=325" alt="foldRightPlain.jpg" border="0" width="219" height="325" /></div>
<p>require linear time, but the balanced tree:</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/03/foldtreeplain.jpg?w=312&#038;h=271" alt="foldTreePlain.jpg" border="0" width="312" height="271" /></div>
<p>can be done in logarithmic time.</p>
<p>But the associative operation for the word-splitting task involves accumulating lists of words. With a naive implementation of linked lists, appending is not a constant-time operation; it is linear on the length of the left operand. So for this operation the right fold is linear on the size of the task:</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/03/foldrightlinear.jpg?w=219&#038;h=325" alt="foldRightLinear.jpg" border="0" width="219" height="325" /></div>
<p>the left fold is quadratic:</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/03/foldleftlinear.jpg?w=585&#038;h=325" alt="foldLeftLinear.jpg" border="0" width="585" height="325" /></div>
<p>and the recursive/parallel version is linear:</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/03/foldtreelinear.jpg?w=312&#038;h=271" alt="foldTreeLinear.jpg" border="0" width="312" height="271" /></div>
<p>Comparing just the &#8220;parallel-activity-versus-time&#8221; parts of those diagrams makes it clear that right fold is as fast as the parallel version, and also does less total work:</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/03/comparelinear.jpg?w=585&#038;h=295" alt="compareLinear.jpg" border="0" width="585" height="295" /></div>
<p>Of course, there are other ways to implement the sequence-of-words concept, and that is the whole point. This little example provides a nice illustration of how parallel execution of the wrong implementation is not a win.</p>
<hr />
<p>The title of this post is a not-very-subtle (but respectful) reference to &#8220;<a href="http://www.cse.chalmers.se/~rjmh/Papers/whyfp.html">Why Functional Programming Matters</a>&#8220;, an excellent summary by <a href="http://en.wikipedia.org/wiki/John_Hughes_%28computer_scientist%29">John</a> <a href="http://www.infoq.com/interviews/john-hughes-fp">Hughes</a> that deserves to be <a href="http://weblog.raganwald.com/2007/03/why-why-functional-programming-matters.html">more widely read</a>.</p>
<p><a href="http://www.amazon.com/gp/product/0521663504?ie=UTF8&amp;tag=slidiuptheban-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0521663504">Purely Functional Data Structures</a><img src="http://www.assoc-amazon.com/e/ir?t=slidiuptheban-20&amp;l=as2&amp;o=1&amp;a=0521663504" width="1" height="1" border="0" alt="" style="border:none!important;margin:0!important;" />, by Chris Okasaki, covers a nice collection of algorithms that avoid the trap mentioned above.</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/03/41xlpaczql-_sl160_.jpg?w=105&#038;h=160" alt="41XlPaC+ZqL._SL160_.jpg" border="0" width="105" height="160" /></div>
<p>Also, video from <a href="http://www.nescala.org/2011/">this year&#8217;s Northeast Scala Symposium</a> is now on-line for the session on <a href="http://vimeo.com/20262239">functional data structures in Scala</a>, presented by <a href="http://www.codecommit.com/blog/">Daniel Spiewak</a>.</p>
<br />Filed under: <a href='http://joelneely.wordpress.com/category/algorithms/'>algorithms</a>, <a href='http://joelneely.wordpress.com/category/jpr/'>JPR</a>, <a href='http://joelneely.wordpress.com/category/jvm/'>JVM</a>, <a href='http://joelneely.wordpress.com/category/functional-programming/scala/'>Scala</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/188/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=188&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2011/03/05/why-data-structures-matter/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/03/foldleftplain.jpg" medium="image">
			<media:title type="html">foldLeftPlain.jpg</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/03/foldrightplain.jpg" medium="image">
			<media:title type="html">foldRightPlain.jpg</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/03/foldtreeplain.jpg" medium="image">
			<media:title type="html">foldTreePlain.jpg</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/03/foldrightlinear.jpg" medium="image">
			<media:title type="html">foldRightLinear.jpg</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/03/foldleftlinear.jpg" medium="image">
			<media:title type="html">foldLeftLinear.jpg</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/03/foldtreelinear.jpg" medium="image">
			<media:title type="html">foldTreeLinear.jpg</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/03/comparelinear.jpg" medium="image">
			<media:title type="html">compareLinear.jpg</media:title>
		</media:content>

		<media:content url="http://www.assoc-amazon.com/e/ir?t=slidiuptheban-20&#38;l=as2&#38;o=1&#38;a=0521663504" medium="image" />

		<media:content url="http://joelneely.files.wordpress.com/2011/03/41xlpaczql-_sl160_.jpg" medium="image">
			<media:title type="html">41XlPaC+ZqL._SL160_.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>JPR 2011 Day 0</title>
		<link>http://joelneely.wordpress.com/2011/02/24/jpr-2011-day-0/</link>
		<comments>http://joelneely.wordpress.com/2011/02/24/jpr-2011-day-0/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 22:40:10 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[JavaPosse]]></category>
		<category><![CDATA[JPR]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/?p=179</guid>
		<description><![CDATA[Despite the winter storm and avalanche warnings in the Crested Butte area, the flight into Gunnison went off without a hitch. The last few miles of descent were as bumpy as an old dirt road, but the sky was mostly clear, as were the roads leaving the airport. A few miles uphill, the story was [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=179&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Despite the winter storm and avalanche warnings in the Crested Butte area, the flight into Gunnison went off without a hitch. The last few miles of descent were as bumpy as an old dirt road, but the sky was mostly clear, as were the roads leaving the airport.</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/02/gunnisonskyjpr11.jpg?w=292&#038;h=186" alt="GunnisonSkyJpr11.jpg" border="0" width="292" height="186" /></div>
<p>A few miles uphill, the story was a bit different, but our <a href="http://www.alpineexpressshuttle.com/">Alpine Express</a> driver got us to our door smoothly and safely.</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/02/roadjpr11.jpg?w=292&#038;h=186" alt="RoadJpr11.jpg" border="0" width="292" height="186" /></div>
<p>Day Zero is traditionally reserved for explorations of new technologies, alternate languages on the JVM, and collaborative skills-building. I joined a group that focused on <a href="http://www.scala-lang.org/">Scala</a>. We talked about <a href="http://labs.oracle.com/people/mybio.php?uid=25706">Guy Steele&#8217;s</a> parallel string-splitting algorithm as <a href="http://strangeloop2010.com/talks/14299">presented</a> at StrangeLoop 2010, got a demo of parallel collections in Scala 2.9, and worked on Scala koans.</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2011/02/scalakoansjpr11.jpg?w=292&#038;h=186" alt="ScalaKoansJpr11.jpg" border="0" width="292" height="186" /></div>
<p>After I pointed the folks at my table to Steele&#8217;s published slides and summarized the the algorithm, Michael Barker immediately <a href="https://github.com/mikeb01/jpr11-dojo/">re-coded it in Scala</a> and we started looking at performance. More on that <a href="http://joelneely.wordpress.com/2011/03/05/why-data-structures-matter/">later</a>.</p>
<p>Inspired by the excellent <a href="https://github.com/edgecase/ruby_koans">Ruby koans</a> work led by <a href="http://onestepback.org/">Jim Weirich</a>, <a href="http://dickwallsblog.blogspot.com/">Dick Wall</a> had begun working on Scala koans at a previous year&#8217;s <a href="http://www.codemash.org/">CodeMash</a>. <a href="http://www.srtsolutions.com/author/diannemarsh">Dianne Marsh</a> took up the reins; the informal team continues to refine and add to the material, and welcomes additional participants. The <a href="https://bitbucket.org/dmarsh/scalakoansexercises/wiki/Home">Scala koan collection</a> is currently a work in progress; despite a rough edge or two, I really like this approach to ease into the thought processes of a language and very much appreciate the work of the team.</p>
<p>The end-of-day semi-lightning-talk presentations demonstrated a breadth of interests and subjects that will likely help shape this year&#8217;s Roundup:</p>
<ul>
<li>Michael and I discussed our observations on the performance of the parallel string splitter;</li>
<li>Dianne and Dick described the Scala koans and their current statusy</li>
<li>Joe Sundow summarized the jQuery and JavaScript MVS explorations that he had led through the day;</li>
<li>James (<em>&#8220;I&#8217;m just a Flex guy!&#8221;</em>) Ward showed how he&#8217;s using Spring and Hibernate on a current demo project;</li>
<li>Fred Simon gave a quick demo of Fantom, including its ability to compile to JavaScript.</li>
</ul>
<p>Handerson Gomes and Jim Hurne get my &#8220;Wow!&#8221; vote for a joint presentation which really made us all sit up and take notice. In the course of one day, they downloaded the Android development kit, got themselves up to speed, and built and tested a small app which include audio and use of the touch-screen gestures.</p>
<p>It was a great start to what promises to be an excellent week. In other words, it was typical for a Roundup!</p>
<br />Filed under: <a href='http://joelneely.wordpress.com/category/javaposse/'>JavaPosse</a>, <a href='http://joelneely.wordpress.com/category/jpr/'>JPR</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/179/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=179&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2011/02/24/jpr-2011-day-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/02/gunnisonskyjpr11.jpg" medium="image">
			<media:title type="html">GunnisonSkyJpr11.jpg</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/02/roadjpr11.jpg" medium="image">
			<media:title type="html">RoadJpr11.jpg</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2011/02/scalakoansjpr11.jpg" medium="image">
			<media:title type="html">ScalaKoansJpr11.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Review of Best iPad Apps: The Guide for Discriminating Downloaders by Peter Meyers</title>
		<link>http://joelneely.wordpress.com/2010/12/23/review-of-best-ipad-apps-the-guide-for-discriminating-downloaders-by-peter-meyers/</link>
		<comments>http://joelneely.wordpress.com/2010/12/23/review-of-best-ipad-apps-the-guide-for-discriminating-downloaders-by-peter-meyers/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 13:56:03 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[Book review]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/?p=174</guid>
		<description><![CDATA[&#8220;Horseless carriage.&#8221; Hold that thought. Goals I got my iPad as a tool to accomplish things with more mobility and efficiency, not to spend time wandering virtual supermarket aisles looking for the shiniest variation on a theme. Given that, I was immediately attracted by this title from O&#8217;Reilly. Both the author, Peter Meyers, and the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=174&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&#8220;Horseless carriage.&#8221; Hold that thought.</p>
<h3>Goals</h3>
<p>I got my iPad as a tool to accomplish things with more mobility and efficiency, not to spend time wandering virtual supermarket aisles looking for the shiniest variation on a theme. Given that, I was immediately attracted by <a href="http://oreilly.com/catalog/9781449392475/">this title</a> from O&#8217;Reilly. Both the <a href="http://www.oreillynet.com/pub/au/1933">author</a>, <a href="http://newkindofbook.com/">Peter Meyers</a>, and the <a href="http://oreilly.com/">publisher</a> have the right credentials and reputation to address my need.</p>
<h3>The book</h3>
<p>The content is well organized, with chapters (and sections) that support both leisurely browsing and focused navigation: At Work, At Leisure, Creative Corner, At Play, At Home, Out and About, For Your Health.</p>
<p>The reviews typically provide an app&#8217;s icon (great for quick visual reference), price, reviewed version (important in the fast-moving world of the App Store), publisher, overview, well-organized comments and usage tips, and screen shots for key points.</p>
<p>The rankings Meyers gives were highly consistent with my experience on key apps I regularly use. More important, he is clear about his point of view and why he evaluates as he does&mdash;a crucial feature for this type of reference.  On my first reading, he introduced me to new and useful possibilities. I will be keeping this book within easy access for ongoing use.</p>
<p>Finally, I must confess a slightly wistful thought that turned out to be premature. I still remember the early days of the World Wide Web, when a variety of printed &#8220;yellow-pages to the Web&#8221; books appeared. Most of them had a fairly short shelf-life, as the explosive growth of the web left them quickly out of date. I immediately wondered whether this book would have such a future. But&#8230;</p>
<h3>Horseless carriage?</h3>
<p>In its early days, the automobile was often referred to as a &#8220;horseless carriage&#8221;; most people only thought of it in terms of what they already knew, and hadn&#8217;t realized the implications of that new technology. (How many people&mdash;and companies&mdash;are still trying to think of the web <i>as</i> a magazine, newspaper, radio, television, mailbox, etc. minus some physical attribute, not recognizing it as a new thing that is <i>all and none</i> of the previous media?)</p>
<p>That&#8217;s why I regard Meyers&#8217; preface as one of the most enduring parts of this book.</p>
<p>He gets it.</p>
<p>Meyers explicitly focuses on what makes the iPad a new thing, not just a mobile phone or netbook, and uses that understanding to guide his selection and evaluation of apps that are important, note-worthy, or simply enjoyable to use. And <i>that</i> makes this book useful not only to a &#8220;discriminating downloader&#8221; like me, it makes it a great reference to an aspiring app developer who needs to understand what makes iPad apps different, and to any technophile (iPad owner or not) who wants to understand better the potential of this new thing.</p>
<br />Filed under: <a href='http://joelneely.wordpress.com/category/book-review/'>Book review</a>, <a href='http://joelneely.wordpress.com/category/ipad/'>iPad</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/174/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=174&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2010/12/23/review-of-best-ipad-apps-the-guide-for-discriminating-downloaders-by-peter-meyers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>
	</item>
		<item>
		<title>Fear and Testing</title>
		<link>http://joelneely.wordpress.com/2010/12/02/fear-and-testing/</link>
		<comments>http://joelneely.wordpress.com/2010/12/02/fear-and-testing/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 13:44:41 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[agile development]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/?p=160</guid>
		<description><![CDATA[I&#8217;m encouraged and excited by what I see coming from user-led conferences. I&#8217;ve had great first-hand experiences at the Java Posse Roundup (rumor is February 21-25 this coming year), No Fluff Just Stuff, and StrangeLoop (2010); and I&#8217;ve really benefitted from materials published on-line by other conferences, such as Devoxx and—a recent discovery—JRubyConf. I was [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=160&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m encouraged and excited by what I see coming from user-led conferences. I&#8217;ve had great first-hand experiences at the <a href="http://javaposse.com/">Java Posse</a> <a href="http://www.mindviewinc.com/Conferences/JavaPosseRoundup/">Roundup</a> (rumor is February 21-25 this coming year), <a href="http://www.nofluffjuststuff.com/home/main">No Fluff Just Stuff</a>, and <a href="http://strangeloop2010.com/">StrangeLoop (2010)</a>; and I&#8217;ve really benefitted from materials published on-line by other conferences, such as <a href="http://www.devoxx.com/display/Devoxx2K10/Home">Devoxx</a> and—a recent discovery—<a href="http://jrubyconf.com/">JRubyConf</a>.</p>
<p>I was particularly impressed and inspired by <a href="http://vimeo.com/16517560">Must. Try. Harder.</a> (also linked from <a href="http://jrubyconf.com/schedule">here</a> and <a href="http://vimeo.com/engineyard/videos">here</a>), a presentation by <a href="http://www.keavy.co.uk/">Keavy McMinn</a>, who described her experiences training for <a href="http://ironman.com/">Ironman</a>. Part of Keavy&#8217;s <a href="http://www.keavy.co.uk/2010/11/ironman-cozumel-part-1/">first blog post on Ironman Cuzumel</a> resonated strongly with something I once saw in some code, hence this article.</p>
<p>By way of background (with vagueness required by confidentiality considerations), I remembered looking at test code wrapped around a fairly subtle bit of business logic that had passed through multiple hands. I believed that I understood the intentions of the original designer, and wanted to confirm or correct that belief. All of which sounds like a perfect fit for test cases, right?</p>
<p><em>Hmmmmm.</em></p>
<p>The majority of the test cases dealt with various ways that something could go wrong in configuring the targeted business component. Additional tests dealt with incorrect inputs to a correctly-configured instance, and only a small fraction actually dealt with the behavior of a correctly-configured instance. In fact, there were no tests that answered the particular questions that I had in mind.</p>
<p>How can this be? (And what does this have to do with Keavy&#8217;s Ironman experience?)</p>
<p>About half-way down in her Ironman Cozumel blog entry, there&#8217;s a section entitled &#8220;Fear&#8221;. I thought about quoting a key sentence or two, but didn&#8217;t want to interfere with her well-crafted flow. So just take a minute and read <a href="http://www.keavy.co.uk/2010/11/ironman-cozumel-part-1/">it</a> (at least—for now—the section under her &#8220;Fear&#8221; heading, between the two photos).</p>
<p>(Wow! You read quickly! <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )</p>
<p>So, as I looked at the test cases, a pattern began to emerge. The largest portion of the tests seemed to orbit around a particular aspect of the configuration that I took for granted, giving that configuration concept far more than its share of attention, IMHO. Which got me to thinking about similar patterns in other test cases. Which prepared me to have an &#8220;&lt;em.Aha!&lt;/em.&#8221; moment when I encountered Keavy&#8217;s description of fear of the ocean.</p>
<h2>Fear</h2>
<p>Unbalanced tests that over-emphasize some issues and under-emphasize others may be a subtle hint that fear is influencing the work. I&#8217;ve observed two common responses to fear in myself and others: obsession and avoidance. On reflection, I believe that those attitudes show up in tests that I&#8217;ve looked at over the years.</p>
<p><img src="http://joelneely.files.wordpress.com/2010/12/120px-cyanoacrylate_structure.png?w=120&#038;h=86" border="0" alt="120px-Cyanoacrylate_structure.png" hspace="8" width="120" height="86" align="right" /></p>
<h4>Obsession</h4>
<p>We may joke about it, but I&#8217;ll admit to going back a few times to make sure the coffee pot is off, jiggling the knob one more time to verify that I really did lock the door, or repeatedly checking my pocket to reassure myself that my airline tickets didn&#8217;t jump out and hide under the couch. (OK, forget the &#8220;hide under the couch&#8221; part.)</p>
<p>In this light, I see the set of test cases mentioned above as being <a href="http://en.wikipedia.org/wiki/Obsessive%E2%80%93compulsive_disorder">obsessed</a> with a particular configuration issue. Those tests were me, patting my pocket again, trying the door again, pushing the switch again (even though I can clearly see that the light is &lt;em.not&lt;/em. glowing&#8230;) If I find that my tests appear to be obsessing over a particular aspect of the task at hand, that might be a symptom of fear—a need for comfort and reassurance in the face of of an unfamiliar domain concept, a language feature or API with which I&#8217;m uncomfortable, or a requirement that I don&#8217;t really understand. Or of moving onto the next use case, which brings me to&#8230;</p>
<p><img src="http://joelneely.files.wordpress.com/2010/12/sinksleap.jpg?w=108&#038;h=235" border="0" alt="SinksLeap.jpg" hspace="8" width="108" height="235" align="left" /></p>
<h4>Avoidance</h4>
<p>Inadequate attention to testing an aspect of the design may indicate a reluctance to engage fully with the issue. In that connection, Keavy&#8217;s description of initial hesitation at the water&#8217;s edge brought back a vivid memory for me.</p>
<p>My family loves camping in the <a href="http://www.nps.gov/grsm/index.htm">Great Smoky Mountains National Park</a>. A popular spot along the Little River Road called &#8220;The Sinks&#8221; features a waterfall almost directly under a bridge, followed by a long, deep swimming hole with steep rocky banks on both sides. Visitors can climb to a ledge  which offers a clear jump into a deep part of the pool. Although that ledge is only about 12 feet above the water level, it looks much higher to a first-time jumper. I don&#8217;t laugh at young (or not-so-young) first-timers who hesitate on that ledge, because I still remember my first leap.</p>
<p>Even though my head knew it must be safe—I had seen many people take the plunge before me that day—my stomach and legs hadn&#8217;t yet gotten the message. I &#8220;paused&#8221; for several long moments before stepping into the air.</p>
<blockquote><p>(I&#8217;m not talking about truly high-risk activity here, I should point out. A friend of mine has a truly terrifying story about jumping from height into unfamiliar—and unsafe—water and impaling his foot. So let&#8217;s keep it in the pool and well-known swimming holes, kids. And don&#8217;t forget your buddy.)</p></blockquote>
<p>Of course, we developers &lt;em.never&lt;/em. procrastinate in the face of a fear-inspiring task! Then again, there&#8217;s that bit of legacy code that nobody wants to maintain, much less rewrite. And the lingering suspicion that &#8220;starting with the low-hanging fruit&#8221; can turn into an excuse to put off the parts we&#8217;re secretly fearing.</p>
<p>So, how do I fight back, when an imbalance in my tests shows evidence of fear, either positively (obsession) or negatively (avoidance)?</p>
<h2>Suggested antidotes&#8230;</h2>
<p>First, I should consider whether the test really are over- or under-emphasizing something. Different aspects of the code have different levels of risk and/or consequences, so I don&#8217;t expect absolutely even distribution of attention. If there is a true imbalance—even better, if I&#8217;m about to create one—I need to recognize that and apply an appropriate antidote.</p>
<h4>&#8230;to obsession</h4>
<p>When I start bogging down, these questions can be useful:</p>
<dl>
<dt><em>Is this test about the product or about me?</em></dt>
<dd>Let me tip my hat to <a href="http://rubykoans.com/">Ruby Koans</a>, which gives beautiful evidence of the power of testing as a way to explore a language or framework. If a test can confirm (or correct) my understanding of something I&#8217;m using in this project, I certainly should write it! But I&#8217;m equally certain that I should keep it outside my project&#8217;s code base.</dd>
<dt><em>What does/will this test teach me?</em></dt>
<dd>If it conveys useful new information, or affects the code in a material way, fine. But if it&#8217;s just a trivial <a href="http://en.wikipedia.org/wiki/Variation_%28music%29">variation on a theme</a>, perhaps I should move on. If I&#8217;m wrong, I can always come back and add a test later.</dd>
<dt><em>How likely is this?</em></dt>
<dd>If this test is exercising a scenario that would <a href="http://www.catb.org/jargon/html/N/nasal-demons.html">almost certainly never occur</a> in normal use, maybe I should take care of the more-likely cases first.</dd>
<dt><em>How bad can it be?</em> </dt>
<dt> </dt>
<dd>Do I really need this last little bit of <a href="http://sethgodin.typepad.com/seths_blog/2005/03/dont_shave_that.html">yak hair</a>?</dd>
</dl>
<h4>&#8230;to avoidance</h4>
<p>Keavy wrote about overcoming by focusing on technique, process, and details under our control. My high-school marching band director kept taking us back to the basics, with scales on our instruments and eight-to-five marching drills until our feet could hit the chalk line precisely, with no last-minute stretches or stutters. In fact, without even looking. For this side of my fears, here are some questions&#8230;</p>
<dl>
<dt><em>What do I not know?</em></dt>
<dd>If I can express it as a test, I can get moving.</dd>
<dt><em>How would I explain this to ___?</em></dt>
<dd>I have gotten past mental blocks by explaining my impasse to a friendly non-programmer. Being clear and non-technical often has amazing benefits! <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Fill in the blank with a name of your choice. Sometimes only imagining the conversation is enough. It also helps to imagine it out loud (but not where I could frighten or distract my colleagues!)</dd>
<dt><em>Am I trying to swallow an elephant?</em></dt>
<dd>The last time I got stalled out, I let circumstances outside the task at hand stampede me. I blurted out a train of thought into code and quickly ended up, as I once heard someone say, &#8220;<em>crocheting in logic space</em>&#8220;. Admitting that fact to myself allowed me to back out of my self-imposed impasse.</dd>
</dl>
<p>&#8230;and a couple of challenges:</p>
<dl>
<dt><em>Don&#8217;t just sit there, DO SOMETHING!</em></dt>
<dd>Sometimes even a stumbling start is better than stalling, because it gets me moving. As with explaining my problem to a non-programmer, thinking out loud in code may help me get a better perspective (even if I end up throwing away that first bit).</dd>
<dt><em>Don&#8217;t just do something, SIT THERE!</em></dt>
<dd>In my best ersatz-mystico-philosophical style, sometimes I need to do just the opposite. Stop fidgeting and pacing back and forth. Sit down. Close my eyes. Be still. Take a breath. Think a moment. In that jam there&#8217;s probably one log that I can shift a little, and it&#8217;s probably not the one I&#8217;ve been tugging on unsuccessfully for way too long. Now open my eyes. Look around <em><strong>not</strong></em> in the same place. Oh. Duh. There it is.&nbsp;</p>
<p>Let me get back to you. I&#8217;ve got a test to write.</p>
</dd>
</dl>
<h2>The value of persistence</h2>
<p>After beginning this post, I learned that <a href="http://www.keavy.co.uk/2010/12/ironman-cozumel-part-2/">Keavy finished in Cozumel</a>! Congratulations!</p>
<hr />
<dl>
<dt>Code koans:</dt>
<dd>
<ul>
<li>in <a href="https://github.com/liammclennan/JavaScript-Koans">Java-Script</a>;</li>
<li>in <a href="https://github.com/rubbish/scala-koans">Scala</a>;</li>
<li>I heard from <a href="http://www.srtsolutions.com/author/diannemarsh">Dianne Marsh</a> that <a href="http://www.codemash.org/">CodeMash</a> featured work on koans last year; they may do so again this year.</li>
</ul>
</dd>
</dl>
<p>I&#8217;m sure there are many more; please let me know.</p>
<hr />
<br />Filed under: <a href='http://joelneely.wordpress.com/category/agile-development/'>agile development</a>, <a href='http://joelneely.wordpress.com/category/productivity/'>Productivity</a>, <a href='http://joelneely.wordpress.com/category/testing/'>testing</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/160/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=160&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2010/12/02/fear-and-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2010/12/120px-cyanoacrylate_structure.png" medium="image">
			<media:title type="html">120px-Cyanoacrylate_structure.png</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2010/12/sinksleap.jpg" medium="image">
			<media:title type="html">SinksLeap.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Book Review: R in a Nutshell</title>
		<link>http://joelneely.wordpress.com/2010/07/16/book-review-r-in-a-nutshell/</link>
		<comments>http://joelneely.wordpress.com/2010/07/16/book-review-r-in-a-nutshell/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 06:27:28 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[Book review]]></category>
		<category><![CDATA[R Language]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/?p=157</guid>
		<description><![CDATA[R is a statistical computing environment that is fully-compliant with state-of-the-art buzzwords: free, open-source, cross-platform, interactive, graphics, objects, closures, higher-order functions, and more. It is supported by an impressive collection of user-supplied modules through CRAN, the &#8220;Comprehensive R Archive Network&#8221;. (Sound familiar?) And now it has its own O&#8217;Reilly Nutshell book, R in a Nutshell, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=157&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>R is a statistical computing environment that is fully-compliant with state-of-the-art buzzwords: free, open-source, cross-platform, interactive, graphics, objects, closures, higher-order functions, and more. It is supported by an impressive collection of user-supplied modules through CRAN, the &#8220;<strong>C</strong>omprehensive <strong>R</strong> <strong>A</strong>rchive <strong>N</strong>etwork&#8221;. (Sound familiar?)</p>
<p>And now it has its own O&#8217;Reilly Nutshell book, <em>R in a Nutshell</em>, written by Joseph Adler. I am pleased to report that Adler has risen to the challenge of the highly-regarded &#8220;Nutshell&#8221; franchise. As is traditional for the series, this title mixes introduction, tutorial, and reference material in a style that is well suited to a reader who already has a background in programming, but is a new or occasional user of R.</p>
<p>The book&#8217;s flow was very effective for addressing the different points of view from which I approached it.</p>
<p><b>As a curious newcomer to R who wanted to get going quickly</b>, I was well-served by Part 1, which provided an R kickstart. Chapter 1 covers the process of getting and installing R. It is short, to the point, and just works, addressing Windows, Mac OS X, and Linux/Unix with equal attention. Chapter 2, on the R user interface, introduces the range of options for interacting with R: the GUI (both the standard version and some enhanced alternatives), the interactive console, batch mode, and the RExcel package (which supports R inside a certain well-known spreadsheet). Chapter 3 uses a set of interactive examples to provide a quick tour of the R language and environment, establishing a task-oriented theme that carries through the rest of the book. The last chapter of part 1 covers R packages. It summarizes the standard pre-loaded packages, introduces the tools to explore repositories and install additional package, and concludes by explaining how to create new packages.</p>
<p><b>As a polyglot programmer who is always interested in seeing how a new language approaches programs and their construction</b>, I enjoyed Part 2, which described the R language. This section begins with an overview in chapter 5, and then devotes a chapter each to R syntax, R objects, symbols and environments (central to understanding the dynamic nature of R), functions (including higher-order functions), and R&#8217;s own approach to object-oriented programming. This section closes in chapter 11, with a discussion of techniques and tips for improving performance.</p>
<p><b>As a busy professional with data sitting on my hard drive that I&#8217;d like to understand better</b>, I appreciated Part 3, with its practical emphasis on using R to load, transform, and visualize data. Chapter 12 presented alternatives for loading, editing, and saving data, from the built-in data editor, through file I/O in a variety of formats, to a mature set of database access options. Chapter 13 illustrated a range of techniques for manipulating, organizing, cleaning, and sorting data, in preparation for presentation or more detailed analysis. Chapter 14 introduces the reader to the wealth of graphical presentation options built into the R environment. There are so many charting types and details that this chapter could have been overwhelming, but Adler keeps the interest high and the mood light by drawing on an engaging variety of data: toxic chemical levels, baseball statistics, the topography of Yosemite Valley, demographic data, and even turkey prices. Chapter 15 is devoted to lattice graphics, the R implementation of the &#8220;trellis graphics&#8221; technique for data visualization developed at Bell Labs. This chapter illustrates the power of lattice graphics by exploring the question of why more babies are born on weekdays than weekends.</p>
<p><b>As a non-statistician who still occasionally needs to do some number-crunching</b>, I&#8217;m sure I&#8217;ll be returning to Part 4, with its detailed explanations and illustrations of analysis tools and techniques&ndash;almost two-hundred pages worth. In chapters 16 through 20, Adler surveys topics in data analysis, probability, statistics, power tests, and regression modeling. As someone who has been offered too many medications and lost fortunes, I found much to enjoy in chapter 21, which used a variety of spam-detection techniques to illustrate the concepts of classification. Chapter 22, on machine learning, discusses several of the data mining techniques that R supports. Chapter 23 covers time series analysis, which may be used to identify trends or periodic patterns in data. Finally, chapter 24 offers an overview of Bioconductor, an open-source project focused on genomic data.</p>
<p>The book closes with a detailed reference to the standard R packages.</p>
<p>This is an impressive piece of work. In a volume of this size (about 650 pages), navigation is crucial, and I found both the organization of the chapters and index up to the task. I was able to follow the instructions and examples through the first several chapters of the book essentially without a hitch, and in the latter chapters the variety of illustrations and data sources added interest to what could have been very dull going.</p>
<p>I won&#8217;t claim perfection for this book. There were a couple of explanations that could have been clearer, and one or two odd turns of phrase or rough edits. Out of all the code examples that I tried, I found exactly one that didn&#8217;t seem to work without a minor correction. For a work of this size, that&#8217;s actually pretty amazing!</p>
<p>As a long-time O&#8217;Reilly reader, I see Joseph Adler&#8217;s <em>R in a Nutshell</em> as a welcome addition to the menagerie.</p>
<br />Filed under: <a href='http://joelneely.wordpress.com/category/book-review/'>Book review</a>, <a href='http://joelneely.wordpress.com/category/r-language/'>R Language</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/157/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=157&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2010/07/16/book-review-r-in-a-nutshell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>
	</item>
		<item>
		<title>Artist, graph thyself!</title>
		<link>http://joelneely.wordpress.com/2010/06/10/artist-graph-thyself/</link>
		<comments>http://joelneely.wordpress.com/2010/06/10/artist-graph-thyself/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 13:18:49 +0000</pubDate>
		<dc:creator>joelneely</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joelneely.wordpress.com/?p=154</guid>
		<description><![CDATA[Visual representations of graph structures have been important to programming from the beginning of the craft &#8211; earlier than that, if you count circuit diagrams. Most practicing programmers of my acquaintance have struggled with visual complexity as the size or amount of detail of such a diagram increases. So I was interested in an article [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=154&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Visual representations of graph structures have been important to programming from the beginning of the craft &ndash; earlier than that, if you count circuit diagrams. Most practicing programmers of my acquaintance have struggled with visual complexity as the size or amount of detail of such a diagram increases. So I was interested in an article titled <a href="http://infosthetics.com/archives/2010/06/what_is_the_best_arrow_representation_in_visualizations.html">&#8220;What is the Best Way to Represent Directionality in Network Visualizations?&#8221;</a> that summarized research done at <a href="http://w3.tue.nl/en/">Eindhoven University of Technology</a>.</p>
<p>The researchers compared a variety of techniques for representing directionality of arcs: standard arrows, gradients (light-to-dark, dark-to-light, and green-to-red, and curved and tapered connections. Subjects were shown graphs rendered using different techniques, and asked questions about connections between nodes, with speed and accuracy being analyzed.</p>
<p>According to the summary:</p>
<ul>
<li>one should avoid standard arrows and curves,</li>
<li>tapered arcs (from wide to narrow) produced the best results,</li>
<li>dark-to-light value gradients were better than light-to-dark (no surprise there, as this is consistent with the &#8220;more intense to less intense&#8221; result of the tapering), and</li>
<li>there appears to be no advantage to combining techniques (I confess a bit of surprise over that conclusion).</li>
</ul>
<p>But most fascinating to me is the fact that when presenting the results visually, the paper and article both violated the very conclusions just reached! Superior performance among techniques was presented using a directed graph using curved arcs with standard arrowheads! (See <a href="http://infosthetics.com/archives/directed_edges2.jpg">the diagram here</a>, or in the article and linked paper.)</p>
<p>It was but a few moments&#8217; work in <a href="http://www.omnigroup.com/products/omnigraffle/">OmniGraffle</a> to recreate that diagram using the recommended technique (tapered arcs). In addition, I rearranged the nodes to reduce the arc crossings, while keeping the preference flow downward from higher to lower. Here&#8217;s the result:</p>
<div style="text-align:center;"><img src="http://joelneely.files.wordpress.com/2010/06/directionality.jpg?w=328&#038;h=166" alt="directionality.jpg" border="0" width="328" height="166" /></div>
<p>I&#8217;m amazed that the researchers and author(s) of the summary ignored the result when presenting the result! Does this tell us something about the force of habit, or perhaps the limitations of existing tools, or something else entirely? I wonder.</p>
<br />Filed under: <a href='http://joelneely.wordpress.com/category/uncategorized/'>Uncategorized</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joelneely.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joelneely.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joelneely.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joelneely.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joelneely.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joelneely.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joelneely.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joelneely.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joelneely.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joelneely.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joelneely.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joelneely.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joelneely.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joelneely.wordpress.com/154/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joelneely.wordpress.com&amp;blog=2876257&amp;post=154&amp;subd=joelneely&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joelneely.wordpress.com/2010/06/10/artist-graph-thyself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c3ae6a1b8d708b79b6b85ecc365266a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joelneely</media:title>
		</media:content>

		<media:content url="http://joelneely.files.wordpress.com/2010/06/directionality.jpg" medium="image">
			<media:title type="html">directionality.jpg</media:title>
		</media:content>
	</item>
	</channel>
</rss>
