Content-Type: text/shitpost

Subject: Too many suffixes
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-15T19:47:56
Newsgroup: talk.mjd.too-many-suffixes
Message-ID: <>
Content-Type: text/shitpost

A Brit once mocked me for using the word “burglarize”. He correctly pointed out that it means the same thing as “burgle”. A burglar is someone who burgles, and then Americans have an ornate and superfluous word for something that is done by a burglar.

This complaint continues to bug me, for several reasons. First, because this guy was perfectly content to say “orientate”, a Britishism we do not use here which means that same as “orient”. And second, because “burgle” itself is an American back-formation from “burglar” that we invented in the 1860s, and the Brits were not shy about mocking us for “burgle” that time. In fact, “burglarize” is older than “burgle”.

Okay, whatever. Brits have been mocking the American language for centuries now. Let them go ahead. We all know who won that argument.

Subject: Metonymy
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-15T18:39:20
Newsgroup: talk.mjd.metonymy
Message-ID: <>
Content-Type: text/shitpost

900g container

Subject: The Physical Layer
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-15T18:17:34
Message-ID: <>
Content-Type: text/shitpost

Gilberto: “Hey, Jo, can I ask you a question?”

Joanna: “Shoot.”

G: “In the OSI network model, why is 2 the lowest layer?”

J: “What?”

G: “Transport is layer 4, network is layer 3, data link is layer 2, and it stops there. Why 2 and not 1?”

J: “It doesn't ‘stop there’. 1 is for the layer below the data link layer.”

G: “They reserved the number 1 for future use? That seems like a clear YAGNI. What did they think they were going to come up with? And why didn't they reserve all the odd numbers? What if they wanted to stick something between 3 and 4?”

J: “They didn't ‘reserve 1 for future use’, they used it. It's the physical layer.”

G: “The what now?”

J: “The physical layer. You know, like whether you're using cables or wireless.”

G: “That's stupid. You send the same octets in the same order regardless of whether you’re using cables or wireless.”

J: “There you go. You can't actually send an entire octet at once.”

G: “Sure I can, that's how it's done.”

J: “No, because the wire can only send one bit at a time.”

G: “One bit? That can't be right. Why not?”

J: “Because the bit is represented in the wire as a pulse of high or low voltage.”

G: “Okay, so why not represent eight bits at once?”

J: “Voltage doesn't work that way. The wire only has one voltage.”

G: “Why not?”

J: “I think it's somehow connected with quantum physics.”

G: “Seriously, you want me to believe that a bit can be represented as some abstract quantum property that only physics eggheads understand? I mean, I can believe it's possible in theory, maybe as some weird kind of steganography, but why go to the trouble?”

J: “I can't believe I'm hearing this. How did you think the packets got from one endpoint to the other?”

G: “It's perfectly simple. The layer 2 peer on one side transmits the frames, and then the layer 2 peer on the other side receives and reassembles them. There doesn't need to be anything in between.”

J: “Well, that's sort of the point, isn't it?”

G: “How do you mean?”

J: “The whole point of the layer 1 – layer 2 boundary is to insulate the higher layers from having to know about the stuff in layer 1.”

G: “I guess, but then why not also have a layer to insulate the higher layers from having to know what flavor of ice cream you're eating when you send the packet? It might be related, but it isn't really part of the network.”

J: “The cables aren't part of the network?”

G: “Are they? We have wireless networks, so the cables can't be that important.”

J: “Without the cables, the bits won't get from one data link peer to the other. The data link peers think they're talking to each other, but really they're talking to the layer 1 peers on the same side.”

G: “This is very far-fetched. Why would they put in three completely unnecessary communication boundaries between the layer 2 peers? It doesn't make sense.”

J: “They're not unnecessary! Information can only be transmitted at the physical layer!”

G: “Bah, next you'll be telling me that information can only be stored at the physical layer.”

J: “Actually yes.”

G: “Okay, then answer this: how do you know it isn't actually stored at some even lower layer below the ‘physical’ layer?”

J: “That is a puzzling question for philosophers, maybe, but actual engineering practice shows that one only needs to go down to layer 1.”

G: “Oh, I get it! It's a hack!”

J: “I guess you could call it that.”

G: “I hope someone is doing research into some more elegant solution to the problem.”

J: “I would like to hear what sort of ‘solution’ you imagine there might be.”

G: “Hey, I'm a software guy. Dealing with this physical universe bullshit is not my problem, that's for the system administration department.”

Punch line: Gilberto and Joanna are brains in vats.

Subject: More mathematical shitposting
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-14T01:44:36
Newsgroup: talk.mjd.math.taxicab-numbers
Message-ID: <>
Content-Type: text/shitpost

People will tell you that 1729 is the smallest number that is a sum of two integer cubes in two different ways, but they are mistaken. Actually the smallest such number is 91:

$$91 = 3^3 + 4^3 = 6^3 + (-5)^3 $$

1729 is the smallest number that is a sum of two positive integer cubes in two different ways. (!!1729 = 1^3 + 12^3 = 9^3 + 10^3.!!) People sometimes forget that cubes, unlike squares, can be negative.

Subject: Testing for divisibility by 99
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-13T23:50:37
Newsgroup: talk.mjd.math.multiple-of
Message-ID: <>
Content-Type: text/shitpost

Mathematically this is a nothing, but it's fun and I hadn't seen it before. Pick a number, say 852143, and multiply it by 99, giving $$84362157.$$

Now break this up into two-digit chunks:

$$84\qquad 36\qquad 21\qquad 57$$

(If there is an odd number of digits, put the leftmost one in a chunk by itself.)

Add up the chunks:

$$84 + 36 + 21 + 57 = 198$$

Repeat the process:

$$1 + 98 = 99$$

You will always finish at 99.

This same method can be used to test a number to see if it is divisible by 99: you can start with any number you like, and you will end at 99 if and only if the number you started with is a multiple of 99. (If the starting and ending numbers are !!s!! and !!e!!, then !!s\equiv e\pmod{99}!!.)

The trick is, of course, completely analogous to the test for divisibility by 9. Maybe you know some mathematical kid who has recently learned the divisibility-by-9 test and would enjoy seeing this version.

Subject: Computers suck: episode 17787 of 31279
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-13T20:35:04
Message-ID: <>
Content-Type: text/shitpost

I have a new bluetooth keyboard and often it works flawlessly. But under some circumstances using it seems to mess up my keyboard configuration. I have the useless ‘Caps lock’ key mapped to act like a second ‘Control’ key, and I have the right ‘Alt’ key set up to act like a dead compose key, so that typing (‘alt’ + ‘o’ + ‘=’) inputs the letter ‘ő’, without which I can't spell “Erdős”. The laptop's integrated keyboard is also set up this way.

Usually everything just works, but sometimes the the control or compose mappings stop working, depending on some sequence of events having to do with putting the laptop to sleep, turning off the bluetooth keyboard, waking up the laptop, and bringing back the keyboard. But I don't know what the sequence is. Sometimes both keyboards lose both bindings; sometimes only the bluetooth keyboard loses them; sometimes it loses only one.

Since it's important to be able to type “Erdős”, I want to fix this. I don't even care that much about tracking down the ultimate cause and fixing that. I just want to run a command that will fix it temporarily when it breaks.

And so began my epic journey into the wild and uncharted jungles of the Linux keyboard system. Or should I say systems.

I wish I could draw you a map here, but I don't have one. All I know is, I wandered about through many strange lands, having adventures. Please do not assume that anything in this article is technically correct.

There seem to be at least half a dozen places that keyboard mappings can go wrong. For instance, there are at least a couple of layers in the X server alone.

Voyage into the X server

X has an idea that the keyboard is producing keycodes, and it has a table (or several tables?) to map these to keysyms, and then keysyms to actual functions. I think.

You can in theory use the xmodmap command to control this but I tried once and I am not eager to try again. Messing around with the keyboard mappings not a place for casual experimentation and jolly hacking. it is a little more like removing your own appendix, because if you make a mistake, it is too late to fix it.

I think the control function of the “Caps lock” key is handled in the X server. There is an X event diagnostic program called xev and when I run it and tap x I see

KeyPress event, serial 40, synthetic NO, window 0x6600001,
    root 0xe9, subw 0x0, time 5380932, (75,68), root:(1441,105),
    state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
    XLookupString gives 1 bytes: (78) "x"
    XmbLookupString gives 1 bytes: (78) "x"
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x6600001,
    root 0xe9, subw 0x0, time 5380977, (75,68), root:(1441,105),
    state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
    XLookupString gives 1 bytes: (78) "x"
    XFilterEvent returns: False

which are the two events that the X server sends to xev for the press and release. The state 0x0 I think means that no modifier keys are in force. Pressing ‘Caps lock’ generates a similar KeyPress event for the Caps_lock key, and then the events for tapping x have state 0x4 instead. The keycodes and the keysyms are the same, but the result of XLookupString becomes:

XLookupString gives 1 bytes: (18) "▒"
XmbLookupString gives 1 bytes: (18) "▒"
XFilterEvent returns: False

where 18 is some internal code, perhaps the Unicode codepoint, for the control-X character. (Note that 0x18 = 24 and ‘x’ is the 24th letter of the alphabet, which is why 0x18 is control-X in ASCII and in Unicode; similarly 0x78 is lowercase letter ‘x’ in ASCII and compatible mappings.) Using the real control key is similar, except that X recognizes it as the Control_L keysym instead of as Caps_lock.)

From the X point of view the keymap and keysym interpretations never change. What changes, when I map ‘Caps lock’ to the control function, is the mapping from keysyms to strings.

But the handling of the alt-to-compose mapping is handled differently. There, when the mapping is working, tapping the right-alt key produces the keysym Multi_Key, and when it isn't, it produces Alt_R.

On top of that, I think the actual compositions are handled in the client. When the X client receives Multi_Key, it knows that a compose sequence is coming up, and then it consults its private per-process composition map, which in my case was loaded from ~/.XCompose at some point. And in this case the client might be the window manager. Or maybe the display manager. Because having decentralized the composition mapping out into the client, it now has to be recentralized again so that the window manager can change the keyboard mappings for every client from English to Japanese when you type control-shift-space. Or maybe it's the display manager. Or both.

But wait, there's more!

But how does X decide which keycodes are for the keys being pressed? The OS tells it. And here things get even more exciting.

I know at least one of the problems is that the right-alt key is generating the Alt_R keysym instead of the Multi_Key keysym. Why? Rummaging the list of available commands suggests that setxkbmap might be useful. This command is a real piece of work. The name alone should tip you off, because why it is setxkbmap and not xsetkbmap? And why does it understand -help and -? but not --help or -h? And if you say setxkbmap -h why does it say Error! Option "-h" not recognized without printing out the options that it does recognize?

I could complain about this command all day. Its manual says:

      -device <deviceid>  Specifies the device ID to use

But there is no option to tell you what the allowed device IDs are. But that is all right! As far as I can tell this option is actually ignored because -device asdkjasd seems to make no difference to the output. Is there a way to address the two keyboards separately? I don't know.

Then there is also this:

  -print              Print a complete xkb_keymap description and exit
  -query              Print the current layout settings and exit

What is the difference between these two options? Well, the format, obviously. Except that sometimes they seem to print inconsistent results; one form will say that the keyboard options include some things, and the other form will say that they don't.

Yesterday after fucking around for forty-five minutes and looking at some of the 275 (!) xkb rules files, I guessed that maybe the ralt rule was the one I wanted to add; it looks like this:

 partial modifier_keys
 xkb_symbols "ralt" {
     key <RALT>  { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ]

When I ran setxkbmap -option ralt it seemed to have fixed my compose key problem, and I was only somewhat disturbed that it also seemed to have fixed my caps lock key problem also. So I put it in a one-line shell script called fix-compose-key and hoped I had found the answer to my problem.

I had not. Today it appeared to do nothing. I went back to the database of xsetkbmap options that is in /usr/share/X11/xkb, and sought there. Looking again at the ralt option in symbols/compose, I wondered if perhaps I had been in some other directory yesterday when it appeared to work. “Okay,” I said. “Maybe it is failing to recognize ralt because of some path search issue, and it will find it if I explicitly say -config symbols/compose. So I ran it with that option and it said

  Couldn't find configuration file "symbols/compose"

which seems clear enough; maybe it doesn't know that it should look under the current directory. So then I ran it under strace to see where it was looking (Hi, Julia!) and it said:

open("./symbols/compose", O_RDONLY)     = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=2303, ...}) = 0
read(4, "partial modifier_keys\nxkb_symbol"..., 4096) = 2303
close(4)                                = 0
write(2, "Couldn't find configuration file"..., 51) = 51

which means that it found, opened, read, and closed the file, and then claimed not to have found it. This is some quality software.

But anyway, if the problem is that it doesn't know what ralt means any more, why doesn't it just say so? Was I supposed to write it as compose:ralt? Maybe?


While writing up this section, the mappings on the bluetooth keyboard went away. The integrated keyboard is still working properly. But on the bluetooth keyboard, the right-alt key now sends keysym Alt_R instead of Multi_Key. The caps lock key still sends Caps_Lock, but the X server is now interpreting it as a caps lock key,and one which shifts both keyboards into caps mode.

This happened to me before once; I had just put away the bluetooth keyboard and I realized that somehow the server had gotten itself into caps lock mode. Since the caps lock key on the integrated keyboard was still mapped to control, I had no way to turn it off. I couldn't even try to figure it out, because I couldn't type any lowercase letters.

I was going to say more about this, but somewhere in the previous paragraph the bluetooth keyboard started working properly again.

Fuck if I know.

But wait, there's still more!

Stymied by setxkbmap I tried looking under a different lamppost. In /var/log/Xorg.0.log there was the following suggestive paragraph:

[   122.475] (II) XINPUT: Adding extended input device "Anker A7726" (type: KEYBOARD, id 17)
[   122.475] (**) Option "xkb_rules" "evdev"
[   122.475] (**) Option "xkb_model" "pc105"
[   122.475] (**) Option "xkb_layout" "us"
[   122.475] (WW) Option "xkb_variant" requires a string value
[   122.475] (WW) Option "xkb_options" requires a string value

Those xkb things seem to be referring to what setxkbmap knows about, because some of those things are mentioned in the configuration files that it claimed not to be able to find. Maybe XINPUT, whatever that is, is failing to put the ralt option into xkb_options. The warning message was helpful, because I thought maybe I wanted to supply an xkb_options value, and I wouldn't otherwise have known that XINPUT was trying to supply one. Although it's not very reassuring that it is supplying an erroneous empty value instead of just omitting the option.

But what is XINPUT? I think it refers to another subsystem, which can be addressed with the xinput command. And this one, hallelujah, has an option to list the device IDs that it wants:

    % xinput --list
    ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
        ↳ Anker A7726                               id=17   [slave keyboard (3)]

So maybe I can somehow use xinput to somehow redo whatever it was doing at 122.475, but this time with xkb_options set to ralt?

Maybe but if so I have not figured out how. The command has a relevant-seeming --set-prop option but none of the properties for the keyboard seem to be what I want, or even to have anything to do with what a keyboard is. They are things like:

    Device Accel Adaptive Deceleration (270):       1.000000


    Evdev Axis Inversion (272):     0, 0


    Evdev Scrolling Distance (277): 0, 0, 0

which sound to me like a trackball.

But that's not all!

Now how does xinput decide what to run? Maybe if I could find out what is running xinput I could see how it is run.

At this point I tried Google search for Adding extended input device and was led to the Kubuntu wiki page about X Input Configuration. This was a useful page. It says:

  1. A hardware input device is present at boot, or gets hotplugged.

  2. The kernel detects this, and creates a new "input" device … and a device node /dev/input/event3

  3. udev picks up the "add" event and the new device. /lib/udev/rules.d/60-persistent-input.rules calls /lib/udev/input_id on it

This seemed like paydirt: the kernel notices the bluetooth device and pokes udev, and then probably something in those /lib/udev/rules.d files tells it to kick off xinput.

I spent a while poking around in the rules.d directory looking at the rules. As promised there is a 60-persistent-input.rules and also 64-xorg-xkb.rules. Most of it is gobbledygook to me, and it is not tempting to try to understand it better, because each file begins with

    # do not edit this file, it will be overwritten on update

which means that even if the contents of the file are wrong, I would need to change something else somewhere else. But the 64-xorg-xkb.rules file mentioned /etc/default/keyboard, so I looked at that. It temptingly contained:


# Consult the keyboard(5) manual page.



Aha, maybe that is the cause of the Option "xkb_variant" requires a string value message in Xorg.0.conf. And it has a reference to a man page! The man page is not that much help, but at least it commiserates:

The specification of the keyboard layout in the keyboard file is based on the XKB options XkbModel, XkbLayout, XkbVariant and XkbOptions. Unfortunately, there is little documentation how to use them.

The plan now is: hack /etc/default/keyboard to specify the XKBOPTIONS and then try to reinitialize the right part of the keyboard system. I hoped that the keyboard man page would mention which command does this. It has a SEE ALSO section but none of the commands there seemed to be what I wanted. There is a setupcon which seems to be for setting up the emergency console. And there is also a tantalizingly-named kbdcontrol command…

    % man kbdcontrol
    No manual entry for kbdcontrol
    % kbdcontrol
    kbdcontrol: command not found

Uh, okay, maybe there isn't.

There's still more!

Maybe I can get udev to redo whatever initialization it normally does when the new keyboard appears.

So I added ralt to XKBOPTIONS and then did man -k udev to see what might be about udev. There is a udevadm command that might work. Here's my history of poking at udevadm:

 2082  udevadm --help

This worked flawlessly and told me there was a udevadm info subcommand:

 2083  udevadm info

This told me that I needed to tell it what device I wanted info about:

udevadm info [OPTIONS] [DEVPATH|FILE]

and also gave me a summary of options. But what device do I want info about? I don't know. Does it have an option to produce a list of recognized devices or is this going to be another setxkbmap situation where I have to supplicate the Delphic Oracle? The next few commands are me trying to see if udevadm will disgorge a list of devices:

 2084  udevadm -q all
 2085  udevadm -x
 2086  udevadm info -x
 2087  udevadm info -a
 2088  udevadm info -q all
 2089  udevadm info -q all -a
 2093  udevadm info -e

Aha, that was it!

 2094  udevadm info -e|less

There are 774 devices. (!!) But only three of them mention “Anker” so perhaps I want one of those. I eventually figured out that this was not the case; the one I wanted looked like this:

P: /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:291A:8502.0003/input/input20/event19
N: input/event19
E: DEVNAME=/dev/input/event19
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:256/0005:291A:8502.0003/input/input20/event19
E: LIBINPUT_DEVICE_GROUP=5/291a/8502/11b:f4:8c:50:5c:aa:a7

I no longer have any idea how I guessed this. There are many devices that mention bluetooth and many more that mention XKB, including what I think are the six virtual consoles, and also something called Chicony_Electronics_Co._Ltd._Integrated_Camera_0001. I don't know why an integrated camera has a pc105-model keyboard, but I guess if you can accept a keyboard that has an adaptive deceleration and an axis inversion setting, it's not too big a step to suppose that it might be attached to an integrated camera.

But somehow I did guess it — maybe I noticed that Xorg.0.log mentioned it:

[  7792.373] (II) config/udev: Adding input device Anker A7726 (/dev/input/event19)

After a very reasonable amount of consulting the manual and trying stuff I eventually did

   udevadm trigger  --action add --name-match /dev/input/event19 -v

which I think was the secret sauce, because at the end of Xorg.0.log there suddenly appeared:

[  7792.373] (II) XINPUT: Adding extended input device "Anker A7726" (type: KEYBOARD, id 17)
[  7792.373] (**) Option "xkb_rules" "evdev"
[  7792.373] (**) Option "xkb_model" "pc105"
[  7792.373] (**) Option "xkb_layout" "us"
[  7792.373] (WW) Option "xkb_variant" requires a string value
[  7792.373] (**) Option "xkb_options" "ralt"

and instead of being a warning, that last line says that it at least tried to set the option I wanted. You'll notice that although to udev the device ID is 19, to XINPUT it is 17. Whatever, that just means that someone somewhere has a secret decoder ring that says that 17 really means 19.

After that things were back to normal. Was that because of the udevadm trigger command I ran, or just a fluke? I don't know.

Can I find out what device file to use in the command, without needing a human being eyeball the log file? I don't know.

Will my change to /etc/default/keyboard persist past my next login? I don't know.

Why did it fix the control-key mapping as well as the compose key, when all I said to do was to add the ralt option? I don't know.

It's shit like this that makes me wonder if it's not too late to give up computer programming and become a roofer. In spring and fall this thought can persist for weeks. Fortunately, it's now December and so it's easy to remember why I'm not a roofer.

But I bet southern California is full of ex-programmers who are now roofers.

Now how much would you pay?

If you send me mail that tells me I was stupid because everyone knows that the way to do this is to simply extract the virtual device identifier from column 6 of /proc/hid/combined/kbrd and then just run

xcblfmd reset --config-path /etc/bluetooth/defs.d --vdev-ident=3 --no-connect

and that I would have known this if I had read the wiki like I was supposed to, I will take this Anker A7726 and I will find you and I will shove it up your ass.

Coming next week: The Linux sound system also sucks.

Subject: Non-straight ladders
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-13T16:25:17
Newsgroup: talk.mjd.ladders
Message-ID: <>
Content-Type: text/shitpost

Last week I complained about a reference to “a straight ladder”, which I considered absurd because all ladders are straight.

So far three people have written to me to suggest that A-frame stepladders are not straight. I had considered these (I own one) but I did not consider them to be exceptions. The ladder part is straight; the rest of it is a support for the ladder.

But I think there is an argument to be made in the other direction also: “straight ladder” is sometimes used as a term of art for a ladder that is specifically not an A-frame stepladder, and we can imagine that the authors of the question meant it in this technical sense, even though the target audience is a bunch of middle-schoolers who would not be aware of this distinction. Particularly since the rest of the problem does not make sense if the “straight ladder” is interpreted as an A-frame. (It is about how far up the wall the ladder can reach if its bottom is placed at the maximum safe distance.)

Since I am on the topic anyway, I should mention that Google search for “curved ladders” did produce many indisputably curved ladders, all of them playground equipment. The middle-schoolers would certainly be familiar with these, so perhaps the authors of the question were right to add the qualification.

The best point, however, was raised by Leah Neukirchen, who observed that rope ladders need not be straight, or perhaps that they should not be considered straight even if they happen to be hanging straight at the moment. Without sarcasm, I say: I stand corrected.

Subject: Stuff the kids know and stuff they don't
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-12T09:52:57
Message-ID: <>
Content-Type: text/shitpost

Today I found myself explaining to Toph what a Western was. Of course there is no reason she should know. Probably she has never seen one. There could be an episode of Teen Titans Go that is a parody of Westerns, but there is a lot going on in that show that she doesn't pick up on. (For example, there is also an episode about the “Grim and Gritty” comics fad in the 1990s, with art that parodies Rob Liefield, and I had to explain why I found this funny.)

Later that evening she got a package in the mail. We bought tickets for her to go see Demi Lovato next year, and the ticket price includes a CD. I had been looking forward to finding out what she thought of the CD. Would she even know what it was for? I wasn't sure. But no, she not only knew what it was she knew where in the house we had equipment for reading it. (Why did they mail a CD, anyway?)

But if you go one generation of media farther back, she doesn't know what it is about. I was explaining the “broken record” technique to her a few weeks ago and she didn't understand the metaphor. And why should she? It's possible she has never seen a vinyl record. At one point I dug up a 3.5” diskette out of the garage to show Katara, who was curious about the “save” icon:

Some time later we had a similar conversation about the icon for videos:

There is similarly a lot of obsolete telephone jargon. What does it mean to dial the phone? Or to hang up on someone? Yeah, phones used to have dials, and the handset used to hang on a hook when it wasn't being used.

My favorite example is from a few months ago. Katara had asked me about retirement investments. I was explaining about diversification, and said “because you don't want to invest all your money in some company that looks great, but then is suddenly mismanaged into oblivion. Like Yahoo, or Kodak.”

“What's Kodak?”

“Yeah, exactly.”

Diskette icon provided by Smashicons from

Filmstrip icon provided by Freepik from

Subject: Jingle Bell Rock
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-11T16:24:54
Newsgroup: talk.mjd.jingle-bell-rock
Message-ID: <>
Content-Type: text/shitpost

I came here to write a shitpost that would say:

I wish I believed in Hell, because it would be comforting to think that the author of “Jingle Bell Rock” was in it.

But then I wondered if I'd said that before, so I looked in my tweets archive. (Tweeting is just shitposting, except that the comment section is permanently open to every yahoo in the entire world.) It appears that this is on my Christmas wish every year:

19:30 on Dec 02, 2012

Today my ears were assaulted by "Jingle Bell Rock" for the second time this season. Did you write it? If so, I AM COMING FOR YOU.

19:35 on Dec 02, 2012

It seems that the perpetrator of "Jungle Bell Rock" died in 1997. I wish I believed in Hell so that I might imagine he was in it.

02:01 on Dec 19, 2013

Went to Ms. 9's school's concert, which unexpectedly delighted me by completely butchering my least favorite song, “Jingle Bell Rock”

19:02 on Nov 25, 2015

Heard “Jingle Bell Rock” today. It's times like this that I wish I believed in a Hell where the souls of the damned are tormented forever.

22:49 on Dec 19, 2015 There are always many good reasons to shop at the halal market. This time of year there is one more: Jingle Bell Rock.

Last year we went to Fort Lauderdale for vacation and I discovered to my relief that in Fort Lauderdale they don't really go in for Christmas music in the relentless way they do here in the Northeast. In fact they didn't really go in for Christmas much at all. The only real evidence of it that I saw was that on the 25th there was a guy in a Santa suit driving his pickup down the beach handing out gifts to kids.

There's no JBR tweet from 2014. Perhaps I felt that I had exhausted my tweet quota about Christmas songs for the year:

18:18 on Nov 30, 2014

Second time this week I've been subjected to "Rudolph the Red-Nosed Reindeer".

But that didn't stop me from complaining about Rudolph twice in 2013:

20:20 on Nov 15, 2013

For no reason this afternoon I asked myself "What's the worst song ever written?" A candidate came to mind: Rudolph the Red-Nosed Reindeer.

00:41 on Dec 02, 2013

It must be December, because I was unable to go to the store for paper towels without being forced to hear Rudolph the Red-nosed Reindeer.

Objectively, I would say that Rudolph the Red-Nosed Reindeer is worse than Jingle Bell Rock, but I seem not to have tweeted about it as much. Jingle Bell Rock bothers me more in the moment, but Rudolph's awfulness is more sophisticated. As Rocco Caputo observed:

The Parable of Rudolf contains an important social message: The Patriarchy controls the distribution of prestige.

More generally, I have complained:

14:46 on Dec 16, 2012

Supermarket playing Christmas carol medley; I amuse myself by replacing all the lyrics with variations on "choke on my cock".

20:24 on Nov 15, 2013

Clearly, the competition for "Worst song ever written" needs "Christmas song" and "Non-Christmas song" divisions.

14:40 on Dec 08, 2013

→@pozorvlak I'd be glad for a Christmas playlist that didn't try to relentlessly shovel the same 16 songs at me everywhere I go for 6 weeks.

That last one really gets to the part I hate. It's not so much that the songs themselves are worse than any others, although it is partly that. It's that I have to endure them constantly. If I heard each one only once or twice per winter, I don't think I'd have a big problem with it. But I don't need to hear Jingle Bell Rock ten or twelve times during the month of December. (One year I kept track.)

This time a couple of years ago Ms. E my piano teacher suggested that since Christmas was coming up I might like to learn to play some Christmas songs. I think I turned a bit pale, and I stammered out quietly “I don't really like Christmas music.” She hasn't brought it up since.

Subject: A non-coincidence
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-10T05:03:34
Newsgroup: talk.mjd.supreme-court-justices
Message-ID: <>
Content-Type: text/shitpost

I sometimes feel a little sad that Felix Frankfurter was never on the Supreme Court at the same time as Warren Burger.

Subject: Mathematical ladders
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-10T00:10:57
Newsgroup: talk.mjd.ladders
Message-ID: <>
Content-Type: text/shitpost

Katara and I were looking at some warmup problems for a math competition. One began:

When leaned against a vertical structure, a straight ladder can be used safely if ...

This knocked me for a loop and I had to stop to recover my wits. “A straight ladder?” I cried. “What other shape can a ladder be?” Then I had to indulge in a fantasy about the uselessness of a curved or an S-shaped ladder.

Sometimes I wonder who writes these questions.

Subject: Lesbians on my desktop
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-09T18:47:16
Newsgroup: talk.mjd.desktop-lesbians
Message-ID: <>
Content-Type: text/shitpost

The Linux / KDE file dialog never opens up to the directory I want it to, and often it opens up to ~/Desktop, which I never want it to. I store almost nothing on the desktop, because the useful windows cover it up and anyway I always use the command line for accessing my meticulously-organized hierarchical file structure.

But I do have one file on the desktop, an image file called Lesbians.jpg:

File selection dialog box listing the
contents of /home/mjd/Desktop, which contains only one file, named

This file startles me every time the dialog pops up. “What the hell is that doing there?”

Then I remember what it is, and I smile. Sometimes I stop and take time to look at it:

Two elderly women with white
hair, both smiling.  One is seated in a wheelchair, holding up an
official-looking certificate.  The other has her arms raises in
triumph.  A third woman stands beside them, smiling.

These are Phyllis Siegel (standing with arms raised) and Connie Kopelov (seated), the first two women to be legally married in New York State.


Subject: Fiona sings Frosty
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-08T19:16:29
Newsgroup: talk.mjd.frosty-the-snowman
Message-ID: <>
Content-Type: text/shitpost

Last month I was introduced to the work of Fiona Apple, which I just love. She has released only four albums since her debut in 1996, the last one in 2010. I went trawling through Spotify looking for offcuts and miscellany. I found five or six tracks.

One, unfortunately, was a cover of “Frosty the Snowman”. For an awful minute my mind teetered as if on a fulcrum, as I tried to decide whether to listen to it. I finally decided in favor of Fiona Apple, and listened to it. Once was enough. Even Fiona Apple could not redeem “Frosty the Snowman” for me.

This reminds me of the time I found out that Alanis Morisette had covered “My Humps”. I had previously decided that “My Humps” was the single worst song ever recorded. No, not quite: Christmas songs are in a separate division. “My Humps” is the winner of the non-Christmas division, but the competition in the Christmas division is much stiffer. “My Humps” is so bad that a Google search for it turns up this page titled “The Worst Song Ever Made” even though the page does not actually mention “My Humps”. Anyway I was eager to see if Alanis Morisette could somehow redeem “My Humps”, and while I give her an “A” for effort, I sadly concluded that she could not. Sorry, Alanis. It was a good try, but some things are better left alone.

However, “Frosty the Snowman” is not the worst song ever. There are other versions I would be willing to try. I would be willing or even interested to hear “Frosty” covered by any of: Laurie Anderson, Jane's Addiction, Laibach, D.J. Lebowitz, Gary Numan, Tom Waits, or Yamatsuka Eye. Probably there are others.

Subject: Vegan dominatrix supplies
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-07T00:32:34
Newsgroup: talk.mjd.vegan-dominatrix
Message-ID: <>
Content-Type: text/shitpost

Today while going from place A to place B, I suddenly wondered whether there were vegan dominatrices? There must be, I decided, but that do they use in place of the canonical leather whip?

There is a “Vegan Dominatrix” Twitter, but the content is not very specific, and it has been idle since 2016. There is also a “Vegan Dominatrix” blog, I think unrelated to the Twitter. It updated only once, in 2009, but at least the single the post is pertinent to my inquiry.

Etsy user Kinkybutcute sells a line of vegan flogging devices made of bundles of waxed, knotted hemp or cotton cords.

This 2010 bulletin board thread asks for advice purchasing dominatrix supplies for costuming purposes rather than real use, and asks specifically about whips. There are some suggestions.

More than one site contained a link to, which went defunct around 2012. An archived version of their main page says: manufactures hand-crafted vegan bondage gear, whips, belts, harnesses, and other vegan leather (a.k.a. "pleather") items.

Their site has a category for “hitting toys” but as far as I can tell, no whips. “Pleather” is a marketing name for a type of artificial leather. I am not sure if it would make a usable whip.

Subject: Mmmm baked potatoes
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-06T06:57:38
Newsgroup: talk.mjd.potatoes
Message-ID: <>
Content-Type: text/shitpost

I recently wrote an article here complaining that even though everyone agrees on what a good french fry is like, and even though it's not hard to make a good french fry, most of the fries you actually get are not good.

I have a similar complaint about baked potatoes. Restaurant baked potatoes are uniformly terrible, even when you pay $10 for them at an expensive steakhouse. The potato is supposed to steam inside its skin and become soft and fluffy inside, and crisp on the outside. Instead you almost always get a potato that is not too different from raw.

The bad fries are a mystery. It only takes a few minutes longer to make really good fries, and I don't understand why more people don't do it. The baked potatoes are easier to understand. Making a good baked potato takes a lot of time. It doesn't require skill or attention, just patience.

The recipe is: heat the oven to around 350°. Start with a big starchy potato, the kind with dusty brown skin. Wash, dry, and oil the potato, prick it with a fork, and put it naked into the oven. (No foil! Unless you want your baked potato to be a steamed potato instead.)

And then add the secret ingredients: time and heat. Many recipes advise baking the potato for an hour. This is not enough. Once the potato goes into the oven, leave it there, for at least ninety minutes, maybe a hundred and twenty. If it's in a pan you might want to turn it over once. It's probably better to just put it on the rack, then you don't need to turn it.

The exact time and temperature is not that important. This is not rocket science; it is just a potato. The proper cooking time is not a fleeting instant, it is a long afternoon, an easy target. At some point the potato will begin to overcook, but not for a long time, and if it does, it will happen very gradually. The skin will stay crisp and the inside will stay fluffy; only a thin shell in between will dry out too much, and even if it does you may not find it objectionable; some people like it that way. I suppose eventually the entire potato would char and catch fire, but you would have to work really hard to leave it in the oven that long.

The other key point is to take the baked potato out of the oven and deliver it to the table at the moment you are about to eat it, and not any sooner. The baking time is quite flexible, as long as you don't take it out too soon. So don't say “oh, the recipe said to bake it for 90 minutes”, and then take it out after exactly 90 minutes and let it sit around for a quarter hour before you serve it. Leave it in the oven until serving time, and when everything else is ready, then take it out and drop it on the plate.

Restaurant chefs have years of training and practice in the culinary arts, and because of this they cook many things much better than the rest of us. But how much advantage do they derive from their training and practice when baking a potato? Pretty close to zero.

Restaurants, by their nature, are really good at some kinds of food, much less good at others. The baked potato is very ill-suited to restaurant-style preparation methods. It takes a long time to cook, but unlike many long-cooking foods, such as stew or soup, it can't be prepared in advance and then reheated. (The outside, which should be the best part, would get tough and leathery.) The baked potato is best when served on the instant, but unless the restaurant had a whole oven devoted to potatoes in different stages of doneness, circulating in and out in shifts through the day, and unless they invested the attention and trouble to keep track of all those potatoes, putting in new ones and taking out the old ones every half hour or so, they wouldn't be able to produce a well-baked potato at the moment they needed to deliver it to the table.

And if the restaurant did go to all that trouble, what then? They wouldn't be able to charge enough to pay them back for the time and trouble, because it is just a potato, and who is going to pay a lot of money for a potato?

So baked potatoes are a dish that you can do at home better than a restaurant can, and you might as well. Let's all create a better world by cooking better baked potatoes.

Subject: Hey, that's not how that is meant to be used!
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-05T20:42:33
Message-ID: <>
Content-Type: text/shitpost

When the kids were smaller, they would sometimes drop food. I would adopt a puzzled expression, and say, in what I hoped was a tone of perplexity, “you're supposed to eat it, not throw it on the floor!”

The kids did not find this funny. They found it extremely annoying, and ordered me to stop. When I saw that it would never be popular, I gave it up.

But I still think it, and it's still funny every time, sometimes funnier.

Subject: Life in the 21st Century
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-05T19:47:20
Newsgroup: talk.mjd.wawa-app
Message-ID: <>
Content-Type: text/shitpost

I often shop at Wawa, a regional chain of convenience stores where I live. They have a phone app, which keeps track of how much I have spent there and gives me a bonus after each $50 spent. The bonus is almost always applicable something I would have bought anyway, like coffee or sandwiches, and using the app is effectively worth about 5%. I'm not sure just what Wawa is getting out of this, but all I can think of is either more store visits from me or better information about my Wawa buying habits, both of which seem fine to me.

Somtimes the app delivers an additional surprise bonus. And for some reason these often arrive when I am traveling for work, in Santa Monica. For example, today only I have the opportunity to claim to a free fifteen-ounce “Java Monster”, whatever that is. (As a computer programmer I find the name poorly chosen. It evokes bad memories and suggests disturbing nightmares.)

Tomorrow I am eligible to receive a free bag of potato chips, normally priced at $1.69. This would be attractive had my doctor not told recently told me to lose weight and eat fewer carbs. If I were in Philadelphia I might have picked it up anyway, and then given it away to one of the folks in my coworking space. But in Santa Monica it is not clear how to capitalize on this offer.

Wawa has a lot of stores and the app has a store locator that will tell me if there are any around where I might be able to get my chips. So I asked it, and learned that to pick up my free chips I don't need to go all the way back to Philadelphia. The nearest Wawa is in Port Richey, Florida, a mere 2145.51-mile drive.

(Google Maps directions say that the drive is actually 2,487 miles. Is Wawa overoptimistic, or do they know a shortcut?)

Even if I were to try, the store is 37 hours away and by the time I arrived, the offer would have expired.

Then I try to imagine explaining this to Benjamin Franklin and it doesn't go very smoothly.

Subject: Shitpost academy
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-05T18:07:57
Newsgroup: talk.mjd.shitpost-repatriation
Message-ID: <>
Content-Type: text/shitpost

Ideas to consider:

  1. Each month, have a Shitpost Roundup on The Universe of Discourse with a menu of the previous month's shitposts. Then people who follow the main blog can find out what went on, which might be of passing interest, without actually following the shitpost blog, which probably isn't.

  2. Instead of trying to get posts into the right place the first time around, just make a monthly pass over the shitposts and see if any should be promoted to The Universe of Discourse. This would be a good opportunity for additions and emendations.

Subject: My rule about eating everything
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-05T17:11:13
Message-ID: <>
Content-Type: text/shitpost

When I was thirteen, my grandparents took me to Greece for my birthday. This was, of course, completely awesome. Except that every time I had the opportunity to order Greek food, I chickened out and ordered souvlaki. When I got home again, I felt like a schmuck because I had wasted a rare opportunity, and I swore that I would never make the same mistake again.

(For my fourteenth birthday I asked my grandparents to take me to a Greek restaurant and order for me. I remember eating avgolemono soup and moussaka for the first time.)

I have done pretty well by my oath. I've been a lot of places and eaten a lot of stuff. Not all of it was good, but most of it was, and some of it was great. I went to Hong Kong in 2001 and ate everything, not just Cantonese food but also my hotel was having an exchange program where a bunch of hotel chefs from Budapest came to show the Hong Kong hotel chefs how to cook Hungarian food, and there was a Hungarian buffet every night, which was also pretty wonderful. I went to Taiwan in 2003 and ate everything and the only bad meal I had was in a crappy restaurant across the street from the bus station in Hualien. And it wasn't because they were serving anything surprising, it was just because they were bad cooks and their crappy restaurant was dirty.

There are only a few missed opportunities of the same sort that I continue to regret. One summer I was working in southwest Illinois, and after work I went for a drive to see if I could get to the Indiana border.[1] I drove to Lake Carlyle, took a nap in the front seat, then started driving around county roads at random. At some point I passed by a little restaurant in the middle of nowhere away from everything else, and since it was dinner time, I went in.

The special that day was chicken gizzards, which I've never had. But I wimped out and ordered a hamburger. Dammit. I was having an adventure, and when the adventure offered up a plot twist I said “No thanks, I've had enough.”

Another episode, not as bad, was when I was on my road trip last summer to drive around Chesapeake Bay. One day I stopped for lunch and got soft-shell crabs, a regional specialty and also a favorite of Placido the Octopus. I asked if the restaurant served Smith Island cake, also a regional specialty, the official dessert of the State of Maryland. They did have it in several flavors, including caramel, but no chocolate, so I skipped dessert. That could be worse. If I really want to try a Smith Island cake I can probably mail-order one. Or go back to Maryland.

Those lost chicken gizzards really bug me. Maybe I wouldn't have liked them, but they would have had to have been pretty awful to have bothered me as much as the ones I didn't eat.

[1] I did not make it to Indiana, or even close. Lake Carlyle is only about 30% of the way to Indiana. I still haven't made it to Indiana. Someday, though!

Subject: “Oh, you ate that?”
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-05T16:39:01
Message-ID: <>
Content-Type: text/shitpost

My co-worker Martin Locklear informs me that “Лох-Несского” is actually pronounced “Loch-Nesskovo”, not “Loch-Nesskogo”, even though the “г” is clearly a “g” and not a “v”. And it also occurs to me that the “e” means that the vowel is iotized so that it is more like “Loch-Nyesskovo”. Whatever, this should give you an idea of how little Russian I know: just barely enough to convince someone who knows none at all that I know something, but not enough to be of any actual use.

This kinda reminds me of something interesting that happened to me a while back. In 2001 I was fortunate enough to be invited to Tokyo to teach classes for three weeks. One evening I went to a nearby restaurant, billed as a traditional-style yakitori pub. I don't know how traditional it was, all the other yakitori pubs I have been to have been less fancy and had less complicated menus, but whatever. Anyway I read no Japanese at all, but the menu had pictures of things so I ordered some things that looked like they might be good. One of the dishes I ordered was some deep-fried battered balls which I guessed would have something interesting inside.

The balls did prove to have something interesting at the center, but I could not identify what it was. It seemed vaguely familiar, and I thought I had eaten it before somewhere, but I could not place it. Whatever it was, it had no flavor, but a very distinctive texture: it was smooth and slippery, tough but yielding. If I bit down on it it would resist, then give suddenly as I bit it in two — chewable, but just barely. I spent quite a lot of that meal trying to figure out what was in those balls, and I eventually decided that I wasn't going to figure it out. My best guess was that it was fish vertebrae, which I had heard people would sometimes eat: it was tougher than meat, but not as tough as bone, so maybe?

(I did eat all of it. It was okay, and I have a strict rule that when visiting a foreign country I should always eat everything that is put in front of me. In many ways I am less polite as I would like to be, but to go into someone's home and then turn up my nose at their food seems inexcusably gauche. Also, I'm not going to eat other peoples’ food, why even travel in the first place? I might just as well stay home and go to the McDonald's on 40th and Walnut.)

I can't read or write Japanese but I sure can copy it and I carefully copied the name of this fried dish into my notebook. The next morning when I got to class I showed my notebook to the students and said “I had this for dinner last night. What did I eat?”

“Oh!” said one of my students. “You ate that?” That was an odd moment. He paused to think of how to say it in English. “Chicken knuckles.”

It turned out that inside those balls was the cartilage from in between the bones of a chicken. You know how sometimes you're eating a chicken drumstick and there's the connective tissue on the end of the joint and you might get it in your mouth? You could chew it up and swallow it. But it's quite tough, so probably you just spit it out. Except not in this case; it had been battered and fried. So that was why it seemed familiar: I had actually eaten this before — sort of.

But it's a good thing I can copy Japanese, or I would have had to keep wondering and it would have bugged me for years.

Subject: Mmm, sandalwood
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-05T16:20:13
Newsgroup: talk.mjd.forest-fire
Message-ID: <>
Content-Type: text/shitpost

Today I'm in Santa Monica. When I got down to breakfast in the hotel lobby, the Israeli guys mentioned that there was a big fire about twenty miles away. I shrugged. “Didn't you smell it?”

Then the light went on. I had been planning to advise the front desk that someone had been burning incense in their room.

Hmm, I wonder if I could demand a rate reduction, because I was promised a room on a No Smoking floor.

Subject: Bitcoin
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-01T20:15:53
Newsgroup: talk.mjd.bitcoin
Message-ID: <>
Content-Type: text/shitpost

A few years ago, a Reddit user liked something I had written and invoked some Reddit tip-bot daemon to tip me for it. At the time the tip was worth approximately 6¢, and since I was not a regular Bitcoin user, it would hardly have been worth my time to claim the tip, much less to liquidate it.

But yesterday I saw a story that bitcoins were now trading at close to $10,000 each, and I wondered how much my tip would have been worth. I knew it was some small fraction of a bitcoin, but I didn't remember what the fraction was.

I now see that I should have been less cynical and short-sighted. If I had claimed it timely, it would now be worth $1.05.

Scrooge McDuck
diving into a pile of gold coins

Subject: Лох-Несского
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-01T17:44:08
Newsgroup: talk.mjd.loch-nesskogo
Message-ID: <>
Content-Type: text/shitpost

Recently this Russian-language page linked to my article about finding a bug in sort(). It says:

Найти баг в функции sort – сродни обнаружению Лох-Несского чудовища.

I don't know Russian, but I do understand the Cyrillic script, and Russian has so many English loanwords that I can sometimes make out part of what it is saying. For example, in the sentence above, “баг”, pronounced “bahg”, means “bug”. (I didn't know this before).

This time I didn't get very far except to guess that “функции sort” (“funktsii sort”) was referring to the sort function.

“Лох-Несского” stood out because it was capitalized, and because the double-с is unusual. I recognized “-кого”, which I think is some sort of genitive-case marker. But I couldn't imagine what the rest of it could be, so I asked Google, and then I felt dumb: “Лох-Несского чудовища” (“Loch-Nesskogo chudovishcha”) is the Loch Ness Monster.


Subject: Drat, I messed up a shitpost
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-12-01T16:07:11
Newsgroup: talk.mjd.slaughter-electric-needle-injector
Message-ID: <>
Content-Type: text/shitpost

Yesterday's article about the Slaughter electric needle injector really did not belong here. It was not shitty enough. In fact there was nothing at all wrong with it. I should have put it on the real blog.

When I started this project, I resolved that at the end of each shitpost, before publication, I would re-evaluate and decide whether the article was of higher quality than I intended. If so, I would publish it on The Universe of Discourse instead. I forgot to do that this time. I will do better next time.

Hmmmm, I just realized: it's not too late! Okay!

New location

Subject: Do NOT Resuscitate
Path: your-brain!your-host!ihnp4!kremvax!plovergw!shitpost!mjd
Date: 2017-11-30T20:28:00
Message-ID: <>
Content-Type: text/shitpost

The tattoo includes the patient's signature. This part has been blurred out in the picture.

Complete text of letter to the New England Journal of Medicine