Subscribe via RSS

All Posts

  • Multiple Linux Systems on One ZFS Pool

    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.

  • Encrypted /boot on ZFS with NixOS

    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 /boot because 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.

  • Secure, Declarative Key Management with NixOps, Pass, and nix-plugins

    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:

  • MonadFix is Time Travel

    Aug 22, 2017

    MonadFix is 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 MonadFix on Reddit, and someone suggested I turn my answer into a blog post. So here it is, edited with more content and detail.

  • Nix Style Configs in Haskell

    Apr 1, 2017

    This is on GitHub

  • Applicative Sorting

    Mar 23, 2017

    Continuing my unending train of thoughts on static analysis of effects, in this post I’m going to talk about using Applicative to sort any collection. The Traversable typeclass is one of my favorites because it generalizes the idea of a collection so elegantly. I will show how to use traverse to sort any such collection safely using a special applicative.

  • Profunctors, Arrows, & Static Analysis

    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:

  • Kleisli Functors

    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.

  • Aggregating WMCQ Results

    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.

  • Abstracting Async.Concurrently

    Sep 17, 2016

    Applicatives have an interesting relationship to concurrency. fraxl is my attempt to abuse this relationship with free monads to get something more abstract than haxl. By using a special Applicative instance, fraxl allows computations to be implicitly concurrent.

  • More on Applicative Effects in Free Monads

    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.

  • Applicative Effects in Free Monads

    Apr 8, 2016

    UPDATE: I’ve written a second post addressing some issues with this one.

  • I found a blog, can I keep it?

    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.

  • Automatically Generating Magic Decks Using Deck Building Strategies

    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.