Visualization 5

function randn(n) { return Math.floor(Math.random() * n); } const w = 100; const h = 50; const maxNewElsPerTick = 10; const deathThresh = 10; class Canvas { constructor(canvasDOM) { this.dom = canvasDOM; this.ctx = canvasDOM.getContext("2d"); // expand can…
Read more...

Visualization 4

This visualization is a conglomeration of ideas from all the previous ones. On each tick up to 20 new pixels are generated. The color of each new pixel is based on the average color of its neighbors, plus some random drift. Each pixel dies after a certain number of ticks, N. A p…
Read more...

Ripple V3

Movement: Arrow keys or WASD Jump: Space Goal: Jump as many times as possible without touching a ripple! Press Jump To Begin! Who can make the muddy water clear? Let it be still, and it will gradually become clear. Your browser doesn't support canvas. At t…
Read more...

Declarative Dev Environments

I don't install development tools globally. I don't have node added to my PATH in my ~/.zshrc file, and running cargo outside a project folder returns "command not found." I wipe my computer on every reboot. With the exception of four folders (/boot, /nix, /home, and /p…
Read more...

NFTs

NFT stands for “non-fungible token”. The “token” part refers to an NFT being a token whose ownership is recorded on a blockchain. Pretty much all cryptocurrencies, from bitcoin to your favorite shitcoin, could be called tokens in this sense. Each token has exactly one owner, and …
Read more...

Loops in Ginger

In previous posts in this series I went over the general idea of the ginger programming language, and some of its properties. To recap: Ginger is a programming language whose syntax defines a directed graph, in the same way that a LISP language’s syntax defines nested lis…
Read more...

Ripple V2: A Better Game

Movement: Arrow keys or WASD Jump: Space Goal: Jump as many times as possible without touching a ripple! Press Jump To Begin! Who can make the muddy water clear? Let it be still, and it will gradually become clear. Your browser doesn't support canvas. At t…
Read more...

Evaluation of Network Filesystems

It’s been a bit since updating my progress on what I’ve been lately calling the “cryptic nebula” project. When I last left off I was working on building the mobile nebula using nix. For the moment I gave up on that dream, as flutter and nix just really don’t get along and I don’t…
Read more...

Simple Declarative VMs

I've been on a hunt to find a simple and declarative way to define VMs. I wanted something like NixOS Containers, but with a stronger security guarantee. I wanted to be able to use a Nix expression to define what the VM should look like, then reference that on my Server's express…
Read more...

A Simple Rule for Better Errors

This post will describe a simple rule for writing error messages that I’ve been using for some time and have found to be worthwhile. Using this rule I can be sure that my errors are propagated upwards with everything needed to debug problems, while not containing tons of extraneo…
Read more...