Skip to content


Data Visualisation Tool Based on Conceptual Modelling

    A data visualisation tool utilising full knowledge of the conceptual schema. Implementation includes reverse engineering a database from the relational level to the ER level, mapping it to a set of Visualisation Schema Patterns, and the generation of data visualisation. Visualisation Schema Patterns are proved effective in the published paper of my project supervisor Dr Peter McBrien: Towards Data Visualisation Based on Conceptual Modelling. This tool has demonstrated its efficiency in various visualisation tasks. It is capable of generating 19 types of visualisations depending on the number/classifications of attributes and the relationship between them.

    China Mobile Internship

      I was in a two-month network security analyst program. For the first few weeks, I got systematic training and studied penetration testing skills and CISSP. My daily job is cyber attribution using information from sys-log from the company’s system. I have produced a number of valuable reports. I have independently developed a tool using Python that gathers information from a list of target IPs and filters out malicious IPs.

      Convolutional Neural Networks for Image Classification

        In this Computer Vision coursework, I explored the application of convolutional neural networks for image classification tasks, specifically in the domain of fish classification for precision fishing. I developed an image classification model using PyTorch, that can classify fish species given input images. This coursework contains two tasks: 1. Train a model to classify various fish species. 2. Finetuning the last layer of the trained model to adapt to some new species. The trained model and the finetuned model both reach the accuracy of 99%, on the 800 test images.

        Butterfly Annotator

          An online image annotation tool originally for butterfly images. Designed for a professor for machine-learning purposes. Images can be annotated by drawing and linking rectangles on images to relevant keywords. This image annotation capability is driven by the JavaScript p5 library.

          History In Line

            Developed a web application with a Python Flask backend, integrated with a JavaScript p5 library powered frontend. Enhanced the user experience for history-based learning and note-taking by implementing a dynamic timeline feature, allowing for adjustable scaling of historical events.

            WACC Language Compiler

              This is the second-year compiler group project, which was written fully in Java. Implemented a compiler for WACC language that generates assembly for the ARM11 architecture. It consists of a lever, parse, and semantic analyser in the frontend, and a code generator in the backend. The ANTLR tool is used to generate the language parser which constructs the syntax tree. Syntax and semantic checks are performed in the frontend, and error messages are generated if any syntax or semantic errors occur. The compiler is capable of analysing basic control flows, including if-else statements, for/while loops, switch statements and break/continue. It supports full pair type as well as macros.

              Pintos Operating System

                This is the second-year OS group project, which was implemented using C. Developed an x86 simple operating system with thread scheduling, resource management, virtual memory management and support for user programs. Thread scheduling implementation includes a Round-Robin process scheduler and a priority-based scheduler based on CPU time of each process, using synchronisation mechanisms such as locks, semaphores and monitors. Virtual memory management implementation includes page allocation, copy-on-write, shared-pages, memory-mapped files and page swapping. Enable user-space program execution by implementing a number of standard Unix system calls, such as file open and close.

                ARM11 Emulator and Assembler

                  Implemented ARM11 emulator and assembler that supports four basic types of ARM11 instruction set:
                  Data Processing, Multiply, Single Data Transfer and Branch. Emulator implementation includes a decoder to decode binary. Assembler implementation includes a hash-table and tokeniser to convert assembly lines to binary codes.