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

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

Ripple: A Game

Movement: Arrow keys or WASD Jump: Space Goal: Jump as many times as possible without touching a ripple! Press Jump To Begin! Your browser doesn't support canvas. At this point in the world that's actually pretty cool, well done! (R)eset Score: 0 c…
Read more...

Backups made simple

I've made a backup system I can be proud of, and I'd like to share it with you today. It follows a philosophy I've been fleshing out called The Functional Infra. Concretely it aims to: Be pure. An output should only be a function of its inputs. Be declarative and reproducible. A…
Read more...

Conditionals in Ginger, Errata

After publishing the last post in the series I walked away from my computer feeling that I was very clever and had made a good post. This was incorrect. To summarize the previous post, it’s not obvious which is the best way to structure conditionals in a graphical programming lan…
Read more...