<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Alex's Adventures on the Infobahn - java</title><link href="https://www.bennee.com/~alex/" rel="alternate"></link><link href="https://www.bennee.com/~alex/blog/tag/java/feed" rel="self"></link><id>https://www.bennee.com/~alex/</id><updated>2010-02-12T11:18:00+00:00</updated><subtitle>the wanderings of a supposed digital native</subtitle><entry><title>Thoughts on Java</title><link href="https://www.bennee.com/~alex/blog/2010/02/12/thoughts-on-java/" rel="alternate"></link><published>2010-02-12T11:18:00+00:00</published><updated>2010-02-12T11:18:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2010-02-12:/~alex/blog/2010/02/12/thoughts-on-java/</id><summary type="html">&lt;p&gt;I've been spending the last week hacking around in Java. One of the components of the product I develop is the open source &lt;a class="reference external" href="http://www.opennms.org/wiki/Main_Page"&gt;OpenNMS&lt;/a&gt;. As I've mentioned before it's been lightly modified by myself to blend in better with our code mainly in the JSP department for it's web interface …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've been spending the last week hacking around in Java. One of the components of the product I develop is the open source &lt;a class="reference external" href="http://www.opennms.org/wiki/Main_Page"&gt;OpenNMS&lt;/a&gt;. As I've mentioned before it's been lightly modified by myself to blend in better with our code mainly in the JSP department for it's web interface. Last week I discovered I needed to make a slightly deeper change to the code to export some more data to it's scripting interface.&lt;/p&gt;
&lt;p&gt;While I was exploring the code base and scratching my head at some of the exceptions being thrown I thought I'd have yet another go at making my Java development environment a little more integrated than binding the build script to &amp;quot;C-c c&amp;quot;.&lt;/p&gt;
&lt;p&gt;So far I have a couple of observations about Java code. The first is that it never seems to do very much. As you navigate the code base you tend to find a lot of simple skeleton classes, usually working as simple adaptors between one framework and the next. Thanks to Java's strong support for &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Generic_programming"&gt;generics&lt;/a&gt; and &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Interface_(Java)"&gt;interfaces&lt;/a&gt; you often find yourself looking at a class wondering what else it might do. None of this is helped by Java's standard/deep/directory/naming/strategy/of/doom. My usual tools of a decent programmers editor and grep start to show their limitations. Java is a language that is designed to be serviced by a full &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Integrated_development_environment"&gt;IDE&lt;/a&gt; to help you make sense of the whole system.&lt;/p&gt;
&lt;p&gt;Having previously tried and failed to get &lt;a class="reference external" href="http://jdee.sourceforge.net/"&gt;JDEE&lt;/a&gt; working I thought I would capitulate and try &lt;a class="reference external" href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;. I blithely thought that given the fact it's the standard Java developers tool with a long development history it would Just Work (tm). I was to be sorely disappointed.&lt;/p&gt;
&lt;p&gt;I tried several different versions on both my home Gentoo machine as well as various PPA based versions on my work Ubuntu setup. A lot of times it failed to start up due to some Mozilla dependency issues and when I did finally get it started I couldn't get any of the plugins to install. The entire Eclipse stack is designed around the concept of plugins and it seems every Java framework comes with it's own additional plugin for Eclipse. Without the plugins I wasn't able to get a working build or any sort of source level debugging. Eventually I had to concede defeat and bin the IDE approach and return to some tedious grep work and piece together the structure of the software by hand so I could finally crank out what in the end was a &lt;a class="reference external" href="http://marc.info/?l=opennms-devel&amp;amp;m=126582776211008&amp;amp;w=2"&gt;fairly simple patch&lt;/a&gt;. I doubt I shall return to Eclipse.&lt;/p&gt;
&lt;p&gt;I did have a brief tinker with JDEE which at least installed better from it's SVN repo (needing a one line patch). However the documentation is a little sparse on how to import an existing large project into it's view of the world. Annoyingly potentially useful links like the FAQ referenced on the &lt;a class="reference external" href="http://jdee.sourceforge.net/"&gt;main site&lt;/a&gt; lead to &lt;a class="reference external" href="http://sunsite.auc.dk/fom/jde/cache/1.html"&gt;dead ends&lt;/a&gt;. I never got to the point of seeing if I had a working Java &lt;a class="reference external" href="http://www.emacswiki.org/emacs/GrandUnifiedDebugger"&gt;GUD&lt;/a&gt; integration. I hope to revisit JDEE in the future when I'm a little less pressed for time at work. It's hard to work up the enthusiasm for plumbing in support for a language you never intend to use for fun in your own time.&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="eclipse"></category><category term="emacs"></category><category term="java"></category><category term="jdee"></category><category term="opennms"></category></entry><entry><title>Context, Attributes and JSP</title><link href="https://www.bennee.com/~alex/blog/2008/07/10/context-attributes-and-jsp/" rel="alternate"></link><published>2008-07-10T20:02:00+01:00</published><updated>2008-07-10T20:02:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-07-10:/~alex/blog/2008/07/10/context-attributes-and-jsp/</id><summary type="html">&lt;p&gt;One thing that is rapidly becoming clear is a lot of different concepts get mixed together when you start playing with JSP. On the face of it it's a simple model, your JSP code get built into a Java class (of type servlet) which is a combination on normal Java …&lt;/p&gt;</summary><content type="html">&lt;p&gt;One thing that is rapidly becoming clear is a lot of different concepts get mixed together when you start playing with JSP. On the face of it it's a simple model, your JSP code get built into a Java class (of type servlet) which is a combination on normal Java code and JSP mark up which gets converted into Java when the page is loaded. At any point in your HTML you can escape back into Java code, do calculations, execute loops, generally compute things. However that approach can get very messy because you end up spreading logic all through your presentational HTML. This is why using an &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;MVC&lt;/a&gt; pattern is so encouraged. Put all your logic and complex code at the top of the file and then display page expanding the odd attribute here and there.&lt;/p&gt;
&lt;p&gt;However I don't think I've fully grasped whats going on behind the scenes. It doesn't help with &lt;a class="reference external" href="http://jetty.mortbay.com/jetty-6/"&gt;Jetty&lt;/a&gt; I can't find where the intermediate Java source code is generated. Trying to understand whats going on when I'm not familiar with the cryptic backtraces has been frustrating to say the least.&lt;/p&gt;
&lt;p&gt;Now I'm a little confused as to what exactly happens with the ${var} notation in terms of the java code generated. My earlier &lt;a class="reference external" href="http://www.bennee.com/~alex/news.php?wl_mode=more&amp;amp;wl_eid=1070"&gt;code&lt;/a&gt; has mutated to a list with a custom class. Hence I have had to generate the following:&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;&amp;lt;c:forEach &lt;span class="pre"&gt;var=&amp;quot;entry&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;items=&amp;quot;${model.jvmMemInfo}&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;varStatus=&amp;quot;status&amp;quot;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // This is complex, I'm not sure how you can use ${} syntax on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // arbitrary objects to expose the values, hence this bit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // of inline java. I'm open to elucidation on how you would do so&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NameValuePair data = (NameValuePair) &lt;span class="pre"&gt;pageContext.getAttribute(&amp;quot;entry&amp;quot;);&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%= data.name %&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%= data.value %&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/c:forEach&amp;gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;However there are &lt;a class="reference external" href="http://www.google.com/codesearch?hl=en&amp;amp;q=show:TrTtpLmB-cE:ZBsQHHkeTcM:TrTtpLmB-cE&amp;amp;sa=N&amp;amp;ct=rd&amp;amp;cs_p=http://dddjedi.googlecode.com/svn&amp;amp;cs_f=trunk/buyingbook/web/list.jsp&amp;amp;start=1"&gt;examples on the net&lt;/a&gt; showing arbitrary classes exposing their contents with this simple ${data.name} type syntax. I just couldn't get it to work. My NameValuePair class isn't much different from their &lt;a class="reference external" href="http://www.google.com/codesearch?hl=en&amp;amp;q=BookOrderData+show:D4EVt5aRC54:b7tWwGGm4c8:D4EVt5aRC54&amp;amp;sa=N&amp;amp;cd=1&amp;amp;ct=rc&amp;amp;cs_p=http://dddjedi.googlecode.com/svn&amp;amp;cs_f=trunk/buyingbook/test/model/BookOrderData.java"&gt;one&lt;/a&gt;. I suspect this would be a lot easier to work out if I could see the generated applet.&lt;/p&gt;
&lt;p&gt;Any Java web monkeys got experience with Jetty or can tell me what piece of obviousness I have missed?&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="java"></category><category term="jsp"></category></entry><entry><title>JSP tags</title><link href="https://www.bennee.com/~alex/blog/2008/07/08/jsp-tags/" rel="alternate"></link><published>2008-07-08T14:56:00+01:00</published><updated>2008-07-08T14:56:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-07-08:/~alex/blog/2008/07/08/jsp-tags/</id><summary type="html">&lt;p&gt;Arrggh. I've just wasted the best part of half a day scratching my head as to why I was unable to iterate through a Java HashMap in a JSP page:&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;&amp;lt;c:forEach &lt;span class="pre"&gt;var=&amp;quot;entry&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;items=&amp;quot;${model.jvmInfo}&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;varStatus=&amp;quot;status&amp;quot;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${entry.key}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${entry.value}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/c …&lt;/tt&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Arrggh. I've just wasted the best part of half a day scratching my head as to why I was unable to iterate through a Java HashMap in a JSP page:&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;&amp;lt;c:forEach &lt;span class="pre"&gt;var=&amp;quot;entry&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;items=&amp;quot;${model.jvmInfo}&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;varStatus=&amp;quot;status&amp;quot;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${entry.key}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${entry.value}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/c:forEach&amp;gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;It would of been immediately clear had I looked at the resulting HTML the page was echoing. Note to self, always check you have explicitly included the &lt;a class="reference external" href="http://en.wikipedia.org/wiki/JavaServer_Pages_Standard_Tag_Library"&gt;taglib&lt;/a&gt; you are planning to use.&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="java"></category><category term="jsp"></category></entry><entry><title>Too much perl, the irony</title><link href="https://www.bennee.com/~alex/blog/2008/06/24/too-much-perl-the-irony/" rel="alternate"></link><published>2008-06-24T16:42:00+01:00</published><updated>2008-06-24T16:42:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-06-24:/~alex/blog/2008/06/24/too-much-perl-the-irony/</id><summary type="html">&lt;p&gt;I got my current job based on my experience with C/C++ and GTK. So far most of the code I've been writing has been perl and Java. Some times I think I'm writing too much perl:&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;# Quick and dirty match&amp;nbsp; for IP (but without the tedious address&amp;nbsp; # verification)&amp;nbsp;&amp;nbsp;&amp;nbsp; my …&lt;/tt&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;I got my current job based on my experience with C/C++ and GTK. So far most of the code I've been writing has been perl and Java. Some times I think I'm writing too much perl:&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;# Quick and dirty match&amp;nbsp; for IP (but without the tedious address&amp;nbsp; # verification)&amp;nbsp;&amp;nbsp;&amp;nbsp; my &lt;span class="pre"&gt;$ip_match=qr#([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})#i;&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;The tedious address verification is what I laboured through on one of my Google phone interviews. I'm still not convinced by the argument of doing within the regex, and it will make it the regex so much more ugly and hard to follow. I skipped it here because the data is already verified and all I really need to differentiate from is [d]*.&lt;/p&gt;
</content><category term="geek"></category><category term="java"></category><category term="perl"></category></entry><entry><title>Open Source Ripping</title><link href="https://www.bennee.com/~alex/blog/2005/09/01/open-source-ripping/" rel="alternate"></link><published>2005-09-01T12:27:00+01:00</published><updated>2005-09-01T12:27:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2005-09-01:/~alex/blog/2005/09/01/open-source-ripping/</id><summary type="html">&lt;p&gt;So it came to pass I was chatting to Andy last night and I noticed he was typing the CD sleeve details for the CD being ripped. I was surprised as thanks to the magic of &lt;a class="reference external" href="http://www.freedb.org/"&gt;FreeDB&lt;/a&gt; every CD I've ripped in the last few years has automagically had its …&lt;/p&gt;</summary><content type="html">&lt;p&gt;So it came to pass I was chatting to Andy last night and I noticed he was typing the CD sleeve details for the CD being ripped. I was surprised as thanks to the magic of &lt;a class="reference external" href="http://www.freedb.org/"&gt;FreeDB&lt;/a&gt; every CD I've ripped in the last few years has automagically had its details filled in and tagged&lt;sup&gt;*&lt;/sup&gt;. So cue a quick look around the application Andy was using to find the settings for the CD lookup and see if we can set it to use the freedb database. Unfortunately the CD lookup option was a tick box (do, or do not, there is no alternative). Whatever the application did it was hidden from us.&lt;/p&gt;
&lt;p&gt;Now of course I could have just suggested Andy run Linux where there are a range of rippers&lt;sup&gt;**&lt;/sup&gt; ready to run. Experience has taught me people don't want to change OSes, no matter how much I point out the benefits of open systems. However more and more FOSS software is available for the Windows platform so a quick &lt;a class="reference external" href="http://freshmeat.net/browse/118/?orderby=&amp;amp;filter_scope=230"&gt;search of freshmeat&lt;/a&gt; pointed us at &lt;a class="reference external" href="http://jtagger.sourceforge.net/jripper/"&gt;jRipper&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The installation&lt;sup&gt;***&lt;/sup&gt; didn't go too well. First we needed the latest Java before we could proceed and then when actually running the app showed its rough edges by screwing up some of the shortcuts and not making it very clear how to configure the ripping drive. This is understandable as it is basically tuned to running on Linux. However it doesn't give a good impression to people running it on other systems. Luckily having experience with the tools I was able to eek out the settings Andy needed and we set it off ripping. Time will tell, now the app is set up, if Andy will find his new FOSS application superior to the commercial competition.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;&lt;sup&gt;*&lt;/sup&gt;Occasionally I use the excellent &lt;a class="reference external" href="http://easytag.sourceforge.net/"&gt;EasyTag&lt;/a&gt; to mass clean up tags. Its pattern matching abilities make re-tagging track names that are Track/Artist on compilation albums a breeze.&lt;/div&gt;
&lt;div class="line"&gt;&lt;sup&gt;**&lt;/sup&gt;For the record I use &lt;a class="reference external" href="http://nostatic.org/grip/"&gt;Grip&lt;/a&gt; to rip tracks into 160kbs &lt;a class="reference external" href="http://www.vorbis.com/"&gt;Oggs&lt;/a&gt;.&lt;/div&gt;
&lt;div class="line"&gt;&lt;sup&gt;***&lt;/sup&gt;Since I'm used to &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Software_package"&gt;packaged apps&lt;/a&gt; I find the concept of individual installers, each with their own little foibles and idiosyncrasies rather archaic. On all my systems installing a package is generally a single command line which automagically pulls in required dependencies as needed. As the software is all installed via the package management system un-installation isn't the gamble I recall from my Windows days. And don't get me started on how easy it is to audit every executable on my system and know where it came from.&lt;/div&gt;
&lt;/div&gt;
</content><category term="geek"></category><category term="freedb"></category><category term="java"></category><category term="ripping"></category></entry></feed>