Minting A Single NFT

In a previous post I made a page to sell some NFTs I had designed. I say “designed”, not “made”, because the NFTs don’t actually exist yet. On OpenSea, where those NFTs are listed, the NFT isn’t actually “minted” (created) until first sale. This is primarily done to save the arti…
Read more...

Managing a Home Server With Nix

My home server has a lot running on it. Some of it I’ve written about in this blog previously, some of it I haven’t. It’s hosting this blog itself, even! With all of these services comes management overhead, both in terms of managing packages and configuration. I’m pretty strict …
Read more...

DOG! MONEY!

Officially presenting a collection of original artworks, made by me! This was an ambitious project I set myself out on this weekend, but I’m really happy to say that I seem to be completing it on time. You can check out the collection’s OpenSea page HERE. Each piece is a tessela…
Read more...

Building AppImages with Nix

It’s been a bit since I’ve written an update on the cryptic nebula project, almost 5 months (since this post, which wasn’t officially part of the blog series but whatever). Since then it’s switched names to “cryptic-net”, and that we would likely use MinIO as our network storage …
Read more...

The Syntax of Ginger

Finally I have a syntax for ginger that I’m happy with. This has actually been a huge roadblock for me up till this point. There’s a bit of a chicken-and-the-egg problem with the syntax: without pinning down the structures underlying the syntax it’s difficult to develop one, but …
Read more...

Self-Hosting a Blog Mailing List

As of this week the Mediocre Blog has a new follow mechanism: email! Sign up on the Follow page and you’ll get an email everytime a new post is published to the blog. It’s like RSS, except there’s a slight chance you might actually use it. This post will detail my relatively simp…
Read more...

V4 of Radix, a Golang Redis Driver

Radix is a Go driver for the Redis database. The current stable release is v3, the docs for which can be found here. Over the past year (perhaps longer) I’ve been working on a new version, v4, with the aim of addressing some of the shortcomings of v3 and distilling the API a bit …
Read more...

How to Secure a Webapp

In this post I will be documenting all security hoops that one must jump through in order to consider their webapp secure. This list should not be considered comprehensive, as I might have forgotten something or some new hoop might have appeared since writing. For the context of …
Read more...

Setting Up maddy On A VPS

In the previous post I left off with being blocked by my ISP from sending outbound emails on port 25, effectively forcing me to set up maddy on a virtual private server (VPS) somewhere else. After some research I chose Vultr as my VPS of choice. They apparently don’t block you fr…
Read more...

Visualization 7

function randn(n) { return Math.floor(Math.random() * n); } const w = 100; const h = 60; class Canvas { constructor(canvasDOM) { this.dom = canvasDOM; this.ctx = canvasDOM.getContext("2d"); // expand canvas element's width to match parent. this.dom.widt…
Read more...