It helps to keep track of and investigate your clever ideas

We have a number of Linux systems where we set strict memoryovercommit handling and sometimes thiscan cause problems . Someyears ago I speculated that we might want to fix the fundamentalproblem another way , andthen earlier this year I investigated that a bit and determined itwould likely work for us .This summer we rebuilt all of the relevant machines using Ubuntu 26.04and you probably will not be surprised to know that we're still usingstrict memory overcommit ( cf ).

That's about a


Revisiting Flymake and Flycheck in GNU Emacs (as of Flycheck v39)

Not that long ago I wrote an entry on my views on Flymake andFlycheck in GNU Emacs , when Flycheck v36 wasthe latest release and my impression was that there hadn't been deepchanges in Flycheck for a while. To summarize my views, the two werebasically equal but Flymake was a bit better if you only used Eglot while Flycheck gave you moreflexibility, especially if you weren't using a LSP client. All of thatchanged in Flycheck 38 (and Flycheck39),


Modern (x86) firmware can be really slow to boot, which can be painful

We 've recently wound up with someunusually big (x86) servers, from a vendor we don't normally getservers from. One of the unusual things about these servers is thatthey take a very long time to initialize on boot (at least by ourstandards). I haven't actually timed it, but I'm pretty certainthere's more than a minute of staring at 'chipset initializing', andit may be as much as several minutes.

In a way this


URLs aren't strings, and my recent encounter with this

Over on the Fediverse I said something :

It has been '0' days since I've been pointedly reminded¹ that URLsaren't strings.

¹ it wasn't painfully as such because the only thing tripping overit was Bingbot doing bad things, but.

Suppose that you have a URL in the form of a UTF-8 or Unicode textstring and you want to show it to people in a web context, and someparts of the URL have characters (or Unicode codepoints) that falloutside


Where I put default values for options in Python's argparse and why

I wrote the other day about an irritatingly incompatible change inPython 3.14's argparse , where if youdeferred setting a default value until later, certain argparse things would nowerror out. In a comment, Ian Z aka nobrowser asked (in part):

Setting the default right in the add_argument call has alwaysseemed more natural to me. Do you have a case where it is notpossible or just inconvenient to do this?

Some of my usage of set_defaults is historical and I


Sometimes we do clean up network oddities

What's now a long time ago I wrote an entry about an oddity in ournetwork setup that was the result of historicalevolution. At the time we had our printers on a physically separateset of switches, which carried a single active VLAN for a privatesandbox network that all of the printers were on.These switches had shrunk from their original purpose of carryingseveral of our public networks that weren't on our normal core switchenvironments because they'd started out as a "protocol based VLAN" on


An irritating incompatible change in Python 3.14's <code>argparse</code>

Today I discovered that Python 3.14 contains an irritating,incompatible change to historical argparse behavior, which Ican best illustrate with a little piece of code.

import argparsedef demo():    p = argparse.ArgumentParser()    p.add_argument("-n", dest="anumber", type=int,                   action='store', metavar="NUM",                   help="A number, default %(default)d")    p.set_defaults(anumber

Some ways to navigate through 'git blame' over time in GNU Emacs

As a system administrator, I spend a certain amount of time spelunkingthrough the history of some particular file in Git because I'm tryingto understand how it evolved, what it used to do, when something wasintroduced or removed, and so on. There are two ways to do this,either through a straightforward history of a file or through what I'll call the blamehistory of a file, where you start with 'git blame' and then ask forwhat the file looked like before a particular


Looking at the memory map of a Go 1.27 program on Linux

Many years ago I wrote an entry about a deep dive into the LinuxOS memory use of a simple Go 1.11 program . Forreasons of my own, I'm returning to this in Go 1.27rc2, becausethese days Go can tell us much more information about memory usage.As before, I'll use this very simple program:

package main
func main() {    var i uint64    for {        i++    }}

You'll want to set '


Where a Linux kernel memory allocation error comes from

Suppose, not hypothetically, that you're operating a compute serverand its kernel is logging a series of messages to the effect of:

__vm_enough_memory: pid: 719830, comm: node, bytes: 221184 not enough memory for the allocation

(The PID, the 'comm:' command name, and the number of bytes willvary.)

This particular function has cropped up before ,and this message from it means that you'