Projects

Personal Portfolio Websiteportfolio

Description: A terminal-themed interactive portfolio showcasing my projects, skills, and blog.

My Role: Solo Developer

Challenge: To create a unique and engaging personal website that reflects my technical skills and personality.

Approach: Designed a retro terminal interface using Next.js for a fast, modern web experience. Implemented features like command-based navigation, dynamic content rendering, and a blog powered by MDX.

Tech Used: Next.js, React, TypeScript, Tailwind CSS, MDX, Vercel.

Outcome: A distinctive and responsive portfolio site that effectively presents my professional profile and coding abilities.

SIWO - Fast Local Community Discoverysiwo

Description: Python implementation of a local community-search algorithm that handles weighted and overlapping networks.

My Role: Current maintainer, and original author of the python implementation that supports large graphs.

Challenge: Researchers needed a fast way to find meaningful clusters in large graphs without expensive global passes.

Approach: I designed a strength-of-links metric, wrote an iterative search that expands from seed nodes, designed a data structure for scalable access to large files, and added optional overlap handling.

Tech Used: Python, NetworkX, NumPy, GitHub Actions for CI.

Outcome: Runs 10x faster than baseline Louvain on mid-size graphs and supports pluggable heuristics. Supports file sizes up to 60GBs+ while using less than 8GBs of RAM. Used in two peer-reviewed papers.

MeerkatProject - Network-Analysis Suitemeerkat

Description: A JavaFX desktop app for visualizing static and dynamic networks.

My Role: Solo maintainer after original team of developers retired.

Challenge: The tool was powerful but dated; large graphs lagged and many functionalities and algorithms were missing.

Approach: Refactored core rendering loop, added modern graph-layout algorithms, and packaged cross-platform installers.

Tech Used: Java 11, JavaFX, Maven, JGraphT.

Outcome: Current release can run on multiple operating systems. The software supports state-of-the-art algorithms. Researchers at U Alberta now use it in network-science workshops.

Sarcasm-Detection-NLPsarcasm

Description: End-to-end pipeline for detecting sarcasm in social-media text.

My Role: Project lead during a grad NLP class.

Challenge: Sarcasm is hard for pure sentiment models; needed context and rich language cues.

Approach: Compared SVM, LSTM, and BERT variants; engineered features like emoji density and punctuation patterns; wrapped everything in a clean training script.

Tech Used: Python, PyTorch, HuggingFace Transformers, scikit-learn, Weights & Biases.

Outcome: Achieved 93% F1 on three public datasets, beating the published baselines we tested against.

paper.io Deep-Q Network AIpaperio

Description: Reinforcement-learning agent that plays the game paper.io using a convolutional DQN.

My Role: Wrote the training environment and reward shaping.

Challenge: Sparse rewards and continuous movement made naïve RL unstable.

Approach: Captured game frames with OpenCV, discretized actions, used experience replay and target networks to stabilize learning.

Tech Used: Python, PyTorch, OpenCV, NumPy.

Outcome: Agent reached human-level performance after ~3 M frames.

type a command or path...
location: Edmonton, AB--:--:-- --