It's all in the detail
  • slide
  • slide
  • slide
Posted on: 16 November 2016
I've had a lot of alarm clocks over the years, and I've never been 100% happy with any of them. Maybe I'm just too demanding, but here's what I want from an alarm clock, in no particular order:

Read More
Posted on: 10 September 2015
Why Is Apache Ignoring Some Of My Virtual Hosts? Last night I learned an interesting lesson about Apache virtual host directives. On my development machine, I use named virtual hosts for the various projects I work on, a bit like this:

Read More
Posted on: 17 December 2014
I've built a few sites now using the Concrete5 CMS, and on the whole I really love working with it. It provides a whole heap of really nice user-facing functionality out of the box, and makes it really easy to add your own. However, today I had to build something which seems routine and trivial, and found no way to do it.

Read More
Posted on: 22 July 2014
We've been using the excellent Gearman in our production systems to handle distributed job processing, and it's been working very well for us. However, just occasionally it will throw a weird one our way.

Read More
Posted on: 12 July 2014
This is another of those "interesting" tech support cases (where "interesting" means painful and tedious). Our platform collects lots of data for our customers, and generates lots of nice juicy reports for them in an assortment of formats. Being a sensible developer, I'd done this using a typical MVC pattern, so there are models which get data out of the database, and then different views to format it into each report. The support case was that some numbers were being displayed with a ridiculous number of decimal places in Excel reports.

Read More
Posted on: 03 September 2012
We've been seeing a lot of contention on one of the larger tables in our database recently. This table has a few billion rows (around 300GB), and uses MyISAM. As our usage has increased, we've started seeing more SELECTs being blocked by UPDATEs, so decided to switch the table to use InnoDB to allow concurrent reads and writes.

Read More
Posted on: 09 December 2011
I've got a pretty long-running script. In our live environment this runs under command line PHP, but for convenience on my dev machine I just run it through Apache. Initially I got an error: Fatal error: Maximum execution time of 30 seconds exceeded No problem - just up the max_execution_time parameter to zero in my php.ini to give an infinite execution time, restart Apache, and start again. Trouble was, after about ten minutes, I got a slightly different error:

Read More
Posted on: 24 June 2011
So, one of the main reasons I chose an Android phone instead of an iPhone (apart from not wanting to follow the herd) was so that I could develop my own apps and run them on my own phone. Yes - I know you can write apps for iOS as well, but I'm all PC, Linux and open source, and Mac development is going to need a bigger technology shift than I want to make right now (although I wouldn't rule it out in the future).

Read More
Posted on: 02 October 2010
I've been using Linux as my main development environment for a couple of months new (full details over here). The transition has been pretty easy on the whole, but I've been struggling with one of the most basic tasks - copying and pasting. For historical reasons, Linux has two ways of copying and pasting:

Read More
Posted on: 23 April 2010
I'm spending quite a lot of time at the moment working on performance optimisations for Analytics SEO, and learning much more about the subtle differences between the different MySQL storage engines.

Read More