Software Developer & Computer Scientist
You might like to know
I'm a software developer and a computer scientist with a research background.
I've been building software systems for over 15 years, and have an enjoyment for refactoring legacy code that colleagues have described as "bizarre, frankly".
I've worked in many areas, including sensor data modelling and management, context-aware systems middleware, self-organising
distributed systems, and situation recognition and prediction using machine learning.
I've published over 40 papers, and have an h-index of 14.
I'm happy to travel and just as happy to work remotely.
- I worked on the EU-project Self Aware Pervasive Service Ecosystems (SAPERE) while studying for a PhD, and later held a research fellowship.
- I worked on the design and development of a novel nature-inspired platform for delivery of services across networks of opportunistically connected mobile devices.
- I was a lead writer on and contributor to project deliverables, arranged meetings with international partners, and co-authored 23 publications and a book chapter.
- I developed Construct, a distributed middleware platform supporting the development of context-aware applications.
- The platform was developed in Java and used internet and Bluetooth connectivity as a means of collecting and disseminating information.
- I was the teaching assistant for the Masters Distributed Systems class—a role that involved preparing material for and running lab sessions, administration and marking, chairing reading groups, and occasional lecturing.
- I also supervised several prize-winning final year projects.
Programming languages: I do most of my
work in Java, and I've recently used Swift and
Kotlin in a couple of side projects. At points in the past, I've
worked with Ruby, Python, and R.
Data modelling: I've spent over a decade
immersed in Semantic Web technologies—working with RDF, RDFS, OWL. Notation3 is my serialisation of choice.
I've also had the opportunity to work with XML, JSON, YAML, and relational data too.
Databases & Datastores: I typically use
MySQL or SQLite when working with relational data (The triple and
quad stores I use have a relational back end). For querying data, I've used SQL, SPARQL,
and SPARQL Update, as well as programmatic manipulation—all standard stuff.
Version control systems: I started out using
CVS, quickly moved to Subversion, and then fell in love with
Mercurial (due in no small part to the excellent
I've also used Git on occasion.
Machine learning: I've done a lot of analysis of smart-home
sensor data using time-series analysis, clustering, genetic algorithms, decision
trees, and ensemble classifiers.
Web-dev: Most of my work is on back-end systems.
Other tech: Some of the other tech I've worked with, in no particular order—Zero-conf, Ubisense, Bluetooth,
the Jess Rule Engine, OSGi, BCEL, Maven, Hibernate, Weka, and Jenkins.
- PhD, Computer Science, University of St Andrews
- Developed tools for analysing rich, noisy sensor data in pervasive systems.
- Used Semantic Web technologies (RDF, OWL, SPARQL, Jena, Pellet) to model and reason about the interactions between People, Places, Objects and Time in pervasive environments.
- Developed Java software (using Weka, JGap) that used machine learning techniques, including Decision Trees, Genetic Algorithms, and Ensembles to generated human-readable situation recognition rules from the knowledge model.
- MPhil., Computer Science, University of Strathclyde
- Conducted research on the architecture of sensor-driven, context-aware systems.
- Designed and implemented an XML-based sensor data aggregation service to collect and process data from physical and virtual data sources and deliver it to applications.
- Architected the software as a networked graph of distributed components, communicating via the Java Messaging Service, JMS.
- BSc. (Hons.), Computer Science, University of Strathclyde