Compile-time Typechecked Sum Types in Java

Java has compile-time typechecked sum types with exhaustive matching built into the base language.

“Of course it doesn't” you say? “Their absence is one of Java's most glaring deficiencies”? Well, kind of. Read on to see what I mean.

More…

A Backwards Git Tutorial, Part 1

Most git tutorials start with teaching you a series of commands to manipulate a repository and only follow up later, if at all, with the effects those commands have on the underlying data. This is great for getting started quickly, but I think it underprepares users for more advanced usage: there's a fairly low limit to the number of opaque commands one can memorize to resolve a particular situation, and eventually every advanced user will need to learn what the underlying data model is and how git's commands manipulate it. So this tutorial is backwards: instead of starting with commands and working down to the underlying model, we'll start with the model and work up.

This tutorial was inspired by comments on this lobste.rs post.

More…

Error Pages

I added some custom error pages. You can check them out if you want for some reason. This change should have minimal impact on anybody.

More…

Interface changes are bad!

Now that I've grabbed you with a clickbait title, let me amend: interface changes come to the table with an inherent very large negative value attached. Unless the value offered by the change is extremely high, the cost of breaking people's familiarity and use cases will vastly outweigh the benefits.

I'm specifically talking about user interfaces, here, not APIs, but I do think the same principle applies; however, APIs tend to be well-defined with simple semantics, so dealing with changes is easier and the initial cost is lower. However, with a big enough overhaul for little enough benefit or with poor enough documentation, APIs can easily fall foul of this as well. Consider Python 3, for instance, which after seven years still has remarkably poor adoption.

More…

Porting FreeNAS encrypted RAID-Z volumes to FreeBSD

A few years ago, I decided to build myself a fileserver. Based on my criteria (free software, extensible, parity-based redundancy), a custom-built system was the best option; and for an operating system, I settled on FreeNAS. It let me get features I wanted (basically the entire ZFS featureset) without jumping headfirst into administering a BSD system, something I'd never done at the time. And it worked very well; installation is as simple as flashing an image onto a USB thumb drive, booting the system off that thumb drive, and setting things up through the surprisingly usable web interface. (I have a general antipathy to web anything as bad technology used by bad people for bad things. But the FreeNAS folks, as of version 8.3 anyway, kept their pants on about it and so, at the client end, it's solidly simple and usable.)

More…