I am a Software Engineer based in London. Since graduating with First Class Honours in AI and Computer Science from the
University of Edinburgh I have been working as a Software Engineer in a diverse array of technical projects
and disciplines.
My key experiences include developing the full stack (frontend, backend, cloud infrastructure) for my own company's web/mobile applications, high-TRL
software assurance for embedded systems, and working as a DevOps and backend engineer for a large-scale UK Critical National Infrastructure project.
My passion is problem solving, which drives me to apply coding to a wide variety of
domains and areas. My primary software expertise is in backend and DevOps engineering, however, I also have experience in
Machine Learning, DevSecOps, MLOps (Intel-certified), Test, Cloud (Azure, AWS, and little bit of GCP), Robotics (ROS), and Frontend (iOS, Web).
My key domain expertise is in CyberSecurity and Artificial Intelligence,
however, my focus on certain skills and areas is continuously changing in order to keep up with the ever-evolving
world of technology and software.
I thrive in a collaborative environment and I am always looking for new opportunities to learn
and adapt my skillset further. When I am not coding, I love to go rock climbing, snowboarding, and play guitar.
Experience using Rust, Python, Docker, Bash, VSphere, Ansible, Packer, and Azure. I have worked directly with clients from an array of highly technical UK public sector departments/organisations, including: software assurance work for high-TRL embedded systems, and DevOps and backend engineering for a UK Critical National Infrastructure project.
Experience using Swift, Typescript, Bash, and GCP. On top of working on the API and iOS stacks, I was also responsible for building automation tools for optimizing internal workflows across all engineering teams, as well as, talking with clients to discuss the software requirements of their product.
Experience using Swift, AWS, Stripe, PHP, and JavaScript. For this I developed the AWS cloud infrastructure, backend RESTful APIs connecting to a MySQL DB, a prototype iOS app, and a commercial grade website. This company received over £2k in grant funding and was endorsed by Edinburgh Innovations, and Edventure.
Experience using PHP, JavaScript, MySQL, Docker, GitHub, and AWS. Agile was used to ensure robust and efficient development.
First Class award with Honours for BSc Artificial Intelligence & Computer Science
6 Distinctions in Mathematics, Physics & Chemistry, Information Technology, French, Art, and Life Orientation
DR PHIL (Disinfecting Robot Prioritising High-Interaction Locations), a fully automated door handle sanitisation robot.
Acted as the Software Leader for my team taking responsibility for: software project management, the virtual testing environment, the mobile frontend control application, the NoSQL DB backend, and the vision capability using YOLO ML models.
Description
Dependencies
Repository
Developing and analysing varying algorithm combinations for solving the travelling salesman problem. Algorithms developed include: Two-Opt heuristic, Swap, Greedy, and my custom algorithm Temperate. Overall the most efficient algorithm was Temperate with Swap & Two-Opt.
Operator, Random, Graph
A drone air-quality mapping system. The drone's movement is constrained to moving in fixed increments, and only angles divisible by 10. The system retrieves coordinates of air-quality data collection stations, and no-fly-zones as Geo-JSON objects from a webserver. The system then uses these to find an optimal route to pass through all the stations without going into any no-fly-zones.
MapboxSDK, JUnit
Description
Dependencies
Repository
I developed a NodeJS REST API server as a means to store data from my iOS data collection app securely, robustly, and efficiently. This server used IPv4-based allow-listing for security so only devices connected to my local network that had been manually authenticated could perform requests. For data storage I used MongoDB which connected to the server via a package called Mongoose.
Express, Mongoose, BodyParser, Express IP Access Control
A simple file-serving REST API. A user can request a file by filename, if it exists the API will return it in the response.
None
Description
Dependencies
Repository
Analysing the relation between: ASD-related PubMed literature and SFARI genes, the biological processes related to each of the Gene2Go SFARI gene equivalents, and the pathways of the top 2 MCL clusters from the SFARI genes protein-protein interaction network across all gene-scores.
Matplotlib, Pandas, BioPython, NumPy
Analysing the relation between: ASD-related PubMed literature and SFARI genes, the biological processes related to each of the Gene2Go SFARI gene equivalents, and the pathways of the top 2 MCL clusters from the SFARI genes protein-protein interaction network across all gene-scores.
Matplotlib, Pandas, BioPython, NumPy
Description
Dependencies
Repository
Using MailX to spoof emails, WireShark to snoop and intercept internet traffic, and creating a script to perform a MITM attack on a given network.
MailX, WireShark
Using buffer overflows to exploit a vulnerable C program. This includes overflowing input fields and injecting shell code.
None
Description
Dependencies
Repository
An iOS app to allow users to monitor and communicate with their DrPhil robot. Including setting cleaning schedules, and getting notified if the robot is stuck.
Firebase
An iOS app that connects to a Polar H10 device for ECG and Accelerometer data collection. For secure and robust data storage this app connects to a custom NodeJS REST API server which stores all the data in a MongoDB instance. This server uses IPv4 based allow-listing for security.
Firebase, PolarSDK, Alamofire
An iOS app that allows users to connect to a Polar H10 device for live fall detection inference. Local notifications (APNs) were used to notify a user if a fall was detected, and emergency notifications (text messages) were used to notify a user's emergency contacts if a fall was detected and the user is unresponsive. This app also integrated account creation functionality in order to retrieve biometric user inputs for fall detection inference.
Firebase, PolarSDK, Alamofire, TensorflowLite
Description
Dependencies
Repository
Width and depth experiments were performed when training these CNNs using L1/L2 penalty, and Dropout regularization techniques.
SciPy, SciKit-Learn, NumPy
This was done by developing raw ML algorithm implementations with NumPy.
NumPy
Private Repository
Experimentation with CNNs (namely ResNets), and LSTMS on my own fall detection dataset. The best performing model was ResNet152 with a 2s window size which achieved 92.8% AUC.
PyTorch, NumPy
Description
Dependencies
Repository
For language identification a character-level language model was trained using the Brown corpus and tested on a Twitter corpus. This Twitter corpus had to be preprocessed and cleaned to help the model generalize across different text contexts. For PP-attachment disambiguation a Naive Bayes model with Lidstone smoothing and a Logistic Regression model with feature templates were developed.
NLTK, Numpy, Collections
A Hidden Markov Model for POS-tagging was developed using the Viterbi algorithm to ensure efficient computation. The Hard-EM algorithm was also developed as a means to train this Hidden Markov Model in a semi-supervised manner, in situations where unlabelled data outweighs labelled data.
NLTK
A CLI for talking to ChatGPT, saving conversation logs, and turning code blocks (language agnostic) from it's responses into executable shell commands.
openai, termcolor
Abstract
Timely and reliable detection of falls is a large and rapidly growing field of research due to the medical and financial demand of caring for a constantly growing elderly population. Within the past 2 decades, the availability of high-quality hardware (high-quality sensors and AI microchips) and software (machine learning algorithms) technologies has served as a catalyst for this research by giving developers the capabilities to develop such systems. This study developed multiple application components in order to investigate the development challenges and choices for fall detection systems, and provide materials for future research. The smart application developed using this methodology was validated by the results from fall detection modelling experiments and model mobile deployment. The best performing model overall was the ResNet152 on a standardised, and shuffled dataset with a 2s window size which achieved 92.8% AUC, 7.28% sensitivity, and 98.33% specificity. Given these results it is evident that accelerometer and ECG sensors are beneficial for fall detection, and allow for the discrimination between falls and other activities. This study leaves a significant amount of room for improvement due to weaknesses identified in the resultant dataset. These improvements include using a labelling protocol for the critical phase of a fall, increasing the number of dataset samples, improving the test subject representation, and experimenting with frequency domain preprocessing.
My report for the UG3 System Design Project detailing my main contributions and lessons learned while developing our autonomous cleaning robot DR PHIL.
Description
Dependencies
Repository
This project involved simulating a MIPS processor in C. This processor takes 32-bit binary instrucions and performs the required operation by using logic gates to parse the inputs, and pointers for dynamic memory allocation.
None
Description
Dependencies
Repository
ROS was installed on our RasPi to utilize it's useful robotic packages. This helped us configure SLAM for route mapping and planning, as well as, cleanly integrate Python scripts for custom functionalities (ie. door handle recognition, door handle sanitisation arm path planning, and door opening).
RosPy, GraphViz
The Polar H10 device was connected to the iPhone via Bluetooth. The ECG and Accelerometer data was then streamed from the connected device via built-in functions from the Polar SDK.
PolarSDK
An iOS app that allows users to connect to a Polar H10 device for live fall detection inference. Local notifications (APNs) were used to notify a user if a fall was detected, and emergency notifications (text messages) were used to notify a user's emergency contacts if a fall was detected and the user is unresponsive. This app also integrated account creation functionality in order to retrieve biometric user inputs for fall detection inference.
Firebase, PolarSDK, Alamofire, TensorflowLite
Description
Dependencies
Repository
A BASH & ZSH CLI tool that provides developers with the ability for optimising the execution of commonly performed tasks, commands, directory navigations, and environment setups/script executions.
openssl, git
A CLI for creating customisable and tunable ASCII art from images.
numpy, pillow
A CLI for creating customisable and tunable ASCII art from images.
image
A python script for generating mock sensor waveform signal data with tunable noise.
numpy, matplotlib, pydantic
Turning rational numbers into fractional forms using concepts from the Farey algorithm.
numpy, yaspin
Description
Dependencies
Repository
Finding bugs in a java application by functional testing, analysing code coverage of the functional test cases, generating automated test cases with EvoSuite, and adding further functionality with Test-Driven Development.
JUnit, JaCoCo