I should always give my Python classes a __str__ method

I have been going back and forth between Python and Go lately, andas part of that I have (re-)learned a sharp edged lesson aboutworking in Python because of something that Go has built in thatPython doesn't.

I do much of my debugging via print() statements or the equivalent.One of the conveniences of Go is that its formatted output package has built-in support for dumpingstructures. If you have a structure, and usually you do becausethey're often the Go


You can sort of use zdb as a substitute for a proper ZFS fsck

One of the things said repeatedly and correctly about ZFS is thatit has no equivalent of fsck . ZFS scrubs will check that all ofthe blocks in your pool checksum correctly and that the pool'smetadata is generally intact, but that's it ( as covered yesterday ). A ZFS scrub will detect and repair damagedon-disk data, but it will not do anything about mistakes and accidentsinside ZFS itself, including ACL attributes that are internallyinconsistent . These things are notsupposed to happen but they do


ZFS scrubs check (much) less than you probably think they do

Several years ago I wrote an entry on the limits of what ZFS scrubscheck . In that entry I said:

The simple version of what a ZFS scrub does is that it verifies thechecksum for every copy of every (active) block in the ZFS pool. Italso explicitly verifies parity blocks for RAIDZ vdevs (which a normalerror-free read does not). In the process of doing this verification,the scrub must walk the entire object tree of the pool from the topdownwards, which has the side


Some DKIM usage statistics from our recent inbound email (October 2018 edition)

By this point in time, DKIM (Domain Keys Identified Mail) has beenaround for long enough and enough large providers like GMail havebeen pushing for it that it has a certain decent amount of usage.In particular, a surprising number of sources of undesirable emailseem to have adopted DKIM, or at least they add DKIM headers totheir email. Our Exim setup logs the DKIM status of incoming emailon our external MX gateway and for reasons beyond the scope oftoday's entry I have become interested in gathering


Using group_* vector matching in Prometheus for database lookups

On Mastodon, I said :

Current status: writing a Prometheus expression involving 'group_left(sendto) ...' and cackling maniacally.

Boy am I abusing metrics as a source of facts and configurationinformation, but it's going to beat writing and maintaining a bunch ofPrometheus alert rules for people.

(If a system gives me an awkward hammer as my only tool, why yes, Iwill hit everything with it. Somehow.)

There are many things bundled up in this single toot,


Some tradeoffs of having a Certificate Authority in your model

There are two leading models for checking identity via public keycryptography in a self-contained environment; you can simply maintainand distribute a list of valid keys, or you can set up a littlelocal CA , have it sign the keys, andthen verify keys against the CA's public key. One prominent systemthat offers you the choice of either option is OpenSSH, whichfamously supports both models and lets you chose between them forboth server public keys and user authentication keys. Despitewriting a certain amount about


The original Unix ed(1) didn't load files being edited into memory

These days almost all editors work by loading the entire file (orfiles) that you're editing into memory, either into a flat bufferor two or into some more sophisticated data structure, and thenworking on them there. This approach to editing files is simple,straightforward, and fast, but it has an obvious limitation; thefile you want to edit has to fit into memory. These days this isgenerally not much of an issue.

V7 was routinely used on what are relatively small machines by


Link: Vectorized Emulation [of CPUs and virtual machines]

Vectorized Emulation: Hardware accelerated taint tracking at 2trillion instructions per second ( via ) is about,well, let me quote from the introduction rather than try to furthersummarize it:

In this blog I’m going to introduce you to a concept I’ve beenworking on for almost 2 years now. Vectorized emulation . The goal isto take standard applications and JIT them to their AVX-512 equivalentsuch that we can fuzz 16 VMs at a time per thread. The net result ofthis


Some things on delays and timings for Prometheus alerts

One of the things I've been doing lately is testing and experimentingwith Prometheus alerts. When you're testingalerts you become quite interested in having your alerts fire and clearrapidly, so you can iterate tests rapidly; it is no fun sitting therefor five or ten minutes waiting for everything to reset so you can trysomething new from a clean slate. Also, of course, I have been thinkingabout how we want to set various alert-related parameters in an eventualproduction deployment.

Let's


Why you should be willing to believe that ed(1) is a good editor

Among the reactions tomy entry on how ed(1) is no longer a good editor today was people wondering out loud if ed wasever a good editor. My answer is that yes, ed is and was goodeditor in the right situations, and I intend to write an entryabout that .But before I write about why ed is a good editor, I need to writeabout why you should be willing to believe that it is. To put itsimply, why you should believe that ed is a