Chris Coveney…the Introduction

I’ve started writing this post in Amsterdam airport…I’m on my way to Arica in Chile where I’ll be (hopefully) burying my father, Chris, who died on the 19th of July. I say hopefully not because this is something I’m looking forward to but because I face a number of legal and monetary issues with the hospital where he died.

So, the backstory….

Chris Coveney in 1986

My father was born in 1944 in Liverpool. He had a childhood disrupted by his father’s death while he and his mother were travelling to join him in post-war Frankfurt.  At the age of 4 (I believe – this needs checking) it seems that this had a somewhat traumatic effect on his life. Whether it would have worked out any differently if his father hadn’t died so young is hard to know.  It seems he never really bonded with his rather quiet and gentle stepfather, John.

John was one of those people that sadly get little praise in life…he didn’t have a rapier wit, good looks or intense charm. His predecessor, it seems, did.  But he did do his best to provide a stable and comfortable environment for my father and grandmother (I later lived with them at different times of my life.)

Yet it seems that my father inherited his father’s flaws (a taste for women, good times and risk taking) without some key strengths (a disciplined and intellectually rigorous upgringing in particular) that would have helped my father excel. He was certainly charming, good looking and intelligent.

Family Life

My father, to the best of my knowledge, had three children… myself first, David, in 1969, Miguel two years later, to his first wife Ruth, and Maria in 1981 to his second wife Ann.

It’s fair to say that neither marriage went well. To paraphrase my mother:

He was a drinker with a vicious temper and a long arm. He couldn’t understand the word no.

There are other things I’ve learned recently which I won’t share…but the picture was of a man who couldn’t take his responsibilities seriously and, when confronted, would lash out at anyone around.

The Consequences

I’m going to skip forward now to 1985… by this point my father had been divorced twice and no longer had custody of any of his children. He’d kept me close for years, but even I tired of his temper, his constantly failing relationships and the occassional humiliation of a beating. It’s a curious thing about being smacked around by your father…the physical pain is nothing. It’s the betrayal of trust that hurts and damages you.  No parent should resort to violence when faced with the annoyances of raising a child. Nor, of course, should a child ever survey a trashed kitchen following violence between their parents. Ever. I could go into the reasons why violence breaks out in domestic settings, but that subject deserves better than I can give right here.

Since 1971 my father had been working his summers as a tour guide in Oostende, Belgium. This suited him fine…a steady stream of giddy girls on holiday, few responsibilities, and plenty of nights out left him, it seems, relatively contented.

South America

By this point my father, always a keen lover of all things Spanish, had started to spend his winters in South America where he could travel around enjoying himself whilst maximising the money he earned in his Belgian summers.

This was actually a fairly calm period… I lived with my grandmother and rarely saw him. Generally I did enjoy his company, but there was always a nervousness over when he might kick off but, in general, he seemed to have mellowed.

Unfortunately, in 1987, everything changed again. I was living with my grandmother and had done reasonably well in my A levels. I’d gained a job at ICI on a trainee developer program. For me, at least the future looked good. However, like all good things in my life there always seemed to be trouble waiting for me.

Loss

Just a couple of weeks into my new job, my grandmother was diagnosed with lung cancer. Her decline hadn’t been pleasant to experience and before she was diagnosed she’d been struggling with shoulder pain that left her crying until the doctor could come and give her a shot of painkillers. Eventually it became too much for both of us. She was booked into hospital in a few weeks time… but that was too far away. I learned then a painful but valuable lesson.

The doctor could do nothing to have her admitted more quickly. I visited the hospital. No, they could do nothing either…it was a non urgent case of painful arthritis.  Yet it was all too much to bear…I was in tears when a male nurse took me to one side and explained something…

They’re letting you look after her. She’s dependent on you. You want to know how to get her into hospital quickly? Refuse. Just tell the doctor you’ve had too much and you’re moving out.

Basically, I was going to have to play poker with my granny. But I went straight from the hospital to the doctor’s surgery and insisted I saw him. Three hours later, an ambulance arrived.

The next day they discovered the pain was caused by secondary metastasis (I think that’s the correct term, I’m writing this on a plane). She had advanced lung cancer that had spread through her body. She had less than a week left.

There was a dull, hollow ache inside me. I wasn’t close to my mother since I’d not lived with her for 14 years and besides, her and her new family had moved to Spain two years earlier – something that at the time had left me less than impressed.

I had my friends, Linda and Peter especially who were wonderfully understanding. And that weekend, my father’s summer job finished and he was able to arrive.

So he signed over everything. It was down to me to deal with the estate. There wasn’t much there, to be honest, and a lot of debt.

My father had his tickets for South America booked a long time earlier…in this time air travel was still relatively expensive and inflexible. I later learned that airlines usually aren’t so bad in cases of bereavement. I think he could have changed flights.

But he didn’t and just a few days later he was gone.  Two days after that I buried my grandmother.

What’s crazy is that in all this I even managed to redecorate the lounge in time for the funeral, thanks to my friend Linda. It was important that in death everyone saw the best in my grandmother…

Losing Trust in Everyone

Soon after the vultures were circling…I couldn’t take over the mortgage or I’d have to pay off all debts, and I couldn’t get a new mortgage at such a young age and such little credit history…especially on a shared ownership house like this.

You see, what happens with a debt secured on property is that you hand over all rights to the lender. If you fail to keep up repayments the lender can take possession.  The lender will then sell it.  If a profit happens to be made then that’s great for the lender. They keep the money.

In fact, some even have a policy of quick repossessions during a buoyant market.

In retrospect I believe I was badly advised.  But lacking support just trying to hold down a job and simply live right was enough to occupy me.  When I was evicted from the house I lost my faith in society, my parents (sorry Mum…but you later won it back, so that’s ok, trust me) and everyone except my friends.

The council couldn’t help – I was told a single male would be at the bottom of the waiting list for social housing.

I didn’t want my fathers’s help and, by the dubious measure of taking out a loan to pay the deposit on a tiny studio flat, I had a place to live.  While this was happening my father was made redundant from his summer job and announced he was going to stay in South America.

Having discovered financial wizardry I even managed to buy myself a niceish car I couldn’t afford on credit.  Life had been hard, but now, I felt, it was improving.

Two months later I received a letter from my father asking for help – he said he’d been robbed of all his money and needed the money I owed him (I think he believed there was money in his mother’s estate) and could I send £1500 as soon as possible.

I had about £30 in the bank.

The next six months were hell as I sent over dribs and drabs in response to his increasingly strident letters, but I remember one triumphant moment. I’d been caught at work calling the Chilean embassy. I was in trouble until the reasons were explained to a senior manager.  He put me in touch with the right people and before I knew it the Foreign Office offered a loan to help repatriate my father.

I’d done it.  He was going to be ok.  I’d sent as much as possible to him, borrowing money, trying to sell what I could legitimately sell… but it amounted to no more than around £600 over the months.

I went out and bought a £15 phone card to give the good news.

Son… I thought you had a good job? I need the money why don’t you have any?!

I told him it was no problem… I could get him home!  I explained the loan.

What use is that? I’d be in the same situation, but in England…it’s much cheaper to live here

He was angry.  And I remembered all those times he’d been angry before.  The card ran out cutting him off mid-sentence.  It was over. I was never going to speak to him again.  I realised he hadn’t been asking me for help…he’d been asking me for money, that’s all.

Since then I stopped responding to his letters. I’d been struggling with the flat so I sold up and moved into a room.  We lost contact.

Update 29-08-2010: I was reading through his letters yesterday and realised that I’d found the solution of a loan for repatriation earlier than I thought I had.  I’d simply brought it up again during that last phone call and he essentially repeated what I’d said.  I also think I’d continued to send him money for a while, but remained mute.

In 2001 I managed to find out that he’d renewed his passport in Quito in 1997, but that was all I had. In 2006 I was invited to a wedding in Lima, Peru, and took that as an opportunity to try and find him.  I got close…searching the town of Arica in the far north of Chile.  But if he saw the notices he didn’t respond. If he’d even searched Google he’d have found me for years and years.  I even put a page up about him which was good enough for my estranged sister to find me with this year.  In the end I reached the conclusion that he no longer wanted to find me.

And then the knock on the door in the early morning. I don’t know why the police do it that way.  The officer was perfect…knew exactly how to break the news. Quickly, succintly, followed by the detail. He’d died on the 19th of July in a hospital in Arica, Chile.

I’m going to wrap this up now…it’s an awfully long piece to type entirely by phone and my fingers are aching. Hopefully I’ll be able to post it up on arrival to Lima.  More soon… my plan is to document this trip, my feelings and my need to find reconciliation wherever possible.  Sharing helps.

WordPress Performance, Make it 3x Quicker!

I’d started to notice that my site could often be slow to load – other sites on the same server weren’t suffering the same way, so I wanted to document a simple way in which one can identify performance issues on the site. This is one of them.

A little while ago I reported that my site, since some WordPress upgrades, had started to slow down. I’d wondered whether it was WP becoming increasingly bloated, or some other problem.

Well, it took me a while to get back to the issue (babies and a booming business don’t help!) it’s continued to get worse and worse, until a recent change has improved things… but only marginally, as shown by the Pingdom chart below:

Not looking good…

This is dreadful, really – daily average of 4,000ms responses just aren’t acceptable where, two years ago, I was getting 800ms.

So, now the process starts.  The recent small improvement came after installing our Spectacu.la Advanced Search Plugin, which runs a regular database optimisation to help keep things nippy, but it was still dreadful.

Is it Pluginitis?

My first suspicion is always that of plugins (and sometimes themes, if they’re complex).  In our office we have a term called ‘pluginitis’ which refers to the problem of a site having too many plugins installed, many of which are poorly written.  I hate to say it, but when clients call to ask for a plugin to be installed that we’ve never tested we go through it and, 90% of the time, discover serious performance or security flaws that will cause long-term issues.

And this site here is old – I’ve been running a WP install for four and a half years with nothing more than upgrades and, like an old PC that’s been upgraded too many times, that causes issues with old drivers and code.  Same can apply to WordPress.  So let’s see what we can do to improve things.

First stage is to disable as many plugins as possible so as to isolate the issue.  I’m using a division based approach – ie, I’m going to disable half of my plugins to see what happens.  If I get full performance back, then the problem lies in that half.  I can then reactivate half the plugins and see what happens.  If the performance is still good, the problem is in the other half.  I think you can see where I’m going here.

I’m also going to go for plugins that aren’t written by us. Not because I’m biased (ok, maybe a little) but because I know all of ours are carefully tested for performance – many are run on major sites such as the Telegraphs blogs site.  Speed is of the essence.

I’m also going to skip plugins like Akismet, because anything that’s essentially ‘core’ is usually going to be reasonably performant – at least on a small site like this one.

It’s worth noting that I could easily delve into SQL statements and code efficiency – but that’s only interesting to developers – if you’re simply a WordPress user, performance is interesting but what you can do to find problems is somewhat more limiting.

Plugins being disabled:

Add to feed – a simple plugin, but sometimes simple plugins miss simple tricks.

Headspace2 – I have my suspicions about this plugin as it’s massive. Could be fine, may not be.  Only way definite way to know – measure it.

Search Meter – a nice plugin to see what people are searching for, but is it adding load somewhere?

Social Bookmarks – it shouldn’t cause issues, but you can never be sure.

wp-typography – I love what it does for the typography on the site, but it’s also running a lot of javascript.

First results:

I do use YSlow to test the site, but one of the problems is that it’s hard to get a large enough series of data to be statistically relevant.  It’s good for seeing the extra load (and why I knew the amount of javascript was an issue) but for longer term analysis it’s flawed.

So, we go back to Pingdom and look at the one day chart.  As I type this it’s now an hour since disabling the plugins above – so let’s see what’s happened:

A dramatic improvement!

As you can see, in this afternoon alone there’s been a dramatic improvement – from around 2500ms per visit to 1230ms per visit.  In one single step I’ve halved the load time of the page.

What we don’t know so far is whether that’s because the page got smaller to load or whether it’s down to a reduction in database load – but that’s really for another article.  What this is all about is trying to document how I’m improving the responsiveness of the site in a way which relatively non-technical folk can follow.

What I’ll do in the next feature is to turn off some more plugins to measure the impact they had.  I’ll also be interested to see if the spikeyness of the response times has varied much – are they caused by simple server load, or is there something else at play?

I will then start to switch plugins on again in a structured way in order to measure which was causing the heaviest loads on the site.

Keep watching!

Of WordPress Training and Learning

Over at Interconnect IT, where I work, we’ve found that demand for our WordPress Training Courses has shot up over the past year or so.  And it’s certainly interesting to see where the work comes from.

Curiously, it’s very polarised – we either work with smaller one man band companies like Jason Nevin who runs a house removals company site who are looking to switch technologies, or big corporates and government agencies such as Shop Direct, The US Mission to the UN and the Department for Business, Innovation and Skills.

I’ve been thinking about why there’s such a big dip in the middle of our client base – 90% of our business is groups with over 500 staff or with fewer than three.

The Gap

Small, one man companies tend to involve highly motivated individuals.  They understand the important of their skills, and they know that in the tech sector they have to always stay up to date.  Large corporates tend to understand this too, and have allocated training budgets to make sure they keep up to date.  Government departments are often a little slower with new technology, but they too need to keep efficient or tax payers will kick up a stink.

And WordPress is a very efficient platform for running many informational websites.

But why are medium sized companies not coming to us in nearly such large numbers as micro enterprises and large corporates?  Let’s see…

Budgets

I’ve noticed that medium companies often have people who are extremely good at what they do, but I do find that there are often significant skills gaps.  I’ve dealt with someone from a school (medium) who didn’t realise that you don’t have to close an application in Windows in order to see another application.  Each time she cut and paste she’d open one document, select the text, close the document, then open the receiving application and paste the text there.  Productivity, as you can imagine, was pretty poor.

I think a lot comes from budgets – many firms around the 50 people size aren’t always able to make good money.  They have to be careful where they spend it – they’re not big enough to have training departments who make sure everyone is up to date, and they’re usually busy.

Culture

Another thing with smaller firms, I believe, is that they’re often started by individuals with a lot of skills – these are flexible folk who can teach themselves and learn quickly from books and the internet.  As they grow they try and hire similar people, but eventually there comes a point where a lot of staff are there for the job.  They need training because they aren’t going to go to the trouble of autodidactism.  They have a job to do, and they’re going to do that and no more or less.

At best, they’ll get on-the-job training.

Our Marketing

We don’t do a lot of it, to be quite frank.  But perhaps our website, approach and costs simply don’t ring true with people in medium sized companies looking for WordPress training?  Do we need to get advertising in business magazines, such as those sent out by the FSB?

Summary

I suspect that the truth is that a company always needs to look at the skills of staff, but as they reach a certain size they have too much going on to give it much thought.  Once they break through that difficult 50 man barrier things seem to start to change again.

But how do we change this?  I’m not sure we can, easily.  Governments often give generous grants, and around here we have Skillworks which helps a little, and we do get local approaches – however, the person paying still has to pay a significant contribution and specialist training is never all that cheap.

Do you have any ideas of how skills can be improved in small to medium sized enterprises?  Should we be marketing our courses more proactively?  What about scheduled classroom courses that keep things at a lower cost, albeit needing more time from the attendees?  I’d love to hear your thoughts – especially in the field of WordPress.

Is WordPress Slowing My Site Down?

I noticed on my pingdom stats recently that this site has been slowing down recently. But why? Is it WordPress? Some plugins? Time for research!

I don’t really look at server response times too much, because generally it’s a bit dull, really.  If our server is really sick then the automatic alerts and text messages from Pingdom tell me to get fixing.

Anyway, tonight I just thought I’d have a look at some graphs.  And hey, there’s a bit of a shock… my own site, this one here, is getting slower.  Here’s the graph:

 

Now, what you’ll notice is that generally everything looked nice and brisk until early August 2009 when there was a marked deterioration in performance.  Then it plodded along just fine until December 2009 when it got worse again.

Is It WordPress Bloat?

I wondered what had happened to cause this – I’m especially shocked that a page load is now so slow.  I haven’t changed the theme in use for at least a year, and the plugins are generally ones I use elsewhere.  So I did a bit of thinking, and then it dawned on me when I found this list of release dates at WordPress.org:

The dates correlate exactly with the worsening performance of this site.

Now, correlation absolutely does not relate to causality.  At upgrade time I usually take a moment to review plugins, upgrade the theme, etc.  It could be that an upgrade or change to one of the many plugins in use here that has caused the slowdown.  I know it’s not traffic to my site – that’s been flat for ages, with only the occasional blip.  The server is a dedicated machine running about fourty sites that we manage, but the load is generally quite consistent and impact on different websites is fairly well managed.

But I’m a speed freak.  I like it when a website zings into view.  I love fast cars.  I love computers that don’t dither.  I love telephones that respond instantly.  So I hate that response times are now below 1s.  That’s not on!

So I’m going to try to find the cause of this slowdown – I’ll be running some experiments on this site, profiling queries, checking the database over and so on.  And I’ll document it all as a way of showing you how we at Interconnect IT do our performance tuning.  Whether I document it here or there I haven’t decided yet – I think it would make a good case study for the site.  We’ll see!  Watch both sites…

note 1 – deactivated Twitme on 03/02/2010

Oulton Park Trackday With GTDC

After two years of going nowhere near a race circuit while I concentrated on building up the business, I finally got the Elise nicely fettled by Phoenix Motorsport in Accrington and got out with the Gold Track Driving Club.

After two years of going nowhere near a race circuit while I concentrated on building up the business, I finally got the Elise nicely fettled by Phoenix Motorsport in Accrington and got out with the Gold Track Driving Club.

Loved every minute of it.

My friend Gordon was there with his economy special – a BMW 325 he picked up for a mere £400.  A spot of (very light) preparation later and out he went.  On snow and ice tyres, because that’s what was fitted.

Below’s a full set of pictures of both cars (unedited and unchanged) taken by the lovely ladies at Fresh Orange Photography.

Five Things Bing Does Better than Google

MS have, at last, come up with what appears to be a competent rival to Google. Here’s five ways in which it beats Google.

Microsoft (MS), quite frankly, gets a lot of grief in the internet world.  Sometimes it’s fair (I never like MSN, for example, from way back in the mid nineties) and often a little unfair.

But Live Search simply wasn’t up to the job.  It didn’t work well.  And I know that people that found IE defaulting to it would either work out how to change it, or simply type Google.com into the address bar.  In other words, many tried it, but it didn’t find the answers they wanted.  The algorithm has been slowly improved with time, but the damage was done.  MS knew they had to relaunch.

Bing, they felt, was the answer.  And in some ways, it’s a better and more productive tool than Google:

Bing - pretty pictures to cheer you up
Bing - pretty pictures to cheer you up

1. It’s Prettier

While I’ve heard many question the function of the landing page photo, I personally really like it.  It’s attractive, well designed, and brings a little bit of beauty into the day.  You can’t sit and surf pretty images at work, so if they’re there as part of the ‘wallpaper’ of a daily tool then that’s a lift we all need.

2. Infinite Image Search

The infinite scroll facility of the image search makes it a quicker tool to use.  Chunking of text related searches makes sense, because we can scan a page relatively slowly, but with images the human eye can scan a huge amount of visual information incredibly quickly which means that Bing’s constantly scrolling visual tool is way ahead of Google’s image search.

3. Video Previewing on Video Search

bingvideo
Bing Video - content owner's nightmare or benefit?

Searching for video content can often be a slow and painful process.  In Bing, when you get a series of videos up on screen you can simply hover your mouse pointer over a video to preview the first 30s and get a feel for the video, rather than visiting the site and waiting for a slow load.  The previews are poor quality, in order to get quick loading, but they’re good enough.  I feel this is one of Bing’s most effective innovations.

One thing where they may struggle is that if you click the video and that video has an embed option, you get it on the Bing site, rather than going through to the source site.  So a YouTube video search result doesn’t send you off to YouTube.  Content owners may not like this.

4. Site Preview

When you hover over a search result, you’ll see a small orange marker appear over to the right.  Hover over that and up pops a preview of the content you’re looking for.  Again, saves a wasted visit as it lets you scan a little bit of content for relevance – something that’s quicker this way than clicking on yet another unnecessary site.

5. It’s Not Google

Bing is, purportedly, a recursive acronym that means Bing Is Not Google.  But there’s something important in that – Microsoft is a highly profitable, focussed company that has the resources to provide an alternative to Google.  This is important – without solid competition Google will cease to innovate appropriately.  MS suffered a similar fate on the desktop – they were too dominant and rivals couldn’t compete.  Apple’s OS9 was dreadfully dated when sat next to a Windows machine of the same era, yet Windows had significant flaws.  It’s only lately with Windows 7 that MS have really started to get their act together properly – because OSX finally gave it some decent competition in certain sectors.

When you start seeing articles on how to change from Google to Bing on Firefox, you know something’s happened.

It Can Get Better

Microsoft Seadragon, with it’s deep zoom and mobile capabilities, and Photosynth technologies could be tied into the image search, for example.  As cheap processing power expands and more and more images are geotagged, this could form an astonishing visual search capability.  A shame it won’t be coupled with Google Street View – imagine what that could be like?

Search is going to become more relevant and more powerful with time.  Developers (our own Interconnect IT included) are busy creating a lot of powerful geocoded databases which will allow for some amazing mashups.  If Google and MS start fighting for dominance in this space the opportunities for users and information suppliers are vast.  Are you looking into it?

mySQL Database Search & Replace With Serialized PHP [Updated]

Ever needed to migrate a database to a new server or website (especially with WordPress and other PHP applications) and been stuck because when you do a search and replace some of the data seems to get corrupted?

Please note that a newer version of this code is now available from my Interconnect’s site over at https://interconnectit.com/search-and-replace-for-wordpress-databases/ 

Ever needed to migrate a database to a new server or website (especially with WordPress and other PHP applications) and been stuck because when you do a search and replace some of the data seems to get corrupted?

Serialized PHP Arrays Cause Problems

In PHP one of the easiest ways of storing an array in a database is to use the serialize function.  Works a treat, but the downside is that you’re not storing data with a cross platform method.  In many product development environments this would get you a stern talking to, but in the world of web development where deadlines are tight and betas are the norm, this seems to be overlooked somewhat.

So what we have are tables full of data that can’t be easily edited by hand.  For example:

;a:3:{s:5:"title";s:17:"This Week\'s Poll";s:18:"poll_multiplepolls";s:0:"";s:14:"multiple_polls";N;}

Say you had thousands of records like the one above, and the word ‘multiple’ needs to be changed to ‘happy’.  Two bits would change – poll_multiplepolls would now read poll_happypolls and multiple_polls would read happy_polls.  In both cases you would have three characters fewer to deal with.

Fine, you may think, but you can only do the change by hand because where it says s:18:"poll_multiplepolls" it now has to say s:15:"poll_happypolls" – see the difference?  S18 spells out the length of the following string, and it has to be changed to s:15

I’ll say right now, that that was a pain.  For simple arrays I wrote the straightforward PHP Serialization fixer code, which got me out of many a pickle – do the search and replace without worrying, and then run the script.  Fixed about 90% of problems.

Multidimensional Array Problem

Sadly those 10% of problems left were a real pain.  I needed something more robust.  Something more powerful.  And finally today it was a Bank Holiday in the UK – that means no phone calls… I could have a quiet day of coding and concentrate on the best solution to this problem.

What I’ve done is to write a database search and replace utility in PHP that scans through an entire database (so use with care!) which is designed for developers to use on database migrations.  It’s definitely not what you’d call an end-user tool, though I may sanitize it at some point and turn it into an easy to use WordPress plugin.  Thing is – this is dangerous code – sometimes I think it’s better to make it deliberately a bit tricky, don’t you?

It’s not that bad though – if you can manually install WordPress, you can easily configure the database connection settings.

What the code does is to look at the database, analyse the tables, columns and keys, and then starts reading through it.  It will attempt to unserialize any data it finds, and if it succeeds it will modify that data then reserialize it and pop it back in the database where it found it.  If it finds unserialized data it will still carry out the search and replace.

Use in WordPress

In most WordPress migrations you tend to have the primary problem of changing the domain name entries in content, settings and widgets – you simply need to put in the $search_for string the old domain address (including the http if it’s there) as seen on the database, and the new one into $replace_with.  Then put this script onto your server, and run it by visiting it in your browser or inputting the appropriate command line – depending on your server configuration.

Other things you may want to check are for plugins or themes that have made the mistake of storing the full server path to the installation – cFormsII does this, for example.  You will need to find out your old and new server paths and use those, in full, for another iteration of this script.

After less than a second of running, you should have a freshly edited database.  It may take a little longer on slow or share hosting, or if you have a very large database, but on my laptop I can manage around 60,000 items of data per second.

I’ve just used the script to migrate, in its entirety, with content, settings, 87 widgets (yes, really!) and hundreds of images to my localhost server.  It took moments, and the site is perfectly preserved.

Search and Replace Database download.
download file

Search and Replace Database download

BIG WARNING: I take no responsibility for what this code does to your data. Use it at your own risk. Test it. Be careful. OK? Here in the North we might describe the code as being as “Rough as a badger’s arse.” Never felt a badger’s arse, but I’ll take their word for it.