Last week I promised to put my work from the last year at Sussex University online, in case anyone's interested in it. Here you go, course by course:

  • Adaptive Systems: Modelling contextual feedback. I found Bret Victor's "Magic Ink" paper deeply inspiring, and managed to crowbar it into this course by modelling and investigating the feedback mechanisms necessary to provide a contextual UI. Whilst I was chuffed to find myself inadvertently referencing a 1998 paper by Marko Balabanovic, a former client at FP, ultimately I was less happy with this project than any other throughout the last year. I didn't feel I had learned much about the problem domain or adaptivity;
  • Advanced Software Engineering: NearMe, a location-based social app for Android. This was an assigned, rather than chosen, project from the first term: a gift, given how many similar things I'd been involved with at FP. I was the team leader for this one and rather enjoyed the shift from being an authority figure at FP to managing without authority; hopefully team-mates Mariana de Rojas-Marao and Alan Donohoe didn't find it too painful. It also gave me a chance to play with an idea I'd had a while back: using hashes of MSISDNs in uploaded address books to find friendships automatically, without raising privacy issues. This was before Path got into trouble for not using such an approach. Source code is here, and a reflective essay here;
  • Business and Project Management: a concept note, intended to be used to present a project proposal internally at a large company. I chose to suggest Google do something interesting with sensor data; it is not a suggestion I have any intention of pursuing. I started the course intending to get very involved with a project in this area, but a few things I learned put me off that idea;
  • Human-Computer Interaction, for which we did a team presentation and report evaluating an Android game, X-Construction Lite; and an individual design project, in which I attempted to improve the alarm clock. I was a bit disappointed with this one: I played with some ideas, but didn't get to a final design and instead struggled with prototyping complex multi-touch interactions, despite able help from a load of commenters on my blog;
  • Pervasive Computing: a literature review following the influence of a classic paper, "Instrumenting the city: developing methods for observing and understanding the digital cityscape", followed by an individual project where I went low-level with sensors, and examined some LEDs and light sensors - with a view to improving the performance of transmission of Morse Code across them. I really enjoyed this, never having played with anything so close to atoms before. Source code for the project lives here;
  • Topics in Computer Science introduced us to a series of pet subjects by lecturers, and was where I first came across superoptimisation, the topic of my dissertation. I wrote a literature review of the subject, and then a research plan (which I ended up carrying out);
  • Web applications and services (which was really distributed computing under a new name) had us building a fairly dull-as-dishwater J2EE application for managing a stock portfolio. Not exciting, but I can now more vividly empathise with the pain of people who do this sort of thing as a day job I guess;
  • Finally, the biggie: my dissertation, Is superoptimisation a viable technique for virtual machines? I'll ruin the surprise for you and shatter Betteridge's Law by revealing that, yes, it is. I am very happy with this: I think I've showed that the approach delivers useful results, by finding versions of several core math functions which are more efficient than those which ship with the JVM, or are produced by the Java compiler. Source code for my implementation lives here, and I'll be doing a talk about the project at the Brighton Java night next week.

Missing from the above is Limits of Computation, and enjoyable (and, I found, challenging) course covering computability and complexity theory, taught by the memorable Bernhard Reus but featuring little in the way of reports or generated source code that I can share.

Other stuff: after about 5 years of Not Getting Around To It, I finally bit the bullet and learned a functional programming language, Clojure - practicing it in the Adaptive Systems project and using it again for the dissertation. It's good fun, and I'll probably turn to it for future noodlings. I can recommend it if you'd like to learn a functional language based on the JVM.

So, that's that; I handed in my dissertation today, and my academic career comes to a close tomorrow in the East Slope bar on Falmer campus.