RUM: Shared Distributed Memory

RUM is an in-memory data grid library which uses user-space networking to achieve performance. Applications can use RUM to access memory located on servers.
Technologies used: C++, DPDK


Custom Embedded Operating System

This project saw the creation of a custom embedded operating system for a specific programming language. The goal was to improve upon the resource usage of existing off the shelf products. This project was carried out independently, and included every aspect of design and development from driver, network stack, threads, interrupts, memory system, as well as programmer interface. The result was less resource usage, and faster performance.
There was also documentation, and presentations about the project. This OS was used in a deployment at the urban big data centre at Glasgow university.

Technologies used: C, MSP430 assembler, memory mapped IO, DMA and I2C interface.

Wireless Sensor Network Simulator With Xen

Using the Xen hypervisor as a platform for simulation, embedded operating systems were ported to the Xen platform, and run as active domains to overcome the issues with event-based simulation. A network model was also created enabling users to simulate network topologies. This required kernel hacking, networking, routing and lots of debugging.
There was also documentation, and presentations about the project.

Technologies used: C/C++, Java, Python, Xen, TinyOS, and Contiki. Also wireshark, tcpdump, java debugger, sed, awk.

GPU Accelerated Weather Simulator

There was also documentation, and presentations about the project.

Technologies used: C/C++, OpenCL (AMD & NVIDIA GPU, and multicore NUMA chip), OpenMP, python, linux, netCDF format.


The following is a list of undergraduate projects that i have proposed and supervised. There is a mix of honours and masters projects.

  1. Automatic Scheduling of Actors on Heterogeneous Hardware - Daniel Millevik
    The goal of this project is to Explore automatic scheduling of actors across different devices.

  2. Simplifying OpenCL Programming With Insense Actors - Kristian Hentschel
    The goal of this project is to add simple types to Insense to enable the simplification of openCL programming by using actors.

  3. Intelligent Type System for Memory Optimisation in Actor-based Languages - Craig McGlaughlin
    The goal of this project is to implement static analysis at compile time to enable safe memory optimisations in message passing languages.

  4. A Virtual Machine for the Insense Language - Callum Cameron
    The goal of this project is to create a virtual machine interpreter which will run on sensor motes. This work has been published.

  5. Graphical Design of the Structure of Actor Systems - Alexander James Aavang
    The goal of this project is to both design new, and express existing structure of component based programs in a visual way, enabling the developer to focus on application logic, rather than structure during development.

  6. Wireless Sensor Network Simulation with Cgroups - Shinyi Breslin
    The goal of this project is to post an embedded os to run on linux, and use the resource control given by cgroups to tightly control how many and how often they may use the resources of the machine. Hence, this will enable better sharing of the resources of the machine, and give a more realistic simulation of the sensor network.

  7. Cycle Detection for Reference Counted Memory on Sensor Motes - Javier Lazaro Munoz
    The goal of the project is to be able to detect cycles with reference counted memory on sensor motes, but without tagging all the heap memory.



My main hobby at the moment is my music. I play the saxophone, and have previously played with many different type of big, funk, soul, wedding, and function bands. Currently working on putting together a saxophone quartet in Tokyo.