Atom Feeder

Posted by Ray Miller on Sun 14 July 2013

In my last article, I mentioned that I was working on a little application to automatically send a tweet when I publish a new blog post. This is now complete and, if all goes to plan, a tweet will shortly appear in my Twitter stream advertising this item.

Read More

Tweeting from Clojure

Posted by Ray Miller on Sat 29 June 2013

I'm working on a small Clojure application that will update my Twitter status whenever I post a new article to this blog. Services like already provide this functionality, but I thought it would be instructive to develop my own solution. After a little research, the tweeting component turns out to be very straightforward to implement.

Read More

Computing Partitions of a Set

Posted by Ray Miller on Fri 21 June 2013

In an earlier article on optimization, we evaluated all the different ways of splitting 13 items into sets of 5+4+4 and, applying a cost function to each partition, found one that minimised the total cost. It turned out that the partition 13=5+4+4 gave an optimal solution, but we didn't know in advance that this would be the case: perhaps splitting the items into 13=6+4+3 would have been better.

The careful reader may also have noticed that the algorithm we used to generate the partitions produced duplicate entries. This didn't matter in that particular application, as we were just interested in finding an optimal split, but there are times when we want a unique list. In this article we develop an algorithm that generates a list of all the partitions of a given set into n subsets.

Read More

A Little Optimization Exercise

Posted by Ray Miller on Tue 11 June 2013

The other day I had to plan some capillary sequencing experiments for our lab. Each sequencing experiment takes a DNA sample and set of primers as input. The primers and DNA are stored on 96-well plates, which are loaded onto a Tecan liquid-handling robot for picking. We have to generate 707 sequencing reactions from 436 samples, with the DNA coming from 13 plates and the primers from 47 different plates.

In total, we have 47+13+8=68 plates in play (the 8 additional plates are the destinations for the primer/DNA mix for sequencing). The challenge is to split up the work into as few experiments as possible, with the constraint that the Tecan robot can handle at most 27 plates at a time. With this limitation, we see that we need at least 3 experiments. But is there a combination of input plates that will enable us to complete the work in 3 batches? This problem is small enough that we can use a brute-force approach that evaluates every combination of input DNA plates.

Read More

Introducing Iterator::Simple::Util

Posted by Ray Miller on Sun 24 June 2012

I recently uploaded my first module to CPAN. Iterator::Simple::Util implements most of the functions from List::Util and List::MoreUtils for the Iterator::Simple framework.

Read More

Up and running!

Posted by Ray Miller on Wed 6 June 2012

Well, my new web site is up and running. I spent most of the bank holiday weekend writing a simple content management system to host the site, but I hope to move on to writing some actual content RSN. This will be a technical blog with articles on Perl, Clojure, and whatever else takes my interest.

Read More

Book Review - Secure Coding: Principles and Practices

Posted by Ray Miller on Tue 1 June 2004

This slim volume contains a wealth of information that will be of interest not only to software developers, but to anyone responsible for the deployment and operation of computer systems. Indeed, if I had one complaint about the book it would be that the title is misleading: it is not so much about secure coding as the overall software development process, and relatively little is said about coding per se. But do not let this put you off, programmers will benefit from reading this book too.

Read More


This is the personal web site of Ray Miller, a software developer and one-time mathematician living in Cambridge, UK.