Dec 7, 2018
ZFS is a volume manager in addition to a filesystem. Traditional volume managers are essentially virtual RAID systems. LVM, for instance, allows you to combine several block devices into one block device, which you can then partition as normal. ZFS’s main filesystem concept, known as “datasets”, are different though. A ZFS pool isn’t a block device that needs to be formatted and partitioned, and datasets aren’t partitions formatted with filesystems. Rather, ZFS abstracts all of that away. A dataset is just a logical filesystem managed by the ZFS pool, and all datasets in the pool share the space provided by all the underlying block devices.
Dec 6, 2018
UPDATE: This does not work with LUKS 2, because Grub does not support reading from it. At least on NixOS, LUKS 2 is now the default. I have not updated this post to show how to force it to use LUKS 1, and I’m not sure that’s a good idea anyway. I’m moving my system back to a normal
/bootbecause of this and because Grub takes absolutely forever to decrypt the disk. Grub also has issues with new ZFS feature flags on occasion, and I’m not willing to take that risk.
Jun 24, 2018
NixOps is a declarative deployment tool for NixOS, the purely functional Linux distribution. NixOps is traditionally used for cloud deployments, while personal NixOS machines are usually configured with
nixos-rebuild. But NixOps can be used to configure your personal machine as well. All my NixOS machines are configured with a file looking something like this:
Aug 22, 2017
MonadFixis a pretty difficult concept, and I personally found much of the existing content about it online to be somewhat unhelpful. I answered a request for an ELI5 of
MonadFixon Reddit, and someone suggested I turn my answer into a blog post. So here it is, edited with more content and detail.
Apr 1, 2017
Mar 23, 2017
Continuing my unending train of thoughts on static analysis of effects, in this post I’m going to talk about using
Applicativeto sort any collection. The
Traversabletypeclass is one of my favorites because it generalizes the idea of a collection so elegantly. I will show how to use
traverseto sort any such collection safely using a special applicative.
Mar 10, 2017
In the past, I’ve talked about using applicative functors to do static analysis (1, 2, 3). In this post, I’m going to explore a concept known as
Arrow, and compare its capabilities to those of monads and applicatives. Arrows have a high granularity of features. This post will be split into sections for each of those features. Those sections are:
Oct 12, 2016
Abstract: I define a typeclass for functors from Kleisli categories to Hask. This class turns out having more interesting properties than I expected, encompassing various Haskell patterns such as concurrency, and monad transformers.
Sep 23, 2016
It’s that time again. WMCQ just wrapped up and we’ve got a load of data to work with. Some of you may remember the last time I did this. I’m still working (in my free time) on a web interface for doing my analyses, but for now I’ll just share the results of me manually running the programs.
Sep 17, 2016
Applicatives have an interesting relationship to concurrency.
fraxlis my attempt to abuse this relationship with free monads to get something more abstract than
haxl. By using a special
fraxlallows computations to be implicitly concurrent.
Apr 13, 2016
In my last post, I explored the problem of Applicative effects in free monads. After some great discussion between Edward Kmett, Dave Menendez, /u/MitchellSalad, and myself, I think I’ve come to a new understanding.
Apr 8, 2016
UPDATE: I’ve written a second post addressing some issues with this one.
Mar 31, 2016
Hello, and welcome to my new blog! For a while now, I’ve been switching between a few platforms like Wordpress and Medium. But I never liked not having a simple git repo to hold the whole blog. Posts were managed by a magic server, formatting was complicated, and version control was bad or non-existent. The solution was Jekyll.
Sep 24, 2015
Magic deck building is no easy task. You have to identify a strategy, choose cards that go well together, and make sensible cuts. With all the cards available in a given format, this can be a daunting task.