A small Python utility I wrote to help manage my dotfiles. I probably didn't need to add another tool to https://dotfiles.github.io/, but after having a brief look I decided I wanted to write my own.
It currently a little janky, but it's certainly good enough for a v1.0 release of a small utility - especially since I'm probably going to be the only person using it. I'll be slowly improving it as I use it.
As a Lead Developer at AppSecTest (a series-A startup), I worked on a product suite that reverse-engineered mobile games to check for security & legal compliance issues. We offered a cloud solution and on-premises, the latter with installation/setup scripts.
Two Kotlin analysis agents: one for .apk files (Android apps), the other for .ipa files (iOS apps); both reverse-engineered files into a complex data structure and then ran that against against a varying set of detectors which checked for security & legal compliance issues.
A small NodeJS server to handle queuing and transport of files uploaded by users (via the above web-app) and results output by the analysis agents.
A React/Material-UI web-app, which provided users an interface to: upload files for analysis; view, compare and generate HTML reports of analysis results; JIRA issue creation & tracking of said results, email said reports, email feedback, view statistics of platform usage & results data, as well a slew of admin features.
It ran on a NodeJS (express) backend server, which used a PostgreSQL database.
Hosted on two seperate Digital Ocean Kubernetes clusters. One was for staging deployments, only accessible via our internal VPN; the other was for production deployments accessed by our customers.
I was accountable for as lead developeri for the webapp(3.) and file/result transport server(2.) and as the secondi (of two) developers working on the analysis agents(1.) and maintaining our infrastructure (4.). AppSecTest was a 4-man team, so the work was shared.
A lot of my focus at AppSecTest was spent making sure projects were at a professional/enterprise-standard.
Role as lead developer required complete project oversight & management and doing the majority of development work.
Role as secondary developer required me to do a lot of bugfixing and a re-write of the I/O around the core libraries of the analysis agents.
It consists of an embedded C library (designed for generic microcontrollers) for using the Microchip RN2483 LoRa modulei. The library aims to be easily portable; specific platforms are currently supported on separate branches of the git repository.
The second component of this SDK was a lightweight embedded C++ framework for making it really quick & easy to plug Grove Modulesii into an IoT solution. The framework is also designed to be easily portable to any embedded platform; again the master branch of the git is non-platform-specific, with support for different platforms on different branches.
Both of the above were designed for generic microcontrollers. All I/O (which is specific to each platform) was modularised down to a single function to make porting them simple
Of course a dissertation isn't worth much without the paper. I found the research for this quite fun and plan to write a personally-published paper based on it. A link to the paper can be found below.
This was a university project for my Internet of Things module, which I passed in my final year. The goal was to create a Single Wire Protocol that could transmit data between two BBC micro:bit devices across a single wire plugged into one of the GPIO pins on each side. A working demonstration of the protocol was also required.
Designing a protocol was an intresting experience. Having previously implemented the SNTP protocol (according to the RFC), I understood this was an instance where implementation was really secondary to the documentation. In this instance, the implementation was there to test the documentation.
Personally, I'd like to try designing a more complex protocol in the future with better documentation.
The Smart Shelf was an old demonstration of a full-stack IoT solution; in the last few months of my intership at Intel, I re-designed it to showcase LoRa(WAN) - which was a new technology I was assigned to investigating so that we could provide something to customers inquiring about the technology.
This required researching LoRa & the LoRaWAN protocoli; prototyping multiple LoRa devices; justifiying commercial viability; and producing a full prototype.
This project was a really good (slimmed down) insight into the steps required in developing a product; I enjoyed almost every step of it. Justifying commercial viability of the project was a newer type of challenge for me, however I found it actually helped shape how the prototype turned out. The resulting prototype ended up being used as a showcase in the London office and I provided several talks on it before going back to university.
I documentented the majority of my research (for knowledge transfer).
This would have been published as a white-paper, but we ran out of time.
UWE (Computer Science), 2017
This was another small university project done for the Internet of Things module that I passed in my final year. The goal of this project was to write a game for the BBC micro:bit, this acted as an introduction/refresher in programming on hardware to students.
The game I created is based on Bop It! All you need to do is the action prompted on the matrix LED display within a certain time limit.
By default the actions you're asked to do are: Press A (A), Press B (B), Tilt away from you (↑), Tilt towards you (↓), Tilt left (←), Tilt right (→).
There were more actions that could have been added into the game, however the micro:bit didn't reliably respond to them. I did make it very easy for anyone to modify the actions the game asks you to do (in part thanks to the awesome MicroBit API).
The game continues until you take a wrong action or miss an action, after this happens you're given your score (the number of sucessful actions you made), followed by a little message from the developer.
A by-product of this project was a small repo that I wrote as a time-saver for displaying images & animations on the 5x5 dot matrix display.
The Lancaster microbit runtime uses MicroBitImage objects to print to micro:bit displays. These objects represent bitmaps and can be of any size (for different displays) as well as individual brightness levels for each LED (note: these objects are a managed type, so memory is managed for you - no need to delete them).
This library contains a bunch of these objects, pre-defined. In the header file you'll find comments documenting what each MicroBitImage object displays on a 5x5 MicroBit LED display.
The animations are a set of functions that use the pre-defined MicroBitImages and a MicroBitDisplay to print animations. These animations are blocking as they set the MicroBit passed to it to sleep between frames, however they're fairly quick and you can queue anything that might happen while the animation is playing (thanks to the wonderful DAL library).
Several of my Computer Science tutors were specialised in Artificial Intelligence and we were subject to several courses on the topic. One of the more intresting ones was in my final year where we studied biocomputation - finding new ways to exploit computation with bio-inspired methods: The natural world has often provided inspiration for solving complex problems
A project we were given in this course was to construct a basic Genetic Algorithm that could help find patterns within provided data sets.
This turned out to be very fun, we were given the chance to do it in any language so I also used it as an opportunity to learn Python. At the time I'd heard about how Python was really popular among data scientists (due to packages such as panda); in the end it's execution was slower than I'd have liked though.
This was a university project in my second year Computer Operating Systems & Networks module (certainly one of the most fun).
The aim was simply to product a working, RFC4330-compliance SNTP server & client with both unicase and multicast addressing modes and prove it works using wireshark.
Doing this was really one of my favorite university projects, since it taught an important lesson in reading & interpreting documentation, as well as an underlying understanding of how network software worksi
The project was done using C sockets. Outdated but gave a good idea of how networking works at a base level
UWE (Computer Science), 2015
LoTR: BFME 2 (installation wrapper)
This was just a small project I did as a birthday present for a friend.
We'd had a converstaion where they told me how much they missed playing Lord of the Rings: The Battle for Middle-Earth 2 - a game which can't legally be bought anymore (licensing issues). They weren't too tech-savvy, so I got hold of the game .iso files and wrote this small program which: mounts the game .iso, runs the installers, applies a no-cd crack and also provides the option to apply widescreen mods. It also has some cute animations I manually wrote.
Using C as the language to implement it in really wasn't the most fitting tool (something like Python probably would have been better), but another one of the reasons I did this is because it was in the midst of a lot of web dev work (which becomes incredibly dull) and I missed working in C.