Git-based headless CMS (this website)
Aug 2020 - Current

The project is a reboot of this website, previously built with Jekyll, using Nuxt.js with the @nuxt/content module. The goal is to reduce the amount of mental energy spent on maintaining the blog so I can just focus on writing the contents.

It features a streamlined content authoring/publishing process using only 3 commands.

In addition, Vue components can now be used directly inside the markdown files for adding more interactivity to the articles. The toolstack also provides a more mainstream development environment (Vue.js) in case of making changes to the website.

Click on the buttons below to see a detailed report of this project and the source code.

Strava activities bulk exporter for Garmin Connect
Mar 2020 - Jun 2020

Importing your training activities from Garmin to Strava is easy, but not the other way around.

This tool exports all your Strava activities into gpx files, which can then be uploaded into your Garmin Connect account.

Extracting shift handover data from paper forms in a hospital environment
Feb 2020 - Oct 2020

At the shift changeover in most hospitals, a paper form is completed to summarise the last shift and highlight key aspects of the upcoming shift.

The main goal of the project is to extract the handwritten data from these forms using Azure Form Recognizer with supervised learning.

The result is a tool that,

  • the users can use to take a picture of the completed forms using their smart phones,
  • the tool then automatically extracts the data and pre-fills the form, and
  • the user can review and save the data.

Click on the link below to see a detailed report of this project with some miscellaneous reflections.

Adversarial machine learning in predictive policing
Nov 2016 - Mar 2017

Machine learning systems are being used in more applications such as spam email filtering, intrusion detection systems etc. One particular area where it is gaining popularity recently is predictive policing in which the system uses machine learning algorithms to predict where crimes are likely to happen so police can send patrol cars to these places.

Contrast to common perceptions, machine learning systems can be vulnerable to various attacks.

In this project, we focus on adversarial machine learning in predictive policing. We first look at two of the most successful models used in predictive policing: the self-exciting point process model and the Series Finder model. We will then examine the different attack techniques that a malicious adversary can use to attack the models. These techniques can be categorised into causative attacks and exploratory attacks where causative attacks generally require control over the training process whereas exploratory attacks usually focus on probing the inner state of the learner. A kernel density estimation based model has been built and attacks were set against it. We will also discuss the techniques that can be used to mitigate effects of the attacks. Following that, we will provide some reflections and guidance on future work. In the end, we conclude that contrast to common perceptions, machine learning models can be vulnerable to various attacks.

OCR from historic documents
Aug 2016 - Oct 2016

Optical Character Recognition (OCR) for historical documents remains a very challenging case due to the unique characteristics those documents possess such as features wandering baselines, ink splodges, use of odd fonts and calligraphic capitals and the use of characters that are no longer being used in modern documents.

In this project, we present two models based on Support Vector Machines (SVM) and Convolutional Neural Network (CNN) to solve the problem. And the Convolutional Neural Network is our main focus.