Below links my published and self-published works for clients, university or personal projects.
For Nottingham University Students & Staff
During the summer of 2021 I decided to produce a Java Android App, for my University Hopper Bus services aspreviously no dedicated app existed for them. The app allows you to see vehicle live GPS data, scheduled stop information, timetables, route layout and journey tracking information. It was achieved by using the UK Bus Open Data (BOD) API, combined with a C# .NET 6 backend system, that interfaced with the API, processed it, converted it and re-hosts it for the app to utilise.
The app made good use of MVVM principles, ROOM Databases (SQL), Android Permissions and front-end and back-end development. It has since been published onto the Google Play store for all to download. For full technical details please see my technical blog.
In my third year at university I enrolled in the Compilers Module, which tasked me with the creation of a Compiler and Virtual Machine for the programming language mini-triangle in Haskell. The compiler was capable of taking in an input mini-triangle program, parsing it, type checking it, converting it to TAM machine code and then running it on a virtual machine. The compiler was sophisticated enough to allow for both Integer and Boolean data types, functions, with the possibility for recursion in the future, if, while and do while expressions, user input, print to screen, conditional expressions and assignments. The virtual machine stored the stack and could handle three different types of addressing, Literal Addressing, Local Bay and Stack Base Addressing.
The compiler and virtual machine was written in Haskell using several advanced concepts such as applicatives, functors, monads, state monads, IO handling, alternative class and record syntax. All building upon my knowledge learnt in Advanced functional programming the year before. I am particularly pleased with the elegance of my solution and significantly improved both my Haskell knowledge and theoretical understanding of compilers by completing this project.
In my third year at university I enrolled in the Mobile Device Programming (Android) Module. The final assessment for the module tasked me with the development of a running tracker app. Which could record a users running, allow them to annotate it and view their trends/ progress across weeks. The app utilised Google's Fused Location Provider API and Google Maps to retrieve and display the users location. It also made use of other complex android skills such as foreground services, to capture the users position while not actively using the app, an SQL Lite database to save the users positions locally on to their phone.
A content provider such that other apps could access the data if needed and a broadcast receiver to allow for the user to be able to interact with the service via a notification. Careful consideration had to be made to ensure the performance of the app, so I implemented recyclerviews and a specially designed caching solution. Moreover, an MVVM design pattern was used to ensure proper separation of logic and views. I have since made the app compliant with Google Plays policies and released it onto the Google Play Store for others to use.
In my second year at University, I enrolled in the C++ programming module, the final coursework tasked me to create a video game using an adaption of the popular framework, SDL2. For my video game I decided to create a complex transport network game, the main idea is to create the most efficient train network possible and survive for as long as you can before a station overcrowds and the game ends. New stations will spawn as the game goes on, you need to connect these stations with train lines and assign trains onto the train line. Passengers want to reach specific stations and you get a point for every passenger delivered successfully. You are limited by the number of lines, trains, bridges, and number of connections. It is important to note, that all games are randomly generated and there does not need to be a direct connection between every station, the passengers AI are clever enough to transfer between lines to reach their destinations and can adapt to changes in their route mid-traveling. This is done using a shortest path algorithm I made, loosely based upon a breadth first search approach.
The graphics library ensured that I had to be very mindful with my approach to render to screen, as it entirely used the CPU, instead of the GPU. Which meant I had to write the code as efficiently as possible for a smooth experience. The game also allowed me to demonstrate a range of complex C++ skills, such as multiple-inheritance, memory management, smart pointers, templates, operator overloading, Functors, lambdas, function pointers and most of the common standard library functions.
While in my first year of university, my side project has been working on a live departure board, inspired by a pre-existing product which provides live train departures. However, my device provides live bus departures, as I was able to use my knowledge from my previous Reading Buses work, using their API. The project was a great way for me to not only learn the Python programming language but also learn how to use Raspberry Pis and work using hardware.
The project has since been made public for people who would like to build their own departure board; all parts combined will cost you around £50. I have since also added support for any UK Bus Stop and any UK Train station due to its popularity. If you would like to learn more about this project, I have made its own project site, which can be found using the button above.
During my second year at University, I partook in the Software Engineering Group Project Module, during this I was placed into a team of six, I put myself forwards and was elected to be the team leader for the group, we also elected a team administrator and git master. At the start of the project we had to bid for the top three projects we wanted, we successfully bidden for a project working with MHR, one of the UK's leading HR software solution providers. The project tasked us with designing and creating an augmented reality mobile app for one to one meetings. We brainstormed a selection of ideas which best matched the brief and then discussed with the client which ideas they liked the most and how we could develop these to produce a final app idea.
We agreed upon and developed an Android Mobile App, using Google AR Core and Google Firebase, which had three key main features, with the overall idea of digitising the office environment to enable one to one meetings to be able to take place anywhere, for a more dynamic and fluid experience. The first idea was custom object visualisation, this let a user select a 3D model from their phone or Google Drive and then place it and view it in the AR world. This model could then be annotated, rotated, translated, and enlarged by the user.
The second key feature was an AR To-Do List, this to-do list could be placed down onto a surface and would show you a list of meeting agenda items, you could click on the 3D object to bring up a 2D overlay where you could tick off or edit the contents of the list.
The third key feature was an AR Whiteboard, which could be placed down onto a surface and show any drawings or diagrams made, when tapped on a 2D dialog would appear where you could change paint colour, brush size or erase brush strokes.
Another person could join the same meeting by using the unique meeting code generated by the host, all members in the same AR meeting can see the same objects and the same contents/ properties of every object. For example, if you ticked an item off the to-do list the other user would see also.
This project taught me not only about android development, but also the AR Core, augment reality library and the Google Firebase back-end system, such as Login with a Google Account, real time database and cloud file storage. In doing so this also strengthen my knowledge of asynchronous and concurrent programming as networking data in real time between devices was particularly challenging.
When the project concluded, MHR, our industry partner and client agreed that we meet all the original requirements from the brief and were happy with our delivered end product. Throughout the project I helped with development, but also managed the team, distributed the work, set up and handled our Azure DevOps work space, including our continuous integration pipeline, feature timelines and Kanban boards. In doing so, the project provided me invaluable experience in project management a software development team to successfully deliver a product.
In my first year of A-levels I developed a Twitter BOT using the Reading Open Data API which would monitor my bus stop home. Every time it found a late bus arrive it would send out a Tweet informing the bus company. The BOT also kept a record of every bus arriving at the stop and its lateness in a database. At the end of each week this data captured would be processed and used to produce an info-graphic demonstrating the performance of each service. The idea then progressed further, when I implemented passenger warning Tweets. If the BOT found a bus predicted to be late it would warn passengers before so that they could make more informed travel decisions. This feature specifically caught the attention of the Head of Engineering at Reading Buses. I was soon invited into their depot in central Reading to discuss expanding upon this idea.
This is when my original side project became my first freelance work. Starting from scratch I developed, tested and documented from the beginning to a commercially ready system. The new system no longer only focused on a single stop. Instead the system could monitor every stop and track the buses moving between stops across the whole network. Detecting any predicted lateness. The system is capable of either posting automatically or manually via an operator (who could add a reason for the delay) to both Twitter and Facebook. The messages would be based upon a set of editable template files and the whole system is designed to be able to check for changes such that it can automatically update, for example if a new service starts operating or a route change. This system has since been sold to a software supplier of Reading Buses.
As part of my A-level in Computer Science, I approached a local secondary school and was tasked with the design and development of a Mathematical Transformations program. The program had to both be used as a teaching tool and demonstrate the four transformations (reflection, enlargement, translation and rotation) on a selection of defined and user defined shapes.
But also by the students, who could be set a selection of randomly generated tests to track and monitor their performance. Accompanying the program is a 45,000 word documentation detailing the design, development and evaluation stages. The project is now open source and available on Github or the Microsoft Store for any other school to use.
In my second year of University, during my Software Maintenance module, I was tasked with improving the software quality and functionality of somebody else’s pre-existing code base. This was a real git repository found online, for a recreation Java Frogger Arcade game. I had to learn and understand the original code base and then improve it by implementing proper software development practises. Such as introducing popular design patterns, like MVC, Observer, State, Singleton and Factory. I also learnt about and implemented SOLID principals, breaking down larger classes into single responsibilities, reduced levels of inheritance by implementing composition or aggregation and promoted the use of interfaces.
As part of the project I also learnt about and created my only Maven Build file, so that it can be complied by others with ease. Moreover, I added in a selection of Junit tests and carried out test driven development on any of the new features I implemented to detect any errors produced early on. Finally, I added Java Docs to the Eclipse solution to explain to other developers how the code works. Throughout this project I significantly improved upon my code quality and re-usability to be able to produce industry level quality of code. I was awarded a First for my final code submission.
Game On is a YouTube Channel I first created in 2012 and has since gained 5,000 subscribers and over 1.5Milllion views. It primarily consists of computer animations, mostly video game based. I started learning computer video animation using basic tools, but progressed onto learning blender and then Autodesk Maya an industry leading animation program used by the likes of Disney and Pixar. Learning video animation was a fun side hobby of mine and helped me to learn how computers produce 3D graphics. The channel has also been a good source of additional income throughout my teenage years. To view the channel you can click the button above.
Reading Buses API Library - Nuget Store
At the start of 2020 I wanted to learn how to create libraries for C# and publish them onto the Nuget and GitHub package manager. To do so, I created a Reading Buses API library as none currently exists on the market. Creating my own library allowed me to consider how other developers would use my code and ensured I had to properly document everything for others to use. It has since been published and received hundreds of downloads in other’s projects.
Hang Man AI - Haskell
During my Advanced Functional programming Module, I paired programming with one other on two Haskell projects, the first was creating a game of Hang man, against a computer AI, implemented using a min-max algorithm. I was particularly proud of the elegance and efficiency of the solution we created, so published it below. The second project was creating a monadic compiler, which converted theoretical “code”, into theoretical “machine code” and then outputted the results of the program. This was achieved via the use of the State Monad.
Green Meets Gray - Navigation Around CISCO
In November 2018, I was invited to Green Park Business Park in Reading and partnered up with CISCO. They tasked me and a small group of fellow students from across Reading, in designing an innovative navigation system for the many CISCO office blocks. Our idea was to use blue-tooth emitters and receivers to triangulate where people were in the building and then use LED light strips to guide them to their locations. As part of the technical team, I decided to go above and beyond and create a working prototype using Python and a Pycom device; both technologies which I had no experience prior, which I believes demonstrates my fast learning and adaptability.
CISCO IoT World project
For the 2017 academic year I was tasked with a large overarching project by CISCO, the project explored the IoT, through the use of multiple different technologies such as facial recognition, RFID scanners, bar-code scanning, web APIs, Raspberry pies and website development. This project exposed me to a wide variety of different technical skills and helped me further develop my independent learning skills.
Light Up Reading
Within my first term at UTC Reading, we were tasked by PBA & Network rail to create an affordable interactive lighting display for Reading Station in a group of 5. The project helped me develop my team working skills, especially when working with people I had not meet prior. As the project was only over a 2 day period it also helped me to further define my time management skills.