Portfolio

libcef-rs   Rust

libcef-rs was my third year project at university where I created Chromium Embedded Framework (CEF) bindings in rust to make it easier to do projects in rust that require more direct access to a browser than other existing libraries. In order to try to make this project as attainable as possible in the time-frame I used tools from the rust ecosystem to auto-generate unsafe bindings from the C API. On top of these unsafe bindings I created safe functions in rust to allow rust developers to not have to worry about memory management.

fortuna-mines   C Embedded

Fortuna Mines showing a 16x16 board.
Fortuna Mines showing all the mines after a mine has been selected on a 30x16 board.

A version of Minesweeper for the LaFortuna microcontroller (an Amtel AT90USB1286 based microcontroller for a university module). It is able to generate pseudo-random boards of differing sizes (9x9, 16x16 and 30x16). Movement is controlled using the rotary encoder. For this project I tried to minimise the amount of memory usage given it runs on such constrained hardware (and for the challenge) mainly by storing information about each cell within a byte instead of having an array of structures. This was probably my favourite project.

You can see the source code at: GitLab or GitHub.

SimpleWatchFace   Java Android

Preview of the analogue watchface. It is showing the time at 4:01:36 on 12th July with a battery level of 94%
Preview of the digital watchface. It is showing the time at 16:08:43 on 12th July with a battery level of 93%

A simple WearOS (Android Wear) watch face. The entire concept of this application was to make a watch face that I liked the look of that didn’t affect performance of the watch. For this reason it used limited features of WearOS, mainly avoiding complications (which from my experience caused slowdowns and reduced battery life). It used thin text and watch hands to reduce the amount of pixels on the OLED screen lighting up at once, minimising battery life and reducing the potential for burn-in.

Provides a couple of unique features as well:

  • Toggle between analogue and digital by tapping the screen twice.
  • Can show text in larger font on a single tap (to allow you to read better if you wear your watch to sleep)

You can see the source at: GitLab

background-fm   Bash Python Linux APIs

This was a simple project that creates a custom background based on the artwork of your most listened albums in the past month, or your currently playing song. It is designed to run alongside a desktop environment that supports multiple virtual desktops where one virtual desktop is dedicated to your music, running your music player.

For past albums it uses a bash script and the last.fm API to get your most listened to albums this month and the respective album artwork. It then passes this through ImageMagick to create a wallpaper containing these.

For current song being listened to it uses python and the playerctl library to receive currently playing song and album artwork from an MPRIS compatible music player. In order to create the background image it uses ImageMagick.

You can see the source at: GitLab

Custom Packages   Linux

Gentoo

When I first switched to Gentoo there were a number of packages that I used from the Arch Linux User Repositories (AUR) that were either not packaged in Gentoo, or not up to date. Some packages I also maintained because they were updated slower than I liked for security reasons.

At the time I maintained packages for:

This helped me understand how packaging software works outside of specific languages, including constraints such as offline build support. The archive of this repository can be found at GitLab or alternatively GitHub.

openSUSE

When I switched to openSUSE I also maintained packages:

Maintaining OpenSUSE packages helped me learn how to package RPMs. My home OBS project can be found at https://build.opensuse.org/project/show/home:brad1111

Runway Redeclaration   Java JavaFX

Runway Redeclaration was a university group project following a mixture of Scrum and XP frameworks. This project included planning user stories, and updating and reprioritising the backlog for each sprint based on previous performance and feedback from our mock client. We had to account for the amount of time each task we agreed on and estimate times for future tasks.

The main benefits of this project were mainly structural. In other words, experiencing planning as a group, using version control as a group and the difficulties that entails.

This project for example was a great learning experience of complex merges using GitHub.

Pinpoint Solutions   JavaScript APIs

I was contracted to work on creating a system to automate contacting relevant contractors for job opportunities added through their website. It had to filter to only contractors within a certain radius of the job location, and notify them through SMS. With this project I had to optimise costs as to not make the system financially unviable due to expensive API calls.

Due to constraints set by the decisions of another contractor the system was implemented in Google Apps Workspace JavaScript API, and hooked into a Google Sheets spreadsheet.

Twister   C# WPF

A physics based maze game where your position on the map causes the maze to pivot. You have to line up the maze with the exit in order to pass a level. Written in C#/WPF for my A Level Computer Science NEA, due to limitations of allowed technologies in the coursework. Works surprisingly well and utilises WPFs animation APIs to make the game relatively performant and playable, even on less than ideal hardware.

You can see the source code at: GitLab or GitHub.

Q&A   CSharp UWP

A fairly simple application designed to help me revise for french on my Windows Phone written in C#/UWP. It allowed the user to create a set of questions and corresponding answers that they would want to memorise. Later they could come back and be quizzed of all of the questions, where they would be prompted to write their answer in the text-box. If the answer did not match, you were given the correct answer. Different topics were saved in different CSV files, though towards the end of maintaining this project I attempted to migrate to SQLite. I used this application as a test to try things like using the UWP Ad APIs, analytics tracking (HockeyApp). Since UWP requires an async/await architecture for many features (including dialogs and file handling) this was a good introduction into that form of multi-threaded programming. I ended up abandoning this project as I found a better solution for revising in the form of AnkiUWP.

BradlBot   CSharp APIs

This was a simple discord bot built in C#/.NET with a design that was meant to be extensible with an architecture built around using reflection to load DLLs with a certain interface.

You can see the source code at: GitLab or GitHub.

ALAIS   Bash Linux

Arch Linux Automatic Install Script. This was a script I made in 2016 to automate Arch Linux installs with either a text file or a command line interface. It was my first real major script I tried to create (inspired by the AUI project) and it is honestly not nice to read. It has horrifically long if statements, and I should have used something to interface with an ncurses style UI.

You can see the source code at: GitLab or GitHub.

Post-Install-Wizard   CSharp WPF

My first major project that I was happy with. After having Work Experience in IT I wanted to have a tool that could make setting up windows after install easier somewhat inspired by how SCCM works, but not requiring an expensive license. It effectively was just a front-end to different Microsoft Deployment Toolkit (MDT) scripts that was running on a local Windows Server of mine. I’m sure code quality is questionable at best, but the resulting project worked well enough.

You can see the source code at: GitLab or GitHub.

Footnotes:

1

I created patches for Notion to allow the Windows build to run on Linux.

2

I packaged electron as the version required for Notion to run was different.

3

This was a work in progress that used parts built outside the OpenSUSE Build Service