featured projects
"We each need to find our own inspiration, Kiki. Sometimes it’s not easy."- Ursula, Kiki's Delivery Service
machine learning
Nebula Classification
A testing ground for applying computer vision models to astronomical data.
  • (Work in progress)
  • Image processing: Gaussian blurring, Asinh stretching on images from the Digital Sky Survey (DSS)
  • Model: currently investigating VAEs for image denoising, and potentially learning latent representations for classification.
Stack: PyTorch, AstroPy
UofT Reddit Sentiment Analysis
Finding the best (and worst) courses, departments and colleges at UofT.
  • Method: Topic-aware, context-aware sentiment classification using language models with Regex matching. Studied correlation with UofT course evaluation scores to measure accuracy.
  • Model: gemma-1b hosted locally with ollama
  • Dataset: 233k sentiment classifications covering 5.5k course codes, produced from 1.7 million Reddit posts & comments from UofT students
Stack: Huggingface, Pandas
CargoVision
Detects Dangerous Goods shipping labels on incoming cargo shipments. Internship project for Cathay Pacific Airways.
  • Model: YOLOv8, finetuned
  • Dataset: custom dataset compiled from online sources & from Cathay Cargo Terminal; 760+ images, 16 object classes, 2900+ labels
Stack: OpenCV, Roboflow, YOLOv8
web development
Scriptorium
A code-sharing platform with remote code execution, and community features. Much like replit.com! Course project for CSC309.
  • CRUD API: Type-safe management of users, code files and blog post entities with Prisma ORM
  • Remote code execution: Docker containerization of environment, supporting 12 major languages
  • Frontend: code editor with syntax highlighting, paginated search results, responsive design
Stack: Next.js, Prisma, Docker, Node.js, React, shadcn, TailwindCSS, Typescript
ASX
Website for UofT's astronomy club for events postings.
  • News feature: Provide updates on club events with an AWS API Gateway, implemented with Lambda functions, DynamoDB and S3 for images.
  • The UI looks pretty cool, imo.
Stack: Next.js, React, TailwindCSS, Typescript
TTCTracker
Predicts public transit vehicle arrival times. Course project for CSC207.
  • Prediction algorithm: self-designed; combines live vehicle locations, route geographical data and historical information to predict arrival times
  • Backend: based on clean architecture with adherance to SOLID, providing a RESTful API
Stack: Java, Spring Boot, React
NOVA Ground Station
Data visualisation for University of Toronto Aerospace Team's rockets' sensors.
  • Dashboard: real-time, animated, scrollable, customisable plots, sampling sensor values from an API on a Raspberry Pi
Stack: React, ChakraUI, react-chartjs-2
misc
Ranked Choice Voting
Python implementation of RCV (a.k.a. single transferable vote): a fairer, more representative voting system.
Stack: Python, clean code.
Hinton Number
Ever heard of the Erdos Number? This is that, but measuring authorship distance from Geoffrey Hinton.
  • Dataset: authorship graph from DBLP
Stack: Python, networkx
Hong Kong Protest Visualisation
Day-by-day geographical visualisation of events and munitions fired by police during the 2019 Hong Kong Anti-Extradition Protests.
  • Dataset: shapefiles of Hong Kong districts, police munitions, and protest events
  • Visualisation: day-by-day plot of events, and aggregated statistics of police munitions used
Stack: Python, geopandas, matplotlib