Sean Xie

I'm a UWaterloo math graduate interested in backend systems, computer graphics, deep learning, and scientific programming.

Projects

What I work on in my free time!

Path Tracing

mango

Physically-based CPU path tracer.

Go
Path traced dragon render
Path traced Lucy statue render
Path traced gold spheres
Description

mango is a CPU path tracer: it simulates many possible light paths and averages them into an image (Monte Carlo integration). Under the hood, it has a BSDF-based material system, importance sampling, global illumination, and tile- and scanline-based parallel rendering.

Motivation

I've always liked the almost-magic trick of making a computer produce lifelike images. Physically based rendering was a natural rabbit hole for me.

View on GitHub Return to top

Deep Learning

neural

Small neural network engine built from scratch.

Go
Description

neural is a from-scratch feedforward neural network. It handles tensor arithmetic and automatic differentiation, includes tanh, softmax, MSE and CCE loss, and trains with mini-batch gradient descent. I want to keep expanding the repo into a broader deep-learning sandbox (e.g. PyTorch scripting and others).

Motivation

After taking a Neural Networks course at school, I wanted to see what frameworks like PyTorch were doing for me. I soon realized how tedious this is, and now I just want to use PyTorch.

View on GitHub Return to top

Real-time 3D Rendering

impromptu

Software rasterizer I built to understand how graphics APIs like OpenGL work under the hood.

C
Normals
Wireframe
Description

impromptu is a small CPU renderer in C with a minimal OBJ loader. It takes a 3D model through the core stages of a graphics pipeline: loading, transforming, projecting, rasterising, and shading. There are basic optimizations like backface culling and view frustrum culling.

Motivation

It's called "impromptu" because I started the project on a whim. I found out that graphics punishes fuzzy understanding: coordinate spaces, projections, and shading logic all need to line up exactly before the output makes sense. That made it a very useful learning project.

View on GitHub Return to top

Math Library

polygo

Library for polynomial algebra.

Go
Polynomials
Description

polygo is a Go math library for constructing, combining, evaluating, and plotting polynomials through a clean API. I'm currently rewriting it with a better internal design.

Motivation

Math courses gave me the itch to implement the objects I was studying. I also wanted the library to feel pleasant to use, so choices like operator chaining and test coverage became part of the project rather than an afterthought.

View on GitHub Return to top

Animation System

tempo

Scriptable animation system that grew from a Go library into a browser demo.

Go JavaScript HTML CSS
Description

tempo is an animation system with keyframes, easing, text and image primitives, and a custom script format. The web app parses a user-written script and plays back the animation in real time.

Motivation

I kept using keyframes in Blender, Unity, Unreal, and DaVinci Resolve, then got curious about how that kind of system is built. The easing side also let me sneak in some math through reparametrisation.

View on GitHub Return to top

Discord Bot

GitHubCodeBot

Discord bot that turns GitHub file links into readable code previews.

Python Discord API
Description

GitHubCodeBot detects GitHub file links in Discord and replies with formatted code snippets, including syntax highlighting for many languages. If a snippet is too long, it gets split into consecutive messages.

Motivation

I found it annoying to leave Discord every time a friend shared a GitHub file link. This was a small quality-of-life project, which is often the best kind.

View on GitHub Return to top

Repository Archive

The rest of my projects

Older projects, ordered by repository creation year. I think it's nice to look back at old code and (hopefully) learn from it, because it's usually only after I leave a project behind when I realize I made dumb mistakes.

2022 / Python / JS / HTML / CSS

modern-meme-website

Meme generation website with Ray Li.

2021 / C++ / SDL

SDL-platformer

SDL platformer prototype with animated textures.

2021 / C++

CMDMystery

Game that takes place inside the terminal and Windows file system.

2021 / Python

directory-line-counter

CLI tool for counting lines of code.

2021 / C++

3d-engine-from-scratch

Followed javidx9's tutorial to build a 3D rasteriser from the ground up.

2021 / C++

CirclePhysics

Followed javidx9's tutorial to build a rigid-circle physics engine.

2021 / Python

ProgrammableImageArt

Accidentally built CPU ShaderToy.

2020 / Python / OpenCV

IPCamMotionDetection

Detect motion and capture it with an IP camera.

2020 / Python

SideStepTrainer

Trainer for practising League of Legends sidesteps.

2020 / Python / OpenCV

python-green-screen

Basic green screen chroma key.

2020 / Python

two-player-pong

Pong for two players on one keyboard.

2019 / C

Fibonacci

Small scripts for computing the Fibonacci sequence.

2019 / Python

LeagueChecker

Retrieves League of Legends player stats.

2019 / C++

DMOJ-solutions

Some of my solutions to DMOJ.ca problems.

2019 / Python

Bob-The-Triceratops

Game inspired by the offline dinosaur runner in the Chrome browser.

Return to top

Experience

Environment and Climate Change Canada / Toronto / Jan 2025 - Apr 2025

Research Assistant

Worked with Dr. Pengcheng Wang on tropical cyclone research.

Python C++ Fortran MATLAB

During my second term, I built on the tools from my first term to help implement and integrate a new hurricane model into the CONCEPTS ocean forecasting system.

Environment and Climate Change Canada / Toronto / May 2024 - Aug 2024

Research Assistant

Worked with Dr. Pengcheng Wang on tropical cyclone research.

Python C++ Fortran MATLAB

During my first term at ECCC, I got up to speed on the math and physics needed to understand how parametric wind profile models of tropical cyclones (TCs) worked.

I was also introduced to the motivating issue we wanted to solve: small TCs are difficult to simulate because the spatial resolution of the current model was too low and, since the model was so complex, clearly too expensive to increase. Therefore, the effects of small TCs would be underestimated (or entirely missed) in the overall ocean forecasting system, resulting in missed flood predictions.

The solution proposed by Dr. Wang was to use a simpler analytical model that could work efficiently on higher resolutions in order to "catch" small TCs.

To find the model most fit for our use case, I was tasked with implementing and testing a few candidate TC models against empirical wind data collected from buoys around the coasts of Canadian Maritime Provinces and from hindcast data that Dr. Wang produced earlier. There was no existing codebase for this, so I had to start from scratch.

Here was my process:

  • Centralize the data: depending on the source, wind data came in a few different forms (buoy data came in CSV, NetCDF, and JSON. Hindcast data came in a custom text format), so I wrote a script to parse and store them in a unified custom format.
  • Implement the models: all the models were just equations on a paper, so there was some translation work that I needed to do there.
  • Transform model output: the models are basically piece-wise defined cross-sections of a tropical cyclone. However, buoys gave wind speeds at points with latitude and longitude coordinates. I needed to map the cross-sectional models onto a 2D coordinate grid and vice versa. Furthermore, some of the models did not consider the movement of the tropical cyclone (they were symmetrical), so I needed to introduce the appropriate asymmetry.
  • Testing: With the buoy data and model output in the same coordinate space, we could begin to evaluate differences through plots and statistical error metrics. Many of the plots I produced during this stage ended up in the research paper I co-authored with Dr. Wang later on.

Atolio / Remote / May 2022 - Aug 2022

Software Engineer

Worked on the backend of an AI-powered enterprise search web app.

Go Java AWS Docker

I worked on the backend ETL data pipeline and integrated Okta's user identity API.

In terms of quality assurance, I wrote a tool in Java to benchmark the internal search engine, and I designed plenty of unit tests.

As part of UWaterloo's co-op program, I wrote a research article comparing two types of development workflows: test driven and feature driven.

Publications

Geophysical Research Letters | 2026 | Co-author

Synthetic Aperture Radar (SAR)-Based Evaluation of Tropical Cyclone Wind Profiles and a Theory-Based Radius of Maximum Wind Estimation

This came out of my ECCC research terms with Dr. Wang's group. I got to see the full research path: early ideas, repeated validation, peer review, revision, and finally publication.

View paper

Education

University of Waterloo | Sep 2021 - Apr 2026

Bachelor of Mathematics (Honours)

Minors in Pure and Computational Mathematics.

The combination gave me a proof-oriented math foundation, plus enough applied computing to keep turning theory into working programs.

Relevant Coursework
  • Networks and Distributed Computer Systems CS 436
  • Computational Linear Algebra CS 475
  • Neural Networks CS 479
  • Numerical Computation CS 370
  • Applied Cryptography CO 487
  • Differential Geometry PMATH 365

Tech Stack

Grouped around the kinds of roles I am most interested in.

Backend

Go Java Python AWS Docker SQL GraphQL REST ETL pipelines Okta API Search benchmarking Unit testing Discord API

Graphics

Go C Fortran Python Path tracing Rasterisation Rendering pipelines Animation systems Monte Carlo rendering OBJ loading GLSL Blender Unity Unreal

Machine Learning

Go Python Neural networks Automatic differentiation Tensor arithmetic Softmax MSE / CCE loss Mini-batch gradient descent Data visualization

Scientific Programming

Python C++ Fortran MATLAB Go Numerical computing Data processing NetCDF CSV / JSON parsing Wind-profile modelling Statistical error metrics Polynomial algebra

Tools

VS Code SSH Git GitHub Linux

Hobbies

A few things I keep coming back to outside of school and work.

Rendering Art

A lot of my interest in rendering and game development comes from wanting to make visuals that actually look good. I also like testing small GLSL ideas in Shadertoy.

View Shadertoy profile
Stylised Earth render
Glass table render
Low-poly mountain forest render

Badminton

I've been playing badminton since 2015.

Badminton action photo
Badminton court photo

Stack Exchange

Before AI tools were everywhere, Stack Exchange was where I went to get unstuck. I'm not as active there now, but I still like looking back at the questions I asked while I was learning.

Basketball

I follow the NBA quite closely. My favourite players are Tyrese Haliburton and Luka Doncic.

Other interests

I also enjoy music production, skiing, video editing, chess, and the outdoors.

Contact

I'm open to entry-level software engineering roles, especially where backend systems, math, graphics, or scientific computing show up. Email is the easiest way to reach me.