Programming Side Projects Music Art Animation Blog Everything


A Jalgorithm for Japplying Jeans to Jobjects

Proceedings of SIGBOVIK, April 1, 2023

A super serious use of differentiable rendering.

For years, society has been plagued by the lack of a conclusive answer to the question of how arbitrary things would wear jeans, if they wore jeans. This paper proposes a jalgorithm to determine the mathematically optimal configuration of pants on a silhouette, leveraging recent insights in the fields of computer vision and differentiable rendering.


June 4, 2022

A library for efficiently drawing to a texture in p5 WebGL mode.

This gives you access to Framebuffers, which are WebGL-only and similar to a p5.Graphics, but faster, and includes depth information.

GLSL Autodiff

August 13, 2021

Tired of doing math to get normals in your vertex shader? Same. Use this library to write your function once and generate derivatives automatically!

Sometimes, I want to displace mesh vertices in a vertex shader. After doing this, the normals of a surface should change. However, per-vertex normals don't automatically update! Manual updating of vertex normals requires you to take the derivative of your displacement function. This library automates that process so that it takes less time and is less prone to user error.

StrokeStrip: Joint Parameterization and Fitting of Stroke Clusters

Written in collaboration with Chenxi Liu, Nicholas Vining, Mikhail Bessmeltsev and Alla Sheffer.

ACM Transactions on Graphics, August 1, 2021

Artist-drawn vector sketches use clusters of strokes to convey intended curves. StrokeStrip fits intended curves to such clusters by computing and utilizing a joint arc length parameterization of each cluster, producing clean lines consistent with viewer expectations.

We observe that viewers perceive stroke clusters as continuous, varying-width strips whose paths are described by the intended curves. An arc length parameterization of these strips defines a natural mapping from a strip to its path. We therefore recast the curve fitting problem as one of parameterizing the cluster strokes using a joint 1D parameterization that is the restriction of the natural arc length parameterization of this strip to the strokes in the cluster.

More Programming

Side Projects

Square Agents

August 19, 2023

Independent agents trying to arrange themselves into a square.

Morph Maker

July 2, 2023

A small tool for making mesh warps

Business Card Code

June 7, 2023

A sketch that generates a business card, with code that fits on a business card.

Hand Nightmare

June 2, 2023

Some truly cursed hands

More Side Projects



October 7, 2022

A new wave/house EP featuring upbeat drums, some flute, and more vocals than usual.

She Answered The Trees

November 19, 2021

A mashup of a few genres, centered around some ukulele


January 16, 2021

Channeling stress into dance music, inspired by Remain In Light.

Motion Blur

March 29, 2020

Reflections on quarantine distilled into a small EP.

More Music


Zoom friends

May 24, 2022

A meme painting, done with my sister

Yonge St. near Davisville

May 24, 2022

Looking down at Yonge St. near the Mt. Pleasant cemetery

Experimental Farm greenhouse

March 7, 2022

The greenhouse in Ottawa's Experimental Farm in the fog

Hourly Comics

February 16, 2022

Made for #hourlycomicday 2022

More Art



July 21, 2023

Sometimes your speakers pick up weird sounds. Based on a true story.

Pickle brine shot

April 20, 2022

A tiny animation about drinking a shot of pickle brine


August 16, 2020

A meditation on feeling isolated, counting down to something different.

Get Back to Work

April 18, 2019

A vignette about daydreaming when you have work to do.

More Animation


How To Draw a Line

CC Fest, March 30, 2023

How does one add character to the stock vector line? In this session, work towards some techniques you can use to add more expression to your lines in p5, live coding our way through the math and geometry of lines to adding texture in shaders.

Black hole rendering

November 26, 2022

In which I really stretch the "science" part of "computer science" and presume to do some physics.

Speeding up tint() in p5.js

September 3, 2022

A problem I thought would be easier, but it turns out the browser is a little odd.

Flood Fill in Blender Grease Pencil

May 1, 2022

How the fill bucket tool in Blender works and how I tried to make it a little better.

More Blog