Sunday, 28 December 2008

Defenders of the Faith II

I've just booked tickets and accommodation for the second Metal Hammer Defenders of the Faith featuring a co-head liners Dimmu Borgir and Lamb of God in Birmingham on Thursday 12 February 2009.

I've seen Dimmu Borgir a couple of times before (once recently at Bloodstock), but I've been desperate to see Lamb of God since I was introduced to thier latest album Sacrament last year. It will be well worth two days holiday and a drive to Brum.

Project Management: Best Practices for IT Professions

by Richard Murch (ISBN: 978-0130219145 )

Although I have actively, and sometimes passionately, resisted the move into any sort of management beyond team / technical leading for many years, I'm finding recently that I'm becoming more interested in project management. It's a sobering fact that where I am now I have a team and I need to manage them better.

Project Management by Richard Murch was (how shall I put it?) strongly recommended and presented to me by my current boss. It's a reasonably sized hardback book at 220 pages, plus appendices. The information on each page is, in most cases, both verbose and spread out, so it could have been a much smaller book. I would have scrubbed the final chapter on the internet altogether until I noticed the publication date of October 2000. It's a book of its time and therefore describes the more traditional project management techniques based around quite lot of documentation and rigid process. As such there is no mention of XP or Agile, neither of which could be ignored in a modern text. I read it cover to appendices in a little over a week and I learnt a lot.

There were a few things that irritated me about the book. Murch states very early on that all projects must cater for change. I couldn't agree with him more, but in several other places in the book he talks about eliminating scope creep. I may be being a little harsh as most of the scope creep Murch refers to is the “wouldn't it be nice if” type. What he seems to have missed is that all scopes in software development creep. The reason they creep is that software engineers strive to give users what they asked for and, invariably, users ask for what they think they want, not what they actually need. Any well managed project will have the users involved from beginning to end (a point Murch does make) and as the users see what they're getting they're able to help direct the engineers to what they actually need and scope creeps. Scope creep could of course be eliminated by gathering requirements and then isolating the users until the project is complete, but then the users wont have what they need.

The book also shows its age when describing testing. Unit Testing no longer refers to testing a unit of work. It is an automated test testing a single unit such as a class. These test should be written by the software engineer and not left to another party following development.

I haven't encountered Rapid Application Development (RAD) in the project management sense before. From Murch's description it sounds like the only teams it would suit are those that are simply stringing together existing components, where there is no learning to be done and very little to zero chance of scope creep. This seams totally unrealistic to me. Software engineers innovate and to innovate they have to learn. When people are learning they make mistakes and RAD doesn't allow for mistakes.

That said, let me reiterate that I learnt a lot and there is plenty of good advice in this book. As I read it I made a list of the things to remember and to try and make use of. I ended up with 19 points and page numbers. To my surprise a lot of these did revolve around documentation, but I still feel it should be minimal and I'm still undecided about how much should be hard-copy and how much electronic.

Murch states that project managers should stay positive (P.15) about all aspects of the project while, at the same time, be able to handle often relentless stress (P.18). This is a very accurate observation that all project managers should bear in mind.

A lot, but not all, software engineers and managers are aware of the risks that might effect their projects. Murch talks about risk management objectives (P.163) and documenting and constantly reviewing risks that effect the project. The scoring system and examples presented are sensible and I can see them being useful. Once identified, all risks should have a risk management plan (P.166). This all makes perfect sense, especially when you consider “the first step in avoiding a trap is knowing of its existence”. This way there are less surprises for all concerned.

Software engineers are often left to battle on with a problem on their own, be it pride or the illusion that someone else's time is better spent on a separate problem or on development. Murch points out that problems are solved quicker and more easily when more than one person investigates the problem (divide and conquer P.176). He also describes a repeatable problem solving methodology (P.177) that helps the team to understand and document the problem for future reference, plan and implement a solution.

Problems do occur in projects. In most cases these problems are fixed and the team assigns them to history and moves on. This kills the learning process as soon as the problem is fixed, which leaves it liable for repetition in the future. Murch describes Lessons Learned reviews (P.28) which are a type of post mortem designed to help the team learn from problems and mistakes to help avoid them in the future.

All projects, even Agile and XP projects need a project plan (P.41) and no project should be started without one. Projects should be divided up into phases and/or milestones with a phase check list (P.64) so that it is clear to the team and to project and senior management if a phase has been completed successfully. Regular project review reports (P.32) enable the team, the project manager and senior managers to monitor and understand the progress of the project. Projects also need a set of standards (P.29) that are reviewed regularly to make sure that everyone is producing the right level of quality.

Murch explains, as we all know, that people are the most important part of any project. It is important to retain staff and make them feel secure. Murch suggests that the best way of doing this is with incentive packages, usually consisting of a high salary, options, dental plans etc. Although I agree (what software engineer wouldn't) the people you work with are often the biggest factor. Therefore, when expanding the team, it is vitally important to find people who will fit into the team, not just those that are the right price or have the right level of technical skill. Evaluating the skills within the team over time (P.24) is important. It helps make sure that team members learn and maintain the skills that are going to be of most use to the team currently and in the future.

Murch describes two roles that would be useful in any team: A scribe (P.157) who is responsible for recording and collating discussion in any team meeting (formal or otherwise) and a release manager (P.193) who is responsible for overseeing releases, release planning and managing any problems that arise.

I wouldn't recommend this book as an absolute or only guide to project management, especially as it is so out of date, but it is a good place to start if you are going on to read other things. As for me, I have Agile Project Management: Creating Innovative Products (ISBN: 978-0321219770) lined up next.

Tuesday, 23 December 2008

Effecient PC

Until recently I hadn't bought a desktop PC for over five years and in that time I'd only bought one laptop (IBM T60 that I'm still very fond of). When I got the money out of my limited company I decided to get a few things, one of which was a new PC. I wanted something with lots of RAM a fast processor and Windows Vista.

Efficient PC was suggested to me and they seemed to have what I was looking for so I ordered an Ori with:
  • Phenom Quad Core 9950
  • 4GB of RAM
  • Nvidia Geforce 8600GT 512MB
  • Netgear 108Mbps Wireless
  • Ubunto
  • Windows Vista
What I received was a beautiful black tower and a seriously quick machine even following Windows Vista patching. The setup of the network card was a little problematic, but straight forward once I got the hang of the right configuration utility.

The first machine I received did have one major problem. It reset (not rebooted!) itself randomly, even when in use. After getting in contact with Efficient PC they took the machine back and traced the fault to the hard disk. Unfortunately it came back to me with the same problem, so I had to send it back again.

After about a week and a lot of hard work on the part of Efficient PC I was sent a replacement machine and I haven't had a problem since. It looks like the first PC was just one of those rare machines where there is an untraceable fault.

The two most important points for me are that I now have a very quick machine and the customer service I got from Efficient PC was superb. I would certainly use them again and would encourage other too as well.

Mark Steel

Charlotte and I continued our love affair with Norwich Play House and Comedy last week with Mark Steel.

I've heard Mark on the radio on a number of Radio 2 and Radio 4 comedy shows, but I've never realised how political he was. Having said that he made a lot of sense.

We sat right in the centre of the front row again, but luckily we were ignored this time. In fact he didn't pick on anyone in the crowd who wasn't either late or didn't heckle on him first.

We had a thoroughly enjoyable evening. Mark was on stage for over two hours, with a interval. Very good value for money and we'll certainly go and see him again.

The Prefect

I have now read all of Alistair Reynolds Revelation spaces books and I loved every one.

The Prefect was no different. It took a little while to get into, but once the plot started to emerge it was very addictive. It is set in the Glitter Band before the Melding Plague and takes an interesting look at Demarchist society and how it works.

There are plenty of references to the eighty, the Sylvest's and the Shrouders. Along with an explanation of what really happened to one character from the original Revelation Space novel.

The only complaint I have about the book is that, like Absolution Gap, it does not really reach a conclusion. It just ends and leaves a lot to the readers imagination. I am hoping that in both book's cases, this is so that Reynolds can pick up the stories and elaborate further in future books.

I am now intending to take a brief pause and revisit CS Lewis and read some more Richard Morgan before tackling Reynold's non-Revelation Space based books.

(ISBN: 978-0575082182)

ACCU London Christmas Party 2009

I think the credit crunch is getting everyone. This year's ACCU London Christmas party at Pizza Express was well attended as usual, but a number of the usual suspects were missing. This does of course mean that there were some new faces and even some old ones that don't make it out so often.





There was a worrying about of technical discussion. Maybe I'll go back to drinking for next year.

A small delegation went to the usual ACCU haunt (Chandos) where the good time continued for a short time.





I was staying with friends on Isle of Dogs and thoroughly enjoyed the walk from Trafalgar Square to Westminster to pick up the Jubilee line to Canary Wharf. It was strange seeing the Lehman's building with half the lights out and the illuminated green band missing from the top.



Monday, 22 December 2008

See you at the ACCU Conference

I heard today that my Boiler Plating Database Resource Cleanup proposal has been accepted for the 2009 ACCU Conference.

Obviously, I'm very pleased as I was unable to go last year and many people have already asked me if I'll be going in 2009. I can now say that I will be there for at least one day and hopefully the duration.

I will also be presenting Boiler Plating Database Resource Cleanup at ACCU London in February. Watch this space for details.

Sunday, 7 December 2008

MP3 Player with DAB and FM Radio

Ever since I've been thinking about getting a Blackberry I've also been trying to find an MP3 player with a DAB and FM radio, as the Blackberry doesn't have any sort of radio and I do listen to it on the move quite a lot. As soon as I started looking I found several MP3 players with DAB radios, but they all had one draw back or another (funny size, strange shape, odd aerial attachment etc). Then, almost by accident I stumbled on the Cowon iAudio D2 16GB MP3 Player with DAB Digital Radio:

Affordable PMP

The iAudio D2 does not compromise quality and features for its compact size. Cowon provides the latest innovations in digital multimedia technology to provide incredible video and audio quality. The D2 supports QVGA 320x240, 30fps video files and audio files including the high quality lossless codecs such as FLAC and OGG, along with the usual MP3, WMA and WAV. The D2 also provides a TV output for seamless transfer of your viewing onto the comfort of your living room TV. D2 now includes DAB Digital radio, alongside traditional FM radio - for peerless sound quality and ease of use.

Super High Quality 2.5" 16 million colour QVGA LCD Touch Screen

Raise your viewing standard with the D2's class-leading 16 million colour 24 bit LCD touch screen. You will experience finer details with richer colours from your favourite pictures and movies like you've never experienced before!

DAB Radio - Cowon leads the way

The first mainstream DAP manufacturer to include DAB digital radio with a headline player, iAudio have ensured that the DAB quality matches the rest of the D2's class leading abilities. Without a doubt, the best portable DAB radio available, it adds another feature to make the D2 the most complete player available today!

Sets New Standards for Touch Screen with Virtual click

An overlay navigation function shows the playback screen during video playback and lets you enjoy the convenience of navigating through other contents in your player. Detailed information such as file size, pixel resolution and format can be viewed while browsing through files that increase the fun of navigation.

Music - 52 hours, Movies - 10 hours of continuous playback!

The D2's long-lasting built-in rechargable battery provides an incredible 10 hours of video with up to 52 hours of music playback on a single charge! Wherever you go, free yourself from worrying about unexpected interruption of your music. The D2 can be charged via USB cable or standard wall adaptor.

Memory Card Extension

You will never run out of memory with the D2. Build in SD slot allows you to transfer freely from/to other digital devices such as digital camera, PDA and more.

Supported Memory: SD, SDHC (up 20 32GB) MMC, MMC-plus

Unrivaled Sound Quality
Class leading 74mW Power


The Legend Continues! iAudio, renowned for best sounding players, writes a new chapter in its dynamic and innovative history with the D2! BBE, Mach3Bass, MP Enhance, STE, customisable 5 band EQ accompanied by powerful output - your music will never sound better! The D2's power rating is amongst the best in its class (74mW@16ohm)
  • Max output - 76mW@16ohm
  • 5 Band EQ - Normal, Rock, Jazz, Classic, Pop, Vocal, User
  • BBE - Adds clarity to music
  • Mach3Bass - Bass Booster that enhances super low-end bass
  • MP Enhance - Sound effect that compensates for lost parts of MP£ encoded sound
  • 3D Surround - Three-dimensional sound effect
  • Stereo Enhance - Enhanced stereo and wider sound stage
  • Pan - Left/right balance adjustment

TV out

sharing memories with your loved ones has never been easier. Watch it, read it, view it on your big screen TV or high resolution monitor. TV-Out is now standard on the iAudio D2

Multi Purpose Touchpen, Stylus and Kickstand

A multi purpose stylus & touchpen is provided for accurate pointing. It can also be used as a kickstand for extended viewing.



Now all I need to do is find someone stupid enough to buy me one.....

Wednesday, 3 December 2008

Software Engineer - Norwich

A development role writing critical web-based business process software using predominantly Java based technologies... Read more.

Sunday, 23 November 2008

What would you ask?

Had lunch with a friend of mine today. She's writing a book and asked me if I could ask any question of anyone living or dead, real or fictional what would it be and who would I ask?

I really had to think about it. My first thought was to ask president Bush if he planned and allowed the attacks on September the 11th.

Then I started to think a little less seriously. I'd quite like to ask Freddie Mercury why he wasn't more careful. And of course there are my fantasies about a certain character from a certain science fiction series.

Finally I decided that Peter Tägtgren from Hypocrisy and Pain had it right with the song Roswell 47 from 1996's Abducted album. I'd really like to ask Harry Truman what really happened in Roswell in 1947.

Saturday, 22 November 2008

ACCU Mentored Developers Effective Java Project

I've just created a new blog for the ACCU Mentored Developers Effective Java Project: http://accu-mentored-ejava.blogspot.com/

Friday, 21 November 2008

Taming the Lint Monster Review

Now it's dark so early it's quite exciting rolling past Canary Wharf on the train and seeing all the lights and thinking of Lehman building standing empty. It still fills me with excitement, just like the first time I went there for a job interview. Anyway, I wasn't in London last night to see Canary Wharf. I was there to see Anna-Jayne Metcalfe speak about PC-Lint.

Although it pains me to say it and the possibility of a C++ project came up just this week, I don't do C++ any more. The last two years have been a really big change for me in that regard. However, I am more than a little responsible for the fact that Anna is speaking in London tonight, having volunteered her to Allan Kelly when he was looking for a speaker for November, so I went to show my support and take any flack.

Anna had a really good turn out. ACCU London meetings usually attract between ten and twenty attendees and Anna had somewhere between ten and fifteen. She was obviously nervous and at times difficult to hear, but she knows her stuff and has a passion for it. I was also impressed that she managed not to mention her company's Visual Lint product until the question and answer session at the end.

The group were intensely interested and questions were asked throughout. Although it was looking unlikely at one stage, Anna did manage to get to the end of her slides and there was only a slight overrun, that wasn't helped by technical problems at the beginning.

I found it quite nostalgic revisiting memory leaks, uninitialised variables and other problems that PC-Lint can detect and that, in the world of dynamic garbage collected languages, I rarely need to worry about in quite the same way these days.

I'm hoping Anna will speak at the ACCU conference this year and give us an insight into Visual Lint and Riverblade's new Incredibuild integration.

Boiler Plating Database Resource Cleanup - Part I (v2)

This is a modification of my original Boiler Plating Database Resource Cleanup article giving a bit more background, exploring a couple of different ideas and setting the sceane for the second part:

The problem is simple. Cleaning up after querying a database in Java is unnecessarily verbose and complex. Plain and simple. I'll start with an example that demonstrates the problem. The system I'm working on currently uses a number of web services. We have a set of web services on the production box, another on the development box and another on our local machines. The system asks the relevant database for the location of the web service based on the services' name:

try
{
Class.forName(driver);
Connection con = DriverManager.getConnection(connectionString,username,password );
try
{
PreparedStatement ps = con.prepareStatement("select url from services where name = 'Instruments'");

try
{
ResultSet rs = ps.executeQuery();
if(rs.next())
{
System.out.println(rs.getString("url"));
}

try
{
rs.close();
}
catch(SQLException e)
{
// Report Error
}
}
finally
{
try
{
ps.close();
}
catch(SQLException e)
{
// Report Error
}
}
}
finally
{
try
{
con.close();
}
catch(SQLException e)
{
// Report Error
}
}
}
catch(Exception e)
{
// Report Error
}

This is a lot of code to get one string out of a database and most of it must be repeated every time a database is accessed. Most of it is error handling and resource management. In fact I've over simplified it. For a discussion of how error handling and resource management should really be handled see "Handling Exceptions in Finally" mentioned above.

The Sun Java Documentaton states the following for the Connection interface's close method:

Releases this Connection object's database and JDBC resources immediately instead of waiting for them to be automatically released.

Note: A Connection object is automatically closed when it is garbage collected. Certain fatal errors also close a Connection object.

It also states the following for the Statement interface's close method:

Releases this Statement object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed. It is generally good practice to release resources as soon as you are finished with them to avoid tying up database resources.

Note: A Statement object is automatically closed when it is garbage collected. When a Statement object is closed, its current ResultSet object, if one exists, is also closed.

And the following for the ResultSet interface's close method:

Releases this ResultSet object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed.

Note: A ResultSet object is automatically closed by the Statement object that generated it when that Statement object is closed, re-executed, or is used to retrieve the next result from a sequence of multiple results. A ResultSet object is also automatically closed when it is garbage collected.

This can all be interpreted in a number of two ways. The first is that everything gets closed when it is garbage collected, so there is no need to explicitly close anything. This relies on the appropriate finalizers getting called but, as Bloch tells us, Java provides no guarantee that a finalizer will ever be called, even when an object is garbage collected.

Another method is to explicitly close Statement and Connection objects as statement objects clean up their associated ResultSet objects. Drawbacks include any error caused by closing the ResultSet is potentially ignored and the resource is not release as soon as it could be.

Yet another method is to explicitly close everything. This is the most code, but releases resources and handles any error as soon as a resource is finished with, making it most efficient way of using resources.

I favour the third and final method. It is more code, but boiler plating will mean most of it only need to be written once. Everything will be cleaned up as soon as possible, all errors can be trapped and reported and nothing is left to chance.

The close methods for Connection, Statement and ResultSet objects can all throw if there is an exceptional circumstance. In Item 65 of Effective Java Bloch explains that exceptions should not be ignored. He also describes certain circumstances where it might be ok to ignore or log these types of exceptions. The Connection, Statement and ResultSet close methods could be considered one of these situations.

Read more.

Wednesday, 19 November 2008

[Accu-london] Taming the Lint Monster (20th November)

Speaker: Anna-Jayne Metcalfe
When: 7:00pm, Thursday 20th November 2008
Cost: Free. Open to non-members.
Where: 7city Learning, 4 Chiswell Street, London, EC1Y 4UP
Map: http://www.7city.com/pdf/chiswell_street.pdf

Registration is required for this event due to limited space and
security at 7city. Reserve your place by e-mailing James Slaughter,
slaughter@acm.org.


About the Talk
If used effectively, code analysis tools can make a huge difference to the quality of a codebase and its perceived reliability and maintainability. However, in the C++ world, the one static analysis tool which is most established - PC-Lint from Gimpel Software - is also probably the hardest to configure and use. Consequently, many organisations who have purchased it do not use it effectively (if at all).

This session aims to present a practical introduction to PC-Lint from the perspective of how to configure and use it effectively to improve the quality of C and C++ codebases. Using a combination of theory, discussion and live demonstrations, topics such as setting up a PC-Lint analysis configuration, troubleshooting analysis problems and interpreting the mass of analysis results which can easily result from the first contact of PC-Lint with a "virgin" codebase will be covered in some depth.


About the Speakers
Anna-Jayne Metcalfe is the founder of Riverblade, an Independent Software Vendor specialising in code analysis tools and Visual Studio integration. Prior to that she worked extensively within the defence and marine sectors, developing (among other things) the concept of the "virtual super instrument" in avionic functional testing, and a market leading sub-sea acoustic positioning system.

Anna holds a BEng in Electronic and Electrical Engineering from Surrey University in Guildford, but moved from hardware to software design in 1996 when the opportunity arose to lead a team developing virtual instrument software for an avionic functional test system. She has published several articles on codeproject.com, and can usually be found hanging out in the Lounge there - where her affinity for chillis, Belgian beer and stotty cakes is far too well known to the other inmates.


More Information
Additional details can be found on the ACCU website at:
http://accu.org/index.php/accu_branches/accu_london

Tuesday, 4 November 2008

Amber Cottage Whitby

For the Whitby Gothic Weekend this year I stayed with some friends at Amber Cottage. It's a compact, comfortable and utterly delightful little house. It has very good heating, a reasonable shower and Sky (FreeSat) TV! It's ideal for a small family or group like us.

The only downsides are that there is very patch mobile coverage (none at all if you're with Vodafone. T-Mobile seems to be fine though) and there's no door between the lounge, the hall and the top bedroom. But I'm really struggling to find anything negative to say about it.

I'm hoping to go back. Many times.

Whitby Gothic Weekend October 2008

I love going to the Whitby Gothic Weekend and this year was as much fun as it's ever been. I took a friend of mine who had never been before (a Whitby virgin no-less) and she loved it, although I did manage to drink her under the table on the Saturday night.

For the first time I didn't do the official Whitby. My friends and did the alternative Whitby which, for us, turned out to be lots of drinking in pubs a brief trip to a "bleepy" goth night, more drinking in pubs and finally Sexy Sunday.

I think the highlights were catching up with old friends, the Sunday night in the pub, followed by Sexy Sunday and, of course, Lewis Hamilton winning the formula one divers championship. Although I nearly missed the entire race as I was on the phone to my wife.

I seemed to do even more talking than previous years and have made even more new friends. Roll on 2009.

Abigail Williams is Not a Name for a Black Metal Band...

...or at least that's what I thought until just now when I looked them up with google to find a link for this blog post. It appears that Abigail Williams was one of the foremost accusers in the Salem witch trials of 1692.

Abigail Williams are also a surprisingly good Black Metal band. I thought I'd passed through my black metal phase a while ago, but these have a bit of an extreme metal edge (think Dark Tranquillity, Arch Enemy) which is really my thing at the moment. The first mini album Legend is like early Cradle of Filth (when they were good) and the new release, In The Shadow of A Thousand Suns, could not sound much more like Emperor if they tried. I love it. Give it a try.

Marauder File Viewer 0.0.0.2

Download


You can download the latest version of the Marauder File Viewer here. I have implemented the following features since the last version:

  • RDF layouts
  • Saving and opening of projects
  • Plugins

It is now possible to develop plugins for the Marauder File Viewer by implementing a few small interfaces. If you would like details or have comments, please email me: paul.grenyer@gmail.com.

I'm working on searching and layout manipulation for fixed length file layouts next.

Sunday, 26 October 2008

Marauder File Viewer

Download


I've been talking about rewriting the File Viewer application I developed at Communisis back in the early naughties for some time now. It took a while for me to find a solution for opening very large files (>20GB) that I liked and a virtual grid that would allow me to view them.

After being (almost) forced to learn Java I thought it might hold the key. It can certainly handle the large files easily enough and JTable is certainly virtual enough to view them. I got quite a long way down the Java route before I decided Swing didn't give me the most aesthetic of GUIs and layout managers were too much like hard work (I've since got to grips with layout managers and changed my mind about them to some extent).

I started looking around for a virtual grid for C#. I already knew that C# could handle the file sizes without any problem from the testing I'd done a few years back. It was pointed out to me that the DataGrid has a virtual mode and a little bit of playing about soon showed me that it was ideal for the task. Moving to C# would loose some of the platform independence I've always strived for, but the better looking GUI and the interest shown by some people who might actually use it in a C# version were overwhelming.

I ported my MVC design directly to C# from Java taking advantage of some of the better features in C#, such as properties and events and I now have a working prototype that allows the user to open and view fixed length record files using an xml layout to describe the fields:
<layout>
<field name="Id" length="20">
<field name="Number" length="20">
<field name="Add1" length="20">
<field name="Add2" length="20">
<field name="Add3" length="20">
<field name="Postcode" length="20">
<field name="CR" length="1">
</field>

This is the current limit of the features. There is no way of saving or reloading projects (a project consists of a layout and datafile), no search or reporting and no way of creating or modifying layouts. This is strictly a prototype to prove the concept.

Marauder File Viewer can be download here (You'll need .Net 2 if you don't already have it). After unzipping double click FileViewer.Exe to run file viewer. To test it:
  1. Go to the Help menu and select Create Test Files to create a set of three test files and a layout file in the same location as the exe.
  2. Go to the File menu and select New Project.
  3. Double click the Fixed Length icon from the New Project dialog.
  4. Click the first browse button and navigate to test1.txt to set the file.
  5. Click the second browse button and navigate to lay.xml to set the layout.
  6. Click create to load the file and layout.
  7. Repeat steps 2 to 6 for test2.txt and test3.txt.

Marauder File Viewer

You can now use the tabs to switch between the test files and the vertical scroll bars to scroll through their content. The Marauder File Viewer will work with any fixed length record text file and any xml layout that uses the format shown above.

The next steps in development will be:
  1. Support for RDF layouts
  2. Allow the saving and opening of projects.
  3. Searching
  4. Fixed length record file layout creator and modifier
  5. Further development plugin facility to allow other file types to be viewed

Thursday, 23 October 2008

Byfords

We're made it to one year! It's been interesting a long the way, but we're here and happy!

Charlotte and I celebrated our first wedding anniversary this week. As a surprise I booked us into Byfords Posh B&B. Their rooms are very nicely done out, they have a full wet-room bathroom and the food and service are excellent. I'd recommend Byfords to anyone....

Sunday, 19 October 2008

Boiler Plating Database Resource Cleanup

I've been using Java for nearly twelve months now and I am finding that I like it. There are only two things that I have discovered so far that make make me wonder what the creators of Java were thinking: exception handling and layout managers. I'll cover layout managers in a later article.

Java is a garbage collected language. Which means that, most of the time, you don't have to worry how the memory previously used by dead objects is cleaned up. To me garbage collection has always felt a bit like a knee jerk reaction for people who can't use smart pointers properly in C++ and C programmers who must pay very close attention to the points at which they release memory allocated to the heap. If garbage collection is meant to help you clean up memory, why hasn't something been developed to help objects release resources? Java has finalizers, but as Joshua Bloch points out in Effective Java finalizers cannot be relied upon. Proper cleanup of resources is left to the developer whose only real friend is finally.

In this article I'll look briefly at the vast amount of exception handling code that must be written to cleanly close result set, statement and connection objects when accessing a database and then more in depth at one possible method of boiler plating it.

Read more.

Togo's Revenge

We went again yesterday. The manageress was in her usual rude state and refused point blank to give Charlotte a glass of tap water, stating that she'd have to get bottled water and they couldn't give her tap water as they didn't have a tap, despite us spending over £10. Charlotte argued that it's illegal not to give tap water on request and eventually a glass of water did appear. This upset one of their staff so much that she (not the manageress) came up and apologised to us later on, despite the fact it was absolutely no fault of her own.

I think this may well be the last nail in the coffin now.

ACCU Conference 2009 Proposal (3)

Title: Boiler Plating Database Resource Cleanup

Type: Case study

Duration: 45 min

Speaker: Paul Grenyer

Speaker biography: Paul has been programming in one form or another for over 20 years. After several years using C++ and a brief period using C#, Paul has now ended up somewhere he hoped he'd never be, programming in Java, and finding he really quite likes it. After time in industries such as marking machinery, direct mail, mobile phones, investment banking and Internet TV, Paul is currently working for an exciting new insurance industry based startup in Norwich. He has been an ACCU member since 2001, a regular publications contributor (including the new Desert Island Books column), creator of the mentored developers and a committee member for most of that time. When he's not programming or getting used to married life and being a step parent, Paul thoroughly enjoys science fiction, heavy metal and cycling.


I've been using Java for nearly twelve months now and I am finding that I like it. There are only two things that I have discovered so far that make make me wonder what the creators of Java were thinking: exception handling and layout managers. I'll cover layout managers in a later article.

Java is a garbage collected language. If garbage collection is meant to help you clean up memory, why hasn't something been developed to help objects release resources? Java has finalizers, but as Joshua Bloch points out in Effective Java finalizers cannot be relied upon. Proper cleanup of resources is left to the developer whose only real friend is finally.

In languages like C# the IDisposable interface can be used to aid cleanup. The IDisposable interface has a single method called Dispose. All of an object's cleanup code should be placed in this method and calling the method manually or via using ensures resources are released. The draw back is that even IDisposable requires the client code to to use it. There is nothing like this available in Java, but I have an even better solution which takes away the dependence on a classes user to do any cleaup.

In this presentation I'll look briefly at the vast amount of exception handling code that must be written to cleanly close result set, statement and connection objects when accessing a database and then more in depth at one possible method of boiler plating it.

Saturday, 18 October 2008

How to Loose friends and Alienate People

I quite like Simon Pegg. I have some fond memories of watching Spaced with a friend of mine in the early hours of the morning following a night out at a club. I've never really been a fanatic though. I haven't watch Shawn of the Dead all the way through yet and I only watched Hot Fuzz recently.

It could probably be argued that I don't have a lot to learn from How to Loose Friends and Alienate People, but Charlotte was keen to go and we both enjoyed it. It was dire in places, but for the most part it was very good. The film exposes the vast cultural difference between the US and the UK in a very funny way and Kirsten Dunst always captures my heart in that classic girl next door way (my wife always says that I married the girl next door, even though it was more like the girl one hundred yards up the road, turn left and then fifty yards on the right). With a soppy ending seeing Pegg get the girl he really wants and the dry humour there's something for everyone, even a sci-fi reference or two.

Friday, 10 October 2008

The Paradox of Togo's (Norwich)

Since we met, my wife and I have been having lunch at Togo's on the rare occasions that we're in the city at lunch time. I really don't know why we keep going back there. Although the food is very good, especially the cheese cake, the prices are unreasonably high, the service is poor, the couple running the White Lion Street branch are obnoxious and the sign dictating the rules for the upper seating area, including no picnicking, respect and no unaccompanied minors, is less than inviting if not arrogant, rude and hostile. It makes me wonder if they've twigged that they're there for the benefit of the customers, rather than the other way around. Maybe that's why it's rarely full and there''s always a spare table.

I imagine we'll keep going.

Sunday, 28 September 2008

Summer's End Festival 2008

On Friday I went to the Summer's End festival in Lydney. It's a 500 mile round trip from Norwich as was well worth every mile, even though the traffic on the way over was dreadful.

Lydney is a nice quiet little place, except for the boy racers, but then every small town has those. The night got off to a good start with a reasonable curry, but then we were left waiting outside the venue for nearly an hour. We got in at 8pm and the organisers were still setting up. At least various members of both bands were wandering around in the crowd and Damian Wilson even came and said hello.

Seasons End came on nearly an hour later than originally advertised. I've seen them live twice before and they're always brilliant. It's just a shame it's not reflected on their debut album. They were absolutely incredible on this occasion, especially given the dreadful PA. Their new concept album is out before the end of the year and they played at least two new tracks from it. I'm not a fan of hearing new music live, but these two tracks were incredible. Their new album is certainly one to watch out for and hopefully they'll capture their live sound.

Threshold cannot help but be brilliant. There's no other way to put. They were also considerably late to stage, but still played a full two hour set. I've seen them twice before and am now resigned to the fact that they'll never play my favorite song, Choices, live. They've opened with Slipstream the last two times I've seen them and that song has got to come a close second. I'm not a fan of the early (pre-clone) stuff, but the tracks from that era they played were enough for me to get Wounded Land and Extinct Instinct out the following day. It is just like watching your uncles band as they're all in their early 40s, but I'll happily go and see them again and again. A special mention should go to the drummer who dislocated his shoulder the week before and was told not to think about playing the drums for at least three weeks. I was glad he didn't listen.....

Tuesday, 23 September 2008

Slipknot Shouldn't Be This Good

I always thought I was genetically programmed not to like Slipknot. I thought they were for kids, all gimmick and, believe it or not, too noisy. I saw them in Birmingham coheadlining with Slayer (I went to see slayer) a few years ago. As preparation I bought Vol.3: The Subliminal Verses and really got into it, especially Duality, but it was pretty much a passing phase, although they were very good with Slayer and I still enjoy listening to the album.

A few weeks ago their third album, All Hope Is Gone, came out. It's incredible. A real step forward in maturity and musicianship (yes, I am talking about Slipknot). Not only that, but I really like the songs. Who'd have thought they'd use acoustic guitars and harmonies. It's just shame their London shows have sold out already...

Sunday, 14 September 2008

ACCU Conference 2009 Proposal (2)

Title: MVC in practice - A Beginners Guide to Model View Controller

Type: Case study

Duration: 45 min

Speaker: Paul Grenyer

Speaker biography: Paul has been programming in one form or another for over 20 years. After several years using C++ and a brief period using C#, Paul has now ended up somewhere he hoped he'd never be, programming in Java, and finding he really quite likes it. After time in industries such as marking machinery, direct mail, mobile phones, investment banking and Internet TV, Paul is currently working for an exciting new insurance industry based startup in Norwich. He has been an ACCU member since 2001, a regular publications contributor (including the new Desert Island Books column), creator of the mentored developers and a committee member for most of that time. When he's not programming or getting used to married life and being a step parent, Paul thoroughly enjoys science fiction, heavy metal and cycling.


In this session I am going to describe a real problem I had and demonstrate how I solved it using the model View Controller Pattern. I'll describe two versions of the pattern and the compare the advantages and disadvantages of both, before concentrating on the mediator version of the pattern.

I'll look at the library and language features that can be used to implement MVC available in both Java and C#. Once the model, the most important part of the pattern, is implemented the rest of the pattern comes together quite easily. I'll explain the implementation of the model that solved my problem and show how important unit tests are, especially for the model, and how to implement them. Finally I'll look at the implementation of the controller and a couple of views. Examples will be in both Java and C#, but no prior knowledge of the languages is required to understand the pattern.

Tuesday, 9 September 2008

Model View Controller

In Patterns of Enterprise Application Architecture [PEAA] Martin Fowler tells us that the Model View Controller (MVC) splits user interface interaction into three distinct roles:
  • Model – The model holds and manipulates domain data (sometimes called business logic or the back end).

  • View – A view renders some or all of the data contained within the model.

  • Controller – The controller takes input from the user and uses it to update the model and to determine when to redraw the view(s).

MVC is all about separating concerns. The model and views separate the data from the views and the controller and the view separate user input from the views. Another version of the MVC pattern employs the controller as a mediator between the views and model. The controller still takes user input, but now it passes it on to model. It also passes commands from the view to the model and takes events from the model and passes them on to the view. This version provides greater separation as the model and view no longer need to know about each other to communicate.

In this article I am going to describe a real problem I had and demonstrate how I solved it in Java with MVC. I assume familiarity with both Java 6 and Swing. It is very important to implement MVC carefully with a good set of tests.
Read More

Monday, 1 September 2008

ACCU Conference 2009 Proposal (1)

Title: Extending Liquid Office: A Quick Guide to Java Mocking, JavaScript, AXIS, SOAP and Testing

Type: Case study

Duration: 90 min

Speaker: Paul Grenyer

Speaker biography: Paul has been programming in one form or another
for over 20 years. After several years using C++ and a brief period
using C#, Paul has now ended up somewhere he hoped he'd never be,
programming in Java, and finding he really quite likes it. After time
in industries such as marking machinery, direct mail, mobile phones,
investment banking and Internet TV, Paul is currently working for an
exciting new insurance industry based startup in Norwich. He has been
an ACCU member since 2001, a regular publications contributor
(including the new Desert Island Books column), creator of the
mentored developers and a committee member for most of that time. When
he's not programming or getting used to married life and being a step
parent, Paul thoroughly enjoys science fiction, heavy metal and
cycling.


Liquid Office is a work flow management system written predominantly
in Java, JSP and JavaScript by Cardiff who are now owned by Autonomy.
This presentation will give a brief introduction to Liquid Office, but
then turn to the details of how it can be extended using Java based
technologies which are easily transferred into other applications and
go far beyond the scope of Liquid Office.

Liquid Office processes can be scripted using BeanShell and custom
JARs. It also provides a rich library for talking to the work flow and
performing actions such as reading and writing process fields. In
order to until test custom JARs for liquid office a thin wrappers need
to be written around a few key objects in the library to allow
mocking out. I will look at some methods of doing this.

Almost all BeanShell scripting occurs on the server side. Client side
scripting must be written in JavaScript. This can be quite restrictive
and introduces some interesting versioning issues. I will look at
methods of getting round this, including how to generate JavaScript
soap clients.

Liquid Office runs on a TomCat server and uses AXIS to run web
services. The server configuration also allows custom web services to
be hosted. I will look at how to configure AXIS for custom web
services and various methods of automating the testing of custom web
services.

Friday, 22 August 2008

XML is not the build system you're looking for

Last night I attended a Skills Matter "In the Brain" session on Gant given by Russel Winder at their offices in London:

"I will be doing an "In the Brain" session on Gant (The Groovy way of scripting Ant tasks) on Thursday 2008-08-21 18:30. This will happen at Skills Matter, 1 Seckford Street, London EC1R 0BE, UK. The Skills Matter announcement is here.

"As part of this session I am going to undertake "The Gant Challenge". The idea is for people to bring small examples of Ant (or other) builds that really irritate them so we can create the Gant version live and show that Gant can do the business where Ant often cannot.

"If you are in the area then, feel free to drop by -- though you need to register beforehand so some forethought is needed. This is planned as a 90min session after which things move to a local hostelry. "

90 minutes soon became 120, but it was very informative and very interesting. The basic gist is that, although Ant is a powerful build system, XML is not the best way of specifying the steps in a build process. Chiefly because it is verbose, not human readable as a programming language can be and it's difficult to do common programming tasks such as if, for, foreach, switch, etc.

Gant is written in Groovy and sits on top of Ant giving an extra layer of indirection to existing Ant tasks. I had only heard of Groovy before and never used it, so Russel spent a little time showing me, and the others, simple Groovy programs and how to run them. I was also introduced to a new concept known as closures.

Gant build scripts are also Groovy programs and bring with them all the power of the Groovy programming language, so it is possible to do just about anything and have a more readable, less verbose methos of describing buils steps:


includeTargets << gant.targets.Clean
cleanPattern << [ '**/*~' , '**/*.bak' ]
cleanDirectory << 'build'

target ( stuff : 'A target to do some stuff.' ) {
println ( 'Stuff' )
depends ( clean )
echo ( message : 'A default message from Ant.' )
otherStuff ( )
}

target ( otherStuff : 'A target to do some other stuff' ) {
println ( 'OtherStuff' )
echo ( message : 'Another message from Ant.' )
clean ( )
}

setDefaultTarget ( stuff )



This was all very attractive to me, despite needing to add yet another tool to our build environment installation. The only real snag is that currently, it appears, Gant does not support custom Ant tasks. So there is no way we could use it with Axis or Emma for example. Russel has asked me to make a Jira entry to this effect and I will later today.

Overall it was a very interesting, informative and enjoyable session. I always enjoy anything that Russel is involved in, he has a lot of Charisma. It was certainly worth the five hour round trip from Norwich for the evening.

Sunday, 29 June 2008

How to Setup and Test Axis with Tomcat to run Web Services

See also: http://ws.apache.org/axis/java/install.html.

Installation


1. Download and install Tomcat and verify it works (http://localhost:8080)
2. Download and unpack Axis to C:\tools.
3. Copy the directory $AXISDIR\ webapps\axis in $CATALINA_HOME/webapps.
4. Download xerces and extract xercesImpl.jar and xml-apis.jar to $AXISDIR\lib.
5. Downalod JavaBeans Activation Framework and extract activation.jar to $CATALINA_HOME\webapps\axis\WEB-INF\lib and to $AXISDIR\lib.
6. Download JavaMail and extract mail.jar to $CATALINA_HOME \webapps\axis\WEB-INF\lib and to $AXISDIR\lib.
7. Copy tools.jar (from $JAVA_SDK\lib) to $CATALINA_HOME\lib.
8. Set the following environment variables:

AXIS_HOME = $AXISDIR
XIS_LIB = %AXIS_HOME%\lib
AXISCLASSPATH = %AXIS_LIB%;%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar;%AXIS_HOME%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\activation.jar; %AXIS_LIB%\mail.jar

9. Check the Axis Happiness Page: http://localhost:8080/axis/happyaxis.jsp. There should not be any warnings in the Needed Components section.

10. Test the command line admin tool. Open a command prompt and type:

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient list

Testing: Simple A Web Service


To test that Axis is working correctly with Tomcat for simple web services:

1. Create Test.jws in $CATALINA_HOME\webapps\axis:
// Test.jws

public class Test
{
public String echoString(String test)
{
return test;
}

public String stapleString(String test1, String test2)
{
return test1 + " : " + test2;
}
}

2. Build and execute the following Java program:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class TestClient
{
public static void main(String[] args)
{
try
{
String endpoint = "http://localhost:8080/axis/Test.jws";
String ret = "";

Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );

call.setOperationName("echoString");
ret = (String) call.invoke( new Object[] { "Hello!" } );
System.out.println("Sent 'Hello!' to echoString, got '" + ret + "'");

call.setOperationName("stapleString");
ret = (String) call.invoke( new Object[] { "One","Two" } );
System.out.println("Sent 'One' and 'Two' to stapleString, got '" + ret + "'");

}
catch (Exception e)
{
System.err.println(e.toString());
}
}
}

The output should be:
Sent 'Hello!' to echoString, got 'Hello!'
Sent 'One' and 'Two' to stapleString, got 'One : Two'

Testing: Deploying


1. Create Test.class from the following Test.java:

package onjava;

public class Test
{
public String echoString(String test)
{
return test;
}

public String stapleString(String test1, String test2)
{
return test1 + " : " + test2;
}
}

2. Copy Test.class to $CATALINA_HOME\webapps\axis\WEB-INF\classes\onjava.
3. Create the following deploy.wsdd file:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="Test" provider="java:RPC">
<parameter name="allowedMethods" value="echoString,stapleString"/>
<parameter name="enableRemoteAdmin" value="false"/>
<parameter name="className" value="onjava.Test"/>
</service>
</deployment>


4. Deploy the service:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

Expected output:
Processing file deploy.wsdd
<Admin>Done processing</Admin>

5. Check that the Test service appears in the service list: http://localhost:8080/axis/servlet/AxisServlet
6. Build and execute the following Java program to test the serivce:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class TestClient
{
public static void main(String[] args)
{
try
{
String endpoint = "http://localhost:8080/axis/services/Test";
String ret = "";

Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );

call.setOperationName("echoString");
ret = (String) call.invoke( new Object[] { "Hello!" } );
System.out.println("Sent 'Hello!' to echoString, got '" + ret + "'");

call.setOperationName("stapleString");
ret = (String) call.invoke( new Object[] { "One","Two" } );
System.out.println("Sent 'One' and 'Two' to stapleString, got '" + ret + "'");

}
catch (Exception e)
{
System.err.println(e.toString());
}
}
}


The output should be:
Sent 'Hello!' to echoString, got 'Hello!'
Sent 'One' and 'Two' to stapleString, got 'One : Two'

7. The Test.class file can also be archived in a JAR. To be found, the JAR must be copied to $CATALINA_HOME\webapps\axis\WEB-INF\lib and Tomcat restarted.

Double Disappointment

Continuing our love of live Comedy, Charlotte and I went to see Double Header at the Norwich Play House last night:

"Hattie Hayridge and Norman Lovett both starred as the face of the computer in the incredibly popular and cult TV series Red Dwarf.

"2008 is the twentieth anniversary of the program hitting the UK television screens; in celebration of this Hattie and Norman come together on stage for the very first time, creating a unique comedy evening. Although the show will feature their own inimitable stand up routines, they will also discuss their association with the poplar TV show, and fans will be able to ask them questions related everything that is Red Dwarf."

With the exception of a few brief moments, neither comic actually had anything funny to say individually. Normal Lovett was obsessed with Football, that turned off at least half the audience, and polythene bags.

It got a lot better when they were both on stage together, although Norman did dominate rather and Hattie seemed happy to let him. They were both doing their individual Holly styles throughout the show and unfortunately I just don't think it works outside of Red Dwarf. They certainly don't stand-up (excuse the pun) next to the modern comics.

Sunday, 22 June 2008

Mindcrime

I've been a Queensryche fan since 1991 when a pen pal of mine from the Netherlands sent me a tape of Empire. Back then all the bands for me that came from Seatle were either Heart or Grunge, but I loved Empire.

I read Raw Magazine back in those days before it went all Indie and all but disappeared. It spoke of the amazing Operation Mindcrime concept album and I finally found a pen pal with it and received another tape. I loved it! I quickly collected all of Queensryche's albums and have bought them all (with the exception of live albums and greatest hits) since. It's just a shame they haven't done a decent album since the follow up to Empire, Promised Land.

In 1995 I was seeing a girl in Bradford and much to my dismay, Queensryche played the week before I went to visit her, so I missed them. I finally got to see them on either the Q2K or Tribe tour, I can't remember which. I was quite disappointed with the run of poor albums, but wanted to see them anyway. They absolutely blew me away and they played so much from Operation Mindcrime.

So, now it's June 2008 and Queensryche have release Operation Mindcrime 2, which I thought was rubbish and are playing both albums all the way through on tour. Not only that, they're playing in Norwich! When Andy and I got there the queue was tiny and even as the band hit the stage the place was nowhere near capacity, but gigs are better like that. You can get closer to the band and we did get very close.

The band brought a full theatrical show. The original Operation Mindcrime was superb. They played it brilliantly. I sang until my throat was sore and then kept singing anyway. It may be twenty years old, but it's just as good today as when I first heard it in the early 90s. The second half was the second Operation Mindcrime album, which was also played very well, but I just can't get excited about it. Still, it was better than expected.

The encore almost couldn't have been better. Three tracks from Empire: Another Rainy Night, Empire and Silent Lucidity. Superb!

Queensryche are out of my system now. I don't think I'd see them again unless they do Operation Mindcrime all the way through again, play significant parts of Empire or Promised Land or release a superb album of new material (unlikely).

Altered Carbon

I was introduced to Richard Morgan by my boss, who is another Alistair Reynolds fan. Altered Carbon is part hard sci-fi and part detective novel.

I was initially quite surprised at the amount of graphic sex and violence and the crude style took some real getting used to. The story is entirely linear and entirely from the point of view of the main character, Kovacs. What makes it a real page turner is that there is so much going on and very little explained until the end where all the events are slotted together. If you hate not knowing things, this book will keep you going to find out.

The core sci-fi concept that the book relies on is the idea that a stack embedded in the back of your neck allows you to be downloaded into a new body, called a sleeve, if you die.

Once I did get used to the style I thoroughly enjoyed this book. I would recommend it and I am intending to read other books by Richard Morgan, but not before I've reread some Alistair Reynolds.

Sunday, 15 June 2008

Java Web Start

Java. I spent years avoiding it. I felt it was inferior to the power of C++. I thought it was slow, clunky, the GUI was rubbish and that garbage collection was for wimps who did not know how to clean up after themselves or use smart pointers. Ok, so we all know I was wrong. And life being the way it is, being so out spoken about Java was sure to come and bite me and it did.

Since December I have been writing Java as part of my day job and I found I liked it so much I've even started using it for some of my own projects. I do not even miss Microsoft's visual studio. I have become very attached to Eclipse and having code checked in real time, therefore negating a build stage, is very useful.

I have been so busy writing Java (and editing my new CVu column Desert Island Books) that I have not written an article on anything else for quite some time. The editor of Overload has been nagging me for material, as has the new publications officer. I have also seen a few comments here and there about how poorly Java is served by the ACCU at present, but then with a strong history in C and C++ this is to be expected. However, my plan here is to redress the balance a little.

I'm spending most of my free time (not that I have a lot these days) working on a file viewer application that allows fixed length record files in excess of 4GB to be viewed without loading the entire file into memory. I wrote one of these in C++ (MFC) for a company I worked for a number of years ago. It worked well, but was a bit clunky and the user interface looked rubbish. I think they are still using it, but I'm not sure. I have had a few failed attempts to write it in C# recently, but it was not until I had a go in Java with its JTable and TableModel classes that I really made some progress.

The file viewer is a little way off being finished, but I am starting to think about package and deployment options. I want it to be easy and one of the application I use in my day job uses Java Web Start and it works really nicely. Sun describe Java Web Start as:

Using Java Web Start technology, standalone Java software applications can be deployed with a single click over the network. Java Web Start ensures the most current version of the application will be deployed, as well as the correct version of the Java Runtime Environment (JRE).

It sounds ideal for a constantly developing application that may be used by people all over the world on different operating systems.

As I sit down to write this article I have done no more that briefly read the Java Web Start documentation (so much for writing about what I know about – again!). I am intending to write an article about how to create applications and deploy them using web start by investigating it myself and writing down the steps as I go. I'll assume a reasonable familiarity with Java and Swing.

Read More

Shappi Khosandi

Last night Charlotte and I had another very pleasant meal at Pizza express in Norwich followed by the first of two Norwich Play House comedy evenings we have booked.

A few months ago I took a risk and dragged Charlotte along to see Lucy Porter. I've seen and loved Lucy Porter before, but I wasn't sure if Charlotte would like it. She loved it and said she wanted to do more comedy. That suited me just fine.

When I read about Shappi Khorsandi (this website, quoted on the flyer, doesn't appear to be there yet) in the Norwich Play House what's on guide a female, Iranian comedian who was a bit of a looker really appealed. So we both decided to take a chance.

She was supported by her husband Kristian Riemer. Both were hilarious and more than a little risqué! The quote from Shappi that sticks in my head is “American's still don't know the difference between Iran and Iraq. We're the ones with weapons of mass destruction.”

Shappi also appears on Radio 4 comedy shows. If you get the chance to see her I highly recommend it.

Thursday, 8 May 2008

Music

Music is a very personal thing. It's so personal and people feel so strongly about it that I'm surprised it hasn't started wars. To me it's way more important than any religion, but not worth fighting over.

Most people seem to have me down as either a heavy metal nut or goth. And I'd be lying if I said I didn't adore heavy metal, especially progressive metal at the moment. I'd also be lying if I said I didn't like a lot of goth music. I like the clothes too and regularly attend the October Whitby Gothic Weekend. People seem keaner to latch on to the idea I may be a goth, probably because goths appear more interesting than metallers, are perceived as being weird and people generally understand them less.

People also seem to have the impression that people who like heavy metal only listen to the really heavy stuff, always listen to it very loudly and never listen to anything else. This of course is a long way from being true.

My passion is rock music, which includes all kinds of metal and goth. It's fairly safe to say that, with the exclusion of the pop they play on Radio 2, I don't listen to much else. But there's such a range to listen too. This morning, for example, I started off with some Deicide, which is some pretty heavy death metal and then moved on to some early Porcupine Tree which is rock based, progressive and quite atmospheric. Not heavy at all.

My favorite band by far at the moment is Threshold. But I keep coming back to old favorites like (early: anything up to Afraid of Sunlight) Marillion, (early: anything up to the incredible Crimson Idol) WASP and Pink Floyd. Can anyone play guitar as well as David Gilmour?

Sunday, 13 April 2008

Which idiot said exercise was good for me?

I’ve finally done what I’ve been saying I’d do since I moved to London in September 2006. I am cycling to work! My trip to work in Norwich is somewhat further than it would have been from my flat in Wapping to Canary Wharf.

One of the guys from work lives near me and also cycles in with me. The route via has house is about 5km and has quite a few steep ups and downs. The route direct from mine is slightly further but much steadier.

So either way I’m doing about 50km (31 miles) a week. It’s meant to get easier and make me feel better, but I think I’m just getting quicker and I’m really glad I bought the wet weather gear!

Now I just need to weight loss…..

Sunday, 6 April 2008

ACCU Conference 2008

I didn't make the ACCU Conference this year for the first time since 2002. It appears that there has been some speculation as to my real reasons for not attending. As must as I would love to fuel the conspiracies, I'm afraid there's no big secret.

I got married in October and shortly after moved from contracting in London back to a permanent job in Norwich. I love my wife very much and am loathed to leave her at the best of times. Also I took a sixty percent pay cut to come back to Norwich, which means things are more difficult than they were. These two factors meant that I was unable to attend.

Things should be brighter next year and I hope to attend again.

Wednesday, 5 March 2008

Burn The Witch

So the Stone Gods EP "Burn The Witch" is now out. It’s a lot like their live performance. The first track, Burn The Witch, is excellent. The rest is just filler. A poor imitation of what the darkness were. I think a lot of the irony is gone and things are far more serious now.

Still this is only four tracks and the band need to find their feet. I hated Black Shuck and Get Your Hands Off My Woman the first time I heard them, but kept on listening as Growing On Me, I Believe In A Thing Called Love and Love IS Only A Feeling are excellent tracks.

I really do like the song Burn The Witch. The first half of the song is all original, but the second half rips off a few Metallica and Megadeth riffs. Still very good. And the idea of singing about burning witches in 2008 is just brilliant.

Monday, 11 February 2008

Not The Darkness

I’ve been a big Darkness fan since a friend of mine told me how good Permission to Land was and I went out and bought it. I was lucky enough to see them at the Manchester Evening News Arena in February 2006 just after their second album One Way Ticket to Hell came out. Then Justin Hawkins decided he couldn’t handle the Rock ‘n’ Roll lifestyle anymore and left the band.

Strictly speaking the Darkness don’t exist anymore. The remaining members got a new bassist (as the bassist took on singing and guitar duties) and they’re now called the Stone Gods. I couldn’t believe my luck when I discovered they were playing the Norwich waterfront and there were still tickets available. So we went hoping for a few darkness numbers.

We didn’t even get one. In fact the best song all night was probably the one they opened with. So all rather disappointing. As a band they played well and the songs showed promise. I just didn’t get the Darkness songs I wanted. The Stone Gods have got an EP coming out in February. I’m looking forward to it.

Sweeney Todd

Charlotte and I went to see Sweeney Todd a couple 0f weeks ago. It was Charlotte’s first time in the Gallery and she loved it. It’s expensive, but I like the better level of service and not having to fight with the masses.

She also loved the movie. I, however, am not a fan of musicals, with the exception of the Sound of Music and Moulin Rouge, and didn’t enjoy it half as much. I like a good horror and the gore was excellent. Looking at Helena Bonham Carter for a few hours did go some way towards making up for it though.

If you like musicals it’s a great film. If not, I wouldn’t bother….

Saturday, 19 January 2008

St. Trinian's

Charlotte and I went to see the new St Trinian's film at the Hollywood cinema at Anglia Square in Norwich on Wednesday night. The last time I was there it had just become a multiscreen cinema and was owned by Odeon. I can’t remember what I went to see but I have a distinct memory of someone saying Reservoir Dogs was on in one of the other screens and there was a bloody torture scene.

From what we saw the Hollywood cinema is a hole. We were in the tiny screen 4. It was cold and there appeared to be no surround sound.

I’d like to say the film was good clean fun, but there was nothing clean about it. It was a lot of fun and obviously shouldn’t be taken seriously. I was particularly amused by a group of goth girls who preferred to be called Emo, but there’s no accounting for taste!

Tuesday, 8 January 2008

Desert Island Books

Desert Island Books is a new series I'm writing for the ACCU:

Desert Island Disks (http://www.bbc.co.uk/radio4/factual/desertislanddiscs.shtml) is one of Radio 4's most popular and enduring programmes. The format is simple: each week a guest is invited to choose the eight records they would take with them to a desert island.

I've been thinking for a while that it would be entertaining to get ACCU members to choose their Desert Island Books. The format will be slightly different from the Radio 4 show. Members will choose about 5 books, one of which must be a novel, and up to two albums. The programming books must have made a big impact on their programming life or be ones that they would take to a desert island. The inclusion of a novel and a couple albums will also help us to learn a little more about the person. The ACCU has some amazing personalities and I'm sure we only scratch the surface most of the time.

Each issue of CVu will have someone different. If you would like to share your Desert Island Books please email me.

Paul Grenyer

I thought this was going to be easy as I had no doubt what my first main book would be, but then it got harder. A lot harder. Do I choose a design patterns book? What about a process book? Or a technique book? Or more straight language books? This is how I got on:

The C++ Standard Library: A Tutorial and Reference
by Nicolai M. Josuttis
Addison Wesley
ISBN-10: 0201379260
ISBN-13: 978-0201379266

This book more than any other changed my career for the better. I was fresh out of university, had my first C++ job and only knew a little C. A number of ACCUers spear headed by Phil Nash and John Crickett were guiding me to better things. Phil Nash in particular persuaded me to invest in better books. When I got Josuttis I read it pretty much cover to cover. It's the book I go back to the most (when I'm doing C++) and I wouldn't be without it. Reading this book and learning about the C++ standard library allowed me to be the only candidate to complete a programming test for new position I went for and they gave me the job off the back of that.

C++ Templates: The Complete Guide
by David Vandevoorde, Nicolai M. Josuttis
Addison Wesley
ISBN-10: 0201734842
ISBN-13: 978-0201734843

This is where it gets difficult. For my second choice I couldn't decide between Scott Meyers' Effective Series, Herb Sutter's Exceptional Series and Vandevoorde and Josuttis' templates book. The Effectives and Exceptionals have no doubt made me a much better C++ programmer, but I mostly absorbed the information as I read and don't gt back to them so often. If I was on a desert island I'd want the templates book as I love the power that templates give C++ and, when programming in C++, constantly go back to the templates book for reference. That's the one I'd want on a desert island.

Design patterns : elements of reusable object-oriented software
by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Addison Wesley
ISBN-10: 0201633612
ISBN-13: 978-0201633610

There are a number of technique books that I could chosen. Such as Test Driven Development by Kent Beck, Refactoring by Martin Fowler or Working with Legacy Code by Micheal Feathers. However, these books confirmed stuff I'd mostly worked out for myself and I don't generally go back to them unless I want to look up the name of something. Although I never had the eureka moment with patterns than many others have described, the Gang of Four is a book I go back to again and again and really should be on my desert island book shelf.

Extreme Programming Explained: Embrace Change
by Kent Beck, Cynthia Andres
Addison Wesley
Language English
ISBN-10: 0321278658
ISBN-13: 978-0321278654

The final book is probably the most difficult book of all to choose. I've learnt so much from a few process and practice books including the Pragmatic Programmer (series) by Andrew Hunt and David Thomas, The Practice of Programming by Brian W. Kernighan and Rob Pike and Lean Software Development by Mary Poppendieck and Tom Poppendieck. They all have good common sense advice and I've learnt new stuff from them. However the book that has had the most impact on my career and the quality of my development skills was Extreme Programming by Kent Beck. It could be argued that a book about making teams work better together isn't much use when you're on your own on a desert island, but there is a lot that can be applied even by lone programmers.

Redemption Ark
by Alastair Reynolds
Gollancz; New Ed edition
ISBN-10: 0575073845
ISBN-13: 978-0575073845

I only discovered Alastair Reynolds about eighteen months ago and I'm hooked. I've always loved science fiction (and a little bit of fantasy). Reynolds “space opera” is dark, at times addictively complex and beats the likes of Arthur C. Clarke, Asimov and Tolkien hands down. I'd take all of his books given the chance, but Redemption Ark is the one I've enjoyed the most so far.

The Crimson Idol by WASP
Misplaced Childhood by Marillion

Choosing my favorite two albums from the hundreds (1000+) that I own was easy. Had I had to choose one I'd have had a serious problem (but it probably would have been misplaced childhood). I discovered both Marillion and WASP in my late teens and listened and still listen to these two albums over and over. Specifying just one thing that makes either of these albums great is near impossible. They both have superb lyrical content. Fish and Blackie Lawless excel themselves as both describe deep emotional pain they've been through. The guitar and drum work on the Crimson Idol is something else and includes the best guitar solo in the world. Misplaced Childhood incorporates superb guitar, keyboard and vocals and take you through emotional highs and lows.

Next issue: Jez Higgins picks his desert island books.

Friday, 4 January 2008

Embracing Agile

Embracing Agile

I started eXtreme programming back in 2003 with the usual manager skepticism, but I had a small team and we demonstrated results very quickly and were allowed to continue. After I left Communisis I didn’t have much of an opportunity practice eXtreme techniques again until I worked with Allan Kelly (Allan's blog) in the summer of 2007.

Allan is a bit of an Agile nut and I expected to feel a lot like Trent Reznor learning my trade under the watchful eye of Al Jourgensen. Unfortunalty I only got to work with Allan for a few weeks. However, in that time I got up to speed by reading Lean Software Practices and watching Allen in action. At the end I felt like Reznor ready to take on the (industrial) world.

It is now early 2008 and I have joined another company and had no trouble convincing my new boss of the advantages of agile development. In fact he has fully embraced the idea of stories and cards. We have our first stories and a set of blue-white-red cards pinned to a white board. I’m looking forward to seeing how it can work for us and enjoying knowing where we are in the project and we are already able to communicate it easily to other managers.

We’re ready to go.