My new project, ThingStudio, is at It's UI builder for IoT.

Using MQTT with Meteor

There are a lot of options when using MQTT brokers in conjunction with Meteor. This article lists the pros and cons of various approaches. It assumes a basic background in Meteor and MQTT. If you don't have that has some great tutorials, and has a good background on MQTT.

The most complicated doorbell in the world?

My wife has been complaining about not being able to hear the doorbell when she is in the back bedroom or the garden. So, I decided to rig some extra chimes for her...

ESP8266 Analog / Digital Converter Nodemcu ADC

I just realised that the command in the NodeMcu software for the ESP8266 chip returns values in millivolts. The current documentation just says that it returns the ADC value. So, thanks for the pre-preprocessing, but zero points for clarity :-) Hope this helps someone. I've just adjusted the docs.

Big Stroboscopic Zeotrope

I just shipped out a very large strobe system for an installation with the new SBTRKT tour...

HTML5 Remote troubleshooting application

Trouble Tools Two ( is an experimental webapp for remote troubleshooting sessions. It combines a live document manual system with a chat room, so participants can view the same manual page and chat at the same time. It is written using the Meteor framework.

Quizzl HTML5 Real Time Quiz Alpha release

I've finally got round to making something that has been sitting around in my brain for several years, a real-time quiz webapp.

Nexus 7 2012 & Lollipop Performance Problems

For many owners of the original Nexus 7, the release of of Android 5, Lollipop, has been something of a nightmare. In particular, many users are finding that the performance of the tablet has worsened to the point that it is almost unable. I've found a quick fix that worked for me.

Raspberry Pi Camera - First Look

How to get started with the Raspberry Pi camera, and some first impressions.

Tracking Falling Objects for Slow Motion Video

Falling objects are a staple of slow motion videos, however, they can make problematic subjects. I’ve made a rig that can track small objects as they fall.

Super Simple Raspberry Pi Video Kiosk

How many times have you gone into a museum and had a supposed interactive exhibit not work? It's pretty difficult to expose computers to the general public and expect them to keep working through hell and high water.
Here's a really simple recipe for creating an HD capable video kiosk from just an Arduino and a Raspberry Pi.

Native Apps vs WebApps - Horses for Courses

Over the last couple of years there has been a lot of spurious argument about the merits of native applications versus browser based web applications. The reality is that there are pros and cons of both approaches and the application context and business criteria should be the guide to which to select rather than rather meaningless generic arguments.

Cadillac Ring

A design for a ring inspired by 1950's car designs.

Audience Tools - Gathering Collective Wisdom

The Audience Tools project started when I was asked to look into the possibility of creating a tool which enabled a facilitator to gather feedback quickly from an audience as she was presenting a PowerPoint presentation. The result is an HTML5 single page app that provides real-time voting, questions and discussion topics, all integrated with standard PowerPoint.

Simple High Speed Flash Photography Setup

Creating photographs that capture extremely fast events is simple with just £20 worth of hardware and a flash gun.

Belshazzar 1 - Writing with Light

Belshazar is an experiment in large-scale raster displays. It uses a travelling bar of ultraviolet LEDs moving across a screen of luminous paint.
It’s intended for displaying transient textual and image information, like Twitter messages, that will gradually fade away as they age. It can be scaled up to hundreds of LEDs on the bar and can be as long as you can make a luminous screen, so it can span a whole wall of a gallery.

Test Article

  class HTMLwithPygments < Redcarpet::Render::HTML
      def block_code(code, language)
        sha = Digest::SHA1.hexdigest(code)
        Rails.cache.fetch ["code", language, sha].join('-') do
          Pygments.highlight(code, lexer: language)

    def markdown(text)
      renderer = true, filter_html: true)
      options = {
        autolink: true,
        no_intra_emphasis: true,