Samuel Johnston
GitHub logo
Hello!
I hold a Master's degree in Computer Science and I'm passionate about software development and cybersecurity. My portfolio showcases my past projects that reflect both my academic and personal interests, along with the technologies I've worked with.

I am most familiar with the following programming languages and technologies:

C# logo C#
Python logo Python
Arduino logo Arduino
TypeScript logo TypeScript
JavaScript logo JavaScript
PHP logo PHP
TensorFlow logo TensorFlow
React logo React
Node.js logo Node.js
MySQL logo MySQL
PostgreSQL logo PostgreSQL
Photoshop logo Photoshop
Blender logo Blender
Docker logo Docker
Git logo Git
Linux logo Linux
Raspberry Pi logo Raspberry Pi
C#, Python, Arduino, TypeScript, JavaScript, PHP, TensorFlow, React, Node.js, MySQL, PostgreSQL, Photoshop, Blender, Docker, Git, Linux, Raspberry Pi

Feel free to contact me via email:

Projects

IoT Sensor AI Anomaly Detection

GitHub logo
Python logo Arduino logo TensorFlow logo
IoT Device PCB

I designed and developed a solution for using an AI model to detect anomalies in sensor data from IoT devices. The IoT device hardware was built and assembled by myself for deployment within an agricultural environment. It featured temperature, humidity, light and soil sensors, all interfaced with a custom PCB, controlled by an Arduino which I programmed, and uses LoRa to transmit the sensor data. I created a Python program to train the AI model on data collected from the sensor's, using TensorFlow. The program processes data in real time, determining whether to accept or reject it if it detects any signs of invalidity or tampering by an adversary. This work formed part of my Bachelor's level dissertation, of which I wrote an academic and in depth explanation of the solution and evaluated its effectiveness, with a heavy focus on trust and security.

Custom 3D Physics Engine in Unity

Unity logo C# logo
A game screeshot with many marbles colliding

A custom physics engine for Unity, written in C#, implementing Newtonian physics (including collision detection and resolution). The physics are demonstrated in a simple 'marble run' game which shows how the physics can be manipulated in real time with different environments such as rough terrain and multiple gravitational sources.

Real-Time UK Train Tracker

GitHub logo
Python logo Flask logo MySQL logo HTML logo JavaScript logo
Live map of trains

A live map to display the positions of trains within the UK. Data is sourced from the Network Rail Open Data low level data feeds, consisting of binary data representing train signalling states. Considerable effort was involved to map signalling state changes to physical locations for display on a map. Python was used, with STOMP to access the message broker for the real-time signalling data feed. The program stores data in a MySQL database, and uses the Flask web framework for the implementation of a RESTful API to retrieve live train locations.

To Do List API

C# logo Docker logo MySQL logo Postman logo

A RESTful API for a 'to do list' service, written in C# and making use of Docker containers. Data is stored in a MySQL database using the Entity Framework ORM.

Decoding and Visualising Aircraft Positions Beyond Radar Coverage

GitHub logo
PHP logo HTML logo JavaScript logo Raspberry Pi logo
Heatmap of aircraft flight paths

I assembled the hardware for a C-Band satellite receiver, capable of receiving aircraft downlinks from geostationary satellites. A Raspberry Pi with a software defined radio (SDR) was used to collect this data, with the use of readily available decoding software. I developed a logging and heatmap application using PHP and JavaScript to visualise the positions of aircraft which fly outside of ground based radar coverage, and therefore rely on satellite communication.

Green Streets

Java logo Android Studio logo Python logo Flask logo MySQL logo
Mobile screenshot of app

Green Streets is a social media service with a mobile application frontend, developed as part of a University group project. The app encourages users to engage in a community effort to pick up litter by gamifying the experience, as well as providing a space to organise and discuss litter picking events (e.g. beach cleans). The frontend mobile app is written in Java, using Android Studio, and interfaces with a backend RESTful API created with Python Flask. The backend stores its data in a MySQL database.

ESP8266 Geolocation

Arduino logo

Demonstrating how the location of low-cost and low-power devices can be determined without the need for GPS hardware. The ESP8266 microcontroller was used to record signal characteristics of nearby Wi-Fi networks, enabling it to determine its location by using the Google Geolocation API. The code was written in the Arduino C++ language and the microcontroller was interfaced via the Arduino IDE.

Client-Server Architecture with Trusted Platform Module

GitHub logo
Python logo Linux logo
Console output of TPM program

I created a secure file transfer protocol in Python for the client-server architecture as part of my Master's level dissertation project. The implementation leveraged Trusted Platform Module (TPM)'s capabilities to perform secure cryptographic operations including key generation, encryption, decryption, signing and verification. The project also focused on preventing malicious clients from being accepted by the server by utilising the TPM's Platform Configuration Register as part of the file verification process.

Sending IoT Data Over Apple's Find My Network

C logo

A proof-of-concept approach to using the extremely large coverage of Apple's Find My Network for retrieving data from IoT devices lacking an internet connection. This project expanded on the OpenHaystack codebase to add support for sending external sensor data from ESP32 devices via Bluetooth Low Energy (BLE). When in range of a supported Apple device, the data will be uploaded to Apple's servers, where it can be retrieved and processed by a custom application.

Live Aircraft Tracker

GitHub logo
Python logo
Live map showing aircraft positions

A live aircraft tracker specifically focused on tracking light, general aviation aircraft and gliders. Data is obtained from the Open Glider Network live feed. A Python program connects to the live feed and performs validation and filtering on the data. The program matches aircraft in the feed to a database of known aircraft registrations, and outputs formatted data on a TCP socket for display on a live map.

Online Lottery Game Web App

Python Flask logo SQLite logo HTML logo JavaScript logo
Lottery web app admin panel

A web based lottery system utilising role-based access control to feature multiple users and an administrator control panel. The Python framework Flask is used alongside the SQLAlchemy ORM to store data in an SQLite database. Time-based one-time password (TOTP) two-factor authentication is implemented, and sensitive data such as lottery numbers and user passwords are appropriately stored in the database.

Secure Chat Room

Python logo MySQL logo

A secure chat room, collaboratively designed and developed as a group project during University. Designed for high performance and capable of handling many simultaneous clients, it offers features such as end-to-end encryption, file sharing and steganography. The codebase consists of a Python program interfacing with a MySQL database.

Unity Graphics Environment

GitHub logo
Unity logo C# logo
A game screeshot of an island at night

A 3D Unity environment based on a volcanic island, showcasing custom water shaders, real time lighting, lens flare, fog and particle effects.

ESP32 LoRa Messenger

Arduino logo HTML logo JavaScript logo
Two ESP32 boards

A peer-to-peer messenger built for ESP32 devices with a LoRa RF module for transmitting and receiving messages. Built with Arduino C++, the ESP32 hosts a local web application providing an interface for sending and receiving messages, and transmits encrypted LoRa packets between devices. Intended for use with personal devices which do not have internet access.

LoRa Satellite Ground Station

I assembled the hardware and antennas for an ESP32-based satellite ground station, capable of receiving LoRa packets from satellites in low earth orbit such as cubesats and Starlink satellites. The software makes use of the preexisting project TinyGS. Decoded packets are sent to a community MQTT server.

Decoding and Visualising Real-Time Positions of Ships

PHP logo MySQL logo HTML logo JavaScript logo
Heatmap of ship traffic

I setup a receiver for Automatic Identification System (AIS), a transmission standard which enables maritime vessels to broadcast their location for safety over very high frequency (VHF) RF. I developed a PHP program to decode binary position messages as per the AIS specification, and stored the decoded positions in a database. JavaScript is used to visualise this data on a map, allowing for analysis of common shipping routes.

Weather Balloon Decoding Station

GitHub logo
Python logo Raspberry Pi logo

A station for receiving live data from meteorological weather balloons (radiosondes) used to aid weather forecasting models. The hardware consists of a Raspberry Pi and software defined radio (SDR), and uses the radiosonde_auto_rx as decoding software. I created a Python program to convert live packets into a format which can be used to track balloons on a live map, making use of networking sockets.

Education

Newcastle University logo
Newcastle University, UK (2020-2024)
Master of Computing with First Class Honours (Computer Science)

First three years consisted of Bachelor's level study, followed by a final year at Master's level.

Relevant modules: