<?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>Codesmell</title>
	<atom:link href="http://codesmell.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://codesmell.wordpress.com</link>
	<description>another useless blog, virtually noone is going to read....</description>
	<lastBuildDate>Sun, 09 Jan 2011 15:20:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='codesmell.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Codesmell</title>
		<link>http://codesmell.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://codesmell.wordpress.com/osd.xml" title="Codesmell" />
	<atom:link rel='hub' href='http://codesmell.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Big thank you to naginatachris</title>
		<link>http://codesmell.wordpress.com/2011/01/04/big-thank-you-to-naginatachris/</link>
		<comments>http://codesmell.wordpress.com/2011/01/04/big-thank-you-to-naginatachris/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 22:18:46 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://codesmell.wordpress.com/?p=3574</guid>
		<description><![CDATA[for handing this previously unused blog at wordpress.com over to me.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3574&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>for handing this previously unused blog at wordpress.com over to me.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3574/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3574&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2011/01/04/big-thank-you-to-naginatachris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Offline for a few days&#8230;.</title>
		<link>http://codesmell.wordpress.com/2010/09/14/offline-for-a-few-days/</link>
		<comments>http://codesmell.wordpress.com/2010/09/14/offline-for-a-few-days/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 09:22:08 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3298</guid>
		<description><![CDATA[&#8230; or as Arnie says: &#8220;i´ll be back!&#8221;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3298&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&#8230; or as Arnie says: &#8220;i´ll be back!&#8221;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3298/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3298&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/09/14/offline-for-a-few-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>The Context is important&#8230;</title>
		<link>http://codesmell.wordpress.com/2010/08/07/the-context-is-important/</link>
		<comments>http://codesmell.wordpress.com/2010/08/07/the-context-is-important/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 18:56:05 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3294</guid>
		<description><![CDATA[even &#8220;Chicken-Soup&#8221; can be funny.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3294&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>even &#8220;Chicken-Soup&#8221; can be funny.<br />
<a href="http://codesmell.files.wordpress.com/2010/08/03-11-06_1816.jpg"><img src="http://codesmell.files.wordpress.com/2010/08/03-11-06_1816.jpg?w=300&#038;h=225" alt="" title="03-11-06_1816" width="300" height="225" class="aligncenter size-medium wp-image-3295" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3294/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3294&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/08/07/the-context-is-important/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>

		<media:content url="http://codesmell.files.wordpress.com/2010/08/03-11-06_1816.jpg?w=300" medium="image">
			<media:title type="html">03-11-06_1816</media:title>
		</media:content>
	</item>
		<item>
		<title>Very nice rant about functional languages</title>
		<link>http://codesmell.wordpress.com/2010/06/30/very-nice-rant-about-functional-languages/</link>
		<comments>http://codesmell.wordpress.com/2010/06/30/very-nice-rant-about-functional-languages/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 07:14:23 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3290</guid>
		<description><![CDATA[[About cuncurrency:] My problem with the functional programming cure to this problem is that I haven&#8217;t seen a cure yet that&#8217;s better than the problem. Maybe it&#8217;s me. Maybe my tiny Ben brain just can&#8217;t comprehend the magic and majesty of OCaml, but every time I&#8217;ve tried to learn a new functional language, it&#8217;s ended [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3290&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<blockquote><p>[About cuncurrency:] My problem with the functional programming cure to this problem is that I haven&#8217;t seen a cure yet that&#8217;s better than the problem. Maybe it&#8217;s me. Maybe my tiny Ben brain just can&#8217;t comprehend the magic and majesty of OCaml, but every time I&#8217;ve tried to learn a new functional language, it&#8217;s ended it disaster. First with Erlang, and then Haskell, I&#8217;ve now had two aborted attempts to understand the supposed cure to the concurrency problem. The languages are just too complex, too terse, and absolutely <strong>full of academic shitheaddery</strong>. I mean, <a href="http://www.haskell.org/onlinereport/exps.html#sect3.17.3">seriously</a>, what the <a href="http://caml.inria.fr/pub/docs/manual-ocaml/manual003.html#toc7">hell</a>.</p></blockquote>
<p>that really made my morning <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://www.benrady.com/2010/06/a-bit-of-heresy-functional-languages-are-overrated.html">http://www.benrady.com/2010/06/a-bit-of-heresy-functional-languages-are-overrated.html</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3290/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3290&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/06/30/very-nice-rant-about-functional-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>On the road again&#8230;</title>
		<link>http://codesmell.wordpress.com/2010/06/06/on-the-road-again/</link>
		<comments>http://codesmell.wordpress.com/2010/06/06/on-the-road-again/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 21:58:16 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3286</guid>
		<description><![CDATA[Sorry to say so, but this blog is moving again. The reason is simple, I sometime would like to post in French but this would rather spoil codesmell (which is in English at 99% with a rather strong German audience). As such, I&#8217;m now sitting on joseph on IT (sorry for the name, but I&#8217;m [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3286&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sorry to say so, but this blog is moving again.</p>
<p>The reason is simple, I sometime would like to post in French but this would rather spoil codesmell (which is in English at 99% with a rather strong German audience).</p>
<p>As such, I&#8217;m now sitting on <a href="http://josephonit.wordpress.com/">joseph on IT</a> (sorry for the name, but I&#8217;m really bad at such kind of naming).</p>
<p>thanks a lot to all of you and esp. to uwe for his warm welcome and constant care.</p>
<p>luckily, the web is a cosy place, we won&#8217;t loose touch too much <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>++<br />
joseph</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3286/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3286&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/06/06/on-the-road-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>jQuery is so much better&#8230;</title>
		<link>http://codesmell.wordpress.com/2010/05/15/jquery-is-so-much-better/</link>
		<comments>http://codesmell.wordpress.com/2010/05/15/jquery-is-so-much-better/#comments</comments>
		<pubDate>Sat, 15 May 2010 08:33:43 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3276</guid>
		<description><![CDATA[&#8230; with a proper editor and code-completion. If you´re into eclipse and do occasional javascript and maybe jquery or &#60;put your fav javascript lib here&#62;, you should definitly have a look at Aptana Studio. Note, that &#8211; if you really wanted &#8211; you can also get it as a standalone editor.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3276&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&#8230; with a proper editor and code-completion.</p>
<p><a href="http://codesmell.files.wordpress.com/2010/05/aptana_jq21.png"><img src="http://codesmell.files.wordpress.com/2010/05/aptana_jq21.png?w=300&#038;h=68" alt="aptana_jq" title="aptana_jq" width="300" height="68" class="aligncenter size-medium wp-image-3281" /></a></p>
<p>If you´re into eclipse and do occasional javascript and maybe jquery or &lt;put your fav javascript lib here&gt;, you should definitly have a look at <a href="http://www.aptana.org/">Aptana Studio</a>. Note, that &#8211; if you really wanted &#8211; you can also get it as a standalone editor.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3276/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3276&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/05/15/jquery-is-so-much-better/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>

		<media:content url="http://codesmell.files.wordpress.com/2010/05/aptana_jq21.png?w=300" medium="image">
			<media:title type="html">aptana_jq</media:title>
		</media:content>
	</item>
		<item>
		<title>Joel on Mercurial</title>
		<link>http://codesmell.wordpress.com/2010/05/15/joel-on-mercurial/</link>
		<comments>http://codesmell.wordpress.com/2010/05/15/joel-on-mercurial/#comments</comments>
		<pubDate>Sat, 15 May 2010 08:23:53 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3269</guid>
		<description><![CDATA[a very nice introduction into mercurial can be found here. It nicely goes from bashing subversion The story is this: at some point, they tried to branch their code, usually so that the shipping version which they gave their customers can be branched off separately from the version that the developers are playing with. And [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3269&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>a very nice introduction into mercurial can be found <a href="http://hginit.com/">here</a>. It nicely goes from bashing subversion</p>
<blockquote><p>The story is this: at some point, they tried to branch their code, usually so that the shipping version which they gave their customers can be branched off separately from the version that the developers are playing with. And every team has told me that when they tried this, it worked fine, until they had to merge, and then it was a nightmare. What should have been a five minute process ended up with six programmers around a single computer working for two weeks trying to manually reapply every single bug fix from the stable build back into the development build.</p>
<p>And almost every Subversion team told me that they vowed “never again,” and they swore off branches. And now what they do is this: each new feature is in a big #ifdef block. So they can work in one single trunk, while customers never see the new code until it’s debugged, and frankly, that’s ridiculous.</p></blockquote>
<p>to explaining the simple commands, and further to conceptual perspectives like repository distribution.</p>
<p><a href="http://codesmell.files.wordpress.com/2010/05/05-complex21.png"><img src="http://codesmell.files.wordpress.com/2010/05/05-complex21.png?w=624&#038;h=343" alt="" title="" width="624" height="343" class="aligncenter size-full wp-image-3273" /></a></p>
<p>a nice read.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3269/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3269&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/05/15/joel-on-mercurial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>

		<media:content url="http://codesmell.files.wordpress.com/2010/05/05-complex21.png" medium="image" />
	</item>
		<item>
		<title>Impressive Keynote from re:publica</title>
		<link>http://codesmell.wordpress.com/2010/04/21/impressive-keynote-from-republica/</link>
		<comments>http://codesmell.wordpress.com/2010/04/21/impressive-keynote-from-republica/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 20:55:24 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3266</guid>
		<description><![CDATA[can be found here. Inspiring thoughts of Prof. Dr. Miriam Meckel.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3266&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>can be found <a href="http://www.youtube.com/watch?v=gDP9sJojkyo">here</a>. Inspiring thoughts of Prof. Dr. Miriam Meckel.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3266/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3266&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/04/21/impressive-keynote-from-republica/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>nice IE6 bashing</title>
		<link>http://codesmell.wordpress.com/2010/03/02/nice-ie6-bashing/</link>
		<comments>http://codesmell.wordpress.com/2010/03/02/nice-ie6-bashing/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 13:56:15 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[ie6]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3252</guid>
		<description><![CDATA[<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3252&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://farm5.static.flickr.com/4007/4365152223_a026981156_b.jpg"><br />
<img alt="" src="http://farm5.static.flickr.com/4007/4365152223_a026981156_b.jpg" title="IE6 bashing" class="alignnone" width="512" height="260" /><br />
</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3252/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3252&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/03/02/nice-ie6-bashing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>

		<media:content url="http://farm5.static.flickr.com/4007/4365152223_a026981156_b.jpg" medium="image">
			<media:title type="html">IE6 bashing</media:title>
		</media:content>
	</item>
		<item>
		<title>Must read : The unspoken truth about managing geeks</title>
		<link>http://codesmell.wordpress.com/2010/02/19/must-read-the-unspoken-truth-about-managing-geeks/</link>
		<comments>http://codesmell.wordpress.com/2010/02/19/must-read-the-unspoken-truth-about-managing-geeks/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 12:24:35 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[excellent]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3249</guid>
		<description><![CDATA[Thanks to Nathan on coderspiel, I stumbled upon this excellent article : Opinion: The unspoken truth about managing geeks. So true ! ++<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3249&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Thanks to Nathan on <a href="http://technically.us/code">coderspiel</a>, I stumbled upon this excellent article : <a href="http://www.computerworld.com/s/article/9137708/Opinion_The_unspoken_truth_about_managing_geeks?taxonomyId=14&amp;pageNumber=1">Opinion: The unspoken truth about managing geeks</a>.</p>
<p>So true !</p>
<p>++</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3249/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3249&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/02/19/must-read-the-unspoken-truth-about-managing-geeks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Certification, part 2 ;)</title>
		<link>http://codesmell.wordpress.com/2010/02/11/certification-part-2/</link>
		<comments>http://codesmell.wordpress.com/2010/02/11/certification-part-2/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 23:09:37 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[certification]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3238</guid>
		<description><![CDATA[hi Small post to tell that I&#8217;ve started to look into SCJD, another certification. As such, I fear I will once again post way less (in case anyone cared, which might be quite optimistic, yes I know, thanks ). Anyway, not to do a totally useless entry, let&#8217;s share a few links : a nice [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3238&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>hi</p>
<p>Small post to tell that I&#8217;ve started to look into SCJD, another certification. As such, I fear I will once again post way less (in case anyone cared, which might be quite optimistic, yes I know, thanks <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p>Anyway, not to do a totally useless entry, let&#8217;s share a few links :</p>
<ul>
<li><a href="http://www.mcdonaldland.info/files/designpatterns/designpatternscard.pdf">a nice reference diagrams about design patterns</a>. For once a design patterns reference one can finish before falling asleep ^^</li>
<li><a href="http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg">a nice recap of sql joins </a>(provided, surprise !, by our dear admin)</li>
<li>if ever you (too) stumbled upon Hibernate not escaping tables&#8217; and columns&#8217; names when creating the database, some explanations and work around: <a href="http://biginteger.blogspot.com/2009/08/changing-database-engine-when-using.html">Escaping database column name when using Hibernate</a> </li>
<li>to finish on a lighter note, for clueless foreigners working in Germany, some info about the <a href="http://en.wikipedia.org/wiki/Bielefeld_Conspiracy">Bielefled conspiracy.</a>Hopefully the blog won&#8217;t be taken down !</li>
</ul>
<p>see ya !<br />
++</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3238/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3238&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/02/11/certification-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Book review : SCJP Sun Certified Programmer for Java 6 Study Guide</title>
		<link>http://codesmell.wordpress.com/2010/02/11/book-review-scjp-sun-certified-programmer-for-java-6-study-guide/</link>
		<comments>http://codesmell.wordpress.com/2010/02/11/book-review-scjp-sun-certified-programmer-for-java-6-study-guide/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 22:50:08 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[Interesting]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3234</guid>
		<description><![CDATA[In order to get ready for the SCJP 6 exam, I&#8217;ve read SCJP Sun Certified Programmer for Java 6 Study Guide, from Katherine Sierra and Bert Bates, aka some of the certification&#8217;s exam creators. The authors make clear at the beginning that the book is about, and only about, being ready for the SCJP exam. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3234&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In order to get ready for the SCJP 6 exam, I&#8217;ve read <a href="http://www.javabooks.org/pub/793/SCJP-Sun-Certified-Programmer-for-Java-6-Study-Guide">SCJP Sun Certified Programmer for Java 6 Study Guide</a>, from Katherine Sierra and Bert Bates, aka some of the certification&#8217;s exam creators.</p>
<p>The authors make clear at the beginning that the book is about, and only about, being ready for the SCJP exam. No more, no less. And they keep to their words : the book is strictly focused on the exam.</p>
<p>The bad consequence is that sometime (often) I was eager to know more, to go further the &#8220;there&#8217;s plenty more to tell, but that&#8217;s enough for the exam, so we stop here&#8221;. Furthermore, as you can imagine, this isn&#8217;t the most fancy book I&#8217;ve ever read. Katherine and Bert do attempt a few times to instil some fun, but it didn&#8217;t fall quite right.</p>
<p>The very good side is that the book teaches all you need to know, no more, no less. I would even go a bit further : if the authors say &#8220;methods X and Y are also part of the exam&#8221;, then you should really know exactly what&#8217;s in these methods. I&#8217;m pretty sure I lost some points due to some API I didn&#8217;t know enough. Even better, they say clearly what&#8217;s in the exam and not. No need to worry because some dumb mock exams found on the web put stuff you hadn&#8217;t any clue off. If it wasn&#8217;t in the book, it&#8217;s not on the exam.<br />
Even more important, the writers are very good at explanations. Really, they know out to make things clear. Awesome. I now have a grip on regexp. Really !</p>
<p>To conclude, this book is really one (if not the one &#8211; I haven&#8217;t read the others so it&#8217;s hard to tell) to go for when preparing SCJP 6, no more, no less. At least it was for me!</p>
<p>++</p>
<p>EDIT : did a bit of clean-up</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3234/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3234&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/02/11/book-review-scjp-sun-certified-programmer-for-java-6-study-guide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Wave Panel for Wicket</title>
		<link>http://codesmell.wordpress.com/2010/02/04/wave-panel-for-wicket/</link>
		<comments>http://codesmell.wordpress.com/2010/02/04/wave-panel-for-wicket/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 19:31:40 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[wave]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3232</guid>
		<description><![CDATA[in case someone thought it was a good idea: We&#8217;re delighted to introduce a new wicket component which will allow you to easily integrate Google Waves right into your application. Please meet GoogleWavePanel ! The idea of making this component came from a recent tutorial which aimed at clarifying the use of Google&#8217;s Wave Embed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3232&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>in case someone thought it was a good idea:</p>
<blockquote><p>We&#8217;re delighted to introduce a new wicket component which will allow you to easily integrate Google Waves right into your application. Please meet GoogleWavePanel  !<br />
The idea of making this component came from a recent tutorial which aimed at clarifying the use of Google&#8217;s Wave Embed API.</p></blockquote>
<p><a href="http://blog.zenika.com/index.php?post/2010/02/03/Surf-the-Wave-with-Wicket-and-the-GoogleWavePanel">http://blog.zenika.com/index.php?post/2010/02/03/Surf-the-Wave-with-Wicket-and-the-GoogleWavePanel</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3232/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3232&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/02/04/wave-panel-for-wicket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Book review : Don&#039;t make me think</title>
		<link>http://codesmell.wordpress.com/2010/01/28/book-review-dont-make-me-think/</link>
		<comments>http://codesmell.wordpress.com/2010/01/28/book-review-dont-make-me-think/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 22:53:56 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[excellent]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3227</guid>
		<description><![CDATA[I had already read some books on usability. The last one had about 400 pages and lots of texts. It laid out 10 (or 12) rules regarding usability. I can&#8217;t even remember one ! On the other hand, Steve Krug&#8217;s Don&#8217;t make me think is still deeply in my mind. Not only the author applied [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3227&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I had already read some books on usability. The last one had about 400 pages and lots of texts. It laid out 10 (or 12) rules regarding usability. I can&#8217;t even remember one !</p>
<p>On the other hand, Steve Krug&#8217;s Don&#8217;t make me think is still deeply in my mind. Not only the author applied usability to his book (about 200 pages, very easy to read with drawings right to the point), but, even better, what he wrote is enlightening.</p>
<p>First, Steve Krug introduces the &#8220;guiding principles&#8221;, all evolving around his First Law of Usability : Don&#8217;t make me think. Simply put, the aim is to remove all questions, even unconscious ones, when browsing the web. All these littles inconveniences or inconsistencies which go in the way must disappear. And Steve Krug presents this with way more skills and drawings than I do, making it really impressive and long lasting.</p>
<p>He goes on speaking on the way we use the web (scanning, not reading), than that we should &#8220;Omit <strike>needless</strike> words&#8221;.</p>
<p>These first chapters are still vivid in my mind. They come with very relevant examples that we&#8217;ve all seen before, and thus that we&#8217;ll see again in the future, bringing back the good stuff of this book.</p>
<p>Then, Steve Krug goes on a more general level : why/how to avoid these endless discussions about &#8220;mine design is better than yours&#8221;, how to do &#8220;real size&#8221; usability tests (and not the ones requiring huge resources/teams/testers/rooms/&#8230; as was put in this previous book!) and how to deal with Pointy-Haired Bosses. Less crazy than the first chapters, but really helpful.</p>
<p>Overall, this book really helped me. I now have quite a tool set (and mindset) to deal with usability questions. To put it shortly, I feel now empowered on this topic, quite a change from my previous readings.</p>
<p>To conclude, if usability is remotely some of your concern (and you don&#8217;t know it all already), read this book !</p>
<p>++<br />
joseph</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3227/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3227&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/28/book-review-dont-make-me-think/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Playing with Wicket&#8217;s templates</title>
		<link>http://codesmell.wordpress.com/2010/01/28/playing-with-wickets-templates/</link>
		<comments>http://codesmell.wordpress.com/2010/01/28/playing-with-wickets-templates/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 14:33:20 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3209</guid>
		<description><![CDATA[Wicket comes with some templating facilities. They&#8217;re often handy, especially when integrating JavaScript components. Yet, for some reasons I don&#8217;t get, these functionalities aren&#8217;t much advertised. Anyway, let&#8217;s dig in ! Basically, this templating is about some text containing variables, for example ${variable}, whose values are provided through Java code. Let&#8217;s take a simple example, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3209&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Wicket comes with some templating facilities. They&#8217;re often handy, especially when integrating JavaScript components.</p>
<p>Yet, for some reasons I don&#8217;t get, these functionalities aren&#8217;t much advertised. Anyway, let&#8217;s dig in !</p>
<p>Basically, this templating is about some text containing variables, for example ${variable}, whose values are provided through Java code.</p>
<p>Let&#8217;s take a simple example, a template file named javascript.tpl containing :<br />
<pre class="brush: java;">alert('${variable}');</pre></p>
<p>Wicket is nice enough to provide an easy to access the templates as package resources, through the PackagedTextTemplate class :<br />
<pre class="brush: java;">
public PackagedTextTemplate(final Class clazz, final String fileName)
</pre></p>
<p>For example :<br />
<pre class="brush: java;">PackagedTextTemplate jsTemplate = new PackagedTextTemplate(this.getClass(), &quot;javascript.tpl&quot;);</pre></p>
<p>Thus the template can be next to the .html page and the Java class using it, making the whole quite cohesive.</p>
<p>Providing the variables is done through a simple Map :<br />
<pre class="brush: java;">Map parameters = new HashMap();
parameters.put(&quot;variable&quot;,&quot;test working&quot;);&lt;/code&gt;
</pre><br />
And then, you most probably want to include this template in some html. Wicket provides you different options :</p>
<ul>
<li>as an header contribution :<br />
<pre class="brush: java;">add(TextTemplateHeaderContributor.forJavaScript(jsTemplate, new  Model((Serializable) parameters)));
</pre>
</li>
<li> directly next to some element in the html file:<br />
Java side :<br />
<pre class="brush: java;">
Label myScript = new Label(&quot;myScript&quot;, new JavaScriptTemplate(jsTemplate).asString(parameters));
myScript.setEscapeModelStrings(false);
add(myScript);
</pre></p>
<p>Html side :<br />
<pre class="brush: xml;">&lt;wicket:container wicket:id=&quot;myScript&quot;&gt;&lt;/wicket:container&gt;
</pre>
</li>
</ul>
<p>You may have noticed that, in both cases, I didn&#8217;t provided the surrounding script tag (and the appropriate inner wrapping). Fear not, Wicket does it for you !<br />
Indeed, the rendered html is :<br />
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot;&gt;
alert('test working');
&lt;/script&gt;
</pre></p>
<p>If the template was about some CSS stuff, one would just need to warp it using a CssTemplate instead of the JavaScriptTemplate.</p>
<p>A bit more info are available there <a href="http://cwiki.apache.org/WICKET/including-css-resources.html">Including CSS resources</a>.</p>
<p>++<br />
joseph</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3209/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3209&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/28/playing-with-wickets-templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Primitive Array to Object[]</title>
		<link>http://codesmell.wordpress.com/2010/01/27/primitive-array-to-object/</link>
		<comments>http://codesmell.wordpress.com/2010/01/27/primitive-array-to-object/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 17:24:33 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[reflection]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3205</guid>
		<description><![CDATA[If ever you face the need of &#8216;boxing&#8217; the elements of a primitive array into an array of Objects, this might be handy:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3205&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If ever you face the need of &#8216;boxing&#8217; the elements of a primitive array into an array of Objects, this might be handy:<br />
<pre class="brush: java;">
    public static Object[] convertPrimitiveArray(final Object array)
    {
        final int arrayLength = Array.getLength(array);
        final Object[] result = (Object[]) Array.newInstance(Object.class, arrayLength);
        for (int i = 0; i &amp;lt; arrayLength; i++)
        {
            Array.set(result, i, Array.get(array, i));
        }
        return result;
    }
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3205/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3205&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/27/primitive-array-to-object/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Noteworthy: MS adds Mercurial support to Codeplex</title>
		<link>http://codesmell.wordpress.com/2010/01/24/noteworthy-ms-adds-mercurial-support-to-codeplex/</link>
		<comments>http://codesmell.wordpress.com/2010/01/24/noteworthy-ms-adds-mercurial-support-to-codeplex/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 13:56:30 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3202</guid>
		<description><![CDATA[via http://blogs.msdn.com/codeplex/archive/2010/01/22/codeplex-now-supporting-native-mercurial.aspx<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3202&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>via <a href="http://blogs.msdn.com/codeplex/archive/2010/01/22/codeplex-now-supporting-native-mercurial.aspx">http://blogs.msdn.com/codeplex/archive/2010/01/22/codeplex-now-supporting-native-mercurial.aspx</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3202/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3202&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/24/noteworthy-ms-adds-mercurial-support-to-codeplex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>m2eclipse workspace resolution not working ?</title>
		<link>http://codesmell.wordpress.com/2010/01/19/m2eclipse-workspace-resolution-not-working/</link>
		<comments>http://codesmell.wordpress.com/2010/01/19/m2eclipse-workspace-resolution-not-working/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 22:03:20 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[m2eclipse]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3198</guid>
		<description><![CDATA[We have this &#8220;fix&#8221;: Go to your workspace folder in the folder .metadata/.plugins/org.maven.ide.eclipse, remove all file ending with .container in eclipse, clear all projects hope for the best For us, it has resolved a nasty issue we had : some projects&#8217; dependencies weren&#8217;t resolved locally even if the projects in question were in the workspace. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3198&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We have this &#8220;fix&#8221;:</p>
<ul>
<li>Go to your workspace folder</li>
<li>in the folder .metadata/.plugins/org.maven.ide.eclipse, remove all file ending with .container</li>
<li>in eclipse, clear all projects </li>
<li>hope for the best</li>
</ul>
<p>For us, it has resolved a nasty issue we had : some projects&#8217; dependencies weren&#8217;t resolved locally even if the projects in question were in the workspace.</p>
<p>Hope it helps</p>
<p>++</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3198/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3198&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/19/m2eclipse-workspace-resolution-not-working/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Eclipse Builder plugin</title>
		<link>http://codesmell.wordpress.com/2010/01/17/eclipse-builder-plugin/</link>
		<comments>http://codesmell.wordpress.com/2010/01/17/eclipse-builder-plugin/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 16:34:12 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[builder]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3195</guid>
		<description><![CDATA[in case you use Eclipse and like the builder pattern, try this plugin. Update Site: http://boss.bekk.no/bpep/update<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3195&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>in case you use Eclipse and like the builder pattern, try <a href="http://code.google.com/p/bpep/">this plugin</a>. Update Site: <a href="http://boss.bekk.no/bpep/update">http://boss.bekk.no/bpep/update</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3195/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3195&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/17/eclipse-builder-plugin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Spinner via css while image loading</title>
		<link>http://codesmell.wordpress.com/2010/01/17/spinner-via-css-while-image-loading/</link>
		<comments>http://codesmell.wordpress.com/2010/01/17/spinner-via-css-while-image-loading/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 15:28:34 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3191</guid>
		<description><![CDATA[very simple but neat idea by martijn dashorst: &#60;img src="http://example.com/images/someimage.jpg" style="background-image:url('style/spinner.gif');" /&#62; Assuming the local machine is faster than the external server, the spinner should be visible while the external image loads. Martijn<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3191&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>very simple but neat idea by <a href="http://twitter.com/dashorst">martijn dashorst</a>:</p>
<p><code>&lt;img src="http://example.com/images/someimage.jpg" style="background-image:url('style/spinner.gif');" /&gt;</code></p>
<blockquote><p>
Assuming the local machine is faster than the external server, the<br />
spinner should be visible while the external image loads.</p>
<p>Martijn
</p>
</blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3191&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/17/spinner-via-css-while-image-loading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Book review : Test-Driven Development By Example</title>
		<link>http://codesmell.wordpress.com/2010/01/08/book-review-test-driven-development-by-example/</link>
		<comments>http://codesmell.wordpress.com/2010/01/08/book-review-test-driven-development-by-example/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 23:52:05 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3169</guid>
		<description><![CDATA[hi I&#8217;ve recently read Test-Driven Development By Example, a book from Kent Beck. I&#8217;ve liked the following: description of the TDD cycle : Red &#8211; write a little failing test/Green &#8211; make the test pass quickly, even if it involves dirty tricks or duplication/Refactor &#8211; make the code clean, including hunting for duplicates for example. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3169&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>hi</p>
<p>I&#8217;ve recently read Test-Driven Development By Example, a book from Kent Beck.</p>
<p>I&#8217;ve liked the following:</p>
<ul>
<li>
<p>description of the TDD cycle : Red &#8211; write a little failing test/Green &#8211; make the test pass quickly, even if it involves dirty tricks or duplication/Refactor &#8211; make the code clean, including hunting for duplicates for example.</p>
<p>The emphasis on making the test working quickly first was a bit unexpected to me. Indeed, I tend to try to write &#8220;clean code&#8221; first. It&#8217;s not bad in itself, but it happens sometime that I&#8217;m not confident with the design. Thus, I feel uneasy. Smaller steps, maybe less clean, would probably help: seeing a green bar is always a good feeling. This leads me to the next point.</p>
</li>
<li>
<p>Kent writes that one of the key point of TDD is about reducing stress : being able to do small steps reduces the stress/fear level, hence fewer errors and better feeling. If the target design is unknown or intimidating, use (very) small steps.</p>
<p>As pointed before, I wasn&#8217;t really aware of this, even if I appreciated the final feeling one has after writing proper unit tests. I&#8217;ll try it <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</li>
<li>
<p>The notion of &#8220;emerging/organic&#8221; design is as well spoken of. It&#8217;s the idea that with proper TDD the design will evolve to fit exactly the needs, no more, no less. A kind of perfect match in the end.</p>
<p>I had already heard of it but it was a nice refresher. Still, it doesn&#8217;t fit with our actual practices : we tend to prototype first the design. </p>
<p>But maybe once I should try starting with a very easy and naive implementation and see where it goes. After a few refactorings, it may end at the same design, or may be even better. Still, I fear it would take more time and I&#8217;m unsure about the results. </p>
<p>On the other hand, as told by Kent, if ever the code has to evolve to become more general, this can be done easily, with the tests providing the required safety net. Then, how many code are designed with a way broader scope that they&#8217;ll actually use, leading to verbose and/or a bit inappropriate abstractions ?</p>
<p>Once again, feedback is welcome, and anyway I&#8217;ll test it.</p>
</li>
<li>
<p>TDD helps narrowing and keeping focus. That&#8217;s a big reason for the small steps, one thing at a time, so if something behaves in a unexpected way it&#8217;s easy to spot early.</p>
<p>But Kent pushes it further : when doing TDD and using &#8220;dirty tricks&#8221; to get the green bar, he suggests writing done a list of the stuff left to do. He does so as well for other related ideas popping up. The aim is to keep focus on the current work, coming back later on the todo/improvements noted (which in turn, for sure, can/should be done test first <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). He suggests using a good old paper list, and simply to strike the work done. As such, progress can be seen easily and is quite satisfactory. Furthermore, the overview is always present and one can easily pick the easiest/smallest stuff to do, for example just before leaving. </p>
<p>Said this way, it may sound obvious, but the fact is that we tend to lost focus when doing pair programming. Maybe <a href="http://www.codesmell.org/blog/2009/11/agile-tour-2009-in-strasbourg-whats-the-fuss-about-pomodoro/">Pomodoro</a> could help us, but this way of doing as well. Again, it&#8217;s worth a try !</p>
</li>
</ul>
<p>Still, the book wasn&#8217;t only joy to read. The first 80 pages are a TDD example where Kent Beck uses very small steps. Personally, it really went on my nerves. Furthermore, he complains about some lack of features in Java which have been added since (the book is from 2003). It didn&#8217;t help neither.</p>
<p>He finishes the book with a small chapters on different patterns, like &#8220;red bar&#8221;, &#8220;green bar&#8221; , testing, xUnit, design and refactoring. If you have a bit of practices regarding unit testing and if you have knowledge on patterns and refactoring (personally I&#8217;ve read books like Refactoring and Head First Design Patterns), there is few to learn there. Only the null pattern did interest me and will be the topic of another post. I wish he has spent more time on testing, like which code coverage to aim for (and why), gui unit testing and common pitfalls. </p>
<p>Maybe some answers lie in the <a href="http://www.amazon.com/Testing-Object-Oriented-Systems-Models-Patterns/dp/0321700678/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1262993219&amp;sr=8-1">&#8220;Testing Object Oriented Systems: Models, Patterns, and Tools&#8221;</a> which he presents as &#8220;<em>the</em> comprehensive reference on testing&#8221;. This time is a 1000 pages book, sounds intriguing <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  lol</p>
<p>++</p>
<p>Side note : I often wonder if my reviews aren&#8217;t too verbose&#8230; I would welcome feedback on the matter !</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3169/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3169&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/08/book-review-test-driven-development-by-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Hibernate statistics page</title>
		<link>http://codesmell.wordpress.com/2010/01/04/hibernate-statistics-page/</link>
		<comments>http://codesmell.wordpress.com/2010/01/04/hibernate-statistics-page/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 22:29:01 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=2996</guid>
		<description><![CDATA[Hi ! We were some time ago at a presentation about hibernate (at a Karlsruhe JUG event). The presenter, Michael Plöd showed us a nice Hibernate statistics page. As you can bet, we went for reusing it However, in doing so, some issues appeared, and in the end we thought the updated version could be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=2996&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hi !</p>
<p>We were some time ago at a presentation about hibernate (at a Karlsruhe JUG event). The presenter, <a href="http://www.blogger.com/profile/00154771783338568145">Michael Plöd</a> showed us a nice <a href="http://rockingcode.blogspot.com/2009/04/hibernate-statistics-wicket-page.html">Hibernate statistics page</a>. As you can bet, we went for reusing it <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>However, in doing so, some issues appeared, and in the end we thought the updated version could be useful for others as well.</p>
<p>It mainly consists in an adaptation to Wicket 1.4 (generics).</p>
<p>In details, the changes are :<br />
- use of ReloadableDetachableModel, needed AFAIK by Hibernate statistics (they have transient fields in their objects, and as such I was getting NPE after refreshing the page),<br />
- page completely &#8220;genericfied&#8221; : compact code, no more cast or compiler warning (the page was written for wicket 1.3 I presume),<br />
- minor display issues fixed : date showed as a formatted date, executionMinTime&#8217;s default value (Long.MAX_VALUE) taken in account (and replace by zero),<br />
- html closer from the &#8220;standards&#8221; : use of h1, thead and the like (which we use in our template, so&#8230;),<br />
- in order to make the component injection independent, there is now a setter for the entity manager provider (consequently the actual page construction is made in &#8220;onBeforeRender&#8221;),<br />
-  the code is now in a panel, so it can be easily put in any application specific page.</p>
<p>Whatever, the code, quite long long, is following.</p>
<p><pre class="brush: java;">
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;

import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.stat.CollectionStatistics;
import org.hibernate.stat.EntityStatistics;
import org.hibernate.stat.QueryStatistics;
import org.hibernate.stat.SecondLevelCacheStatistics;
import org.hibernate.stat.Statistics;

public class HibernateStatisticsPanel extends Panel
{
    private static final String DATE_FORMAT = &quot;hh'h'mm dd.yy.MM&quot;;

    private EntityManager entityManager;

    private static DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);

    public HibernateStatisticsPanel(final String id)
    {
        super(id);
    }

     @Override
    protected void onBeforeRender()
    {
        if (!hasBeenRendered())
        {
            if (entityManager == null)
            {
                throw new IllegalStateException(&quot;The entityManagerProvider must be set.&quot;);
            }
            final CompoundPropertyModel model = new CompoundPropertyModel(
                    new LoadableDetachableModel()
                    {
                         @Override
                        protected Statistics load()
                        {

                            return getSessionFactory(entityManager).getStatistics();
                        }
                    });
            setDefaultModel(model);

            add(new Label(&quot;isStatisticsEnabled&quot;, new LoadableDetachableModel()
            {

                 @Override
                protected String load()
                {
                    String result;
                    if (areStatsEnabled() == true)
                    {
                        result = &quot;enabled&quot; + &quot; since &quot; + dateFormat.format(new Date(model.getObject().getStartTime()))
                                + &quot; (&quot; + DATE_FORMAT + &quot;)&quot;;
                    }
                    else
                    {
                        result = &quot;disabled&quot;;
                    }
                    return result;
                }

            }));

            Link switchStats = new Link(&quot;switch_stats&quot;)
            {
                 @Override
                public void onClick()
                {
                    final SessionFactory sessionFactory = getSessionFactory(entityManager);
                    sessionFactory.getStatistics().setStatisticsEnabled(
                            !sessionFactory.getStatistics().isStatisticsEnabled());
                    sessionFactory.getStatistics().clear();
                    final CompoundPropertyModel model = new CompoundPropertyModel(
                            new LoadableDetachableModel()
                            {
                                 @Override
                                protected Statistics load()
                                {
                                    return sessionFactory.getStatistics();
                                }
                            });
                    setDefaultModel(model);
                }
            };
            switchStats.add(new Label(&quot;switchText&quot;, new LoadableDetachableModel()
            {

                 @Override
                protected String load()
                {
                    if (areStatsEnabled())
                    {
                        return &quot;Click to disable stats&quot;;
                    }
                    return &quot;Click to enable stats&quot;;
                }
            }));
            add(switchStats);

            add(new Label(&quot;sessionOpenCount&quot;));
            add(new Label(&quot;sessionCloseCount&quot;));
            add(new Label(&quot;flushCount&quot;));
            add(new Label(&quot;connectCount&quot;));
            add(new Label(&quot;prepareStatementCount&quot;));
            add(new Label(&quot;closeStatementCount&quot;));
            add(new Label(&quot;entityLoadCount&quot;));
            add(new Label(&quot;entityUpdateCount&quot;));
            add(new Label(&quot;entityInsertCount&quot;));
            add(new Label(&quot;entityDeleteCount&quot;));
            add(new Label(&quot;entityFetchCount&quot;));
            add(new Label(&quot;collectionLoadCount&quot;));
            add(new Label(&quot;collectionUpdateCount&quot;));
            add(new Label(&quot;collectionRemoveCount&quot;));
            add(new Label(&quot;collectionRecreateCount&quot;));
            add(new Label(&quot;collectionFetchCount&quot;));
            add(new Label(&quot;secondLevelCacheHitCount&quot;));
            add(new Label(&quot;secondLevelCacheMissCount&quot;));
            add(new Label(&quot;secondLevelCachePutCount&quot;));
            add(new Label(&quot;queryExecutionCount&quot;));
            add(new Label(&quot;queryExecutionMaxTime&quot;));
            add(new Label(&quot;queryExecutionMaxTimeQueryString&quot;));
            add(new Label(&quot;queryCacheHitCount&quot;));
            add(new Label(&quot;queryCacheMissCount&quot;));
            add(new Label(&quot;queryCachePutCount&quot;));
            add(new Label(&quot;commitedTransactionCount&quot;));
            add(new Label(&quot;transactionCount&quot;));
            add(new Label(&quot;optimisticFailureCount&quot;));

            ListView entityStats = new ListView(&quot;entities&quot;,
                    new LoadableDetachableModel&amp;lt; List  &amp;gt;()
                    {

                         @Override
                        protected List load()
                        {
                            String[] entities = model.getObject().getEntityNames();
                            List entityNames = new ArrayList();
                            for (int i = 0; i &amp;lt; entities.length; i++)
                            {
                                entityNames.add(model.getObject().getEntityStatistics(entities[i]));
                            }
                            return entityNames;
                        }
                    })
            {
                 @Override
                protected void populateItem(final ListItem item)
                {
                    item.setModel(new CompoundPropertyModel(item.getModelObject()));

                    item.add(new Label(&quot;deleteCount&quot;));
                    item.add(new Label(&quot;updateCount&quot;));
                    item.add(new Label(&quot;fetchCount&quot;));
                    item.add(new Label(&quot;insertCount&quot;));
                    item.add(new Label(&quot;loadCount&quot;));
                    item.add(new Label(&quot;optimisticFailureCount&quot;));
                    item.add(new Label(&quot;categoryName&quot;));
                }
            };
            add(entityStats);

            ListView collectionStats = new ListView(&quot;collections&quot;,
                    new LoadableDetachableModel()
                    {

                         @Override
                        protected List load()
                        {
                            String[] collections = (model.getObject()).getCollectionRoleNames();
                            List collectionNames = new ArrayList();
                            for (int i = 0; i &amp;lt; collections.length; i++)
                            {
                                collectionNames.add(model.getObject().getCollectionStatistics(collections[i]));
                            }
                            return collectionNames;
                        }
                    })
            {
                 @Override
                protected void populateItem(final ListItem item)
                {
                    item.setModel(new CompoundPropertyModel(item.getModelObject()));

                    item.add(new Label(&amp;quot;recreateCount&amp;quot;));
                    item.add(new Label(&amp;quot;updateCount&amp;quot;));
                    item.add(new Label(&amp;quot;fetchCount&amp;quot;));
                    item.add(new Label(&amp;quot;removeCount&amp;quot;));
                    item.add(new Label(&amp;quot;loadCount&amp;quot;));
                    item.add(new Label(&amp;quot;categoryName&amp;quot;));
                }
            };
            add(collectionStats);

            ListView queryStats = new ListView(&quot;queries&quot;,
                    new LoadableDetachableModel&amp;lt; List  &amp;gt;()
                    {

                         @Override
                        protected List load()
                        {
                            String[] queries = (model.getObject()).getQueries();
                            List queryNames = new ArrayList();
                            for (int i = 0; i &amp;lt; queries.length; i++)
                            {
                                queryNames.add(model.getObject().getQueryStatistics(queries[i]));
                            }
                            return queryNames;
                        }
                    })
            {
                 @Override
                protected void populateItem(final ListItem item)
                {
                    item.setModel(new CompoundPropertyModel(item.getModelObject()));

                    item.add(new Label(&quot;cacheHitCount&quot;));
                    item.add(new Label(&quot;cacheMissCount&quot;));
                    item.add(new Label(&quot;cachePutCount&quot;));
                    item.add(new Label(&quot;executionCount&quot;));
                    item.add(new Label(&quot;executionRowCount&quot;));
                    item.add(new Label(&quot;executionAvgTime&quot;));
                    item.add(new Label(&quot;executionMaxTime&quot;));
                    item.add(new Label(&quot;executionMinTime&quot;, new AbstractReadOnlyModel()
                    {

                         @Override
                        public String getObject()
                        {
                            // by default the hibernate stats. object put
                            // Long.MAX_VALUE to the executionMinTime, so we
                            // look for it and replace it by 0 where needed
                            long executionMinTime = item.getModelObject().getExecutionMinTime();
                            if (executionMinTime == Long.MAX_VALUE)
                            {
                                return &quot;0&quot;;
                            }
                            return &quot;&quot; + executionMinTime;
                        }
                    }));
                    item.add(new Label(&quot;categoryName&quot;));
                }
            };
            add(queryStats);

            ListView cacheStats = new ListView(&quot;caches&quot;,
                    new LoadableDetachableModel&amp;lt; List  &amp;gt;()
                    {
                         @Override
                        protected List load()
                        {
                            String[] caches = model.getObject().getSecondLevelCacheRegionNames();
                            List cacheNames = new ArrayList();
                            for (int i = 0; i &amp;lt; caches.length; i++)
                            {
                                cacheNames.add(model.getObject().getSecondLevelCacheStatistics(caches[i]));
                            }
                            return cacheNames;
                        }
                    })
            {
                 @Override
                protected void populateItem(final ListItem item)
                {
                    item.setModel(new CompoundPropertyModel(item.getModelObject()));

                    item.add(new Label(&quot;hitCount&quot;));
                    item.add(new Label(&quot;missCount&quot;));
                    item.add(new Label(&quot;putCount&quot;));
                    item.add(new Label(&quot;elementCountInMemory&quot;));
                    item.add(new Label(&quot;elementCountOnDisk&quot;));
                    item.add(new Label(&quot;sizeInMemory&quot;));
                    item.add(new Label(&quot;categoryName&quot;));
                }
            };
            add(cacheStats);

        }
        super.onBeforeRender();
    }

    private boolean areStatsEnabled()
    {
        return ((Statistics) getDefaultModelObject()).isStatisticsEnabled();
    }

    public static SessionFactory getSessionFactory(final EntityManager entityManager)
    {
        Object delegate = entityManager.getDelegate();
        if (delegate instanceof Session)
        {
            Session session = (Session) delegate;

            return session.getSessionFactory();
        }
        return null;
    }

    public void setEntityManager(final EntityManager entityManager)
    {
        this.entityManager = entityManager;
    }

    public EntityManager getEntityManager()
    {
        return entityManager;
    }
}
</pre></p>
<p>And the html page :</p>
<pre>
&lt;html&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;wicket:panel&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Hibernate&nbsp;Statistics&lt;/h1&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statistics&nbsp;are&nbsp;&lt;span&nbsp;wicket:id="isStatisticsEnabled"/&gt;.&lt;br&nbsp;/&gt;&nbsp;&lt;a&nbsp;href="#"&nbsp;wicket:id="switch_stats"&gt;&lt;span&nbsp;wicket:id="switchText"&gt;&lt;/span&gt;&lt;/a&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&nbsp;/&gt;&lt;br&nbsp;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h2&gt;Overview&lt;/h2&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&nbsp;class="whiteGrey"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;sessionOpenCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="sessionOpenCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;sessionCloseCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="sessionCloseCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;flushCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="flushCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;connectCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="connectCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;prepareStatementCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="prepareStatementCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;closeStatementCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="closeStatementCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;entityLoadCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="entityLoadCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;entityUpdateCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="entityUpdateCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;entityInsertCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="entityInsertCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;entityDeleteCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="entityDeleteCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;entityFetchCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="entityFetchCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;collectionLoadCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="collectionLoadCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;collectionUpdateCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="collectionUpdateCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;collectionRemoveCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="collectionRemoveCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;collectionRecreateCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="collectionRecreateCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;collectionFetchCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="collectionFetchCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;secondLevelCacheHitCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="secondLevelCacheHitCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;secondLevelCacheMissCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="secondLevelCacheMissCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;secondLevelCachePutCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="secondLevelCachePutCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;queryExecutionCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="queryExecutionCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;queryExecutionMaxTime&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="queryExecutionMaxTime"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;queryExecutionMaxTimeQueryString&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="queryExecutionMaxTimeQueryString"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;queryCacheHitCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="queryCacheHitCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;queryCacheMissCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="queryCacheMissCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;queryCachePutCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="queryCachePutCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;commitedTransactionCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="commitedTransactionCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;transactionCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="transactionCount"/&gt;&lt;/td&gt;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;th&gt;optimisticFailureCount&lt;/th&gt;&lt;td&gt;&lt;span&nbsp;wicket:id="optimisticFailureCount"/&gt;&lt;/td&gt;&lt;/tr&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h2&gt;Entity&nbsp;Statistics&lt;/h2&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&nbsp;class="whiteGrey"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;thead&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Entity&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Load&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Fetch&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Insert&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Delete&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Update&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Optimistic&nbsp;Failure&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/thead&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tbody&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&nbsp;wicket:id="entities"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="categoryName"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="loadCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="fetchCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="insertCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="deleteCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="updateCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="optimisticFailureCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tbody&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h2&gt;Collection&nbsp;Statistics&lt;/h2&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&nbsp;class="whiteGrey"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;thead&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Collection&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Load&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Fetch&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Recreate&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Remove&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Update&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/thead&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tbody&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&nbsp;wicket:id="collections"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="categoryName"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="loadCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="fetchCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="recreateCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="removeCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="updateCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tbody&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h2&gt;Query&nbsp;Statistics&lt;/h2&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&nbsp;class="whiteGrey"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;thead&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Query&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Execution&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Execution&nbsp;Row&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Avg&nbsp;Time&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Min&nbsp;Time&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Max&nbsp;Time&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Cache&nbsp;Hit&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Cache&nbsp;Miss&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Cache&nbsp;Put&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/thead&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tbody&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&nbsp;wicket:id="queries"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="categoryName"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="executionCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="executionRowCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="executionAvgTime"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="executionMinTime"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="executionMaxTime"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="cacheHitCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="cacheMissCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="cachePutCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tbody&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h2&gt;Cache&nbsp;Statistics&lt;/h2&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&nbsp;class="whiteGrey"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;thead&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Cache&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Hit&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Miss&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Put&nbsp;Count&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Elements&nbsp;in&nbsp;Memory&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Elements&nbsp;on&nbsp;Disk&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Size&nbsp;in&nbsp;Memory&lt;/th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/thead&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tbody&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&nbsp;wicket:id="caches"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="categoryName"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="hitCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="missCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="putCount"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="elementCountInMemory"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="elementCountOnDisk"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;span&nbsp;wicket:id="sizeInMemory"/&gt;&lt;/td&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tbody&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/wicket:panel&gt;
&lt;/html&gt;
</pre>
<p>The guicy one is as simple as :</p>
<p><pre class="brush: java;">
import javax.persistence.EntityManager;

import org.apache.wicket.markup.html.panel.Panel;

import com.google.inject.Inject;

public class GuicyHibernateStatisticsPanel extends Panel
{

     @Inject
    private EntityManager entityManager;

    public GuicyHibernateStatisticsPanel(final String id)
    {
        super(id);
        HibernateStatisticsPanel statisticsPanel = new HibernateStatisticsPanel(&quot;hibernateStatisticsPanel&quot;);
        statisticsPanel.setEntityManager(entityManager);
        add(statisticsPanel);
    }

}
</pre></p>
<p>and :</p>
<pre>
&lt;html&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;wicket:panel&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;wicket:container&nbsp;wicket:id="hibernateStatisticsPanel"&nbsp;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/wicket:panel&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Hope it helps <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
++</p>
<p>PS : I know the html code isn&#8217;t shown as best as it could, but I was fed up of trying to get wordpress to render the  tags&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/2996/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/2996/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/2996/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/2996/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/2996/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/2996/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/2996/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/2996/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/2996/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/2996/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/2996/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/2996/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/2996/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/2996/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=2996&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/04/hibernate-statistics-page/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Wicket gem: Gravatar</title>
		<link>http://codesmell.wordpress.com/2010/01/04/wicket-gem-gravatar/</link>
		<comments>http://codesmell.wordpress.com/2010/01/04/wicket-gem-gravatar/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 21:32:40 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[gravatar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3146</guid>
		<description><![CDATA[from the javadoc: Creates an image that is rendered by the Gravatar online service. Gravatars are user icons that are registered by a central server and that can be used across the internet with blogs, forums and other profile based websites. The Gravatar requires the email address for which the gravatar image needs to be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3146&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>from the javadoc:</p>
<blockquote><p> Creates an image that is rendered by the <a href="http://gravatar.com">Gravatar</a> online service. Gravatars are user<br />
 icons that are registered by a central server and that can be used across the<br />
 internet with blogs, forums and other profile based websites.</p>
<p>
 The Gravatar requires the email address for which the gravatar image<br />
 needs to be rendered (each gravatar account can have multiple email addresses<br />
 registered).
 </p>
<p>
 Available options:</p>
<ul>
<li>you can set the {@linkplain #setSize(int) size of the rendered image}</li>
<li>you can pick a {@linkplain #setRating(String) rating} for the intended<br />
 audience</li>
<li>you can set the {@linkplain #setDefaultImage(String) default image} that<br />
 is rendered when no gravatar was found with the provided email address</li>
<li>you can choose to use a {@linkplain setSecure secure https protocol or<br />
 plain http}</li>
<li>the gravatar supports both the {@link #setAlt(IModel) alt} and<br />
 {@link #setTitle(IModel) title} attributes</li>
</ul>
<p>
 Set the static fields if you want to modify the defaults for your whole<br />
 application.</p>
<p> @author dashorst
</p>
</blockquote>
<p><a href="http://gist.github.com/266444">http://gist.github.com/266444</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3146/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3146&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2010/01/04/wicket-gem-gravatar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Wicket gem: AdapterModel implements IModel</title>
		<link>http://codesmell.wordpress.com/2009/12/30/wicket-gem-adaptermodel-implements-imodel/</link>
		<comments>http://codesmell.wordpress.com/2009/12/30/wicket-gem-adaptermodel-implements-imodel/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 21:04:41 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[igor]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3143</guid>
		<description><![CDATA[Recently, on the Wicket-User mailing list: What&#8217;s the best practice when using generics with models that take some object but return another type of object? examples: When you have a collection and need to convert it to a list for listview purposes. to which mighty Igor replied: -igor<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3143&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, on the Wicket-User mailing list:</p>
<blockquote><p>What&#8217;s the best practice when using generics with models that take some<br />
object but return another type of object?</p>
<p>examples:<br />
When you have a collection and need to convert it to a list for listview<br />
purposes. </p></blockquote>
<p>to which mighty Igor replied:</p>
<p><pre class="brush: java;">
/**
 * Simplifies implementing wrapper models that adapt from model object of one type to another
 *
 * @author igor.vaynberg
 *
 * @param 
 *            new type
 * @param 
 *            old type
 */
public abstract class AdapterModel implements IModel
{
    private static final long serialVersionUID = 1L;

    /** delegate model */
    private final IModel delegate;

    /**
     * Constructor
     *
     * @param delegate
     *            model to be wrapped
     */
    public AdapterModel(IModel delegate)
    {
        this.delegate = delegate;
    }

    /** {@inheritDoc} */
    public N getObject()
    {
        return getObject(delegate);
    }

    /**
     * Translates from IModel of type T to object of type A
     *
     * @param delegate
     * @return adapter value of delegate model
     */
    protected abstract N getObject(IModel delegate);

    /** {@inheritDoc} */
    public void setObject(N object)
    {
        setObject(object, delegate);
    }

    /**
     * Translates from object of type A to IModel of type T
     *
     * @param object
     *            adapted object that needs to be unadopted
     * @param delegate
     *            delegate model whose value should be set to unadopted version of
     *            object
     */
    protected abstract void setObject(N object, IModel delegate);

    /** {@inheritDoc} */
    public void detach()
    {
        delegate.detach();
    }
}
</pre><br />
-igor</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3143&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2009/12/30/wicket-gem-adaptermodel-implements-imodel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Awesome guide to mercurial branches</title>
		<link>http://codesmell.wordpress.com/2009/11/22/awesome-guide-to-mercurial-branches/</link>
		<comments>http://codesmell.wordpress.com/2009/11/22/awesome-guide-to-mercurial-branches/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 20:23:13 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[dscm]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3139</guid>
		<description><![CDATA[via http://stevelosh.com/blog/entry/2009/8/30/a-guide-to-branching-in-mercurial/ it has Branching with Clones Branching with Bookmarks Branching with Named Branches Branching Anonymously with a list of Advantages Disadvantages Comparison to git each.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3139&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>via <a href="http://stevelosh.com/blog/entry/2009/8/30/a-guide-to-branching-in-mercurial/">http://stevelosh.com/blog/entry/2009/8/30/a-guide-to-branching-in-mercurial/</a></p>
<p>it has</p>
<ul>
<li> Branching with Clones</li>
<li> Branching with Bookmarks</li>
<li>
 Branching with Named Branches</li>
<li> Branching Anonymously</li>
</ul>
<p>with a list of</p>
<ul>
<li>Advantages</li>
<li>Disadvantages</li>
<li>Comparison to git</li>
</ul>
<p>each.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3139/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3139&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2009/11/22/awesome-guide-to-mercurial-branches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>JDK7 might finally be fun</title>
		<link>http://codesmell.wordpress.com/2009/11/16/jdk7-might-finally-be-fun/</link>
		<comments>http://codesmell.wordpress.com/2009/11/16/jdk7-might-finally-be-fun/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 07:39:12 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[forkjoin]]></category>
		<category><![CDATA[java7]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3136</guid>
		<description><![CDATA[via puredanger.com Doug Lea posted a note today on the concurrency-interest list that the bulk of the JDK 7 changes from JSR 166y (the second maintenance update) have been pushed in the latest JDK 7 M5 snapshots. The fork-join library provides support for fine-grained parallel divide-and-conquer style parallelism. You can think of many of the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3136&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>via <a href="http://puredanger.com/tech/2009/11/15/jsr-166-concurrency-updates-hit-jdk-7/">puredanger.com</a></p>
<blockquote><p>Doug Lea posted a note today on the concurrency-interest list that the bulk of the JDK 7 changes from JSR 166y (the second maintenance update) have been pushed in the latest JDK 7 M5 snapshots.</p></blockquote>
<blockquote><p>The fork-join library provides support for fine-grained parallel divide-and-conquer style parallelism. You can think of many of the classes adding in JDK 5 for queues, executors, etc as excellent building blocks for coarse-grained parallelism (on the level of a “task” or “transaction”). Fork-join works at a lower level, providing parallelism for working on a subset of a large data set in parallel.</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3136/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3136&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2009/11/16/jdk7-might-finally-be-fun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Maiden Flight with a Hornet</title>
		<link>http://codesmell.wordpress.com/2009/11/15/maiden-flight-with-a-hornet/</link>
		<comments>http://codesmell.wordpress.com/2009/11/15/maiden-flight-with-a-hornet/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 14:08:47 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[hornetq]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jms]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3122</guid>
		<description><![CDATA[after ActiveMQ let us down the third time (rant to follow), it was time for alternatives. as i am a strong believer in OSS and the budget is tight these days, i´d love to stay in that ballpark instead of just buying SonicMQ. so looking for alternatives i came across the recent announcement of HornetQ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3122&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>after ActiveMQ let us down the third time (rant to follow), it was time for alternatives. as i am a strong believer in OSS and the budget is tight these days, i´d love to stay in that ballpark instead of just buying SonicMQ.</p>
<p>so looking for alternatives i came across the recent announcement of <a href="http://www.jboss.org/hornetq">HornetQ</a> formerly known as jboss-messaging. even though i am not particularly known as a friend of jboss due to prior experiences with their AS, i chose to take that hornet for a flight. here´s what it turned out to be:</p>
<h5>Arrival</h5>
<p>download, done. as easy as that. well almost.</p>
<p>certainly you want to take a look at HornetQ-configuration.xml. there is binding to non-localhost and a few options like redelivery-delay, redistribution-delay and rates for consumer and producer to take care of.</p>
<p>if you´re on a linux env, you might want to use their AIO stuff, which is explained in great detail <a href="http://hornetq.blogspot.com/2009/08/persistence-on-hornetq.html">here</a>.</p>
<h5>Pre-Flight Preparation</h5>
<p>as a happy maven user it took me a while to find out what libs i actually needed as a minimum to use HornetQ as JMS Implementation. just afterwards i discovered <a href="http://hornetq.blogspot.com/2009/09/hornetq-simple-example-using-maven.html">this nice blog article</a> that gives it all.</p>
<p>basically it is:<br />
<pre class="brush: xml;">
   &lt;!-- if you like that API better than JMS --&gt;
   &lt;dependency&gt;
      &lt;groupid&gt;org.HornetQ&lt;/groupid&gt;
      &lt;artifactid&gt;HornetQ-core-client&lt;/artifactid&gt;
      &lt;version&gt;2.0.0.BETA5&lt;/version&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
   &lt;/dependency&gt;
 
   &lt;!-- the actual JMS Impl --&gt;
   &lt;dependency&gt;
      &lt;groupid&gt;org.HornetQ&lt;/groupid&gt;
      &lt;artifactid&gt;HornetQ-jms-client&lt;/artifactid&gt;
      &lt;version&gt;2.0.0.BETA5&lt;/version&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
   &lt;/dependency&gt;
 
   &lt;!-- transport layer --&gt;
   &lt;dependency&gt;
      &lt;groupid&gt;org.HornetQ&lt;/groupid&gt;
      &lt;artifactid&gt;HornetQ-transports&lt;/artifactid&gt;
      &lt;version&gt;2.0.0.BETA5&lt;/version&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
   &lt;/dependency&gt;
   &lt;dependency&gt;
      &lt;groupid&gt;org.jboss.netty&lt;/groupid&gt;
      &lt;artifactid&gt;netty&lt;/artifactid&gt;
      &lt;version&gt;3.1.0.GA&lt;/version&gt;
   &lt;/dependency&gt;
</pre><br />
plus the JMS API.</p>
<p>sidenote: i don´t get why HornetQ-transports for instance does not declare a dependency to netty. unfortunately with any jboss product, you have to dig for a particular foggy combination of jars that work together. (sorry for that obvious reference to hibernate <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  )</p>
<h5>Tower</h5>
<p>there is none. ok, the HornetQ server exposes itself heavily via JMX, but you cannot expect anything similar to ActiveMQ in terms intuitive usability or comfort. on the other hand, using (and understanding) the JMX-exposed API gives you much more power than what the average JMS server provides.<br />
what we (my company) did, was to create a simple webapp considerably equal to what the ActiveMQ admin-webapp is (without the screwing up part) to manage queues/topics, messages and monitor the nontrivial processes that JMS provides in terms of redelivery, dead-letters etc&#8230;</p>
<p>SCREENSHOT TO FOLLOW</p>
<p>there also is hermes, but we never got it running with HornetQ in a way that we could manage queues and move messages.</p>
<h5>Choose Gangway</h5>
<p>HornetQ is a JMS provider, yes. and even though i am not a fan of using a proprietary API over a standardized one, you might want to take a look at their direct API to messaging. it is a slightly different perspective (no difference between queue and topic) to JMS, but it is a little simpler in some corners.</p>
<p>we can afford going that way, because we have an abstraction on top of that, that protects our application code from a dependeny on a particular API, anyway.</p>
<h5>Lift-off</h5>
<p>first of all, you can easily embed HornetQ server into any app. beside tests, the usecase we had for that was the admin application mentioned above. this is not too important, but very handy as you can easily bundle these things together.<br />
using the client API, as well as the JMS API is as trivial as you would expect. the only thing you might want to know is their way of implementing streaming of big messages.</p>
<h5>Heavy Lifting</h5>
<p>some people say, that sending big messages over JMS is terribly wrong from a conceptual perspective. well, it depends. we do have some usecases, where a message contains a job that really carries quite some data. i wont enter the discussion, if this job should better be persisted and just being triggerd by a small JMS message, but one thing is for sure: it is much easier this way.<br />
so what am i talking about when i say &#8220;quite some data&#8221;? significantly less than 5mb. while this is not considered &#8220;big&#8221; in any other context, an ActiveMQ faild us with OOMs when recieving such a message even though he had 512m of heap.</p>
<p>any possible replacement for ActiveMQ for us had to demonstrate a reliable operation with messages that go up to 30mb.</p>
<p>HornetQ delivered quite good here. be it the JMS API or their own (supposed to be simpler) API to messaging, you can easily stream data into messages. the server then streams those messages into a large-messgae directory and the cake is eaten. this is not particularly reocket science, but our bad experience with ActiveMQ makes me emphasize this:<br />
HornetQ copes with messages of any reasonable size!</p>
<p>in fact, we chose to use this pattern for any message we send (ignoring the performance resulting from the extra handling of this kind of message) in order to be safe and relax on mem requirements as much as possible.</p>
<h5>Landing</h5>
<p>we replaced some ActiveMQ servers in production environments by hornets and since then, we did not touch them. we set up (very frequent) nagios roundtrip tests and the like, and hornet did not let us down once.</p>
<p>even though i am not particularly known as a friend of jboss, i am grateful of this being not only open source but also isolated from jboss AS and the rest of their (sometimes bloated) ecosystem.</p>
<h5>Final words</h5>
<p>the advanced configuration is a little weird here and there and lacks documentation. it has a bunch of things, that do not provide value FOR US, like throttleing.<br />
in operational tests, we discovered some weird (but reproduceable) behaviour when ungracefully stopping HornetQ. some messages were safe, but no longer moveable to another queue (brings NPE). we suspect this to be a beta issue that´ll be taken care of.</p>
<p>apart from that: HornetQ is easy to get started with, reliable, reasonably fast, highly configurable and (once you got the API) flexibly managable.</p>
<p>it instantly is a major player in OSS JMS provider market and, if you happen to have requirements similar to ours, a very good choice.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3122/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3122&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2009/11/15/maiden-flight-with-a-hornet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Scripting in Scala&#8230;.</title>
		<link>http://codesmell.wordpress.com/2009/11/04/scripting-in-scala/</link>
		<comments>http://codesmell.wordpress.com/2009/11/04/scripting-in-scala/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 22:56:50 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Scala]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3117</guid>
		<description><![CDATA[Interpreter style can be easier than one might think. See Vassil Dichev´s Embedded Scala Interpreter<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3117&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Interpreter style can be easier than one might think.</p>
<p>See Vassil Dichev´s <a href="http://speaking-my-language.blogspot.com/2009/11/embedded-scala-interpreter.html">Embedded Scala Interpreter</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3117/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3117&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2009/11/04/scripting-in-scala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>Uups, they did it again&#8230;</title>
		<link>http://codesmell.wordpress.com/2009/11/04/uups-they-did-it-again/</link>
		<comments>http://codesmell.wordpress.com/2009/11/04/uups-they-did-it-again/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 18:26:10 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3113</guid>
		<description><![CDATA[via theserverside.com: IBM WASV7 Java Persistence API (JPA) 2.0 Open Alpha once more, they repackage an apache project to charge for it. The WebSphere Application Server JPA implementation is based on Apache OpenJPA, a leading open source Java persistence framework. This alpha provides the Apache OpenJPA 2.0 implementation with IBM enhancements to benefit integration with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3113&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>via <a href="http://www.theserverside.com/news/thread.tss?thread_id=58343">theserverside.com: IBM WASV7 Java Persistence API (JPA) 2.0 Open Alpha</a></p>
<p>once more, they repackage an apache project to charge for it.</p>
<blockquote><p><strong>The WebSphere Application Server JPA implementation is based on Apache OpenJPA, a leading open source Java persistence framework.</strong> This alpha provides the Apache OpenJPA 2.0 implementation <em>with IBM enhancements to benefit integration with WebSphere Application Server</em>. The Apache OpenJPA 2.0 implementation includes improvements and benefits over previous releases and even beyond the JPA 2.0 specification.</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3113&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2009/11/04/uups-they-did-it-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
		<item>
		<title>How to do UI test ?</title>
		<link>http://codesmell.wordpress.com/2009/11/03/how-to-do-ui-test/</link>
		<comments>http://codesmell.wordpress.com/2009/11/03/how-to-do-ui-test/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 21:30:17 +0000</pubDate>
		<dc:creator>uweschaefer</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://www.codesmell.org/blog/?p=3106</guid>
		<description><![CDATA[Me again&#8230; Well, I just wanted to speak about an issue for which I didn&#8217;t find any proper answer yet. The matter is gui testing. Currently, at work, we do proper unit test for &#8220;framework level code&#8221;. By &#8220;framework code&#8221;, I mean code being in some utilities or services projects which are put there to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3106&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Me again&#8230;</p>
<p>Well, I just wanted to speak about an issue for which I didn&#8217;t find any proper answer yet.</p>
<p>The matter is gui testing. Currently, at work, we do proper unit test for &#8220;framework level code&#8221;. By &#8220;framework code&#8221;, I mean code being in some utilities or services projects which are put there to be reused. These tests are usually fairly easy to do, since the context is well known. Furthermore, as once as we change this code, these tests prove their value. As changes are made quite often, be it only when adding new stuff and thus refactoring, we feel like these tests are good bang for bucks.</p>
<p>For example, recently, we saw a bug in some on &#8220;framework code&#8221;. We wrote a failing test for it (well, I&#8217;m not 100% sure of that, but we should have had anyway <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ), fixed it and, on the go, spotted some possible improvements. We did them as well, then ran again all tests and we were pretty confident about it.</p>
<p>But, then, what about &#8220;project specific code&#8221; ?</p>
<p>Hum, what&#8217;s in it anyway ? Some &#8220;framework level code&#8221;, for sure, which is already tested, and then some JPA, wicket and business related code. Testing the JPA code would basically mean testing the JPA layer, which is pointless. What about the GUI then ? Well, wicket isn&#8217;t exactly the easiest framework for it&#8230; The way its generates the ids make it hard(er) for most of the html test tools, like for example <a href="http://seleniumhq.org/">selenium</a>. And even if, what to test actually ? Should we do some &#8220;clicks through&#8221; tests for all use cases ? All possible navigation paths ? And what about the data needed by these tests ? Using <a href="http://cwiki.apache.org/WICKET/unit-test.html">WicketTester</a>, then we would be at pain with jquery heavy pages (well, I guess most of the selenium like frameworks are at pain in this case&#8230;). Overall, the efforts to put there are likely to be important.</p>
<p>So, what about the gain ? The odds that we&#8217;ll touch again these classes are quite low, way lower than framework level code. Basically, we don&#8217;t reuse these stuff. And if some functionalities/pages are fine enough, then we may even not touch them again before very long.</p>
<p>In the end, we have some layers which are, at the same time, harder to test and with less &#8220;return on investment&#8221;. It looks like not testing these &#8220;project specific/gui layers&#8221; is a good idea&#8230;</p>
<p>However, which bugs the end users, tester or product owner are likely to see the first ? The gui bugs, for sure. Worse, whereas framework layer code tends to be mostly Java, the front end relies heavily on nice stuff like CSS, html and javascript. And as if refactoring wasn&#8217;t already hard enough there, Wicket, with its string based property and compound models, makes it even harder. So in the end, this gui layer is quite error prone and highly visible to the &#8220;customers/users&#8221;&#8230; Bad isn&#8217;t it ? And don&#8217;t forget all these quirks about back button, interruption of page loading, browsers inconsistencies and many ui possibilities&#8230; Even worse !</p>
<p>That&#8217;s where my issue with ui test lies&#8230; This ui layer is a pain to test, and would be tested mainly for just a development, without much reuse. But, it&#8217;s an error prone layer. And it&#8217;s the most visible one&#8230; So, if, like me, you&#8217;re kind of fond of tests and bullet proof code, then you might well share my dilemma&#8230;</p>
<p>What to do then ? Well, for the time, I&#8217;ve no proper answer. I guess I should try to spend more time testing my ui before giving it to the outer world, even it feels awkward to do it manually. For sure, <a href="http://www.codesmell.org/blog/2009/11/agile-tour-in-strasbourg-session-on-tests-and-agility/">exploratory tests</a> might help, but again they&#8217;re manual and in no way comprehensive&#8230; No clear solution here for me, unfortunately&#8230;</p>
<p>Any hint deeply welcome ! In fact, I guess that&#8217;s the (hidden) aim of this post : maybe someone&#8217;ll come with some magic bullet(s). After all, Christmas is coming soon, so it&#8217;s dreaming time anyway <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>++</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codesmell.wordpress.com/3106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codesmell.wordpress.com/3106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codesmell.wordpress.com/3106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codesmell.wordpress.com/3106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codesmell.wordpress.com/3106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codesmell.wordpress.com/3106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codesmell.wordpress.com/3106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codesmell.wordpress.com/3106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codesmell.wordpress.com/3106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codesmell.wordpress.com/3106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codesmell.wordpress.com/3106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codesmell.wordpress.com/3106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codesmell.wordpress.com/3106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codesmell.wordpress.com/3106/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codesmell.wordpress.com&amp;blog=7486427&amp;post=3106&amp;subd=codesmell&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codesmell.wordpress.com/2009/11/03/how-to-do-ui-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/681cdd3359d2c08234cb30fc2ec47418?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">uweschaefer</media:title>
		</media:content>
	</item>
	</channel>
</rss>
