Master of Science in Computer Science, Distributed Systems Track
September 2016 to September 2019
York, United Kingdom
Master of Engineering (Hons) in Electronic Engineering, 1st class
October 2010 to June 2014
International Baccalaureate Diploma, score: 34
September 2005 to May 2010
Embedded Software Engineer
September 2019 to present
After my internship, I joined ABB medium voltage drives permanently as an embedded software engineer on the ACS6080 software team. My work consists of embedded software development in C++, as well as the occasional feature on the hardware side, continuous integration server administration and build system maintenance.
March 2018 to August 2018
As an R&D intern at ABB medium voltage drives, I joined the software team working on the subsea drive project. I worked on the C++ product software codebase, which consists of a real time kernel, device drivers, communication protocols and control software.
My primary task was to port an existing real time simulation framework, which enables the product code to be executed directly on PC. I complemented this framework with physical models of the converter and asynchronous motor in order to simulate the control software behaviour. Using this system, I added support for integration tests that can be executed on the PC as well as on the continuous integration servers. I also extended the framework with an interactive GUI that plots internal signals with full resolution in real time, to aid in the development of control features.
At the end of the internship, I continued working part-time alongside my studies to further develop the simulation framework, as well as merge my work into the department-wide codebase.
August 2015 to August 2016
As a trainee in Syngenta's Project, Program and Portfolio Management Excellence team, I worked primarily on administrating and further developing the team's SharePoint communication sites and teamspaces. I also provided support in meetings and assisted with data input tasks.
My secondary role was to observe the processes and practices followed by the other team members and use my IT and engineering knowledge to optimise them where possible. With that in mind I developed several Microsoft Excel macros for automating routine data manipulation tasks and made suggestions for tool improvements, such as using APIs to automate parts of the workflow. I also took the initiative to document the details and results of my work in detail so that it can be easily resumed in the future.
After the end of my 1-year traineeship I was contracted part-time to provide sporadic technical support to the team on a need-basis, which I did until August 2019.
Freiburg im Breisgau, Germany
July to September 2010
During this summer internship I produced a literature survey of solar cell imaging methods, and then performed photoluminescence imaging and resistivity measurements in order to determine the characteristics of various experimental types of photovoltaic solar cells. As a scientific research institution, the ISE was a rather different environment than the one I was used to (school) and that gave me good insight into how research is done in the real world.
Developed the Android version of a completely distributed, offline and cross-platform application for tracking IOUs. The application uses blockchains to ensure integrity and a two-way QR-code protocol for exchanging information between phones without an internet connection.
Designed and implemented a direct-mapped, write-back, parameterised data cache for a pipelined MIPS microarchitecture in Verilog. The implementation reduced the number of pipeline stalls due to memory accesses thereby improving performance.
Advanced Operating Systems
Implemented core functionality around the Barrelfish exokernel including memory management, process spawning, inter-process communication and multi-core support. Developed on an ARM Cortex-A9 Pandaboard in C and ARM assembly.
Systems Programming for ARM
Extended a base OS with preemptive scheduling, a multilevel feedback queue scheduler and other features such as mutexes and the sleep function, in C and ARM assembly.
Advanced Systems Lab
Developed a Java middleware application for load balancing requests across multiple memcached instances. Extensively analysed the performance and scalability of the system under varying loads, including automated experiments with multiple VMs and queueing theory models.
Genetic drift is an important aspect of Cartesian Genetic Programming, setting it apart from other genetic programming methods. As part of the biologically inspired computing course I attended in university, I investigated the neutral mutations which give rise to genetic drift by implementing variations of an explicitly neutral mutation operator. I produced a paper detailing the experiment and its results, which can be found here.