Newest to oldest progress screen grabs
I started writing an operating system (OS) by following the OSdev.org bare bones tutorial. In order to progress beyond this "hello world" result, I have had to drastically improve my competence with C, C++ and CMake. I had to learn AT&T and Intel assembly syntax, teach myself about manual linking and have had to implement various bare metal CPU controls.
At the time of writing, the OS boots using a pre-made grub multiboot configuration and the kernel provides stdout, stderr and the ability to get and draw to a pixel frame buffer. using 32-bit colour (unused transparency). The primary goal of this project is to implement a public domain C library in order to run a freeware version of DOOM. There are many basic syscalls currently missing but they are being added one at a time.
ArtieLAB main GUI
Throughout my PhD, I wrote Python code to control instruments, process data and for image processing applications. Because of this experience I was approached by my research group while working as technical specialist in the teaching labs. They tasked me with re-writing the existing proprietary LabView software which was shipped with their latest system: a magneto-optical Kerr effect (MOKE) microscope set-up. They employed me alongside my technical specialist role. The result is ArtieLabUI, an open-source replacement which is faster, and modifiable by the group. It was developed specifically for their application and with their input throughout. At over 5000 lines of Python (and 100 of C++), this is my largest project yet. This required real-time image processing, multithreading, C++ interfacing in Python, UI design and a lot of reverse engineering.
In order to expedite experimental prototyping, I wrote a Python package which contains wrappers for interfacing with the instruments I used regularly. This includes lock-in amplifiers, various keithley instruments, oscilloscopes and some custom kit like the switch box, which I helped design and iterate on. Originally only intended for my use, it has since become instrumental in other research groups development of control software. Several GUIs have been developed for more routine experiments. The source code, and various examples of how to use it, are linked below.
Because of my expertise in this, I was asked to write a guide for using Python to interface with the equipment in the project teaching labs (3rd and 4th year undergraduate labs). Finally, some LEEM analysis scripts by TAdeJong were heavily modified to use them for PEEM analysis instead.
I wanted a website to host photos of projects on and to be able to easily share the things I have made in a style similar to a blog. This website has since evolved to include a highlights page which serves as a sort of summary of my achievements.
This website uses a heavily modified template which uses Jekyll and GitHub pages. The original theme is from HTML5 UP template which was converted to use Jekyll by Andrew Banchich. To this template, I have added pop-up images and gallery support. I have also changed several of the default layouts to suit my purposes.
My brother and I started working on a game engine in Kotlin, as a way for us both to explore kotlin as a language and it's features. Although it has a working level editor and playable levels, development has been abandoned since the announcement of Baldur's Gate 3, a project with similar goals but with an infinitely larger budget.
HackNotts is a hackathon (24 hour programming and hardware event) hosted by the Computer Science department's student society at the University of Nottingham. In 2016, my team and I, with no real project idea but hoping to continue our previous success at HacknNotts, turned up carrying a budweiser box full of batteries and simple electrical components and breadboards. We also brought a raspberry pi matchbox linux computer and some arduino microcontroller boards of various sizes.
With these components, and the knowledge that there was a prize for best hardware and best Amazon Web Services/ Amazon Alexa implementation, we decided to make a remote control cardboard box which we covered in christmas decorations and attached wheels to. We made an Alexa service which would respond to certain vocal commands to communicate with the raspberry pi, which in turn controlled the motors, LED grid and LCD screen through an arduino.
The raspberry Pi, running a python script, was capable of controlling the rover by detecting a face and following it when asked. The original idea was to have it search for a certain named person and to then approach them, but the face detection was a lot easier to run in real time than face recognition (and we ran out of time). As development went on, we realised that this rover was becoming more and more like a pet so we decided to make it more appealing. I was tasked with animating an 8x8 LED grid to serve as a cute face. There was also a screen which displayed the status and various LEDs and lights for decoration.
In the end, we had several vocal commands in various forms. Our favourites were "follow me", "Go forward for < n > seconds" and "roll over", the last of which caused the cute LED grid face to rotate 360 degree over a second or so. Our demonstration had some hickups but our "project showed great promise". This, and the fact that people made some seriously profitable banking services for Alexa, meant that we did not win the "Best Alexa Implementation" but we did win the best hardware hack, getting electronics kits as a prize.
Hacknotts is a hackathon (24 hour programming and hardware event) hosted by the Computer Science department's student society at the University of Nottingham. In 2015, my team and I, with no real project idea, turned up carrying a budweiser box full of batteries and simple electrical components and breadboards. We also brought a raspberry pi matchbox linux computer and some arduino microcontroller boards of various sizes.
With these components, and inspiration from the success of the (topical) curiosity rover landing, we decided to make a remote control cardboard box which we covered in christmas decorations and attached wheels to. We made an android app (with animated buttons!) to connect to the arduino via bluetooth and use the touchscreen as a d-pad style 4-directional joystick.
The drive circuitry used an H-bridge configuration to drive both rear wheels to go forward/backward and driving one wheel forwards and one backwards simultaneously to turn left and right. The photosensor simply caused the rover to randomly turn left or right when it detected an obstacle. With refinement, it could be made to reverse and try various directions or any other manner of responses to detecting an obstacle (we would probably draw inspiration from a Roomba if we wanted to make it more sophisticated).
Anvil Hack 2015 was my first hackathon. Hosted at Goldsmiths, University of London, my team and I left Nottingham at 6am to make it for the 10AM start, alongside two other Nottingham Teams. Upon arriving, the various prizes and categories were announced. We decided to tackle the "best Pebble smartwatch application". After some deliberation, we decided to make a dice rolling application that could roll any number of dice with any number of sides, defined by the user. Using the smartwatch's buttons or the android app to set up the roll, the watch would then generate the random number as the user shook their wrist as if rolling dice. The app also implemented a macro parser similar to/inspired by roll20.net in which a user can define, using certain syntax, many types of complicated dice roll used in tabletop gaming (e.g. if 10 six sided dice are rolled, how many have a result greater than 4?).
This was my first experience using an API and it taught me a lot about programming in general. We ended up winning with our idea as the panel of judges all played role playing games and loved the idea! The execution was fairly mediocre, in hindsight, but with a bit of work, it could have been a very useful application for the right kind of person. Unfortunately, I cannot find the sourcecode for the android app. The app that runs on the smartphone was hosted on GitHub and can be reached below.
If you are interested in further information about any of these projects or are interested in offering me a chance to apply to your comapny, please do not hesitate to contact me using the form below. If you would like to see a summary of my projects and interests, please visit the highlights page using the link below: