Pither.com / Simon
Development, systems administration, parenting and business




Testing a new boot configuration

This approach is useful for testing all sorts of changes in boot setup without actually risking a real reboot. Whether you're about to remove a hard disk, just want to test RAID with disk failures, have installed a new boot loader or just changed the configuration; this can help provide reassurance that your remote server will come back when ...



Podcasts I Hear

Once upon a time, a time that feels a very long time ago but I think was only a couple of years in the past, I spent some time regularly commuting to one of my clients.

Armed with a smart phone and headphones I discovered audio books and podcasts as an excellent way to make use of this time. I ...


Design a Formula 1 Helmet

One of the projects that has been filling, a little too much at times, my recent non-parenting hours is now accepting entries.

The site is an addition to the Infiniti Formula 1 press site to provide competitions for people to design Formula 1 helmets (or a small non-advertiser section of them) that Sebastian Vettel will wear later in the season ...


The Best (Android) Phone

I have found the next Android phone that I'd like to buy. In fact, I have paid for the next Android phone that I want to have. However there is no guarantee it will ever arrive!

I need about 30,000 more people to also place an order for what I think would be the perfect new phone, otherwise ...


Grails vs Django

Update: I revisited this Grails vs Django discussion in Jan 2015.

Before I met Grails I had spent several years writing my web applications in Perl, including work on two different in-house frameworks to try to make life easier! I also dabbled a little with Ruby on Rails but for some reason it just didn't stick (I think I ...



ssh SOA error

Logcheck on a couple of Debian Squeeze servers has been sending me some errors for a while and I finally got time to track down the cause. The errors looked like this:

Aug  5 07:00:56 build1 ssh: getaddrinfo*.gaih_getanswer: got type "SOA"

It turns out that this is due to some scripted outbound ssh connections (in this case ...


Slow LVS-NAT responses

I recently had to investigate an LVS-NAT (via ldirectord) system that appeared to be adding a significant delay to many requests that were passing through it.

The HTTP requests I was looking at were taking around 600ms (with a very large variance) to complete via the director machine, instead of a consistent 35ms when made directly to one of the ...


Migrating Chef to a new server

The Opscode wiki only provides some rather vague and incomplete hints for migrating Chef to a new server. Below is what I actually did and it worked for me. This is all running on Debian Squeeze and using Chef 0.10.8 from the Opscode provided Debian packages.

On the new server:

apt-get install chef-server
/etc/init.d/chef-server-webui stop ...

Add an SMTP server to a Grails application

Quite a long time ago I talked about setting envelope sender addresses so that I could send mailshots and get back any bounces in a useful way. The missing component to it was to process those bounces within my application. Here, finally, is my write up of how I did this.

After much searching I eventually found the excellent SubEtha ...


Convert an OpenVZ VM to KVM

I administer (mostly through SEOSS) quite a few OpenVZ virtual machines and I recently wanted to create a clone of one onto a local system for some testing. Unfortunately I didn't have an OpenVZ machine locally, so decided I'd have a go at migrating the OpenVZ virtual to a local KVM instance. The process I went through is ...


Ticket sales (PayPal, Jasper Reports, Barcodes) with Grails

Please see Part 1 for the start of this series and links to all parts.

For the SupaJam ticket outlet, we didn't need anything too fancy, just enough to present people with a couple of ticket types to choose from and a way to pay for them. Of course we still had the extra requirement of collecting a real ...


Tickets: selling, sending, supporting and checking; all in three weeks

Towards the end of May, SupaJam launched the first round of several festival ticket give aways planned for this summer. This wasn’t the first time SupaJam has given away festival tickets, but it is the first time that we've done it in this way.

Technically, it all went well. The days afterwards did include a rather large number ...


grails-mail patch for envelopeFrom (VERP)

I have previously written about setting envelope senders when sending email in grails and following comments made on that post I did actually get around to submitting a patch to the plugin.

However a change to that patch was suggested and before I managed to implement it, the mail plugin underwent a fairly large refactoring which meant I needed to ...


Grails multi-version launch script

Note: The latest version of the script below is on github.

I work with grails quite a lot these days. I have about 5 plugins and over 10 projects that I currently work on frequently. Fairly inevitably they use an assortment of grails versions. Manually chopping and changing command lines to execute different versions gets pretty tedious.

The solution - have ...


Custom (private) DTD in HTTPBuilder XML response

The Groovy HTTPBuilder library is extremely useful for interacting with all sorts of things, including remote web services that send back XML responses. In these cases HTTPBuilder will automatically use Groovy's XmlSlurper to parse the response and give you back a GPathResult to make navigating the XML super easy.

However today I've been trying to parse XML that ...