Will Donnelly

About Me

I'm a generalist Software and Electrical Engineer with experience ranging from circuit design/layout and microcontroller firmware, to backend servers and JavaScript frontends. Currently working as a Software Engineer at Estuary.

I can be found on GitHub or LinkedIn, and you can reach me at wgd@willdonnelly.net.


16 May 2021 · A Player Controller with Airstrafe/Surf Physics in Godot
Games in the Source engine have some interesting movement physics which permit tricks like bunnyhopping, airstrafing, and surfing. I implemented a player movement controller for the Godot game engine which can perform the same tricks, and threw that into (the glTF conversion of) an iconic surf map to test it.

Includes an HTML5 demo which sadly performs much worse than the desktop equivalent, but manages to be barely playable on my machine.

6 May 2021 · A Tiny x86 Assembler Written in Scheme
I wrote a self-hosting Lisp for fun. The main Lisp implementation isn't done enough to publish but I'm pretty happy with how the assembler/linker code turned out, so here's my x86 assembler written in ~300 lines of somewhat-readable Scheme.

25 October 2020 · Compact Representation of Church-Encoded Data
A discussion of the most efficient ways of encoding constant data in the Lambda Calculus, where "efficiency" is measured in bits-per-bit when terms are serialized to the Binary Lambda Calculus encoding.

14 August 2019 · PointerLock Input Relay
A useful bit of code that encapsulates some of the busywork of managing the PointerLock API and event listeners to collect mouse+keyboard input for HTML5 video game type uses.

27 August 2018 · Web Browser Language Shims
A short note on how to add custom script element types via a bit of JavaScript which will fetch and execute the code on page load.

8 July 2016 · On Decentralizing Cloud Storage
Barely coherent ramblings about how cloud storage of bulk data could be done in a decentralized marketplace.

2 October 2010 · Debugging an STM32 via SWD with Bus Pirate
A brief development log of pirate-swd, a weekend-project implementation of the Serial Wire protocol using Dangerous Prototypes Bus Pirate for hardware interfacing. It's come in handy a couple of times when I needed to program a microcontroller and the JTAG scan chain was busted.

14 March 2009 · Detecting Scheme Implementations at Runtime
For a while I toyed with writing a portable standard library for a handful of common implementations of R5RS Scheme. This obviously would require some way to determine what platform you're running on, so I came up with a moderately-clever solution which used unspecified corners of the R5RS specification to "fingerprint" the implementation it was running on.

14 October 2009 · Brian’s Purely Functional Brain
Brian's Brain is a fun little cellular automaton. I wrote an implementation in Haskell because that was the sort of thing I did in college.

4 September 2008 · A Scheme Syntax-Rules Primer
I wrote a basic guide-by-examples of Scheme syntax-rules macro patterns.