Graeme Stevenson

Software Developer & Computer Scientist

I've worked on many projects; here are a few.

Pervasive computing

I worked on the research and development of a nature-inspired coordination framework for delivery of services across networks of mobile devices as part of the SAPERE project. Here's the concept video I produced:

I worked on adapting The ONE simulator to be a testbed for evaluating SAPERE project concepts. This involved optimising a subset of the SAPERE runtime to allow it to be run on thousands of simulated nodes and reworking the GUI to use Processing and Unfolding Maps. I produced the video below to illustrate some of SAPERE's concepts applied in the setting of a simulated Vienna City Marathon.

I re-imagined Microsoft's Whereabouts Clock as a situated device to visualise the current and predicted activities of individuals by classifying sensor data sourced from their houses (physical sensors attached to doors and cupboards, and virtual sensors recognising computer activity), and smartphone (GPS and accelerometer data). The app is coded in Java, with a Processing GUI. I used the Weka machine learning toolkit to support the prediction of current activities using Decision Trees. The prediction of future activities is based on simple time-series analysis. The video below shows the Whereabouts Clock in action, with a much earlier version of the SAPERE simulator.

Aggregate is a small Java library I wrote while working on activity recognition to combine data from a classifier ensemble into a single result. The library supports Averaging, Voting, Max selection, and Dempster's Rule of Combination.

I led the development of Construct, a Java-based pervasive middleware that handles data management, information processing, and entity interactions. Construct acts as a distributed repository for sensor data (modelled using RDF and OWL). Each networked peer stored data from a range of connected sensors, and can provide data on demand to application queries (written in SPARQL). Using zero-conf to discover peers, Construct nodes distribute data among themselves using gossiping. Consequently, each application accesses only a local view of the environment’s global data (further reading).

Being middleware, I have no pretty pictures to show you, so here's the project logo, which still adorns my favourite mug.


SenseStar is a tool for working with sensors and the data they produce. I designed it to: support the rapid markup and storage of sensor data, support simulated playback of sensor data, deliver live or replayed data to 3rd party software components, and provide a set of easily configurable components that carry out common tasks in parsing and providing access to sensor data.

Ontologies and Data modelling tools

Context models support developers working with pervasive data by providing a shared representation of the environment on which to base this interpretation. Ontonym, is a set of small ontologies written in OWL that represent core concepts in pervasive computing that were used for applications developed as part of the Construct project, described above. Later work I carried out with Juan Ye developed a top-level ontology model to support reasoning about the associations between concepts in a generic way.

Logan is a Java library for the Semantic Web that provides support for reasoning over Named Graphs (or Quads). Logan extends the NG4J (Named Graphs for Jena) library, using the Jess rule engine to support inference over Named Graphs.

Sapphire is a tool that allows Java developers to work with OWL ontologies using a domain specific API instead of a general-purpose reflection-like API, eliminating a whole class of potential sources of error caused typographic mistakes. Sapphire takes OWL model schemata as input and uses the BCEL library to generate a domain-specific Java model corresponding to the types and properties defined in the OWL model. Each generated class file stores information about its source ontology in runtime annotations and a proxy under the hood translate methods calls made to the Java API to the underlying reflection-like API provided by the Jena library. Sapphire has a number of tricks for smoothing the mapping between languages, including allowing objects to gain and remove OWL types at runtime. You can read more about it here.

Other projects

Back in the Room is a prototype Android app that aims to raise smartphone users’ awareness of their usage habits — alerting them to and assisting them in regulating their smartphone use. The app aims to deliver interventions that increase the likelihood of positive behavioural change without frustrating users. The screenshots below illustrate how the app changes the colour of the phone's wallpaper the longer the phone is used. Alerts are also displayed to users as they change application, showing how long they've been active.

Back in the Room Screenshots

Brewhouse is an iOS app I'm developing to assist brewers in designing recipes for beer. I'm learning Swift and iOS as I go. It'll be in the app store in early 2017.

Brewhouse Screenshots

Thrill of Victory is an homage to the original Championship Manager series of games from the 90's that I loved to play as a kid. I started the project so I could have a play with JavaFX. It's a work in progress; I add features when I have free time, which is not as often as I'd like...

Thrill of Victory Screenshot