<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1824916332181347785</id><updated>2011-10-15T17:20:08.124+01:00</updated><category term='Python'/><category term='XML Technologies'/><category term='Domain Driven Design'/><category term='XSD'/><category term='Java Technology'/><category term='OpenESB'/><category term='LinuxMint'/><category term='Healthcare Informatics'/><category term='SOA'/><category term='Web 2'/><category term='osgi'/><category term='XSL-FO'/><category term='Aside'/><category term='sun'/><category term='Solaris'/><category term='Enterprise Integration'/><category term='Camel'/><category term='Blogs'/><category term='Wubi'/><category term='linux'/><category term='Internet'/><category term='PDF'/><category term='CLR and .NET'/><category term='HL7'/><category term='Music'/><category term='Web Services'/><category term='holiday'/><category term='OpenOffice'/><category term='XML'/><category term='Workflow'/><category term='Java'/><category term='NetBeans'/><category term='Groovy'/><category term='Google'/><category term='Bletchley'/><category term='Web Technology'/><category term='C#'/><category term='software architecture'/><category term='climbing'/><category term='Ruby'/><category term='software'/><category term='healthcare'/><category term='HAPI'/><category term='Eclipse'/><category term='microsoft'/><category term='Tools'/><category term='Ubuntu'/><category term='Uncategorized'/><category term='Home and Family'/><category term='Xubuntu'/><title type='text'>Roger Searjeant's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default?start-index=101&amp;max-results=100'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>102</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-8446424157701189673</id><published>2011-04-02T22:20:00.002+01:00</published><updated>2011-04-02T22:21:42.347+01:00</updated><title type='text'>Goodbye Blogger - hello WordPress.com</title><content type='html'>Blogger just isn't an attractive platform any longer. Development appears to have all but ceased, the interface isn't great, and the integration with other Google apps is neither good enough nor important enough to me to keep me here.&lt;br /&gt;&lt;br /&gt;One reason I blog less than I want to is that displaying source code in Blogger is much harder than it should be. There are instructions available for integrating the excellent &lt;a href="http://alexgorbatchev.com/SyntaxHighlighter/"&gt;Syntax Highlighter&lt;/a&gt; from&amp;nbsp;Alex Gorbatchev, but frankly it's more fussy than it should be. &amp;nbsp;Google of all people should be making this easy.&lt;br /&gt;&lt;br /&gt;So this blog is moving to &lt;a href="http://searjeant.wordpress.com/"&gt;searjeant.wordpress.com&lt;/a&gt; from today. &amp;nbsp;Barely anyone reads it, so it hardly matters, but for anyone who cares, now you know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-8446424157701189673?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/8446424157701189673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2011/04/goodbye-blogger-hello-wordpresscom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8446424157701189673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8446424157701189673'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2011/04/goodbye-blogger-hello-wordpresscom.html' title='Goodbye Blogger - hello WordPress.com'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1165726173243009738</id><published>2011-03-28T23:01:00.001+01:00</published><updated>2011-03-29T22:23:03.877+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>JVM Language Futures - Groovy++, Mirah, Gosu ...</title><content type='html'>Interesting times, with so much happening in the JVM language space. &amp;nbsp;It's amusing, too, to see static typing making a comeback via some of the very same projects which helped to champion the cause of dynamic languages and duck-typing.&lt;br /&gt;&lt;br /&gt;The three I've noticed all look promising and merit a bit of investigation. &amp;nbsp;In order of importance (IMO):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.mirah.org/"&gt;Mirah&lt;/a&gt;. &amp;nbsp;From Charles Nutter, who created JRuby, so this one has probably the best pedigree. &amp;nbsp;I don't much like Ruby syntax, but I absolutely agree with the guiding principles.&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/groovypptest/wiki/Welcome"&gt;Groovy++&lt;/a&gt;. &amp;nbsp;I really like Groovy (and Grails). The Groovy++ project goals overlap to a degree with Mirah, mostly in terms of static typing and achieving native Java runtime performance.&lt;/li&gt;&lt;li&gt;&lt;a href="http://gosu-lang.org/intro.shtml"&gt;Gosu&lt;/a&gt;. This one is interesting because it was created by a company team to meet their particular needs and not primarily to invent a new language.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;These three languages have quite different starting points but appear to share broadly similar goals.&amp;nbsp;Essentially, they are trying to obtain&amp;nbsp;as many of the benefits of a dynamic language as possible (leaner code, less ceremony) while at the same time carrying as few of the disadvantages as possible (no types = poor tool support, dynamic method dispatch = relatively slow). That's a difficult sweet-spot to hit.&lt;br /&gt;&lt;br /&gt;Although I ranked these three in terms of importance, I actually think Groovy++ may have the best chance of getting into production code first because it's more mature than Mirah and has the great benefit of being an extension to something which already exists and is successful and established. &amp;nbsp;I'd love to see Groovy++ adopted officially and absorbed into the main Groovy roadmap. &amp;nbsp;Being able to add static typing just where you want (and leaving it out where you don't), getting traits into the language and getting better runtime performance are surely strong arguments in favour.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1165726173243009738?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1165726173243009738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2011/03/jvm-language-futures-groovy-mirah-gosu.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1165726173243009738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1165726173243009738'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2011/03/jvm-language-futures-groovy-mirah-gosu.html' title='JVM Language Futures - Groovy++, Mirah, Gosu ...'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2267793271678373687</id><published>2011-01-01T22:06:00.000Z</published><updated>2011-01-01T22:06:52.225Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wubi'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Xubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Xubuntu desktop</title><content type='html'>I've lost count of the number of false-starts I have had with Linux in the last few years. &amp;nbsp;I really do want to settle on a Linux-based desktop for a number of reasons: zero capital cost, no licensing&amp;nbsp;restrictions&amp;nbsp;or 'product activation' steps and everything appears to run faster than on Windows. &amp;nbsp;Most of my development work is on the JVM platform (&lt;a class="zem_slink" href="http://www.scala-lang.org/" rel="homepage" title="Scala (programming language)"&gt;Scala&lt;/a&gt;, &lt;a class="zem_slink" href="http://groovy.codehaus.org/" rel="homepage" title="Groovy (programming language)"&gt;Groovy&lt;/a&gt; and Java) so I am not dependent on Windows. &amp;nbsp;I should add that I have no time for the anti-Microsoft movement: I still think Windows (especially 7) is a very good desktop OS and it's likely to remain my default fallback for a while. I'm still not completely comfortable if I can't boot back into Windows if Linux dies (or more likely, I screw it up) and there are still a few things I use which don't yet have Linux builds or good alternatives.&lt;br /&gt;&lt;br /&gt;With &lt;a class="zem_slink" href="http://www.xubuntu.org/" rel="homepage" title="Xubuntu"&gt;Xubuntu&lt;/a&gt; 10.10 I'm daring to believe that I might have a stable enough platform to be able to make a bigger commitment to Linux, certainly as a development desktop. I've been running it alongside Windows 7, using the &lt;a class="zem_slink" href="http://wubi-installer.org/" rel="homepage" title="Wubi (Ubuntu installer)"&gt;Wubi installer&lt;/a&gt;. &amp;nbsp;This is by far the best way to experiment with Linux: you get very close to the experience of a 'proper' installation (I don't think I have been able to detect the virtual disc performance hit) and you don't disturb Windows or the drive partitioning in any way.&lt;br /&gt;&lt;br /&gt;I have two reasons for wanting to move on from a Wubi install:&lt;br /&gt;1) Virtual drive size. &amp;nbsp;I went with the default (17GB or so) and eventually this will probably be an issue.&lt;br /&gt;2) You cannot use &lt;a href="http://www.geekconnection.org/remastersys/"&gt;Remastersys&lt;/a&gt; on a Wubi installation. &amp;nbsp;To use this handy utility, you need a real installation. &amp;nbsp;I know this, because I trashed my first Wubi installation when I tried.&lt;br /&gt;&lt;br /&gt;Apart from creating a complete backup of your installation, &lt;a class="zem_slink" href="http://remastersys.sourceforge.net/" rel="homepage" title="Remastersys"&gt;Remastersys&lt;/a&gt; can also do something else: generate a new master ISO image of your installed OS, containing all the configuration changes you have made, so you can walk up to another machine and just deploy it. &amp;nbsp;That's worth having, because I don't want to have to go through the process of installing my stuff all over again (and waiting for the upgrades) and I will want to standardise the development desktop we use via a deployment image.&lt;br /&gt;&lt;br /&gt;Happily, there is a way to move your Wubi Ubuntu to a separate partition, turning it into a full installation. &amp;nbsp;&lt;a href="http://ubuntuforums.org/showthread.php?t=1519354"&gt;This thread&lt;/a&gt; on the forum provides a really good step-by-step guide, complete with downloadable script. &amp;nbsp;I plan to try this but only after I have made a drive image of my current Windows installation (because if I don't, then I know it will go badly wrong).&lt;br /&gt;&lt;br /&gt;So what's left? &amp;nbsp;What are the things I still cannot do on Linux? &amp;nbsp;The final barriers to a complete switch? &amp;nbsp;There aren't many:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Some digital devices, notably my Sony Walkman, just don't have drivers or companion software. &amp;nbsp;With the Walkman, the problem is Sony's truly dreadful SonicStage software. &amp;nbsp;Much as I hate it, it's the only way to convert and sync stuff to the device. &amp;nbsp;When I last looked, there were a few poor-quality tools which claim to work with the Walkman but when I tried them they messed-up the device's track database and filesystem. Not going that way again.&lt;/li&gt;&lt;li&gt;My Vodafone USB wireless broadband device. &amp;nbsp;There's a Windows driver for this, but no Linux software, as far as I know. &amp;nbsp;&lt;/li&gt;&lt;li&gt;VISIO. &amp;nbsp;I do need a decent 2D drawing / diagramming tool. &amp;nbsp;I have tried &lt;a href="http://live.gnome.org/Dia"&gt;Dia&lt;/a&gt;, but I just don't like it and development appears to be stalled. &amp;nbsp;In the past I have almost ignored &lt;a href="http://www.openoffice.org/product/draw.html"&gt;OpenOffice Draw&lt;/a&gt; (because I have Visio), but I think Draw may be just good enough, if I make a bit of effort with it.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;There are a few other minor things, but these are the three I would pick as most irritating. &amp;nbsp;To fix (1), some might suggest I buy a different media player! &amp;nbsp;Maybe, but this is really just an example of a more general issue which only the passing of time will solve: manufacturers and software publishers supporting deployment to non-Microsoft environments. &amp;nbsp;And there's WINE of course: this does solve some problems, but unsurprisingly not everything runs under WINE (SonicStage, for example) and even the things which do run, look pretty awful.&lt;br /&gt;&lt;br /&gt;Xubuntu (and I think the plain Ubuntu distro) also appears to have removed another barrier to adoption which I just could not work around before: poor font rendering. &amp;nbsp;When you spend so much time reading, editing and writing on-screen text, fonts (and rendering) really matter. &amp;nbsp;In the past, Linux font rendering was truly dreadful: inconsistent across applications, and never very good in any of them. &amp;nbsp;That seems to be over. &amp;nbsp;Java applications still leave something to be desired, but that's down to Java, not Linux.&lt;br /&gt;&lt;br /&gt;Cautious optimism, then. &lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"&gt;&lt;img alt="Enhanced by Zemanta" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=333001b1-aaa3-47b5-b775-c3b12b46f283" style="border: none; float: right;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2267793271678373687?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2267793271678373687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2011/01/xubuntu-desktop.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2267793271678373687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2267793271678373687'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2011/01/xubuntu-desktop.html' title='Xubuntu desktop'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-8066290714281140280</id><published>2010-11-11T15:16:00.001Z</published><updated>2010-11-11T15:16:05.212Z</updated><title type='text'>Keith Douglas. Poet, Tank Commander.</title><content type='html'>&lt;p&gt;It’s Armistice Day here in the UK, an appropriate day for BBC Four to air &lt;a href="http://www.bbc.co.uk/programmes/b00vv0cr"&gt;a programme about Keith Douglas&lt;/a&gt;, a poet and a tank-commander during WW2.&lt;/p&gt;  &lt;p&gt;I stumbled on a poem of his some years ago, quoted in a newspaper article. It made such an impression that I tore it out of the page and kept it, vowing to find out more about the author.&amp;#160; The poem I read that day was called “How to Kill”.&amp;#160; There is a &lt;a href="http://www.guardian.co.uk/stage/2005/may/28/theatre1"&gt;Guardian article about Keith Douglas&lt;/a&gt;, worth reading in its own right, which includes that poem.&amp;#160; I’ve reproduced it, below: I do hope that doesn’t get me into copyright trouble.&lt;/p&gt;  &lt;p&gt;Keith Douglas also wrote a book of his experiences in the Western Desert called “&lt;a href="http://www.faber.co.uk/work/alamein-to-zem-zem/9780571241941/"&gt;Alamein to Zem Zem&lt;/a&gt;”, written while on leave in the UK prior to taking part in the D-Day landings in June 1944.&amp;#160; I loved this book.&amp;#160; It was out of print for a long time but is available, reprinted by the excellent &lt;a href="http://www.faber.co.uk/faberfinds/"&gt;Faber Finds&lt;/a&gt; imprint.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Now in my dial of glass appears&lt;/p&gt;    &lt;p&gt;the soldier who is going to die.&lt;/p&gt;    &lt;p&gt;He smiles, and moves about in ways&lt;/p&gt;    &lt;p&gt;his mother knows, habits of his.&lt;/p&gt;    &lt;p&gt;The wires touch his face: I cry&lt;/p&gt;    &lt;p&gt;NOW. Death like a familiar, hears&lt;/p&gt;    &lt;p&gt;and look, has made a man of dust&lt;/p&gt;    &lt;p&gt;of a man of flesh. This sorcery&lt;/p&gt;    &lt;p&gt;I do. Being damned, I am amused&lt;/p&gt;    &lt;p&gt;to see the centre of love diffused&lt;/p&gt;    &lt;p&gt;and the waves of love travel into vacancy.&lt;/p&gt;    &lt;p&gt;How easy it is to make a ghost.&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-8066290714281140280?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/8066290714281140280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2010/11/keith-douglas-poet-tank-commander.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8066290714281140280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8066290714281140280'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2010/11/keith-douglas-poet-tank-commander.html' title='Keith Douglas. Poet, Tank Commander.'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-9191781835902849902</id><published>2010-09-05T22:16:00.001+01:00</published><updated>2010-09-05T22:16:15.535+01:00</updated><title type='text'>GMail Priority Inbox – at last</title><content type='html'>&lt;p&gt;Life without &lt;a href="http://mail.google.com/"&gt;GMail&lt;/a&gt; (or &lt;a href="http://docs.google.com"&gt;Google Docs&lt;/a&gt;, or &lt;a href="http://www.google.com/reader"&gt;Reader&lt;/a&gt; or &lt;a href="http://calendar.google.com"&gt;Calendar&lt;/a&gt;, for that matter) would be difficult to adjust to, but for a long time I’ve wanted the ability to prioritise the inbox contents, if only to ensure that unread items (however old they are) can be forced to the top of the pile.&lt;/p&gt;  &lt;p&gt;Well, they’ve obviously read my mind (didn’t I un-tick the ‘Share my thoughts’ privacy option? Oh well …) because I’ve just been given the &lt;a href="http://mail.google.com/mail/help/priority-inbox.html"&gt;Priority Inbox Beta&lt;/a&gt; option.&amp;#160; First impressions are very good.&amp;#160; You can train it to recognize what’s important (and not) to you: we’ll see how well that works out, but just having unread stuff and starred items grouped together is a tremendous plus.&lt;/p&gt;  &lt;p&gt;Can’t think why anyone would want to use any other email system.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-9191781835902849902?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/9191781835902849902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2010/09/gmail-priority-inbox-at-last.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/9191781835902849902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/9191781835902849902'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2010/09/gmail-priority-inbox-at-last.html' title='GMail Priority Inbox – at last'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1743031549662580657</id><published>2010-08-30T23:58:00.000+01:00</published><updated>2010-08-30T23:58:31.543+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans Platform 6.9 Developers Guide</title><content type='html'>I've been asked to review the &lt;a href="https://www.packtpub.com/netbeans-platform-6-9-developers-guide/book"&gt;NetBeans Platform 6.9 Developers Guide&lt;/a&gt; by  Packt Publishing.&amp;nbsp; This is a book which I was considering buying in any case, so it's nice to be given a copy, even if it is the PDF rather than the paper.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;I've bought quite a few PDF e-books in the past, mostly from Manning, usually because I just wanted the information right &lt;i&gt;now&lt;/i&gt;, but also because having the PDF on the laptop weighs nothing.&amp;nbsp; Commuting and heavy technical books don't mix.&amp;nbsp; However, I do prefer paper: as soon as a PDF book becomes important to me, I buy the physical book.&lt;br /&gt;&lt;br /&gt;NetBeans is easily my preferred Java / Groovy IDE, and the NetBeans platform has become even more compelling recently with OSGi support and Maven archetypes for NB modules.&amp;nbsp; I have had a copy of the original &lt;a href="http://netbeans.org/books/rcp.html"&gt;NetBeans Rich Client Programming&lt;/a&gt; book published by Sun for more than a year, but to be honest I found the online resources, sample projects and &lt;a href="http://platform.netbeans.org/tutorials/nbm-10-top-apis.html"&gt;Geertjan's tutorial screencasts&lt;/a&gt; rather more helpful than the book!&amp;nbsp; As I went through the Sun book, I remember thinking that I would probably get a lot more out of it once I knew how to create a NB platform application.&amp;nbsp; I think it's one of those books.&lt;br /&gt;&lt;br /&gt;So I am very much looking forward to getting stuck into the Packt book.&amp;nbsp; From a first look at the Preface and chapter summaries it appears to take an API-focused approach, dealing with 'top-10' in much the way Geertjan's screencasts do, which is a good sign because I found they worked very well. The book essentially builds a complete platform application as it goes along, so I'm hoping to see the authors tie together the various ideas using the application as the binding context.&lt;br /&gt;&lt;br /&gt;I'll post my review here, but I'm on vacation so it will be a week or two yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1743031549662580657?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1743031549662580657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2010/08/netbeans-platform-69-developers-guide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1743031549662580657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1743031549662580657'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2010/08/netbeans-platform-69-developers-guide.html' title='NetBeans Platform 6.9 Developers Guide'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-4639414810874281433</id><published>2010-04-09T21:24:00.000+01:00</published><updated>2010-04-09T21:24:09.314+01:00</updated><title type='text'>Windows 7</title><content type='html'>It's not often that I go out of my way to praise something from Microsoft, but I have been using Windows 7 Professional for a week or so now, and I must say this is easily the best desktop operating system I have ever used.&lt;br /&gt;&lt;br /&gt;I bought the upgrade edition, but used the Custom Installation option, wiping everything (in my case, Vista and Ubuntu) from my hard drive. &amp;nbsp;The installation was spectacularly uneventful - it just worked. &amp;nbsp;I didn't time it, but it can't have been more than 30 minutes or so from start to finish: and no issues.&lt;br /&gt;&lt;br /&gt;I haven't explored all the features yet (e.g. Libraries), but I'm truly impressed with just the basics - the whole taskbar implementation, the new tray/notification area, the clean desktop - and the fact that it feels much faster than Vista, though I've absolutely no hard evidence to back that yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-4639414810874281433?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/4639414810874281433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2010/04/windows-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4639414810874281433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4639414810874281433'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2010/04/windows-7.html' title='Windows 7'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-9214215005822435223</id><published>2010-03-15T21:55:00.000Z</published><updated>2010-03-15T21:55:41.219Z</updated><title type='text'>Ophcrack NTLM Cracker</title><content type='html'>Not sure how concerned we should be about &lt;a href="http://ophcrack.sourceforge.net/"&gt;this&lt;/a&gt;, but &lt;a href="https://www.objectif-securite.ch/en/products.php"&gt;the demo&lt;/a&gt; is pretty impressive: I used PasswordSafe to generate a reasonably good password (12 characters, mixed upper/lower case, digits and symbols) and Ophcrack cracked it in a few seconds. &amp;nbsp;The live CD should disturb anyone using standard XP password security.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-9214215005822435223?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/9214215005822435223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2010/03/ophcrack-ntlm-cracker.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/9214215005822435223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/9214215005822435223'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2010/03/ophcrack-ntlm-cracker.html' title='Ophcrack NTLM Cracker'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1156642746179623044</id><published>2009-07-02T15:11:00.001+01:00</published><updated>2009-07-02T15:11:34.608+01:00</updated><title type='text'>HAPI 0.6 Released</title><content type='html'>&lt;p&gt;Anyone involved in &lt;a href="http://en.wikipedia.org/wiki/Health_Level_7"&gt;HL7&lt;/a&gt; processing should be aware of the &lt;a href="http://hl7api.sourceforge.net/"&gt;HL7 API (‘HAPI’) project&lt;/a&gt;.&amp;#160; HAPI is a set of Java libraries for parsing, unparsing and manipulating HL7 messages, plus some communication primitives for handling &lt;a href="http://en.wikipedia.org/wiki/Health_Level_7#MLLP"&gt;MLLP&lt;/a&gt; communication.&amp;#160; &lt;/p&gt;  &lt;p&gt;This was started some time ago by Bryan Tripp at the &lt;a href="http://www.uhn.ca/index.htm"&gt;University Health Network&lt;/a&gt; in Canada, but recently the work of maintaining the project and pushing forward with development has been taken on by James Agnew.&lt;/p&gt;  &lt;p&gt;Version 0.6 brings support for HL7 v2.5.1 and v2.6, and separate jars for the different HL7 versions. James’ announcement also hinted he’s looking at significant performance improvements in future releases. This is great news: thanks are due to James for his continued good work.&lt;/p&gt;  &lt;p&gt;If you’re trying to find the bits, note that the download link isn’t in the HAPI site sidebar – go to the &lt;a href="http://hl7api.sourceforge.net/using_hapi.html"&gt;Using HAPI / Developing page&lt;/a&gt;, and you’ll find the link to the &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=38899"&gt;Sourceforge download page&lt;/a&gt; there.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3b22c9cc-5070-4561-a45b-2c97f66206dc" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/HL7" rel="tag"&gt;HL7&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1156642746179623044?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1156642746179623044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/07/hapi-06-released.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1156642746179623044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1156642746179623044'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/07/hapi-06-released.html' title='HAPI 0.6 Released'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-284344897573681930</id><published>2009-06-13T12:18:00.001+01:00</published><updated>2009-06-13T12:18:49.562+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Groovy and Language Design</title><content type='html'>&lt;p&gt;I was a little surprised to read Elliotte Rusty Harold’s &lt;a href="http://www.cafeaulait.org/#May_14_2009_23130"&gt;recent comments on Groovy&lt;/a&gt;, calling it the ‘Edsel of programming languages’.&amp;#160; It’s an amusing comment, but pejorative and challenging enough to motivate a response.&amp;#160; &lt;/p&gt;  &lt;p&gt;The past few years have been interesting and fruitful from a programming language perspective: Ruby, Groovy, Scala, F#, and the evolution of C# are those which spring to mind.&lt;/p&gt;  &lt;p&gt;Many of these developments have been about finding a way to push functional-programming idioms (lambda expressions, currying) or dynamic language features (type inference, closures) into well-established imperative languages like C# and Java. I think the results have been mixed: imperative languages are essentially assignment-based, not expression-based, so you end up with a hybrid which, from a language syntax point of view, is neither one thing nor another and arguably suffers as a result.&amp;#160; But it’s difficult to argue that these efforts don’t deliver real positive utility.&lt;/p&gt;  &lt;p&gt;An example of this is how C# has evolved support for lambda expressions, expression trees and implicit typing. First (in v1) we had simple delegates, then (in v2) we were able to drop the delegate syntax and declare anonymous methods inline, and finally (in v3) we can use a compact &lt;a href="http://msdn.microsoft.com/en-us/library/ms364047(vs.80).aspx#cs3spec_topic4"&gt;lambda syntax&lt;/a&gt; which looks a bit like &lt;a href="http://en.wikipedia.org/wiki/ML_(programming_language)"&gt;ML&lt;/a&gt;. But because all this has been added to what remains fundamentally a statically-typed, compiled language, you still have to put up with all the nasty explicit declaration of types (and type parameters) on the l.h.s. of every assignment, just to keep the compiler happy.&amp;#160; So the final step was to introduce the &lt;a href="http://msdn.microsoft.com/en-us/library/ms364047(vs.80).aspx#cs3spec_topic2"&gt;var&lt;/a&gt; keyword and bring implicit typing into the language. Not dynamic typing, just implicit typing: we get to trim away the ugly declarations but keep the compile-time type safety.&amp;#160; &lt;/p&gt;  &lt;p&gt;The confluence of these developments enabled things like &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx"&gt;LINQ&lt;/a&gt;: blending a query sublanguage into the primary language syntax. The best exposition of this I have read is by Ian Griffiths, in his excellent post on &lt;a href="http://www.interact-sw.co.uk/iangblog/2005/09/30/expressiontrees"&gt;expression trees&lt;/a&gt;: see the example code just over half-way down, under the section ‘Expression Trees, LINQ, Deferred Queries, and Databases’. It’s all so superficially appealing – just look at the motivating use-case in Ian’s post. But still there’s a small, nagging voice in my head saying this isn’t quite right... &lt;/p&gt;  &lt;p&gt;It feels as if we’re trying to pretend there’s no boundary (or intermediary) between the program text and the resource we’re querying. This is similar to the way we tried to pretend that remote procedure calls were really local calls in the old (and now largely discredited) distributed programming models such as CORBA and DCOM. Recall the &lt;a href="http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing"&gt;fallacies of distributed computing&lt;/a&gt; and the &lt;a href="http://msdn.microsoft.com/en-gb/magazine/cc164026.aspx#S1"&gt;tenets of SOA&lt;/a&gt;: these are essentially warnings about the dangers of implicit or flawed assumptions.&amp;#160; Although the tenets have been challenged (and were threatened with retirement) most of what they said is timelessly valid.&amp;#160; In the context of LINQ, I think my nagging voice is pointing to the boundary-crossing in a LINQ query and muttering “private implementation technique, not primitive construct”.&lt;/p&gt;  &lt;p&gt;What’s this got to do with my starting point for this piece, which was Harold’s ‘Edsel’ jibe?&amp;#160; I suppose it’s this: whatever we may feel about the virtue of purity in language design, in the end productivity and usability are the bigger drivers, and with skill it is possible to combine language features without creating a monster.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:eb68780c-e498-49db-8b86-e6a41b4f27ed" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Groovy" rel="tag"&gt;Groovy&lt;/a&gt;,&lt;a href="http://technorati.com/tags/C%23" rel="tag"&gt;C#&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-284344897573681930?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/284344897573681930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/06/groovy-and-language-design.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/284344897573681930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/284344897573681930'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/06/groovy-and-language-design.html' title='Groovy and Language Design'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3865255661262774899</id><published>2009-06-13T10:59:00.001+01:00</published><updated>2009-06-13T10:59:50.730+01:00</updated><title type='text'>Sun, Java and Innovation - reflections</title><content type='html'>&lt;p&gt;My previous post on the Sun acquisition was a rather naive and misty-eyed piece of sentimental warbling. The truth is that &lt;a href="http://blogs.sun.com/jonathan/entry/three_things_on_sun_in"&gt;Jonathan Schwartz’s vision&lt;/a&gt; hasn’t delivered quickly enough for the market: the share-price has suffered and Oracle has picked up something of a bargain. Pity, because (perhaps looking through those rose-tinted spectacles again) I rather like Schwartz’s ideas for growing the business, essentially giving away the technology and then ‘monetizing adoption’.&amp;#160; But it’s not happened nearly fast enough and one wonders whether it ever could.&amp;#160; &lt;/p&gt;  &lt;p&gt;An &lt;a href="http://www.sdtimes.com/FROM_THE_EDITORS_SUN_NEEDS_GROWN_UPS/About_SUN/33402"&gt;editorial in SD Times&lt;/a&gt; sums up Sun’s difficulties nicely as ‘too much vision, too little execution’.&amp;#160; It’s not enough to give away tools and hope the next generation will adopt them. You need to innovate and to lead, because the brightest and best of the next generation want to climb the mountain, not travel for free in the foothills. To innovate, you need great scientists and engineers; to retain those folk, you need to pay them adequately and provide them with the facilities and resources they need to be brilliant. To do all of that, you need money.&amp;#160; And that comes from sales.&amp;#160; It’s as simple as that.&lt;/p&gt;  &lt;p&gt;Just look at &lt;a href="http://research.microsoft.com/en-us/"&gt;Microsoft Research&lt;/a&gt;: you just can’t foster this quantity and quality of innovation unless you have a lot of money to invest, and you only get that by doing a lot of very effective monetizing.&amp;#160; Microsoft and Oracle: we don’t like them very much, do we? But they’re really good at monetizing.&lt;/p&gt;  &lt;p&gt;As for Java, most seem to agree there is no threat to its future as an enterprise platform: it’s open-technology now and well embedded in the enterprise.&amp;#160; What about the future of the Java language? Do we really need to worry about that? The language itself matters much less than the JVM, which surely has a very bright future given the newer languages targeting it, especially &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; and &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;.&amp;#160; Should we care whether (e.g.) closures make it into the Java language, if we can use newer languages like Scala and continue to leverage all the existing Java libraries, components and infrastructure?&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7c30476b-1968-4103-bf19-9a367a4f5178" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Sun" rel="tag"&gt;Sun&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Scala" rel="tag"&gt;Scala&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Groovy" rel="tag"&gt;Groovy&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3865255661262774899?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3865255661262774899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/06/sun-java-and-innovation-reflections.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3865255661262774899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3865255661262774899'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/06/sun-java-and-innovation-reflections.html' title='Sun, Java and Innovation - reflections'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1049616046555801017</id><published>2009-04-28T21:54:00.001+01:00</published><updated>2009-04-28T21:54:33.738+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>As the Sun sets…</title><content type='html'>&lt;p&gt;Why does Oracle’s purchase of Sun make me feel slightly sad?&amp;#160; Silly, sentimental reaction, isn’t it?&amp;#160; I should know better. After all, today’s Sun isn’t the super-confident (some would say arrogant) innovator and market leader I grew up with: arguably, today’s Sun needs rescuing from itself, needs a sharper focus on what it does best, and to sell more of fewer things.&lt;/p&gt;  &lt;p&gt;But I have a soft spot for Sun. My first proper programming job involved writing C/C++ (and using Cfront – remember that?) on a Sun-3 workstation, and various versions were part of my working life for some time. I loved the solid feel of these machines. Remember the optical mouse that only worked on those special, shiny metal mats? &lt;/p&gt;  &lt;p&gt;Between then and now, my only links to Sun have been through &lt;a href="http://www.openoffice.org/"&gt;OpenOffice&lt;/a&gt; and &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt;. I played with Java quite early on, abandoned it in favour of Microsoft .NET, but have recently (and happily) returned to it. For the last couple of years I’ve been an enthusiastic user of &lt;a href="http://www.netbeans.org/"&gt;NetBeans&lt;/a&gt; – I do hope Oracle recognizes just how good NetBeans is.&amp;#160; I have also tried &lt;a href="http://opensolaris.org/os/"&gt;OpenSolaris&lt;/a&gt;: &lt;a href="http://www.sun.com/software/solaris/zfs_learning_center.jsp"&gt;ZFS&lt;/a&gt; is simply awe-inspiring, and very nearly enough on its own to make me run OpenSolaris, though truthfully I don’t think I &lt;em&gt;need&lt;/em&gt; ZFS, and Windows remains simply more convenient and usable for everyday.&lt;/p&gt;  &lt;p&gt;I’ve used OpenOffice for a long, long time.&amp;#160; I know Writer pretty well, warts and all. You need to ignore some of the cosmetic shortcomings, persevere with it and appreciate its fundamental strengths; things which I think make Writer better than Word. Occasionally I use OOo Writer to help colleagues debug and rescue Word documents which have evolved uncontrollable formatting: it amuses me to be using a free tool to clean-up after a rather expensive one.&amp;#160; I really hope Oracle will resource and manage the OpenOffice program properly. With the right additional effort, they have a potential Office-beater.&lt;/p&gt;  &lt;p&gt;But the crown-jewels are Java itself, and the NetBeans IDE.&amp;#160; Everyone is trying to second-guess what Oracle will do with Java: I don’t have anything to add.&amp;#160; But I really want to add my voice to those hoping Oracle will recognize just how good NetBeans has become, not just as the best Java IDE out there, but also a first-class platform for building rich-clients.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1acc2bd0-223e-4ca4-bf06-dd0f4e9c7d24" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Sun" rel="tag"&gt;Sun&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Oracle" rel="tag"&gt;Oracle&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NetBeans" rel="tag"&gt;NetBeans&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OpenOffice" rel="tag"&gt;OpenOffice&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1049616046555801017?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1049616046555801017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/04/as-sun-sets.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1049616046555801017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1049616046555801017'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/04/as-sun-sets.html' title='As the Sun sets…'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3146472177930242280</id><published>2009-03-28T11:06:00.001Z</published><updated>2009-03-28T11:06:10.296Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enterprise Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenOffice'/><title type='text'>EIP Shapes for OpenOffice Draw</title><content type='html'>&lt;p&gt;If you’ve read the excellent &lt;a href="http://www.eaipatterns.com/"&gt;Enterprise Integration Patterns&lt;/a&gt; (EIP) book by Gregor Hohpe and Bobby Woolf, you may also know that free VISIO stencils are available for the EIP shapes, from the &lt;a href="http://www.eaipatterns.com/downloads.html"&gt;download page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This is great for those who have a copy of VISIO (or whose employer pays for a copy), but for those of us who don’t want to pay however many hundreds of dollars Microsoft wants for VISIO these days, an alternative (especially a free one) is always welcome.&amp;#160; &lt;a href="http://www.openoffice.org/"&gt;OpenOffice&lt;/a&gt; (OOo) Draw, though hardly as functional or attractive as VISIO, is both free and good enough for many diagrams. &lt;/p&gt;  &lt;p&gt;So I decided to see if I could create a set of OOo Draw shapes from the VISIO stencil, and see whether Draw could be practical for integration diagramming.&amp;#160; In short, I succeeded in converting the stencil, and I think Draw is just about good enough. For those not interested in the background, I’ve made the material freely available from &lt;a href="http://sites.google.com/site/rogersearjeant/eip-shapes-for-openoffice-draw"&gt;this page&lt;/a&gt; on my website, so just go ahead and download/install.&amp;#160; Otherwise, read on.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Exporting the VISIO Shapes&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;One way to get shape data into Draw is via &lt;a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics"&gt;SVG&lt;/a&gt;. So I started with the VISIO shapes, freely downloadable from the EIP site, and as I use VISIO at work I was able to load up the stencil and export it as SVG.&amp;#160; &lt;/p&gt;  &lt;p&gt;You need to install an OpenOffice &lt;a href="http://extensions.services.openoffice.org/project/svgimport"&gt;extension for importing SVG&lt;/a&gt;. I’m using OOo 3.0: the extension installed without incident and the import was straightforward. I was surprised at how good the resulting shapes looked in Draw.&amp;#160; Each shape is composed of drawing primitives, so you need to select and group them to create a shape you can place and move easily. I’ve done this for all the shapes in the download.&lt;/p&gt;  &lt;p&gt;So now we have the shapes, where can we put them to make them easily reusable?&amp;#160; In Draw, there’s no stencil feature as such: the only option is the Gallery:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_1Zdup2KWrzE/Sc4EeaBYr_I/AAAAAAAAALQ/1v5JkZpcS-Y/s1600-h/image2.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://lh5.ggpht.com/_1Zdup2KWrzE/Sc4EiE66CpI/AAAAAAAAALU/PjYrxhT9lC4/image_thumb.png?imgmax=800" width="172" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Gallery&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The gallery feature in Draw isn’t very appealing, initially. When you first install OOo, the gallery contains some spectacularly awful materials: nasty backgrounds and bullets which I cannot imagine ever wanting to use, and it even contains some pointless sound-clips that surely only a 5-year old might use (and only then if they were desperate). The shapes and graphics are reminiscent of shareware software from the Windows 95 era.&amp;#160; And what is the point of the built-in media player?&amp;#160; Why can’t OpenOffice grow up?&amp;#160; It’s so very close to being excellent in many respects: things like this just make it look silly and dated.&lt;/p&gt;  &lt;p&gt;Anyway, back to the gallery feature. The one saving grace of this feature is that you can create new gallery themes and add your own shapes to them. To do this, create a new theme, give it a name and then drag your shapes into it.&amp;#160; Note that when you drag/drop your shape you must hold down the mouse button and pause a second or two before dragging: this pause changes the drag-mode from a simple shape move to the required move/copy.&lt;/p&gt;  &lt;p&gt;I’ve done this for all the EIP shapes, creating an EIP gallery theme:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_1Zdup2KWrzE/Sc4EjYg3yYI/AAAAAAAAALY/-8ARqkNIs6A/s1600-h/image5.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="150" alt="image" src="http://lh6.ggpht.com/_1Zdup2KWrzE/Sc4Eki41JXI/AAAAAAAAALc/iNVvaqHhtTQ/image_thumb1.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sharing the EIP Theme&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Unfortunately, Draw doesn’t implement a theme export facility so to share this new theme with others requires some irritating file copying.&amp;#160; The contents of the Gallery are stored in your profile (or home) folder. On Windows this is likely to be:&lt;/p&gt;  &lt;p&gt;C:\Documents and Settings\&amp;lt;user&amp;gt;\Application Data\OpenOffice.org\3\user\gallery&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;On Unix/Linux, check your home folder. There are several file types in here and (unusually for OOo) they are binary, not XML. This makes it difficult to reverse-engineer their purpose and relationship but fortunately it doesn’t seem to be necessary to understand fully what’s going on. The key thing to note is that the numbers in the file names bind together related files.&amp;#160; When you create a new theme, a new set of files appears to be created.&lt;/p&gt;  &lt;p&gt;For the EIP theme I have manually renamed the files to use numbers which I hope won’t clash with any existing gallery files you may have.&amp;#160; Check the zip contents &lt;em&gt;before&lt;/em&gt; you extract the files into your OOo folder and if you have existing files with the same name, simply rename the files in my zip to be unique in your environment.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Result&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I think the result is pretty good.&amp;#160; As a test, I have (partially) reproduced the diagram from the end-cover of the EIP book in a Draw file (.odg) which is included in the download zip:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_1Zdup2KWrzE/Sc4EmlyxwSI/AAAAAAAAALg/y0ok9aT5aN8/s1600-h/image8.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="149" alt="image" src="http://lh6.ggpht.com/_1Zdup2KWrzE/Sc4EnnydlGI/AAAAAAAAALk/WQFLxht7-y8/image_thumb2.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I hope this may be some use to other folk.&amp;#160; Download from &lt;a href="http://sites.google.com/site/rogersearjeant/eip-shapes-for-openoffice-draw"&gt;this page&lt;/a&gt;.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f643b4b0-cb6a-40fc-8d14-bb5742b41c11" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/OpenOffice" rel="tag"&gt;OpenOffice&lt;/a&gt;,&lt;a href="http://technorati.com/tags/EIP" rel="tag"&gt;EIP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Enterprise+Integration+Patterns" rel="tag"&gt;Enterprise Integration Patterns&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3146472177930242280?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3146472177930242280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/03/eip-shapes-for-openoffice-draw.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3146472177930242280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3146472177930242280'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/03/eip-shapes-for-openoffice-draw.html' title='EIP Shapes for OpenOffice Draw'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_1Zdup2KWrzE/Sc4EiE66CpI/AAAAAAAAALU/PjYrxhT9lC4/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5046026188042487962</id><published>2009-03-27T19:21:00.001Z</published><updated>2009-03-27T19:21:09.521Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='HL7'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenESB'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>OpenESB and BPEL</title><content type='html'>&lt;p&gt;Thanks to the folks who commented on yesterday’s post I have managed to overcome the assign problem and of course the answer was very simple: I had an inconsistent set of components installed in &lt;a href="http://www.netbeans.org/"&gt;NetBeans&lt;/a&gt; and &lt;a href="https://glassfish.dev.java.net/"&gt;GlassFish&lt;/a&gt;.&amp;#160; I was using NB 6.5 together with components downloaded from the &lt;a href="https://open-esb.dev.java.net/"&gt;OpenESB&lt;/a&gt; site.&amp;#160; &lt;/p&gt;  &lt;p&gt;The best solution is simply to download the complete NetBeans/GlassFish/OpenESB combination from the &lt;a href="https://open-esb.dev.java.net/Downloads.html"&gt;OpenESB downloads page&lt;/a&gt; and work with that. On the download page the top section contains the GA (stable) GlassFish ESB / NetBeans combination, and the nightly build of the latest (unstable) additional components (i.e. binding components, service engines etc.) which match this GA release.&lt;/p&gt;  &lt;p&gt;The next major section on the page contains the GlassFish ESB v2.1 downloads (milestone 1 at the time of writing), which are not yet considered stable. I grabbed the 2.1 release, plus the HL7 BC (and NB design-time modules) from here.&amp;#160; Installation was completely pain-free.&amp;#160; I particularly liked the way the additional components are packaged as a jar-based installer – very nicely done.&amp;#160; &lt;/p&gt;  &lt;p&gt;Because the main package is a GlassFish ESB bundle, it installs by default to a non-standard path: C:\GlassFishESB. Everything is installed under this directory, including the configuration files for NetBeans, which would normally be placed in your home directory (under .netbeans). Presumably this is done to allow parallel installation with a stable NetBeans/GF without either interfering with the other. What this means, of course, is that all your preferences (editor settings etc.) are not transferred. This is easily fixed, manually, by copying over the stuff from: C:\Documents and Settings\&amp;lt;user&amp;gt;\.netbeans\6.5\config\Editors to C:\GlassFishESB\.netbeans\glassfishesb\config\Editors&lt;/p&gt;  &lt;p&gt;Anyway, back to the BPEL issue.&amp;#160; A clean rebuild of everything was sufficient: the CA deployed to GF, and it ran fine.&amp;#160; I used Hermes JMS and watched the test messages arrive on the queue. Now I can push ahead and explore more of OpenESB and BPEL.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:48af7feb-553d-417c-a460-8b0846fa0e32" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/OpenESB" rel="tag"&gt;OpenESB&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NetBeans" rel="tag"&gt;NetBeans&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BPEL" rel="tag"&gt;BPEL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5046026188042487962?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5046026188042487962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/03/openesb-and-bpel.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5046026188042487962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5046026188042487962'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/03/openesb-and-bpel.html' title='OpenESB and BPEL'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3052399053192561959</id><published>2009-03-26T22:41:00.001Z</published><updated>2009-03-26T22:41:15.146Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='HL7'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenESB'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Problem with OpenESB BPEL assign</title><content type='html'>&lt;p&gt;After far too many cycles staring at code, building, deploying, debugging and undeploying a pretty simple composite application, the damn BPEL assign activity still causes selectionFailure at runtime.&lt;/p&gt;  &lt;p&gt;The BPEL is trivial, and the BPEL copy elements for optional elements in the source schema are marked with the ignoreMissingFromData attribute.&amp;#160; I have rebuilt everything from scratch.&amp;#160; I know the redeployments are successful because the error reports points to the correct line following an edit and I can use the BPEL debugger to step through the assign, eventually failing on the optional element.&lt;/p&gt;  &lt;p&gt;I was given the hint about the ignoreMissingFromData attribute by Michael Czapski, in a &lt;a href="http://blogs.sun.com/javacapsfieldtech/entry/hl7_processor_demonstration_java_caps"&gt;blog comment&lt;/a&gt;.&amp;#160; Googling around for more help, I came across a few &lt;a href="http://n2.nabble.com/&amp;quot;ignoreMissingFromData&amp;quot;,-usage-td2474810.html"&gt;other&lt;/a&gt; &lt;a href="http://www.nabble.com/Error-Assign-activity:-selectionFailure--Fault-Data-is-null-td17547322.html"&gt;postings&lt;/a&gt;, and discovered that the attribute could be &lt;a href="http://wiki.open-esb.java.net/Wiki.jsp?page=Process%20Level%20Ignore%20Missing%20From%20Data"&gt;placed at the process level&lt;/a&gt; or at the individual copy activity level. Jeff Sexton also has a &lt;a href="http://jsexton0.blogspot.com/2009/01/openesb-bpel-assignment-tips.html"&gt;nice post&lt;/a&gt; on the assign issue. &lt;/p&gt;  &lt;p&gt;In &lt;a href="http://blogs.sun.com/javacapsfieldtech/entry/hl7_processor_demonstration_java_caps"&gt;Michael’s tutorial&lt;/a&gt; he does in fact place the attribute at the process level (see p.95 of the &lt;a href="http://mediacast.sun.com/users/Michael.Czapski-Sun/media/00_HL7_Example_Development_Instructions_Final.pdf"&gt;PDF document&lt;/a&gt; which accompanies his tutorial). Placing it at the process level is not very attractive because it will mask the absence of mandatory fields. &lt;/p&gt;  &lt;p&gt;When placed at the copy element level, it seems to fail. Here’s the error I see, as output in the &lt;a href="https://glassfish.dev.java.net/"&gt;GlassFish&lt;/a&gt; console window:&lt;/p&gt;  &lt;p&gt;BPCOR-6151:The process instance has been terminated because a fault was not handled; Fault Name is {&lt;a href="http://docs.oasis-open.org/wsbpel/2.0/process/executable}selectionFailure;"&gt;http://docs.oasis-open.org/wsbpel/2.0/process/executable}selectionFailure;&lt;/a&gt; Fault Data is null     &lt;br /&gt;com.sun.jbi.engine.bpel.core.bpel.exception.StandardException: I18N: BPCOR-3023: Selection Failure occurred in BPEL({&lt;a href="http://enterprise.netbeans.org/bpel/HL7Processor/bpHL7Processor}bpHL7Processor)"&gt;http://enterprise.netbeans.org/bpel/HL7Processor/bpHL7Processor}bpHL7Processor)&lt;/a&gt; at line 28!     &lt;br /&gt;BPCOR-6129:Line Number is 26     &lt;br /&gt;BPCOR-6130:Activity Name is Assign1&lt;/p&gt;  &lt;p&gt;Note the line numbers in the above report: the first of these (line 28) is where the selection failure actually occurred, line 26 is the opening tag of the enclosing assign activity element.&amp;#160; Here’s a shot of the source so you can see the corresponding line numbers. I placed all the optional elements together at the start of the assign:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_1Zdup2KWrzE/ScwEgMzTQqI/AAAAAAAAALA/EiLCmIT4qbM/s1600-h/image%5B2%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="123" alt="image" src="http://lh5.ggpht.com/_1Zdup2KWrzE/ScwEhDigThI/AAAAAAAAALE/2fJKFwEJGbM/image_thumb.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So why doesn’t this work? Is this a bug? Perhaps I’ve run into something which only works in the JavaCAPS product and not in OpenESB?&amp;#160; Shame.&lt;/p&gt;  &lt;p&gt;Another unfortunate discovery is that the OpenESB UI in NetBeans 6.5 doesn’t seem to support adding the ignoreMissingFromData at the process level.&amp;#160; In Michael’s PDF he selects the top-level BPEL process scope and uses the property panel to set this attribute.&amp;#160; It doesn’t appear to exist in NB 6.5. In the shot below I’ve tried to capture the same UI as in Michael’s tutorial:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_1Zdup2KWrzE/ScwEhtw3txI/AAAAAAAAALI/HLA9hLbfJPY/s1600-h/image%5B5%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="84" alt="image" src="http://lh4.ggpht.com/_1Zdup2KWrzE/ScwEiT4y8YI/AAAAAAAAALM/IikjJ7r0LGk/image_thumb%5B1%5D.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Note there’s nothing below the ‘Documentation’ entry: presumably this is additional UI support which you get in the commercial JCAPS product. I’m not that concerned with the missing UI, as long as I can add the attribute in the XML source.&amp;#160; So I edited the BPEL XML, using Michael’s tutorial source as a guide. It’s easy to add the process-level attribute; only the namespace prefix had to be changed:&lt;/p&gt;  &lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;    &lt;br /&gt;&amp;lt;process     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; name=&amp;quot;bpHL7Processor&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlns:ns3=&amp;quot;&lt;a href="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension&amp;quot;"&gt;http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension&amp;quot;&lt;/a&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ns3:ignoreMissingFromData=&amp;quot;yes&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; targetNamespace=&amp;quot;&lt;a href="http://enterprise.netbeans.org/bpel/HL7Processor/bpHL7Processor"&gt;http://enterprise.netbeans.org/bpel/HL7Processor/bpHL7Processor&amp;quot;&lt;/a&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlns=&amp;quot;http://docs.oasis-open.org/wsbpel/2.0/process/executable&amp;quot;&lt;/p&gt;  &lt;p&gt;So another clean/build/deploy and … it still didn’t work. So now I’m stuck, and I hate being stuck. It’s almost enough to put me off the product.&lt;/p&gt;  &lt;p&gt;The impression I get is that BPEL is great for very simple maps and transforms, but anything complex quickly becomes awkward. I haven’t gone beyond ‘simple’ so far, so I’m getting a little concerned. The pretty visual tools and &lt;a href="http://www.netbeans.org/"&gt;NetBeans&lt;/a&gt; integration are cool, but the complexity overhead seems high. It reminds me of Microsoft’s BizTalk product from a few years back – a lot of fiddly config, and not being able to ‘see the wood for the trees’.&amp;#160; &lt;/p&gt;  &lt;p&gt;But I want to persevere with &lt;a href="https://open-esb.dev.java.net/"&gt;OpenESB&lt;/a&gt;: something about this product suggests that you need to reach a certain level of enlightenment, after which everything becomes clear and the benefits outweigh the overheads. I’m just not there yet.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f1b0e9a2-4480-4413-aa49-c228d0ff58e5" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/OpenESB" rel="tag"&gt;OpenESB&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NetBeans" rel="tag"&gt;NetBeans&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BPEL" rel="tag"&gt;BPEL&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3052399053192561959?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3052399053192561959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/03/problem-with-openesb-bpel-assign.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3052399053192561959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3052399053192561959'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/03/problem-with-openesb-bpel-assign.html' title='Problem with OpenESB BPEL assign'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_1Zdup2KWrzE/ScwEhDigThI/AAAAAAAAALE/2fJKFwEJGbM/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7280419810319733579</id><published>2009-03-18T16:33:00.001Z</published><updated>2009-03-18T16:33:46.674Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>DropBox again</title><content type='html'>&lt;p&gt;The previous post elicited a comment from Andy at CloudBerry Lab:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I am a developer of another online backup product powered by Amazon S3 &lt;a href="http://cloudberrydrive.com/"&gt;http://cloudberrydrive.com/&lt;/a&gt; that we are going to release to beta soon. I would appreciate if you take a look and may be post a review on your blog.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Well I did take a look, but the CloudBerry product isn’t really what I’m looking for.&amp;#160; If all you want/need is a Windows-only client for accessing your S3 buckets directly and copying/moving content, then this product might well be just right.&amp;#160; But it doesn’t really compete with DropBox or JungleDisk.&amp;#160; Andy: if your product were closer to DropBox, and cross-platform, then I would have reviewed it.&amp;#160; As it is, I can’t pass judgement.&lt;/p&gt;  &lt;p&gt;If you have time to plough through a very long blog thread, check out Jeremy Zawodny’s &lt;a href="http://jeremy.zawodny.com/blog/archives/007641.html"&gt;excellent piece&lt;/a&gt; on Amazon S3 tools. The discussion thread contains links to most (maybe all) the tools out there.&lt;/p&gt;  &lt;p&gt;I’ve also been reading the DropBox forums. It’s good to see plenty of other people have requested features I miss (e.g. ability to configure DB to ignore certain file patterns).&amp;#160; There is an &lt;a href="http://wiki.getdropbox.com/UpcomingFeatures"&gt;upcoming features&lt;/a&gt; wiki page which lists some things coming ‘soon’.&amp;#160; Nothing on using your own S3 space though.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7280419810319733579?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7280419810319733579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/03/dropbox-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7280419810319733579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7280419810319733579'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/03/dropbox-again.html' title='DropBox again'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-8124369398787555708</id><published>2009-03-16T16:21:00.000Z</published><updated>2009-03-16T16:28:04.570Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>JungleDisk and DropBox</title><content type='html'>&lt;p&gt;There are quite a few network-drive products out there competing for our attention these days.&amp;#160; I’ve tried quite a few (including &lt;a href="http://www.box.net/features"&gt;Box.net&lt;/a&gt; and &lt;a href="http://skydrive.live.com/"&gt;SkyDrive&lt;/a&gt;), but narrowed the choice down to the two which seem the best: &lt;a href="http://jungledisk.com"&gt;JungleDisk&lt;/a&gt; and &lt;a href="http://www.getdropbox.com/"&gt;DropBox&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;JungleDisk attracts me mostly because I can use my existing Amazon S3 storage behind the JungleDisk tool and pay only for the space I actually use. (Note, JD now also uses &lt;a href="http://www.mosso.com/cloudfiles.jsp"&gt;RackSpace CloudFiles&lt;/a&gt;, which actually looks even better than S3).&amp;#160; DropBox is free for 2GB, then a hefty 99 USD annually, for 50GB.&amp;#160; Round one to JungleDisk, in my view.&lt;/p&gt;  &lt;p&gt;Then we come to the user-interface. Both tools integrate with Windows and Linux, JD using drive mapping to expose the storage and DropBox using a special folder inside My Documents, with icon overlays to indicate file status.&amp;#160; Both support drag/drop access and run a small tray-resident UI application. &lt;/p&gt;  &lt;p&gt;But DropBox is just so, so much nicer to use than JD in the everyday Windows context.&amp;#160; It feels better integrated and the UI seems cleaner.&amp;#160; Other folk have blogged about this difference and I must concur – DropBox has the edge.&lt;/p&gt;  &lt;p&gt;Now to the subject which prompted this post in the first place. Neither of these products appears to handle proxy servers particularly well, especially when switching between proxy / no-proxy.&amp;#160; If I restart Windows and forget to switch off the proxy in JD, here’s the mess I’m greeted with when Windows starts:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1Zdup2KWrzE/Sb5-Cd65h7I/AAAAAAAAAKw/VbUBQ6HuLbk/s1600-h/image%5B2%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="136" alt="image" src="http://lh3.ggpht.com/_1Zdup2KWrzE/Sb5-D_O9ofI/AAAAAAAAAK0/SBm0E8p5vA0/image_thumb.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Yuk. Can’t it simply notice that the proxy isn’t responding, log the fact / decorate the tray icon, and leave it for me to sort out?&amp;#160; It gets worse: if I click on the links (for more information) look what I get:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_1Zdup2KWrzE/Sb5-EapbUlI/AAAAAAAAAK4/7idqDPTge-s/s1600-h/image%5B5%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="73" alt="image" src="http://lh5.ggpht.com/_1Zdup2KWrzE/Sb5-EzE7ljI/AAAAAAAAAK8/XVrqrnbz6Mg/image_thumb%5B1%5D.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Is this really what they want the user to see?&amp;#160; This is awful.&lt;/p&gt;  &lt;p&gt;DropBox is slightly better, but still doesn’t work properly if I leave the proxy on, and restart. No nasty dialogs, but the network connection isn’t resolved, even if I set it to ‘auto-detect proxy settings’ which according to the &lt;a href="http://www.getdropbox.com/help/21"&gt;DropBox site&lt;/a&gt; should use the IE settings. Why can’t these tools auto-detect proxies properly?&lt;/p&gt;  &lt;p&gt;DropBox files are cached on the local machine which means if the network is down I can still work on all my files locally, and re-sync when I next connect.&amp;#160; JungleDisk does cache your files, but in a pretty inaccessible way in your profile.&amp;#160; The path will be something like C:\Documents and Settings\&amp;lt;user&amp;gt;\Application Data\JungleDisk\cache\e9998872111157539d8880eca4456345-default&lt;/p&gt;  &lt;p&gt;Another good feature of DropBox which isn’t available in JungleDisk is sharing files and folders: in JD, everything is private. &lt;/p&gt;  &lt;p&gt;DropBox gets so many things right. The one and only feature I want from JungleDisk is the S3 / CloudFiles backing store. Obviously, the DropBox business model is built around the 99 USD annual charge so I don’t know whether this can/will ever happen. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-8124369398787555708?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/8124369398787555708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/03/jungledisk-and-dropbox.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8124369398787555708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8124369398787555708'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/03/jungledisk-and-dropbox.html' title='JungleDisk and DropBox'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_1Zdup2KWrzE/Sb5-D_O9ofI/AAAAAAAAAK0/SBm0E8p5vA0/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-6215542095967903878</id><published>2009-03-11T23:24:00.001Z</published><updated>2009-03-11T23:28:21.942Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='HL7'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenESB'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>OpenESB and HL7</title><content type='html'>&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e8b41146-040e-48a7-be6c-b963358b086b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OpenESB" rel="tag"&gt;OpenESB&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HL7" rel="tag"&gt;HL7&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NetBeans" rel="tag"&gt;NetBeans&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;As well as looking at &lt;a href="http://camel.apache.org"&gt;Apache Camel&lt;/a&gt; for healthcare integration, I have also been spending time with Sun’s &lt;a href="https://open-esb.dev.java.net/"&gt;OpenESB&lt;/a&gt; product.&amp;#160; OpenESB is the open-source counterpart of the &lt;a href="http://www.sun.com/software/javaenterprisesystem/javacaps/index.jsp"&gt;Java CAPS&lt;/a&gt; product, a mature and well-supported Enterprise Service Bus (ESB) built on the &lt;a href="http://jcp.org/en/jsr/detail?id=208"&gt;Java Business Integration&lt;/a&gt; (JBI) standard.&lt;/p&gt;  &lt;p&gt;OpenESB is delivered along with the &lt;a href="https://glassfish.dev.java.net/"&gt;GlassFish&lt;/a&gt; application server (v2) when you install the &lt;a href="http://www.netbeans.org/features/soa/index.html"&gt;SOA extensions&lt;/a&gt; to the &lt;a href="http://www.netbeans.org/"&gt;NetBeans&lt;/a&gt; IDE.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.sun.com/javacapsfieldtech/"&gt;Michael Czapski&lt;/a&gt; of Sun is an excellent source of information on healthcare-related application of the CAPS / OpenESB product line. He has created a really substantial demonstration project based on a healthcare integration scenario. His &lt;a href="http://blogs.sun.com/javacapsfieldtech/entry/hl7_processor_demonstration_java_caps"&gt;blog entry&lt;/a&gt; and the associated downloads (and screencast) are well worth getting hold of.&amp;#160; The screencast and writeup are based on Java CAPS, the commercial product which provides a few nice UI improvements and I believe some additional tools which the OpenESB product does not have.&lt;/p&gt;  &lt;p&gt;I decided to go through Michael’s complete tutorial, using NetBeans 6.5 and the bundled OpenESB / GlassFish combination, building the solution and making notes as I went along. I’ll put the source code for the NetBeans (6.5) and OpenESB project group up on a publically available Assembla Subversion space (URL to follow), in the hope they may be useful to others who want to use OpenESB to do a similar thing.&lt;/p&gt;  &lt;p&gt;As already mentioned, the differences between Java CAPS and OpenESB are superficially small, so if you are already familiar with one or other product you probably only need Michael’s notes and material. However, if you’re relatively new to OpenESB (as I am), there are a few places where the absence of JavaCAPS tooling means you need to know what you’re doing to patch-up the OpenESB solution. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;My first big lesson was getting a correct / compatible set of NB plugins and libraries installed. The zip archive provided by Michael appears to contain everything you need, including the XSDs, NB plugins and encoder libraries. As the article was published very recently, I assumed these were the latest versions so tried to configure my NB 6.5 instance using these.&lt;/p&gt;  &lt;p&gt;I followed the instructions for installing the encoder library (first uninstalling the existing one), then installing the NB plugins. However, the plugin installation just wouldn’t go ahead:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1Zdup2KWrzE/SbhIGsg69II/AAAAAAAAAKg/-fJ59MiofMo/s1600-h/image%5B5%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="237" alt="image" src="http://lh4.ggpht.com/_1Zdup2KWrzE/SbhIHmzdsbI/AAAAAAAAAKk/NEFznESjyeU/image_thumb%5B1%5D.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I tried various combinations but in the end had to uninstall GlassFish v2 and run the NB installer again to reinstall GF plus the OpenESB bits. Fortunately, this is actually quite a quick process, and puts everything back as it was.&lt;/p&gt;  &lt;p&gt;I won’t go through all my subsequent false-starts, but simply tell you to download a matched set of the latest versions from this location:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.java.net/jbi/binaries/open-esb-full-install/nbm/latest/"&gt;http://download.java.net/jbi/binaries/open-esb-full-install/nbm/latest/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The components here should all be compatible. It really is best that you download and install these yourself, so I won’t put them in the Assembla SVN space.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Doing without the Java CAPS Wizards&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The most obvious differences when watching the screencast are the degree to which the commercial product contains wizard steps and conveniences for generating all the configuration items. Reasonable enough I think, and so far I have been able to complete every step using OpenESB and NetBeans 6.5.&lt;/p&gt;  &lt;p&gt;When creating the concrete WSDL definitions with the HL7 bindings, the wizards in the Java CAPS product (seen in Michael’s screencast) do make the whole process slightly simpler. But if you take a little time to understand what these wizards are actually doing in the generated WSDL, it’s not too hard to complete the steps manually.&amp;#160; That’s easy to say now, but I should ‘fess-up and admit that it took me a little while to spot what I hadn’t done, a couple of times. &lt;/p&gt;  &lt;p&gt;For example, once I’d completed the HL7Consumer_CA_A01_A03Delim_HL7In WSDL (sorry Michael, I’m not a big fan of your naming convention!), I simply couldn’t add it to the Composite Application design surface: the tutorial document instructions didn’t appear to work. I could see the WSDL in the list of available WSDLs and select it – but could not add it to the canvas, and couldn’t see any error message to tell me why.&lt;/p&gt;  &lt;p&gt;After a cup of tea and a biscuit and a bit of careful thought, I realised why. The HL7 protocol properties were completely missing from the port declaration in the Services section.&amp;#160; It’s easy to fix this, using the context menu commands:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1Zdup2KWrzE/SbhIIGWcuDI/AAAAAAAAAKo/y81KK4cQfMQ/s1600-h/image%5B8%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="161" alt="image" src="http://lh4.ggpht.com/_1Zdup2KWrzE/SbhIInihaQI/AAAAAAAAAKs/OOuvr3ypWgE/image_thumb%5B2%5D.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then edit the properties in the property grids. Of course, in the JavaCAPS product the wizards prompt you for these properties and create the related WSDL bits behind the scenes.&amp;#160; I don’t like depending on wizards. Fortunately the NetBeans tooling gives you just enough convenient UI to hide the underlying cruft, but also lets you work at the XML / source level and see what’s going on down there.&lt;/p&gt;  &lt;p&gt;That’s probably enough for this post.&amp;#160; There’s so much more to write but I need to knock it into shape before I publish.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-6215542095967903878?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/6215542095967903878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/03/openesb-and-hl7.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6215542095967903878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6215542095967903878'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/03/openesb-and-hl7.html' title='OpenESB and HL7'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_1Zdup2KWrzE/SbhIHmzdsbI/AAAAAAAAAKk/NEFznESjyeU/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-152013099884227464</id><published>2009-02-25T19:15:00.001Z</published><updated>2009-02-25T19:15:48.895Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Domain Driven Design'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Tool Support for DDD</title><content type='html'>&lt;p&gt;I like Eric Evan’s book &lt;a href="http://www.amazon.co.uk/Domain-driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1235578645&amp;amp;sr=1-1"&gt;Domain Driven Design&lt;/a&gt; very much.&amp;#160; It’s such a nice distillation of a relatively small number of principles, all of which possess real, fundamental value. This is a protein-rich book: it may not feel as filling as the more prescriptive, methodology-driven ‘just-do-as-I-say-and-it-will-come-out-right’ books, but they’re just carbohydrate.&amp;#160; DDD is good for you in the long-term.&lt;/p&gt;  &lt;p&gt;I’ve just discovered that you can read some of the book online, via &lt;a href="http://books.google.co.uk/books?id=7dlaMs0SECsC"&gt;Google Books&lt;/a&gt;.&amp;#160; You can also find out more from the &lt;a href="http://domaindrivendesign.org/"&gt;DDD Site&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The real point of this post is to share my experience with a small, free tool called &lt;a href="http://wikidpad.sourceforge.net/"&gt;wikidPad&lt;/a&gt;, which I stumbled on last week when looking for a desktop wiki-based tool to use for capturing &lt;a href="http://domaindrivendesign.org/discussion/messageboardarchive/UbiquitousLanguage.html"&gt;Ubiquitous Language&lt;/a&gt; (UL) definitions.&amp;#160; Capturing and refining the UL is an essential part of applying DDD, and having a fast, convenient (and open) medium for doing this is essential.&amp;#160; A wiki of some kind is almost ideal.&lt;/p&gt;  &lt;p&gt;Most desktop or single-user wikis are either cut-down versions of the equivalent web apps (PHP or whatever), running on localhost ports, or they are single self-editing HTML pages e.g. &lt;a href="http://www.tiddlywiki.com/"&gt;TiddlyWiki&lt;/a&gt;.&amp;#160; Many of these (including TiddlyWiki) are very good indeed, but somehow, none of them has felt quite right for the UL use-case, which is all about getting hyperlinked definitions into a reusable form as quickly as possible.&amp;#160; wikidPad does this superbly well, in my opinion.&amp;#160; &lt;/p&gt;  &lt;p&gt;It’s also a small and fast desktop application, which I find a little more convenient than using a wiki app in a browser. Some examples to support that: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;wikidPad automatically constructs a tree-view of pages on the left hand side of the application – this makes navigation very fast. &lt;/li&gt;    &lt;li&gt;wikidPad does auto-completion of wiki-words (Ctrl-space), which makes writing new entries which link to existing items very fast.&lt;/li&gt;    &lt;li&gt;Drag and drop support, and support for multiple tabs – again, all good for speed and usability.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;When you’re ready to publish the UL to a wider audience, wikidPad will export the whole thing (or any selected part) as a set of HTML pages. &lt;/p&gt;  &lt;p&gt;It’s my first day using this tool, so it may be that I’ll discover something to dent my enthusiasm. But so far, it’s all good.&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d2114f18-865f-44ed-8ef7-f29f0417fcac" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Domain+Driven+Design" rel="tag"&gt;Domain Driven Design&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wikidPad" rel="tag"&gt;wikidPad&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wiki" rel="tag"&gt;wiki&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-152013099884227464?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/152013099884227464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/02/tool-support-for-ddd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/152013099884227464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/152013099884227464'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/02/tool-support-for-ddd.html' title='Tool Support for DDD'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2489877499055870688</id><published>2009-02-23T09:52:00.001Z</published><updated>2009-02-23T09:52:00.388Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Assembla</title><content type='html'>&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:eb713d8e-4ec2-419e-a1bb-598c120b7cb8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/subversion" rel="tag"&gt;subversion&lt;/a&gt;,&lt;a href="http://technorati.com/tags/git" rel="tag"&gt;git&lt;/a&gt;,&lt;a href="http://technorati.com/tags/hosting" rel="tag"&gt;hosting&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Although &lt;a href="http://www.projectlocker.com"&gt;Project Locker&lt;/a&gt; has served me very well for a good many years, better alternatives have emerged recently. I didn’t set out to switch providers, only to see whether &lt;a href="http://www.projectlocker.com"&gt;Project Locker&lt;/a&gt; would support &lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;Mercurial&lt;/a&gt; or &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt;. At the time, neither were available – since then PL have added git support. It was while looking around at the many newer project hosting services that I came across Assembla.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.assembla.com/discounts"&gt;Assembla proposition&lt;/a&gt; is simple and very reasonable: public, open-source projects are hosted for free (up to 200MB). Private plan pricing is extremely keen:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;$2.00 per user per space, per month &lt;/li&gt;    &lt;li&gt;$3.00 per gigabyte of disk space per month &lt;/li&gt;    &lt;li&gt;$8 per user per month maximum. After you pay for a team member in four spaces, additional spaces are free. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Private plans get unlimited disc space. &lt;/p&gt;  &lt;p&gt;But for me, the economics of Assembla are only half the story: the other half is a combination of things: the clean, functional web interface, the range of additional tools (Trac, wiki, files, chat, project dashboard etc.) and a strong feeling that &lt;a href="http://www.assembla.com/about"&gt;the people behind Assembla&lt;/a&gt; know what they are doing.&lt;/p&gt;  &lt;p&gt;Assembla does offer git hosting, but I’m sticking with Subversion for now.&amp;#160; SVN is good enough for my purposes and I can’t live without &lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I’ve been using Assembla for a couple of months and my experience has been very good indeed.&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2489877499055870688?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2489877499055870688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/02/assembla.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2489877499055870688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2489877499055870688'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/02/assembla.html' title='Assembla'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-8657069401428976467</id><published>2009-02-17T17:02:00.001Z</published><updated>2009-02-17T20:45:41.658Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='HL7'/><category scheme='http://www.blogger.com/atom/ns#' term='HAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='healthcare'/><category scheme='http://www.blogger.com/atom/ns#' term='Camel'/><title type='text'>Camel, HL7, HAPI and NAK Messages</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The previous couple of posts were related to using Apache Camel in a healthcare integration setting.  The HL7 support in Camel is built on the &lt;a href='http://hl7api.sourceforge.net/'&gt;HAPI library&lt;/a&gt; which provides Java classes for most of the HL7 v2 variants, plus &lt;a href='http://www.hl7.org/v3ballot/html/infrastructure/transport/transport-mllp.htm'&gt;MLLP&lt;/a&gt; support.  So in integration terms, HL7 can be considered a combination of an endpoint type (the MLLP/TCP protocol) and a message format (the HL7 ER7 or XML representation).&lt;br/&gt;&lt;br/&gt;The Camel architecture nicely isolates endpoint-types and message-structure types in &lt;a href='http://camel.apache.org/components.html'&gt;Components&lt;/a&gt; and &lt;a href='http://camel.apache.org/data-format.html'&gt;DataFormats&lt;/a&gt;, respectively.  A Component is something which knows about a specific communication mechanism or protocol: in the case of HL7, the &lt;a href='http://camel.apache.org/hl7.html'&gt;Camel HL7 Component&lt;/a&gt; knows how to exploit the underlying Apache Mina library to exchange delimited text messages using the HL7 protocol.  The Component also acts as a factory for Camel Endpoint objects: it hands out individual Endpoint objects, each of which represents an instance of the endpoint-type implemented by the Component. &lt;a href='http://camel.apache.org/maven/camel-core/apidocs/index.html?org/apache/camel/spi/DataFormat.html'&gt;Camel DataFormat&lt;/a&gt; objects marshal / unmarshal byte-streams or strings to / from Java objects of some type.  This makes it much easier to build content-based routes in Camel.&lt;br/&gt;&lt;br/&gt;&lt;span style='font-weight: bold;'&gt;HL7 ACK / NAK Messages&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;In the previous post, one of the issues I had to deal with in the example route was returning an ACK or a NAK to the message originator. The HL7 protocol uses a positive-acknowledgement scheme: receivers will ACKnowledge (ACK) messages they understand and can process, and will Negatively AcKnowledge (NAK) anything else.  The HAPI library provides support for this in the makeACK method of the &lt;a href='http://hl7api.sourceforge.net/xref/ca/uhn/hl7v2/app/DefaultApplication.html'&gt;DefaultApplication&lt;/a&gt; class.  Unfortunately, this is less helpful when we need to return a NAK.&lt;br/&gt;&lt;br/&gt;Recall that the first part of my route was checking to see whether the right kind of message has been received. In the sample, I was testing just the message type (MSH-9.1) and the trigger event (MSH-9.2) fields.  In reality, you would probably also want to check that the sender was using the same version of HL7 as you are expecting: you can do this by examining the value of field MSH-12. It will become clear why this is important, below.&lt;br/&gt;&lt;br/&gt;Suppose the inbound message fails the MSH-9 test. The otherwise() clause in my little route will send the HL7 data (unmarshalled from the stream) to the badMessage() method on my handler bean.  This method expects a single argument of type ca.uhn.hl7v2.model.Message, i.e. a generic HAPI HL7 message object.  The argument can't be of a more specific type than this because the Camel route builder cannot know in advance what will be received and unmarshalled from the endpoint; it can only assume it will be a HAPI Message. &lt;br/&gt;&lt;br/&gt;&lt;span style='font-weight: bold;'&gt;Constructing an ACK&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;In the badMessage method, I need to construct a HL7 NAK message to be returned to the caller. HL7 ACKs and NAKs share the same structure: we just need to change the value of one field (and optionally add a diagnostic message) to indicate NAK. The obvious solution is to call DefaultApplication.makeACK, mentioned earlier, and modify the returned structure as necessary.  MakeACK's single argument is a single Segment, the intention being that the caller passes-in the MSH segment of the original inbound message:&lt;br/&gt;&lt;pre&gt;Message makeACK(Segment inboundHeader)&lt;/pre&gt;The reason for this is that the makeACK method needs some values from the inbound MSH segment to populate fields in the Message Acknowledgement segment (MSA) of the ACK correctly. An HL7 ACK (or NAK) must be associated with the original message (i.e. the inbound message being ACK'd or NAK'd) so that the originator can distinguish which of its outbound messages is being acknowledged or rejected. This is done using the Message Control ID, which is field 10 of the MSH segment.&lt;br/&gt;&lt;br/&gt;But remember where we are in the Camel route: we have an invalid message in our hands. We don't know the exact class-type of the inbound message object so we can't cast the Message to a specific type. And the Message interface itself doesn't provide a way to extract the MSH segment. So how are we going to call makeACK(Segment)?&lt;br/&gt;&lt;br/&gt;We cannot simply new-up an instance of some specific message type (e.g. a version 2.3 ORM^O01) and use its MSH segment as the makeACK argument:&lt;br/&gt;&lt;br/&gt;    // Assume ca.uhn.hl7v2.model.v23.*&lt;br/&gt;    &lt;br/&gt;    ORM_O01 orm = new ORM_O01();&lt;br/&gt;&lt;br/&gt;    ACK ackMsg = (ACK)DefaultApplication.makeACK(orm.getMSH());        // &amp;lt;-- Bang! &lt;br/&gt;&lt;br/&gt;    // Set MSA.1 to Application Reject (AR)&lt;br/&gt;    ackMsg.getMSA().getAcknowledgementCode().setValue("AR");&lt;br/&gt;&lt;br/&gt;    // etc.&lt;br/&gt;&lt;br/&gt;This will compile, but won't work. The manufactured ORM_O01, despite being an instance of a specific version of HL7, is not properly constructed, in several ways. First, MSH-12.1 will not contain "2.3", which is surprising, given that HAPI should be able to populate MSH-12.1 for a new message instance. If we pass the ORM_O01 MSH to makeACK, it tries to get the value of MSH-12.1 but finds a null. This causes makeACK to fall-back to creating and returning an ACK for version 2.4 of HL7 (this is baked-in to the HAPI code - I'm not sure if this is an arbitrary HAPI design decision, or to do with the HL7 spec). And of course we get a ClassCastException at run-time as a result, because we are expecting a v2.3 object.&lt;br/&gt;&lt;br/&gt;But even if this did work, isn't it ugly? We'd be baking-in a version of HL7 because we must choose a specific ORM_O01. So how do we create the ACK structure, and how can we make our code work for any version of HL7 supported by HAPI?&lt;br/&gt;&lt;br style='font-weight: bold;'/&gt;&lt;span style='font-weight: bold;'&gt;Terser to the rescue&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;Fortunately, HAPI provides a handy utility class for parsing and unparsing HL7 messages of arbitrary versions - the &lt;a href='http://hl7api.sourceforge.net/apidocs/index.html?ca/uhn/hl7v2/util/Terser.html'&gt;Terser&lt;/a&gt;. This will let us get hold of the MSH segment from the original message, so we could at least call makeACK with the original MSH:&lt;br/&gt;&lt;br/&gt;    // This still depends on the ackMsg decl. being for the same specific version&lt;br/&gt;    // as the original message.&lt;br/&gt;    Terser t = new Terser(originalMsg);&lt;br/&gt;    Segment msh = t.getSegment("MSH");&lt;br/&gt;    ackMsg = (ACK)DefaultApplication.makeACK(msh);&lt;br/&gt;    ackMsg.getMSA().getAcknowledgementCode().setValue("AR");&lt;br/&gt;&lt;br/&gt;Now when we call makeACK we are passing-in a valid MSH so it will extract the HL7 version number and dynamically create the correct ACK class, using &lt;a href='http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#forName%28java.lang.String%29'&gt;Class.forName&lt;/a&gt;.  But as the comment says, this stilll only works if the compiled-in ACK declaration matches the returned ACK message version. We need to lose the compiled-in ACK declaration, but still find a way to populate the ACK message's MSA segment with the right values.&lt;br/&gt;&lt;br/&gt;Fortunately, we can use the Terser to set the field values in a version-independent way. This is exactly what DefaultApplication's static methods makeACK and fillResponseHeader do.  So I used a combination of the Terser and the guts of DefaultApplication.makeACK to create a couple of helper methods which do the right thing.  I've put the source code on &lt;a href='http://sites.google.com/site/rogersearjeant/healthcare-and-hl7/hapi-ack-nak-message-helper'&gt;this page&lt;/a&gt; in my Google site, for anyone who wants to use it.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-8657069401428976467?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/8657069401428976467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/02/camel-hl7-hapi-and-nak-messages.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8657069401428976467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8657069401428976467'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/02/camel-hl7-hapi-and-nak-messages.html' title='Camel, HL7, HAPI and NAK Messages'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1592301251013287210</id><published>2009-02-16T16:15:00.001Z</published><updated>2009-02-16T16:15:43.171Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Camel'/><title type='text'>Compound Predicates in Camel</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Thanks to &lt;a href='http://davsclaus.blogspot.com/'&gt;Claus Ibsen&lt;/a&gt; for such a &lt;a href='http://davsclaus.blogspot.com/2009/02/apache-camel-and-using-compound.html'&gt;helpful response&lt;/a&gt; to my previous post.  As Claus points out, the answer is to use a Camel helper class, &lt;a href='http://camel.apache.org/maven/camel-core/apidocs/org/apache/camel/builder/PredicateBuilder.html'&gt;PredicateBuilder&lt;/a&gt;, which contains a bunch of useful static combinator methods.  Claus shows in his post how to implement my trivial conjunction easily using the and() method.  Note the generic signatures of all these helper methods, e.g.&lt;br/&gt;&lt;br/&gt;&lt;div&gt;&lt;e&gt; &amp;lt;E extends Exchange&amp;gt; Predicate&amp;lt;E&amp;gt; and(final Predicate&amp;lt;E&amp;gt; left, final Predicate&amp;lt;E&amp;gt; right)&lt;e&gt;&lt;e&gt;&lt;e&gt;&lt;br/&gt;&lt;br/&gt;&lt;/e&gt;&lt;/e&gt;&lt;/e&gt;&lt;/e&gt;&lt;/div&gt;&lt;div&gt;Because they accept Exchange (or any derived class), any custom Predicate you might need to write has access to the complete message exchange structure (in, out and fault), and all predicates could be applied to a custom extension of Exchange.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt;Having got over those two 'humps' (sorry - couldn't resist that), I'm feeling very good about Camel.  It's a mighty impressive piece of work and looks like it has a lot of potential for the area I'm working in right now.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1592301251013287210?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1592301251013287210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/02/compound-predicates-in-camel_16.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1592301251013287210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1592301251013287210'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/02/compound-predicates-in-camel_16.html' title='Compound Predicates in Camel'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5243951888800263340</id><published>2009-02-12T09:07:00.007Z</published><updated>2009-02-14T13:05:00.342Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Camel'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Camel Routes and HL7</title><content type='html'>I've been spending some time with &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; and &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt;, with a view to using Camel in a healthcare integration project.  Camel has support for &lt;a href="http://www.hl7.org/"&gt;HL7&lt;/a&gt; both at the message structure level (wrapping access to the &lt;a href="http://hl7api.sourceforge.net/"&gt;HAPI libraries&lt;/a&gt;) and at the protocol level (via the &lt;a href="http://mina.apache.org/"&gt;Apache Mina&lt;/a&gt; extensions for HL7 MLLP).&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As anyone who's looked at Camel (or IONA's FUSE Mediation Router) will know, Camel implements a rather nice Java DSL for building routes.  This lets you write things like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;from("hl7listener")&lt;/div&gt;&lt;div&gt;            .unmarshal(hl7Format)&lt;/div&gt;&lt;div&gt;            .choice()&lt;/div&gt;&lt;div&gt;              .when( header("hl7.msh.messageType").isEqualTo("ORM") )&lt;/div&gt;&lt;div&gt;                    .beanRef("hl7handler", "handleORM")&lt;/div&gt;&lt;div&gt;              .otherwise()&lt;/div&gt;&lt;div&gt;                    .beanRef("hl7handler", "badMessage")&lt;/div&gt;&lt;div&gt;              // end choice block- marshal the ACK/NAK back to the TCP endpoint&lt;/div&gt;&lt;div&gt;            .end()&lt;/div&gt;&lt;div&gt;            .marshal(hl7Format);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Very readable, but as you might expect, it hides quite a bit of complexity.  This is no bad thing, but you do need to understand what's going on behind the DSL. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Camel exploits Spring, and in the above fragment "hl7listener" and "hl7handler" are bean names. The unmarshal and marshal methods allow DataFormat objects to convert between byte-streams and more convenient objects, such as HAPI messages.  The choice/when/otherwise operators allow predicates to control routing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;&lt;span&gt;It's taking a while for me to grok Camel; here is a couple of things I'm not yet clear about:&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Knowing  how to get an intermediate stage in a route to return an ACK or NAK to the originator,  without subsequent (or parallel) stages in the route from doing so. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Creating  compound boolean expressions in predicates.  For instance, if I want  a conjunction inside a when(), I can't have it.  There don't appear  to be combinators for expressions.  &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;In the fragment above for example, how can I express a conjunction/disjunction in the when( ... ) expression?  It only seems to be able to handle a single condition: I haven't found a way to combine predicates e.g. I can't do this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;when ( header("hl7.msh.messageType").isEqualTo("ORM") &amp;amp;&amp;amp;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;             header("hl7.msh.triggerEvent").isEqualTo("O01") ).    // etc.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have tried alternatives, e.g. nesting the when clauses:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;from("hl7listener")&lt;/div&gt;&lt;div&gt;            .unmarshal(hl7Format)&lt;/div&gt;&lt;div&gt;            .choice()&lt;/div&gt;&lt;div&gt;              .when( header("hl7.msh.messageType").isEqualTo("ORM") )&lt;/div&gt;&lt;div&gt;                  .choice()&lt;/div&gt;&lt;div&gt;                    .when( header("hl7.msh.triggerEvent").isEqualTo("O01") )&lt;/div&gt;&lt;div&gt;                        .beanRef("hl7handler", "handleORM")&lt;/div&gt;&lt;div&gt;                    .otherwise()&lt;/div&gt;&lt;div&gt;                        .beanRef("hl7handler", "badMessage")&lt;/div&gt;&lt;div&gt;              .otherwise()&lt;/div&gt;&lt;div&gt;                  .beanRef("hl7handler", "badMessage")&lt;/div&gt;&lt;div&gt;            // end choice block- marshal the ACK/NAK back to the TCP endpoint&lt;/div&gt;&lt;div&gt;            .end()&lt;/div&gt;&lt;div&gt;            .marshal(hl7Format);&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But this doesn't work either.  I'm just starting out with Camel, so I expect I simply haven't read the right bit of the documentation (which even the creators admit is one of Camel's weak points).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another problem is controlling which component in the route returns a response to the originating endpoint (the MLLP sender, in the HL7 case).  I may have solved this one, but it's worth setting out the problem and my approach, in case it helps someone else.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My requirements are for the pipeline to log the inbound message (i.e. whatever is actually received on the HL7 socket), unmarshal the message to HL7 (HAPI), then validate the HL7 message type: at this stage in the pipeline I want to return a NAK to the sender (on the HL7 MLLP connection) if the message is not of the expected type, otherwise I want to write the message to a JMS queue for further processing and return an ACK.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The following route appears to work (note that I have omitted the message-logger stage):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;        // We need the specific HL7 DataFormat object for unmarshalling HL7 ER7 from the&lt;/div&gt;&lt;div&gt;        // inbound MLLP link.&lt;/div&gt;&lt;div&gt;        DataFormat hl7Format = new HL7DataFormat();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        // Inbound HL7 comes from MLLP endpoint. &lt;/div&gt;&lt;div&gt;        // Timestamp message, log receipt, unmarshal and perform initial&lt;/div&gt;&lt;div&gt;        // handling, which just determines if its the right kind of HL7&lt;/div&gt;&lt;div&gt;        // message.&lt;/div&gt;&lt;div&gt;        // If so, return ACK to originator and push message to JMS queue.&lt;/div&gt;&lt;div&gt;        // If not, return NAK to originator and end.&lt;/div&gt;&lt;div&gt;        //&lt;/div&gt;&lt;div&gt;        from("hl7listener")&lt;/div&gt;&lt;div&gt;            .unmarshal(hl7Format)&lt;/div&gt;&lt;div&gt;            .choice()&lt;/div&gt;&lt;div&gt;              .when( header("hl7.msh.messageType").isEqualTo("ORM") )&lt;/div&gt;&lt;div&gt;                    .marshal().hl7().to("jms:queue:orderMessage.queue")&lt;/div&gt;&lt;div&gt;              .otherwise()&lt;/div&gt;&lt;div&gt;                    .beanRef("hl7handler", "badMessage")&lt;/div&gt;&lt;div&gt;            .end()&lt;/div&gt;&lt;div&gt;            .marshal(hl7Format);&lt;/div&gt;&lt;div&gt;        &lt;/div&gt;&lt;div&gt;        // The order message processor - pulls message from JMS queue and sends to&lt;/div&gt;&lt;div&gt;        // the processor bean, which creates and returns an ACK to the hl7 channel&lt;/div&gt;&lt;div&gt;        // if the message is of the expected type.&lt;/div&gt;&lt;div&gt;        //&lt;/div&gt;&lt;div&gt;        from("jms:queue:orderMessage.queue")&lt;/div&gt;&lt;div&gt;            .unmarshal().hl7().beanRef("hl7handler", "handleORM"); &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All of this routing can be expressed in XML instead of using the Java DSL. Once I'm comfortable with Camel I may try writing a NetBeans plugin or RCP application to create visuals tools for Camel routes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5243951888800263340?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5243951888800263340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/02/camel-routes-and-hl7.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5243951888800263340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5243951888800263340'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/02/camel-routes-and-hl7.html' title='Camel Routes and HL7'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-359317231472797806</id><published>2009-01-04T21:20:00.001Z</published><updated>2009-01-04T21:22:12.707Z</updated><title type='text'>Matrix on Windows</title><content type='html'>Very amusing short video, discovered via &lt;a href="http://wadler.blogspot.com/2008/12/if-matrix-ran-on-windows.html"&gt;Philip Wadler's blog&lt;/a&gt;.  Particularly liked the 'clippy-bending' scene.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-359317231472797806?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/359317231472797806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2009/01/matrix-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/359317231472797806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/359317231472797806'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2009/01/matrix-on-windows.html' title='Matrix on Windows'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1508272746949776996</id><published>2008-11-29T21:21:00.004Z</published><updated>2008-11-29T21:45:37.050Z</updated><title type='text'>Brunel, Robert Howlett and David White</title><content type='html'>Just came across &lt;a href="http://news.bbc.co.uk/today/hi/today/newsid_7753000/7753202.stm"&gt;this wonderful short piece&lt;/a&gt; on the BBC website.  Well worth watching. What a great idea: well done to David White and the BBC. &lt;br /&gt;&lt;br /&gt;Modern-day civil-engineering rarely seems to aspire to match that mixture of functional beauty and sense of proportion which Brunel's works all seem to have.  But I must put in a good word for the revived, extended and transformed St. Pancras International station.  The main concourse is a marvellous place to be (apart from the silly, cheesy, oversized statue of the couple): a couple of times recently, when on our way back to King's Cross station, Dan and I have walked in just to take-in and admire what's been done.&lt;br /&gt;&lt;br /&gt;Then we wander back to the dirty, grim, gloomy shed which is the current King's Cross. We've often talked about how wonderful it would be if something similar to St. Pancras were done for King's Cross. The good news is that Network Rail is &lt;a href="http://www.networkrail.co.uk/aspx/4059.aspx"&gt;working on it&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1508272746949776996?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1508272746949776996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/11/brunel-robert-howlett-and-david-white.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1508272746949776996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1508272746949776996'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/11/brunel-robert-howlett-and-david-white.html' title='Brunel, Robert Howlett and David White'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-6295155832442526854</id><published>2008-11-28T09:08:00.003Z</published><updated>2008-11-28T09:18:08.826Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Logging in NetBeans using slf4j</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;It's probably not necessary to start this article with a mini-lecture on why logging, like unit-testing, is a Good Thing, so all I will say is logging is important not only during development but also invaluable in diagnosing runtime problems, once a solution is delivered and running. From here on I'm going to assume you're convinced.&lt;br /&gt;&lt;br /&gt;So, you know you should be logging, but how? And which of the many logging frameworks should you use? This article sets out to answer the first question, showing you how to get started logging in Java, using the NetBeans IDE, and offers an opinion on the answer to the second question.&lt;br /&gt;&lt;br /&gt;There are several well-established ways to do logging in Java but the best approach I have come across so far is to use slf4j (the &lt;a href="http://www.slf4j.org/"&gt;Simple Logging Facade for Java&lt;/a&gt;) for all logging statements in source code. The slf4j facade interfaces are completely independent of any specific logging implementation. The binding between the slf4j facade interfaces and a concrete logger implementation is done statically when the application jar is compiled: there is no runtime trickery involved (e.g. using class-loaders).&lt;br /&gt;&lt;br /&gt;This approach allows you to replace one logging implementation with another without altering any of your logging code, just by binding to a different concrete logger (i.e. referencing a different logger implementation jar).&lt;br /&gt;&lt;br /&gt;Splitting the logging job into two in this way means you need two references in your Java project, in order to use slf4j:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;   a reference to the slf4j API itself, which provides the interfaces you will use exclusively in your logging code.&lt;/li&gt;&lt;li&gt;   a reference to a concrete logging implementation, which your logging code will call via the slf4j facade.&lt;/li&gt;&lt;/ol&gt;As the slf4j interfaces must be bound to a concrete logger implementation, you need to choose which logger to use. I have chosen &lt;a href="http://logback.qos.ch/"&gt;Logback&lt;/a&gt;, which appears to be an improved version of log4j, one of the more efficient Java logging solutions.&lt;br /&gt;&lt;br /&gt;This article describes what you need to do to start logging using this combination. I'm going to assume that you understand the value of logging, and know a little about log statements and logging levels: these are common to all modern logging frameworks, so I won't cover them in detail.&lt;br /&gt;Logger Libraries&lt;br /&gt;&lt;br /&gt;Download &lt;a href="http://www.slf4j.org/download.html"&gt;slf4j&lt;/a&gt; and &lt;a href="http://logback.qos.ch/download.html"&gt;logback&lt;/a&gt;. Extract the distribution archives to wherever you keep your libraries. Then, in NetBeans, create libraries (via Tools/Libraries) for both distributions.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    For slf4j, include the slf4j-api.jar. The precise name of the jar file will depend on the version you download: mine is slf4j-api-1.5.0.jar&lt;/li&gt;&lt;li&gt;    For logback, you need logback-core.jar and logback-classic.jar. Again, precise file name depends on version e.g. logback-core-0.9.9.jar&lt;/li&gt;&lt;/ul&gt;You could create a combined library as a convenience for simple projects, if you know that you will frequently want to use the same concrete logger with the facade. However, bear in mind that for projects which build libraries or components used in other projects, you should only reference the slf4j library: the logger implementation binding should be done by the application which uses your component.&lt;br /&gt;&lt;br /&gt;The source code for this tutorial assumes two NetBeans libraries, one for slf4j and the other for logback.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Adding Logging To Your Code&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In your NetBeans application project, add references to the slf4j and logback libraries. To start logging from your code, you need to do the following things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;   Initialise a logger reference in every class you wish to log from.&lt;/li&gt;&lt;li&gt;   Add Import statements for the required slf4j types&lt;/li&gt;&lt;li&gt;   Add logging statements to your code.&lt;/li&gt;&lt;/ol&gt;Refer to the source code with this article. Look first at the Main class: the first declaration in the class is for the logger:&lt;br /&gt;&lt;blockquote&gt;    private static final Logger _log = LoggerFactory.getLogger(Main.class);&lt;br /&gt;&lt;/blockquote&gt;Notice that this logger is declared static: this is because Main houses the static main() application method, so the logger must be static for it to be referenced from the main method. Above, in the imports section, you will see the two imports necessary to use slf4j:&lt;br /&gt;&lt;blockquote&gt;    import org.slf4j.Logger;&lt;br /&gt;  import org.slf4j.LoggerFactory;&lt;br /&gt;&lt;/blockquote&gt;Now open the slf4j-sample-lib project, a trivial sample library which the main application references. Look at the StringReverser class, and notice that the logger is declared slightly differently:&lt;br /&gt;&lt;blockquote&gt;    private final Logger _log = LoggerFactory.getLogger(this.getClass().getName());&lt;br /&gt;&lt;/blockquote&gt;This is a non-static declaration: only non-static methods will have access to this logger. If you look carefully at the declaration, you'll spot that this one is portable: it doesn't contain the class name explicitly. This declaration can therefore be pasted without modification into any class, but remember that this is non-static, so will not be usable from any static methods in the class.&lt;br /&gt;&lt;br /&gt;As the static logger is usable from everywhere (non-static and static contexts), wouldn't it be convenient to have that declaration added automatically in every new class you create? Perfectly possible, in NetBeans. To include the logger declaration in your NetBeans source code template, go to Tools / Templates, open the Java branch and select Java class and click Open in Editor. You'll see the Java class template source, complete with template parameters for the class name and some other stuff I'll ignore here. All we need to do is add a single line to the class skeleton:&lt;br /&gt;&lt;blockquote&gt;    public class ${name}&lt;br /&gt;  {&lt;br /&gt;          private static final Logger _log = LoggerFactory.getLogger(${name}.class);&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;/blockquote&gt;If you save the changes to your template and create a new class in NetBeans, you'll see the logger declaration with the correct class name parameter value has been added to the source. You could even add the necessary import statements to the template.&lt;br /&gt;&lt;br /&gt;But the overhead of including the logger declaration is low (just one simple line), and NetBeans will take care of the imports for you (use Fix Imports with Ctrl-Shift-I), so you may decide it's not worth adding these lines to your templates.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Static versus Non-static Loggers&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There's one more difference between static and non-static loggers which you should at least be aware of. If you declare the logger static, there will be exactly one instance of the logger retrieved for the class, shared across all instances. As the logger reference is shared, memory is allocated just once and the logger is initialised just once, rather than once per object. This is not usually a problem, but you should be aware that the same logger reference will be shared across every instance of the class.&lt;br /&gt;&lt;br /&gt;When declared non-static, every instance of your class will incur the memory and initialisation cost for the logger reference variable. For the vast majority of classes this will not be a significant overhead, but again you should be aware of the tradeoff. Note that within the same application, retrieving a logger by a given name will always return the same logger object: using a non-static logger reference does not mean that every instance of a class gets a new logger object of its own.&lt;br /&gt;&lt;br /&gt;For a complete account of this issue, you should consult the slf4j documentation which covers this. Read &lt;a href="http://www.slf4j.org/faq.html#declared_static"&gt;this section&lt;/a&gt; of the online documentation.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Logging Statements&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As I said in the introduction, I'm assuming you are somewhat familiar with logging. If not, go back and read the material on the slf4 and logback sites, and follow-up the references there.&lt;br /&gt;&lt;br /&gt;Use the logger method appropriate to the level you wish to log at, for example:&lt;br /&gt;&lt;blockquote&gt;    _log.info("'{}' reversed is '{}'", instance.getValue(), instance.reverseValue());&lt;br /&gt;&lt;/blockquote&gt;Possibly the most important piece of advise I can give here is to consider the cost of logging carefully, especially debug-level logging. The actual call to the logger object is not usually the dominant cost in debug logging: you are likely to be constructing moderately large strings to output, and the cost of preparing these may be where you incur the biggest cost. Consider a line such as this:&lt;br /&gt;&lt;blockquote&gt;    _log.debug("Debugging string: “ + ExpensiveGetter());&lt;br /&gt;&lt;/blockquote&gt;The runtime cost of constructing the string argument to this logging statement will always be incurred, whether the log-level is set to debug or to some other (less-detailed) level. Clearly that's an undesirable, and fortunately there is a very simple coding idiom we can use to avoid this cost:&lt;br /&gt;&lt;blockquote&gt;    if (_log.isDebugEnabled())&lt;br /&gt;  {&lt;br /&gt;        _log.debug("Debugging string: “ + ExpensiveGetter());&lt;br /&gt;  }&lt;br /&gt;&lt;/blockquote&gt;Simply guard the debug log statements with a test for the current (runtime) level of the logger. This does add a little source code; it is possible to reduce simple statements like the one above to a one-liner but I generally avoid this, valuing clarity over concision.&lt;br /&gt;&lt;br /&gt;The cost of the debug statement will now be reduced to a simple boolean test, which is much more acceptable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Configuring Logback&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you build and run the sample project accompanying this piece, you'll see the log statements are written to the console. This is the default behaviour for most logging solutions, logback included. In most production situations you will probably want to direct your log messages somewhere else, to a file for example.&lt;br /&gt;&lt;br /&gt;In common with other logger implementations (such as log4j) the logback subsystem can be controlled through an XML configuration file. For a complete treatment of the options and syntax, you'll need to refer to the &lt;a href="http://logback.qos.ch/manual/joran.html#auto_configuration"&gt;logback documentation&lt;/a&gt; and in this article I'll give a superficial account of a simple but usable configuration.&lt;br /&gt;&lt;br /&gt;Here is the configuration file:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;   Document   : logback.xml&lt;br /&gt;   Created on : 25 February 2008, 22:40&lt;br /&gt;   Author     : Roger&lt;br /&gt;   Description:&lt;br /&gt;       Configuration for logback logging framework.&lt;br /&gt;       For this file to be read by logback at runtime, it must be placed&lt;br /&gt;       on the classpath.&lt;br /&gt;--&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;lt;appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="RootFileAppender"&amp;gt;&lt;br /&gt;  &amp;lt;file&amp;gt;application-log.txt&amp;lt;/file&amp;gt;&lt;br /&gt;  &amp;lt;append&amp;gt;true&amp;lt;/append&amp;gt;&lt;br /&gt;  &amp;lt;filter class="ch.qos.logback.classic.filter.ThresholdFilter"&amp;gt;&lt;br /&gt;    &amp;lt;level&amp;gt;debug&amp;lt;/level&amp;gt;&lt;br /&gt;  &amp;lt;/filter&amp;gt;&lt;br /&gt;  &amp;lt;rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"&amp;gt;&lt;br /&gt;    &amp;lt;fileNamePattern&amp;gt;application-log.%i&amp;lt;/fileNamePattern&amp;gt;&lt;br /&gt;    &amp;lt;maxIndex&amp;gt;2&amp;lt;/maxIndex&amp;gt;&lt;br /&gt;  &amp;lt;/rollingPolicy&amp;gt;&lt;br /&gt;  &amp;lt;triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"&amp;gt;&lt;br /&gt;    &amp;lt;maxFileSize&amp;gt;100000&amp;lt;/maxFileSize&amp;gt;&lt;br /&gt;  &amp;lt;/triggeringPolicy&amp;gt;&lt;br /&gt;  &amp;lt;layout class="ch.qos.logback.classic.PatternLayout"&amp;gt;&lt;br /&gt;    &amp;lt;pattern&amp;gt;%d{yyyy-MM-dd HH:mm:ss},%p,%c,%F,%L,%C{1},%M %m%n&amp;lt;/pattern&amp;gt;&lt;br /&gt;  &amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;lt;/appender&amp;gt;&lt;br /&gt;&amp;lt;root&amp;gt;&lt;br /&gt;  &amp;lt;level value="debug"/&amp;gt;&lt;br /&gt;  &amp;lt;appender-ref ref="RootFileAppender"/&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;Although this is quite a simple configuration file, there's a lot of information in there and to understand it all fully you will need to study the logback documentation. I'll skim over the most important bits here and leave the rest to you.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Appenders&lt;/strong&gt; are the part of the logging engine which actually write the log messages somewhere. You can choose from many different appenders – my favourite is the RollingFileAppender which writes to a text file and 'rolls-over' to a new file once the existing file passes a certain size, declared in the triggeringPolicy element. The file element declares the filename, and the rollingPolicy/fileNamePattern declares the filename pattern to use for old log files, as the file rolls-over.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Layouts&lt;/strong&gt; define the format of the messages written to the log appender. I've gone with a standard pattern which appears in the logback documentation: please consult the logback documentation on format strings to discover all the options here. Essentially, every log statement will include the date and time, and the origin of the log message, including the line number.&lt;br /&gt;&lt;br /&gt;So the net effect of this configuration is that logback will write all log activity out to the file application-log.txt in the working directory, rolling the file when it reaches the size limit I have set (roughly 100k).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Logback and the Classpath&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As explained in the logback documentation, if you want to configure logback with an XML file then the file must be present on the classpath of the application, otherwise logback will not find it and will fall-back to console logging.&lt;br /&gt;&lt;br /&gt;If you examine the source code accompanying this piece you'll see that I have placed the logback.xml file in the root of the source folder (src). In the NetBeans project, this is the 'default package': the name of anything placed here will have no namespace prefix. When NetBeans builds a Java application, it will compile any Java sources it finds in src and all its subdirectories, and will also by default include everything it finds in the root folder in the jar file. To prove this to yourself, go into the src folder, create an arbitrary file, say 'fred.txt', and rebuild the project. Now open the NetBeans Files view (Ctrl-2 will open this if it's not already visible), locate the 'dist' folder and open the tree until you locate the slf4j-sample.jar file. The NetBeans file view allows you to browse the jar file contents – just open the tree to the next level:&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://lh5.ggpht.com/_1Zdup2KWrzE/SS-v6dPw9_I/AAAAAAAAAJo/DCv_T1gReOM/%5BUNSET%5D.png?imgmax=800" /&gt;&lt;br /&gt;&lt;br /&gt;And there are the two files, logback.xml and fred.txt, packed into the root of the jar. We don't need fred, so delete the file and rebuild the jar.&lt;br /&gt;&lt;br /&gt;So the source hierarchy in NetBeans contributes to the runtime classpath, and the 'dist' folder is where NetBeans writes out all artifacts resulting from a build. As the NetBeans documentation (and the generated readme) tells you, you can distribute your application by zipping-up and publishing the contents of the dist folder.&lt;br /&gt;&lt;br /&gt;Let's run the application. Open a terminal window in the dist folder and type:&lt;br /&gt;&lt;blockquote&gt;&lt;configuration&gt;&lt;root&gt;    java -jar slf4j-sample.jar&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;&lt;/root&gt;&lt;/configuration&gt;&lt;/blockquote&gt;&lt;configuration&gt;&lt;root&gt;The program should run, but nothing should be written out to the console. Instead, an application-log.txt file should appear in the dist directory. Open that file and you will see the result of the logging statements. Logback has obviously located the configuration file and applied the settings.&lt;br /&gt;&lt;br /&gt;If you're thinking 'job done' at this point, not so fast! Just consider how logback has located and loaded the XML file. The logback XML file is packed into the (executable) jar file which is the main artifact generated by the build. When the Java runtime runs this jar it first examines the jar's manifest (the MANIFEST.MF file in the META-INF folder inside the jar), which looks like this (from the sample application jar):&lt;br /&gt;&lt;/root&gt;&lt;/configuration&gt;&lt;blockquote&gt;&lt;configuration&gt;&lt;root&gt;    Manifest-Version: 1.0&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;    Ant-Version: Apache Ant 1.7.1&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;    Created-By: 11.0-b15 (Sun Microsystems Inc.)&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;    Main-Class: slf4jsample.Main&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;    Class-Path: lib/logback-classic-0.9.9.jar lib/logback-core-0.9.9.jar l&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;    ib/slf4j-api-1.5.0.jar lib/slf4j-sample-lib.jar&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;    X-COMMENT: Main-Class will be added automatically by build&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;&lt;/root&gt;&lt;/configuration&gt;&lt;/blockquote&gt;&lt;configuration&gt;&lt;root&gt;The runtime looks for the entry point of the program (the qualified name of the class containing the main method) and initialises the classpath from the Class-Path setting. Implicitly, '.' (the root of the jar structure) is also on the runtime classpath.&lt;br /&gt;&lt;br /&gt;What this means is that when the logback system goes looking for logback.xml it will find the copy in the jar file. Consider the function of the logback.xml file: the users of the application will almost certainly want to configure the log behaviour themselves rather than accept the settings you have baked-in to the copy of logback.xml inside the jar file.&lt;br /&gt;&lt;br /&gt;So, we want to distribute our default logback.xml file but not have it baked-in to the jar file: what to do? Having it in the source classpath is convenient because it appears in the NetBeans project view so we can view and edit it from inside the IDE. However, we don't want it packed into the jar, but we do want it on the runtime classpath. How can we satisfy all of these constraints?&lt;br /&gt;&lt;br /&gt;We can achieve this with two simple steps:&lt;br /&gt;&lt;/root&gt;&lt;/configuration&gt;&lt;ol&gt;&lt;li&gt;&lt;configuration&gt;&lt;root&gt;   To prevent NetBeans including the XML file from the jar file, we exclude logback.xml from the list of source artifacts that NetBeans considers as jar contents.&lt;/root&gt;&lt;/configuration&gt;&lt;/li&gt;&lt;li&gt;&lt;configuration&gt;&lt;root&gt;   Add a step to the build process which copies logback.xml into the dist folder, placing it next to the jar file.&lt;/root&gt;&lt;/configuration&gt;&lt;/li&gt;&lt;/ol&gt;&lt;configuration&gt;&lt;root&gt;For step (1), open the NetBeans project properties dialog and navigate to the Packaging subsection, below Build. Add “logback.xml” to the list of Excluded files:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.ggpht.com/_1Zdup2KWrzE/SS-vEcDF-EI/AAAAAAAAAJk/hVrfCpyuMvc/%5BUNSET%5D.png?imgmax=800" /&gt;&lt;br /&gt;&lt;br /&gt;If you rebuild the application, then use a zip tool or archive manager to open the resulting jar file, you'll see that the logback.xml file is no longer included. There is more help on excluding content from your jar in &lt;a href="http://www.netbeans.org/kb/docs/java/project-setup.html#building-filtering"&gt;this page&lt;/a&gt; of the NetBeans documentation.&lt;br /&gt;&lt;br /&gt;For step (2) we need to arrange for the logback.xml file to be copied into the dist folder during the build process. To do this, we will add a very simple custom build-step to the NetBeans build process. As you probably know, NetBeans uses Apache Ant as the build engine, and the IDE generates the Ant script automatically. I'm not going to go into much detail concerning what you can do with custom build steps – I suggest you read the well-commented Ant scripts, and look at &lt;a href="http://www.netbeans.org/kb/docs/java/project-setup.html#build-script"&gt;this section&lt;/a&gt; of the NetBeans documentation.&lt;br /&gt;&lt;br /&gt;There are standard stages in the build process where we can add tasks ('targets' in Ant-speak) to the NetBeans build. The build.xml file (in the project root) contains a comment describing these. All we want NetBeans to do is copy the logback.xml file into the dist folder after it has finished building the jar file, so we will add a -post-jar target to copy the file:&lt;br /&gt;&lt;/root&gt;&lt;/configuration&gt;&lt;blockquote&gt;&lt;configuration&gt;&lt;root&gt;&amp;lt;target name="-post-jar" &amp;gt;&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;    &amp;lt;copy file="${src.dir}/logback.xml" todir="${dist.dir}"/&amp;gt;&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;&amp;lt;/target&amp;gt;&lt;/root&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;configuration&gt;&lt;root&gt;&lt;/root&gt;&lt;/configuration&gt;&lt;/blockquote&gt;&lt;configuration&gt;&lt;root&gt;Add this target at the end of build.xml, just before the close-tag for &lt;project&gt;. Now rebuild the project, and take a look in the dist directory: you should see that logback.xml has been copied there. Now you're ready to zip the dist folder and distribute your solution.&lt;br /&gt;&lt;br /&gt;That's the end of this little piece. You should know enough now to add straightforward, high-performance logging to your own projects. But there's a lot more to learn: to go further, study the slf4j and logback documentation, follow the examples, and experiment.&lt;/project&gt;&lt;/root&gt;&lt;/configuration&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-6295155832442526854?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/6295155832442526854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/11/logging-in-netbeans-using-slf4j_9366.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6295155832442526854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6295155832442526854'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/11/logging-in-netbeans-using-slf4j_9366.html' title='Logging in NetBeans using slf4j'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_1Zdup2KWrzE/SS-v6dPw9_I/AAAAAAAAAJo/DCv_T1gReOM/s72-c/%5BUNSET%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1923043835214912645</id><published>2008-11-20T15:31:00.001Z</published><updated>2008-11-20T15:31:34.342Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>Leonard Cohen at the Albert Hall!</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;On Tuesday my wife and I were finally able to use her (rather belated) birthday present from me - tickets for &lt;a href='http://www.leonardcohen.com/'&gt;Leonard Cohen&lt;/a&gt;.  At the &lt;a href='http://www.royalalberthall.com'&gt;Albert Hall&lt;/a&gt;!  It was spectacularly good - great seats (stalls, so good line of sight over the arena floor), amazing sound quality, and of course the Man himself, a living legend, who delivered an astonishing 3 or more hours of the finest entertainment I can recall.  The band were superb: every member individually talented but, as with all the best ensembles, the whole was even greater than the sum of the parts. I can't recall a better evening.&lt;br/&gt;&lt;br/&gt;But it so nearly didn't happen, for us ...  I had originally bought tickets on eBay, the only place I had been able to find really good seats for the London concerts so-far announced, which were at the O2 Arena.  Not a venue we fancied much, but at the time I don't think the Albert Hall dates had been arranged.  The O2 tickets were in the first couple of rows right in front of the stage, so we were pretty pleased with ourselves. I paid, and waited.&lt;br/&gt;&lt;br/&gt;And waited ... and chased the seller, again and again.  Who turned out not to have the tickets at all, but was "expecting to receive them from the promoter" shortly before the date.  Lots of promises about keeping us informed, lots of reassurances they would arrive in time. Until eventually, two days before the gig, I receive an email from the seller saying that some tickets have arrived but are for the wrong event!  By now we're way past the eBay 90-day limit for disputes. Moral: do not trust individuals selling concert tickets on eBay. If you do go ahead, demand the tickets or your money back well within eBay's limit.&lt;br/&gt;&lt;br/&gt;Fortunately, I found an online ticket company (&lt;a href='http://www.double8tickets.com/'&gt;Double8tickets&lt;/a&gt;) with the AH seats, via a &lt;a href='https://www.google.com/adsense/login/en_US/'&gt;Google ad&lt;/a&gt; which appeared in &lt;a href='https://mail.google.com'&gt;GMail&lt;/a&gt;! Normally, I ignore these ads, but this one leapt out at me at a time when I was desperate to find tickets, so I wouldn't have to disappoint Chris.  Just goes to show that these unobtrusive little ads can work very effectively, and are so much less irritating than the loud, flashy mess that flickers away above Microsoft's Live or Hotmail frame.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1923043835214912645?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1923043835214912645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/11/leonard-cohen-at-albert-hall.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1923043835214912645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1923043835214912645'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/11/leonard-cohen-at-albert-hall.html' title='Leonard Cohen at the Albert Hall!'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3883412635245006079</id><published>2008-11-14T22:29:00.001Z</published><updated>2008-11-14T22:29:50.678Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Community and Culture</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;While looking around for Java dependency tools I came across &lt;a href='http://techdistrict.kirkk.com/'&gt;KirkK's site&lt;/a&gt;, and his &lt;a href='http://www.kirkk.com/main/Main/JarAnalyzer'&gt;JarAnalyzer&lt;/a&gt;.  As usual, I wanted to know a little more about the person behind the software, so looked up his blog and found an article from 2007 there which really resonated with me: &lt;a href='http://techdistrict.kirkk.com/category/net/'&gt;.Net : Software &amp;amp; Technology @kirkk.com&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Kirk and I have travelled in opposite directions: he crossed the tracks to work on a .NET project, whilst I've recently shifted my attention almost completely from .NET and the Microsoft environment (where I have spent the last 10 or so years) to the world of Java.  What's interesting is that he so quickly formed the same view of the Microsoft development that motivated my move to Java.&lt;br/&gt;&lt;br/&gt;Microsoft's greedy behaviour has done so much damage to its reputation and the level of goodwill amongst independent developers. Kirk cites the example of TestDriven.Net, but there are examples of other 'alt.net' type projects (NAnt and NDoc, for example) which Microsoft has effectively (though not directly) either killed or marginalised, not with licensing terms but by introducing proprietary (and arguably weaker) competing technologies.  I'm sure that part of the reason for that, with the N-prefixed projects at least, was that they couldn't bear the prospect of absorbing something with what they would see as alien DNA into their product line.&lt;br/&gt;&lt;br/&gt;&lt;a href='http://eddiesguy.blogspot.com/2007/06/who-killed-ndoc.html'&gt;This piece&lt;/a&gt; by Mike Hofer describes the NDoc demise and nicely summarises the twin underlying problems: the nature of the development community surrounding the Microsoft platform, and Microsoft's inability (or unpreparedness) to work with it. Mike's article, and the &lt;a href='http://www.charliedigital.com/PermaLink,guid,95b2ab68-ba92-413a-b758-2783cde5df9c.aspx'&gt;linked post&lt;/a&gt; by Charles Chen containing the email from NDoc's founder, make for quite depressing reading. Perhaps the emergence of a mean-spirited, mean-minded community is to be expected, when the centre of its universe is an avaricious commercial juggernaut?&lt;br/&gt;&lt;br/&gt;I feel these things especially keenly, now that I'm looking over the wall from the Java community side.  The contrast really couldn't be more stark, more impressive and more compelling.  Even the large companies operating in this space, notably &lt;a href='http://www.sun.com/'&gt;Sun Micrososystems&lt;/a&gt;, appear &lt;a href='http://research.sun.com/minds/'&gt;intelligent&lt;/a&gt;, enlightened and &lt;a href='http://www.sun.com/software/solaris/zfs_learning_center.jsp'&gt;innovative&lt;/a&gt;; there's a very healthy culture here. (A quick and revealing experiment: take Microsoft and Sun - now try to find the corresponding CEO's blog. Top hit in Google for Steve Ballmer when I tried was a &lt;a href='http://fakesteveballmer.blogspot.com/'&gt;send-up site&lt;/a&gt;; top hit in Google for Jonathan Schwartz was &lt;a href='http://blogs.sun.com/jonathan/'&gt;Jonathan Schwartz's blog&lt;/a&gt;. And it's worth reading). &lt;br/&gt;&lt;br/&gt;Coming back to the issue of building a healthy community around a technology, Sun's &lt;a href='http://java.sun.com/'&gt;Java&lt;/a&gt; is surely the shining example of how to embrace the great work done by independent developers and build on it, rather than trying to crush it. Just look at &lt;a href='http://www.netbeans.org/'&gt;NetBeans&lt;/a&gt;: this is an enterprise-quality IDE, easily the equal of Visual Studio, but not only is it open-source (and free to download) it also employs established open-source tools instead of imposing inferior alternatives:  For unit testing, &lt;a href='http://junit.org/'&gt;JUnit&lt;/a&gt; is completely integrated; NetBeans uses &lt;a href='http://ant.apache.org/'&gt;Apache Ant&lt;/a&gt; as its underlying build-system; it can work seamlessly with &lt;a href='http://maven.apache.org/'&gt;Maven&lt;/a&gt; through the excellent &lt;a href='http://wiki.netbeans.org/MavenBestPractices'&gt;plugin&lt;/a&gt;. And you choose the version-control system you prefer (e.g. &lt;a href='http://www.selenic.com/mercurial/wiki/'&gt;Mercurial&lt;/a&gt;, &lt;a href='http://subversion.tigris.org/'&gt;Subversion&lt;/a&gt;) and NetBeans will allow you to make full use of it, right inside the IDE. &lt;br/&gt;&lt;br/&gt;Lastly, you are free to extend NetBeans by writing whatever plugins (modules) you please, without running the risk of getting into litigious exchanges like the TestDriven.Net debacle &lt;a href='http://www.infoq.com/news/2007/06/TestDriven-Express-Emails'&gt;described here&lt;/a&gt;, which seems to me to plumb the very depths of time-wasting pointlessness. &lt;br/&gt;&lt;br/&gt;I never intended to write all that: it was originally just a reaction to a (rather old) blog entry. But as I revisited the world of the Microsoft monoculture through the tale of those N-projects, it just tumbled out.&lt;br/&gt;&lt;br/&gt;&lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3883412635245006079?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3883412635245006079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/11/community-and-culture_14.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3883412635245006079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3883412635245006079'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/11/community-and-culture_14.html' title='Community and Culture'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1002756459699872525</id><published>2008-11-14T15:02:00.001Z</published><updated>2008-11-14T15:02:07.303Z</updated><title type='text'>The Managerese Disease</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I recently stumbled upon a wonderful collection of that language we all love to hate: managerese.  Kevin Boone's list is here:&lt;br/&gt;&lt;br/&gt;&lt;a href='http://kevinboone.com/managerese.html'&gt;The K-Zone: New developments in managerese&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;There are other lists like this sprinkled around the net, but this one is the best I've seen so far because it manages to combine a bit of thoughtful deconstruction with some satisfying disdain.&lt;br/&gt;&lt;br/&gt;&lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1002756459699872525?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1002756459699872525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/11/managerese-disease.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1002756459699872525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1002756459699872525'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/11/managerese-disease.html' title='The Managerese Disease'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3211126266737446644</id><published>2008-10-09T23:17:00.003+01:00</published><updated>2008-10-09T23:26:03.489+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='LinuxMint'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans - blank dialog box fix</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I've been using &lt;a href="http://www.linuxmint.com/download.php"&gt;LinuxMint 5&lt;/a&gt; for some weeks now, and a very fine distro it is, too.  I've noticed that &lt;a href="http://download.netbeans.org/netbeans/6.1/final/"&gt;NetBeans 6.1&lt;/a&gt; starts and runs a great deal faster on Mint than on Windows XP - the difference is quite significant.  I've been wondering why that is, given that this is Java and therefore presumably only the low-level loaders and file-system interactions differ across platforms.  That's just a passing observation and not the point of this post.&lt;br /&gt;&lt;br /&gt;I found one annoying thing happening occasionally (but often enough to be irritating): NetBeans dialog boxes would appear completely empty.  Take a look at the screenshot:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.ggpht.com/roger.searjeant/SO6B7OZz40I/AAAAAAAAAJc/JEz0M6iJbbA/%5BUNSET%5D.png" style="max-width: 800px;" /&gt;&lt;br /&gt;&lt;br /&gt;There didn't seem to be any pattern to this behaviour; it wasn't always the same dialog, and if you closed the dialog and opened it again it would appear normally.  Not good.&lt;br /&gt;&lt;br /&gt;Well, it turns out this is known problem when using the &lt;a href="http://freedesktop.org/wiki/Software/Compiz"&gt;Compiz&lt;/a&gt; window manager on Linux - a quick search revealed a &lt;a href="http://forums.netbeans.org/topic2045.html"&gt;good post&lt;/a&gt; on the NetBeans forums about this subject. The answer is to use the latest JRE / JDK build as it addresses this compatibility issue.  I decided to download and install &lt;a href="http://java.sun.com/javase/downloads/ea/6u10/6u10rcDownload.jsp#6u10JDKs"&gt;JDK 6u10 RC&lt;/a&gt; and give it a try.&lt;br /&gt;&lt;br /&gt;To get NetBeans to use the newer JDK, you can do one of two things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Edit the NetBeans configuration file (in &amp;lt;installationFolder&amp;gt;/etc/netbeans.conf) and change the path pointed to by netbeans_jdkhome&lt;/li&gt;&lt;li&gt;Change your system default Java installation.&lt;/li&gt;&lt;/ol&gt;Not very keen on (1) -  feels like I'm hiding a workaround in just one application's config, but the problem exists for any Java application I run on this system.&lt;br /&gt;&lt;br /&gt;So I decided to do (2). It worked perfectly, so thought I'd share the steps I used to do it.  First, where is Java actually installed on the filesystem?  If you do 'which java' in a console, it will report /usr/bin/java.  But if you look closely, this is just the first step in an indirection; the ls tool reveals:&lt;br /&gt;&lt;br /&gt;$ ls -l /usr/bin/java&lt;br /&gt;lrwxrwxrwx 1 root root 22 2008-10-01 06:55 /usr/bin/java -&amp;gt; /etc/alternatives/java&lt;br /&gt;&lt;br /&gt;And /etc/alternatives/java is another step:&lt;br /&gt;&lt;br /&gt;$ ls -l /etc/alternatives/java&lt;br /&gt;lrwxrwxrwx 1 root root 36 2008-10-01 06:55 /etc/alternatives/java -&amp;gt; /usr/lib/jvm/java-6-sun/jre/bin/java&lt;br /&gt;&lt;br /&gt;And the &lt;strong&gt;/usr/lib/jvm/java-6-sun&lt;/strong&gt; file is actually a symbolic link to the &lt;em&gt;actual&lt;/em&gt; Java installation folder, which is in the same folder.  That's a lot of indirection, and I am quite sure there are good reasons for all of it, but I haven't time to learn all of them.  There is a &lt;a href="http://www.nabble.com/Re%3A-Netbeans-on-Linux%2C-need-help...-p18500197.html"&gt;very detailed post&lt;/a&gt; by Anthony Richardson which patiently explains how to create a proper DEB package from the JDK download; this is almost certainly a good idea.&lt;br /&gt;&lt;br /&gt;I chose to exploit the fact that the last step in the indirection chain is that symbolic link file. By unpacking the JDK directory into &lt;strong&gt;/usr/lib/jvm&lt;/strong&gt; and getting the java-6-sun link to point to the new JDK folder, I decided I could replace 6u6 with 6u10, system-wide.&lt;br /&gt;&lt;br /&gt;However, there is another file in this folder: the .java-6-sun.jinfo file (this is a '.' file - you'll only be able to see those if you use the a switch with ls (e.g. ls -al) or View / Show Hidden Files in Nautilus). Looking inside it, only the first line appears to contain version-specific stuff - everything below uses paths which use the symbolic link:&lt;br /&gt;&lt;br /&gt; name=java-6-sun-1.6.0.06&lt;br /&gt; alias=java-6-sun&lt;br /&gt; priority=63&lt;br /&gt; section=non-free&lt;br /&gt;&lt;br /&gt; jre ControlPanel /usr/lib/jvm/java-6-sun/jre/bin/ControlPanel&lt;br /&gt; jre java /usr/lib/jvm/java-6-sun/jre/bin/java&lt;br /&gt; jre java_vm /usr/lib/jvm/java-6-sun/jre/bin/java_vm&lt;br /&gt; jre javaws /usr/lib/jvm/java-6-sun/jre/bin/javaws&lt;br /&gt; jre jcontrol /usr/lib/jvm/java-6-sun/jre/bin/jcontrol&lt;br /&gt; &amp;lt;snip&amp;gt;&lt;br /&gt;&lt;br /&gt;I decided to leave this as-is for now, and edit it later if required.  So, in summary here is what I did:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Copied the JDK 6u10 contents into /usr/lib/jvm. &lt;/li&gt;&lt;li&gt;Went to the directory /usr/lib/jvm and opened a gnome-terminal as root (you need to be root or use sudo, to make changes here).&lt;/li&gt;&lt;li&gt;Completely unnecessarily, I backed-up the old symbolic link file, just in case.  The easiest way is to use mv (by default mv doesn't follow sym-links), but if you'd prefer to make a copy of a symlink (rather than the object to which it points) you need to use the -P switch, e.g.&lt;br /&gt;cp -P java-6-sun java-6-sun_OLD.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Made a copy of the jinfo file:&lt;br /&gt;cp .java-6-sun.jinfo .java-6-sun.jinfo_ORIGINAL_1.6.0.06&lt;/li&gt;&lt;li&gt;Made java-6-sun symbolic link point to the new JDK directory: &lt;br /&gt;ln -s jdk1.6.0_10/ java-6-sun&lt;/li&gt;&lt;/ol&gt;And it does seem to work.  NetBeans reports that it's using 6u10, and I haven't seen any empty dialogs yet!  Better yet, NetBeans seems to start and run faster, too.  (I haven't timed it - this may be placebo effect...)&lt;br /&gt;&lt;br /&gt;Hope this may help out other folk using LinuxMint or Ubuntu, facing the same problem.  Of course, remember that you can easily disable Compiz (set Visual Effects to None in the Appearances Preferences), and you can get some simple effects back using Gnome Compositing, available via the Mint Desktop tool in Control Center.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3211126266737446644?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3211126266737446644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/10/netbeans-blank-dialog-box-fix.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3211126266737446644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3211126266737446644'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/10/netbeans-blank-dialog-box-fix.html' title='NetBeans - blank dialog box fix'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/roger.searjeant/SO6B7OZz40I/AAAAAAAAAJc/JEz0M6iJbbA/s72-c/%5BUNSET%5D.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5939585688015981539</id><published>2008-10-09T09:53:00.001+01:00</published><updated>2008-10-09T09:53:37.622+01:00</updated><title type='text'>Interlocking Fragility</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The &lt;a href='http://www.edge.org/documents/archive/edge259.html'&gt;October 1st edition of Edge&lt;/a&gt; includes the following quote from Nassim Taleb's book &lt;a href='http://www.amazon.co.uk/Black-Swan-Impact-Highly-Improbable/dp/0141034599/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1223541212&amp;amp;sr=1-1'&gt;&lt;em&gt;The Black Swan&lt;/em&gt;&lt;/a&gt;.  Relevant, given what's happening right now:&lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.edge.org/documents/archive/edge259.html'&gt;From Edge 259&lt;/a&gt; (about 3/4 of the way down the page):&lt;br/&gt;&lt;blockquote&gt;NOTABLE QUOTE&lt;br/&gt;&lt;br/&gt;    "Globalization creates interlocking fragility, while reducing volatility and giving the appearance of stability. In other words it creates devastating Black Swans. We have never lived before under the threat of a global collapse. Financial Institutions have been merging into a smaller number of very large banks. Almost all banks are interrelated. So the financial ecology is swelling into gigantic, incestuous, bureaucratic banks – when one fails, they all fall. The increased concentration among banks seems to have the effect of making financial crisis less likely, but when they happen they are more global in scale and hit us very hard. We have moved from a diversified ecology of small banks, with varied lending policies, to a more homogeneous framework of firms that all resemble one another. True, we now have fewer failures, but when they occur ….I shiver at the thought."&lt;br/&gt;&lt;br/&gt;— Nassim Taleb, The Black Swan (2006)&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;Disclaimer: I haven't read this book yet. Some comments I've heard or read suggest that it's superficial, rambling pseudo-science, more a collection of entertaining but relatively facile observations (perhaps including the above) than an exposition of something profound.  &lt;br/&gt;&lt;br/&gt;Still, this one seems to have come true.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5939585688015981539?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5939585688015981539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/10/interlocking-fragility.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5939585688015981539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5939585688015981539'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/10/interlocking-fragility.html' title='Interlocking Fragility'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2488337909404030510</id><published>2008-09-23T09:20:00.001+01:00</published><updated>2008-09-23T09:22:38.264+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><title type='text'>Neil Bartlett's OSGi book</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Just found Neil Bartlett's OSGi book project:&lt;br/&gt;&lt;br/&gt;&lt;a href='http://neilbartlett.name/blog/osgibook/'&gt;"OSGi in Practice"&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Looking good so far, but I've only skimmed the first couple of chapters.  I plan to read and contribute to the comments and bug-tracker.  &lt;br/&gt;&lt;br/&gt;I don't think there is another good OSGi book out there yet, so this is potentially important. Great that Neil has decided to license the book under Creative Commons, too.  Like most folk, if the book is good then I'll buy a paper copy.&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class='technorati-tags'&gt;&lt;a rel='tag' href='http://technorati.com/tag/OSGi'&gt;OSGi&lt;/a&gt;, &lt;a rel='tag' href='http://technorati.com/tag/Java'&gt;Java&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2488337909404030510?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2488337909404030510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/09/neil-bartlett-osgi-book.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2488337909404030510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2488337909404030510'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/09/neil-bartlett-osgi-book.html' title='Neil Bartlett&amp;#39;s OSGi book'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7568248356365512847</id><published>2008-09-19T12:14:00.001+01:00</published><updated>2008-09-19T12:14:35.354+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Ubiquity, and Contrasting Cultures</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;This is interesting: &lt;a href='http://labs.mozilla.com/2008/08/introducing-ubiquity/'&gt;Mozilla Labs » Blog Archive » Introducing Ubiquity&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Watch the video demonstration.  What a great idea, and I'm impressed by how well this appears to work even at the prototype stage. I'm going to install and try it.&lt;br/&gt;&lt;br/&gt;But even if it turns out not to be so great an experience for me (demos always work perfectly, don't they?), that's not the point: what matters is that some bright people are doing interesting and worthwhile things and freely sharing the outcome with us, while Microsoft apparently spends its time (and some of its money mountain) on stuff &lt;a href='http://news.zdnet.com/2424-9595_22-218626.html'&gt;like this&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Links to these two articles were close to each other (can't recall where) and I was so struck by the contrast and what it reveals of the cultural differences that I felt compelled to write this.&lt;br/&gt;&lt;br/&gt;&lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7568248356365512847?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7568248356365512847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/09/ubiquity-and-contrasting-cultures.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7568248356365512847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7568248356365512847'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/09/ubiquity-and-contrasting-cultures.html' title='Ubiquity, and Contrasting Cultures'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-948241416148018300</id><published>2008-09-15T20:23:00.001+01:00</published><updated>2008-09-15T20:23:35.165+01:00</updated><title type='text'>Rick Wright</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://news.bbc.co.uk/1/hi/entertainment/7617363.stm'&gt;BBC NEWS | Entertainment | Floyd founder Wright dies at 65&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Such a shock to see this BBC news headline.  Like many of my generation (40-something), I regard &lt;a href='http://en.wikipedia.org/wiki/The_Dark_Side_of_the_Moon'&gt;The Dark Side of the Moon&lt;/a&gt; as &lt;strong&gt;the&lt;/strong&gt; key soundtrack of my early life.  As a teenager I knew every word and every note of every song (probably still do) from an album I listened to endlessly back then, and have listened to on-and-off ever since.  &lt;br/&gt;&lt;br/&gt;The first copy I had was a copy of a school-mate's album, on a C90 cassette.  I borrowed a typewriter to write out the lyrics.  Somewhere, in the bottom of a box, I probably still have those sheets of paper.  I wore out that tape.  Eventually I'd saved enough for my own copy, but (would you believe it) I lent the album to someone and never got it back.  But I'm sure I've got the posters, probably in the bottom of that same box, wherever it is.  It's just impossible to explain how important that music was.  It still affects me, even now.  It will &lt;em&gt;always&lt;/em&gt; be my favourite album.  Bar none. Nothing can displace it, ever.&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;"I am not frightened of dying.&lt;br/&gt;Anytime will do, I don't mind.&lt;br/&gt;Why should I be frightened of dying?&lt;br/&gt;There's no reason for it,&lt;br/&gt;You've got to go sometime..."&lt;br/&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;font face='sans-serif'&gt;&lt;strong/&gt;&lt;/font&gt;(from&lt;em&gt;&lt;font face='sans-serif'/&gt; The Great Gig in the Sky&lt;/em&gt;.  Rick Wright / Clare Torrey)&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-948241416148018300?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/948241416148018300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/09/rick-wright.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/948241416148018300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/948241416148018300'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/09/rick-wright.html' title='Rick Wright'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-6036382179396278103</id><published>2008-09-15T10:28:00.001+01:00</published><updated>2008-09-15T10:28:56.402+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='XSD'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Protocol Buffers</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The &lt;a href='http://code.google.com/p/protobuf/'&gt;Protocol Buffers&lt;/a&gt; (PB) idea is obviously good from a performance point of view, but with so much messaging already defined in XSD, I want a tool which will generate the .proto file for a given XSD.  Does such a thing exist yet?  If not, it would make an interesting project. The obvious twin would be a library (linked to the generated .proto code) which accepts a DOM or a SAX stream and generates PB data - a kind of PB-adapter. &lt;br/&gt;&lt;br/&gt;The value of protocol buffers is mostly in creating more compact representations on the wire, and speed in parsing/unparsing. But there's a lot of code out there already using XSD/XML internally which nobody wants to rewrite just to use PBs.  Would the cost of conversion to/from an in-memory DOM cancel-out the gains?&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-6036382179396278103?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/6036382179396278103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/09/google-protocol-buffers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6036382179396278103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6036382179396278103'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/09/google-protocol-buffers.html' title='Google Protocol Buffers'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5689490304483783736</id><published>2008-09-12T16:10:00.007+01:00</published><updated>2008-09-14T22:51:59.699+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='XSL-FO'/><category scheme='http://www.blogger.com/atom/ns#' term='HL7'/><category scheme='http://www.blogger.com/atom/ns#' term='healthcare'/><title type='text'>Generating PDF from XML with XSL-FO</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;One of the healthcare solutions I'm working on has to generate diagnostic report documents in a form we can distribute directly (e.g. secure email) to clinical staff.  The diagnostic report text plus the usual patient demographics and such, arrives in a custom XML message from the integration engine.  The solution uses HL7 v2 elsewhere, but the PAS messaging is exclusively via custom XML (not HL7 v3 XML).&lt;br/&gt;&lt;br/&gt;The legacy document-generation subsystem used Word to create the document: a template was created to get the layout and formatting right, and simple placeholders used to mark the locations of the data we would substitute, taken from the XML data.  This approach actually loads Word into memory (on the server!) to do the work - it's slow, memory-hungry and just generally clumsy and ugly. Plus you end up with a Word document, so the clinician needs Word (or the reader) to view it.&lt;br/&gt;&lt;br/&gt;PDF is a more acceptable format, in my view.  We can secure and digitally sign the document when we generate it to prevent subsequent changes.  Recipients can view PDF on any platform with a free viewer.  The problem for me was how to generate the PDF programmatically, from the XML data. There are probably several ways to do this, but I chose XSL-FO and the &lt;a href='http://xmlgraphics.apache.org/fop/'&gt;Apache FOP&lt;/a&gt; project mainly because I wanted to avoid using a proprietary PDF generator product (there are &lt;a href='http://www.xslfast.com/'&gt;lots&lt;/a&gt; &lt;a href='http://www.renderx.com/'&gt;out&lt;/a&gt; there), but also since XSL-FO can do more than just generate PDF.&lt;br/&gt;&lt;br/&gt;First problem: how do you create the FO which is the 'shape' of the generated document?  Of course, you could simply read through all the manuals and write one from scratch. Well,  I'm just plain lazy, you see, and I don't want to do all that.  I want to take my nice OpenOffice document, or even Word document, and have a tool create an XSL-FO for that document. And I'd like the tool to be free (there are commercial tools of course, but I'm cheap).  Does such a thing exist?&lt;br/&gt;&lt;br/&gt;It does!  Amazingly, precisely this facility exists in &lt;a href='http://www.abisource.com/'&gt;Abiword&lt;/a&gt;: not my favourite word-processor by a long, long way, but a good solution for this particular problem.  OpenOffice should be really good at doing this, as it stores documents natively as XML and already uses FO internally for some style information.  But, despite some promising hints, there is no mature support for this.  This is a real shame: this is just the sort of thing OOo should be capable of, especially as it's apparently half way there already. &lt;br/&gt;&lt;br/&gt;Here's what I managed to find on the OOo site:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Some OpenOffice &lt;a href='http://wiki.services.openoffice.org/wiki/Xml#Filters_and_Conversions_based_on_OpenDocument.2FOpenOffice.org_XML'&gt;transforms and things&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;And &lt;a title='this one' href='http://wiki.services.openoffice.org/wiki/ODF_Toolkit/Efforts/ODTransform' id='bv.5'&gt;this one&lt;/a&gt; talks about ooo2xslfo but that project looks as if it's just a SVN repository - not sure I have time to play with that.&lt;/li&gt;&lt;li&gt;The OOo XML site has &lt;a title='a page on XML filters' href='http://xml.openoffice.org/filter/' id='x5-s'&gt;a page on XML filters&lt;/a&gt; too.&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;Important to mention also that Microsoft does have an XSLT which you can apply to Word documents to generate XSL-FO. It's freely downloadable from &lt;a href='http://www.microsoft.com/downloads/details.aspx?FamilyId=E0FAA0AF-A185-4296-B74D-A9FE870C92CC&amp;amp;displaylang=en'&gt;this download page&lt;/a&gt;.  I tried this, and it works, but the resulting FO is much messier than Abiword's.&lt;br/&gt;&lt;br/&gt;Once you have the FO, the obvious step is to embed it in an XSL, add xsl:value-of elements in the appropriate places and use a transform to populate the template.  This is the approach I took for the proof-of-concept and it worked well. The resulting PDF looks almost right - with a small amount of FO-tweaking, we should have something very usable.&lt;br/&gt;&lt;br/&gt;But using XSL means loading up and running the (trivial) transform which I think may be very inefficient for such a simple case, plus it requires the FO to be edited.  I've decided to use a  simpler approach (using &lt;a href='http://www.stringtemplate.org/'&gt;StringTemplate&lt;/a&gt;) which I hope will be more efficient, and requires less FO editing (just the addition of $fieldName$ placeholders).  All we need is a list of (fieldname, XPath) pairs for our XML message, in order to drive this template.  Of course, most other applications will need the power of XSL (e.g. to deal with tables of entries): I'm only avoiding it here because the data is so simple.&lt;br/&gt;&lt;br/&gt;This is something we're bound to want to do again, in different contexts, so I'm using this project and the prototype to build a tool-chain and utilities for this, so we can use the same approach more easily next time.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5689490304483783736?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5689490304483783736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/09/generating-pdf-from-xml-with-xsl-fo.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5689490304483783736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5689490304483783736'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/09/generating-pdf-from-xml-with-xsl-fo.html' title='Generating PDF from XML with XSL-FO'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2259542819756954140</id><published>2008-09-07T22:15:00.004+01:00</published><updated>2008-09-07T22:29:08.147+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Google Chrome, Part 2</title><content type='html'>Mmmm.  It all looked so good in the cartoon.  The reality isn't quite there yet, but you can see where this is heading, and overall I'm optimistic.  Here's a summary:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows only at the moment.  Understandable, given the market share stats, but what a pity I can't run it on this LinuxMint laptop.  Wondering what underlying runtime they're using: surely one of the key features of Chrome is that it will become a client-side platform.  They need to be able to run multiple processes (presumably native processes) to get one process per tab. &lt;/li&gt;&lt;li&gt;On Windows XP, I found Chrome simply ate CPU cycles. The memory (working set) story wasn't as bad as I had expected (no worse than Firefox, anyway) but the CPU cost meant I was experiencing significant interruptions in other applications.  I did experiment a bit, but so far I haven't been able to characterise the circumstances under which I see this. &lt;/li&gt;&lt;li&gt;Loved the ability to drag a tab out of the frame to create a standalone 'application', e.g. Google Documents or GMail. That works very well.&lt;/li&gt;&lt;li&gt;Rendering speed seemed higher than Firefox.&lt;/li&gt;&lt;li&gt;Plugins for sound and video worked for me (e.g. BBC news) but I really didn't set out to test this with different formats.&lt;/li&gt;&lt;li&gt;The lack of my Firefox add-ins took a little adjusting to!  I'm sure this will eventually come.&lt;/li&gt;&lt;li&gt;The UI is quite bare, but you get used to it.  The downloads bar (at the bottom of the screen) is actually rather good - better than FF.&lt;/li&gt;&lt;li&gt;The search/address bar (can't recall what they call it) is excellent - I found it worked very well for me.&lt;/li&gt;&lt;li&gt;The fact that Chrome imports history etc. from FF if you want it to (I did) means it does very nearly allow you to pick up from where you left off in FF.&lt;/li&gt;&lt;/ul&gt;On the whole, very impressive.  But I'm not ready to replace FF just yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2259542819756954140?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2259542819756954140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/09/google-chroms-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2259542819756954140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2259542819756954140'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/09/google-chroms-part-2.html' title='Google Chrome, Part 2'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7558844399982095791</id><published>2008-09-02T11:37:00.001+01:00</published><updated>2008-09-02T11:37:08.220+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Google Chrome</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I must have missed the Chrome story, as I've only just seen a pointer to it from Darren Waters &lt;a href='http://www.bbc.co.uk/blogs/technology/'&gt;BBC blog piece&lt;/a&gt;.  Having just read quickly through the &lt;a href='http://www.google.com/googlebooks/chrome/'&gt;Google Chrome&lt;/a&gt; storybook, this looks like a potentially important and exciting development. The storybook format is really excellent, too: what a contrast with the way other software companies (e.g. Microsoft) introduce a product!  &lt;br/&gt;&lt;br/&gt;Technically, this looks like a winner to me.  Using a process instead of a thread per tab is a sound idea in principle, with lots of benefits (explained in the cartoon) which you pay for with a slightly higher initial resource footprint. I've little doubt that this will be a worthwhile price to pay, though: almost all of us have machines with enough CPU and memory to accept this.&lt;br/&gt;&lt;br/&gt;It seems to me that the most important thing Google has done is to recognize that the nature of the browser has changed utterly, from what was simply a way to view HTML through to something which is trying to be a complete application platform.  With Google Mail, Google Apps and Gears, plus a handful of add-ins, Firefox is currently central to the way I work, but because the underlying architecture is still anchored in the past, Firefox isn't going to be stable or performant (or secure) enough to cut-it, for much longer. &lt;br/&gt;&lt;br/&gt;This seems to be Chrome's architectural starting point, and the team have sensibly decided to start with a clean sheet of paper, rather than simply build just another branded browser on top of old-world technology.  In some ways, I wish the Mozilla engineers had gone down this route. Firefox has been a great success, but if Chrome is as good as the comic-strip suggests, I think Mozilla will need to raise their game significantly.&lt;br/&gt;&lt;br/&gt;&lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7558844399982095791?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7558844399982095791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/09/google-chrome.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7558844399982095791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7558844399982095791'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/09/google-chrome.html' title='Google Chrome'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7972983946093842800</id><published>2008-09-01T09:51:00.012+01:00</published><updated>2008-09-01T12:23:51.340+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='climbing'/><category scheme='http://www.blogger.com/atom/ns#' term='holiday'/><title type='text'>Climbing in Great Langdale</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;On Friday, Becca and I had a wonderful day climbing and abseiling, in Langdale.  We're both beginners with some experience of climbing walls but none so far on real rock.  I managed to get a day's climbing instruction with &lt;a href='http://www.adventurepeaks.com/about.htm'&gt;Adam Marcinowicz&lt;/a&gt; of &lt;a href='http://www.adventurepeaks.com/'&gt;Adventure Peaks&lt;/a&gt;, via the &lt;a href='http://www.destinationcumbria.co.uk/'&gt;Destination Cumbria&lt;/a&gt; agency.  I can recommend both Destination Cumbria and Adventure Peaks: within hours of my initial enquiry, Lindsay Gibson had located three good options for us, and once we'd chosen AP it was all arranged quickly and efficiently.  Great service.&lt;br/&gt;&lt;a href='http://2.bp.blogspot.com/_1Zdup2KWrzE/SLu8t1GttPI/AAAAAAAAAIc/pIC9zijQY_s/s1600-h/MeOnScoutCrag.jpg' onblur='try {parent.deselectBloggerImageGracefully();} catch(e) {}'&gt;&lt;img width='' height='' border='0' id='BLOGGER_PHOTO_ID_5240990086911079666' alt='Me on Lower Scout Crag' src='http://2.bp.blogspot.com/_1Zdup2KWrzE/SLu8t1GttPI/AAAAAAAAAIc/pIC9zijQY_s/s200/MeOnScoutCrag.jpg' style='margin-top: 10px; margin-bottom: 10px; float: left; cursor: pointer; margin-right: 10px;' title=''/&gt;&lt;/a&gt;&lt;br/&gt;We met Adam and colleagues at the Adventure Peaks store in Ambleside.  AP is in the business of organising and running real expeditions to challenging places - the shop is full of serious (and expensive) equipment - so our little day out is really small-beer.&lt;br/&gt;&lt;br/&gt;We spent the morning climbing on Lower Scout Crag, in Great Langdale.  This is a beautiful place, but somewhat busy. It wasn't long after we got started that two other groups arrived and began setting up.  We tackled two routes, &lt;a href='http://www.ukclimbing.com/logbook/c.php?i=7094'&gt;Cub's Wall&lt;/a&gt; and &lt;a href='http://www.ukclimbing.com/logbook/c.php?i=7093'&gt;Cub's Crack&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;The first is relatively easy, but the crack is far harder: the initial moves required to reach good handholds completely defeated me!  This was due to a combination of lack of experience / poor technique, and my hands and forearms being weak and out of condition.  Becca finally made it up this route, after hanging on the rope and persevering.&lt;br/&gt;&lt;br/&gt;We had a brief lunch stop on the pass between Great and Little Langdale, looking out over the valley to Gimmer Crag - beautiful scenery, but we were plagued by flying ants!&lt;br/&gt;&lt;br/&gt;Then Adam took us to &lt;a href='http://www.ukclimbing.com/databases/crags/craginfo.html?id=359'&gt;Cathedral Quarry&lt;/a&gt;, to do an abseil down the 30m quarry face.  The walk from the car takes you through attractive country, and eventually into the quarry tunnel which leads into the cathedral cavern.  &lt;a href='http://2.bp.blogspot.com/_1Zdup2KWrzE/SLu_XR1jVCI/AAAAAAAAAIk/cst3PxxWl_g/s1600-h/InsideCathedralQuarry.jpg' onblur='try {parent.deselectBloggerImageGracefully();} catch(e) {}'&gt;&lt;img width='' height='' border='0' id='BLOGGER_PHOTO_ID_5240992998021616674' alt='Becca and me in Cathedral Cavern.' src='http://2.bp.blogspot.com/_1Zdup2KWrzE/SLu_XR1jVCI/AAAAAAAAAIk/cst3PxxWl_g/s200/InsideCathedralQuarry.jpg' style='float: left; cursor: pointer; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;' title='Becca and me in Cathedral Cavern.'/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;There are other tunnels leading back through the rock to the approach path - we took a wander through these, too. They are at a constant (low) temperature and pitch dark: climbing helmet or torch (or both) recommended, as I was glad of the helmet on one or two occasions!&lt;br/&gt;&lt;br/&gt;The climb up to the abseil point is a scramble up some steep and wet paths - you need to take care here as you're more likely to get hurt on the way up here than on the way down the rope.&lt;br/&gt;&lt;br/&gt;&lt;div style='text-align: left;'&gt;The abseil is around 30m, and sheer.  About two thirds of the way down the rock face ends and you lower yourself down past the cavern mouth.  At the top (quite unprotected and with no warning signs!) I was initially somewhat nervous. Like most folk, I don't like edges at height, so I prepared myself mentally for something I knew I was going to find challenging. I concentrated on two things: (1) treating it as exactly the same as coming back down from a climb up, and (2) trusting the equipment.  It worked! By the time I was attaching myself to the rope, I was ready.&lt;br/&gt;&lt;br/&gt;As I leaned back, put load onto the rope and stepped onto the face, I felt OK, though my heart-rate was a good bit above resting!&lt;a href='http://2.bp.blogspot.com/_1Zdup2KWrzE/SLvFeG-QYXI/AAAAAAAAAIs/C7Q1kzMpICc/s1600-h/MeCathedralQuarryAbseil.jpg' onblur='try {parent.deselectBloggerImageGracefully();} catch(e) {}'&gt;&lt;img border='0' id='BLOGGER_PHOTO_ID_5240999712434184562' alt='' src='http://2.bp.blogspot.com/_1Zdup2KWrzE/SLvFeG-QYXI/AAAAAAAAAIs/C7Q1kzMpICc/s200/MeCathedralQuarryAbseil.jpg' style='margin-top: 10px; margin-bottom: 10px; float: left; cursor: pointer; margin-right: 10px;'/&gt;&lt;/a&gt;  It was really only that initial step over the edge which was hard - once I was comfortably into the abseil, I didn't really think about the height.&lt;br/&gt;&lt;br/&gt;I ended up doing the descent twice, the second time with a different (and better) belay device which made it more comfortable.  Becca managed three descents!&lt;br/&gt;&lt;br/&gt;Someone has posted a &lt;a href='http://www.youtube.com/watch?v=G8zYWdfPHIk'&gt;YouTube video&lt;/a&gt; of their descent, which (if it's still there) gives you some idea of the location.  I think their estimate of the height (140 feet) is a little on the high side, though: Adam thought 30 meters or so, which is nearer 100 feet.&lt;br/&gt;&lt;br/&gt;We had a fantastic day, achieving more than I had expected, all thanks to Adam who was patient with us, and worked hard to give us the best possible experience.&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7972983946093842800?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7972983946093842800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/09/climbing-in-great-langdale.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7972983946093842800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7972983946093842800'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/09/climbing-in-great-langdale.html' title='Climbing in Great Langdale'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1Zdup2KWrzE/SLu8t1GttPI/AAAAAAAAAIc/pIC9zijQY_s/s72-c/MeOnScoutCrag.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-6378496160071516258</id><published>2008-08-26T08:14:00.003+01:00</published><updated>2008-09-01T11:49:14.136+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='holiday'/><title type='text'>Loweswater Lake</title><content type='html'>It rained almost all of yesterday, but we still managed to get out for a decent walk, this time alongside &lt;a href="http://www.visitcumbria.com/cm/lowswtr.htm"&gt;Loweswater Lake&lt;/a&gt; which is one of the smaller lakes up here, but in a pretty setting, almost joined to the next lake, Crummock Water.&lt;br /&gt;&lt;br /&gt;The walk we took takes you along a good path which lies about half way up the ridge overlooking Loweswater, eventually descending to a farm at the end of the lake, then back along the lakeside, past the National Trust &lt;a href="http://en.wikipedia.org/wiki/Bothy"&gt;bothy&lt;/a&gt; and the rowing boats for hire, which looked rather forlorn in this weather. We saw very few other people walking today, not surprisingly.  The tops of the hills were hidden in cloud a lot of the time, but in true Lake District fashion they would suddenly clear, yielding glorious views.&lt;br /&gt;&lt;br /&gt;Slightly annoyed to discover that my supposedly waterproof Berghaus jacket, isn't.  You discover the meaning of 'waterproof' in this rain!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-6378496160071516258?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/6378496160071516258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/08/loweswater-lake.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6378496160071516258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6378496160071516258'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/08/loweswater-lake.html' title='Loweswater Lake'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3825356092951705279</id><published>2008-08-24T22:00:00.004+01:00</published><updated>2008-09-01T11:49:32.693+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='holiday'/><title type='text'>Lake District Break</title><content type='html'>We're enjoying a very welcome week off, away from it all in the Lake District.  We are staying in a really special place, &lt;a href="http://winderhall.co.uk/"&gt;Winder Hall&lt;/a&gt; in Low Lorton.  Originally a Jacobean manor house, it looks like the Victorians had a hand in updating the interior, and much more recently the owners have created a magnificent place to relax.  In the grounds there is even a hot-tub, and a summer-house containing a sauna!  We've taken advantage of both - fantastic.  The food is good, too - if you ever stay here, then be sure to have some of Clodagh's home-made seville-orange and lemon marmalade, it's epic!&lt;br /&gt;&lt;br /&gt;There are some great &lt;a href="http://www.visitcumbria.com/cm/lorton.htm"&gt;pictures of Lorton Hall&lt;/a&gt; (before it became the Winder Hall hotel) on the Visit Cumbria website.  Scroll down about half way to see the house and grounds, and the &lt;a href="http://en.wikipedia.org/wiki/Peel_tower"&gt;Pele Tower&lt;/a&gt; which forms part of the hall.&lt;br /&gt;&lt;br /&gt;The surrounding area is simply outstanding.  Today we walked up to the top of &lt;a href="http://en.wikipedia.org/wiki/Barrow_%28Lake_District%29"&gt;Barrow&lt;/a&gt;, close to Braithwaite, which is a short drive from Low Lorton.  Barrow is not that high (around 1500 feet) but you get one of the best views in the Lake District from the top.  The weather has been kind, so it was possible to see all the surrounding fells and a long way further out.  This was a warmup for longer, higher walks later in the week - I'd like to get to the top of &lt;a href="http://en.wikipedia.org/wiki/Great_Gable"&gt;Great Gable&lt;/a&gt;, about twice the height of Barrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3825356092951705279?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3825356092951705279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/08/lake-district-break.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3825356092951705279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3825356092951705279'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/08/lake-district-break.html' title='Lake District Break'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-4883626025108823147</id><published>2008-08-21T09:17:00.003+01:00</published><updated>2008-08-21T09:29:24.121+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans 6.5 Unusable?</title><content type='html'>I recently installed NetBeans 6.5 Beta on both OSs on my laptop (Acer 2GHz dual-core, 2GB, dual-booting Win XP and LinuxMint) and I almost immediately uninstalled it. What is going on?  Some of the UI appears to be broken: controls not lining up correctly, some dialogs displaying completely blank contents, some the wrong size (e.g. far too big).  Sometimes the last two could be fixed by closing/re-opening, but not every time.  It also felt a lot slower than 6.1.&lt;br /&gt;&lt;br /&gt;Seems &lt;a href="http://coffeecokeandcode.blogspot.com/2008/08/netbeans-pretty-much-unusable.html"&gt;other people&lt;/a&gt; have been having the &lt;a href="http://markmail.org/search/?q=Pretty+Much+Unusable&amp;amp;q=list%3Aorg.netbeans.nbusers"&gt;same experience&lt;/a&gt;.   A lot of what Casper wrote in his piece resonated with me, as I also come from the Visual Studio / C# background.  I do hope the NetBeans team pays attention because  this is an important product which is already good, and deserves to be better. I really don't want to use Eclipse, and I'd prefer not to pay for IntelliJ.  Come on Sun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-4883626025108823147?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/4883626025108823147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/08/netbeans-65-unusable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4883626025108823147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4883626025108823147'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/08/netbeans-65-unusable.html' title='NetBeans 6.5 Unusable?'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5726500442803352916</id><published>2008-08-21T08:48:00.003+01:00</published><updated>2008-08-21T09:16:48.421+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software architecture'/><title type='text'>97 Things Every Software Architect Should Know</title><content type='html'>Ran across another one of those '&lt;a href="http://97-things.near-time.net/wiki?nonce=RnXKfCfO"&gt;things every architect should know&lt;/a&gt;' sites, via &lt;a href="http://www.michaelnygard.com/blog/2008/08/97_things_every_software_archi.html"&gt;Michael Nygard's blog&lt;/a&gt;. I haven't read every single one yet, but my unscientific selection yielded a few really &lt;a href="http://97-things.near-time.net/wiki/show/Simplify%20essential%20complexity;%20diminish%20accidental%20complexity"&gt;good&lt;/a&gt; &lt;a href="http://97-things.near-time.net/wiki/show/Understand%20The%20Business%20Domain"&gt;ones&lt;/a&gt;, and &lt;a href="http://97-things.near-time.net/wiki/show/Stand%20Up%21"&gt;one&lt;/a&gt; or &lt;a href="http://97-things.near-time.net/wiki/show/Dwarves,%20Elves,%20Wizards,%20and%20Kings"&gt;two&lt;/a&gt; I felt were less worthy (and not really architecture-specific anyway).  I found myself using the titles to select which ones to read in detail, and this proved a pretty reliable guide to the value of the idea and the quality of the writing.&lt;br /&gt;&lt;br /&gt;A side-effect of looking at this list was being asked to sign-up to &lt;a href="http://www.near-time.net"&gt;Near-Time&lt;/a&gt;.  I haven't yet figured out exactly what this is, but it appears to be a public, Web-2.0 collaborative workspace thingy. As usual, I'm probably way behind everyone else on this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5726500442803352916?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5726500442803352916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/08/97-things-every-software-architect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5726500442803352916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5726500442803352916'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/08/97-things-every-software-architect.html' title='97 Things Every Software Architect Should Know'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2726397584241474756</id><published>2008-08-12T11:45:00.000+01:00</published><updated>2008-08-12T11:45:48.849+01:00</updated><title type='text'>When Google Owns You</title><content type='html'>I must admit I do sometimes wonder how I would cope if Google decided to pull the plug on my account.  For me, I would find life without Google (especially GMail, Google Docs, Google Reader and Google Maps) very hard indeed.  It's happened to Chris Brogan. Read his post &lt;a href="http://www.chrisbrogan.com/when-google-owns-you/"&gt;When Google Owns You | chrisbrogan.com.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finding a replacement which doesn't suck would be hard right now.  I just don't really like Yahoo or Microsoft Live much (though I have accounts on both), and even with a replacement service I'd still not have access to the giant heap of old email and documents which Google does such a great job of storing and searching for me.  And, despite other peoples' suspicions that Google no longer lives according to its founding principle ("Don't be evil"), I instinctively trust Google much, much more than Microsoft or Yahoo.&lt;br /&gt;&lt;br /&gt;All this great Google stuff is completely free, so it's very difficult for any of us to complain if it does get withdrawn.  I don't for one moment think that Google is likely to do that without good reason, but it puts all of us in a position of having little or no leverage.  Personally, I'd be more than happy to pay a nominal amount for my Google services (by which I mean almost everything except search), to ensure continuity of access, security of my data and a contract which means I'm owed the services.  How much? I don't know - what about 30 USD a year?  That's unlikely to upset anyone who really wants or needs the service, but if enough people paid it could provide Google with a ton of additional money they could use to invest in making those services even better.&lt;br /&gt;&lt;br /&gt;Will Google ever transition to a paid model?  The Picasa photo service has a free and paid service already, probably because Flickr and others do this as well as to cover storage costs.  But for the rest of Google, I'm not sure. You can imagine how administrative overhead might soar with paid accounts: not only would they be obliged to keep track of everyone's identity, account and payments, but armed with a contract, the kind of people who are intolerant of even occasional outages would feel entitled to complain loudly.  I wonder if the folks at Google have 'done the math' and decided that any additional revenue would be eaten up by this sort of thing?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2726397584241474756?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.chrisbrogan.com/when-google-owns-you/' title='When Google Owns You'/><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2726397584241474756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/08/when-google-owns-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2726397584241474756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2726397584241474756'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/08/when-google-owns-you.html' title='When Google Owns You'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1531184443168177880</id><published>2008-08-11T21:04:00.001+01:00</published><updated>2008-08-12T11:47:22.819+01:00</updated><title type='text'>pastebin - collaborative debugging tool</title><content type='html'>&lt;a href="http://pastebin.com/pastebin.php?help=1"&gt;pastebin - collaborative debugging tool&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Seen this?  This is one of those truly great, simple ideas.  Check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1531184443168177880?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1531184443168177880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/08/pastebin-collaborative-debugging-tool.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1531184443168177880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1531184443168177880'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/08/pastebin-collaborative-debugging-tool.html' title='pastebin - collaborative debugging tool'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-671818605641148251</id><published>2008-08-08T13:44:00.001+01:00</published><updated>2008-08-12T11:53:06.296+01:00</updated><title type='text'>Java and Ruby, C++ and VB</title><content type='html'>Were you doing Windows development, about 10 years or so ago?  If so, then I'm pretty sure you'll recognize the following. &lt;br /&gt;&lt;br /&gt;The hard stuff, or more accurately, all the performance-critical stuff and the core components of your product would be written in C++.  The functionality in the libraries you and your team created was then composed into COM components, and you designed interfaces, wrote IDL and created type libraries which exposed the component functionality to the outside world.&lt;br /&gt;&lt;br /&gt;Lesser mortals could then use COM-aware languages and tools, like Visual Basic (VB), to create sophisticated applications to exploit the power of those components.  Component-oriented software development was a reality.  UI designers, the subject-matter experts and the VB programmers could get together and build something using your C++ classes, all without having to know about vtables, pointer arithmetic, or what a pure virtual function is.  &lt;br /&gt;&lt;br /&gt;This was &lt;a title="COM" href="http://www.microsoft.com/com/default.mspx" id="e9qy"&gt;COM&lt;/a&gt; (and &lt;a title="OLE2" href="http://en.wikipedia.org/wiki/Object_Linking_and_Embedding" id="w-8o"&gt;OLE2&lt;/a&gt;) and it was great technology, because it allowed us to do mixed-language development, to compose systems from components without necessarily knowing how they were implemented internally.  We could use the right language for the task in hand, which might be C++, Delphi, VB or even JavaScript, knowing the resulting component could be used by any other COM-aware environment. &lt;br /&gt;&lt;br /&gt;It wasn't perfect. The COM abstraction was somewhat &lt;a title="leaky" href="http://en.wikipedia.org/wiki/Leaky_abstraction" id="zv-p"&gt;leaky&lt;/a&gt; because even when using 'scripting languages' like VB to combine COM components, you still needed to understand COM's reference counting semantics, and marshaling of &lt;a title="data" href="http://www.roblocher.com/whitepapers/oletypes.aspx" id="mi4."&gt;data&lt;/a&gt; across the COM boundary wasn't always straightforward.  But the benefits manifestly outweighed any of the technical difficulties. &lt;br /&gt;&lt;br /&gt;With Java and especially .NET we moved away from the idea that we'd build lower-level functionality in one language and use a less formal or type-safe language to 'script' applications on top of it.  Microsoft have always claimed that mixed-language development is a cornerstone of .NET and the CLR.  It's certainly true that the &lt;a title="CLI" href="http://en.wikipedia.org/wiki/Common_Language_Infrastructure" id="lp8h"&gt;CLI&lt;/a&gt; does explicitly set out to enable multiple languages to target the infrastructure, but this misses the real point, which is that relatively few projects appear to have exploited this.  Most .NET solutions are developed in just one language, either C# or VB.Net, the choice usually made early, based more on team culture than on technical grounds.&lt;br /&gt;&lt;br /&gt;I haven't heard anyone saying "Well, we used C# for the hairy low-level components, but we built the application itself in VB.Net because it's so much quicker to prototype". Does this happen now?  I don't think so, yet back in the C++ / VB world, it really did. &lt;br /&gt;&lt;br /&gt;I believe we are in a roughly similar position now, with respect to building complete solutions, as we were when VB and C++ were joined at the hip via COM.  We want the big languages and frameworks for building powerful libraries, for high performance and for when we need (or get real benefit from) strong, static typing.  But we all want to use these lovely new dynamically-types languages like Ruby, Python or Groovy because they're concise, powerful and fun.  Look what I can do in 5 lines of Ruby!  It would take 50 lines of Java to do that!  And just look at the clever metaprogramming stuff!  Wait!  These languages are great! Why don't we write everything this way!&lt;br /&gt;&lt;br /&gt;Now think back to VB ... who remembers &lt;a title="this book" href="http://vb.mvps.org/hardcore/" id="u1wg"&gt;this book&lt;/a&gt; ?  This was one of those landmark books you recall long past the time you stop consulting it. Part of the charm of this book was the writing of Bruce McKinney, who managed to combine a determination to wring the very most out of VB with an iconoclastic view of Microsoft, the very people who both developed VB and published his book!  I liked the book, and I loved the writing.  Plus, it really was hardcore: if you paid attention to the book and practised what it preached, you became a better (or at least, more capable) VB developer. &lt;br /&gt;&lt;br /&gt;Now, I'm not trying to suggest that Ruby (or Python, or ... etc.) is/are no better than VB6, because that's clearly nonsense.  But I am suggesting there are strong parallels between the two situations. With the dynamic, interpreted languages like Ruby and Python we have flexibility, speed (of development) and agility, and we can get something running without all the troublesome attention to detail required by C# or Java.  Just as we liked the &lt;a title="VARIANT" href="http://en.wikipedia.org/wiki/Variant_type" id="dbjz"&gt;VARIANT&lt;/a&gt; type, we like dynamic (and '&lt;a title="duck" href="http://en.wikipedia.org/wiki/Duck_typing" id="io1q"&gt;duck&lt;/a&gt;') typing, and we like the syntactic economy of not having to use type names everywhere. &lt;br /&gt;&lt;br /&gt;So we have a similar situation now to that which existed when VB was at its hardcore height: the evangelists and enthusiasts want to build absolutely everything in Ruby (or Groovy, or Python, or etc...), whether it makes sense to or not. The problem is the 'evangelists'. Or fundamentalists - you decide which term you prefer. Their enthusiasm for their favourite language unfortunately causes them to stray into deeper academic debates concerning type systems. They are so anxious to promote their chosen path, they want to convince the rest of the world that you really don't need static typing, even that static typing cannot save you from anything, so why bother with it?  Do everything in &amp;lt;someDynamicLanguage&amp;gt;. Hardcore!  I'm not going to wade in to the &lt;a title="silly" href="http://memeagora.blogspot.com/2007/05/strong-typing-is-communist-bureaucracy.html" id="w0va"&gt;silly&lt;/a&gt; static typing versus unit testing &lt;a title="squabble" href="http://blog.jayfields.com/2008/02/static-typing-considered-harmful.html" id="rf2y"&gt;squabble&lt;/a&gt;.  The essential point is that serious issues are often hijacked, trivialised and misrepresented to serve as ammunition in some language or platform flame-war.  Here is an &lt;a title="excellent, sane post" href="http://kawagner.blogspot.com/2008/03/static-vs-dynamic-typing-part-2.html" id="s9jr"&gt;excellent, sane post&lt;/a&gt;, as an antidote, discovered as a link in &lt;a title="this piece" href="http://www.tbray.org/ongoing/When/200x/2008/03/26/Ruby" id="x2tg"&gt;this piece&lt;/a&gt; by the equally excellent Tim Bray. &lt;br /&gt;&lt;br /&gt;The analogy I'm trying to use is a little strained, I will admit: VB was a fundamentally weak language (see &lt;a title="Bruce McKinney" href="http://brucem.mystarband.net/" id="bd5-"&gt;Bruce McKinney&lt;/a&gt;'s &lt;a title="departing missive" href="http://brucem.mystarband.net/mckinney1.htm#1" id="yq60"&gt;departing missive&lt;/a&gt;), whereas Ruby is not. The difference between then and now is that there is no need for a 'Hardcore Ruby' book because you don't need to strain at the boundaries of the language to do powerful things. The similarity rests on the fact that with technologies like &lt;a title="JRuby" href="http://jruby.codehaus.org/" id="cggd"&gt;JRuby&lt;/a&gt; (and &lt;a title="IronPython" href="http://www.codeplex.com/Wiki/view.aspx?ProjectName=IronPython" id="cydd"&gt;IronPython&lt;/a&gt;) we have the ability to use a variety of languages and approaches to attack the different layers in our solutions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-671818605641148251?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/671818605641148251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/08/java-and-ruby-c-and-vb.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/671818605641148251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/671818605641148251'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/08/java-and-ruby-c-and-vb.html' title='Java and Ruby, C++ and VB'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-9025691295712043171</id><published>2008-07-20T21:50:00.003+01:00</published><updated>2008-07-20T22:20:33.005+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>LinuxMint 5 (Elyssa)</title><content type='html'>I've lost count of the number of Linux distros I've tried and rejected because of:&lt;br /&gt;1) Ugliness (especially screen font-rendering)&lt;br /&gt;2) Device problems, mainly wireless networking&lt;br /&gt;3) Video driver problems, e.g. machine locks up when Compiz or similar enabled.&lt;br /&gt;4) No support (or broken support) for power management, hibernation etc.&lt;br /&gt;5) All of the above.&lt;br /&gt;&lt;br /&gt;Even recent 'big-name' distros like OpenSuse and Fedora have had one or more of these problems, at least for me, on my Acer laptop.&lt;br /&gt;&lt;br /&gt;Finally I believe I have found a Linux distro I believe I really, honestly may be able to use as a Windows replacement.  It's &lt;a href="http://www.linuxmint.com/start/elyssa/"&gt;LinuxMint 5&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I am very sensitive to (or intolerant of) poor font rendering on laptop displays. This has been the stumbling block for all previous distros, even those with support for anti-aliasing and font-hinting.  Finally, the LinuxMint distro team appears to have sorted this out: the fonts render beautifully. &lt;br /&gt;&lt;br /&gt;All the other issues in my list are addressed: the system picked up my wireless network immediately and connected as soon as I entered the pass-phrase. As far as I can tell, all devices appear to work, and the power-management stuff works.&lt;br /&gt;&lt;br /&gt;Finally, for me the aesthetics are spot-on.  The default theme and the choice of colours really works for me.  This matters, when you're spending significant tim in front of the system.&lt;br /&gt;&lt;br /&gt;This is a truly excellent distro - far and away the best I have ever used.  This one will stay on my laptop and I plan to make the effort to use it instead of Windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-9025691295712043171?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/9025691295712043171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/07/linuxmint-5-elyssa.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/9025691295712043171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/9025691295712043171'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/07/linuxmint-5-elyssa.html' title='LinuxMint 5 (Elyssa)'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1360091706317299141</id><published>2008-07-17T16:36:00.003+01:00</published><updated>2008-07-17T21:27:21.796+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans 6.5 M1</title><content type='html'>I've just installed M1 and I'm disappointed to note that it appears not to do text anti-aliasing in the editor.  Not only that, but the advanced options panel just doesn't have any editor settings in it at all.  Strange - it might be something to do with migrating my old settings (from 6.1) which the installer does automatically. &lt;br /&gt;&lt;br /&gt;I do hope this is just a temporary glitch - without the anti-aliasing, it's not a pretty sight... &lt;br /&gt;&lt;br /&gt;Turns out other folk have spotted this: I just Googled for posts on this and found that a commenter on &lt;a href="http://blogs.sun.com/tor/entry/ruby_screenshot_of_the_week27"&gt;Tor Norbye's blog&lt;/a&gt; mentions this.  Tor's replt to this comment suggests it's just a Vista issue, but I'm seeing this on XP Professional too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1360091706317299141?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1360091706317299141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/07/netbeans-65-m1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1360091706317299141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1360091706317299141'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/07/netbeans-65-m1.html' title='NetBeans 6.5 M1'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2130920832281973369</id><published>2008-07-09T11:38:00.000+01:00</published><updated>2008-10-11T17:13:19.301+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogs'/><title type='text'>Moving to Blogger</title><content type='html'>I'm not sure it's worth running a blog engine myself, any more.  With something like Blogger, free of charge and hosted by Google, it's hard to see why I should keep up with WP maintenance and have to think about upgrades, backups, MySQL and so on.&lt;br /&gt;&lt;br /&gt;I've had &lt;a href="http://searjeant.blogspot.com/"&gt;my own blogger account&lt;/a&gt; for a while, but done relatively little with it until this week.  I haven't ever been what you'd call a prolific blogger, but if I'm going to increase the amount / frequency of writing, blogger is almost certainly more convenient.&lt;br /&gt;&lt;br /&gt;So, please see &lt;a href="http://searjeant.blogspot.com/"&gt;my Blogger page&lt;/a&gt; from now on.  This blog/feed will almost certainly disappear in the coming months.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2130920832281973369?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2130920832281973369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/07/moving-to-blogger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2130920832281973369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2130920832281973369'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/07/moving-to-blogger.html' title='Moving to Blogger'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7196392578842608043</id><published>2008-07-09T08:18:00.004+01:00</published><updated>2008-07-09T08:54:16.414+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bletchley'/><title type='text'>Bletchley Park - we must save it.</title><content type='html'>Unbelievable though it may be, &lt;a href="http://www.bletchleypark.org.uk/"&gt;Bletchley Park&lt;/a&gt; is under threat, simply because it doesn't have a reliable source of funding.  Apparently, it has been deemed ineligible for funding by the National Lottery, and turned down by the Bill &amp;amp; Melinda Gates Foundation.&lt;br /&gt;&lt;br /&gt;This is an outrageous, shocking situation.  Can we really be guilty of placing such a low value on maintaining this important site? If you know the history behind Bletchley Park and the Enigma code, then you will understand why I feel so strongly about this.  If you are not familiar with this amazing story, &lt;a href="http://en.wikipedia.org/wiki/Bletchley_Park"&gt;read&lt;/a&gt; around the subject a little and you will soon appreciate the magnitude of the achievement at Bletchley and its importance to this country.&lt;br /&gt;&lt;br /&gt;Please do sign the e-petition.  Go to &lt;a href="http://petitions.pm.gov.uk/BletchleyPark/"&gt;this page&lt;/a&gt; and follow the instructions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7196392578842608043?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7196392578842608043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/07/bletchley-park-we-must-save-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7196392578842608043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7196392578842608043'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/07/bletchley-park-we-must-save-it.html' title='Bletchley Park - we must save it.'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-904109248487847848</id><published>2008-07-08T13:57:00.004+01:00</published><updated>2008-07-08T14:54:26.001+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='XSD'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Schema Tools</title><content type='html'>There are already lots of commercial tools out there for editing and managing XSDs but I wanted to create my own.  I don't want to pay for a commercial tool, and I'll learn a lot in the process.  The goals for the toolset are quite modest:&lt;br /&gt;&lt;br /&gt;1) Given a schema and a root element, generate the element/attribute tree for that infoset.&lt;br /&gt;&lt;br /&gt;When you are handed a new schema, it is usually helpful to be able to see what an instance document should look like.  Of course, a single schema can validate potentially many different infosets, so the client must be capable of generating the infoset for any given root element.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) Automatically generate test instance documents.&lt;br /&gt;&lt;br /&gt;This is a natural extension of (1).  In any application involving the processing of schema-constrained XML, you need to be able to test against valid and invalid instance documents, and to achieve full test coverage for any non-trivial schema you will need a lot of instance documents.  This is possibly the most useful application for this project.&lt;br /&gt;&lt;br /&gt;Schema types mostly correspond with domain types (i.e. ignoring metadata) and you ideally want to be able to use representative test-data.  For instance, if the domain includes people's names, you would prefer to use a pool of semi-realistic family-name/given-name lists, instead of random sequences of characters.  So the tool will also allow you to create lists of values and associate them with schema components, using data from the appropriate list when generating test instances.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) Schema-driven UI generation and XForms&lt;br /&gt;&lt;br /&gt;It follows from the previous two items that you will want to look at the XML instance data, not just when testing but also in the application.  It's possible to look at the XML text, but it's much nicer to be able to create some sort of form or dialog which presents the data in a more natural way, e.g. as a set of label/text pairs.  This part of the tool is intended to help with that; guided by the XSD and some input from the user, the tool will generate a UI for the instance document.  I haven't decided which UI to target yet, but it's likely to be Swing/rich-client to start with.  Eventually, I will want to generate web forms and XForms.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've managed to implement (1) already.  I'm not sure it covers every case yet, but it does work.  The code is messy and the presentation is currently a tiny Swing application.  My goal for the UI is to create a Netbeans module, and integrate it into the Netbeans IDE alongside the existing (excellent) schema support.  If I can integrate my commands into the NB context menu, the ideal is to trigger my functionality from inside the standard NB schema views.&lt;br /&gt;&lt;br /&gt;I have a few more ideas for exploiting this code, but those listed above are a good start I think.  Once I have working code I'm prepared to release, I will post something online for people to play with (and/or tear apart).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-904109248487847848?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/904109248487847848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/07/schema-tools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/904109248487847848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/904109248487847848'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/07/schema-tools.html' title='Schema Tools'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-6276545093018881072</id><published>2008-07-07T22:29:00.010+01:00</published><updated>2008-07-08T15:14:08.688+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Netbeans 6 -  it's getting better all the time</title><content type='html'>It's great to see the Netbeans QA process working so well.  I reported &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=138916"&gt;two&lt;/a&gt; &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=138715"&gt;issues&lt;/a&gt; recently, and both have been fixed.  One was a Subversion related issue; within 24 hours I was contacted by the developer assigned to the issue, and offered a patched jar to try!  It fixed the problem, and the patch will be rolled-up in v6.5.  Impressive.&lt;br /&gt;&lt;br /&gt;Netbeans is getting better, faster, than anything else out there, as far as I can see.  There are some things I still don't think are good enough yet (such as the UML support) and I wish the whole thing would start up much more quickly, but it's important to recognize just how good this tool already is.  And it's a free, small download.  The comparison with Visual Studio is almost irresistable; VS is a DVD's worth of code, costs a fortune and offers a much less capable code editor, less refactoring support and doesn't really support rich client development to the extent NB6 does.&lt;br /&gt;&lt;br /&gt;Look the the &lt;a href="http://www.netbeans.org/features/ruby/index.html"&gt;Ruby support in NB6&lt;/a&gt;, too: although there is a lot of interesting work going on with &lt;a href="http://blogs.msdn.com/hugunin/archive/2007/04/30/a-dynamic-language-runtime-dlr.aspx"&gt;dynamic languages at Microsoft&lt;/a&gt;, the impression you get is that these are somewhat 'second-class' projects with no real presence in the main-line Visual Studio product plans.  JRuby, on the other hand, is almost front-and-centre in the Netbeans world.  The integration of languages via the JVM, and the development of integrated tooling in Netbeans makes it possible to do serious work with Java and Ruby, right now.&lt;br /&gt;&lt;br /&gt;Another thing: Sun isn't trying to shut-down or marginalise any of the community, open-source projects which populate the Java tools landscape.  Instead, they've recognized and accepted the strongest members of the community and built tool support for them in Netbeans.  Just take the most obvious examples:  Ant, JUnit and Maven.  Compare that with what Microsoft has done: ignored NDoc and produced Sandcastle, created MSBuild to replace NAnt, and they want you to use (therefore buy) their own version-control system rather than embrace Subversion or Mercurial.  I'm sure Team System is probably fine, as long as you have deep pockets and you are prepared to submit totally to Microsoft's prescription for your development team processes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-6276545093018881072?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/6276545093018881072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/07/netbeans-6-its-getting-better-all-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6276545093018881072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6276545093018881072'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/07/netbeans-6-its-getting-better-all-time.html' title='Netbeans 6 -  it&apos;s getting better all the time'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7043939874325964747</id><published>2008-04-22T11:10:00.000+01:00</published><updated>2008-10-11T17:13:19.771+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Domain Driven Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>PSL not DSL</title><content type='html'>I've long felt that the DSL moniker is a little inappropriate for some (perhaps most) applications of the ideas behind it. The majority of 'DSLs' are really just little languages which help solve specific problems in the software development space, e.g. &lt;a href="http://rake.rubyforge.org/" target="_blank"&gt;Rake&lt;/a&gt;, which provides a very nice language for expressing graphs of dependent tasks.  Martin Fowler has written quite a lot on the subject of DSLs - &lt;a href="http://martinfowler.com/articles/codeGenDsl.html" target="_blank"&gt;this paper&lt;/a&gt; is a good example of a little language being described as a DSL.&lt;br /&gt;&lt;br /&gt;So it was good to hear &lt;a href="http://onestepback.org/" target="_blank"&gt;Jim Weirich&lt;/a&gt; (the creator of Rake) make this very point while talking about the DSL hype in &lt;a href="http://www.infoq.com/interviews/jim-weirich-discusses-rake#" target="_blank"&gt;this InfoQ interview&lt;/a&gt;.  The relevant bit is something like 14 minutes in.  I like the term Problem Specific Language (PSL), which Jim invents here.&lt;br /&gt;&lt;br /&gt;I'm working on applying Ruby to modelling (and reasoning about) a real domain, and driving a tool-chain for forward-engineering artifacts from the Ruby description.  Apart from Rake, I'm also looking at &lt;a href="http://rspec.info/" target="_blank"&gt;RSpec&lt;/a&gt;, which uses Ruby syntax to capture descriptions of system behaviour.  I'm very keen to work on the 'real DSL'  problem, looking for the sweet-spot where &lt;a href="http://www.domaindrivendesign.org/" target="_blank"&gt;domain-driven design&lt;/a&gt; and programming overlap.  This whole area seems very fruitful for Ruby, because the language allows us to create very rich and expressive scripts which not only read quite naturally, but can also control complex processes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7043939874325964747?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7043939874325964747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/04/psl-not-dsl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7043939874325964747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7043939874325964747'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/04/psl-not-dsl.html' title='PSL not DSL'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-475834413181744337</id><published>2008-04-17T22:05:00.000+01:00</published><updated>2008-10-11T17:13:20.288+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Wubi and Xubuntu</title><content type='html'>After the last foray into the world of Linux I swore I wouldn't bother for another year or so.  Somehow I came across a link to &lt;a href="http://wubi-installer.org/"&gt;Wubi&lt;/a&gt; and decided it sounded too interesting to ignore.&lt;br /&gt;&lt;br /&gt;Live CDs are not really practical for doing anything much more than a cursory look and installing to a partition is too much work. Wubi is a very clever 'third way', installing a distro as if it is a Windows application, yet actually allowing the OS to start from the Windows boot screen, at full speed.  Clever stuff.  It uses a virtual disk (like VMware), which the Wubi creators admit will make file I/O slightly slower.&lt;br /&gt;&lt;br /&gt;Wubi is set up to work with Ubuntu Linux, which most people will experience via Gnome and the rather, er, brown theme.  Ubuntu is also available with KDE but there's a third alternative, &lt;a href="http://www.xubuntu.org/"&gt;Xubuntu&lt;/a&gt;, which uses the &lt;a href="http://www.xfce.org/"&gt;xfce&lt;/a&gt; window manager. I like this even more because it's lighter/faster than either of the others, and offers just enough functionality, without getting in my way.  I simply don't need (or want) a lot of silly 3D desktop effects, nor a hundred different ways of playing media files.&lt;br /&gt;&lt;br /&gt;I simply ran the installer and selected Xubuntu.  Some time later, it was ready.  Reboot, select Xubuntu, and there it was.  Amazing!  Even more amazing was the fact that Xubuntu located all the laptop hardware including the sound and WLAN chipsets.  As soon as I selected the network applet, it offered to connect me to my home WLAN.  I was running and connected to the internet in minutes.  No other installer/distro combination has got even close to being this good.  Xubuntu is excellent - I have had no difficulty in installing the extras I need (Java JDK, OpenOffice and Netbeans, for example) via Synaptic.&lt;br /&gt;&lt;br /&gt;There is a way to convert the Wubi install to something more permanent using &lt;a href="http://lubi.sourceforge.net/lvpm.html"&gt;LVPM&lt;/a&gt;.  I will probably do this, but only when I've sorted out the partitioning of the drive - a chore I'm not looking forward to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-475834413181744337?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/475834413181744337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/04/wubi-and-xubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/475834413181744337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/475834413181744337'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/04/wubi-and-xubuntu.html' title='Wubi and Xubuntu'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-418231122810187605</id><published>2008-04-03T21:50:00.000+01:00</published><updated>2008-10-11T17:17:21.407+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Tomorrow's code</title><content type='html'>I've just finished reading &lt;a href="http://news.bbc.co.uk/1/hi/technology/7324556.stm"&gt;this piece&lt;/a&gt; by Bill Thompson, on the BBC Technology site.  After a potted history (taking in the dear-old BBC Micro, of course) he makes a good point about the way we no longer seem to be encouraging school students to learn to program: greater importance is attached to teaching them to use office suites and accessing the internet than to enquiring into how all this software got written, or why it isn't more reliable.&lt;br /&gt;&lt;br /&gt;This is just one symptom of a larger problem facing science and engineering generally.  Physics is &lt;a href="http://news.bbc.co.uk/1/hi/sci/tech/7274956.stm"&gt;under&lt;/a&gt; &lt;a href="http://news.bbc.co.uk/1/hi/sci/tech/7207330.stm"&gt;threat&lt;/a&gt;, engineering (so we hear) is less popular than ever, and it often feels as if greater value is placed on producing 'entrepreneurs' and managers than engineers.  I think we're running the risk of forever losing our position as world-leading engineers and innovators; perhaps that position is already lost?&lt;br /&gt;&lt;br /&gt;I want to see people excited and enthused by the truly great scientific &lt;a href="http://www.ukcrc.org.uk/grand_challenges/about/index.cfm"&gt;challenges&lt;/a&gt; facing us. Our future national prosperity depends on us being smarter than the competition: we cannot grow bigger, we cannot be much more populous, we cannot rely on mineral or oil wealth, and surely we are beginning to appreciate just how precarious our position can become when we depend too much upon financial markets whose behaviours are globally linked, not wholly predictable and not under our control.&lt;br /&gt;&lt;br /&gt;We seem to spend a lot of time looking back wistfully at past triumphs (like the invention of Radar, cracking Enigma and the birth of computation, discovering DNA), rather than looking forward and preparing to celebrate the next ones.  Are we talking ourselves out of a great future, collectively mentally preparing ourselves to accept that our greatest achievements lie behind us?  Do we really want to turn our country into a kind of museum whose dusty artifacts catalogue a brilliant past?&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-418231122810187605?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/418231122810187605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/04/tomorrow-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/418231122810187605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/418231122810187605'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/04/tomorrow-code.html' title='Tomorrow&amp;#39;s code'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7758654710920317214</id><published>2008-03-07T22:37:00.000Z</published><updated>2008-10-11T17:17:22.733+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Hate Vista, love C#</title><content type='html'>Came across this blog post, while following-up on a semantic-web related Google Code project:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aabs.wordpress.com/2007/04/18/why-i-hate-windows-vista-and-can%e2%80%99t-wait-to-re-install-xp/"&gt;Why I hate Windows Vista (and can’t wait to re-install XP) « The Wandering Glitch 2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have often wondered: how can the company which brought us C#, the .NET Framework and the CLR possibly be the same company which excreted Vista?&lt;br /&gt;&lt;br /&gt;The guy behind the above referenced post is clearly a fan of C# (as I am), but despises Vista (as I do, along with those who made all the colourful comments on his post). I have left Vista on my new laptop, but in a much reduced partition, and have given over the lion's share of the drive to my copy of XP Professional, which I still think is pretty damn good.&lt;br /&gt;&lt;br /&gt;What about the competition?  On the desktop, there isn't much that's credible.  (I'm not considering MacOS because to get that you have to buy the hardware). So I spent (or should that read wasted?) a few hours with some of the latest crop of Linux distros last weekend: Fedora 8, openSUSE 10.3, the latest Mandriva, PCLinuxOS 2007 and probably another one but I can't be bothered to recall which.  None of them impressed me in the least.  Only ONE of them (PCLinuxOS) correctly detected all of the important devices on this laptop, including the wireless chipset. Plus they all looked terrible when compared to Windows XP, especially in terms of font rendering, so they couldn't even seduce me with glamorous graphics.&lt;br /&gt;&lt;br /&gt;What really drives me mad is that none of these distros really stands out: they all look virtually the same (Gnome or KDE, plus or minus a colour-scheme and some desktop wallpaper), they all contain more or less the same rag-tag collection of packages, but (and here's the kicker) they're all &lt;span style="font-style: italic"&gt;different &lt;/span&gt;in irritatingly detailed respects, some of which are downright inconvenient such as package management or filesystem layout!  Every year is heralded as 'the year of Linux on the desktop', and every year I dutifully have another look, then gratefully boot back into Windows XP and get on with business.&lt;br /&gt;&lt;br /&gt;I wonder what's next for Windows?  With Microsoft so chock full of truly bright and talented folk, I'm really hoping that we can look forward to the Windows that Vista should have been.  And when they do finally release that, why not give away XP?  Or, to avoid the inevitable complaints about anti-competitive pricing, make it 50 bucks?  Then nobody except the bigots or fundamentalists will need to waste time with Linux.  Go on Microsoft, do us all a favour.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7758654710920317214?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7758654710920317214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/03/hate-vista-love-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7758654710920317214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7758654710920317214'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/03/hate-vista-love-c.html' title='Hate Vista, love C#'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2690274070917943203</id><published>2008-02-28T17:34:00.000Z</published><updated>2008-10-11T17:17:23.523+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Solaris'/><title type='text'>Solaris Developer Express 01/08</title><content type='html'>The latest release DVD dropped through the letterbox last week, and I eventually found time to try it out, hoping very much that it would fix the issues I mentioned in the previous post.&lt;br /&gt;&lt;br /&gt;What a disappointment. First, although there is an option to upgrade the existing installation I decided not to take the small risk that this might not replace all drivers etc., so I went for a fresh install over the top of the old one. This went OK, right up to the point where I removed the DVD and rebooted... &lt;br /&gt;&lt;br /&gt;After the initial startup, Solaris starts building a database of some sort. I think this is a one-off operation which it performs the first time a new installation is booted. I recalled seeing it before, so left it to run while I went to get a mug of tea. When I cam back, I found a dead laptop - no login prompt, no power light, nothing. It was then that I realised that I'd been running on battery power during the install and I hadn't flipped the power-supply wall switch to 'on'. &lt;br /&gt;&lt;br /&gt;So what? Power switch to on, and start the laptop: it'll be fine. Wrong. The OS wouldn't boot. I can't recall all the rubbish that scrolled past, but I'm pretty sure that the power finally ran out while this configuration database (whatever it is) was building, and without it you're stuffed. I wasn't impressed.&lt;br /&gt;&lt;br /&gt;But I was determined enough to start at the beginning (again), this time with AC power on! And of course this time it installed perfectly. However, after logging-in I was disappointed to discover that none of the networking devices were recognized, nor was the sound and I presume also the graphics chipset (as before). This time I didn't even see the nwam dialog, so I have no idea how to make Solaris usable on this laptop.&lt;br /&gt;&lt;br /&gt;I'm afraid that's it, for me. I won't be wasting any more time on Solaris, until I'm sure it will at least connect to the network. Windows XP is still my favourite day-to-day desktop OS, because it just works. I'm so glad I didn't remove it.&lt;br /&gt;&lt;br /&gt;But what a pity: I had high hopes that Solaris might offer what no Linux distro (so far) has been able to: a good, professional alternative to Windows, created and supported by a trusted company like Sun.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2690274070917943203?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2690274070917943203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/02/solaris-developer-express-0108.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2690274070917943203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2690274070917943203'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/02/solaris-developer-express-0108.html' title='Solaris Developer Express 01/08'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-695822236278192905</id><published>2008-02-19T14:10:00.000Z</published><updated>2008-10-11T17:17:24.070+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Solaris'/><title type='text'>Solaris Developer Express on Acer Laptop</title><content type='html'>I've been keen to try Sun's &lt;a href="http://developers.sun.com/sxde/"&gt;Solaris Developer Express&lt;/a&gt; (SXDE) for a while now. They'll ship you the DVD free-of-charge, so there's no reason not to give it a spin.&amp;nbsp; I'm waiting to get 1/08 (this year's first drop), so I installed 9/07.&amp;nbsp; You can read a short review of the 9/07 release &lt;a href="http://www.phoronix.com/scan.php?page=article&amp;amp;item=859&amp;amp;num=1"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I made a partition for it on my Acer TravelMate 5720 (using Acronis Disk Director, which I can recommend), rebooted with the DVD in the drive, and followed my nose.&amp;nbsp; It was very straightforward, and once into the main part of the install process I was able to leave it chuntering away while I got on with other things.&lt;br /&gt;&lt;br /&gt;Eventually, a reboot (without the DVD in the drive of course) and the first pleasant surprise was that the Grub bootloader had correctly detected the other two OS on this machine (Vista and XP), and I was able to boot into all three without a problem.&amp;nbsp; Full marks for that (and a sigh of relief).&amp;nbsp; However, once into SXDE I discovered a few annoying issues: hardware support (predictably enough) plus strange behaviour from the wireless network software.&amp;nbsp; Below is what I found, plus some pointers which I hope may help others in the same situation.&lt;br /&gt;&lt;br /&gt;By default, SXDE uses something called Network AutoMagic (nwam) which supposedly detects wireless networks and gives you the opportunity to connect to them.&amp;nbsp; Well, it certainly detected my wireless network, but stubbornly refused to connect me to it.&amp;nbsp; It prompted (correctly) for the wireless network ID (not broadcast) and the WPA password, appeared to accept both, but didn't connect or give me an error message.&amp;nbsp; Every few minutes, the nwam dialog popped up again, but repeated attempts made no difference.&amp;nbsp; The documentation for nwam is quite poor and not helped by the fact that some URLs in Sun's online documentation seem to point to the wrong place.&amp;nbsp; The &lt;a href="http://opensolaris.org/os/project/nwam/phase0/troubleshooting/"&gt;OpenSolaris project pages&lt;/a&gt; were probably the most helpful.&amp;nbsp; I tried stopping/starting the service and playing with the parameters, but this issue remains unresolved, and is very annoying.&lt;br /&gt;&lt;br /&gt;Worse still, the NetLink BCM5787M Gigabit Ethernet PCI Express device (i.e. fixed-wire ethernet) also didn't appear to work, which meant no connectivity whatsoever!&amp;nbsp; Not a great position to be in.&amp;nbsp; But, there is hope - keep reading.&lt;br /&gt;&lt;br /&gt;The other hardware issues were less irritating: the Texas Instruments 5-in-1 multimedia card reader has no Solaris driver (I don't really care), the audio controller (Intel 82801H) chipset is supposed to have a bundled driver but it doesn't work, and the Intel Mobile GM965/GL960 Integrated Graphics Controller is also supposed to have a bundled driver but isn't reported.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;For anyone else doing this, I strongly suggest running Sun's excellent &lt;a href="http://www.sun.com/bigadmin/hcl/hcts/device_detect.jsp"&gt;Device Detection Tool&lt;/a&gt;, a free (web-start) download which will give you a detailed report of what hardware you have, and whether there is a Solaris / SXDE driver for it.&amp;nbsp; This gave me hints on where to look for the missing drivers, and told me exactly what hardware I actually have in this laptop - very useful.&lt;br /&gt;&lt;br /&gt;This tool pointed me directly to the page on the &lt;a href="http://www.broadcom.com/support/ethernet_nic/netlink.php"&gt;Broadcom site&lt;/a&gt; where I can download the Ethernet drivers for my hardware.&amp;nbsp; Pretty good, but when you get there, you discover the following message: "&lt;b&gt;Note:&lt;/b&gt; Broadcom does not offer UnixWare, SCO and Solaris drivers&lt;br /&gt;            for NetLink Ethernet controllers."&amp;nbsp; Not good.&amp;nbsp; But it may be I can use the Linux driver.&amp;nbsp; When I get time, I will return to this and post my experiences here.&lt;br /&gt;&lt;br /&gt;Lastly, a note on aesthetics.&amp;nbsp; Solaris uses Gnome by default, which is OK rather than outstanding in any way.&amp;nbsp; But colours and fit/finish on the desktop are very good indeed: in my opinion, Solaris looks great in every way, except for font rendering.&amp;nbsp; There is a font-smoothing facility (in preferences) but this just doesn't approach the quality of Microsoft's ClearType implementation in Windows.&amp;nbsp; For me, font rendering is a big deal - I hate to look at ugly fonts or blurry, smeary characters.&amp;nbsp; I suppose this may be because Solaris is using a down-level video driver, because it doesn't support the Intel Mobile chipset on this laptop.&amp;nbsp; Get the font rendering right, and I'd be happy to sit in front of Solaris all day.&lt;br /&gt;&lt;br /&gt;As soon as I have a network connection, I'll continue evaluating Solaris and post my findings here. &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-695822236278192905?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/695822236278192905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/02/solaris-developer-express-on-acer.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/695822236278192905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/695822236278192905'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/02/solaris-developer-express-on-acer.html' title='Solaris Developer Express on Acer Laptop'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-965931847773977719</id><published>2008-02-17T11:59:00.000Z</published><updated>2008-10-11T17:17:25.139+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Technology'/><title type='text'>Java Futures - and Software Processeses (sic)</title><content type='html'>If you're looking for a good summary of what's coming up in &lt;a href="https://openjfx.dev.java.net/"&gt;Java FX&lt;/a&gt;, the &lt;a href="https://jdk6.dev.java.net/6uNea.html"&gt;Java SE Update&lt;/a&gt; (the 'consumer JRE') or JDK 7, then &lt;a href="http://www.infoq.com/presentations/haase-javafx-jdk7"&gt;this talk&lt;/a&gt; given by Chet Haase is a must-see.&amp;nbsp; It's quite long, but it's worth taking the extra time because this is good, solid content.&amp;nbsp; And it's so good to get all this material presented by a first-class technical presenter rather than having to sit through shallow Powerpoint 'fluff' from marketing.&lt;br /&gt;&lt;br /&gt;After watching this I located &lt;a href="http://weblogs.java.net/blog/chet/"&gt;Chet's blog&lt;/a&gt;, and found his hugely &lt;a href="http://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html"&gt;entertaining send-up&lt;/a&gt; of our industry preoccupation with methodology.&amp;nbsp; I think we have a new candidate taxonomy of the software process landscape!&amp;nbsp; Conference Driven Development reminded me of some &lt;a href="http://en.wikipedia.org/wiki/WinFS"&gt;Microsoft technologies&lt;/a&gt; I recall &lt;a href="http://www.crn.com/it-channel/18840078"&gt;hearing about&lt;/a&gt; - people were building plans on top of some of this stuff before we'd even left the PDC...&lt;br /&gt;&lt;br /&gt;I don't have time to play with Update N or to try Java FX Script just now.&amp;nbsp; FX Script interests me mainly because of the nice binding environment it promises, but JRuby will probably get my attention before FX mainly because I can put it to use on real problems more quickly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-965931847773977719?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/965931847773977719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/02/java-futures-and-software-processeses.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/965931847773977719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/965931847773977719'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/02/java-futures-and-software-processeses.html' title='Java Futures - and Software Processeses (sic)'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3088804462686883316</id><published>2008-02-09T20:27:00.000Z</published><updated>2008-10-11T17:17:25.713+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Oracle 10g XE, SQL Developer and Java</title><content type='html'>I've been forced to install and use &lt;a href="http://www.oracle.com/technology/products/database/xe/index.html"&gt;Oracle 10g XE&lt;/a&gt; recently.&amp;nbsp; The experience hasn't been pleasant.&amp;nbsp; I'm sure the database technology itself is perfectly good, but the tools and support are dreadful, when compared to Microsoft's &lt;a href="http://www.microsoft.com/express/sql/default.aspx"&gt;SQL Server Express Edition&lt;/a&gt; or &lt;a href="http://dev.mysql.com/"&gt;MySQL&lt;/a&gt;.&amp;nbsp; I'm writing this while still cross, so it's not going to be very nice about Oracle or Java.&lt;br /&gt;&lt;br /&gt;I need XE for several reasons, one of which is that I have a dump file containing a complete database which I need to work with.&amp;nbsp; Oracle XE comes with a (rather lame) web-based admin module which doesn't even seem to have tools for importing database dump (.dmp) files.&amp;nbsp; To do this you need the command line imp tool.&amp;nbsp; This would have been OK if it had worked (it didn't), but even then I hate having to find the right command-line incantations for things I only occasionally have to do. &lt;br /&gt;&lt;br /&gt;Why didn't imp work?&amp;nbsp; I'm not sure yet because right now I'm so pissed-off I can't be bothered to scroll through the screen-fulls of error messages it generated.&amp;nbsp; (By default it doesn't even write these to a log file either - you have to tell it to do that.&amp;nbsp; Duh.)&amp;nbsp; This is just flat wrong.&amp;nbsp; If there are version issues, or permission issues or similar, I should get a simple message, early, to tell me this, and the import process should stop right away, not struggle hopelessly on, scrolling pages of crap at me.&lt;br /&gt;&lt;br /&gt;The online documentation isn't very good either.&amp;nbsp; I admit I haven't burrowed through every page but I shouldn't need to &lt;span style="font-style: italic;"&gt;do &lt;/span&gt;that, just to import a dmp file and manage an additional database. &lt;br /&gt;&lt;br /&gt;So, I looked for a management tool (like the tools you get with MySQL, SQL Server and PostgreSQL), and yes, there is one.&amp;nbsp; The &lt;a href="http://www.oracle.com/technology/products/database/sql_developer/index.html"&gt;Oracle SQL Developer&lt;/a&gt; is a Java application which you can download with or without the JRE.&amp;nbsp; Well I've got Java 1.5 and 1.6 on my machine (both JRE and JDK), so I figured I could take the smaller download.&amp;nbsp; You get a zip which you unpack somewhere, and run the top-level exe.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;So, I ran the EXE.&amp;nbsp; And what's the first thing I see?&amp;nbsp; This:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.searjeant.net/wp/wp-content/uploads/2008/02/sqldevlocatejvm.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;So, unlike many other Java applications, this one can't locate any of the (four) Java installations on my machine.&amp;nbsp; Poor, but not disastrous I suppose, so I browsed to the Java 1.6 JDK and clicked OK.&amp;nbsp; I expected the tool to start, but instead I got this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.searjeant.net/wp/wp-content/uploads/2008/02/sqldevunabeltocreatejvm.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;What?! Perhaps it doesn't like 1.6 - perhaps I'll try 1.5.&amp;nbsp; So I ran the EXE again, expecting to be prompted to browse to java.exe again.&amp;nbsp; But no!&amp;nbsp; Instead, I immediately got the second error dialog again!&amp;nbsp; The act of browsing to some java.exe seems to write a setting somewhere, which is used in subsequent launches, even if it's wrong.&lt;br /&gt;&lt;br /&gt;It's hard to believe that one of the largest software companies on the planet can offer this kind of low-rent, sub-shareware experience - especially on an entry-level product surely intended to attract new users of Oracle technology.&lt;br /&gt;&lt;br /&gt;I'm just not going to waste any more of my time on this.&amp;nbsp; It's more than enough to make me uninstall Oracle 10g XE and give up trying to use it.&amp;nbsp; I've used MySQL and Microsoft SQL Server Express happily in the past, so I'll see if I can import or convert the dmp file and use one or other of those instead.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3088804462686883316?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3088804462686883316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/02/oracle-10g-xe-sql-developer-and-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3088804462686883316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3088804462686883316'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/02/oracle-10g-xe-sql-developer-and-java.html' title='Oracle 10g XE, SQL Developer and Java'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-4072648981662664605</id><published>2008-01-29T22:18:00.000Z</published><updated>2008-10-11T17:17:26.085+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow'/><title type='text'>BPMN - XPDL - BPEL</title><content type='html'>After writing the last piece it struck me that I had unintentionally suggested that BPEL and XPDL are somehow competing for the same role, which just isn't right. &lt;a href="http://kswenson.wordpress.com/2006/05/26/bpmn-xpdl-and-bpel/"&gt;This post&lt;/a&gt; is an excellent summary of the true position - roughly, XPDL for process description, BPEL for programming.&lt;br /&gt;&lt;br /&gt;So what I think I'm most interested in is using a combination of these two, treating the design of a workflow-driven solution as a layered artifact.  The XPDL is relatively technology-neutral: the description is an abstraction which can be shared across an enterprise (or even between enterprises) because it doesn't commit to implementation details.&lt;br /&gt;&lt;br /&gt;The XPDL layer would then be used to drive the BPEL layer, where processes and activities which appear as abstractions at the XPDL layer are translated into concrete actions (and transactions) against real systems or service endpoints.&lt;br /&gt;&lt;br /&gt;When I get some time (!) I plan to experiment with this combination, to see how practical it is for modelling an existing healthcare workflow I've been involved in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-4072648981662664605?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/4072648981662664605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/01/bpmn-xpdl-bpel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4072648981662664605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4072648981662664605'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/01/bpmn-xpdl-bpel.html' title='BPMN - XPDL - BPEL'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2456326925271815736</id><published>2008-01-19T23:53:00.000Z</published><updated>2008-10-11T17:17:26.484+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Uncategorized'/><title type='text'>VS 2008 - Finally</title><content type='html'>Installing .NET 3.5 from scratch was the answer. This took two attempts; the first failed because the installer told me that 3.5 was already installed!&amp;nbsp; The only things I could find which suggested 3.x was the XPS Viewer, which appears under .NET Framework 3.0 in the 'Windows Features' part of the programs control panel applet. Anyway, with 3.5 installed, the VC# 2008 installer finally ran to completion and VC# appears to run fine.&lt;br /&gt;&lt;br /&gt;Why did this have to take so long and give me so much grief?&amp;nbsp; Why doesn't Vista display the .NET framework in the add/remove programs panel?&amp;nbsp; Googling about this I discover that Microsoft wants us to consider the framework as part of the OS, and not something which can be installed or removed.&amp;nbsp; This seems ridiculous, given that you can download and run the installers for the various frameworks and it can still be important to know which version(s) are installed.&lt;br /&gt;&lt;br /&gt;This is another one of those stupid, stupid, unnecessary things which will drive some folk away from Windows and into the arms of Apple (or even the Linux community).&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2456326925271815736?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2456326925271815736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/01/vs-2008-finally.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2456326925271815736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2456326925271815736'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/01/vs-2008-finally.html' title='VS 2008 - Finally'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7544971863691054163</id><published>2008-01-19T20:48:00.000Z</published><updated>2008-10-11T17:17:26.921+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Uncategorized'/><title type='text'>VS2008 Installer - part 2</title><content type='html'>Well, the network install fared no better. This is very frustrating and also puzzling, because this is a new Vista install (albeit an OEM install on a new laptop) and as far as I can tell there are none of the VS2008 or even .NET Framework 3.5 components already installed: I've suffered in the past when trying out early-access releases, when stuff isn't properly uninstalled, but in this case there's nothing to uninstall.&lt;br /&gt;&lt;br /&gt;So, next step is to start with the .NET framework alone, and work up from there.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7544971863691054163?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7544971863691054163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/01/vs2008-installer-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7544971863691054163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7544971863691054163'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/01/vs2008-installer-part-2.html' title='VS2008 Installer - part 2'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-8045026877252773177</id><published>2008-01-18T15:47:00.000Z</published><updated>2008-10-11T17:17:27.323+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Uncategorized'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Visual Studio Express 2008 Installer</title><content type='html'>Bit disappointed with the latest VS Express 2008 installer - I've download the 'kitchen sink' ISO image (containing all the VS Express editions), but when I try to install VC#, I get these errors:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.searjeant.net/wp/wp-content/uploads/2008/01/setupexefailure.gif" /&gt;&lt;br /&gt;&lt;br /&gt;and this one:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.searjeant.net/wp/wp-content/uploads/2008/01/vcinstallerror.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Because this is a new laptop (therefore a fresh Vista install) I did wonder whether this was a Windows Installer service issue, but the service is there and appears to be the latest version.&amp;nbsp; I'm puzzled, and more than slightly irritated.&amp;nbsp; It must be something simple - I'll no doubt kick myself when I discover what it is.&amp;nbsp; Meantime, I'll try the network install.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-8045026877252773177?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/8045026877252773177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/01/visual-studio-express-2008-installer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8045026877252773177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8045026877252773177'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/01/visual-studio-express-2008-installer.html' title='Visual Studio Express 2008 Installer'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-280054252428750776</id><published>2008-01-16T21:31:00.000Z</published><updated>2008-10-11T17:17:27.885+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>FEBE for Firefox</title><content type='html'>I recently got a shiny new laptop, which is great, but usually this means installing and configuring a lot of stuff before it's really a comfortable place to be.&amp;nbsp; I'm sure this is familiar to most folk.&amp;nbsp; I expected one of the biggest challenges to be Firefox, as I have a number of plugins, a lot of passwords and the usual bookmarks and preferences.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Luckily, I found FEBE, a Firefox addin which effectively solves this problem.&amp;nbsp; The addon can be found on the Mozilla site &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2109"&gt;here&lt;/a&gt;, but the &lt;a href="http://customsoftwareconsult.com/extensions/febe/febe.html"&gt;author's own site&lt;/a&gt; has the latest version - there seems to be quite a big version gap.&lt;br /&gt;&lt;br /&gt;To take all of my settings to the new machine I used the 'Full Profile' option in FEBE which creates a single file containing absolutely everything: I did try experimenting with a subset but it wasn't successful.&amp;nbsp; If you're not familiar with Firefox profiles I strongly suggest reading &lt;a href="http://customsoftwareconsult.com/extensions/febe/febeFAQ.html#A19"&gt;this section&lt;/a&gt; of the FAQ on the author's site and follow the instructions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-280054252428750776?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/280054252428750776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/01/febe-for-firefox.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/280054252428750776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/280054252428750776'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/01/febe-for-firefox.html' title='FEBE for Firefox'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3265073342793780090</id><published>2008-01-14T20:46:00.000Z</published><updated>2008-10-11T17:17:28.331+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Ruby-on-Rants</title><content type='html'>I expect plenty of other people will have enjoyed (endured?) &lt;a href="http://www.zedshaw.com/rants/rails_is_a_ghetto.html"&gt;this piece&lt;/a&gt;; I'm posting the link while I'm simultaneously laughing and giving thanks that I'm not him.&amp;nbsp; This is serious, hard-core bitterness and resentment. This man needs help.&lt;br /&gt;&lt;br /&gt;But the thing is, somewhere in that mountain of bile there are some grains of truth: in particular, some of his comments about consultancies ('The Hysteria of Consultancy' about half way down), and the kind of people encountered from time to time: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;They then&lt;br /&gt;build the team and dole out the positions:  Software Architect to the shithead&lt;br /&gt;who can’t code; Project Manager to the MBA asshole who talks like a car&lt;br /&gt;salesman ... &amp;lt;snip&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Yep, I've met those two.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3265073342793780090?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3265073342793780090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2008/01/ruby-on-rants.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3265073342793780090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3265073342793780090'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2008/01/ruby-on-rants.html' title='Ruby-on-Rants'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-6886458377720756042</id><published>2007-12-10T15:20:00.000Z</published><updated>2008-10-11T17:17:28.849+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>From C# to Java - syntax, libraries, generics...</title><content type='html'>I was disappointed to discover that the standard Java regular expression library (java.util.regex) doesn't support named captures.  I'm porting some C# code over to Java, which uses this feature. The best alternative seems to be &lt;a href="http://jregex.sourceforge.net/"&gt;JRegex&lt;/a&gt;, which forces me to depend on a non-standard library.&lt;br /&gt;&lt;br /&gt;A porting exercise like this really highlights the differences between Java and C#.  I must confess that I prefer C#'s syntax and the slightly cleaner code resulting from the (mostly) very well designed and implemented set of &lt;a href="http://www.amazon.co.uk/Framework-Design-Guidelines-Conventions-Libraries/dp/0321246756/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1197295033&amp;amp;sr=1-1"&gt;framework libraries&lt;/a&gt;.  The C# designers of course had two great advantages: (1) being second, and (2) not having to worry over-much about portability.&lt;br /&gt;&lt;br /&gt;Advantage (1) is about having a 'clean slate': they could take Microsoft's Java (J++), fix (or improve) awkwardnesses, and clean up the syntax without worrying about compatibility with existing code.  Property syntax is a good example; when porting over my C# code, it was a pain having to convert every property to a getXXX() / setXXX(val) method pair.  On the other hand, the Java bean convention has a modest advantage when using intellisense or similar in an editor: all the get and set methods appear in a nice list - you don't have to hunt for the properties.&lt;br /&gt;&lt;br /&gt;Advantage (2) may be more debatable.  Although it's true that the Java platform APIs are careful to avoid OS-dependent behaviour, it's sometimes necessary to be aware of potential differences in the platform beneath the VM: e.g. on a Unix-like system, a file may return false for both File::isDirectory() and File::isFile() (e.g. a block-device).  To be fair to .NET, the core libraries provide good support wherever they touch a common native resource such as the filesystem.&lt;br /&gt;&lt;br /&gt;Two simple examples where the .NET framework libraries provide an out-of-the-box solution, but Java still depends on third-party support:&lt;br /&gt;&lt;br /&gt;1) Intelligently combine path fragments to yield a single, usable pathname, using the correct separator character:&lt;br /&gt;&lt;pre&gt;// C#&lt;br /&gt;string filePath = Path.Combine(pathFrag1, pathFrag2);  // fragments are strings&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;// Java&lt;br /&gt;import org.apache.commons.io.FilenameUtils; // Requires Apache Commons IO library&lt;br /&gt;...&lt;br /&gt;String filePath = FilenameUtils.concat(pathFrag1, pathFrag2);&lt;/pre&gt;&lt;br /&gt;2) Read the contents of a file into a string (and ensure the file is closed):&lt;br /&gt;&lt;pre&gt;// C#&lt;br /&gt;string fileContents = File.ReadAllText(filePath);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;// Java&lt;br /&gt;import org.apache.commons.io.FileUtils;  // Requires Apache Commons IO library&lt;br /&gt;...&lt;br /&gt;String fileContents = FileUtils.readFileToString(new File(filePath));&lt;/pre&gt;&lt;br /&gt;Hardly a big deal in either case, but in C# you never have to hunt for the external library and ensure it's linked.  So much of the .NET BCL becomes practically 'extended syntax': if only Visual Studio implemented the equivalent of 'fix imports' in Netbeans!  I do get tired of having to go to the top of the file and add the 'using ...' lines.&lt;br /&gt;&lt;br /&gt;Generics are another matter (and much too large a subject to deal with properly here).  It is a simple truth that .NET does generics properly and Java does not.  If you don't like that statement, read both &lt;a href="http://weblogs.java.net/blog/arnold/archive/2005/06/generics_consid_1.html"&gt;this article&lt;/a&gt; and &lt;a href="http://www.artima.com/intv/generics2.html"&gt;this one&lt;/a&gt;, before giving me any grief about it.&lt;br /&gt;&lt;br /&gt;Here is the same combination of generic collection and property getter, in both languages:&lt;br /&gt;&lt;pre&gt;// C#&lt;br /&gt;//&lt;br /&gt;List&amp;lt;Segment&amp;gt; m_segments = new List&amp;lt;Segment&amp;gt;();&lt;br /&gt;...&lt;br /&gt;public Segment[] Segments&lt;br /&gt;{&lt;br /&gt;  get { return m_segments.ToArray(); }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;// Java&lt;br /&gt;//&lt;br /&gt;ArrayList&amp;lt;Segment&amp;gt; m_segments = new ArrayList&amp;lt;Segment&amp;gt;();&lt;br /&gt;...&lt;br /&gt;public Segment[] getSegments()&lt;br /&gt;{&lt;br /&gt;   return m_segments.toArray(new Segment[m_segments.size()]);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Again, not a huge difference, but I know which I prefer to look at.  The Java toArray implementation requires us to provide the new Segment array as an argument because at runtime Java's ArrayList doesn't possess the generic type information to make the copy without the type-hint. The copying is done using System.arraycopy and casts, because ArrayList's type parameter information is erased and replaced with Object (and casts) at compile-time.&lt;br /&gt;&lt;br /&gt;Despite all of that, I'm keen to continue with both languages.  If only the Java community would be prepared to go for a 'breaking change', a major step release which fixed some of the fundamental problems (e.g. generics implementation) at the expense of JVM back-compatibility, and cleaned up the syntax even further.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-6886458377720756042?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/6886458377720756042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/12/from-c-to-java-syntax-libraries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6886458377720756042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6886458377720756042'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/12/from-c-to-java-syntax-libraries.html' title='From C# to Java - syntax, libraries, generics...'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-613304983925337062</id><published>2007-11-13T16:38:00.000Z</published><updated>2008-10-11T17:17:29.234+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Healthcare Informatics'/><category scheme='http://www.blogger.com/atom/ns#' term='Aside'/><title type='text'>EHR: Workflow First</title><content type='html'>This &lt;a href="http://www.healthdatamanagement.com/news/ehr_physicians25064-1.html"&gt;short piece&lt;/a&gt; on the Health Data Management site resonated quite deeply with me: we discovered this truth the hard way, during the implementation of a large-scale radiology project here in the UK.  A lot of time was spent on technology (RIS, PACS, PAS, HL7 messaging, DICOM integration, etc.) early on, and a lot of assumptions were made about workflow and the implementation of the operational side of the solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-613304983925337062?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/613304983925337062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/11/ehr-workflow-first.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/613304983925337062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/613304983925337062'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/11/ehr-workflow-first.html' title='EHR: Workflow First'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-870125098111275437</id><published>2007-11-13T14:57:00.000Z</published><updated>2008-10-11T17:17:30.414+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>WS-*, REST and security</title><content type='html'>Via Don Box's recent &lt;a href="http://www.pluralsight.com/blogs/dbox/archive/2007/11/12/49028.aspx"&gt;post&lt;/a&gt; and a comment in Sam Ruby's reply, I found &lt;a href="http://www.isecpartners.com/files/iSEC_HILL_AttackingXMLSecurity_bh07.pdf"&gt;this presentation&lt;/a&gt;: worth reading.  The latest version (together with a lot of other stuff the same folk have presented) can be found &lt;a href="https://www.isecpartners.com/speaking.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The main message surely is to make the first gate as secure as you can: SSL + certificates.  After that, if you need/want additional security then I think I agree with Don that uniformity, at least at the authentication level, is desirable.  I just don't see where vested interests or additional value accrue from doing otherwise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-870125098111275437?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/870125098111275437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/11/ws-rest-and-security.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/870125098111275437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/870125098111275437'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/11/ws-rest-and-security.html' title='WS-*, REST and security'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3145732445069207353</id><published>2007-10-24T11:28:00.000+01:00</published><updated>2008-10-11T17:17:34.532+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Migrating NetBeans Settings</title><content type='html'>I've been using both the Beta and nightly-build releases of NetBeans 6 for the last few weeks.  Every time I move to the next version, I have to sort out settings, preferences and libraries because the IDE doesn't offer to do this for me.  Other folk have a similar complaint, e.g.&lt;br /&gt;&lt;a href="http://blogs.sun.com/teera/entry/migrating_netbeans_class_libraries_between"&gt;Migrating Netbeans class libraries between versions - TEERA 2.0&lt;/a&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm"&gt;NetBeans preferences are stored in your profile,  which in Windows is a folder structure rooted at: C:\Documents and Settings\&amp;lt;yourUserName&amp;gt;\.netbeans\&amp;lt;versionNumber&amp;gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm"&gt;The problem with this folder structure is that it mixes IDE settings with things like the local library collection and worst of all, a local class-information cache and file history (under the &lt;strong&gt;var &lt;/strong&gt;folder). The whole thing can grow to quite a size (mine's well over 80MB).&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm"&gt;The key subfolder appears to be &lt;strong&gt;config&lt;/strong&gt;. I managed to migrate all the most important (and time-consuming) settings by copying these folders from one version to the next:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;	&lt;li&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm"&gt;Editors&lt;/p&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;	&lt;li&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm"&gt;Preferences&lt;/p&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;	&lt;li&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm"&gt;org-netbeans-api-project-libraries&lt;/p&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm"&gt;This doesn't quite do everything – docking window positions and toolbar button sizes are obviously stored somewhere else, but I can live with this.&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm"&gt;I've voted for this to be fixed: see &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=42157"&gt;http://www.netbeans.org/issues/show_bug.cgi?id=42157&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3145732445069207353?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3145732445069207353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/10/migrating-netbeans-settings.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3145732445069207353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3145732445069207353'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/10/migrating-netbeans-settings.html' title='Migrating NetBeans Settings'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3081243609151997648</id><published>2007-10-09T17:51:00.000+01:00</published><updated>2008-10-11T17:17:38.121+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'> Ronnie Hazlehurst</title><content type='html'>So sad to hear that Ronnie Hazlehurst died on 1 October.  There have been plenty of well-written obituaries (e.g. the &lt;a href="http://news.bbc.co.uk/1/hi/entertainment/7023501.stm"&gt;BBC&lt;/a&gt;, the &lt;a href="http://blogs.guardian.co.uk/organgrinder/2007/10/ronnie_hazlehurst_his_greatest_1.html"&gt;Guardian&lt;/a&gt;, and &lt;a href="http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2007/10/04/db0402.xml"&gt;Telegraph&lt;/a&gt;), but I wanted to write a few lines myself because for me, like most people of my generation, his music formed an essential part of the backdrop of my early life.  I still find the tunes he wrote for all those wonderful BBC sit-coms hugely evocative: the instant I hear the opening few notes of "The Fall and Rise of Reginald Perrin" I'm transported back...&lt;br /&gt;&lt;br /&gt;I hadn't fully appreciated the sheer brilliance of the man until I read some of the obits: for example, he used the morse-code letters for "Some Mothers do 'Ave 'Em" to dictate the rhythm, and then scored the piece for two piccolos! Every piece seemed to fit perfectly the character of the programme for which it was written.  Some might say that we will always make that judgement in retrospect, because there never was any other theme tune association.  Well, perhaps, but just listen to "The Two Ronnies", "Fall and Rise", and especially "Yes, Minister": these are works of art - you just couldn't improve on them. Those tunes will be forever special to all of us who grew up with them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3081243609151997648?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3081243609151997648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/10/ronnie-hazlehurst.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3081243609151997648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3081243609151997648'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/10/ronnie-hazlehurst.html' title=' Ronnie Hazlehurst'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-9004793245347860404</id><published>2007-10-09T16:44:00.000+01:00</published><updated>2008-10-11T17:17:38.573+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CLR and .NET'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Technology'/><title type='text'>Dare Obasanjo on the Release of the Source Code of the .NET Framework Libraries</title><content type='html'>&lt;a href="http://www.25hoursaday.com/weblog/2007/10/05/OnTheReleaseOfTheSourceCodeOfTheNETFrameworkLibraries.aspx"&gt;Link: Dare Obasanjo aka Carnage4Life - On the Release of the Source Code of the .NET Framework Libraries&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As usual, someone else has already written it: Dare's piece on this announcement reflects my views exactly.  Since I've been playing with Java lately (see previous post) I've become used to the idea that I can jump straight into the source for almost anything, certainly for the JDK libs.&lt;br /&gt;&lt;br /&gt;Still, most of us I'm sure would agree that this is a Good Thing, both in purely practical terms for working programmers, and on another level, more evidence that Microsoft is beginning to 'get' some of the things the other side of the industry managed to 'get' long ago.&lt;br /&gt;&lt;br /&gt;There's another way the developer will surely benefit: being able to read through the real code is the best way to appreciate and absorb the good design principles enshrined in (most of) the .NET Framework libraries.  The principles which guided the team are described in the excellent &lt;a href="http://www.amazon.co.uk/Framework-Design-Guidelines-Conventions-Libraries/dp/0321246756/ref=sr_1_1/203-4725978-9958364?ie=UTF8&amp;amp;s=books&amp;amp;qid=1191948162&amp;amp;sr=1-1"&gt;Framework Design Guidelines&lt;/a&gt; book by &lt;a href="http://blogs.msdn.com/kcwalina/"&gt;Cwalina&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/brada/"&gt;Abrams&lt;/a&gt;, a book I'd recommend even to folk who don't use the Microsoft platform.  True, you can use Reflector to reverse the libraries, but the original source will presumably retain comments, which may reveal subtleties around intent, choices and so on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-9004793245347860404?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/9004793245347860404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/10/dare-obasanjo-on-release-of-source-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/9004793245347860404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/9004793245347860404'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/10/dare-obasanjo-on-release-of-source-code.html' title='Dare Obasanjo on the Release of the Source Code of the .NET Framework Libraries'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5168829499430783755</id><published>2007-10-09T11:51:00.000+01:00</published><updated>2008-10-11T17:17:39.089+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>NetBeans 6.0</title><content type='html'>After my last post on NB and Eclipse, you might think that I'd never go anywhere near NetBeans again. Well, predictably enough some things (chiefly HL7, Ruby and RDF) have dragged me back to NetBeans and Java, so I grabbed &lt;a href="http://www.netbeans.org/community/releases/60/index.html"&gt;NB 6.0 Beta 1&lt;/a&gt; and gave it another try.&lt;br /&gt;&lt;br /&gt;Much, much better.  Somehow, the startup time has been reduced quite a bit, everything felt faster and the whole tool is shaping up rather well.  A complete contrast to my previous (and quite recent) experience.  I played with the startup settings to improve performance even further (details somewhere below) and now I'm quite happy with it.&lt;br /&gt;&lt;br /&gt;You do need to spend a bit of time with NB to appreciate just how good it actually is: the code editor features outshine Visual Studio quite easily - better refactoring support, better code navigation being the two I immediately appreciate.  Simple example: want to go to a definition? Hold down CTRL and statement elements become hyperlinks.  Adding libraries and references is as simple as in VS, and you can create project groups which are similar to VS solutions.  I've barely scratched the surface.&lt;br /&gt;&lt;br /&gt;The set of plugins in the default download of NB 6.0  provides a lot of functionality, not all of it really ready for daily use, in my opinion. The UML support appeared good until I tried to use it for a substantial reverse-engineering job: it took a long time and the resulting class diagrams were slow and awkward to render and navigate.  Not really a priority for me, though.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://subversion.netbeans.org/"&gt;Subversion support &lt;/a&gt;is also provided and this is definitely a priority for me.  Sadly, this appears to be weak, too. First, NB appears unable to import new (unversioned) projects: the 'Import into Repository...' command seems to be permanently greyed-out.  Oddly, the 'Commit...' command is available even though the project folder is completely unconnected to my SVN repository.  If I invoke that, I get a partial list of new files in the grid, and the option to commit them; clicking the commit button apears to work, but after a while I see a popup dialog saying "Action canceled by user", even though I did nothing!&lt;br /&gt;&lt;br /&gt;Ruby support is good, but I'm a novice Ruby developer and have yet to exercise all the Ruby features.  The ever helpful &lt;a href="http://blogs.sun.com/roumen/"&gt;Roman Trobl&lt;/a&gt; has provided some good &lt;a href="http://blogs.sun.com/roumen/entry/two_demos_jruby_on_rails"&gt;Flash demos&lt;/a&gt; of Ruby support: I recommend watching the demo of NB's &lt;a href="http://rubyonrails.org/"&gt;RoR&lt;/a&gt; support, where Roman builds a bare-bones blog application in a couple of minutes.  I haven't found a better Ruby IDE yet.&lt;br /&gt;&lt;br /&gt;I plan to put more information on using NetBeans on the &lt;a href="http://www.searjeant.net/wiki/java/java_programming"&gt;Java section&lt;/a&gt; of my Wiki, especially for folk coming to Java and NetBeans from a Visual Studio background.  So far I've only added a note on the configuration settings I've adopted which improve performance considerably - more soon.&lt;br /&gt;&lt;br /&gt;How long can this last?  Well, on the evidence of the last few days, I'm optimistic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5168829499430783755?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5168829499430783755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/10/netbeans-60.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5168829499430783755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5168829499430783755'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/10/netbeans-60.html' title='NetBeans 6.0'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5090688462481737623</id><published>2007-10-03T12:31:00.000+01:00</published><updated>2008-10-11T17:17:39.519+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 2'/><category scheme='http://www.blogger.com/atom/ns#' term='healthcare'/><title type='text'>G.ho.st in the machine</title><content type='html'>&lt;a href="http://www.bcs.org/server.php?show=ConBlogEntry.147"&gt;G.ho.st in the machine : Blogs : BCS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bcs.org/server.php?show=ConBlog.6"&gt;Peter Murray&lt;/a&gt; blogs about healthcare informatics on the BCS site, but the post that I've linked to here is all about &lt;a href="http://g.ho.st"&gt;g.ho.st&lt;/a&gt;, an amazing piece of work all done in Flash (as far as I can see), offering a kind of VM accessible through the browser.  Thanks to Peter's post, I've signed up. I also managed to get my preferred user-name, 'roger', so I guess there aren't too many users yet.&lt;br /&gt;&lt;br /&gt;The Flash applet does all the work of course, much like an &lt;a href="http://en.wikipedia.org/wiki/X_Window_System"&gt;X Window System&lt;/a&gt; display server does when you drive it over a network (I can remember actually doing this! It's a fundamental feature of X: how many people still exploit it?).&lt;br /&gt;&lt;br /&gt;With g.ho.st you get 3GB(!) of space and they claim you can ftp from Windows Explorer stright to your online store.  I tried this but it didn't work for me: I tried twice to upload a couple of PDFs - Windows thought it had transferred them but they didn't show up in g.ho.st.&lt;br /&gt;&lt;br /&gt;A bit of a toy, as it stands, but very impressive and worth keeping an eye on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5090688462481737623?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5090688462481737623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/10/ghost-in-machine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5090688462481737623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5090688462481737623'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/10/ghost-in-machine.html' title='G.ho.st in the machine'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-8539183674973221176</id><published>2007-10-02T08:16:00.000+01:00</published><updated>2008-10-11T17:17:39.889+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 2'/><title type='text'>Facebook </title><content type='html'>Sorry, but I just don't like Facebook.  Actually, you can extend that dislike to all social networking sites, though to my eternal shame I must admit to being in at least one (&lt;a href="http://www.linkedin.com/home?trk=logo"&gt;LinkedIn&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I think &lt;a href="http://one.revver.com/watch/202104"&gt;this clip&lt;/a&gt; very nicely sends-up the whole Facebook thing.  Too much free time ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-8539183674973221176?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/8539183674973221176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/10/facebook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8539183674973221176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8539183674973221176'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/10/facebook.html' title='Facebook '/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-6535566953094700321</id><published>2007-09-27T17:08:00.000+01:00</published><updated>2008-10-11T17:17:40.354+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Technology'/><title type='text'>IONA Artix: Video Tech Brief (John Davies)</title><content type='html'>&lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=47030"&gt;IONA Artix: Video Tech Brief&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've been looking at the Java and SOA landscape again (I expect to write more on this) and came across this interview with John Davies of &lt;a href="http://www.iona.com"&gt;Iona&lt;/a&gt;.  I'm pointing to this video (link is above this text)  not because it's a particularly colourful performance (forgive me Mr. Davies) but because it's worth listening to what he has to say.&lt;br /&gt;&lt;br /&gt;This is all about high-volume bank transactions which handle complex data structures (he talks mainly about &lt;a href="http://www.swift.com/index.cfm?item_id=43232"&gt;Swift&lt;/a&gt;), exchanged and processed in XML messages. The architectures they are using for this are all based on Java ESB/SEDA platforms, on top of which Iona adds its &lt;a href="http://www.iona.com/products/artix/data_services.htm"&gt;Artix Data Services&lt;/a&gt; to handle metadata management and transformation services.&lt;br /&gt;&lt;br /&gt;First, it's notable that they are building on established open-source  projects -  Iona has a very strong investment in &lt;a href="http://www.iona.com/solutions/opensource/prodsol/"&gt;open-source&lt;/a&gt; solutions - using &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt; as the basis of their FUSE enterprise messaging product.&lt;br /&gt;&lt;br /&gt;That's all very interesting, in an industry-direction sort of a way, but it was something else (technical!) that really caught my eye (or ear): John Davies talked about the database bottleneck for these high-volume transactional systems: the messages being persisted are XML (hierarchical data) and they  simply cannot accept the overhead of an ORM layer and mapping these to tables, so they're using a completely different approach, saving them as immutable BLOBs, indexing appropriately. New versions of the same message are simply stored as new objects, the original is not touched.  Combine this with a massively parallel service layer and distributed store (he talks about running &lt;a href="http://www.gigaspaces.com/"&gt;Gigaspaces&lt;/a&gt; on &lt;a href="http://www.azulsystems.com/"&gt;Azul&lt;/a&gt; - some 700-odd cores!) and you have a very interesting proposition.&lt;br /&gt;&lt;br /&gt;It's in a follow-up comment on the ServerSide page where he expands a little on the problem of efficiently storing immutable, hierarchical objects and points to &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; as one good way to accomplish this and handle versioning, where performance isn't an issue.   But he also mentions &lt;a href="http://opensolaris.org/os/community/zfs/"&gt;ZFS&lt;/a&gt;, a new filesystem being developed by &lt;a href="http://opensolaris.org/os/"&gt;OpenSolaris&lt;/a&gt; - this offers a transactional,  pooled-storage abstraction which is exactly what this sort of architecture needs.&lt;br /&gt;&lt;br /&gt;This is fascinating stuff. Reading around this subject it's very clear that a lot of intellectual effort and investment has been poured into solving the problems of building and operating truly scalable ESB and SOA-based solutions and novel, high-performance persistence, and most (all?) of this amazing work has been done with Java, and is open-source.&lt;br /&gt;&lt;br /&gt;As I worked my way through web pages and PDFs, I didn't find references to Microsoft's technologies - what, if anything, are they doing in this area?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-6535566953094700321?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/6535566953094700321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/09/iona-artix-video-tech-brief-john-davies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6535566953094700321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6535566953094700321'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/09/iona-artix-video-tech-brief-john-davies.html' title='IONA Artix: Video Tech Brief (John Davies)'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3157956990602595054</id><published>2007-09-26T08:25:00.000+01:00</published><updated>2007-09-26T08:45:49.835+01:00</updated><title type='text'>Trying out Blogger</title><content type='html'>This is obligatory 'first post' to see that it works.  I don't know whether I'll post regularly here or stick to using WordPress on my &lt;a href="http://www.searjeant.net"&gt;own site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3157956990602595054?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3157956990602595054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/09/trying-out-blogger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3157956990602595054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3157956990602595054'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/09/trying-out-blogger.html' title='Trying out Blogger'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-4924121057378573471</id><published>2007-07-30T12:39:00.000+01:00</published><updated>2008-10-11T17:17:52.843+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Uncategorized'/><title type='text'>Amazon Marketplace</title><content type='html'>I've used Amazon (.co.uk) quite a bit. I've bought quite a range of stuff, from books and CDs right up to my latest digital camera. So far, I've been a very happy customer: prices have been keen, stuff has arrived quickly, been well packed and always exactly what I ordered.&lt;br /&gt;&lt;br /&gt;So I'm feeling a bit bruised today, after discovering that the delivery charge for the two Compact Flash cards I've just ordered will be around 40% of the item price! About 9 pounds postage, on a twenty-two pound bill!  These are small, light objects and they're being sent from inside the UK.  Outrageous.&lt;br /&gt;&lt;br /&gt;The Amazon webpage for the item is &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/B0007QU6Y2/026-6822849-7334802"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Notice the headline price, and the fact that there is no indication of the delivery charge.  Of course, I should have carefully read the subsequent pages before clicking on the 'confirm order' button, but I just didn't expect that I would need to check an Amazon order (even involving an Amazon Marketplace seller) for this sort of thing.&lt;br /&gt;&lt;br /&gt;The marketplace seller is called &lt;a href="http://www.amazon.co.uk/gp/help/seller/at-a-glance.html/026-6822849-7334802?ie=UTF8&amp;amp;marketplaceSeller=1&amp;amp;seller=A3CXBVTT174T7Z"&gt;_memorymegastore_&lt;/a&gt; -- I'll wait to see how fast a delivery I get for my 9 pound, then leave them some feedback.  I've emailed Amazon too, but don't expect much...&lt;br /&gt;&lt;br /&gt;Caveat emptor...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-4924121057378573471?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/4924121057378573471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/07/amazon-marketplace.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4924121057378573471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4924121057378573471'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/07/amazon-marketplace.html' title='Amazon Marketplace'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-4372167321322573757</id><published>2007-07-25T10:14:00.000+01:00</published><updated>2008-10-11T17:17:56.435+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>NetBeans and Eclipse (again)</title><content type='html'>Java technology is so frustrating: I'd like to get deeper into it mainly because of projects like &lt;a href="http://www.mirthproject.org/"&gt;Mirth&lt;/a&gt;, but the whole developer experience feels so excruciatingly awful when compared to Visual Studio and C#.  I decided to give NetBeans another go because there's a new developer release (6.0) and I found the 5.5 release reasonably good.  After waiting over two and a half minutes for the damn thing to start, I remembered just how ugly it was.  Even with a bit of fiddling (make the icons smaller, change the editor font, etc. etc), it still looks and feels clunky, ugly and slow.  Then I did the usual smoke test - create a new standard project, build it and run it, just to be sure all the bits are in the right place.  Clunk, ... grind ... whirr ... splat. What's taking so long?  This is a trivial project. Eventually, it did build and it did run.  And it looked awful.  The UI editor (frankly, one of the better Java UI editors out there) is still nowhere near as good as Visual Studio.  NetBeans is free, it has a lot of features, it can create a lot of different project types, it has UML and BPEL built-in and it has Sun behind it, but it just doesn't encourage me to persevere with it.&lt;br /&gt;&lt;br /&gt;What about Eclipse (and Europa)? Well, the initial install is quite quick but then you have to download the Europa packages. After about 30 minutes or so, I've got the whole enchilada (easier just to get everything rather than fret about the dependencies) and I can start the thing.  The startup time is less than NetBeans but still rather slow compared to VS.  Now to create the 'hello world' Swing or SWT application (I don't really care which toolkit).  So, File, New Project.  My, but there are a lot of project types.  Go for Java (there is no finer-grained optionality here).  Now, how do I add a dialog class?  Can't see dialog class in File/New, so I choose File / New / Other.  Gulp.  There are 37 groups of project item! (I counted them).  Thirty seven GROUPS!  This is not use-case driven; this is madness.  So I choose the Java category, and only 'Class' seems appropriate.&lt;br /&gt;&lt;br /&gt;My patience has run out (again). Both tools, for different reasons, turn me right off Java development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-4372167321322573757?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/4372167321322573757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/07/netbeans-and-eclipse-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4372167321322573757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4372167321322573757'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/07/netbeans-and-eclipse-again.html' title='NetBeans and Eclipse (again)'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-4235268178218743892</id><published>2007-06-30T10:28:00.000+01:00</published><updated>2008-10-11T17:17:57.147+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='healthcare'/><title type='text'>HL7 Standards and Message Mapping</title><content type='html'>For most of the last year I've been working on healthcare integration projects, involved in HL7 and related technologies. One of the biggest frustrations I've encountered is &lt;a href="http://www.hl7.org/Library/standards.cfm"&gt;the HL7 standard&lt;/a&gt; itself, access to it (and related information) and the way the standard is published.&lt;br /&gt;&lt;br /&gt;The HL7 (v2) standard was published as a body of Word documents, apparently without any machine-readable version. You might have expected that the standard would have originated as a database plus supporting commentary but it seems that the Word documents have always been the definitive standard.  You could of course write software to crawl over the documents and extract the standard but it looks to me as if this would be pretty painful; I haven't checked every document, but I'm not sure they are all consistently formatted.&lt;br /&gt;&lt;br /&gt;Almost from the start I decide to write tools to help me with message profiles, mappings and transformations, but to do that effectively you really need to have the standard in a machine-readable form.&lt;br /&gt;&lt;br /&gt;I did come across a German site which offered an &lt;a href="http://www.oemig.de/HL7/hl7db.htm"&gt;Access DB version &lt;/a&gt;of the standard but this has now become an HL7.org product (I believe it was originally unaffiliated but legal pressure was brought to bear...)&lt;br /&gt;&lt;br /&gt;The fact that HL7.org is a quasi-commercial entity irritates me: I don't mind special-interest bodies charging for 'value-added' things like books, papers and conferences, but making the standard itself proprietary and to restrict access to it just feels wrong.  Standards like this should be open to all.&lt;br /&gt;&lt;br /&gt;What prompted this post was discovering &lt;a href="http://www.hl7connection.com/2007/06/21/hl7-data-mapping-help/"&gt;this effort&lt;/a&gt; to capture HL7 segments, fields and tables in an Excel spreadsheet. Pity that the link to the file doesn't seem to work: Matthew, if you read this, please check the link in your post.&lt;br /&gt;&lt;br /&gt;Thank goodness v3 is XML based. Presumably the specification will be driven from XSDs.  Reading the HL7 'statement of principles' (SOP) for v3 they appear to regard the v2 principle of starting from documents and deriving the technical artifacts as 'more direct', as 'one simply edits ... the appropriate word processing document'! Direct, certainly, but desirable?  The SOP indicates that a tool-chain will be used to derive documentation from 'computerized models' which sounds better. &lt;br /&gt;&lt;br /&gt;I was able to get access to the latest &lt;a href="http://www.hl7.org/v3ballot/html/welcome/environment/index.htm"&gt;v3 standard draft&lt;/a&gt;, and part of this site contains the &lt;a href="http://www.hl7.org/v3ballot/html/processable/multicacheschemas/schemas.htm"&gt;XSD&lt;/a&gt; but they're all linked separately, and as HTML! Why on Earth not provide a zip download of the whole thing?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-4235268178218743892?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/4235268178218743892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/06/hl7-standards-and-message-mapping.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4235268178218743892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4235268178218743892'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/06/hl7-standards-and-message-mapping.html' title='HL7 Standards and Message Mapping'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7371618876754247868</id><published>2007-06-12T07:31:00.000+01:00</published><updated>2008-10-11T17:17:57.721+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='CLR and .NET'/><title type='text'>Google Gears, Silverlight and the RIA</title><content type='html'>  I use Google Docs and Google Reader all the time.  With &lt;a href="http://gears.google.com/" title="Google Gears"&gt;Google Gears&lt;/a&gt;, these are set to become even more useful because they'll work when I'm offline.  The Reader already works this way (see &lt;a href="http://www.webware.com/8301-1_109-9724300-2.html?tag=blog" title="this post"&gt;this post&lt;/a&gt; for more), but not Docs + Spreadsheets yet.  Rumour has it that this is coming.  If they solve the sync problem properly, this will be seriously good: Docs is fine for note-taking and certainly good enough for blog posting.  And of course they must extend Gears to GMail.&lt;br /&gt;&lt;br /&gt;Web 2.0, Ajax + Gears (+ whatever server-side stuff you use to generate all this) may be good enough technology for building browser-applications which work offline, but underneath the covers it's still based on HTML, grinding out a ton of hard-to-debug JavaScript, and running inside the browser frame.  For the poor developer, even though dedicated folk spend hours creating libraries like &lt;a href="http://script.aculo.us/" title="script.aculo.us"&gt;script.aculo.us&lt;/a&gt; (and Google's own &lt;a href="http://code.google.com/webtoolkit/" title="GWT"&gt;GWT&lt;/a&gt; ) the experience of creating these applications remains pretty dire.  And the result of all this extraordinary effort is still something which doesn't even approach the sophistication of the equivalent desktop application.  As I said, I really like Google Docs, but it isn't Word, and won't ever be.&lt;br /&gt;&lt;br /&gt;Then there's Adobe Flash and ActionScript, which has been around for a long time, is well established and has been used to create quite complex browser-hosted applications, such as &lt;a href="http://www.gliffy.com/" title="Gliffy"&gt;Gliffy&lt;/a&gt;, which is (a bit) like Visio in a browser frame.  Flash is cross-platform, as well as cross-browser, but still there's quite a gap between developing for Flash, and developing for the desktop. Now Adobe Labs is promoting &lt;a href="http://labs.adobe.com/technologies/air/" title="AIR"&gt;AIR&lt;/a&gt; (the technology formerly known as Apollo).  This looks like a warmed-over Flash, and appears to be based still on JS and HTML.&lt;br /&gt;&lt;br /&gt;When I first heard about &lt;a href="http://silverlight.net/" title="Silverlight"&gt;Silverlight&lt;/a&gt;, I wondered why Microsoft appeared to be tilting at the Flash/ActionScript windmill?  Why would they expect developers of browser-hosted, graphical presentations to switch away from Flash?  But that's not really what Silverlight is about: this is about creating a platform for Rich Internet Applications (RIAs) based on the .NET platform, which makes this potentially much more interesting, especially if development can be done in C# using Visual Studio, rather than mashing together markup and script.  The runtime appears to be a a slightly reduced version of the CLR, supporting WPF/XAML as well as the traditional HTML/JS mixture.  Quite remarkable, in a 1.1MB download.  Rather than repeat more technical details here, I'll refer you to the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb428859.aspx" title="Silverlight architecture summary"&gt;Silverlight architecture summary&lt;/a&gt; paper.&lt;br /&gt;&lt;br /&gt;Silverlight already runs on Mac as well as Windows, and in all the popular browsers.  Could it be ported to Linux/Unix? The &lt;a href="http://www.mono-project.com/Main_Page" title="Mono project"&gt;Mono project&lt;/a&gt; has proved the portability of the runtime, so it doesn't sound like such an outrageous suggestion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7371618876754247868?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7371618876754247868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/06/google-gears-silverlight-and-ria.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7371618876754247868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7371618876754247868'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/06/google-gears-silverlight-and-ria.html' title='Google Gears, Silverlight and the RIA'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-8979876671139302649</id><published>2007-06-06T13:59:00.000+01:00</published><updated>2008-10-11T17:17:58.140+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogs'/><title type='text'>Google Docs for Blog Posting</title><content type='html'>I'm finding &lt;a title="Google Docs" href="http://docs.google.com/"&gt;Google Docs&lt;/a&gt; more and more useful for note-taking online, and quickly bashing together an outline document. I've just discovered that it will also post to weblog engines: this post was created in Google docs, the published straight to WordPress, via the MovableType API.  This appears to work quite well, except that the document title doesn't appear to make it across to the blog posting (Update: yes it does - keep reading).  You can tag the document in Google, and these tags are supposed to carry over into the blog posting.&lt;br&gt;&lt;br&gt;I'll use this posting to experiment a bit.  First, if I insert a picture into the document, will that be uploaded and linked in the post?  I'll insert the image directly below this line:&lt;br&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;&lt;a href="File?id=adb9hzmggnv7_26gtbhjpd5" target="_blank"&gt;&lt;img style="width: 320px;" src="http://docs.google.com/File?id=adb9hzmggnv7_26gtbhjpd5"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Well, that worked!  The secret is to choose the metaWeblog API instead of the MovableType API, despite the fact that Google recommends the latter: WordPress supports both, but the &lt;b&gt;metaWeblog&lt;/b&gt; API appears to be better supported.  I tried using the MovableType API initially; the posting title wasn't carried over, and tags didn't work.  Both work with &lt;b&gt;metaWeblog&lt;/b&gt;.&lt;br&gt;&lt;br&gt;This really is excellent, especially because of the image embedding.  Now all I want is for Google to add support for &lt;a title="Google Gears" href="http://gears.google.com/"&gt;Google Gears&lt;/a&gt; to Google Docs and Spreadsheets, and I'll be very happy indeed.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-8979876671139302649?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/8979876671139302649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/06/google-docs-for-blog-posting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8979876671139302649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/8979876671139302649'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/06/google-docs-for-blog-posting.html' title='Google Docs for Blog Posting'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-4095926963652409627</id><published>2007-06-06T10:51:00.000+01:00</published><updated>2008-10-11T17:17:58.633+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CLR and .NET'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>XMI from Assemblies</title><content type='html'>I was about to start writing a tool to do this when it occurred to me that someone else must have done this already.  Googling located two solutions:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;	&lt;li&gt;DOTNET2UML from AgileFactor, see &lt;a href="http://www.agilefactor.com/assemblymetadata2xmi.aspx?context=459D4106989E4d4cA30F749B7033418F" title="this page"&gt;this page&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;	&lt;li&gt;Xmi4DotNet, see &lt;a href="http://mercury.it.swin.edu.au/swinbrain/index.php?title=Xmi4dotnet" title="this page"&gt;this page&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Of these, (1) seems to be out of date and doesn't handle .NET 2.0, so it's no good to me at all.  Option (2) appeals the most because it's an addin for Reflector.  Trouble is, the current version of Reflector won't load it!  I haven't time to work out why, but looking in the Google code &lt;a href="http://code.google.com/p/xmi4dotnet/issues/list" title="issue list"&gt;issue list&lt;/a&gt; for this project, someone has reported this error already.  Would be nice to see this fixed.  I'd quite like to write code to do the reflection + generation myself, but it's just a distraction I can't afford right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-4095926963652409627?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/4095926963652409627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/06/xmi-from-assemblies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4095926963652409627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4095926963652409627'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/06/xmi-from-assemblies.html' title='XMI from Assemblies'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1442287246378075402</id><published>2007-06-06T07:37:00.000+01:00</published><updated>2008-10-11T17:17:59.051+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><title type='text'>WordPress v2.2</title><content type='html'>Upgrading successfully from 2.0.2 to 2.2 was not as straightforward as it should have been.&lt;br /&gt;&lt;br /&gt;I followed all the &lt;a href="http://codex.wordpress.org/Upgrading_WordPress"&gt;instructions&lt;/a&gt;, disabling all the plugins and setting the theme back to the original default, but when I ran the wp-admin/upgrade.php script I got a lot of database errors.  The blog worked, but the categories were missing and the admin pages which refer to them showed errors.&lt;br /&gt;&lt;br /&gt;These seem to be due to database permissions issues.  Googling for a solution I found a reference or two (e.g. &lt;a href="http://wordpress.org/support/topic/107935"&gt;this one&lt;/a&gt;), so I restored the old DB (what a good thing I did the backup!) and used phpMyAdmin to change the db-user permissions to include ALTER.  This appeared to fix the problem because the upgrade script worked perfectly.&lt;br /&gt;&lt;br /&gt;My main gripe is that despite the (tedious, manual) DB fix, most of my posts appeared to lose their category tags.  Eventually, these appeared again, but I'm not sure exactly why.&lt;br /&gt;&lt;br /&gt;The upgrading process is irritating. WordPress is such a fine piece of work overall, it seems such a shame that upgrading should have been be so clumsy and buggy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1442287246378075402?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1442287246378075402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/06/wordpress-v22.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1442287246378075402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1442287246378075402'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/06/wordpress-v22.html' title='WordPress v2.2'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1853272685325580523</id><published>2007-04-15T17:10:00.000+01:00</published><updated>2008-10-11T17:17:59.481+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Home and Family'/><title type='text'>Tate Modern</title><content type='html'>We had a great family day out yesterday at the wonderful &lt;a href="http://www.tate.org.uk/modern/"&gt;Tate Modern&lt;/a&gt; gallery in London.  It's the last week of &lt;a href="http://www.tate.org.uk/modern/exhibitions/carstenholler/"&gt;Carsten Höller's slide installation&lt;/a&gt; - great fun, whether or not you think it's art!  Take a look at the website because there are plenty of photos (even videos) of the slides, including a time-lapse of their construction.  The tickets were free, but you had to queue for them.  We managed to get quite a few tickets, so we were able to enjoy all of the slides.  The highest (from level 5) looked pretty daunting from the turbine-hall, but was actually rather a gentle experience and you can't really see out of the slide properly so you're not aware of the starting height.&lt;br /&gt;&lt;br /&gt;Tate Modern is quite simply superb.  I don't like all the exhibits (for example, there's a big &lt;a href="http://www.tate.org.uk/modern/exhibitions/gilbertandgeorge/"&gt;Gilbert and George&lt;/a&gt; thing happening there right now, but I'm not a fan) but I love the building, the spaces within, the facilities and the atmosphere.  And it's free.  Places like Tate Modern are &lt;em&gt;so&lt;/em&gt; important: it matters that we spend public money this way.  The whole time we were there, we were happy, and all the other people we saw seemed to be, too.  I felt uplifted in some way, not just because I had enjoyed myself there, but because I had shared that enjoyment with so many other people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1853272685325580523?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1853272685325580523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/04/tate-modern.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1853272685325580523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1853272685325580523'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/04/tate-modern.html' title='Tate Modern'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2148571303516659696</id><published>2007-02-22T13:54:00.000Z</published><updated>2008-10-11T17:17:59.900+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Uncategorized'/><title type='text'>Jim Gray</title><content type='html'>I can't believe that I missed the news that &lt;a href="http://research.microsoft.com/~Gray/"&gt;Jim Gray&lt;/a&gt; had been reported as &lt;a href="http://www.theregister.co.uk/2007/01/30/gray_sea_hunt/"&gt;lost-at-sea&lt;/a&gt;.  This is just terrible.  Jim Gray is one of the greatest minds around.  Whenever I've heard Jim speak, or read one of his papers, I've been struck by the depth of his insight and the power of his quiet, engaging style.&lt;br /&gt;&lt;br /&gt;The last time I saw and heard him in person was at PDC2003.   He talked about high-performance computing (and distributed copies of &lt;a href="http://research.microsoft.com/research/pubs/view.aspx?tr_id=815"&gt;this paper&lt;/a&gt;), discussed the building of very large servers (e.g. for the &lt;a href="http://cas.sdss.org/dr5/en/"&gt;SkyServer&lt;/a&gt; project), and said something which stuck in my mind ever since.  He was talking about the problems of processing very large volumes of scientific data and building petabyte-scale computing facilities (later expressed in &lt;a href="http://research.microsoft.com/~gray/papers/Petascale%20computational%20systems.doc"&gt;this paper&lt;/a&gt;).  He said (this is not a verbatim quote), "We've got to start thinking in terms of &lt;em&gt;&lt;strong&gt;moving the program to the data&lt;/strong&gt;&lt;/em&gt;, instead of the other way round, which is what we've been doing for years".&lt;br /&gt;&lt;br /&gt;This is a profound idea, which is workable now that we have almost ubiquitous networking, grid-computing, and fast, cheap hardware (CPU and storage).  Network bandwidth, though improving all the time, is not increasing fast enough to keep track with the increase in data we need to analyse.&lt;br /&gt;&lt;br /&gt;Maybe Jim is still out there on the Farallon Islands, getting away from it all.  I just wish he'd let us  know he's OK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2148571303516659696?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2148571303516659696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/02/jim-gray.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2148571303516659696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2148571303516659696'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/02/jim-gray.html' title='Jim Gray'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2364489658634926705</id><published>2007-02-13T16:00:00.000Z</published><updated>2008-10-11T17:18:00.403+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Technology'/><title type='text'>Java Futures</title><content type='html'>Have just come across two useful posts on the future of Java.  &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=193593"&gt;Bruce Eckel's piece&lt;/a&gt; is mainly focussed on web applications.  I agree wholeheartedly with his opinion that the web is "a mess", and that the technologies which have sprung up to help make the mess manageable (such as Google's &lt;a href="http://code.google.com/webtoolkit/"&gt;Web Toolkit&lt;/a&gt;) are merely a convenient veneer to hide the ugliness and limitations of the underlying platform (i.e. JavaScript, HTML and the browser), which are always revealed in the end. The failure of Java applets, and in fact in any of the 'active content' technologies to solve the Rich Internet Application (RIA) problem, reflects the difficulties in solving distribution, installation and security issues.&lt;br /&gt;&lt;br /&gt;I also enjoyed his comments about how Java was 'rushed out' to fill the gap, then subject to extensive refactoring.  The analogy with agile methods is just about admissible, especially in connection with AWT and Applets, but Eckel also notes the vitality of the Java world, and the strong, positive effect of competition on the Java / C# landscape.&lt;br /&gt;&lt;br /&gt;Much of the rest of his post is an enthusiastic account of how Flash effectively solves the RIA problem, albeit in a vendor-dependent way. We may not like de facto standards emerging from a single commercial source, but when the technology is good enough we will find ways to compromise our principles.&lt;br /&gt;&lt;br /&gt;The other piece is an &lt;a href="http://www-128.ibm.com/developerworks/java/library/j-java2007.html"&gt;IBM DeveloperWorks article&lt;/a&gt; by Elliotte Harold.  This is much more about the Java platform itself, and what we can expect to see happening to it in 2007.  With the decision to open-source the JDK, Sun has created the possibility of forks in the Java roadmap, allowing experimenters to introduce language or platform features.  This is a mixed blessing: the Java world is already a complicated place to be, and this will make it even more so.  On the other hand, this will allow a lot of talented people outside Sun to work on things like language primitives for structured data types, such as tables (for SQL integration) and trees (infosets and XML). There is a perception that Java lags behind C# in this respect (e.g. &lt;a href="http://msdn2.microsoft.com/en-us/library/aa479865.aspx"&gt;LINQ &lt;/a&gt;in C#).&lt;br /&gt;&lt;br /&gt;Open-sourcing Java is good news, up to a point, but I just wish Sun would work harder to pull together the language, platform and libraries story into a more consistent whole.  There are simply too many ways to do something: for example, how many web-service frameworks are there?  I can think of three or four without trying too hard.  All different.  (Axis 1 and 2, XFire, JAX-WS, XINS, ...)&lt;br /&gt;&lt;br /&gt;There's no doubt that C# and .NET is a simpler, cleaner and more consistent place to be than the Java world (especially the 'enterprise' Java world), but then it damn well ought to be, because it only has to live on top of one OS, and isn't subject to any sort of community process to decide its future: only Redmond (and some Microsoft Research sites around the world, notably here in Cambridge) determine the trajectory of .NET and the C# language. (Don't buy the line that the whole shebang has been ported to lots of other platforms: take a look at any of them and show me where the enterprise features are.  Yes, you can compile and run a C# program on Linux, but can you deploy and run a server-side C# component which depends on Enterprise Services, e.g. distributed transactions?  No, &lt;a href="http://www.mono-project.com/EnterpriseServices"&gt;you can't&lt;/a&gt; ).&lt;br /&gt;&lt;br /&gt;Arguably, C# and .NET owe their very existence to Sun's Java initiative.  This remains a largely unacknowledged technical debt, often ignored by Microsoft's supporters. For many of the features we take for granted, Java got there first.  It really is a cross-platform proposition including on the server, albeit with some residual, ugly cruftiness which is being weeded out gradually.&lt;br /&gt;&lt;br /&gt;Personally, I really like C# and the .NET platform, due to the internal consistency of the runtime and C#'s cleaner syntax. However,I really want to see Java develop and evolve, partly because I like it, but largely because we benefit in all the obvious ways from a competitive environment: if one or other platform put the other out of business, innovation and improvement would be subordinated to establishing and consolidating a monopoly position.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2364489658634926705?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2364489658634926705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/02/java-futures.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2364489658634926705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2364489658634926705'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/02/java-futures.html' title='Java Futures'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5354903117917734895</id><published>2007-01-26T09:49:00.000Z</published><updated>2008-10-11T17:18:00.991+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Technologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Formatting XML using Python</title><content type='html'>Update: This article contains formatting errors, resulting from the WordPress editor I think.  In future, I'll write articles in the wiki and simply refer to them from in here.  This article appears on &lt;a target="_blank" href="http://www.searjeant.net/wiki/python/formatting_xml_using_python"&gt;this page&lt;/a&gt; in the wiki, with better code markup.&lt;br /&gt;&lt;br /&gt;The current work project involves a fair bit of work with XML Schema and instance documents which are validated against these schemas.  The instance documents are generated by one application, destined for consumption by another; the resulting XML is, unsurprisingly, not formatted for reading by humans.  As usual with XML, you end up having to look at it occasionally in Notepad (or &lt;a href="http://www.editplus.com"&gt;EditPlus&lt;/a&gt;, my favourite Windows workhorse editor), and then of course you want to see the document structure nicely indented (which, by the way, means that the newest EditPlus release will automatically create folds for you - very nice).&lt;br /&gt;&lt;br /&gt;So, you locate or create a nice little script to pretty-print the XML.  Perhaps the most obvious way to do this is using the identity transform, in XSLT.  But as I had been writing little Python scripts to generate and transform XML on this project, I decided to write a tiny Python function to 'tidy' XML files.  I've attached a complete script to this post, but the lines which actually do the work are:&lt;br /&gt;&lt;br /&gt;dom = minidom.parse(open(inFile))&lt;br /&gt;dom.writexml(open(outFile, "w"), addindent="  ", newl='\n')&lt;br /&gt;&lt;br /&gt;The writexml method from the minidom package is where the 'pretty printing' is actually happening.  If you run this script against an XML file, it will appear to work - the resulting XML is indented and formatted.  However, there is a 'gotcha', which is the real point of this post.&lt;br /&gt;&lt;br /&gt;If your XML is validated against a schema, and the schema contains an enumerated type, the nicely formatted instances of the enumerated type in the XML document are not schema-valid!  Here's an example schema fragment:&lt;br /&gt;&lt;br /&gt;&amp;lt;xs:simpleType name="MessageType"&amp;gt;&lt;br /&gt;&amp;lt;xs:restriction base="xs:string"&amp;gt;&lt;br /&gt;&amp;lt;xs:enumeration value="REF_INC"/&amp;gt;&lt;br /&gt;&amp;lt;xs:enumeration value="REF_TRI"/&amp;gt;&lt;br /&gt;&amp;lt;xs:enumeration value="REF_REJ"/&amp;gt;&lt;br /&gt;&amp;lt;xs:enumeration value="REF_ACC"/&amp;gt;&lt;br /&gt;&amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;&amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;&lt;br /&gt;And here's a fragment of XML from a document instance:&lt;br /&gt;&lt;br /&gt;&amp;lt;Header&amp;gt;&amp;lt;MessageID&amp;gt;20070125152405435&amp;lt;/MessageID&amp;gt;&amp;lt;MessageType&amp;gt;REF_ACC&amp;lt;/MessageType&amp;gt;&lt;br /&gt;&amp;lt;MessageTypeVersion&amp;gt;0.5&amp;lt;/MessageTypeVersion&amp;gt;&amp;lt;Destinations&amp;gt;&lt;br /&gt;&amp;lt;Destination&amp;gt;PRC&amp;lt;/Destination&amp;gt;&amp;lt;/Destinations&amp;gt;&lt;br /&gt;... etc.&lt;br /&gt;&lt;br /&gt;Here's what writexml produced:&lt;br /&gt;&lt;br /&gt;&amp;lt;Header&amp;gt;&lt;br /&gt;&amp;lt;MessageID&amp;gt;&lt;br /&gt;20070125152405435&lt;br /&gt;&amp;lt;/MessageID&amp;gt;&lt;br /&gt;&amp;lt;MessageType&amp;gt;&lt;br /&gt;REF_ACC&lt;br /&gt;&amp;lt;/MessageType&amp;gt;&lt;br /&gt;&amp;lt;MessageTypeVersion&amp;gt;&lt;br /&gt;0.5&lt;br /&gt;&amp;lt;/MessageTypeVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;Indented, and with newlines between elements.  Unfortunately, newlines are also inserted into the text values.  In this example, MessageType is no longer schema-valid: the whitespace is included in the value of this element.  This is, of course, because the text values are sub-nodes of the MessageType element node.  &lt;a href="http://effbot.org/lib/xml.dom.minidom.html"&gt;The documentation&lt;/a&gt; doesn't appear to offer much help, and experimenting with writexml arguments didn't result in anything better.&lt;br /&gt;&lt;br /&gt;There's also a toprettyxml method:&lt;br /&gt;&lt;br /&gt;prettydoc = dom.toprettyxml(indent = "  ", newl = "\n")&lt;br /&gt;fp = open(outFile, "w")&lt;br /&gt;fp.write(prettydoc)&lt;br /&gt;&lt;br /&gt;This is no better.  In fact, I seem to end up with multiple, redundant newlines in the output.  This is getting silly!  All I want is nicely formatted XML, for goodness' sake!  Have I missed something here?  This is just not worth this much effort - the XSLT works fine.&lt;br /&gt;&lt;br /&gt;Turns out I'm in good company - while Googling for enlightenment on the dom methods, I came across &lt;a href="http://www.mindview.net/WebLog/log-0068"&gt;this post by Bruce Eckel&lt;/a&gt;. He went a good deal further than me and wrote what looks like a proper solution (though I admit I haven't checked).&lt;br /&gt;&lt;br /&gt;There are two lessons here: (1) although I have a fondness for Python, and I do use it for scripting tasks, many corners of the library are frustratingly badly implemented and/or documented (especially the latter), and (2) you really need to understand the XML model when you're working with XML Schema.  I recommend reading Eliot Rust Harold's book, &lt;a href="http://www.amazon.co.uk/Effective-XML-Specific-Software-Development/dp/0321150406/sr=1-1/qid=1169804682/ref=sr_1_1/202-1697548-9817451?ie=UTF8&amp;s=books"&gt;Effective XML&lt;/a&gt;: see Item 10 (White Space Matters).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5354903117917734895?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5354903117917734895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2007/01/formatting-xml-using-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5354903117917734895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5354903117917734895'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2007/01/formatting-xml-using-python.html' title='Formatting XML using Python'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2783597950165377513</id><published>2006-10-06T13:07:00.000+01:00</published><updated>2008-10-11T17:18:02.545+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Virtualization - QEMU and VMWare</title><content type='html'>Discovered &lt;a href="http://fabrice.bellard.free.fr/qemu/about.html"&gt;QEMU&lt;/a&gt; the other day, and I've just given it a spin. Virtualization is all the go, these days: the &lt;a href="http://www.vmware.com/"&gt;VMWare&lt;/a&gt; product is now free for personal use (if I understand the license), and remains my preferred technology on Windows.&amp;nbsp; But this QEMU thing is new to me, and appears to be open source, too.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To use QEMU on Windows, you need to go to &lt;a href="http://www.h7.dion.ne.jp/%7Eqemu-win/"&gt;this site&lt;/a&gt; and download the &lt;a href="http://www.h6.dion.ne.jp/%7Ekazuw/qemu-win/qemu-0.8.2-windows.zip"&gt; qemu-0.8.2-windows.zip&lt;/a&gt; file first.&amp;nbsp; Create a folder for it, and unzip the contents.&amp;nbsp; You can try it out right away, by running the qemu-win.bat script.&amp;nbsp; What you will see (if, like me, it runs straight out of the box) is a new console window containing a very small command-line Linux.&amp;nbsp; So far so good, but (of course) I really want to run a more functional distro.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have the ISO image for the Live CD of the excellent &lt;a href="http://www.pclinuxos.com/news.php"&gt;PCLinuxOS&lt;/a&gt; distro, and you can edit the batch script to load from this image:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; qemu.exe -L . -m 256 -boot d -hda harddisk.img -cdrom pclinuxos-p93a-minime.iso&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The "-boot d" ensures we boot from the CDROM device and the -cdrom argument is the name of the ISO file (which obviously needs to be in the same folder).&amp;nbsp;&amp;nbsp; The hda argument specifies the file to be used as the virtual hard-drive: I created a new (larger) one with the qemu-img.exe tool, called harddisk.img, and that's what appears in the line above.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, I can report that this works!&amp;nbsp; It's a bit slow, but it does work.&amp;nbsp; To make it perform better, you are supposed to use the &lt;a href="http://fabrice.bellard.free.fr/qemu/qemu-accel.html"&gt;QEMU Accelerator&lt;/a&gt; as long as you're on an x86 machine.&amp;nbsp; Unzip (or untar/gz) the archive, locate the kqemu.inf file, right-click and choose Install.&amp;nbsp; Then, open up a cmd window and type "net start kqemu" (go &lt;a href="http://fabrice.bellard.free.fr/qemu/kqemu-doc.html"&gt;here&lt;/a&gt; for documentation).&amp;nbsp; Once the service is running, you add -kernel-kqemu to the argument list in the batch file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For me, this didn't work at all: I saw the boot screen and the PCLinuxOS progress bar, but it didn't get further than that. I suspect this is something to do with the fact I'm booting a live CD image and not a regular boot from the virtual drive.&amp;nbsp; I'm going to persevere a bit, in spare time: more later if I get it to work.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2783597950165377513?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2783597950165377513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/10/virtualization-qemu-and-vmware.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2783597950165377513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2783597950165377513'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/10/virtualization-qemu-and-vmware.html' title='Virtualization - QEMU and VMWare'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7464374252860981056</id><published>2006-10-03T21:21:00.000+01:00</published><updated>2008-10-11T17:18:03.121+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Uncategorized'/><title type='text'>Good Agile, Bad Agile</title><content type='html'>Just been sent a link to &lt;a href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html"&gt;Stevey's Blog Rants: Good Agile, Bad Agile&lt;/a&gt;: This is simply priceless polemic, well worth taking the time to read right through.&amp;nbsp; The early paragraphs take apart Agile and XP, aka 'bad agile'. It's funny, but I'm convinced it's also grounded in truth.&amp;nbsp; I especially like the Scientology analogy.&amp;nbsp; Then he gets into describing 'good agile' which is, apparently, what life at Google is like.&amp;nbsp; The prose turns from scathingly cynical (but entertaining) to slightly gushing and evangelical, as we're introduced to the over-the-top, out-of-this-worldness that is Google on the inside.&amp;nbsp; It really does sound scarily ideal...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There's so much here which chimes with my own instincts (and prejudices).&amp;nbsp; There are serious points being made, too, but I'm not even going to try to summarise them: you can't boil this stuff down into sound-bites or bullet-points. In a way, that's part of the message; our industry has wasted a lot of time and effort trying to do just that, and look where we've ended up.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyway, this guy really can write.&amp;nbsp; Subscribed.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7464374252860981056?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7464374252860981056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/10/good-agile-bad-agile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7464374252860981056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7464374252860981056'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/10/good-agile-bad-agile.html' title='Good Agile, Bad Agile'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-676694560767202184</id><published>2006-10-03T08:25:00.000+01:00</published><updated>2008-10-11T17:18:03.606+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><title type='text'>Google Reader Update</title><content type='html'>The Google technologies just keep on improving: I've just started to use the new version of &lt;a href="http://www.google.com/reader"&gt;Google's feed reader&lt;/a&gt;, and I really think this is the browser-based reader which makes fat-client reader applications redundant (well, for me at least).&amp;nbsp; I have been using &lt;a href="http://www.rssowl.org/"&gt;RSS Owl&lt;/a&gt;, an Eclipse RCP application which I think is very good (and cross-platform, and free), but I really want to store my RSS feed subscriptions on the web rather than copy a file around, and my requirements for a reader are pretty basic. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How much further will I want to go with this?&amp;nbsp; I already use GMail and the &lt;a href="http://www.google.com/calendar"&gt;Google Calendar&lt;/a&gt;, which effectively makes Outlook redundant, and the &lt;a href="http://www.google.com/notebook/"&gt;Google Notebook&lt;/a&gt; for capturing material and scribbles quickly, and storing those on the web too.&amp;nbsp; I'm not sure about the Writely word processor and the spreadsheet (whatever that's called) - when I last used Writely (months ago) it wasn't very impressive.&amp;nbsp; But there is little doubt in my mind that for web-oriented applications, and for basic calendar/diary stuff, keeping things on the web and accessing them through a browser is almost ideal, provided I can rely on being 'always connected'.&amp;nbsp; Broadband in the UK is becoming more and more like running water: only the remotest places don't have it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The bigger question is whether I trust Google with all my data.&amp;nbsp; How comfortable am I that Google can (in principle, if not in fact) read my emails, see my calendar, know what sites I monitor via RSS/Atom, and read my notes and documents?&amp;nbsp; Currently, none of this bothers me in the least, for a number of reasons.&amp;nbsp; First, there are other large companies which already know far more about me (and my lifestyle) than Google does: my bank and the supermarkets I use, for example.&amp;nbsp; Second, I can choose what I store in any of the Google applications, and I could easily and cheaply encrypt anything I didn't want stored &lt;span style="font-style: italic;"&gt;en clair&lt;/span&gt;.&amp;nbsp; Lastly, I'm pretty sure that anyone looking at my Google data would have a hard time finding anything worth exploiting anyway: I'm not stupid enough to store&amp;nbsp; anything truly valuable there.&amp;nbsp; Every day, we all leave behind us trails of transactions, CCTV images, cellphone location updates, building entry/exit events, etc.&amp;nbsp; These things are (for most of us) completely out of our control: is it paranoia, stupidity or vanity that makes people talk-up the 'danger' of online services?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-676694560767202184?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/676694560767202184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/10/google-reader-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/676694560767202184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/676694560767202184'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/10/google-reader-update.html' title='Google Reader Update'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3664018559680476085</id><published>2006-10-02T11:16:00.000+01:00</published><updated>2008-10-11T17:18:04.002+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CLR and .NET'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Netron, RIP?</title><content type='html'>The Netron project (Sourceforge) has disappeared.&amp;nbsp; It looks like the author has sold out to (or been employed by) &lt;a href="http://www.nwoods.com/Index.htm"&gt;Northwoods Software&lt;/a&gt;.&amp;nbsp; Good luck to him, I guess.&amp;nbsp; I used Netron for a while, but found it frustratingly patchy and the author seemed more preoccupied with adding features and presenting a lot of demo apps rather than with quality.&amp;nbsp; What's the alternative, in the .NET world?&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3664018559680476085?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3664018559680476085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/10/netron-rip.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3664018559680476085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3664018559680476085'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/10/netron-rip.html' title='Netron, RIP?'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-2663557361673139861</id><published>2006-08-10T13:55:00.000+01:00</published><updated>2008-10-11T17:18:04.458+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Uncategorized'/><title type='text'>R.W. Emerson Quote</title><content type='html'>People are always putting quotes in blog posts, web pages or (heaven forbid) email signature lines.&amp;nbsp; Normally, I ignore these but &lt;a href="http://matt.wordpress.com/2006/04/06/ralph-waldo-emerson/"&gt;this one&lt;/a&gt; really stopped me in my tracks.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-2663557361673139861?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/2663557361673139861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/08/rw-emerson-quote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2663557361673139861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/2663557361673139861'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/08/rw-emerson-quote.html' title='R.W. Emerson Quote'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-1214490654727140829</id><published>2006-08-04T21:35:00.000+01:00</published><updated>2008-10-11T17:18:04.962+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Home and Family'/><title type='text'> Catching up</title><content type='html'>Another long gap between posts.&amp;nbsp; So what's happening?&amp;nbsp; Well, we went back to The Hague the other weekend to visit friends we made while living there.&amp;nbsp;&amp;nbsp; It was great to have the chance to eat, drink and chat with them again: the children all went to school with each other for five years or so, and despite being apart for over a year they all got on as if they'd never been apart.&amp;nbsp; On the Saturday eveing we got together at the excellent, friendly &lt;a href="http://www.lofderzotheid.nl/index2.htm"&gt;Lof der Zotheid&lt;/a&gt;, in Breitnerlaan.&amp;nbsp; It's evening like this (and food/drink like this) that I do miss.&amp;nbsp; The next morning, our hosts (Simon and Maureen) laid on breakfast for four families, so the party extended well into Sunday!&amp;nbsp; Eventually, we had to make our way back to the Hoek, for the ferry.&amp;nbsp; The journey's so easy, we ought to do this more.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Daniel had his 13th birthday in July!&amp;nbsp; We managed to get him what he really wanted: a good, second-hand soprano Saxophone (a Yanagisawa!) from the ever-helpful folk at &lt;a href="http://woodwindandreed.co.uk/"&gt;Wood, Wind and Reed&lt;/a&gt;.&amp;nbsp; Daniel loves it.&amp;nbsp; Good thing too, because it wasn't cheap!&amp;nbsp; But it's worth every penny, as he will do it justice - he's already working on Grade 7 (on the Alto Sax) - and he's playing with great assurance.&amp;nbsp; As a birthday party, we took half a dozen of his friends paint-balling at &lt;a href="http://goballistic.co.uk/paintball_sites/index.asp?id=1547"&gt;Go Ballistic&lt;/a&gt; in Thetford Forest.&amp;nbsp; I must this is a very professionally run place: superb support for the whole day, everyone had fun and no-one got hurt.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Becca has just returned from a week's camping with her Guides patrol.&amp;nbsp; They were somewhere near Coltishall, and it did rain for a couple of days but this doesn't seem to have dampened her enthusiasm; she's starting to plan a family camping holiday already!&amp;nbsp; This week, she's been abseiling, climbing, kayaking, hiking, and on some enormous zip-wire, so coming home is a little bit of an anti-climax for her.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Work-wise, it's been a busy time, working on a healthcare-related project (more about that another time), leaving little time to get to grips with the personal development projects.&amp;nbsp;&amp;nbsp; It also means I have plenty to write about my adventures in the world of HL7, DICOM, CDA and the rest of the healthcare informatics alphabet soup.&amp;nbsp; So much to do, so little time...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've been meaning to use a Wiki to keep notes on projects and as a cheap, fast way to publish stuff to the web, but I don't write often enough to make it worth investing too much time there.&amp;nbsp; At work we use the &lt;a href="http://www.atlassian.com/software/confluence/"&gt;Confluence&lt;/a&gt; publishing system which is pretty good: it's commercial, but there's a free individual license.&amp;nbsp; I tried it,&amp;nbsp; but the (memory) overhead of running Tomcat on my virtual server is a little more than I can accept for just a wiki.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.splitbrain.org/wiki:dokuwiki"&gt;DokuWiki&lt;/a&gt; is superb, and with the Monobook theme it looks and feels very much like Mediawiki.&amp;nbsp; It's a PHP wiki engine, a much lower-overhead proposition and almost as functional.&amp;nbsp; My hobby project now is to add a simple XMLRPC interface, which I intend to use as the basis for a page publishing and editing facility, via OpenOffice Writer (and possibly Word, too).&amp;nbsp;&amp;nbsp; I'm going to use Python on the server-side; it's a superb language and very good for web development.&amp;nbsp; I'll probably use &lt;a href="http://www.webwareforpython.org/"&gt;Webware for Python&lt;/a&gt; to run the server-side code - it's a fast, simple and effective container.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-1214490654727140829?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/1214490654727140829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/08/catching-up.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1214490654727140829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/1214490654727140829'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/08/catching-up.html' title=' Catching up'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-4000549382813790295</id><published>2006-06-01T13:24:00.000+01:00</published><updated>2008-10-11T17:18:05.478+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CLR and .NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Technology'/><title type='text'>Java and .NET - choices.</title><content type='html'>I'm not usually drawn to online 'Java versus .NET' discussions.&amp;nbsp; They tend to attract evangelists and bigots, and rarely lead to any insight.&amp;nbsp; &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=40611"&gt;This article&lt;/a&gt; on TheServerSide is a little better than most; there is still a hefty proportion of noise, but enough signal gets through to make it worth reading a selection of the follow-up comments (I have only managed to get about half way through, skim-reading).&amp;nbsp; Quite a few of the comments reinforce my own views, hence this post.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Software engineering is (or should be) about getting things done - creating and delivering something.&amp;nbsp; You use the tools and techniques which work well for you, in your environment.&amp;nbsp; In my view, Java and .NET are roughly equivalent in terms of their ability to enable delivery.&amp;nbsp; You cannot guarantee success by choosing one technology over another, but you can improve your chances: you select the one which most closely fits your circumstances.&amp;nbsp; This piece of common-sense at least emerged from some of the comments.&amp;nbsp; If your business (therefore your customer's) is tightly bound to the Microsoft platform, then .NET probably makes good sense for you, regardless of engineering-purity arguments in favour of an alternative.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The breadth-of-choice issue, in relation to Java frameworks, libraries and technologies (and even IDEs), is an understandable point, but I see this is as one of Java's great strengths. The Microsoft monoculture means you don't have to think for yourself, and for many a jobbing programmer, this is a good thing. What's needed is strong technical leadership where decisions concerning the language, tools and technologies to be used by default are made by senior engineering, following some process of study and selection. With the burden of technology-selection drastically reduced (even removed), development teams can get on with applying the selected technology, gaining experience with it and feeding-back into an iterative improvement process managed by the technical leaders.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some will complain that this smacks of a 'two-tier' technical hierarchy, with certain individuals occupying elevated positions and having control of process and technology.&amp;nbsp; Well, yes, that is exactly what I am suggesting.&amp;nbsp; I don't see a workable alternative that doesn't result in, at best, less effective teams constantly trying different things, and at worst, complete chaos.&amp;nbsp; It doesn't mean the leaders are always right, and (as the hint at an iterative process indicates) it doesn't mean things can't change.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This article is timely because I have only recently started trying to use Java and Eclipse, after many years of C# and .NET.&amp;nbsp; I can sympathise with the .NET enthusiasts because I am at the stage where I know how to do it using C#/CLR but I'm not quite sure of the best way to do it using Java.&amp;nbsp; As it happens, I don't think the range of alternatives is daunting at all: it looks to me as if I can go a long way with Eclipse (with additional libraries), Spring and Hibernate.&amp;nbsp; What continues to amaze (and delight) me is the range and quality of supporting libraries in the Eclipse space: there is no equivalent in the Microsoft world.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-4000549382813790295?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/4000549382813790295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/06/java-and-net-choices.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4000549382813790295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/4000549382813790295'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/06/java-and-net-choices.html' title='Java and .NET - choices.'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5282899731996518498</id><published>2006-05-30T11:15:00.000+01:00</published><updated>2008-10-11T17:18:05.927+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse, EMF/GEF/GMF</title><content type='html'>The support for modelling and model-visualization in Eclipse is very impressive, but a little difficult to get to grips with quickly.&amp;nbsp; I had already started working with the free &lt;a href="http://publib-b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg246302.html"&gt;IBM red-book on EMF and GEF&lt;/a&gt; when I discovered that there is now a project called &lt;a href="http://www.eclipse.org/gmf/"&gt;Graphical Modeling Framework&lt;/a&gt; which appears to subsume EMF and GEF.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Moreover, I'm trying to use the &lt;a href="http://www.eclipse.org/callisto/"&gt;Callisto build of Eclipse&lt;/a&gt; (which attempts to combine harmonized plugin and project versions), and the&lt;a href="http://www.omondo.com/"&gt; Omondo UML plugin&lt;/a&gt; no longer seems to work correctly when used to create EMF models graphically.&amp;nbsp; I cannot seem to add an attribute to a model class in Omondo - the menu command simply doesn't exist.&amp;nbsp; To be fair to Omondo, I think they recognize there are some issues and a &lt;a href="http://www.forum-omondo.com/viewtopic.php?t=878&amp;amp;highlight=callisto"&gt;forum comment&lt;/a&gt; has been posted to the effect that a new version will be released soon for Callisto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What's so interesting to me is that the Eclipse/Java community appears to be ahead of Microsoft in the area of Domain Specific Languages (DSL) and model-driven development.&amp;nbsp; Microsoft makes a lot of noise about '&lt;a href="http://www.softwarefactories.com/"&gt;Software Factories&lt;/a&gt;' and building support for creating and using DSLs in Visual Studio, but this has only recently become available and you must purchase the &lt;a href="http://msdn.microsoft.com/vstudio/teamsystem/"&gt;Team System&lt;/a&gt; edition to get it.&amp;nbsp;&amp;nbsp; Team System requires an enormous investment, not just money but also commitment to Microsoft's view of how your team should work and collaborate.&amp;nbsp; Eclipse is free, completely open, and cross-platform.&amp;nbsp; I'm going to be looking in more detail at the libraries and tools for doing model-driven development, and building graphical editors.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5282899731996518498?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5282899731996518498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/05/eclipse-emfgefgmf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5282899731996518498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5282899731996518498'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/05/eclipse-emfgefgmf.html' title='Eclipse, EMF/GEF/GMF'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-7282666259762982192</id><published>2006-05-23T08:22:00.001+01:00</published><updated>2008-10-11T17:21:48.357+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Home and Family'/><title type='text'>Airkix!</title><content type='html'>Rebecca (my daughter) and I finally got to use our &lt;a href="http://www.airkix.com/"&gt;Airkix&lt;/a&gt; vouchers last weekend!  Chris bought me a voucher for my birthday, and Becca liked the idea so much that we got her a voucher for her birthday, so we all went to the &lt;a href="http://www.xscape.co.uk/"&gt;Xscape Centre&lt;/a&gt; at Milton Keynes on Saturday to use them!&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.airkix.com/"&gt;Airkix website&lt;/a&gt; gives you a pretty good idea of what it's all about, but you really have to experience it; the sensation is predictable enough but I hadn't expected it to be so tricky to maintain a precise position.  You need to find a stable body-shape, and then to make all adjustments slowly.  And as you have only two 1-minute flights, you have to learn all this quite quickly.&lt;br /&gt;&lt;br /&gt;Becca is very athletic and supple, so she found the right shape almost immediately.  It took me (a much older, creakier body!) a while longer, but I got there.   And we have a DVD of our session to prove it!  Must try to get some of that on to this site.&lt;br /&gt;&lt;br /&gt;The tunnel equipment is awesome - I have no idea how powerful the fans are, but air is drawn from a very wide base area up through a funnell-walled section into the chamber (which isn't very big), which increases the velocity of the airstream.  I didn't watch the instruments but I believe the windspeed is in excess of 100mph.  There's a fine degree of control available too: they reduce the windspeed for smaller, lighter flyers, or when someone accidentally ends up too high.&lt;br /&gt;&lt;br /&gt;This was huge fun!  I've always wanted to experience free-fall, but I'm a still a bit scared of parachuting.  This is the only other way...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-7282666259762982192?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/7282666259762982192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/05/airkix_23.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7282666259762982192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/7282666259762982192'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/05/airkix_23.html' title='Airkix!'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-6027459130917225859</id><published>2006-05-23T08:22:00.000+01:00</published><updated>2008-10-11T17:18:06.344+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Home and Family'/><title type='text'>Airkix!</title><content type='html'>Rebecca (my daughter) and I finally got to use our &lt;a href="http://www.airkix.com/"&gt;Airkix&lt;/a&gt; vouchers last weekend!  Chris bought me a voucher for my birthday, and Becca liked the idea so much that we got her a voucher for her birthday, so we all went to the &lt;a href="http://www.xscape.co.uk/"&gt;Xscape Centre&lt;/a&gt; at Milton Keynes on Saturday to use them!&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.airkix.com/"&gt;Airkix website&lt;/a&gt; gives you a pretty good idea of what it's all about, but you really have to experience it; the sensation is predictable enough but I hadn't expected it to be so tricky to maintain a precise position.  You need to find a stable body-shape, and then to make all adjustments slowly.  And as you have only two 1-minute flights, you have to learn all this quite quickly.&lt;br /&gt;&lt;br /&gt;Becca is very athletic and supple, so she found the right shape almost immediately.  It took me (a much older, creakier body!) a while longer, but I got there.   And we have a DVD of our session to prove it!  Must try to get some of that on to this site.&lt;br /&gt;&lt;br /&gt;The tunnel equipment is awesome - I have no idea how powerful the fans are, but air is drawn from a very wide base area up through a funnell-walled section into the chamber (which isn't very big), which increases the velocity of the airstream.  I didn't watch the instruments but I believe the windspeed is in excess of 100mph.  There's a fine degree of control available too: they reduce the windspeed for smaller, lighter flyers, or when someone accidentally ends up too high.&lt;br /&gt;&lt;br /&gt;This was huge fun!  I've always wanted to experience free-fall, but I'm a still a bit scared of parachuting.  This is the only other way...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-6027459130917225859?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/6027459130917225859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/05/airkix.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6027459130917225859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/6027459130917225859'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/05/airkix.html' title='Airkix!'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-3068079356307845620</id><published>2006-05-17T12:25:00.001+01:00</published><updated>2008-10-11T17:21:47.897+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><title type='text'>Back again, at last</title><content type='html'>Two weeks ago, following some interruptions of service, my hosting provider simply went out of business.&amp;nbsp; This was a bit of a shock, as RazorLogix (RL) had looked like an almost perfect shared host - great service (until the outages), and a very good shared-host plan which included SSH access (non-root), Java, Python (including mod_python), RubyOnRails, Subversion support and more.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When the end came, it meant backing up everything and moving to a new host. Having done this only a month or two previously (in order to move &lt;span style="font-style: italic;"&gt;to &lt;/span&gt;RL!), I wasn't very pleased.&amp;nbsp; The first problem was, who to host with?&amp;nbsp; I looked around for something close to the RL offering.&amp;nbsp; There are other shared-host companies which offer mod_python, but usually these are a bit constraining and very few offer SSH access.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the end, I decided to take a slightly bolder step and go for a&amp;nbsp; Linux virtual server.&amp;nbsp; I hadn't considered running my own server before because it had meant either running the hardware myself 24x7 (not really something I want to do), or purchasing access to a rack-mounted server (very expensive).&amp;nbsp; Now that virtualization has arrived in the hosting market, running your own server is very cheap and gives you complete flexibility.&amp;nbsp; The downside of course is that you have to do everything else: administer the server, install software and so on. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There appear to be two main approaches to the virtual server market: &lt;a href="http://user-mode-linux.sourceforge.net/"&gt;User Mode Linux&lt;/a&gt; (UML) or using a virtualization layer such as &lt;a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/"&gt;Xen&lt;/a&gt;.&amp;nbsp; The result, as far as the user is concerned, is broadly the same: you have a complete Linux OS environment, an allocation of main memory, and some disk space (a few GB).&amp;nbsp; Of all the providers I looked at, the two I concentrated on were &lt;a href="http://www.bytemark.co.uk/page/Live/hosting/virtualmachine/"&gt;Bytemark&lt;/a&gt;, which uses UML and &lt;a href="http://rimuhosting.com/vps/aboutvps.jsp"&gt;Rimuhosting&lt;/a&gt;, which uses Xen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I chose Rimuhosting.&amp;nbsp; So far, so good.&amp;nbsp; They are based in New Zealand but most of the hardware seems to be in US datacentres.&amp;nbsp; Requests for help have been answered promptly and they do seem to know what they're doing.&amp;nbsp; The standard VPS install has almost everything I need, right out of the box, including Java and Python. For most of the basic setup, there is a web-based control panel.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As for me, the experience has been a bit like going back in time, to the years I spent developing in C and C++ on Unix (12 years or more ago).&amp;nbsp; It's surprising just how much has stayed with me, even csh/bash stuff.&amp;nbsp; The biggest challenge has been understanding the components of the standard (RedHat Enterprise-based) distribution that Rimuhosting uses, e.g. Postfix and Dovecot for email.&amp;nbsp; Having SSH access (and SCP access, so you can use something like &lt;a href="http://winscp.net/eng/index.php"&gt;WinSCP&lt;/a&gt;) means complete freedom: now I can do some of the server-side stuff I always wanted to do!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-3068079356307845620?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/3068079356307845620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/05/back-again-at-last_17.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3068079356307845620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/3068079356307845620'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/05/back-again-at-last_17.html' title='Back again, at last'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1824916332181347785.post-5545567301752261153</id><published>2006-05-17T12:25:00.000+01:00</published><updated>2008-10-11T17:18:06.860+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Technology'/><title type='text'>Back again, at last</title><content type='html'>Two weeks ago, following some interruptions of service, my hosting provider simply went out of business.&amp;nbsp; This was a bit of a shock, as RazorLogix (RL) had looked like an almost perfect shared host - great service (until the outages), and a very good shared-host plan which included SSH access (non-root), Java, Python (including mod_python), RubyOnRails, Subversion support and more.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When the end came, it meant backing up everything and moving to a new host. Having done this only a month or two previously (in order to move &lt;span style="font-style: italic;"&gt;to &lt;/span&gt;RL!), I wasn't very pleased.&amp;nbsp; The first problem was, who to host with?&amp;nbsp; I looked around for something close to the RL offering.&amp;nbsp; There are other shared-host companies which offer mod_python, but usually these are a bit constraining and very few offer SSH access.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the end, I decided to take a slightly bolder step and go for a&amp;nbsp; Linux virtual server.&amp;nbsp; I hadn't considered running my own server before because it had meant either running the hardware myself 24x7 (not really something I want to do), or purchasing access to a rack-mounted server (very expensive).&amp;nbsp; Now that virtualization has arrived in the hosting market, running your own server is very cheap and gives you complete flexibility.&amp;nbsp; The downside of course is that you have to do everything else: administer the server, install software and so on. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There appear to be two main approaches to the virtual server market: &lt;a href="http://user-mode-linux.sourceforge.net/"&gt;User Mode Linux&lt;/a&gt; (UML) or using a virtualization layer such as &lt;a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/"&gt;Xen&lt;/a&gt;.&amp;nbsp; The result, as far as the user is concerned, is broadly the same: you have a complete Linux OS environment, an allocation of main memory, and some disk space (a few GB).&amp;nbsp; Of all the providers I looked at, the two I concentrated on were &lt;a href="http://www.bytemark.co.uk/page/Live/hosting/virtualmachine/"&gt;Bytemark&lt;/a&gt;, which uses UML and &lt;a href="http://rimuhosting.com/vps/aboutvps.jsp"&gt;Rimuhosting&lt;/a&gt;, which uses Xen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I chose Rimuhosting.&amp;nbsp; So far, so good.&amp;nbsp; They are based in New Zealand but most of the hardware seems to be in US datacentres.&amp;nbsp; Requests for help have been answered promptly and they do seem to know what they're doing.&amp;nbsp; The standard VPS install has almost everything I need, right out of the box, including Java and Python. For most of the basic setup, there is a web-based control panel.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As for me, the experience has been a bit like going back in time, to the years I spent developing in C and C++ on Unix (12 years or more ago).&amp;nbsp; It's surprising just how much has stayed with me, even csh/bash stuff.&amp;nbsp; The biggest challenge has been understanding the components of the standard (RedHat Enterprise-based) distribution that Rimuhosting uses, e.g. Postfix and Dovecot for email.&amp;nbsp; Having SSH access (and SCP access, so you can use something like &lt;a href="http://winscp.net/eng/index.php"&gt;WinSCP&lt;/a&gt;) means complete freedom: now I can do some of the server-side stuff I always wanted to do!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1824916332181347785-5545567301752261153?l=searjeant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searjeant.blogspot.com/feeds/5545567301752261153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://searjeant.blogspot.com/2006/05/back-again-at-last.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5545567301752261153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1824916332181347785/posts/default/5545567301752261153'/><link rel='alternate' type='text/html' href='http://searjeant.blogspot.com/2006/05/back-again-at-last.html' title='Back again, at last'/><author><name>Roger Searjeant</name><uri>http://www.blogger.com/profile/04617246417075862278</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
