2021-09-13

Authorization is part of a safety mechanism, but not a goal.

My better half ran a news show tonight and the anchor was interviewing a policy wonk on the subject of Covid19 vaccinations for kids (both teens who are currently eligible under a emergency use authorization and younger kids). On the whole I thought the interviewee very good. Knowledgeable, reasonable in her balancing of competing desires and risk, and in touch with the effects of this pandemic on communities. Not that I was one hundred percent on board with her point of view but at least I could see where she was coming from.

Then right at the end of the segment, the guest triggered a pet peeve of mine.

You may imagine me turning green and bulging out into the looming shape of Semantics Hulk. Or something.

Anyway, this lady said something like "We want to make sure the vaccine is authorized and is safe and effective."

A fine sentiment, except that authorization is not—should not be—a goal in and of itself. The only reason that authorization is desirable is because it forms part of a process which is suppose to ensure the "safe and effective" part. Those are the (only!) real goals.

2021-09-03

Observation of the day

We all come into this world with our Pleistocene brains, ready to take on the information age.

2021-08-23

Objective knowledge is ... subjective?

I recently finished Jonathan Rauch's The Constitution of Knowledge: A Defense of Truth. I found most of the book pretty depressing: it relentlessly examines the ways in which trolls, propagandists, well meaning activists, and shameless bullshitters have been succeeding in attacking the foundation of collective certainty that is the legacy of the enlightenment and subsequent advances. It does make the effort to end on a optimistic note with a exhortation to action in the defense of objective truth.

I recommend it; but hang onto your sense of purpose in the world: it's a rough road.

But I want to point out an oddity in the author's conception of the world (one freely admitted in the text, by the way). One of several guide-stars it the text is what Mr. Rauch calls "the reality-based community" and the rules under which it operates (which he dubs "The Constitution of Knowledge").

We should stop to note that Mr. Rauch's conception of this community encompasses a pretty broad swath including not only scientists but also many other scholars, journalist, intelligence analysts, various members of evidence-based judicial systems, and some governmental and no-governmental policy wonks. Basically everyone who approached the creation of knowledge using The Constitution of Knowledge as a foundation.

One of the key rules of the "knowledge" produced by these systems is that anyone else honestly and diligently following the same rules and using the same base of existing facts should come to the same conclusions. A condition you know you've reached when a strong consensus emerges in the community itself.1

But that leaves us in the epistemological interesting positions of having "objective" knowledge be the product of consensus (among a suitably trained set of investigators), which is at some level a subjective entity.2

The reason this doesn't bring the whole structure down in ruins is the allegation that the processes is what generates the reliability. Have trained in a physical laboratory science I have recourse to highly repeatable experiments for much of the grounding of my discipline,3 but the idea that persuasion through open, earnest, and largely no-personal argumentation is the legitimate route to authority works more broadly that the experimental sciences.


1The author presents a number of examples.

2 Indeed, the author talks about the ways consensus forming can fail or be subverted.

3 Even in physics you get into places (like quantum foundations) where interpretational issues become important in the way we teach, relate, and apply the things we know.

2021-08-15

Covid update (2)

Not about the renewed threat from the delta variant. Not even about how depressingly unnecessary the renewed threat from delta is. More about the how Covid has affected us.

Both of my regular readers probably recall that the whole family got the thing in late November or early December. Well, we never had the child tested, but she had symptoms similar to, but less severe than her mother.

General update:

  • Grandma was in the hospital for over a month. She was sent home in dreadful shape and still on a feeding tube. She rallied and transitioned to liquid, then chopped, then normal diet; but she remains on hospice and is still bed-bound (before Covid she needed increasing levels of assistance in walking and transfers but was decidedly not bed-bound). Her specialists say that Covid accelerated the progress of her underlying condition.
  • My wife and I both experienced bouts of unexpected fatigue throughout January and February. One advantage of working from home is that if you have a irresistible need to take a ninety minute nap at 2:30pm the only disruption is the need to make up the lost time that evening.
  • My wife seemed to recover well at first, but in March started to grow weaker. In April she was diagnosed with long Covid. One of the main features of the extended version of the disease is a swelling on the heat and lungs which puts pressure on them and reduces their efficiency. The treatment of choice at the moment is supplemental oxygen, avoiding any kind of intense exercise, and waiting for the swelling to go down. So we're lugging O2 bottle around when we go out, and she's been scheduled for consultations with half a dozen assorted specialists. Best guess is that we're in this boat for another six months, give or take.
  • My on-going symptoms faded around the end of February. But my better half remains worried on my behalf to this day. So I asked about attending the long Covid clinic and got the expected answer (I'm not sick enough to justify any of their overbooked time), and have restricted my exercise regime to low intensity (walk, don't run; go steady, not hard on the rower; very modest levels of moderate resistance training). I began to feel something like my old self again around late May. Mind you, the gray that appeared in my hair hasn't gone away like it did the first few times it showed up (always during a particularly stressful period in the last ten years or so). I tell my self that a little salt-n-pepper at the temples is "distinguished". Sometimes I even believe it.

2021-07-22

Reading from files, single responsibility principle, and testability

Say that your program needs to read some kind of structured data from a file. In a object oriented language the obvious thing to do is encapsulate the parser and the storage of its results in a class. Perhaps something like:

class DataReader { public: DataReader(std::string filename) { std::ifstream in("filename") if ( in.good() ) { parse(in); } } //... }

Indeed some of the legacy code my project calls had one of these as the main access point for a bunch of important functionality, and I've been asked to extend it and authorized to do some re-factoring along the way. Whoohoo!

But I can't afford to break existing code (or at least I have to know what I'm breaking and why...), which means I need some detailed test. Yes. It doesn't have a test suite. I mentioned that it was legacy code, didn't I? And that is where the problems start, because how do you write a self-contained test for DataReader?

  • Actually creating a (or more likely several) test files break self-containment and means your test code needs to know where to look for the files, and test can fail for reason that have nothing to do with DataReader. Yuck!
  • You could encode the test input as strings in your tests, create and write a temporary file, run the test on that file, then clean up the temporary file. That solves the self-containment and "where to find it" problems and doesn't clutter up the disk with a large number of similar test files. But it still breaks if there is a problem with the disk. More problematically all the set-up and tear-down code is a place to write bugs, and interferes with the clarity of your test. Still pretty bad.
  • The third option is to refactor to make it clear that opening the file and dealing with the contents are separate "thing"s for the purposes of the Single Responsibility Principle. The class should take a stream not a filename. Now to avoid breaking existing code we can relax our pedantic insistence of separation of concerns by leaving the existing c'tor as a convenience but defering most of the work to a new c'tor that takes a stream. Something like: class DataReader { public: DataReader(std::istream in) { if (in.good()) { parse(in); } } DataReader(std::string filename) : Datareader(std::ifstream(filename)) {} //... } Then we use a std::istringstream in the test eliding much of the setup and all of the tear-down.

I shouldn't have to ?*(<|#% register to do that!

The house we bought out here is not only bigger than any we've had before but it is bigger than we actually needed. There just wasn't anything smaller that met our needs on the market when we had to buy, so we had to take what was available.

The shear size of the place has been a problem from a WiFi perspective.1 There has been signal and bandwidth everywhere, but in some corners both sometimes drop pretty low. One of those corners is the guest bedroom which is where I work-from-home.

Well, complaints from my better half finally got me off my duff. I bought a couple of meshing extenders. Nice ones that maintain the same SSID none-the-less. The instructions included in the box tell me to download the app and use it to configure the widgets. I grumbled a bit, but fine. Except that once I have the app I learn that it requires me to set up an account with the manufacturer's web site.

Are you kidding me? Why would I want to do that?

It's a serious question. What makes them think I want to register?

In a word: No!

Now, it turns out these widgets support a WPS pairing mechanism.2

However, that wasn't mentioned in the material in the box and was pushed to the very bottom of the help web page: a tiny paragraph of plain text under screen-fulls of colorful pictures and enumerated lists of steps supporting the two ways to register with them to get it done.

I can only assume that this is done in bad faith. It is a malicious act in the service of the company to the detriment (admittedly small) of their customers and it makes the world a tiny bit worse.

Worse, I think the printed docs included the no-registration instructions at some time (the controls for it are labeled on the diagram but never referred to). At some point a marketing jerk told the tech writers to make the documentation worse and the tech writers complied, but they didn't take the time to scrub all the traces of their lost efforts.


1 The house actually has some kind of wire-in-the-wall-and-RJ45-jacks system from Honeywell pre-installed, but we didn't get the printed docs from the previous owner and I have never figured it out. Naively it looks like some kind of star topology that assumes you're putting the control next the main panel (i.e in the laundry room). So we're living with wireless. Besides there are relatively few ports and most of them are in inconvenient places.

2 Just as well for them. I'd have sent them back rather than register. And so should you. Fight this nonsense.

2021-07-10

Well, obviously...

We've had my in-laws here for the last week with our nephew for "Camp Cousins" to ensure that the youg'uns know one another. Lots of activities around the house: arts, crafts, games, and even an intoduction to Roblox development for the eight year old (which is why it had to be here and not in California where the in-laws live); and trips out to the zoo, aquarium, science museum, and even putt-putt.

I had shirts made. But they took longer than expected to come, so we didn't get them until Thursday and couldn't wear the to the zoo for the planned pictures. We rescheduled that for today (the last day). When the time came we headed out to the (new) planned location (where we could include the same mountains in the background as I had put on the shirts), only to find that it was starting rain (out of season) even as the dust storm continued (very much in season).

Rain and dust storm. Of course.