Welcome, this is a list of all the academic projects I’ve done in my computer science course at the University of Bath.

1st Year

  1. Student wellbeing app (group Agile project) - developed a personal informatics system - that helps students track productivity and health - in a group of 8 members using the Agile Scrum software methodology. We used the React Native framework along with SQLite(local storage on the device) for the backend. I led the team by coordinating tasks, organising sprints using Trello, arranging meetings and ensuring a smooth development process to meet the deadlines. Then, I consolidated the team’s research, designs, development process, testing and conclusions into a report.

  2. Polyphonic synthesiser (group project) - used 4 Arduino Uno modules to create an audio synthesiser. My role was to take in MIDI input and translate it for the sound processing module which plays the audio. I learned about interpreting data from MIDI files by using the MIDI spec.

  3. Ray tracing on Arduino (hackathon project) - worked with one of my teammates (from a group of 4) to output from an Arduino Uno to a monitor over VGA in 4-bit 'colour' using C++ and AVR assembly code. Due to the huge memory constraints, we used 97% of the Arduino Uno's memory, leaving ~55 bytes for the ray-tracing calculations. My other teammates wrote algorithms to represent objects in 3D space, calculate ray bounces to render scenes, and support for camera panning and rotation, all using vector maths and tested within the terminal using ASCII art.

    Arduino Ray Tracing

  4. Sudoku solver - used constraint satisfaction with backtracking to create a sudoku solver which can solve any complex sudoku puzzles with a low time complexity.

  5. Spam filtering AI - used supervised learning - specifically the naive Bayes method - to create an agent that trains on 1500 messages with 54 features and testing on the same data set resulted in an accuracy of 90%. Experimented with other strategies, namely K-fold cross-validation to obtain a slightly higher accuracy of 93%.

  6. Enigma machine emulator - created an Enigma machine emulator which has some additional settings such as using 3 or 4 rotors, multiple rotor types and reflectors. It can be used for encryption, decryption or code breaking.

  7. Dice game agent - used reinforcement learning - particularly value iteration - to create a dice game agent that tries to maximise the total score of rolling 2 die over 1000s of iterations. It choose whether to roll or not depending on the sum of the faces of the die.

  8. Whac-a-mole (pair project) - created a multiplayer game of Whac-a-Mole on an Arduino Uno using shift registers, interrupts, servo, piezo and LEDs. It was my first project with an Arduino and was a good learning experience of using circuits in combination with code on a microcontroller.

  9. SRPN calculator - developed a reverse polish notation calculator with some extra features such as octal, precedence, multi-line inputs and special characters.

2nd Year

  1. GAN machine learning - created a Generative Adversarial Network with a pre-trained classifier using the FashionMNIST dataset to create images of clothing items from noise. On the right are some examples of clothing items I was able to generate using my GAN model. (Excuse the quality, they’re 28x28 size images)

    GAN Project Report.pdf

best_boots.png

best_trousers.png

  1. RISC tape computer (hackathon project) - worked with 3 others to develop a general purpose computer(built with Lego) that uses tape as memory with a custom Turing complete instruction set. I worked on writing the instruction set which is broken down into 2 bytes per instruction (4 bit opcode and two 6 bit operands), developing the chassis for holding the ATMega computer, tape and the 7-segment display for output. For demonstration, we wrote a simple Caesar cipher program for decrypting the word ‘VSZZC’ with cipher key 12.

    RISC-iest Tape Computer

  2. Tennis pose estimation (project proposal) - wrote a project proposal for an ML model that uses pose estimation as a basis for injury prevention in tennis.

    F+F Project Proposal.pdf

  3. Carpooling app (group project) - developed a cross platform carpooling mobile app for students using React Native, SQLite and Flask in a group of 9 using the Agile development methodology. The project was conducted in 4 phases:

    1. Planning - with the theme of environmental sustainability, we pitched the idea to our project supervisor, collected data from stakeholders(questionnaires etc), gathered user requirements and
    2. Design - choose the tech stack, designed the application’s UI and UX wireframes (on Figma) with stakeholders and designed the high level UML diagrams for the architecture
    3. Development - developed the application in 2 teams (front end + back end) using React Native for development, Expo for testing, SQLite database, Flask, GitHub version control, Trello + Google Drive for project management and Discord for communication and embedded GitHub notifications. Also tested the application with unit, integration and system testing
    4. Evaluation - gathered stakeholder feedback through heuristic evaluation and cognitive walkthroughs, reflected on our goals on environmental and economic sustainability using hypothesis testing and set new goals for future development
  4. Visual computing notebook - solved 4 Python notebook exercises covering:

    1. Convolutions - basic convolutions, border handling, image filtering and convolutional theorem(Fast Fourier Transform)
    2. Transformations - compound transformations, articulated motion and estimating transformations based on final positions
    3. Image warping - forward and backward mapping, linear interpolation and lens undistortion
    4. Bezier curves + implicit rendering - cubic Bezier curves and calculating their tangents, sampling Bezier curves using De Casteljau’s algorithm, shortest distance from a point to a cubic Bezier curve and representing 3D objects using implicit functions
  5. Lemonade stand game - simulated the lemonade stand game with multiple custom strategies to evaluate the best strategy over 100s of games.

    Lemonade Stand Game Coursework Report.pdf

  6. Reading groups - researched and presented 2 papers to small reading group sizes of 4-6 people providing a high level overview of the papers.

    Paper 4a - Towards Deep Learning Models Resistant to Adversarial Attacks

    Paper 7b - Counterfactual Fairness

  7. Simple Nash equilibrium - analysed ‘Simple Search Methods for finding the Nash Equilibrium’ research paper which explored a search-based method with a key focus on a small search space (pruning). Presented my analysis in the video below:

    https://youtu.be/J23EUjfEw4U?si=9Y9m8vaGHjzWsmut