Selected Projects (in reverse chronological order):

  • A prototype of a DeFi interest rates swap platform, which enables users to manage their interest rates risk through trading the yield-bearing portion of their staked positions on the open market, powered by an on-chain central limit order book.
    • Stack: Solidity, Javascript, React, Hardhat, Ethers.js
  • Ariadne1 - a prototype of an AI-augmented legal search engine for legal judgments, with custom score function based on “weight-y” citations2 and nearest neighbours. The intuition was that the parent and child nodes of judgments similar to a specific one are relevant in search.
    • Stack: Clojure, Clojurescript, Python, Elasticsearch, PyTorch, Re-Frame
  • HKEX Announcement Classifer - Training a transformers model to classify different types of disclosure announcements made by public companies listed on the Hong Kong Stock Exchange3.
    • Stack: Python, Tensorflow
  • Facial Recognition with Triplet Loss & KNN - Tinkering with an Xception model trained on the CelebA dataset on Google Colab. Implemented a local facial recognition system with OpenCV.
    • Stack: Python, Tensorflow, OpenCV
  • Neural Networks and Optimizers from Scratch - A neural network written in pure NumPy. I explored how different optimizers behaved on a minimalistic example. I implemented 10 optimizers from their original papers, including RMSprop, Adam, Adamax etc, as well as modifiers such as Decaying Momentum (Demon) and Decoupled Weight Decay.
    • Stack: Python, NumPy
  • AlphaZero Clone - I replicated the self-play reinforcement learning algorithm as conceptually described in the seminal AlphaZero paper. This implementation can, given sufficient time and/or computational resources, theoretically learn any two-player board game of arbitrary complexity, so long as the game can be represented as a matrix.
    • Stack: Python, Tensorflow
  • Stock Market Backtester - An extensible backtester written with NumPy and Pandas, showcasing Dollar-Cost-Averaging (DCA) and DCA with portfolio rebalancing.
    • Stack: Python, NumPy, Pandas



Courses and Certificates


  1. My first attempt at a legal-tech startup, the shortcomings of which are encapsulated here↩︎

  2. The landscape of legal judgments can easily be visualised as a graph. The authority of common law judgments can usually be traced back to a root node. ↩︎

  3. I’ve since recognized a few limitations of my experiments. The dataset was too small, the representations learned by the neural network were likely to be of low-fidelity, due to truncation. Language models seem to struggle with long-range dependencies. ↩︎