Portfolio

Differential Drive Robot AI Report
Univeristy of Nottingham

Developed a Python program to evaluate and compare four different AI agents controlling a 2-wheeled differential drive robot across three environments. The comparison metrics include actions taken, timesteps, distance travelled, and progress achieved.

  • Developed an agent which takes actions randomly, a reactive agent which has no knowledge of the past of future and only reacts to what it currently sees, an agent which uses A* pathfinder to find the optimal route and an agent which uses Q-learning to attempt to solve the problem.
  • Each agent controls a 2-wheel differential drive, allowing them to independently change the speed of each wheel.
  • Used inheritance for each agent type to reduce code reuse and type hinting for easier debugging.
  • Used the Separating Axis Theorem for collision checking.
  • Designed and implemented a testing process to compare the models.
  • Produced a 3000 word report outlining my methods and results using Typst for clear and professional algorithms and tables.

2024
Verilog HDL to Minecraft Redstone Repository
Prize-Winning Hackathon Project DevPost

Python program to which converts Verilog to Minecraft Redstone circuits winning the "Hackiest Hack" prize in HackNotts 2024.

  • Developed a Python program that translates Verilog hardware description language into functional redstone circuits in Minecraft, inspired by the MinecraftHDL project from McGill University.
  • Extended the original concept to include sequential logic, enabling circuits to hold and manage state, allowing for more complex and dynamic designs.
  • Designed and placed logic gates using redstone dust and repeaters, automatically connecting them into both combinational and sequential circuits.
  • Addressed signal delay and timing challenges by strategically utilizing repeaters to ensure accurate circuit operation.
  • Collaborated on all aspects of the project, including algorithm design, coding, and testing, to deliver the solution within 24 hours.

2023
Medical Image Segmentation Tool (MIST)
University of Nottingham

A group project for the university which I led. The tool is designed for clinicians who can use it to track tumour growth and easily identify organs in medical images.

Image segmentation is the process of automatically separating sections of an image, for example, separating bones, organs and tissues into distinct regions.

  • Managed 7 team members, assigning tasks, ensuring contribution and communicating with the supervisor (so that we met requirements).
  • This project was supervised by Dr. Xin Chen for the entire academic year.
  • Converted and optimized a MATLAB legacy medical image segmentation program to C++ using the Qt framework, modernizing the GUI and enhancing performance.
  • The program uses VTK to segment 2D and 3D images, supporting medical imaging formats such as NIfTI and DICOM.
  • Implemented image processing algorithms using OpenCV and a provided library.
  • I primarily worked on the front-end, assisting with creating the UI and creating an installation wizard for the program.
  • The supervisor and team were highly satisfied with the result we got: 85%.

2022 - 2023
ericlindesay.com Repository
Personal Project

This is the website you are currently looking at! It is made using Bootstrap 5 and is in a Docker container.

  • Created and designed a website containing my CV and portfolio.
  • Uses Bootstrap 5 for modern aesthetics and Masonry for the tile layout.
  • Ensured secure access by serving the site over HTTPS with Let's Encrypt certificates, addressing browser security concerns.
  • Configured Traefik as a reverse proxy to facilitate future hosting of additional websites on the same server.
  • Containerized the application using Docker for improved portability and to gain hands-on experience with the technology.

2023 - Present
MIN-SET-COVER AI
University of Nottingham

The MIN-SET-COVER problem is an NP-hard problem where you have to optimally allocate resources so that all elements in a set are covered. This coursework involved creating an AI in Java to solve this problem.

An example of the MIN-SET-COVER problem is, given N programmers who each know a set of programming languages, what are the minimum number of programmers required to cover every programming language?

  • Implemented a learning hyper-heuristic AI with simulated annealing and reheating using a geometric cooling schedule for move acceptance.
  • Tuned parameters using Taguchi Orthogonal Arrays.
  • As we weren't allowed to use external libraries, I gained a deep understanding of AI algorithms and optimisation techniques.
  • This uncovered my interest for optimisation and efficient programming.
  • Achieved a grade of 90% reflecting my understanding and interest in the task.

2023
Dream Keeper Repository
Personal Project

An Android app for recording and managing dreams, featuring advanced tagging, search functionality, and a home screen widget for quick access. Built using Android Studio and a Room database.

  • Created because I couldn't find an alternative which had the functionality I wanted.
  • Designed to streamline dream documentation, retrieval, and sharing.
  • Implemented advanced tagging, search functionality by date and text, and a home screen widget for quick access.
  • Built using Android Studio and a Room database, serving as my first Android app project.
  • Regularly used for personal dream tracking, with potential for future expansion and app store release.

2022
Our Tanks
University of Nottingham

A game, similar to Tanks! on the Wii, in which you control a tank and shoot enemy tanks controlled by AI. Developed in C++ using a wrapper around SDL 2, I achieved 89% in this piece of coursework.

  • Developed in C++ using a provided wrapper around SDL 2. This wrapper was mandatory for the coursework.
  • Implemented key features including player movement, shooting mechanics, efficient collision detection using bitmaps and bullet rebound physics.
  • Used state design pattern to easily change enemy behaviour based on certain conditions.
  • Designed and optimized enemy AI, overcoming computational challenges with vector math to ensure intelligent behavior without game lag to allow for bullet rebound prediction.
  • Created a 3-level game structure with levels stored in JSON, enabling easy expansion.
  • Built a custom JSON parser due to the coursework's heavy restrictions on external libraries.

2023
cfutils Repository
Personal Project

A collection of utility programs created in Python to assist in competitive coding challenges. It automates the creation of problem READMEs from Codeforces, Leetcode and Kattis as well as allowing you to list and filter attempted problems.

  • Uses BeautifulSoup to parse Codeforces and Kattis problems as well as the Leetcode API to parse Leetcode problems.
  • Extracts and formats problem details, significantly reducing manual effort.
  • Developed a tool to list solved and unsolved problems, enabling efficient tracking and revisiting of challenging problems for improved problem-solving.

2022
Matrix Calculator Repository
Personal Project

A Python command line tool for matrix maths using argparse and multipledispatch. It was created as a supplement to my learning in the Mathematics for Computer Scientists 2 module.

  • Allows the user to perform 16 matrix maths operations.
  • Implements unit tests to ensure accuracy.
  • Created to reinforce my understanding of matrix concepts such as Gaussian elimination and LU factorisation aiding me in exam preparation.
  • Enables users to generate custom examples and verify their solutions by comparing them against the program's output.

2022
Block Racing League Repository
Personal Project itch.io

A 2D racing game playable by two users on the same device. Developed in Processing, this was my first introduction to the language.

  • Designed 10 unique levels with customisable player colors, special effects and hidden shortcuts.
  • Implemented collision detection using a collision bitmap to enable fast level design.
  • Published on itch.io, having been downloaded 85 times.

2019