I am a final-year computer science student at the University of St. Andrews with a natural curiosity nurtured through self-motivated learning with like-minded students to learn multiple programming languages, alongside a broad academic and linguistic foundation.
MSci Computer Science
University of St. Andrews
June 2023
St. Andrews, United Kingdom
International Baccalaureate
St. Joseph's Institution International
November 2017
Singapore, Singapore
Site Reliability Engineering Intern
May 2022 - Aug 2022
Dublin, Ireland
Part-time Undergraduate (Software - GPU)
ARM
March 2021 - May 2022
Cambridge, United Kingdom
Undergraduate Research Assistant
University of St. Andrews
September 2020 - December 2022
St. Andrews, United Kingdom
Senior Student Ambassador
University of St. Andrews
September 2018 - May 2023
St. Andrews, United Kingdom
Teaching Provider (Part-Time)
St. Joseph's Institution International
January 2018 - August 2018
Singapore, Singapore
Data Enterer (Part-Time)
Holmusk
June 2016 - August 2016
Singapore, Singapore
ECA Provider (Part-Time)
St. Joseph's Institution International
June 2015 - December 2017
Singapore, Singapore
Dental Work Experience Intern
Thompson Medical Centre
June 2015 - July 2015
Singapore, Singapore
Dean's List, Fifth Year
University of St. Andrews
June 2023
St. Andrews, United Kingdom
Dean's List, Fourth Year
University of St. Andrews
June 2022
St. Andrews, United Kingdom
Dean's List, Third Year
University of St. Andrews
June 2021
St. Andrews, United Kingdom
Christopher Strachey Prize
University of St. Andrews
January 2020
St. Andrews, United Kingdom
Dean's List, Second Year
University of St. Andrews
June 2020
St. Andrews, United Kingdom
Dean's List, First Year
University of St. Andrews
June 2019
St. Andrews, United Kingdom
Professional Skills Curriculum Award
University of St. Andrews
June 2021
St. Andrews, United Kingdom
3rd Degree Black Belt in Taekwondo
Singapore Taekwondo Federation (STF)
June 2018
Singapore, Singapore
2nd Degree Kukkiwon in Taekwondo
World Taekwondo Federation (WT)
June 2019
Singapore, Singapore
Bronze Medal in Poomsae
National Student Taekwondo Championships
February 2019
Manchester, United Kingdom
NYAA Gold Award
National Youth Achievement Award Council
January 2018
Singapore, Singapore
Grade 5 in Saxophone
Associated Board of the Royal Schools of Music (ABRSM)
January 2018
Singapore, Singapore
Gold Medal in Kyorugi
2016 International School Taekwondo Championships
April 2016
Singapore, Singapore
Asian Women's Welfare Association (AWWA)
Student Volunteer
October 2016 - November 2016
Singapore, Singapore
Juara Turtle Project
Challenge Week Volunteer
April 2016 - October 2016
Singapore, Singapore
St. Joseph's Institution International
Maths/Science Tutor
January 2016 - December 2016
Singapore, Singapore
St. Joseph's Institution International
Peer Support Mentor
January 2016 - December 2016
Singapore, Singapore
Asian Women's Welfare Association (AWWA)
Student Volunteer
April 2015 - July 2015
Singapore, Singapore
Lee Ah Mooi Old Folks Home
Student Volunteer
January 2014 - June 2014
Singapore, Singapore
Loola Orphanage
Student Volunteer
August 2012 - August 2012
Singapore, Singapore
Lee Ah Mooi Old Folks Home
Student Volunteer
January 2012 - December 2012
Singapore, Singapore
Tools
Languages
Skills
Note: Coursework repositories are set to private in order to ensure good academic practice, and prevent plagiarism, but are accessible on demand.
Architectural analysis of a specification for a collaborative story writing system, alongside a skeletal implementation (method stubs).
Implementation of a type & scope-checker for the MiniJava language, making use of the ANTLR parser to generate an AST to work with.
Implementation of a translator for the Funl language (a restricted subset of Haskell) to the lambda calculus, and an evaluator that would reduce the lambda calculus representation to its normal form.
Implementation of a variation of Missile Command (1981) written using java-processing. Functionality included wave-based difficulty progression, projectiles affected by gravity & drag, phase transitions, and custom sprites and sounds.
Implementation of a variation of Robotron: 2084 (1982) written using java-processing. Functionality included wave-based difficulty progression, AI-based enemies with variable behaviours, procedural level generation with binary space partitioning, and custom sprites and sounds.
Implementation of the game Wanderer's Path, a self-designed game combining the concepts of snake-based movement and tower defence as a top-down RPG. Functionality included range-based auto-attacks via a ray-casting algorithm, novel AI pary-based behaviours, procedural level generation, unique player upgrade trees, boss battles, and a GUI alongside custom sprites and sounds.
Implementation of Best First Search (with both Manhattan and A* heuristics) to determine the number of moves to solve the eights puzzle, with customization allowing for sizes beyond 3x3. Iterative Deepening search with Branch and Bound characteristics was also added for comparison.
Implementation of a multi-level neural network utilising MiNet to recognise hand-written digits. Analysis was conducted on the effect of numerous hyper-parameters on the performance of the network.
Personal project getting a handle of the OpenCV library, implementing live facial detection via a webcam, using Haar and LBP cascades, and facial recognition with a trained EigenFaceRecogniser model.
Implementation of a database given a relational schema and scenario description, alongside a GUI written with JavaFX to perform queries and insert/access data without any user interaction with the database.
Developed a program which can intepret basic Finite State Machines from a description of the transition table giving rise to the machine. Furthermore, ensured definitions were legal.
Implementation of merge and selection sort within Java, alongside numerical analysis in order to determine their complexities in comparison to the literature values.
Creating a working simulation of the game Hex using Java , allowing connection between a client and a server, or 2 players on the same device. Developed alongside a GUI for comfortable user interaction. Furthered network skills, and UX programming.
Paired work writing a LOGO to PostScript compiler, requiring skills in lexical analysis, tokenisation, and error reporting.
Optimisation of the populat game Starcraft II: Wings of Liberty. Attempts to locate the fastest path to a user-defined goal via simulation and heuristic pruning. Also developed alongside a basic GUI.
Header-only library implementing a high-level interface for two stream-parallel patterns - farms and pipelines - using pthreads, abstracting over the lower-level functionality pertinent to parallelism and allowing pattern nesting.
Implementation of three different strategies to achieve safe concurrent access to a Set data structure - a global mutex, a finer-grained lazy-deletion, and a lock-free atomic compare-and-swap strategies.
Implementation of four different branch predicition algorithms (always-taken, bimodal, gshare and spotlight) to be used on trace files for accuracy evaluation.
Implementation of a simple FAT file system in C, stored on a local file, extended to have measures for concurrency control and access.
Implementation of a simple shell making use of system calls in C. Subset of Unix bash commands implemented, alongside file redirection and piping, background execution and the usage of shell variables (alongside environment variables).
Simplistic C program written to determine the counts of individual characters within a text file, to get a feel for contructing simple data abstraction in C.
Development of a program which looks at logical inference, determining whether a set of user-defined clauses will lead to a contradiction. Made use of part of the DPLL algorithm in order, namely unit propagation.
Multi-threaded program simulating a fixed-size generic Stack. Ensured thread-safety and blocking functionality, through the usage of semaphores and mutexes.
Rust-based backend to post and query to a MariaDB remote database using Diesel for MySQL functionality. Used to store usernames, posts and communities on the federated network.
Group project coded to create a simulation of a scientific calculator, allowing for function creation amongst other features.
Console-based implementation of the board game othello, alongside multiple user enhancements, some basic AI opponents, and network playability.
Evaluation of several classification algorithms to classify aerial seal images, using k-fold cross validation and hyper-parameter tuning to determine an optimal model
Logistic regression model that could predict a type of bean given 16 image features within a provided dataset.
Implementation of three alternate algorithms for parts-of-speech tagging (eager, viterbi, local decoding) for accuracy comparison and evaluation, using the Universal Dependencies treebanks for multiple languages.
Keylogger application written to log keypresses and the rhythm of a user to aid in the assessment of typing rhythm as a plausible biometric authenticator.
Implementation of three different algorithms solving the closest-pairs problem, including a randomised linear-time sieve algorithm. Code was also written to plot and conduct data analysis on said algorithms through matplotlib and scipy.
Implementation of a new arithmatic operation (Distorted Integers), and functions to ensure that mathmatical properties are upheld. Also included an algorithm to determine the span of such an operation with given parameters.
Program written to analysis wikipedia data dumps, checking the consistency of the data, and performing moderately complex descriptive analysis of the data using the pandas library.
Two independent web interfaces visualising data sourced from several IoT sensors - a modular dashboard created with React through the Expo framework, providing digestible summaries of the sensor data; and a creative P5 sketch of a generative landscape based on sensor values.
Melody-matching game making use of the Microsoft Kinect and a simple Arduino piano to teach students about the spatial mapping of musical notes - aiding in music education.
To-do list web app to help increase productivity and higher communication between collaborating users, allowing them to create and login to personal accounts to create, view, delete and edit to-do list items containing descriptions, due dates, and assignees (other users).
Alternative control scheme for an adapted version of the game `Asteroids:Reloaded` comprising of two BBC micro:bits (1x v1, 1 x v2) and enabling players to control the game through a WebSerial connection
Web server to serve posts handled by Rust backend, allowing for user authentication and navigation.
Hand-written website employing HTML, CSS, JavaScript alongside the D3 and Bootstrap libraries to create an interactive data visualisation based on input CSV files.
Implemented data visualisation within a biological evolutionary simulation (S.E.E) using C# within Unity, alongside a GUI for user-guided customisation. Improved the process flow for capturing data points for post-simulation analysis, removing previous file-dumping overhead.
Implementation of a docker container to aid in the usage of Jupyter notebooks with the GAP language for usage in deepnote for collaborative projects.
Matlab program written to remove common background noise from provided signals to isolate a base audio file.
Matlab program written to automatically segment an image taken of a pile of pills to count the number of pills within the image (and extended to work with different types of pills).
Designed a grammar to model a sub-set of the English language, via basic terminal rules for lexical entries, non-terminal productions for basic sentences. Advanced features such as verb forms, number agreement, preterite, gerundive and modal verbs in verb phrases, and subcategorisation of verbs were also implemented.