<?xml version="1.0"?>
<!-- RSS generated by Radio UserLand v8.0.8 on Mon, 21 Apr 2003 10:24:21 GMT -->
<rss version="2.0">
	<channel>
		<title>Joe&apos;s Jelly</title>
		<link>http://radio.weblogs.com/0108103/</link>
		<description>Joe Walnes rambling on and on about Software Development, Java and Extreme Programming.</description>
		<language>en-gb</language>
		<copyright>Copyright 2003 Joe Walnes</copyright>
		<lastBuildDate>Mon, 21 Apr 2003 10:24:21 GMT</lastBuildDate>
		<docs>http://backend.userland.com/rss</docs>
		<generator>Radio UserLand v8.0.8</generator>
		<managingEditor>joe@truemesh.com</managingEditor>
		<webMaster>joe@truemesh.com</webMaster>
		<category domain="http://www.weblogs.com/rssUpdates/changes.xml">rssUpdates</category> 
		<skipHours>
			<hour>0</hour>
			<hour>2</hour>
			<hour>3</hour>
			<hour>4</hour>
			<hour>1</hour>
			<hour>5</hour>
			<hour>23</hour>
			<hour>14</hour>
			</skipHours>
		<cloud domain="radio.xmlstoragesystem.com" port="80" path="/RPC2" registerProcedure="xmlStorageSystem.rssPleaseNotify" protocol="xml-rpc"/>
		<ttl>60</ttl>
		<item>
			<title>QDox moved to codehaus</title>
			<link>http://radio.weblogs.com/0108103/2003/04/21.html#a134</link>
			<description>QDox has moved to &lt;A href=&quot;http://qdox.codehaus.org&quot;&gt;qdox.codehaus.org&lt;/A&gt;</description>
			<guid>http://radio.weblogs.com/0108103/2003/04/21.html#a134</guid>
			<pubDate>Mon, 21 Apr 2003 10:24:20 GMT</pubDate>
			<category>Java</category>
			<category>Open Source</category>
			</item>
		<item>
			<title>JUnit integration in IDEA</title>
			<link>http://radio.weblogs.com/0108103/2003/03/15.html#a133</link>
			<description>&lt;P&gt;My colleagues pointed me to the latest IntelliJ IDEA &lt;A href=&quot;http://www.intellij.net/eap/&quot;&gt;EAP&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;It has awesome JUnit integration. Nice work boys.&lt;/P&gt;
&lt;P&gt;Screenshots for the curious:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href=&quot;http://joe.truemesh.com/screenshots/idea-junit1.gif&quot;&gt;Running a test suite&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href=&quot;http://joe.truemesh.com/screenshots/idea-junit2.gif&quot;&gt;Test statistics&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href=&quot;http://joe.truemesh.com/screenshots/idea-junit3.gif&quot;&gt;Expected versus actual viewer&lt;/A&gt; (niiiice)&lt;/LI&gt;&lt;/UL&gt;</description>
			<guid>http://radio.weblogs.com/0108103/2003/03/15.html#a133</guid>
			<pubDate>Sat, 15 Mar 2003 17:38:39 GMT</pubDate>
			<category>Java</category>
			<category>Joe</category>
			<category>Software Development</category>
			</item>
		<item>
			<title>Life without Google</title>
			<link>http://radio.weblogs.com/0108103/2003/03/05.html#a132</link>
			<description>&lt;P&gt;Last week I couldn&apos;t contact Google. I could get to other sites but not Google. Couldn&apos;t even ping it. &lt;/P&gt;
&lt;P&gt;My lifeline had been cut. The internet was still there and so were other search engines but the power I take for granted had gone. I actually started to panic and began thinking - how would I continue without Google? Google returned after about&amp;nbsp;twenty seconds but it seemed an eternity.&lt;/P&gt;
&lt;P&gt;Information access is an addictive habit - easy to get hooked and hard to kick.&lt;/P&gt;
&lt;P&gt;Stop for a moment and imagine what would happen if Google went offline tomorrow.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0108103/2003/03/05.html#a132</guid>
			<pubDate>Wed, 05 Mar 2003 20:27:46 GMT</pubDate>
			<category>Joe</category>
			</item>
		<item>
			<title>NMock - dynamic mock objects for .NET</title>
			<link>http://radio.weblogs.com/0108103/2003/02/17.html#a131</link>
			<description>&lt;P&gt;Time to plug &lt;A href=&quot;http://nmock.sourceforge.net/&quot;&gt;NMock&lt;/A&gt;. It&apos;s a dynamic mock object library for .NET based on work Nat Pryce did in the Java &lt;A href=&quot;http://www.mockobjects.com/&quot;&gt;MockObjects&lt;/A&gt; project.&lt;/P&gt;
&lt;P&gt;It&apos;s one of those things that we wrote very quickly (completely test first, of course) in hardly any time at all. It was written last October and I&apos;ve been using it on a number of projects (as have other people) with no problems - it just, like, works. &lt;/P&gt;
&lt;P&gt;All you need to do is supply it with a class or interface that needs to be mocked and it will dynamically create a new class on the fly (by emitting .NET bytecode) that acts as a mock object. This mock can be setup with return values and expectations. Expectations can be simple things (such as equality checks) or custom constraints (such as a regular expression).&lt;/P&gt;
&lt;P&gt;What&apos;s great is that a bug was found (well, an unimplemented feature) by Jeremy Stell-Smith last week. And he went about reporting it in the most ideal way possible. He supplied a failing unit test. So we added it to the suite and fixed it (with one line of code) and everything was green again. It took less than a minute to fix&amp;nbsp;a bug I knew nothing about. In the words of Mr Stell-Smith - Sweeeeet.&lt;/P&gt;
&lt;P&gt;Why can&apos;t all oss projects work like that?&lt;/P&gt;
&lt;P&gt;Go look at a &lt;A href=&quot;http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/nmock/nmock/sample/order/&quot;&gt;simple example&lt;/A&gt;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0108103/2003/02/17.html#a131</guid>
			<pubDate>Mon, 17 Feb 2003 21:32:21 GMT</pubDate>
			<category>.NET</category>
			<category>Java</category>
			<category>Joe</category>
			<category>Open Source</category>
			<category>Software Development</category>
			</item>
		<item>
			<title>Eclipse shortcut keys</title>
			<link>http://radio.weblogs.com/0108103/2003/02/17.html#a130</link>
			<description>&lt;P&gt;As a recent&amp;nbsp;convertee from IDEA&amp;nbsp;to Eclipse, it&apos;s very hard to get your bearings unless you know the shortcut keys.&lt;/P&gt;
&lt;P&gt;So here&apos;s a list of the most useful keys. Print them out and stick to your monitor - you&apos;ll never have to touch your mouse again and you&apos;ll fly.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://wiki.truemesh.com/joe/EclipseKeys&quot;&gt;&lt;a href=&quot;http://wiki.truemesh.com/joe/EclipseKeys&quot;&gt;http://wiki.truemesh.com/joe/EclipseKeys&lt;/a&gt;&lt;/A&gt;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0108103/2003/02/17.html#a130</guid>
			<pubDate>Mon, 17 Feb 2003 21:20:32 GMT</pubDate>
			<category>Java</category>
			<category>Joe</category>
			<category>Software Development</category>
			</item>
		<item>
			<title>XPDay 2</title>
			<link>http://radio.weblogs.com/0108103/2003/02/17.html#a129</link>
			<description>&lt;P&gt;Some &lt;A href=&quot;http://www.chris-king.org.uk/Photo/XPDay&quot;&gt;photos&lt;/A&gt; of the Agile Tools for .NET presentation Owen and I did at XPDay. What am I doing with my hand? Oh and here&apos;s the &lt;A href=&quot;http://www.xpday.org/ThoughtWorksSlides.ppt&quot;&gt;slides&lt;/A&gt; from the presentation.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0108103/2003/02/17.html#a129</guid>
			<pubDate>Mon, 17 Feb 2003 20:53:37 GMT</pubDate>
			<category>.NET</category>
			<category>Java</category>
			<category>Joe</category>
			<category>Open Source</category>
			<category>Software Development</category>
			</item>
		<item>
			<title>Test coverage tools and mutation testing.</title>
			<link>http://radio.weblogs.com/0108103/2003/02/05.html#a128</link>
			<description>&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;We first set off by requiring a 95% coverage before commit. This was a bit a pain in the ass but it was basically doable. This made sure all features in the system had tests, it&apos;s simple not possible to commit anything without tests when you set the bar as high as this. But this is doesn&apos;t necessarily it&apos;s test-first development, it&apos;s just tested development. [&lt;A href=&quot;http://roller.anthonyeden.com:80/page/tirsen&quot;&gt;jutopia&lt;/A&gt;]&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;I love &lt;A href=&quot;http://www.thecortex.net/clover/&quot;&gt;test coverage tools&lt;/A&gt;. &lt;A href=&quot;http://cgi.skizz.plus.com/blog/dev/&quot;&gt;Another team&lt;/A&gt; at work was working on deciphering and robustifying a hairball project by slowly retrofitting tests and refactoring. Each day they managed to push the Clover bar a tiny bit higher and it served as a goal. Today we&apos;ll get it to 20%, 30%, 90%....
&lt;P dir=ltr&gt;Unfortunately coverage tools can also be misleading. It&apos;s easy to write code that covers the lines of code but doesn&apos;t actually test them. A complementary approach is to use&amp;nbsp;code mutation tools such as &lt;A href=&quot;http://jester.sourceforge.net/&quot;&gt;Jester - The Test Tester&lt;/A&gt;. 
&lt;P dir=ltr&gt;Jester takes a class and a testcase and runs the tests to check they all pass. It then makes tiny changes to the class under test, one by one, and reruns the tests each time. If the lines of code are tested properly, every little change should cause at least one test to fail. If the tests still pass it notifies you that you are not testing that line properly.
&lt;P dir=ltr&gt;Although it&apos;s harder to use Jester and not typically something I&apos;d do everyday, it has told me some very interesting things no other tool has pointed out about my code. Aside from pointing out lines of code that my tests execute but don&apos;t actually test, it has also pointed me to flawed algorithms that can be greatly simplified.
&lt;P dir=ltr&gt;Ivan Moore has written some good stuff on the subject &lt;A href=&quot;http://www.xp2001.org/xp2001/conference/papers/Chapter20-Moore.pdf&quot;&gt;here&lt;/A&gt; and &lt;A href=&quot;http://www.google.co.uk/search?q=cache:5PWxH0Nl9jAC:www.xpday.org/testtesting.ppt&quot;&gt;here&lt;/A&gt;.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0108103/2003/02/05.html#a128</guid>
			<pubDate>Wed, 05 Feb 2003 06:07:20 GMT</pubDate>
			<source url="http://roller.anthonyeden.com/rss/tirsen">jutopia</source>
			<category>Java</category>
			<category>Joe</category>
			<category>Open Source</category>
			<category>Software Development</category>
			</item>
		<item>
			<title>JDO, or O/R</title>
			<link>http://radio.weblogs.com/0108103/2003/02/03.html#a127</link>
			<description>&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;STRONG&gt;JDO, or O/R&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class=blogbody&gt;
&lt;P&gt;So somebody pointed me to JDO. It seems to be a good replacement for our DAO layer. Map your objects to a DB without too much complexity. But I&apos;m quite hesitant: will it solve our performance problems? Will it be as easy to convert our application as it looks? Even worse: if we decide to go for JDO, do we need &lt;A href=&quot;http://java.sun.com/products/jdo/&quot;&gt;Sun&apos;s JDO spec&lt;/A&gt;, or is &lt;A href=&quot;http://castor.exolab.org/jdo.html&quot;&gt;Castor&apos;s&lt;/A&gt; better? Sun&apos;s spec doesn&apos;t seem to have a free implementation, which makes it riskier to invest in that option. I&apos;ve heard a lot of good of Castor, but it was about it&apos;s XML serialization. Are they as good in O/R mapping? I&apos;m looking into it, but real-life experience would be very welcome. I&apos;m kind of searching around in the dark, with a flashlight that only reveals positive points.[&lt;A href=&quot;http://blogs.cocoondev.org/tomk/archives/000720.html&quot;&gt;Feelings and Thoughts&lt;/A&gt;]&lt;/P&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;!--StartFragment --&gt;Despite the contravercy, JDO is actually a really awesome spec. If you can live with having to incorporate a byte code enhancer into your build process it offers a very clean and elegant solution with very minimal overhead on your code. If you are going for JDO it&apos;s best to hide all the javax.jdo stuff behind a simple facade as it&apos;s a bit convulated to get started with. &lt;BR&gt;&lt;BR&gt;The downside (and upside) to JDO is it&apos;s only good as the vendor implementation you choose to use. Unfortunately, most are no good - including the reference implementation. &lt;BR&gt;&lt;BR&gt;I can vouch for KODO though as it&apos;s a truely AWESOME implementation (the finest O/R tool I&apos;ve ever come across). It&apos;s a commercial implementation that&apos;s licensed quite reasonably on a per developer basis with a royalty free runtime. My favourite feature of KODO is the sensible defaults. In almost most cases all I need do to a class to make it persistent (and ensure the database schema is setup correctly) is add the @persist JavaDoc tag. KODO is very robust and scales wells (even in clusters). &lt;BR&gt;&lt;BR&gt;If you want an opensource tool, Hibernate is also a fine choice. Featureswise it matches KODO and is very flexible to work in a way that suits you best. The main drawback is that it is a bit more work to persist an object. &lt;/P&gt;
&lt;P dir=ltr&gt;Of course, life is simpler still if you avoid the relational database altogether :).&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0108103/2003/02/03.html#a127</guid>
			<pubDate>Mon, 03 Feb 2003 22:08:21 GMT</pubDate>
			<category>Java</category>
			<category>Joe</category>
			<category>Open Source</category>
			</item>
		<item>
			<title>Language of the year</title>
			<link>http://radio.weblogs.com/0108103/2003/01/30.html#a126</link>
			<description>&lt;P&gt;&lt;A href=&quot;http://www.pragmaticprogrammer.com/&quot;&gt;The Pragmatic Programmer&lt;/A&gt; suggests learning a new programming language (at least) once per year. Specifically, you should learn a language that changes the way you think about things - learning C# if you know Java doesn&apos;t count.&lt;/P&gt;
&lt;P&gt;Last year I decided to learn &lt;A href=&quot;http://www.ruby-lang.org/&quot;&gt;Ruby&lt;/A&gt; - a lot of people&amp;nbsp;told me how great it is. At first I thought it was pointless, but I eventually dived in. Man, I&apos;m glad I did! I&apos;ve since fallen in love with language.&lt;/P&gt;
&lt;P&gt;Ruby is an incredibly clean and concise loosly typed OO language - a much purer OO than Java&amp;nbsp;as everything is an object. It has some very nice features such as blocks/closures and the ability to create new types on the fly. But what it really taught me was the power of simplicity. Using Ruby I could solve problems quicker, with far less code which was easier to maintain and well designed. And the code looks so good to - zero fluff. Learning about simplicity was very much a theme for me last year.&lt;/P&gt;
&lt;P&gt;On top of that I had to get to grips with&amp;nbsp;maintaining loosly typed code. I never really mastered this in my Perl hacking days which is probably why I love Java so much. However, I&apos;ve&amp;nbsp;since become test-infected and cannot write a line of code that isn&apos;t test first (seriously - I can&apos;t - it&apos;s annoying sometimes!). The great thing about becoming test-infected is you end up with very very strongly typed code. Effective unit tests show many more problems than the compiler as they actually test the code does the right thing rather than just if it&apos;s syntacticly correct. And the tests&amp;nbsp;provide an excellent reference manual for your objects.&lt;/P&gt;
&lt;P&gt;So anyway, Ruby has changed the way I think and I really would write business applications in this language (if I could convince the clients I work for).&lt;/P&gt;
&lt;P&gt;But it&apos;s a new year now and I&apos;m looking for a new language. So what do I learn? &lt;/P&gt;
&lt;P&gt;Smalltalk has been recommended but I think I may have already learned some of it&apos;s most important lessons through Ruby.&lt;/P&gt;
&lt;P&gt;From chatting to colleagues, I&apos;ve narrowed the list down to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;LISP (with CLOS and MOP)&lt;/LI&gt;
&lt;LI&gt;Scheme&lt;/LI&gt;
&lt;LI&gt;Haskall&lt;/LI&gt;
&lt;LI&gt;Self&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;So, which one should it be? How will they change the way I think? What will you be learning this year?&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0108103/2003/01/30.html#a126</guid>
			<pubDate>Thu, 30 Jan 2003 21:11:46 GMT</pubDate>
			<category>.NET</category>
			<category>Java</category>
			<category>Open Source</category>
			<category>Software Development</category>
			</item>
		</channel>
	</rss>
