I am a software developer interested in graphics and compilers. I work on the ARMv7 port of WebKit/JavaScriptCore. I believe software should be fast, simple and work exclusively for its users. In my free time, I roast coffee and collect old computers. You can contact me at hello@justinmichaud.com, or on the WebKit public slack. If you wish to become a contributor to JavaScriptCore, reach out and I can help you find something.
Building WPEWebKit for 32‐bit Raspberry Pi 3 (Buildroot DRM config) (2024)
Random notes about building the WPE WebKit port.
Read
A Tour of Inline Caching with Delete (Internship, 2020)
Details of how JavaScriptCore's inline caches work to ensure fast property access.
Read
NES Emulator
I made an NES emulator to learn rust while in my first year of university. It has partial support for Mapper 4 (SMB2 and SMB3) and audio. It also includes optional modifications to Super Mario Bros by hooking into memory reads/writes, allowing new levels to be loaded in and out. In 2022, I converted this into a WASM benchmark subtest. Source Play Now (game modifications) Benchmark your browser!
GlideN64
I made a demo adding stereoscopic rendering support to GlideN64 Nintendo 64 graphics plugin. Every draw call that the game makes to the high-level emulation code is doubled. Then, after the game applies its projection matrix to vertices, the eye translation is applied. This avoids toe-in artifacts, but causes depth fighting issues. It is not compatible with low-level emulation (direct emulation of the N64 graphics chip), and is too unstable to be merged. Source
VR Head Tracking Shooter
A shooter game for Google Cardboard that uses BoofCV to track the position of your head, allowing you to doge obstacles and shoot enemies. Using Bluetooth, a TCP connection allowed head tracking data to be sent to the android phone in the headset. Built using OpenGL and LibGDX for Mhacks 8. Source
PagerDOOM
This was a hack day project while interning at PagerDuty. This is a chocolate DOOM mod that spawns an enemy for each
incident in your PD account. Resolve incidents by shooting them! Source