Welcome!
I'm a software dev interested in just about everything. Among other things, I use this site to exhibit some of my recent work and writings. Feel free to reach out with any comments or questions via email or GitHub issues.
At the moment, I spend most of my time working (and thinking) in TypeScript, Rust, Haskell, and Racket. When I'm not hacking, I enjoy a good adventure outdoors.
Recent work
Over the past few years, my two most enduring interests have been programming languages and rich user interfaces. All of the projects below and most of my recent work has been related to at least one of these topics.
-
A Pythagorean Mosaic (Typescript, React)
An interactive, animated demonstration of the Pythagorean Theorem, based on a “mosaic proof” by Paul Lockhart. The implementation includes an algebraic (and effect-free) approach to animation, along with some special-purpose hooks. The result is a set of animations that can be modified in real-time, and scrubbed back and forth.
-
ramo (TypeScript)
A port of Friedman, Byrd et al.'s miniKanren to TypeScript. Whereas functions are at the heart of many programming languages, MiniKanren (and thus ramo) is founded on the more general concept of a relation. Relations free us from having to deal with the details of how computations are carried out; all that is required is a description of what we would like to be the case. See the README for a short tutorial on this mind-bending paradigm.
-
Giraffe (TypeScript, React, in-progress)
A tool for creating and editing graphs (that is, networks). My hope is to make it easy for graph-theorists to import graphs into tools like Mathematica (entering them by hand is painful and error-prone). The implementation—and drag-and-drop in particular—makes heavy use of algebraic data types. Paired with React's useReducer hook, this makes for very pleasant programming.
-
tm (TypeScript, React)
A Turing machine editor and simulator. I'm fascinated by computation, and had dreamed of creating a decent simulator since I first learned about Turing machines.
-
A Taste of the Lambda Calculus (Rust, in-progress)
At the moment, this repository contains only a parser and normalizer for lambda terms. My aim is to create a programming environment for the lambda calculus accompanied by an introductory book on the subject. This would include treatments of some intriguing topics like quotation and metacircular reduction that are difficult to approach with Turing machines.
Even though the project is far from complete, you'll find an error-tolerant parser and a normalizer that reduces (De Bruijn-indexed) terms using normalization-by-evaluation. These form the core of what I hope will be more to come.
Writing
-
Priority Queues using Binary Heaps
An introduction to binary heaps with an emphasis on real-time scheduling applications. Features an implementation in TypeScript.
Get in touch
The easiest way to reach me is by email: wjlewis2@protonmail.com.