http://www.mth.kcl.ac.uk/staff/a_pushnitski.html