We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Joshua Potter
Hosted
The applications listed below are served from NixOS machines hosted on Digital Ocean . Configuration files for each of my machines can be found here . If interested in starting a similar hosting solution, consider getting a $200 credit using my referral link .
Realtime hide-and-seek application for the town of Fort Collins, built using Phoenix and React . Group up with friends, designate a hider, and allow the rest of the group to find the hider in a city-wide search. Use various clues to narrow down the search space at the cost of potentially giving the hider means of thwarting the search.
A static site generated with Quartz . Contains a collection of my transcribed notes, primarily Markdown managed using Obsidian . Hidden within are a collection of Anki flashcards synced using Obsidian_to_Anki .
A self-hosted Forgejo instance. For the most part, my GitHub repositories are a mirror of those found here. There do exist a few repos though that live exclusively on either site.
A Phoenix - and React -based project that provides an interface for finding chess coaches. This serves as an alternative to those found on Lichess and Chess.com . Based on the Tailwind Studio theme.
A collection of books I am actively studying. Usually mathematics or computer-science based, I aim to prove concepts as I encounter them using the Lean interactive theorem prover. All proofs are also available in LaTeX .
VP of engineering at Looped, the "Ultimate Virtual Venue". Featured on Forbes and TechCrunch . Led development on the Kotlin-based Android app (50K+ downloads, 4.5 star review), the Swift-based iOS app (100K+ downloads, 4.8 star review), the Vue-based web app, and the Django-based backend.
Projects
Other notable projects I've worked on or am currently working on.
A fork of
doc-gen4
tightly coupled to my
bookshelf
project. This augments the :docs
facet to convert LaTeX
files into PDFs and then list them in the generated navbar.
The nix configuration files used to declaratively describe my local and remote machines. The site you are on now is declared within this project!
A C-based CLI for initializing projects in a flexible but deterministic
way. Originally motivated to serve as a better alternative to
Nix flake templates
,
bootstrap
allows you to provide different parameters to
custom initialization scripts akin to npm init
,
django-admin startproject
, etc.
An Anki plugin for specifying synonyms within flashcard question and answer prompts.
An experimental Rust-based project for automatically syncing files across your desktop to a git repository. Allows upstream and downstream syncing with a single command, without any need to copy files manually to and from a git repository. Separately, a daemon can be spawned that watches files for changes and pushes/pulls them as they happen.
An example of a custom-rolled Prelude . Serves as a fairly comprehensive list of imports I found relevant across the various Haskell projects I worked on as well as a demonstration on how forwarding imports with Haskell works.
A small Vim plugin that joins a number of lines together and then
breaks them again with respect to the textwidth
parameter.
This enables re-flowing a set of lines similar in manner to
fold
or fmt
.
A small Vim plugin that maintains a custom registry for manipulating highlights. This registry allows highlighting different keywords without overriding previous searches. Includes a small snippet for including the active highlight from within the statusline.
An implementation of the classic pong video game, written from scratch
on an Artix FPGA using System Verilog. This works on a custom ALU
intended to process an arbitrary MIPS program with modified memory
configuration: .text 0x0000
and .data 0x2000
.
A memory mapped IO scheme is used to draw to the monitor and interact
with the keyboard.
A library for parsing various rulesets for cellular automata machines
(CAMs). The parsed CAM is displayed using
matplotlib
.
For instance, this library parses ruleset B3/S23
and then
produces a running visualization of Conway's Game of Life.
A Java implemention of a subset of Java. Generates code that targets
mJAM, an abstract machine included in the source that supports running
miniJava
. In particular, this implementation supports
various primitives, array types, and, to a certain degree, classes.
Blog
Long-form writing on topics that I found interesting.
As I’ve begun exploring the world of so-called algebraic effect systems, I’ve become increasingly frustrated in the level of documentation around them. Learning to use them (and moreso understanding how they work) requires diving into library internals, watching various videos, and hoping to grok why certain effects aren’t being interpreted the way you might have hoped. My goal in this post is to address this issue, at least to some degree, in a focused, pedagogical fashion.
In his introductory text , Oleg Kiselyov discusses the tagless final strategy for implementing DSLs. The approach permits leveraging the strong typing provided by some host language in a performant way. This post combines key thoughts from a selection of papers and code written on the topic. We conclude with an implementation of an interpreter for a toy language that runs quickly, remains strongly-typed, and can be extended without modification.