That’s Not Gonna Work!

The possible itinerary I came up with for my November trip has an obvious typo returning from Wrocław on the 26th.  I have no clue why that didn’t jump out at me right away.

Also, checking for what I had really meant to write, I discovered that EuroCity 54 and 57 will be direct trains between Wrocław and the Berlin Hbf which actually works better.

Given my current mobility issues, I might have to skip the Meeting C++ and code:dive conferences, in which case I might be able to fly in and out of Berlin instead of Frankfurt; and the only hassle will be getting between the airport and the central train station.  I can decouple the plane and train legs by spending one night in each direction at a hotel near the Berlin airport, which I did for my Varna trip; so I know the drill.

We’ll see…

He shall from time to time give to the Congress information of the State of the Union …

I’m getting more and more depressed about our current political discourse.  Last night, even PBS Newshour got on the Biden’s-too-old bandwagon.  They weren’t claiming to express an opinion, of course; they were claiming to be simply reporting on things like polls and interviews of random people on the streets.

I can understand the media’s obsession.  Biden’s performance, repeatedly and recently, has been shocking; but Trump’s Gish gallop of lies is just old news.

The discussion needs to move away from Biden to what the alternative is.  I wish Biden would give a speech about the current state of the union in which he spells out, in considerable detail, what we’re likely to see given another four years of Trump and his handlers.  Make it about Trump, not about himself; and he should take the gloves off.

And he shouldn’t shy away from observing what the Roberts court has done nor fail to mention their hypocrisy and sleaziness.  For example, he could point out several horrible things that he could now get away with as a sitting president and then say something like:

But I won’t do these things because, unlike the Gang of Six, I care what the Founders had in mind.

I thought of another line that I’d like to hear:

I do not say these things to shame them:  you can’t shame people who are shameless; that’s a waste of time.  My purpose is to show just how vile these people really are.

But I fear that he’ll just speak loudly, maybe pull an angry face, but otherwise fall into the trap of keeping the discussion about himself.  That strikes me as a losing tactic.

Self-Modifying and Machine-Generated Code

In a comment to my previous post, John Morales asked my opinion of self-modifying code.


Answering the question as asked

That’s an easy one:  it’s a maintenance nightmare.  Don’t do it.


More generally

Over the years, and I’m old enough to remember punching Hollerith cards1 and sticking them in sorting machines (wired boards were before my time), I’ve developed a very explicit coding style, principally because a week, a month, or a year from now, I don’t want to be wasting any time trying to puzzle out what the hell I was thinking about.  I always use meaningful identifiers (names of things that programmers make up), although I’ll break down and use abbreviations at block scope; and I avoid all the known anti-patterns (“magic numbers” come easily to mind).  When a function has more than one big thing to do, it’s time for refactoring.  I even prefer Allman-style curly brace placement precisely because it puts more white space in the code and so separates bits of code in ways that are immediately visible.

Back in my newbie days, I made all the newbie mistakes; I even thought that self-modifying code was Really Cool.  The only reason that I’m not still a newbie is that I learned from my mistakes (and I hope that I never stop learning).

Just for fun, I’ll put a cute little self-modifying PDP-8 program at the end of this post.


A related issue:  machine-generated code

This is a completely different thing and not particularly scary.  Programmers know how to write source code, which is just text; and they know how to write text to a file.  No big deal.  Indeed, the two programs that I wrote to generate simple Amtrak timetables and on-time performance statistics spit out complete Web pages2; and my timezone code comes with a couple of utilities that read Zoneinfo data and generate array initializers that get #included in other programs.  That’s all really simple stuff.

It could even be argued that this is what C++ templates are:  when you write a class template or function template, you’re telling the compiler how to write a class or a function for you.  Yes, really.  And if reflection makes its way into C++26, which is highly likely, we’ll have lots more compile-time code generation.3


1If I might stretch the meaning of “program” a bit beyond the breaking point for a moment, my first program was an 026 drum card.  That was back in the Viet Nam era when Sgt. Seymour was Base Fuels Accountant at March Air Force Base.  There was a very complicated daily report that got run overnight at 15th Air Force HQ; and it didn’t take me long to figure out that, in order to get the cards punched right the first time, I had to do it myself.

2It turns out that all I needed was good old HTML1 with no anchors or scripts…easy.

3But this kind of code generation is something that compiler authors do, not something that J. Random Coder like me does.  I know some compiler authors, and they’re way smarter than I am.  If those folks are the big leagues, I’m like an acceptable AAA baseball player when I’m having a good day.


Here’s a bit of machine-language PDP-8 code (not written by me) that sets all the bits in a memory field, including itself, to zero.

A PDP-8 field had 4096 12-bit words, so all the addresses and data are four octal digits.

ADDR  DATA  MNEMONIC
----  ----  --------
0004  1005  TAD 5
0005  3410  DCA I 10
0006  5004  JMP 4
0007  5404  JMP I 4
0010  0011  (data)
0011  2010  ISZ 10

TAD:  Two’s complement add.  Add the contents of the referenced location to the accumulator.

DCA:  Deposit and clear the accumulator.  Store the accumulator in the referenced location and set all the accumulator bits to zero.  The “I” in the mnemonic means “indirect”; and when absolute addresses 108 through 178 are used as indirect addresses, they pre-increment; so the first time the DCA I 10 instruction gets executed, it stores the accumulator in address 128, then 138, and so on.

JMP:  Jump to the referenced location.

ISZ:  Increment, skip if zero.  Add 1 to the referenced location and skip the next instruction if the sum is zero.

That first three-instruction loop just sticks 3410 all over memory until it finally wraps around to location 6 where we continue to location 7 and JMP I 4 to location 3410 and start executing 3410 instructions. 😎  Since DCA clears the accumulator, at this point we’re storing zeros all over memory.  0000 is an AND instruction:  load the bitwise AND of the referenced location and the accumulator into the accumulator.

I’ve forgotten what that final ISZ instruction is for, and I’m not in the mood to puzzle it out, so I’ll leave that as the dreaded exercise for the reader. 😎

You’ll notice that that program is not an algorithm because it doesn’t halt; it just keeps on executing AND 0 instructions.  When all the lights on the front panel stop flashing, you press the STOP switch. 😎

I’ve written a little paper about the PDP-8 if anybody is interested.

The Meeting is Over

We finished the ISO standards committee meeting that I sponsored a bit before noon on Saturday, then some medical stuff got in the way of this post.  I’ll probably write about that tomorrow or Friday.

I was freaking out most of the week worried that everything would go well, in part because my hearing aids give me hardly anything but distortion when trying to listen to amplified sounds, so I spent most days working from home via Zoom.  That was OK because I have a box that I can plug into the headphone jack on my laptop that generates a bluetooth signal that feeds my hearing aids and gives me good enough quality to understand human speech.  I did check into the hotel Sunday night to help with the setup and to make sure I’d be there for the Monday morning plenary, and again Friday night to help with packing up and to be there for the Saturday plenary.

I guess I needn’t have worried so much because I got quite a few very nice thank-you notes from several movers and shakers on the committee.  Herb Sutter, the WG21 Convenor (the ISO word for chairperson), has a better post about the meeting than I could write on his own blog.  There’s a really good summary of the meeting at the beginning if anybody is wondering how this ISO committee works.  After that, it gets pretty technical and maybe not of much interest to folks who aren’t computer programmers.

I was fortunate to be able to give the committee a bit of payback for everything I’ve gotten from it over the years, but I don’t know that I’ll be able to do that again.

The next face-to-face meeting will be in Wrocław, Poland; and I’ve written about that already with a link to one possible itinerary.  We’ll see whether I’m able to attend.  All the trains I’d ride in the U.S. except the trains between New York and Boston have checked baggage service, all the stations where I’d be changing trains have red cap service (help with luggage), and I get wheelchair assistance at airports*; but I’d be lugging my luggage around on all the European trains.  A lot depends on whether I can get wheelchair assistance from the Frankfurt airport’s terminal two to the airport’s regional train station in terminal one.  The bus from terminal two to terminal one, which I’ve used before, would probably be a major hassle given my current mobility issues.  We’ll see…

Update:  2024-07-06:  I’ve found that I can indeed get wheelchair assistance between the two terminals in Frankfurt.


*I’ve found out that wheelchair assistance at airports gives me license to cut in line at security, immigration, and the boarding gates.  I’m not sure I deserve that; but I guess it makes sense to allow the folks pushing the wheelchairs to spend less time with me and so serve more customers.