World Rowing Rankings

About this time last year I put live a website I had been working on but haven't really written about it. The site - www.worldrowingrankings.com - was mostly created in the Christmas break last year and had a few aims, which I think I more or less reached.

The main aim was to investigate and use some technologies I had used in a previous job, namely Microsoft ASP.NET MVC with C# version 4. Whilst I had good experience with ASP.NET (aka WebForms) from when it was released by Microsoft in 2002 it was never really my favourite platform - the UI/state management was not quite that easy to use in terms of separating layers of functionality (i.e. data from UI). However, the ASP.NET MVC framework implements the model-view-controller pattern allowing you to implement that separation, as well as providing an easier testing framework. I had used this approach before and had done some work with the initial releases of Microsoft MVC. Whilst looking for a new position I thought it a good idea to produce some code using MVC. The project itself wasn't new to me – I had been working on a ranking system for rowing for a while (but using junior UK rowing) and already had a good database structure that I could re-use for international rowing.

I also was looking at hosting and choose the Amazon cloud (see previous articles at this time last year for setting up hosting) giving me the ability to investigate that as well as looking at search engine setup (Google WebMaster tools and Google Analytics).

The second aim was to try and produce a solid ranking system for international rowing that has a good chance of standing up to scrutiny as well as supporting rowing and possibly (eventually) encouraging participation in international regattas. Before the site went live last year a great deal of result simulations were done with the previous 10 years of international regatta results and then site has been running for the season just gone. My review of the positions in the ranking I believe are representative. FISA (the international governing body for rowing) don't have a definitive ranking for rowing, although they do produce one for the World Cups each year.

For those who don't know rowing there are 14 Olympic Rowing events and for each of these I have created a ranking. These should more or less follow positions within the World Rowing Championships – for which there are more ranking points available for. However, the ranking takes account of performances over the last eighteen or so months with more ranking points depending on

- The type of events (Olympics have more available than World Championships which have more available than the World Cup regattas)
-
The quality of those who race – not every nation turns up. Rowing is an expensive sport – event the top nations do not race at every event (let alone taking into account injury).
-
And how recent the event was (the latest World Champs/Olympics score more than the previous ones).

International rowing does not have a lot of events each year – three World Cups (at the moment all in Europe) and one World Championships (or Olympics in the Olympic year). And it is expensive to take part – rowing isn't football! So in order to allow the smaller nations to be part of the ranking the best World Cup performance is taken into account rather than all of them.

The lack of events is the one point that might lower the credibility of the ranking system as there is not a lot of data to use, and for the individual events the ranking should almost track the World Championship positions.

But as well as the individual rankings three composite rankings were created where the points for each nation in the individual rankings are summed together to create an Overall, Men's and Women's ranking. And another ranking was created for each regatta to calculate the best nation (based on points – not just in medals).

I've not had a lot of feedback but none of it was bad. The site doesn't get thousands of hits around each regatta (but it is in the hundreds). And I have over sixty followers on Twitter. Each regatta takes around four hours to process the results and it costs me a few hundred pounds in hosting charges to keep the site up each year (although having my own virtual server is useful – this blog is hosted on it), so I am going to keep the site in operation until at least the Olympics this year.

The rankings seem to have been used by Sky Sports on an article in July – although no reference was made to the site. But the rankings listed were exactly as they were at the time and they don't match the FISA final rankings for the World Cup.

In the future, I might try and launch a Fantasy Rowing game based on the ranking points that I have been working on and off for the last year – depends on time. At the moment I am building an email solution that will work with that site and the Amazon email functionality (Simple Email Service) and may well make the code to that available.

Young Rewired State

Last week I attended Young Rewired State – a week long event for young coders to “hack” government data.  Young Rewired StateFourteen groups across the country consisting of developers assisted by mentors created some sort of web site or application using at least one set of government data.

I was supposed to be mentoring at an event in Reading as QA Apprenticeships (my employer) were sponsoring the event. This didn’t come off, but I did attend the final afternoon – a show and tell event held at Microsoft in Victoria. Apart from the hassle of going into London on a hot day and the event going on a bit (there were lots of two and four minute presentations due to the number of people), I found some of the presentations showed some creativity and a few technically impressed.

The ones that stood out to me were:

Urbani – Pedestrian Heat Map

This was by a team in Guildford showing the busiest pedestrian areas in London. Promoted by the team for people to avoid the Olympics (interesting idea to concentrate on the negative!) but generally to allow people to get to where you want to go efficiently. I was unsure of this one as it had people transmit their locations using their mobile devices (the assumption being it would be anonymous) but I am sure that ways of approximating this information, e.g. mobile operator’s data for how many phones registered at each mast.

Not sure this team actually really used government data, but the heat maps looked interesting. I think that this app reached out to me because a visit to London can be quite stressful (it took me nearly an hour on the tube from Victoria to Paddington – could have walked it quicker!).

Train projects – Where’s my train? and TrainTrackr

These two projects were similar (but different) dealing with live information for train arrivals, departures and punctuality. The latter project uses the iPhones inbuilt location information to track your journey and the former tries to use the National Rail enquiries information. Visually they were great, although I’ve been a First Great Western train where on the seats with the small TV’s on the seat front had a train tracker (for the train your are on) which showed you where you were.

I like my stats – and am probably more of a “what happened” type of person rather than a “what’s happening now” – if the train I am on it late there is not a lot I can do about it. So I like to look back on how good or bad things were. Part of my research for mentoring at YRS was to look at the US government data (data.gov) – I started with the Wikipedia page for both data.gov and data.gov.uk. The US wiki page listed FlyOnTime.us which showed the statistics between two cities or certain flights using government data.

I think a couple of major points were made by the teams – firstly the definition of late used by the train operators may differ from what think late is. And secondly that the data from National Rail wasn’t that easy to use – I would have hoped that you could at least of got hold of train routes, timetables and exact arrival/departure times at each station. Some nice static data you can manipulate. But no, I looked – the Office of Rail Regulation gives access to statistics. But they are trends and calculated from the data. I couldn’t find it – although I’ll keep looking.


Where’s My Train won the “Best example of Coding prize” and TrainTrackr won the “Best Mobile prize” and Urbani the “Most Likely to be bought” prize.

I won’t call them negatives, more not totally positive points in my observance of the event.

There were a lot of Apple MacBook devices around being used for development. I’m probably a little biased having developed on Unix and Windows for all my working life, although I know of one friend who does all him development on Apple kit (although then hosted in a Linux environment). Maybe Apple should get into server technologies allowing you to build, test and host in the same environment.

You could see the talent on display – there were a number of very confident individuals presenting with thorough belief in their abilities and the code they have produced. But how do we get them into industry.

There are two points I can make here. Some of the youngsters I have trained in the QA apprenticeship and those on display at YRS the problem (and this is a good problem to have) is how to help these confident people on moving from the self taught programming skills to professionally deliver but at the same time handling the confidence that can sometimes come over as arrogance (believe me a problem levelled at me over the last 20 years!). Any sort of advice given can sometimes be seen as criticism.

Linking to this is my second point. QA and I were there to promote and discuss apprenticeships with those people attending. We offer software development apprenticeships to young people – to get them into the industry. QA gave a presentation that I think was very positive – we currently have vacancies with employers to fill for the group I am training starting next month. One point made was that going to university isn’t about getting a job – although, I know when I went to do a degree it was definitely to get a job. There was a little negative twitter reaction, I think mostly from the most confident developers. It could just be the word apprenticeship that is off putting to some of the talented developers – they want the big bucks and they want it now!

The point is how do we get these people into jobs? There was a judge who talked about start ups and private equity, and I have no doubt some of these developers could (and may) go down that route. One of my best friends started up a business whilst doing a degree (which I ended up working for) – and he took that risk and it worked for him (it doesn’t always). However, that route isn’t available for everyone. I wish I had an opportunity when I was younger, I think I had the abilities, but my finances didn’t allow me to take this route (and I possibly wasn’t experienced or brave enough).

The other options that I see are university, degree and a graduate programme (you don’t get a lot of software development training or experience on a computing degree), finding an employer who is willing to invest in that individual. Or via a route like a work based (i.e. employed) apprenticeship.

It was quite fun to watch some of these project presentations – a number were predictable (trains tracking, university searching, broadband availability, NHS, Solar) and some were unique (MoodMap, Lifestyle, Snackomics, Beachwall).  And the teams seemed to have worked hard (and have been pizza filled). As a C# developer and manager I would have liked to have seen more development on display, but quite difficult in a presentation of two minutes!

QA Apprenticeships

Wallingford Regatta 2011

Been a while since I wrote here – been bit busy, new job (at last), regatta (and follow up) and finishing off bits of DIY (that I’d being putting off) as well as a quick visit to Spain.

I should finish off the planning and outcome for Wallingford Regatta 2011.

Preparations went well - entries were lower than previous years but in line with expectations given the timing of the Royal Wedding and Easter. On the Friday before the regatta had our traditional round of golf, although this year only with the ex-Chairman and playing with his father at Frilford Heath which was a great day. Let the entries secretary watch the royal wedding (although she played at Frilford Heath the day later).

On Friday after golf we closed our internal race management system to changes (such as crew scratchings) to start the long process of final checks and printing off multitudes of race sheets for different staff throughout the course. The race sheets are essential to the running of the regatta – they contain the information for everyone involved with getting crews registered, on the water, to the start, attached, raced and results recorded. The sheets are used at registration, boating marshals, bank marshals, starter, umpires and the staff in the tower.

For the first regatta at Dorney we run the regatta as one “division” – a practice that has essentially changed for most regattas to run a complete competition cycle in the morning or afternoon. Whose idea this was I don’t know – I know as a regatta committee we suggested doing it without seeing it elsewhere. However, I can’t prove this – but we will take the credit anywhere.

Moving to a morning and afternoon division has a great extra benefit. Firstly, timetabling becoming easier (you only need to worry about finals in the morning clashing with heats at the start of the afternoon as no doubling up or boat sharing is allowed). Secondly, rowers aren’t waiting 10 hours from heat to final. It does mean that we have to redistribute race sheets twice throughout the day – but to help this we print out on different colour of paper, making it easier to simply replace them.

Excluding sheets going to bank marshals there are nine complete sets of race sheets, with bank marshals getting a more summarised (laminated) sheet with crew numbers and bow number colours.

Ok, that’s probably enough about our organisation beforehand. I spent around 3 hours on the Friday and 5 hours on the Saturday preparing the sheets

Onto race day – wind, more wind and yet more wind. The day didn’t start well, safety cover wasn’t in place so we couldn’t let the first crew’s boat until around 25 minutes before race time – this caused a small delay. Then there was some delay with the umpire launches. So after 30 minutes we were nearly 10 minutes late.

We had made the decision beforehand to start taking action when we get to 25 to 30 minutes late. This was done in order to make sure that we don’t sacrifice crews racing in the afternoon and thus try to bring the event back to on time in the morning.

The second decision that was made was to keep to multi-lane racing where we can, rather than moving to time trials. This was made as we got to delays of 30 minutes – I can’t say I agreed with the decision. If the weather was not a cross-wind then maybe, but it was clear that with a few exceptions if you were in lanes 1 or 2 then you stood quite a good chance of winning. The following graph shows this.

lane bias 2011

We did change the progression rules so that heat winners will be place in lanes 1, 2 and 3 (and had done this in 2010 as well). After the regatta we were sent this link to a "Molesey coaches meeting", apart from the random draw part can’t say I disagree.

In the afternoon we have 15 minute of gaps in racing and along with taking out a few finals and adding the extra 40 minutes we have at the end of the day we decided to keep going with multi-lane. But the wind got up again around midday. And it wasn’t looking good. Assuming that we were going to continue multi-lane racing the next step was to take out finals in the afternoon.

The graph below shows the delays throughout the racing we had. A few races were taken out (around 12.30 when we seem to be bring back some time), but being over an hour late in the morning wasn’t that good.

regatta 2011 delay 

The telling part of this graph was the last few races – not good., running at 9 minute intervals. We (myself, Phil the other regatta controller, chairman and chief umpire) did meet to discuss options of which my favoured one was to finish the morning division and run a time trial (by boat class) in the afternoon. But it was decided to continue with the same format.

When cancellation came I heard it over the radio (like all the other officials) as an announcement from the chief umpire. What can I say to that? It has been noted that since our chief umpire became FISA accredited communication might have been described as being a little more decisive! I'm probably over-reacting a litte, but as regatta controller I had to tell everyone else who hadn't heard. I'm also the person in touch with everyone!

I have to admit that we should have been able to run all the races in a time-trial mode (in the race order of the programme), although my vision beforehand would have been to run by boat type. I should have thought about that.

The other big problem at Dorney is how to communicate with competitors. The PA system is rubbish – only reaches the boathouse and finish line, not the rigging areas and trailer park. This makes it difficult to tell people what is happening. Maybe we need to make twitter the only way to tell people what is happening. We were at least tweeting results on time!

So in summary, racing did not go well. We stopped mid-afternoon, and along with the communication problems it made it difficult to restart, so the decision was made (fairly quickly) to abandon racing. Conditions (in our view) were getting worse – with one race having crews side on the starting pontoon.

Of course we were being advised by coaches to cancel every other event except the ones they were racing in! And we had some J18 eights coach actually tell our captain that if we cancelled their event they would never race at Wallingford again! Is that public schools for you?

After cancellation when we were packing up some crews went out for a paddle. Apparently the Eton coach had given permission, but after asking questions it seems that the chief umpire apparently said it wasn't our concern and up to Eton. He really should have checked with the organising committee - we are the ones who hired the lake and signed for responsibility. No crews are supposed to be on without cover!

We had decided beforehand that in the event of cancellation anyone who didn’t get to race would get their money back.

But, there is always one joker. One school coach decided to cancel their cheque for entries. And it wasn’t until a week after we cashed the cheque that the bank wrote to us. The coach who authorised the cancellation didn’t even tell us they had cancelled it. We asked for a replacement cheque for the entry fee less the money due for refund (and told him how much) and he had a cheque raised for a lower amount. And guess what – they had won an event and took pots for an event that they didn’t pay for. Further, they didn’t tell us beforehand that they wouldn’t pay for them. I think we spent another bit of time in email discussing what to do, in the end we stood our ground and they eventually paid up. We had discussed sanctions against them (i.e. banning them) as we spend more time chasing unpaid entry fees than we do otherwise. There was a matter of principle involved here. Although I didn’t feel very supported by the chief umpire who stated that he would not support unilateral action unless the TRRC and British Rowing agreed (i.e. hold it up in committee for a while).

I can’t say that I have enjoyed the regatta the last few years. I am not sure about how other regatta organisers feel. Running a regatta at Dorney provides the rowing club with a slightly increased income over that when hosted on the river at Wallingford, but with loads more work. With some many more people involved your actions, planning and contingency needs to be so much more and so much more professional. This takes time.

A few years ago I stepped down for much the same reason and had a year off. But then got dragged back in (and as chairman of the rowing club as well). So now I think it’s time to take a step back and stand down as regatta controller and treasurer. I’m sure I only did this year as 2010 wasn’t the way to go out.

As for future regattas next year will move to six minute race intervals. This will mean a reduction in the number of entries that can be accepted, which will mean a change to the type of regatta – more likely more school related. I am not sure that six minute intervals would be useful in this years regatta, it would have given a bit of a breather, but we would have only had added an hour to the day and that time would have been used up in the morning. But I think that it is the right thing to do publicly.

Wallingford Regatta 2011 Planning

For many years I have been involved in Wallingford Regatta, having been entries secretary when the regatta was still in Wallingford and continuing the role for the first few events once it moved to Dorney Lake. I'm now the regatta controller and run the racing part of the event on the day.

Whilst as entries secretary in the first event at Dorney Lake (which was incidentally the first open event hosted at the Olympic course!) we were overwhelmed with the level of entry (nearly 1000 received) and since then have had to work out “coping” mechanisms to allow as many competitors to race as possible and at the same balancing other considerations (such as race timetabling, finishing on time, income, fairness). For example, in the first event we excluded all single sculls to allow as many people to race as possible – but the downside was fairness to those people who only scull and secondly the small boats actually help your timetabling.

I could write for hours on entries at the regatta (lack of payment from some clubs but still expecting to race, a certain top club trying to enter IM2 – the equivalent of Senior 3). My main task this year will be regatta controller, and so far has been working out contingency planning for the day as well as analysing previous years looking for areas we can improve and where we will come under pressure. On the day I will be the chief regatta controller (along with Phil Haycock) and hopefully this analysis will allow us to be better prepared in case of problems like last year.

Last year wasn’t that great – the weather was against us and in the end we had to cancel the finals of 9 events. These events had competitors who had raced in heats already and the winner was that crew that was fastest over all the heats. So at least everyone got to race. But this was still not ideal.

The weather was a major factor during the day, however, a further problem that we have is that not all crews who enter seem to be prepared for racing. Since Wallingford is one of the first regattas in the calendar, this means a number of competitors will be racing for the first time. We all have to start racing somewhere. Most new competitors will have competed in a head race, but regatta racing is different.

We took the difficult decision this year to remove the Octuple and coxed quad events for the J14 competitors. For many years we have tried to accommodate these entries, thus allowing for a complete school outing of all boats to come along. This included moving to time trials for the heats of these events with the top six racing in a proper final. However, this year we have excluded the events in the hope of improving the timetabling issues we have each year with these events.

There are still a number of events where we can anticipate delays in starting, usually due to getting all the crews on the stakeboats for the start, but also caused by marshalling. We hope that better marshalling, quicker starting will help – but we also intend excluding crews not yet prepared for multi-lane racing from competing. This will not be an easy decision to make and it’ll be interesting to see if the umpires at the start persevere with these crews or if we do actually exclude them from a race.

Our biggest constraint of the day is the number races we can fit in. The earliest we can start racing is 8am (from a staffing issue, but also possibly a planning issue at Dorney). We normally race until 7pm without a break with the largest delay we can handle is 25-30 minutes (it gets dark not long after this). We set an average 5 minute race interval, thus allowing us a maximum of 133 races. This year we have 130 races so have put in three 5-minute gaps throughout the afternoon.

This year the accepted entry is about 10% lower than the last two years. It was sort of expected, with the removal of the octuples/coxed quads and we have also restricted some of the more problematical events to 6 lanes (rather than seven). Also, the royal wedding has stopped some schools/clubs entering (or sending complete entries). In addition, some events are running with 10/11 entries (with some heats of five crews), so there are some additional spaces that could have been filled.

We could have taken some more entries in the gaps for the three races from entries we rejected, but decided this year we wanted to see how things go before deciding to fill them up. The entry is expected to increase next year without a royal wedding.

There are a few graphs that are quite useful for seeing the last four years regatta’s and how they went.

Wallingford Regatta 2007

Maximum delay throughout the day 21 minutes 50 seconds
Delay at end of day 7 minutes 15 seconds
Delays in morning, back on time by end of morning
Afternoon held fairly steady

Wallingford Regatta 2008

Maximum delay 9 minutes 15 seconds until 17:45 (75 minutes before racing ended), when delay shot up from zero to over 17 minutes (J14 coxed quads final).
Amazingly finished day just over 5 minutes late, bring back 12 minutes in the last hour or so.
Delay less than 5 minutes for majority of day 

Wallingford Regatta 2009

Maximum delay just over 20 minutes
Last race started 40 seconds late

Wallingford Regatta 2010

You have to read this graph slightly differently. It finishes racing at 18.20 with nearly 60 minute delay. However, we took out 9 races, which if we had left in would have resulted in a minimum of an additional 45 minutes of racing!

The last race started at 19:07 (2 minutes after the last race was supposed to start), so adding in another 45 minutes would have meant racing until nearly 8pm.

However, the last race (IM2 8) was strange (not included in graph) – the umpire flagged a clash in the first 500 metres and wanted the crews to re-row. However, most continued racing and ignored him. A re-row did take place (although not all crews took part – some decided it wasn’t worth it (Kings School Chester) and one was disqualified (First & Third Trinity Cambridge). But we had no staff at the start (they had left), so a number of the committee went to be on the stake boats. Reading Rowing Club won the event.

Back to the graph – the delays mounted during the late morning and by taking the action to cancel the 9 races we aimed to finish around normal time. And thankfully we did!

Wallingford Regatta 2011 - this year's projections!

What about this year. Well I’ve done some modelling on what we can expect for a normal running regatta, taking out the octuples/quads, reducing lane density in some events (e.g. some are six lanes – although we have allowed a few events that should be six to be seven for straight finals) and produced an anticipated delay graph.

It is only a projection. We do have some difficult points during the day. Timetabling is quite a feat as we don’t want to exclude events just because they some competitors are inexperienced.

Nor do we want to set delays throughout the day. Putting a 5 minute gap between races is an average. We expect from time to time that we will have delays – and this year we are hoping to cap that at around 15 minutes, but finish the regatta roughly on time. In previous years we have shown that (even without gaps) we can bring back a 20 minute (plus) delay and reduce it to nothing in two hours – but your need good conditions, competitors who know what they are doing (and they seem to have gotten the idea by the afternoon) as well as regatta volunteers (marshals, stake boat people, umpires) working towards that goal.

This year we have three 5 minute gaps added in and a window of nearly 30 minutes at the end of the day without having to resort to cancelling races. 

Contingency Planning

This will probably/most likely be a subject of another article - and if so after the regatta next week. Suffice it to say that the above graph is a projection. If the weather is bad our extra space, marshalling improvements, not filling up all 7 lanes and other changes may not be enough. We have in place a better idea of our contingency planning including cancelling races (as last year). We cannot exclude this possiblity - right up to the point of impementing a time trial for events (for example, the lake is rowable - just not for a multi-lane event).

Wallingford Regatta Programme Duck

This programme cover for Wallingford Regatta 50 years ago in 1961 was sent to me the other day by one of the chief umpires at the Wallingford Rowing Club events and I thought I would share it with you.



There seems to be quite a few "assistants" and the committee room seems to be the place to be!!

We have had our first two regatta meetings for this years event at Dorney in May and one of the discussion points is the duck. What do I mean by duck? In 1999 (a few years before Wallingford Regatta moved to Dorney) one of our club rowers took over the production of the programme. It had up until that point been a A3 cardboard fold out type of programme and we decided that we wanted to improve it. It is especially relevant as we were moving to a 2 day event and the amount of information was increasing. He owned a publishing company (that I incidentally joined in 2000 as Software Development Manager!) and the art and design manager (who was also a rower and cox) put a duck on the front of the programme. It was quite distinctive.

Ever since then myself (who was entries secretary at the time - and thus responsible for the timetable and draw information), the event secretary and the staffing manager (aka the Haycocks) thought about a themed duck. Here are some of them:

 
"Bald" duck (1999)   "Summer" duck (2000)

"Cox" duck (2001)  "Golden jubilee" duck (2002)
 "Family" duck (2003)  "Deckchair" duck (2004) 
"Car" duck (2005)  "Olympic" duck (2006)   
  60 years of WRC (2007) "Ski" duck (2008)   
"Medal" duck (2009) "Election" duck (2010)

There is also a "winter" duck that we used for one of the heads. We generally try to theme it about something happening (e.g. Olympic announcement, Queen's diamond jubilee or the election), but also things around our own lives (e.g. it was snowing in February 2008 when we were thinking about that years duck, or how people grow up and families come along!).

This years duck has been decided and is being designed this week. It will be revealed just before the regatta (but shouldn't be that hard to guess). 

And here is the 2009 Regatta programme cover:



My first computing steps

Part of the job hunting and interview process seems to be to go back to the start of your career. It isn't something I really thought about before going into an interview a few months ago. Thinking about your degree and your first jobs. It was just something you have done. But you do get asked.

I  was thinking the other day of my first computer - which was a Commodore VIC 20, around 1983 (age 14 or 15). It was interesting reading the Wikipedia article about the computer - built on a shoe string and always seem to be compromising. When the computer was first released it had a retail price of around $300, which was around £150 at the time (not including add ons) - which would be around £377 (by retail price index) or £555 (by average earnings) - source www.measuringworth.com. I also think I had two VIC-20's after one failed, so I can only thank my parents for investing in these.

The computer had 5K of memory, of which you had access to 3.5k and the processor was running at 1MHz and the screen was 22 characters by 23 lines. But it did have a real keyboard. The Sinclair Spectrum (and ZX80/81) had poor keyboards, and whilst I think the Spectrum was more popular, I think I was more interested in the programming part.

I did write a program that was published - in "Your Computer" magazine in August 1985. So not only did I have a computer I spent loads on computer magazines. When you look back at the program it had to be loaded from tape each time I started the computer (so imagine if you are working on something and the PC crashes).  The program reprogrammed most of the keys on the keyboard so that you can get keywords to come out (one touch). This was a big thing on the Spectrum.


(Sorry for the poor quality - it is a photo of the program, rather than a scan)

Best thing was that I got paid £35 for the program!

At school their was a computer club run in lunchtime where we used HP computers. These had thermal printout paper and one line dot-matrix display whilst you type in your program. Fortunately they had tape drives for them - a few years (possibly only two years earlier) the people using them had to put the programs on cards which were then read by special (noisy) readers.

But what stood out at school was the one BBC Micro they had. I think the teachers were also trying to get into computers as well, so the kids didn't get near it. But they wrote programs on it to bounce a ball from side to side on the monitor.

 I was watching a documentary series last year where a family was taken back to the 60's, 70's, 80's and 90's to see the difference in things like food, cars and technology. What I found striking was that the family was given a BBC micro that they set-up themselves (and also had the family arguing about using the television to use it). And then they went to program it. Whilst children now are so computer literate - superb mouse skills, good thinking, creating pictures, most it if is also down to good software and good teaching.

But what they don't do is write any programs for the computer. Even if it is typing the command to make it good "Beep" up to programs with graphics. I think that this is a shame as it teaches you about logic, decisions and makes your think. Especially when you have so little memory to play with.

Virtual machines and browser testing

Just put a new website up - still in development. It's at http://www.worldrowingrankings.com - written using C# release 4 and MVC 2. Doesn't save anything to a database, just shows what is in the database with lots of hyperlinks. It is hosted on my new Amazon Web Services instance and is more or less database optimised, in that all of the front page and the pages displayed by the majority of links on that page are all cached (as they are all relevant).

The project is still in development - more functionality is needed to make it work as it should. The big part of the site is showing the data in the database. Which means making sure it works with a range of browsers. But how to test these. I am using IE8/Chrome 8/Firefox 3.6 and the CSS rendering seems to look Ok.

Firefox has some add ons to help switch to IE rendering mode but it isn't really enough. If I was working in a large web environment you would have access to resources to do explicit testing using different browser levels. However, I don't have this, nor would I want another 3 or 4 machines around to do this testing.

So I turn to virtual servers. I've stayed away from anything at the server level (as I don't really have a machine large enough to warrant having instances of different operating systems running all day - nor do I have that requirement). What I need is the ability to boot up into an operating system running some browsers. I could dual boot my server, but again time consuming.

The solution I have adopted is to install Microsoft Virtual PC (2007), which I have done on my small server (as my notebook is overloaded as it is). It is free, however, you do need licenses for the guest operating systems that you are install. Fortunately I have Windows 2000 Professional licenses from a 10 year old MSDN subscription (hint here is not to throw anything out) and I also have a Windows XP Professional license. With these I can get IE5, IE6 and IE7. (I think that testing the different releases of Mozilla and Firefox is probably over the top - I would expect if anyone has the nous to install these they would have upgraded them).

Virtual PC can be downloaded from Microsoft and once running you can create new Virtual PC images. Few hints though
  • It is easier if you have a bootable CD/DVD with the OS you need. Not sure I want to create a DOS disk to do this.
  • When you create a new image it tries to boot it up. Even if you have a CD/DVD in the drive it does not originally recognise it. You need to choose from the Menu the option CD, and select Use Physical Drive. Then reset the virtual PC using Action->Reset.
  • If you have multiple network cards you need to tell it which one to use. I have two in mine - an on-board one and one I installed. For some reason I never use the installed one, but for some reason Virtual PC defaults to using it. So I need to swap it, otherwise no network connectivity.
  • Install the Virtual Machine Additions when the installation is complete and this will give you access to your complete range of monitor resolutions (and supposed to make it run faster)
  • You need to learn a few keystrokes. When you run in a virtual PC in a windowed mode your mouse is stuck in the window. To get it out (and onto the host machine) use the Right Alt key and move the mouse.
  • To get into and out of full screen you need to use the Right Alt-Enter combination.
I have ended up with two Windows 2000 Professional installations and one XP Professional. I couldn't see a way of cloning an installation, so ended up installing W2K twice and then installing IE 6 on the second.

A decision you need to make is whether to do complete a complete Windows Update. W2K is unsupported by Microsoft now so the most you can probably do is install the latest service pack. Since I intend running these virtual PC's to test my websites, and most likely for the majority of time by accessing my development servers I'm not sure it's really worth it. If I end up needing them for other uses then it might be a good idea.

Finally, the the past I have used VMware ESXi, which is a cut down version of the VMware full product. It worked well for the things I was doing (and I think you could control more configuration). The one annoying downside was that it seemed to install a lot of Windows Services. Virtual PC 2007 doesn't seem to from a cursory check (although you never know). This is important to me as I have setup the server to try and mirror the Amazon image so that I have a better test platform than my notebook.
One thing left to do - browser testing!

Testing a website before DNS has propogated

Happy New Year!

One of my resolutions (I don't have many) is to write some more technical posts. After having a year off technical work and focusing my direction on house refurbishment and reducing my golf handicap, I have been looking for a suitable new position seriously since around August/September. I took on the building of a website based on a database I created a while ago (more on that once I have got it officially launched).

The problem that I have was I commissioned a new server using Amazon Web Services (see the previous post) and I could test using the IP address. One of the (minor) issues I have found so far with AWS is that you only get one IP address per instance - you don't have the option of purchasing any more. This means using host headers if you want to host multiple sites.

The other problem that I had was I used the IP address which was assigned to the box and then modified my DNS entries for the domains. Then I setup an Elastic IP address. This is an IP address which is assigned to my account that I can then relate to a server instance. As soon as you setup this IP address the original IP address is lost! This meant I had to change the DNS again!

But I wanted to test the servers as quickly as possible.

I have used the solution below before. When I worked at GTI we hosted sites in our own network centre. Every site was located on at least two servers and associated with it's (real/internal) IP address (on the private network). When we deployed the site we would setup some temporary (real/internal) IP addresses and check things would work. We could do this over the private network. However, this created issues if any URL's were hardcoded - and also if we were using SSL certificates.

The solution (for testing purposes) is to modify the hosts.txt file on your own computer. This is located in the directory c:\windows\system32\drivers\etc.



In this file you can add an entry for new sites that you can then test - either until DNS propogates or on a longer term basis, e.g. unless someone knows the URL (and IP address) and implements the same method on their PC then access to that site from your server will be quite difficult (this is known as "security through obscurity", and therfore should not be relied upon for anything really confidential!).

I also use this to occasionally test sites on my local computer.

Few caveats
  • Remember to remove entries afterwards. Otherwise you will be browsing for a site and getting the wrong one.
  • If you have already browsed to the site, you then need to exit your browser and start a new one in order for it to be picked up. (And with Firefox you might need to stop all browser instances - and check using task manager).

Windows 2008 Server setup on AWS

When you create your instance on Amazon Web Services you choose an AMI (Amazon Machine Image) which is a template to base your instance on. I am using the AMI with code ami-cf517bbb which is a 32 bit version of Windows Server 2008 with SQL Server (2008) Express.

The Micro Instance

I am using a Micro instance, which will give me just over 600MB of memory and hopefully enough processor power to run several small websites. The worry will be whether the memory is enough to run a database server as well.

Getting the administrator password

When you select the AMI to build from the AWS system makes a copy of that template. Using a Mirco instance uses storage called EBS (Elastic Block Storage). This storage is persistant. Other instances can work differently with disk space that isn't persistent - if the instance dies you loose your data. But I don't need to worry about that. Later on I'll be looking at the backup and other storage options. The database/website I am deploying will only be used for reporting on the data contained within it and quite a bit of data is cached on the website anyway.

Once the instance is setup you need to retrieve the administrator password. This is done from the Management console by right clicking on the instance and choosing the option "Get Windows Password". You then need to paste in your private key (that you create earlier).

It can take up to 10 minutes after you start creating your instance until it is available.

Part of the process of creating your image is also to create your security settings (firewall) so that you can login.

Logging in

When you login for the first time you should change your administrator password. I didn't do this - I was trying to be smart and create a new user for myself that has administrator priviledges. I did do this but had other issues later when logged in as this user to do with permissions. Something I will come back to later.

Best practice would be to use a different username to login and then rename the administrator username to something obscure, then disable it. Partially security by obscurity (by renaming the user and using another logon) but an additional layer with disabling. For the moment I am using the administrator user.

You logon using Remote Desktop over the internet - hopefully protected by your security settings. There are further settings you can put on using certificates to authenticate yourself.

The initial setup

Disks

The AMI has one 30GByte disk. This is a little bit of a pain. I'm not overally worried (for the stuff that I am running) that all my data will be on one disk. It sort of forces me into thinking carefully about things. However, 30GByte is quite big - the disk has over 20GByte free and since it is pay as you use you are paying for it. I don't really know a way of making the disk size smaller and giving it back to Amazon. Amazon are giving a one year free offer of 10GByte of space - it is probably only a couple of dollars a month, not much when I have just one server.

CPU

The CPU reports as Intel Xeon E5430 @ 2.66GHz (with the words 2.96GHz next to it!) and task manager reports one core. With the micro instance you get 1 Elastic Compute Unit that can burst to 2 units - one unit is described 1.2GHz Opteron. The computer name is set and apparently you can change it - can't see any advantage to doing this at the moment, so I'll leave it. The aim is to change as little as possible.

Remember, as long as you have got your data you can start up another instance with a new AMI and move the databases/sites over and get that running. It will cost you a few cents per hour, then move the site across using the Elastic IP addresses (see article on setting it all up).

The DotNet framework to version 3.5 is installed.

Getting setup

Once the server is up and running, I always get Task Manager up and running to monitor what is going on.

Main initial tasks that needed to be done were
  • Create a directory where you are going to put all your stuff. Something like c:\data is fine.
  • Setup a default website and move the default website away from c:\inetpub\wwwroot. I just create a directory
mkdir c:\data\web
cd \data\web
mkdir default
cd default
echo "Hello" > index.htm

Then go into IIS and create a site that points to it (I'm not going to give a guide to IIS)
  • Setup IIS so that the log files are created somewhere other than c:\inetpub\logs, e.g. c:\data\logs. By putting all your stuff in one place makes it easier to move/backup/delete etc.
  • Install some stuff that isn't their.

What needs to be installed

Chrome

I don't use IE much, just for testing! The default IE installation is fairly hardened so you need to set the security to allow you to download .exe files. This is just a preference, although I do need to check if there are any security reasons for not doing so.

DotNet 4

The application I am installing requires the DotNet Framework version 4 as it uses ASP.NET MVC version 2. I generally try to install from the base installers rather than the web installer. This means a 50MB download from Microsoft.

(I did install Subtext that runs this blog using the Web Platform Installer).

Setup

Below is a quick overview of manually setting up a database and website. I've not used any deployment here as I want to understand how the server is operating first. Also, not quite time for me to worry about using the release configuration of the website I am going to deploy.

SQL Server 2008 Express

My first task was getting SQL running. My application requires a database and I was anxious to use the server, rather than write a little hello world test program using ASP.NET/C#. Anyway the index.htm "Hello" worked.

The first problem I found was that the SQL Server instance for Express was disabled - so start the Service manager (services.msc) and enable it.

Then start Management Studio, right click on the instance name and choose Properties. Goto the Security tabs. I don't like my web applications accessing using Authenticated Security. This is partly as I've always did it using SQL Server authentication. By default Server Authentication is only setup to allow Windows mode. You need to change this.



Then go to Security, Logins and change the sa password. It's up to you whether you enforce the password policy. If I was running Active directory or multiple servers I might think about setting up the security as normal. But again not really worried about it. The other advantage of setting up SQL Server authentication is if you want to access the server remotely.



Now goto the status option and make sure that the user is enabled.



Restore any databases you might have. The add a new login and user to access it. Don't use one you have used before (i.e. on the backup from your development environment). If you do want to use the same user then lookup the stored procedure sp_change_users_login - I'll write a post about this later once I get my deployment tools in place. It is likely that you are using integrated authentication in your development environment anyway (in which case you need to learn about connection strings).

Your website

I zip up the files for the server then create a directory (e.g. c:\data\web\mysite) and unzip it. Check there isn't anything in it you don't think should be there. (I'll be looking at deployment next so that I can make updates to the website quickly - but for the moment I'm just getting it up and running and checking it is all Ok).

Then go into IIS and setup the site. Few things to note
  • If you are going to use Host Headers for your site (i.e. hosting more than one site on your server) then if the DNS hasn't propogated it will be difficult to test. There is a way (editing the hosts file on your local computer). However, for the moment disable your default site and add a new site pointing to your newly created directory.
  • Make sure you setup the site to use the right application pool, in my case the .NET Framework 4.
  • Check the settings for log files.
You need to understand connection strings to access your local database (or add in the integrated NETWORK SERVICE user). As said I tend to use SQL Server authentication anyway. I have two connection strings - one for objects created by the entity model and one for stored procedures being accessed. Look in Web.config - generally connection strings should be like
Data Source=.\SQLEXPRESS;Initial Catalog=<DATABASE>;
Integrated Security=False;User Id=<SQLUSER>;Password=<SQLPASSWORD>
If you were using SQL Server Express locally you shouldn't need to change the server name.

Now test your site - check it locally (http://localhost) or via the IP address or URL (if DNS has propogated).

How to transfer files to your server

Ok you could install FTP on your new server - but I always think that is quite a bit of security hole.

What I have done is open up some ports on my broadband firewall that forwards to a site on one of the PC's I have. Then copy files into that directory then from the server browse for them and save them. Once uploaded you can remove them.

Windows Update

Lots of Windows Updates need to be done. Do them, just in case. Also by doing them now and then testing your website you make sure that everything is working Ok. If you do them later and something doesn't work it's a bit harder! There is 143MB of updates to do - remember however, that you are paying for the bandwidth! It takes a long time to do.

Once you have done the Windows Update I advise going running the Service manager (services.msc) and stop and then disable the Windows Update service and the Module Installer service. If you don't do this then these services will keep running. On a machine with only 600MB of RAM you need to reduce the amount running. But, remember by doing this you need to ensure you do the Windows Update yourself.

The other service to disable is the Print Spooler - I'll get back to you on other services you can safely kill. I also remove SQL Server Compact edition

Others changes

A few other things I did
  • Set the computer to work better for better performance (My computer->Properties->Advanced Settings->Settings)
  • Set the computer to work better with background services (My computer->Properties->Advanced Settings->Advanced)
  • Change the page file (My computer->Properties->Advanced->Virtual memory->Change). I set mine to 1.5Gbytes.

Is memory an issue

At the moment who knows. The server isn't being hit by a lot of traffic yet. I do know that when I install anything (e.g. Windows Update, Subtext or the .NET framework) I know that I have to be patient. As CPU will peak quite quickly at 100% and things go slow. But when nothing is running on the server and I access my test site it all goes quite well (although the site caches all the data that is displayed on the front page and the first few pages (about 4MByte of storage), so I'm not really hammering the site - I think the googlebot has accessed more data on the site than me!

Later

This is all a bit rough and ready for me. Some best practice has went out the window and I need to get processes straight for deploying sites and databases. But doing something manually is good for you.

I need to look at some server hardening (thinks like security policies, permissions on directories etc) and then using the AWS backup facilities.

Once I work out everything I need to do for the server I intend to create another instance from scratch and do them. It'll cost me a few hours of time, but less than 10 cents of cost. Once this is done the aim will be to create a backup that can be used for future instances (or in case of failure of this instance at some point - remember it is Windows!)

Getting started with Amazon Web Services (AWS)

I am about to launch a new website - more about that in another article. The site is nearly finished (or at least in a state ready for launch). However, I need to get in place the hosting for it as from experience I want to be aware of the problems before rather than after the site is launched.

I've looked at a few options in the last year or so, from shared hosting to dedicated servers to virtual servers and using cloud based services (for things like SQL). Still not sure what I'd do long term. From my time at GTI I know about running a network centre and configuring and using servers.

I've recently joined the Microsoft WebSite Spark program and found lots of suppliers giving access to dedicated servers for a lower price whilst you are part of the program. But it's not that much cheaper, and it is for the most expensive option - dedicated servers.

Anyway what I need is a Windows 2008 Server running SQL Server. SQL Server express will operate with my new site quite happily, although part of WebSite Spark gets me SQL Server Web Edition.

For the moment I've chosen Amazon Web Services (AWS) using their Elastic Computing Cloud (EC2). A friend of mine at Swirrl recommended this to me. You basically pay as you go - so if things don't work out then I'm not stuck in a 12 month agreement.

Amazon describe their service as "a web service that provides resizable compute capacity in the cloud". I'm not too sure I agree with that completely - you buy a share of a large server and can do with it as you want (mostly). Unlike, say Azure you aren't consuming that as a service. At the moment not too sure I'm that comfortable letting go of the control of a server to using a service. I currently host my home website using shared hosting, where all you can do is upload files (via FTP) so I was really looking forward to being in control again.

Amazon operate four network locations (with multiple "availability zones" within each location) giving good redundancy options (if you want to use them). Two of these are on different sides of the USA one in Asia and one in Ireland. The prices for using each location is similar, although the centre in the Virginia seems slightly cheaper. I choose to use the one in Ireland, but nothing to stop me using another later.

I had a server up and running in less than 20 minutes after signing up. The sign up process involves giving over your credit card number and receiving an automated call from Amazon to verify your phone number. From their you are presented with a web site (the AWS console) and can create instance. I am using a service called EC2 - the Elastic Computing Cloud. It really means that you create server instances, that you can repeat (i.e. have multiple instances), that you can load balance (using Elastic Load Balancing). Their are several storage options, including EBS - Elastic Block Storage, where you can purchase more storage when you need to or copy your current volumes.

AWS Console

For what I am doing, I simply need a server to provide a web site - not too worried about load balancing (which gives not just capacity but some disaster recovery). I am (for the moment) going to run some web sites.

Amazon provide a number of instance types. This is probably one of the biggest drawbacks of the Amazon service in that you are pigeon-holed into a certain process capacity. The elastic part if that you can add more instances, however, for a small site you have a choice of the instances called t1.micro and m1.small. The configuration of these are

Micro - 613MB memory, Up to 2 EC2 compute units (for short bursts)
Small - 1.7GB memory, 1 EC2 compute unit

One EC2 Compute Unit is described as being the equivalent CPU capacity of a 1.0-1.2 GHz 2007 Opteron or 2007 Xeon processor or early-2006 1.7 GHz Xeon processor. For my small application in terms of running as a web server I'm really not that worried about the processing power. The Micro instance seems more suited to a web server as it can "burst" to using more power. However, it is expected that the processor usage will generally be less than 1 unit. The biggest difference is in memory and this is my biggest worry. Can I get a (Windows) server (with SQL Server) running in around 600MB of memory. The key to AWS is that you pay for what you use - so if it doesn't work out I can move to a Small instance or a different provider.

But, what about the cost. Amazon do provide a sort of pay in advance option (called Reserved Instances) where you pay a fee in advance for an instance, and then the pay as you go price is lower. I am currently using an On-Demand Instance, where for a Micro instance I am paying USD 0.035 per hour (For a small instance the cost is nearly four times as much). For a reserve instance the cost will be USD 0.016 per hour - half the price, but you pay either USD 54 for 1 year or USD 82 for a 3 year term. (Note that once you pay your upfront fee, you don't need to actually host anything). Amazon also provide a service called Spot instances where you effectively bid for instances, which will reflect Amazon's spare capacity and will be available at a cheaper price than the on-demand instances. However, from what I read you need to be aware that the capacity may be taken away at any time (as the capacity is needed elsewhere).

You also pay for bandwidth in and out and for your storage. For the first year a lot of this cost is fairly covered as a discount is provided. A Micro instance running Windows works out about USD 26 per month and bandwidth/storage hopefully only another couple of dollars. (If you want a micro instance running Linux then AWS really gives it to you for nearly free for a year). There is a decent calculator on the Amazon website to work out your costs.

Getting a server up and running was fairly painless. The documentation is very good and easy to work through. From the console you choose launch a new instance and choose from a number of Amazon Machine Images, which are good templates. I choose a 32-bit Windows 2008 R2, with SQL Server Express. Within 10 minutes it was setup.

A bit of security is needed where a key pair is created. Once created you then paste in your private key to a window which will decrypt the administrator password. You also need to setup a firewall (or security rules). This means getting the IP address of your broadband connection and setting this up so that only you can remote desktop to the server.


The next step is optional, I didn't do it initially but wish I did. When an instance is started it is given an IP address. If the instance is stopped (i.e. you aren't paying for it) then when you start it up again later you get a different IP address. What you need to setup is called an Elastic IP Address. This is associated with your account. When an instance is started you can then relate the IP address with an instance. Elastic IP addresses are free - until they aren't associated with any instance, when you pay 1 cent per hour. If you are going to be running a website 100% of the time then it shouldn't be a problem. You can use this IP address for your DNS setup.

Logon to your instance using remote desktop and setup your server. I'll write about that in the next post.

Speak Spanish

After spending a large proportion of the last year in Spain and now will only be going back for the odd holidays and long weekend, I thought it time to learn the language.

Oxfordshire Adult Learning run night classes very reasonably priced - £40 for the first five week (introduction) class and £80 for the ten week follow up class, so £8 for a two class. I've just completed the introduction and the first week of the follow up class. It's funny that the one class I knew at least a few words was to do with going to the bar!

I'm back full time

I'm now back from Spain full time - and I'll only be going back for holidays now.

Last June I was made redundant from my position as Software Development Manager at GTI Online Solutions and have taken the last year off - well at least off from paid work.

About half my time since leaving GTI was spent in Spain, mainly playing golf, reading, drinking, swimming and dealing with the heat! Golf handicap is now 21 - I'm sure it would have been lower if I had drank less beer on the nights before playing (at 8.30am) or played in the afternoon. I played 3 or 4 times a week with a society called Club 25, playing out of La Serena golf in Murcia. La Serena is the closest course to me - and with the cost of car hire at the moment I decided not to hire one and cycle their each day - it is a 15 to 20 minute cycle ride, sometimes really difficult when the wind gets up - especially after playing a round of golf.

The other half of my time was spent doing work on the house - new kitchen/bathroom, conservatory, carpets and lots of painting. Few jobs still to be done - need to get a plasterer to finish some work -  and look at the garden with what is left of our summer.

The major task is to look at finding a new position. Preferably in a similar role - managing a software team or project management. Development skills are SQL Server 2005/2008, ASP.NET, C# and Classic ASP. I've got a few leads on some contract work that may or may not come off. But primarily I'll be looking for a new full time position.

Wallingford Regatta 2010 - still got sore head

I came back from Spain for just under a week to be regatta controller at Wallingford Regatta at the weekend. I try and control the day and take control to make sure the regatta runs on time (didn't do that well.....) as well as knowing what is going on, getting all the information around the various people who need to know. For example race sheets are provided to the start team, umpires, boating marshals etc, and circulated twice during the day.

It wasn't our best hour - the weather was against us and we struggled when we got behind. In the end we finished around 20 minutes late (or we would have done if the umpire for the last race - the LAST RACE - didn't flag a re-row for some clashing just after the crews started, but the crews didn't listen. We also only finished 20 minutes late by taking 8 races out of the programme. These were finals for races that had heats - we made the crew that was fastest in the heats the winner of the event.

The weather wasn't really with us throughout the day (don't let the picture deceive you, this was from 2009 (and is courtesy of David Marsh). We were only 15 minutes behind late morning, not unlike previous years where we accept this as we know we are able to bring back some of this, especially when we get to the finals of crews that have raced earlier in the morning. But the wind then got back up and suddenly by 1pm we were 50 minutes late.

Anyway, head is still sore, but I'm back on a flight to Spain this evening.

Reclaiming mortgage exit fees

Result! Between Christmas and New Year I was reading on the web an article (by Martin Lewis - MoneySavingExpert.com about mortgage exit administration fees. One of those things you pay when moving your mortgage.

Now, I've only moved my mortgage a few times between different bank - mostly when I remortgage I look for a deal with the same bank. However, I did move mortgage between Abbey (now Santander) and Direct Line. I do have to say that I think Abbey were very good to me. The article was talking about how banks have changed this mortgage exit administration fee (as they could as we signed on the dotted line agreeing that they could). But what they did was change mine from £65 to £205. Thus when I moved my mortgage this charge was made. Can't say that I actually noticed at the time - but fortunately I don't throw much away and pulled out the documents for when I took the mortgage out in 1998 and then found the redemption statement.

Essentially the practice of silently changing these by such large amounts has been deemed illegal. Any changes have to be proportionate to the task, rather than changing a rather silent charge. The article points you towards some letter templates - so took this, filled in the blanks and sent it off on the 8th January. (The article also gives the addresses of all the main banks that handle the request). Less than 2 weeks later, on the 21st January cheque arrives for £140.

Burn's Night

Had an excellent Burn's night yesterday. A little bit of my whisky collection has drained away!  And quite a bit of wine was consumed as well.

My Whisky Collection

I last held a Burn's night several years ago - I think 18 came along, and we had a formal sit down meal (erecting and decorating tables in my living room), and it was quite a bit of work. This one was far simpler - by keeping it simple! We did have a small poetry competition, amazingly won by my brother, who only created his poem about 15 minutes before everyone arrived.

We've just eaten and you won't believe that haggis consists of things that'll make you heave,
- Beef suet and pork liver doesn't sound that bad,
but lamb and pigs heart can make you glad,
that I've not had time to tell you about the lungs, and E250 and E252 that I could not get to rhyme,
- And last but not least there is some oatmeal and some stock
but hopefully not some animals cock! 

I've not added to my whisky collection in a few years (although some friends have added to it) - it was getting too large (if that's possible), and if I only have a dram or too every now or then it'll take a while to disappear. I think once it gets below 10 bottles I'll need to add more. But here is a hint. Ever been through an airport and they have the offer or 2 bottles for £40 (or something similar) and you think that's quite good, but don't want to carry it there and back (especially with not being able to take liquids with you in the cabin). Use the collection service - and if your return flight arrives after 9pm (especially at Gatwick) they couriered it to me the day after I arrived - and even called me to check where I was before getting the courier.