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.
Posts
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.
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.
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.
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.
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.
Barely coherent ramblings about how cloud storage of bulk data could
be done in a decentralized marketplace.
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.
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.
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.
I wrote a basic guide-by-examples of Scheme syntax-rules macro patterns.