The 'eval' pattern for interpreting simple languages

Every so often, we as programmers create simple domain specificlanguages that need to perform some form of computation (ie, theyaren't simply a readable serialization format for a staticconfiguration). In a sufficiently simple DSL you can simply interpretthings on the fly as you handle each token (usually a logical lineat a time). For example, you might have a simple DSL to specify what machines to operate on whichallows a syntax like 'class1 class2 -class3' or 'class1


Some cheap things are only cheap if they have enough volume

Among other things, I'm a recreational bicyclist, and as this I'ma fan of basic wired cycling computers , which in their ownway are fascinating artifacts. A wired cycling computer is a littleelectronic device with an LCD display that shows you things likeyour current speed, how far you've come on this trip, the time, andso on (generally not all at once; typically there are several screensand you switch between them with a button). A wired bike computergets all


I'm not going to accurately remember our past views and thoughts

When I started writing my entry on the persistence of 'san' namesover several generations of our fileservers ,I believed that we'd considered our iSCSI environment to be 'not areal SAN ',with the last real SAN we operated being our pre-ZFS Fibre Channel environment. A largepart of it was that this was how I thought about those old fileservergenerations now, at this distance from them; I felt that our iSCSIenvironment was kind of a pseudo-SAN. When I actually read what


When we take things out of service, I should write up how they worked

Recently I wrote about the persistence of 'san' names over severalgenerations of our fileservers , even thoughwe don't have a SAN any more. In the process of writing that entry, I discovered thatI'd forgotten various details of how our first generation and second generation of ZFS fileservers worked and howwe talked about them, and a lot of details about our pre-ZFSfileserver environment. At the time we were operating each of theseenvironments, all of this was obvious to us so we didn


Command hashing in Unix shells is probably no longer worth it

Recently, I had an experience with Bash (and not for thefirst time with this sort of thing):

Dear bash: if you have a path for a command cached and trying toexecute that file gets ENOENT, perhaps you should, you know, *check$PATH again*?

Then I endorsed getting rid of shell command hashing .

Once upon a time, Unix computers were slow, system calls were slow,Unix kernels only cached simple things, RAM was small relative tothe size of directories, $


HTTP has become the default, universal communication protocol

Back when I wrote about how the mere 'presence' of a URL on a webserver wasn't a good signal , Icasually mentioned that you were more likely to have everythinganswered with a HTTP 200 status on things that weren't really 'webservers' as such, but which were just using HTTP. You might ask whyyou'd use HTTP if you weren't a web server, and the answer isstraightforward and widely known: HTTP has become the de factodefault communication


Non-uniform CPU hyperthreading is here and can cause fun issues

Today I said something on the Fediverse :

Today my co-worker discovered that the SLURM job scheduler requiresyour hyperthreading to be uniform across your CPU cores. Our latestSLURM GPU nodes have Intel hybrid CPUs, which aren't uniform; theyhave 24 cores but 32 threads total, because only the 8 performancecores are hyperthreaded.

I guess we'll turn off hyperthreading. Thanks, Intel and SLURM.

(I'm sure people are going to discover much more fun with this.)

These new


A bit of Unix history on 'su -'

These days, modern versions of su interpret 'su -' as 'su -l' ( via ). Although they have differentimplementations of su , this is true on Linux , FreeBSD , and OpenBSD . However, it turns out that thisfeature wasn't always in Unix's su.

The V7 su(1) is quite minimal, and has no equivalent of '-' or '-l'. In fact,V7 su takes no options at all; it treats its first


Social media posts aren't as small and simple as you might think

A while back, I read Tristan Hume's Production Twitter on OneMachine? 100Gbps NICs and NVMe are fast ( via ),which goes through the mental exercise of sketching out such athing. As part of this, Hume must assess the size of individualtweets, and if you were doing this for the Fediverse, you'd wantto assess the size of individual posts there. Fediverse posts onmy current server are limited to 500 characters, so things looksimple. But reading


Static websites have a low barrier to entry

Yesterday I wrote about a criticism of the usual static versusdynamic website divide , where I noteda number of (what I see as) significant differences between staticand dynamic websites in practice. But there is another importantdifference in practice, and that's the amount of expertise that'sneeded to create each of them. Specifically, static websites don'trequire much expertise to create . Given a suitable general webserver environment, which is easy to provide, all you need to setup a static website