Education

Interests > Career >

I'm a graduate computer science student specialising in artificial intelligence with a first-class degree from the University of Kent. During my studies I covered a wide range of computing technologies and practices, not only in AI but in many other areas as well. I also undertook a placement year as part of my course.

I learned and applied knowledge in pathfinding, neural networks, genetic algorithms, image analysis and data mining as part of my course, and also wrote my own set of slides for one of the modules so that my friends who did not pick the module can learn introductory elements of AI by themselves. Outside of AI I practiced skills in web development, pure algorithms, databases, functional programming, computing law, software engineering, HCI and mathematical logic. I am familiar with Python, Java, JavaScript and SQL, and have also used C++, Erlang, and VBA.

I am currently looking for work, preferably focused towards solving the UN sustainable development goals. I am also considering taking a cyber security course, as I feel that I am still very inexperienced with the security side of computing, and want to develop my skills in the domain in order to be a well-rounded and future-thinking developer.


Artificial intelligence
OOP and web
Functional, HCI, Law, and more

Artificial Intelligence

During the course I covered and implemented various aspects of AI, including neural networks, pathfinding, genetic algorithms, data mining and image analysis. I applied this knowledge to coursework projects including my final-year project (the Drone Shepherd), as well as a puzzle-solving program and a program which creates furniture designs. I chose to do the AI specialisation course because I had a great interest in the application of AI now and in the future, and believed that it could be used to truly improve aspects of society.

Feature - Drone Shepherd

My final-year project for my undergraduate degree. The concept was for a drone to autonomously fly around a taped-off arena searching for a Roomba, then guide it back to a home location. I primarily worked on the image analysis using the drone's camera feed, using OpenCV in Python to detect the location and orientation of the arena boundaries and the custom-designed markers for the Roomba and home location. I also implemented some noise reduction code in an attempt to remove useless data from the image.

Gallery

Other Projects

Hopfield Network - I implemented a simple Hopfield neural network during my second year of study. The Hopfield network takes binary sequences as input, and can recall learnt sequences when a similar input is given. This network used Hebbian learning.

Pathfinding and Markov Chains - During my second year of study I created a puzzle solver for the 11-puzzle. It can use either depth-first or A* search to find a successful solution. I was also given a final year assignment to implement a Markov chain in order to model random movement of a small animal.

Furniture Designer - This project was a creative AI system to design furniture based on various attributes such as stability, usability and mass. The project creates desks and tables based on a 3D grid system, and the resolution of the grid can be changed to increase the detail or speed of the program.

View video > | Read report >

Image Analysis and Biometrics - I have learnt about various fundamental image processing techniques, including noise filtering, edge detection, moments and texture as well as pattern recognition using multi-variate classifiers. We also covered how to create biometric recognition systems.

OOP and Web

The course has extensively covered various forms of software engineering, with two double modules dedicated to planning and delivering a full product, one of which used Java and the other (my final year project) using Python. We have learnt and applied design processes such as Gantt charts, UML and Scrum methodology, as well as various forms of testing (including TDD) and other software engineering theory such as design patterns.

In terms of web development, we have used PostgreSQL for database access, AJAX to access data from external sources, PHP for server-side development, and naturally HTML, CSS and JavaScript too. We have also used the MVC design pattern during development.

Feature - Employee Records System

This was a 3-month piece of coursework which involved developing a project from a 'customer' specification (acted out by one of our lecturers), communicating with them to clarify requirements, design the software using UML and then implement it using Java and MySQL.

Gallery

Other projects

AJAX - This piece of coursework involved retrieving JSON data about local restaurants from multiple PHP scripts and matching them up to be displayed in a single table of information, and required us to come up with solutions to correctly match information with different name and address formats.

View live > | View code >

Databases - We have used PostgreSQL in classes, as well as learning about database normalisation, transaction and concurrency control, noSQL, temporal databases, and database security.

Networks - We covered networking protocols and hardware, including TCP/IP and the OSI model, and error correction.

Functional, HCI, Law, and more

Outside of the more traditional modules, I have also taken more varied modules as part of my course. These cover areas of computing such as functional programming using Erlang, Human-Computer Interaction theory, computing law, professional ethics, pure computing algorithms, networks and hardware, first-order logic, and computationally-relevant mathematics.

I believe that having a broad range of skills is a crucial advantage as a software developer. Understanding a wide set of computing (and non-computing) disciplines allows a developer to approach problems with a greater understanding of user's needs, appropriate coding styles and techniques, and hidden requirements (for example, relating to obeying laws). It also allows more innovative solutions to be developed by combining ideas from different areas.

Feature - Deadlock and Social Network

This functional programming assignment, using Erlang, tasked us with attempting to solve the dining philosophers deadlock problem. In the problem, five people (philosophers) are sat around a table, with a plate of food in the middle. Each person needs to use two forks to be able to eat, and each person has one fork on their left and one fork on their right. However, each person shares their forks with their neighbours, so a person is unable to eat if one or both of their neighbours are eating. If each person picks up one fork, the system will be deadlocked.

Another interesting Erlang assignment was to create a model social network, where users could create and like posts.

Gallery

Other projects

HCI - HCI was my favourite module in first year. Learning principles and rules of human vision, psychology and perception in order to be able to create a usable product is a vital skill in my opinion, and has definitely affected my approach to software design to make me much more user-aware. I frequently notice user-unfriendly design decisions in real software, from colour schemes to error messages, and I believe that developers should have more of a sense of awareness and duty to make user-friendly software.

Law and professional ethics - The law and professional ethics module, despite being optional at my university, was an essential course to take in order to be a responsible developer. Understanding the laws the UK has in place regarding cyber crime is important, but the discussions around professional ethics were truly eye-opening, and highlighted the power which developers have without even realising it. I was shocked by some of the mercenary attitudes displayed towards development, where people would do anything for money without considering the consequences, as well as the inability of the courts to prosecute anyone in many cases where consequences were life-changing or even fatal.

Algorithms - The algorithms module taught us many of the essential computing concepts which can be applied to problems in all areas. We covered concepts like linked lists, trees, graphs, priority queues, different types of sorting and big O notation.

Hardware - We have covered the fundamental components of computer hardware, the architecture of operating systems, and have also created our own original projects using an Mbed and FRDM system.

View Mbed video >

Computing-related maths - We have learnt various areas of maths, including matrix operations, statistical analysis, first-order logic, and finite-state machines.