Wyatt Baldwin

Projects

Programming Language / Interpreter

Feint is a programming language written in Rust (and still very much a major work in progress). I’m using it as way to learn Rust and also to scratch an itch I’ve had for a long time to implement a compiler/interpreter.

As I’m neither a Rust expert nor a programming language designer by trade, there are undoubtedly many things that could be improved.

One thing I’ve learned working on this is that implementing a robust, well-tested, usable, batteries-included, consistent programming language is an absolutely massive project. It really makes me appreciate all the work that’s gone into the languages I use most often (Python, JavaScript/TypeScript) as well as others. In the beginning, I had many ambitious goals, such as optional static typing, that I’ve since scaled back.


Game of Life

An implementation of Conway’s Game of Life using React and <canvas>.

Click here for demoCode


MyStops

MyStops shows bus & train arrivals from TriMet’s TransitTracker™ service. Arrivals can be looked up directly with a stop ID or by choosing a stop (or stops) from the map.

The basic idea is that you’re near a stop and want to quickly see arrival times but you may or may not know the stop ID offhand. MyStops will zoom into your current location, allowing you to quickly select a stop. You can also select other stops simultaneously to compare arrival times.

I have plans to add a bunch of features—such as the ability to save stops, alerts, etc—but haven’t had time to implement them. The current, minimal version is still pretty handy as is, and I use it whenever I take transit.

Built with: Python, Django, PostgreSQL + PostGIS, TypeScript, VueJS/Vuex

CodeTriMet API


RunCommands

RunCommands is a developer tool for writing commands/scripts in Python that you might otherwise write as shell scripts or in a Makefile. It can also be used to easily create standalone console scripts.

One of the features is the ability to chain commands together, similar to make. For example, if you have build and deploy commands, you could run them sequentially like so: run -e production build deploy. If the build step fails, the run will abort.

I use RunCommands in most of my projects for bootstrapping, deployment, and other utilities. For projects with more complex deployment requirements, I use it to drive something like Ansible.

Built with: Python, TOML


jsun

jsun is an alternative JSON decoder/encoder that supports some extra features like trailing commas, line comments, additional number formats, and literal dates & times. These extra features can be disabled when strict JSON compliance is required.

It also has additional hooks so that essentially any aspect of JSON parsing can be customized.

An additional feature is the ability to read INI style config from files where dotted keys represent an object hiearchy and values are encoded as JSON. This is similar to TOML but initially developed as part of another project before I had heard of TOML.


Dijkstar

Dijkstar is a library for creating graphs and finding paths using Dijkstra’s single-source shortest-paths algorithm. It also implements A* by allowing a heuristic function to be specified, which guides the algorithm toward the destination (Dijkstar = Dijkstra + A*).

One of the distinguishing features of Dijkstar is the ability to compute costs dynamically. This was something I couldn’t find in a Python library when I started working on byCycle several years ago.

I’ve recently been working on building a simple HTTP graph server so that it’s possible to operate on a graph that lives in a separate process, and potentially on a different server, from client apps.

Without the server, every process that needs to use a given graph has to load it from disk separately, inflating memory usage.

The server approach is more scalable and also allows for updating and restarting client applications without having to reload the graph from disk.

Built with: Python


byCycle

Get there by cycle!

byCycle is a bicycle trip planner that uses OpenStreetMap data for address lookup and routing. In the past, it was fairly widely known and used in the Portland area and, for a while, also in the Milwaukee, WI, area. I’m currently working to modernize it, especially the user interface.

NOTE: Geocoding is currently a bit wonky as are some aspects of the UI. I’ll get around to fixing these issues eventually, but as I’m likely the only user at this point, it isn’t a priority.

Built with: Python, Pyramid, SQLAlchemy, PostgreSQL + PostGIS, Svelte

CodeMore info


More Projects

All of my open source projects can be viewed on GitHub.