Wyatt Baldwin

Projects

Game of Life

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

Click here for demo

Code

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.

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

More info · Code

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: Node.js, PostgreSQL + PostGIS, TypeScript, React/Redux

Code

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, PyYAML

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 applications.

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

More Projects

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