For lists of topics discussed in these weekly posts, see the 2018 index. At the bottom of that page, there is an essay which introduces this writing project, entitled “2018: My Year of Writing Maximally.”

2018 Week 26: The Week Ending Saturday, June 30th

Word Cloud


Divine Invasions: A Life of Philip K. Dick by Lawrence Sutin

I was up early and managed to read more of Divine Invasions. I was hoping that the book would have some specific context and back-story around the writing of Do Androids Dream of Electric Sheep. It’s not Dick’s most respected novel and not the best, in terms of coherent narrative and storytelling and characterization. But to me it is one of his most interesting books, because it reveals and suggests so much: the scattershot, inconsistent world-building is very much in keeping with Dick’s accelerated work schedule and amphetamine use. And the “fake fake Jesus is a real savior” theme is very much in keeping with the mystical and gnostic Christian ideas that Dick made more explicit in the VALIS books. But it looks like Sutin doesn’t pay a lot of attention to Androids in the text, at least not until near the end of Dick’s life when he is offered a chance at a considerable sum of money in exchange for writing a novelization of the movie, Blade Runner.

Dick could have done that and written an indifferent, straightforward re-novelization of the script. But he held on the principle that Androids was the novel that became Blade Runner and should not be supplanted. This is especially significant to me given the ways in which Blade Runner, the movie, dumbed down and simplified and de-spiritualized Androids. I’ve come back to this again and again in my writing about the movie (and now movies, plural) as well as the original novel Androids.

Blade Runner Esper Retirement Edition: 25th Anniversary Culmination (2011 Bootleg Soundtrack Album by Vangelis et al.)

I keep coming back to Androids, and the tragic success and failure of the movie, but there’s another piece of Androids-related art that is also an interesting combination of success and failure, and that’s the soundtrack, and also the sound design of the movie as a whole. Blade Runner’s soundtrack is an amazing and memorable piece of film music. It is among my very favorite soundtracks. But it is a mixed bag for several reasons. While parts of it fit certain scenes of the movie wonderfully, parts don’t. In particular, parts of the soundtrack are very romantic, per the script and presumably per the notes given to Vangelis. And so we have this incongruous saxophone-driven background music in the “love scenes” between Rachael and Deckard, scenes where the chemistry was severely broken and what we see on screen is quite disturbing, more like a slave-catcher violently exercising his power over a slave.

In addition, the history of the Blade Runner soundtrack album releases is a muddy, unsatisfying mess. Fans of the movie and its amazing audio have wanted a full soundtrack album, featuring all the cues from the movie, for years and years. What Vangelis and the labels have offered over the years was everything except this. We have albums of themes from the movie mixed with dialogue. Some fans might like that, but personally if I wanted to hear the dialogue and music together, I’d watch the movie. Fans despaired of ever getting a complete, decent-sounding soundtrack album, and so they have taken the matter into their own hands. For a fuller history of the Blade Runner bootleg soundtrack albums, see Wikipedia.

The Esper Retirement Edition is a six-disc set: five CDs of music and ambient soundscapes, plus a data DVD (playable in a computer, not a DVD player) collecting over _two hundred__ FLAC and MP3 files of dance tracks that are in some way related to Blade Runner. Some sample Vangelis, and some feature themes from the film. I have not listened to all of them (endless dance remixes can get pretty boring, to be honest). But some of the Vangelis-inspired music is very good. There is also a suite of ambient sounds from the film, which is fun, although if I listen closely for a while it becomes apparent that the background sounds are in short loops. I’d love to have longer ambient sound sequences representing the different film locations, although the source material for longer loops may not exist.

My one real gripe is that some of the terrific themes still have some dialogue. I think in this “soundtrack album to end all soundtrack albums” it would have been wonderful to have a complete version of all the music with no dialogue at all, perhaps with a separate disc containing the versions with dialogue included. But I don’t know if the people who put together the Retirement Edition had access to mixes without dialogue to work with. Such a version may be forever out of reach, unless someone gains access to the original unmixed multitrack recordings. Despite these minor issues, the Esper Retirement Edition is clearly the version for the Blade Runner soundtrack album to have if, like me, you want to hear all the music from the movie.

Blade Runner Trilogy 25th Anniversary Edition (2007 Soundtrack Album by Vangelis)

The next-best release to have is probably the 25th anniversary “Blade Runner Trilogy” 3-CD set from Vangelis, which I also own. The name is a bit confusing as there isn’t a trilogy of films; it seems to be named that way because it includes 3 CDs. It has most of the well-known themes, but the third CD contains mediocre newer compositions. They aren’t terrible, but they don’t make much aesthetic sense alongside the original film music.

Blade Runner Audio Fidelity Remastered Edition on Red Vinyl and SACD (2013 Soundtrack Album by Vangelis)

I’ve also heard the 2013 Audio Fidelity Remastered Edition released as a single vinyl record or SACD disc. This single-disc version includes a lot of dialogue, but it sounds very nice, and it is undoubtedly the best version to listen to if you want to hear a shorter album containing just the highlights from the film’s soundtrack. Check out this video in which Kevin Gray describes the remastering process. I don’t own a copy of either the red vinyl record or the SACD. The only reason I’ve heard it is because there used to be playbacks of the red vinyl album on YouTube, but they seem to be gone at the moment. Both formats were released in limited numbered editions, and copies go on eBay for quite a bit of money. I don’t have a SACD player, and they are niche (that is, expensive) devices marketed to audiophiles. Some SACD discs are “hybrid,” with a layer that can be played in a standard CD player, but I don’t think this is one of them, so I wouldn’t be able to play the disc or import it into my iTunes library using the drive in my Mac Pro (and even if I did, the audio quality would be limited to what is possible using the standard CD format).

The SACD format uses an unusual and proprietary high bit rate data stream format. To “rip” the audio into my iTunes library, I would need a way to get the digital stream out of the player or off the disc using a different drive. Getting audio off the disc is possible — for example, people have come up with ways to do it by hacking the firmware on certain versions of Sony PS3 game systems, but this opens the door to all manner of difficulties and incompatibilities, and playback of the “ripped” data brings along a whole set of issues.

Getting audio out of the back of the player is probably easier; some players have TOSLINK and/or coaxial outputs. These links don’t carry the original DSD format, though, but instead carry the audio transcoded into a PCM format, and transcoding inevitably results in some reduction in quality. The resulting files might, if everything goes right, sound marginally better than the standard CD format does. But going down either of these rabbit holes would be costly, and it’s hard to see how it would be worth the time and money, unless the whole point was just to learn more about obscure digital audio formats. And while that does actually appeal to me, at the moment we have other higher-priority things that I should be spending time and money on.

In general, I’m not really interested in acquiring physical discs that I can’t back up into my digital library. CDs undergo “bit rot” over time, and I’ve got young kids who love to damage discs. The idea that digital media, which can be perfectly reproduced, should be “scarce” and “collectible” and come in “limited editions” also offends my sensibilities, but that’s another topic.


I asked people what they wanted for breakfast. Grace said “bulletproof coffee, bacon, and eggs.” We bought more bacon yesterday, but I didn’t want to make bacon again since I kind of overdosed on bacon on Saturday. But then Veronica asked for hash browns too, so I dug in the refrigerator, and found a small bag with perhaps a quarter-pound of bacon in it. I chopped that in pieces and fried that and then added the rehydrated has browns. I made bulletproof coffee. A couple of the kids also ate granola before I got breakfast on the table, which is maddening, because Benjamin’s approach to granola is to fill a bowl to the top, add some milk, eat perhaps a quarter of it, and then abandon the rest on the table because it is way too much. Then we have a full bowl of extremely soggy granola. To her credit, Veronica ate the rest, so it was not wasted.

The cast iron dutch oven I coated and baked looks pretty good. Certainly, a lot better than it did. I rubbed the inside down a bit with an abrasive pad to smooth it down a little more and oiled it. I might bake it again to try to get a more consistent layer on there tonight. We’ll see. The main thing with the pans seems to be that they really need to be used regularly. I should find out if anyone locally will sandblast them. I think there’s another big dutch oven that probably is in desperate need of that treatment. I really tore up my hands and shoulder spending hours working on that pot yesterday. I could try to figure out some power tools to use, but it’s another project I don’t need to take on just now, and the last time I tried to use things like the power sander on cast iron, they just didn’t work very well. Cast iron is hard. So if we’re going to need to refinish them — I want to outsource it. Out, out, damned pot!

The News

So there’s news that I haven’t revealed yet, and that helps to explain Grace’s symptoms of heartburn and stress and sleeplessness over the last few months. On Friday she confirmed that she is peri-menopausal, and 14 weeks pregnant, at the same time. The next Potts baby is due December 24th. So there’s that. She did not know and didn’t really suspect it until I asked her a week ago. I have suspected but was not really sure because of the menopause symptoms. We thought it was quite possible if she did become pregnant again, it would end in miscarriage. And this one is sooner after her last birth than any of them have been. But so far this pregnancy seems to be progressing well.

It’s all very confusing. We are nervous about it for many reasons, but one big one is that her obstetrician, Dr. Fleming, who has gotten her safely through six previous deliveries, is going to be cutting down his schedule. By December, he will not be supervising deliveries any more. I guess we wore out our obstetrician.

I am determined that we have to free up some money. We’ve got to get out from under the old house, whatever it takes. We need some help in the house, even very part-time.

Veronica was very helpful this morning hand-washing some of the unfinished dishes from last night while I worked on breakfast. So with a tag-team effort we are gradually getting the kitchen back into shape.

I was waiting to fry some eggs for Grace but I gave up waiting because she started working on her hair in the tub. That takes a long time.

It’s about half-past noon, and I am not sure what we are going to do tomorrow. Laundry is becoming an urgent problem. I want us to get to Mass. We need to record a podcast.

We’ve had one small piece of good news regarding the house. The guy who is working on the painting and plastering, and who also runs the lawn-care company we use, called us to say that he found out that the stone wall in front of the house was actually damaged by his mowing crew. Apparently one of the mowers backed into it hard enough to do a considerable amount of damage, and didn’t tell him. He will re-mortar the stone wall. So it wasn’t some surprising act of vandalism, and we don’t have to file a police report and another insurance claim. That’s a huge relief.


Grace and I managed to get the kids to the 4:30 Mass at St. John the Baptist in downtown Ypsilanti, only a few minutes late. They didn’t even behave too badly. After that we had dinner Maiz, and it was quite good. They seem to have gotten their kitchen situation improved. We sat outside, and it was nice and cool. A micro-vacation.

When we got home, Grace and I recorded a podcast. Our conversation ran for 3 hours and 40 minutes. So I didn’t get to sleep until after 2:30 a.m.

Laundry in progress, so I have some clean underwear.

A surprise birthday party for our housemate, and cousin, although apparently one of our cousin’s friends called her up and said “hey, I’m coming to your surprise birthday party.” As in… this person didn’t actually know what the word “surprise” meant in this context. Wow.

I was quite tired this morning and have been tired all afternoon at work. And we had no coffee left at home. I need to try to get to bed at a reasonable hour tonight, but I’m sure I will also be needed to help clean up after the birthday party, and I still have to finish encoding and uploading the podcast. I finished part of the production work last night, so it could be worse, but I still probably have an hour of work.


Last night I stayed later at work again to finish up some LabVIEW code, and had some success; the project is just about free of known bugs.

At the house, Grace and Aunt Shelley were hosting a picnic/birthday party for our guest mom and my niece (my sister-in-law’s daughter, niece-in-law? I guess you still just call that person my niece). They have the same birthday. They grilled wings, bratwursts, and burgers, and Aunt Shelley brought a huge amount of picnic food including corn on the cob, and a very fancy birthday cake (we also made a more modest one). So there was a lot to eat, although I was so late to the party that it was already getting on towards twilight. In addition, I had to go down into the basement to finish producing and uploading the podcast files. The lack of sleep from Sunday night was catching up with me, and also with Grace, so I wasn’t very helpful in the cleanup; I had to go to bed. The kids were way too wired up from all the sugar and socializing, so it wasn’t really a good night’s sleep, although much better than Sunday night’s.

I was late and slow again this morning, feeling groggy and disoriented. I had breakfast at Joe and Rosie Creamery, a bagel and egg and bacon sandwich squashed in their sandwich press, a coffee, and a banana. I didn’t even know they made breakfast sandwiches. It’s not up on their menu board. It’s on a small sheet of paper in one of those plexiglass stand-ups. And it was facing the wrong way on the counter–that is, away from customers. I only found out because I noticed some bagels in the sandwich press and asked the woman working behind the counter what she was making for the other customers. Sigh.

LabVIEW 2018

At work, our intern, who is using LabVIEW 2018, is having no end of problems getting his computer configured to run the same code mine is running, using LabVIEW 2017. We had hoped to go forward and not downgrade him, especially since you can’t even download the 2017 installer from the National Instruments site now and I’ll have to see whether he can use an old installer I have. But it’s about time to give up. The Measurement Computing device support just doesn’t seem to be fully there yet; they don’t support 2018 except with a beta, which seems to have problems. So that’s what I’m trying to deal with this morning.

Meanwhile, after two back-to-back hard crashes on my computer, one a freezing video crash (literally frozen in the middle of animating a window), one a blue screen, one of our IT people took some time to go over my computer looking for problems. He adjusted the startup parameters for a whole bunch of LabVIEW-related services. That seems to have improved the crashing situation, although I’ll know more after it has stayed up for a week. Last week I was getting a couple of blue screens a week. Even quitting LabVIEW and just leaving my computer up and running overnight, not running anything but Outlook and one tab of Chrome, I’d come in to find that it had blue screened and rebooted overnight. I’ve been suspecting bad memory or a failing hard drive, but maybe it isn’t that.

The promise of Windows NT in the early days was that it moved drivers into a protected memory scheme where they couldn’t crash the computer. And in fact the original Windows NT, which I used back around 1993 or so, was well-protected against driver crashes. But then, for performance reasons, Microsoft backed away from that model, and ever since, drivers have been able to bring down the computer. And software engineers using multiple IDEs with multiple debuggers and attached programmers and tools and devices wind up installing a lot of drivers, to our everlasting sorrow.


Well. I started out the day pleased that my work computer had completed a backup, and stayed up and running all night. Then it crashed again with a blue screen of death. So I’m thinking my original hypothesis of hardware problems is correct. I’m going to see if I can find a Windows 7 memory stress test application of some kind.

I’m back home, and so let me try to remember more fully what happened last night. I left work fairly early and was hoping to get home, have dinner, and get a video in before we went to bed. I wanted to watch an episode of Babylon 5 with the kids.

When I got home, the tables were still out on the deck. There was only a vague plan for dinner, and Grace wanted to take our housemate and the girls to Kasao African Market at Platt and Ellsworth. They got a big bag of hibiscus tea, onions, and some biscuits to keep the kids quiet on the drive back. I rummaged in the refrigerator and tried to come up with the best way to use our leftovers. So I pulled out all the storage containers. A couple of things in the back had gone bad, but there was still a lot of food. I heated up some of the leftover saffron basmati rice in the oven. I took the eggs out of the leftover Indian eggs with spicy sauce, and had the boys chop them up and mix them with mayonnaise and a little bit of the spicy garlic scape pesto to make garlicky egg salad. There was a half a tube of ground turkey that was getting pretty old, but still smelled fine, so I fried that up with some frozen chopped onions, and mixed in the sauce from the Indian egg dish. We also had a leftover veggie tray from the birthday party the evening before. I had everything on the table and the boys and I were eating by the time Grace, our housemate, and the girls got back home.

After eating I was hoping to get everything cleaned up fast so we could still have a video, but Veronica wanted help with her bike, and the dishwasher was still running because the family started a load late. The front brake cable had stretched, or slipped, but I was able to take out some slack and it is working again. Really the bike needs some more extensive repairs including new pedals and a new chain, but this will keep Veronica going for now, hopefully until we have more money.

Yet Another Flood

The cleanup was not fast. The cat-herding process took forever. While I was getting the dishwasher unloaded and re-loaded I notice that there was water dripping out of the cabinet under the sink. That’s never a good sign. There was a small flood under there. It took a while to even figure out what was leaking. Apparently someone had partly unscrewed the nozzle from the kitchen sink. The whole thing is basically a combination faucet and retractable sprayer. It was leaking right at the end, but when retracted, water would fill up the pipe that acts as a holder for the spray hose, and back up until it was pouring out behind the sink.

So that was quite a mess. I didn’t see any water damage in the basement ceiling. I’m not sure how much water actually went down through the bottom of the cabinet space under the sink. I’m pretty sure some did, because there are holes in there where the pipes come up through the bottom, and they aren’t sealed with anything. There’s no way to get under there without tearing apart the cabinet. I took everything out, dried it all as best as I could, took the panel out from under the base of the dishwasher to I could mop up under there, and ran a high-powered fan to try to dry things out. I’m not sure what else I can do.

Between the toilet flood and the kitchen flood I’m getting increasingly nervous about the state of our ceilings and walls. We don’t need black mold in our new house.

Down and Out in Paris and London by George Orwell, Continued

By the time everyone had brushed their teeth it was about 10:30, so we had a story instead of a video. I read a few more chapters in Down and Out in Paris and London. In these chapters our narrator finally gets a job, as a plongeur in a hotel, with the prospect of another job in a few weeks. It’s interesting to read about how even the employees on the bottom of the totem pole had a “contract,” at least a very basic one; they agreed to work for a one-month period. Although a few paragraphs later we learn that, for these low-status employees, there wasn’t much in the way of consequences for breaking such a contract.

Anyway, back to my work day. It was pretty much a wasted day. Our intern had endless problems trying to get LabVIEW fully reinstalled and working with the 2017 version and all the required drivers and support packages. We kept having to uninstall pieces and reinstall things, watch installers fail, manually clean up files, and try again, continuing to get head-scratching errors.

The I. T. guy in Newton offered to send me a new hard drive overnight, and I said “yes, please.”

Memory Tests

Meanwhile, my computer had very inconsistent results when running memory tests. I tried the Windows memory test, set to “extended,” but it would reproducibly stop at 21% and proceed no further. I waited for an hour, in case it was just failing to update the progress indicator. Nothing. This seemed like a kind of failure, although from Google I learned that apparently on some Core Duo machines, this memory test always does that at the same spot, and if you leave it running for a few more hours, it will continue, or so the forum posts said; I was not patient enough to find out.

I downloaded a Memtest86 .iso file and make a bootable CD, and tried that. I got one error right away, but then no further errors, so I started the test over, and got no errors, even after finishing the full pass, which took over an hour. So that seemed inconclusive.

I then tried the Lenovo memory test, part of their diagnostic application. That failed right away, so I ran the more detailed test. That one ran most of the tests but then the last four or so all failed, and that was repeatable. Meanwhile the hard drive diagnostics reported no problems.

So I finally just packed up the laptop and took it down the street to Computer Alley on Jackson Road, to see if they had any memory modules for that kind of ThinkPad. It turns out they did, and they replaced both memory modules for me while I stood there at the counter. I was so sick of having a barely-functioning computer at work that I just paid for them myself rather than trying to figure out how to put in all the paperwork necessary to get reimbursed.

I tried the Lenovo tests again, and they got further, through two of the tests that repeatedly failed with the old modules. But the tests still didn’t finish. The test process stalled, twice, at 86%, partway through the second-to-last test.

Apparently, looking at more forum posts, this is also a common thing.

Why is it so difficult to write a memory test that doesn’t slow down so much that it appears to stop dead? Does this have something to do with the cache size, on particular processors, so these access patterns suddenly become a thousand times slower, triggering a pathological case of continuous worst-case cache misses? That’s my guess, but I don’t really know.

So now I’m running the Windows memory test overnight, three passes of the “extended” test, and I’ll see what it reports tomorrow, or if it has finished even one pass. I’m hoping for the best. I’m hoping this will finally fix my constant blue screens and lockups. It sounds like I will also have a backup hard drive ready for when this one’s drive starts to fail. With any further luck, we’ll get our intern’s LabVIEW setup working correctly, finally — it’s been days of stupid problems. And then we’ll both be able to get some work done.


Babylon 5 Season 1: “The Parliament of Dreams” and “Mind War”

We managed to have our dinner somewhat earlier,and got cleaned up, and so were able to go down into the basement and watch a couple of Babylon 5 episodes. We started disc 2 of season 1, and watched “The Parliament of Dreams” and “Mind War.”

These are both pretty decent episodes, although Grace was gritting her teeth a bit at the “Sinclair’s old flame” plot line introducing Catherine Sakai. Their lines to each other are at times painfully melodramatic. Sakai is played by Julia Nickson-Soul and her acting, which seems to just substitute intensity for nuance, makes me grit my teeth a bit. But as I watch Nickson-Soul interacting with Michael O’Hare as Sinclair, I remember that his acting in some of these interactions is pretty flat as well, always at this uniform level of intensity, as if he was delivering a commencement address instead of having a date with an on-again, off-again ex-girlfriend. The two of them supposedly have a long history together, but it manifests on-screen mostly as discomfort with each other. The other plot line in this episode, with an assassination attempt on G’Kar, is much more fun. The religious festival scenes are quite nice as well.

In the next one, “Mind War,” both plot lines are pretty good, although we all could have lived without Talia’s description of what it’s like when two telepaths make love. This episode introduces Bester, and I always enjoy the episodes with Bester (played by Walter Koenig). I’m not going to claim that he’s a really skilled actor, but I think he did a great job as Bester, where he plays a physically small man who gets to compensate for his relative physical weakness by inflicting mental cruelty and domination. The story of a person with psychic powers growing in power until he transcends a human body is an old, old science fiction trope, but the plot keeps it reasonably fresh by making it about the horrific human experimentation of the Psi Corps. The other plot line fits neatly alongside the main one, as Sakai also brushes up against something outside of human experience and understanding, alien beings known as the “First Ones,” near planet Sigma 957, which sets up later encounters.

The younger kids get bored with Babylon 5 but I’m unmoved by their complaints; not everything can be Pokémon.

Screaming Baby

Grace and I got to bed at a reasonable hour and were on track for a good night’s sleep, but Elanor had other ideas. She’s been in this pattern which is torturing Grace: she demands to nurse, nurses for less than five seconds, and pops off the breast (painfully), and screams. She does this over and over again. We are trying to figure out why. She did this a few night’s ago, the last time Grace stayed up in Saginaw. She will climb all over us, scream, nap a bit, climb all over us, scream some more, and nap some more. We are not sure what’s up: is she hungry? She ate all day and had several poop diapers. Thirsty? She had several wet diapers. Did she swallow a toy or something? Is she gassy? Her belly is soft and feels normal to me.

Grace is going to take her to the local urgent care and see if they have any ideas. In particular I want them to compare her weight to her last visit so we know if she is on the right track. I don’t think this actually has anything to do with her heart defect and surgery, although it would be a good idea for them to listen to her lungs and rule out any signs of pulmonary hypertension. This seems more like her digestion, or something to do with her nursing.

So, we got a really bad night’s sleep. And in addition to Elanor waking us up again and again, at some point Benjamin got in a fight with his siblings and there was yelling from the boys’ room. (Grace didn’t even notice, as she is harder to wake up than I am.)

So I’m hitting the caffeine fairly hard this morning, with an almond-milk mocha. There was some good news when I got to work, though: the Windows memory test ran overnight. They sure don’t make it easy to find the results, though; it’s buried in the event log. A simple “find” did not do it; I had to set up a filter on event source “MemoryDiagnostics-Results” to find the events that reported the results of the memory test. The computer rebooted after completing the memory test, so I didn’t get to see the results on the screen. This is a case where a notification when I signed in would have been actually welcome, rather than annoying as most of those things usually are. But maybe — just maybe — no more random blue screens of death!

LabVIEW, Again

Now that my work computer seems to be reliable again, I’m back into some LabVIEW code. LabVIEW’s strange idiosyncrasies are in my face again. I may have mentioned one of them already: breakpoints are part of the source code, although they can be cleared or enabled or disabled in a common window in the IDE. In other words, if I add a breakpoint to a source file (a “VI” or virtual instrument), that VI’s source file is marked as dirty (it has unsaved changes). This alone kind of plays hell with version control systems, but there is a special place in hell for LabVIEW’s developers who, in building LabVIEW, allowed the following scenario to exist:

The Bane of Revision Control Systems: Meaningless Illegible Changes

This means that if I’m working with a LabVIEW source file that’s under version control, and I set some breakpoints for debugging purposes, and then remove them, the version control system will think that I’ve changed the source file. To quiet it, I either have to commit the meaningless changes, or tell the version control system to throw out the changes and revert the file. The first approach is wasteful of space and clogs up the file history with meaningless commits. The second approach is dangerous because what if I actually fixed a bug while debugging and wanted to keep that bug fix, but reverted the file because I think the change shown is only because I set and cleared breakpoints? And there’s not easy way to compare files to see if I did in fact make changes that I want to keep, because there is no text-based source representation underlying the visual file, even an awkward and ugly one like XML — just National Instruments’ proprietary binary file format.

Working With an Enumerated Type in LabVIEW

Here’s another example. I’m working with an intern on a non-trivial LabVIEW project that contains, say, fifty source files. We need to implement a new feature. The feature is going to involve changes at the level of the topmost VI, and also at the level of a number of sub-VIs. So I decided a good approach would be to have him start adding support for the new feature to the lowest-level of these sub-VIs.

Visually, and logically, they are self-contained modules, small pieces of the full program logic that are reusable, and sometimes used in a number of places in our VIs. Conceptually, they are something like the “software ICs” that were one of the design objectives of the Objective-C language as originally created by Brad Cox and described in his book Object Oriented Programming: An Evolutionary Approach, from 1986.

So, our intern started modifying one of these VIs. The VI has an interface: that is, a set of things that go in and come out, its inputs and outputs. One of these inputs is of an enumerated type. An enumerated type, informally speaking, just gives you a list of allowed options: it is defined by providing a list of enumeration values that objects of this type are allowed to have, like a list of soft drinks on a restaurant menu. What you see is what you can get, and all that you can get. Oh, there might be some secondary concerns such as the underlying type used for implementation; in C and C++ the abstraction is a bit “leaky.” But typically, we think of enumerated types in an abstract way.

Enumerated Types in C

In C, you typically would define this type in a header file, a separate entity that can be changed independently of the files that refer to it, by name. You don’t have to do it that way, but doing it that way allows the code in other files to include the header and use your type, which is great for defining interfaces.

And here’s an under-rated feature of a language like C: the fact that the enumeration is represented textually, with the options spelled out by name, has some consequences that C programmers usually take for granted:

If you change the text of a header file, the code that uses the altered header will be recompiled. This is usually enforced by whatever build system you are using, such as make, or some descendant of make. But the source code itself doesn’t have to change, except in the cases described above.

Type Definitions in LabVIEW

In LabVIEW you can make a type definition, too. You make an enumeration, and turn it into a type definition. Then, in other files, you can use that type definition. If you need to make changes to the type definition, LabVIEW can, mostly, automatically update the references to those options in the source files that use them; it depends a bit on whether each instance has its “automatically update from the type definition” flag set. Apparently things like constants that partake of the type definition don’t have this set by default. So if you make a change to a type definition, you might have to fix a number of minor things to keep your program working, but in most cases, it will just work.

But because LabVIEW’s “link” from a source file to a type definition is (apparently) not textual in nature, there’s a big version-control mess waiting for people who change type definitions.

Let’s say intern A changes a VI that has an enumeration as an interface, and the change he makes involves adding an enumeration, by changing the type definition.

Every VI in his sandbox which uses that interface will now be automatically changed, and the files defining those VIs will contain changes, so the revision control system will show that they are “dirty.”

And now let’s say we have another type definition, for a data cluster, which is used by most of the VIs that make up a program, and this data cluster definition includes an instance of the enumeration which has just had its type definition changed. Now the data cluster type definition will also change, and be marked “dirty,” and will need to be saved, and every VI that uses this data cluster type definition will also change, and be marked “dirty,” and also need to be saved.

In our case, our intern’s change to a single VI and a single type definition will result in the “transitive closure” of all files that use this definition, directly or indirectly, being changed, marked “dirty,” and needing to be saved. In our case, this is 25 files, and it doesn’t matter if any of the enumerations that they use have actually changed or not; and the changes are “illegible” (I can’t do a simple “diff” to compare the files in order to see what has changed).

Meanwhile, on another computer, I was making changes to the program from the “top down,” to support the necessary new feature, and I made a change to a different type definition, which is also referenced by the common data cluster type definition. And so I inadvertently triggered the same “transitive closure” of changes, propagating more changes, and now I’ve got something like twenty-five files marked as dirty, and needing to be saved. And most of these are the same files that intern just changed.

In C, most of these files likely wouldn’t have needed to be changed at all, unless specific enumerations changed as I described above. These two sets of changes wouldn’t produce any “ripple effects” that weren’t absolutely necessary. The source code of most clients of these type definitions wouldn’t have to change, or if they did, they would only have to change in predictable ways.

But using LabVIEW, we’ve got a version control mess to sort out, as a result of trying to work together on the same code base.

Textual representation allows you to abstract away issues of visual representation.

Representation Matters (But it Shouldn’t)

This issue, by the way, was a burgeoning one in the early days of the World Wide Web; HTML intermixes tags specifying visual layout and representation with tags that have semantic meaning. It is very hard to isolate semantics from visual representation. This decision has tainted and muddled and confused and generally made-into-a-pain-in-the-butt not only web page design, but the design of many things that derive from, or incorporate, or are “upstream from,” HTML in some way, such as Markdown and .epub.

It’s why I don’t have a simple, standard way to indicate “this is a book title” in Markdown, and then a simple, standard way to indicate that the things I marked up as book titles should be represented in italics.

It also means that I don’t have a simple way to say that at a given point in the document, I’d like an alphabetized list of the aforementioned book titles, numbered or Roman-numeraled or following some other specific format, and also appearing in the index.

It didn’t have to be this way, and it hasn’t always been this way. TeX, SGML, and other tools solved these problems decades ago. But there’s a big “semantic gap” between the text-based technologies which won the day — HTML, Markdown, and related file formats — compared to the more sophisticated technologies that didn’t.

In general I really like writing in Markdown, and I like what I can do with it using tools like pandoc. SGML is ugly and complicated and hard to read. I simply wouldn’t have had the patience to write this blog if I had to format everything by hand using HTML tags all over the place. Markdown and pandoc allows me to be fairly picky about web and print typography without having to litter ever sentence with tags and character entities. But this toolchain also has its limitations, and I find myself scratching my head wondering where I’m going to go from here — in a way that will preserve the work I’ve already put into all this writing, while also allowing me to add features like indexes, tables of contents, and footnotes, and specify visual representations from semantic elements more precisely.

But anyway. You can read all about the “semantic web” on someone else’s blog. That was all a digression from what I was saying about LabVIEW, but I think some of LabVIEW’s fundamental weaknesses, as a programming tool, stem from the same problem that HTML has: an inability to separate the representation from the semantics.

LabVIEW is fun and interesting in many ways, and good for many things, but it remains painful for programmers who are already expert in one or more text-based languages.

I know there is a way to do a three-way merge between VIs. I may have need of it. I think there is probably also more tooling available, at higher price points, for managing projects with multiple contributing developers. But I’m just not interested in throwing yet more of my employer’s money at ever-more-complex proprietary solutions.

Our intern and I will work out a code merge. And I think we can still work on different VIs, but we’ll have to make very sure that if we need to change a type definition, we do it by sitting together at one machine, and saving and committing everything, so that we don’t wind up with a time-wasting revision control mess again.

I’m still waiting for someone, somewhere to implement an open-source LabVIEW-like language. I really don’t think it would be that hard. But my first requirement, in specifying it, would be to use a textual representation that was amenable to revision control.

I was very happy today, because my laptop seemed to be happy; it didn’t crash all day. But then I had a “snow crash” — some kind of catastrophic video hardware or driver failure where the screen showed a crazy blur of moving noise. Fortunately while the image behind the noise seemed frozen, it appears that windows was not actually frozen, so pressing control-S did actually save my changes. But what a way to harsh my mellow. I thought this thing was fixed. Now I wonder how much I can trust it.


Cutting Teeth

Grace took Elanor to the urgent care clinic late yesterday afternoon, to try to figure out what the night-time bouts of screaming are all about. We had been concerned that maybe she swallowed a toy, or had some kind of pain in her gut. I also wanted them to weigh her, so we could compare her weight to her weight measured a few weeks ago and confirm that she was still gaining. And finally, I wanted some verification that she wasn’t starting to have pulmonary hypertension, or any other symptom that might be related to a problem with her repaired congenital heart defects.

They gave her the once-over and found nothing worrying, but also nothing that really explained her discomfort, until they got to her mouth, and the doctor noticed that she’s cutting several new molars, all at once. Apparently she has the mild fever that can go along with cutting teeth, as well. This was an “oh, of course!” moment for us, and I’m satisfied that this is probably what is bothering her, or at least 90% of what is bothering her. It was confusing for us because Grace has raised six other children through babyhood, and of course they all have cut their teeth as well. But none of them had quite this reaction. I remember that Veronica just wanted to chew on things. She had a stuffed toy with big rubber feet covered with bumps, which apparently felt soothing to her gums. I used to let her gum my fingers. You can’t really do that with Elanor, because she has several sharp front teeth that came in first, and she will bite the hell out of your fingers.

We gave her a full dose of children’s Tylenol last night at bedtime, but it didn’t really seem to help much. Or maybe it did and it would have an even worse night without it. About 2:30 a.m. I went downstairs to the basement to sleep. I managed to sleep until about 7:15. There are no curtains down there, and at that point it was getting too bright to sleep, since there are no curtains down there yet. Elanor was awake, too, and howling. I managed to get another quick nap in, and went upstairs about 8:15. I was tired this morning but not as tired as Grace is. I stopped at Joe and Rosie Creamery on Jackson Road to pick up a take-out almond-milk mocha and a couple of wrapped pieces of biscotti, and clocked in at work about 9:30. My boss is back after almost two weeks in Latvia.

Spending iTunes Gift Cards

In last night’s mail I had five iTunes gift cards, each worth $25.00 of credit in the iTunes store. I got these because I charged some of the expensive house repairs to my black credit card. I’ve had this card for years and I usually get one or two $25.00 gift cards a year, not five at once. I have stopped buying music in lossy or digitally-watermarked formats. I don’t really like buying TV shows or movies in proprietary formats. I could have bought some apps, but the only thing I have to run them on is an elderly iPad (very slow by current standards, with very little memory by current standards, so I can only install two or three recent apps at a time). I looked through the available documentaries on the iTunes store but didn’t find much that appealed to me, so I asked the kids to help me decide what to buy. After listening to everyone argue for a while, and looking at a few shows I was curious about, I had Joshua help me enter in the codes from the gift cards (they are hard on my eyes), and set the computer aside until after dinner without buying anything.

Dinner was one of our summer make-it-yourself sandwich bar meals, supplemented with a tray of roasted broccoli. I was sick of doing dishes, so we used the promise of TV shows after dinner to motivate the kids to clean up. We told them if they did a good job within an hour, we would go down into the basement and watch some shows. They actually did!

While they cleaned up, I purchased season 1 of the Lego Ninjago TV show, and also season 1 of Star Wars: The Clone Wars. I also purchased a few TV shows I was curious about: the first episode of The Magicians season 2, and the first episode of The Leftovers, which I’ve heard good things about. I considered the first episode of The Expanse, but it looks too much like straight-up space horror. I’m also curious about the show 100, which I had never heard of at all.

Five Hundred TV Shows

I heard a factoid the other day that might help explain why I tend not to know much about current TV shows. Apparently, what with all the different cable channels and online streaming services producing content, there are five hundred teevee shows now in progress. (I heard a man on the radio say it, so it must be true.)

I was mentally estimating how many original shows were typically available on the four channels I used to be able to tune in, back in my childhood (if my misfiring brain cells don’t fail me, they were NBC, on WICU channel 12, ABC, on WJET channel 24, CBS, on WSEE channel 35, and PBS, on WQLN channel 54). I think back then there might have been a maximum of a dozen new shows airing on each of these at any given time, so under fifty new shows in progress. Someone probably has better, more detailed numbers on this change, but my point is that we have much, much less shared “reality” if we’re all in our streaming-service silos.

And don’t get me started on the phenomenon of binge-watching whole seasons. That has no doubt changed the way shows are written and produced, and changed it a lot. If you are watching shows back-to-back, the similarities between individual show stories, and their redundant material, re-introducing plot lines and characters, will feel much more redundant and painful. Also, you’ll be able to remember the intricacies of complex plots and details about characters much better from show to show if you watch them all in a week. And so showrunners are writing shows for binge-watching, putting out much more complex, interlocking shows. I think that’s good, in a way, because I’m always in favor of movies and TV shows that don’t dumb down things for their audience. But I think that’s bad in some ways, too, because it gives people more justification to waste time watching TV. “What? No, this isn’t a dumb TV show I’m wasting my time with — this is serious entertainment!”

There’s a new American Time Use Survey out. The survey says that in 2017, “Watching TV was the leisure activity that occupied the most time (2.8 hours per day), accounting for just over half of all leisure time, on average. The amount of time people spent watching TV varied by age. Those ages 15 to 44 spent the least amount of time watching TV, averaging around 2.0 hours per day, and those ages 65 and over spent the most time watching TV, averaging over 4.0 hours per day.”

That’s a lot of hours. I think I typically watch more like 2 hours a week, although it varies a lot; we watched about two hours last night. When I am watching a show with the family, I’m often doing something else at the same time, like skimming a book and making notes for the podcast, or writing up something on the computer. And I almost never get to watch a show on my own, which helps explain why I haven’t seen any of Season 2 of The Magicians or any other more adult-oriented recent shows.


Lego Ninjago: Masters of Spinjitzu Season 1, Episode 1: “Way of the Ninja”

The Lego Ninjago offerings on the iTunes store are a bit confusing. Apparently there is a short “pilot” season, which originally was made up of four short episodes (“Way of the Ninja,” “The Golden Weapon,” “King of Shadows,” and “Weapons of Destiny”). These were combined into two 22-minute episodes, called “Way of the Ninja” and “King of Shadows.” If you buy season 1 on the iTunes store ($14.99 for standard definition), it starts with the two combined 22-minute pilot episodes, “Way of the Ninja” and “King of Shadows”, followed by 13 regular 22-minute season 1 episodes (“Rise of the Snakes,” “Home,” “Snakebit”, and ten more).

But there’s also another series available on the iTunes store, with no season number, which costs $4.99 for standard definition, consisting the first five episodes of season 1. If you have bought season 1, you already have these episodes. In other words, I’m not sure why this season exists as a separate thing on the iTunes store. If you just want to watch an episode or two to see if you like it, it probably makes more sense to buy a couple of $1.99 episodes from the full season 1, because then if you do like it, you can use the “complete the season” option to buy the rest, and so will be able to get the first 15 episodes at about $1.00 each. If you buy this short season, you can’t get the rest of season 1 without paying $5.00 more in total and getting five redundant episodes. That smells to me like a way for Apple to take advantage of parents who have very little money to spend in the short term, by giving them a low-cost option now which will cost them more in the long term, when their kids are screaming for more episodes, and I don’t like it one bit.

Anyway, we watched the first full-length pilot episode, “Way of the Ninja.” The animation and plotting in this show was just a bit weak, looking a bit ridiculous and cheap in places and rushing through and discarding some plot elements, but it had its funny moments, and we all enjoyed it well enough.

Star Wars: The Clone Wars Season 1, Episode 1: “Ambush”

Benjamin was demanding more Lego Ninjago, but I had planned to mix it up for different ages, so we next watched the first episode of Star Wars: The Clone Wars Season 1, called “Ambush.” Clone Wars was not something the kids were asking for, but I’ve been curious about it for some time, having read positive reviews of the show, and I’ve thought about buying the whole set on DVD. I probably will, eventually. The first episode, “Ambush,” was better than I expected. The character animation is a little flat and cheesy, but I really liked the backdrops. This one features Yoda. It has quite a good script. Tom Kane voices Yoda. He almost convinced me that Yoda was voiced by Frank Oz, but as the show went on I realized it wasn’t him. Yoda’s odd subject/predicate reversals are used inconsistently, here, which has the strange effect of making it seem like some of his sentences — the ones structured in something more like standard English—are not constructed correctly! Like the Lego Ninjago episode, there were some weak and wasted and thrown-away elements in the script, but mostly it worked quite well.

Babylon 5 Season 1: “The War Prayer”

After that, I put on another episode of Babylon 5, “The War Prayer.” This is a pretty strong episode, although once again the writers used the “old flame returns” trope as a quick way to flesh out a main character’s back-story. The main plot in this episode is about the “Home Guard,” a human-supremacist group that might be, as they say, “ripped from today’s headlines.” The only real weak scenes in this main plot are some slightly-laughable fight scenes. There’s one, shot in dim light to try to avoid looking too bad, where the edges of the alien’s rubber face masks are still clearly visible in a couple of shots. And in the climactic fight scene in the cargo bay, Sinclair has some ridiculous-looking punches that are laughably effective, some of the worst fight choreography I’ve ever seen. But the overall plot line is still pretty good, if you don’t look too closely.

The secondary plot involves Londo, Vir, and a young Centauri couple and it’s just lovely, containing the memorable line “My shoes are too tight. But it does not matter, because I have forgotten how to dance.” This plot line works out nicely, while also interlocking nicely with the main plot: we’re watching an arranged marriage trope. We think it is going to turn into a star-crossed lovers trope. But instead, it ends with the prospect that the couple might, eventually, and realistically, get to marry for love. And it quite elegantly reveals a lot about Londo. So this is definitely one of my favorite episodes.


“The Electric Ant” by Philip K. Dick

Last night everyone was way behind on chores. I brought home salmon, so we baked salmon and had salad with it. Cleanup took a long time because of the pile-up of dishes. So we didn’t get to go downstairs and watch videos. Instead I read the kids a story. The story I picked by rummaging through The Eye of the Sibyl and Other Classic Stories by Philip K. Dick. To clarify, this is the title of the current paperback edition of the 5th volume of Dick’s collected stories. Different editions of these volumes have had different titles over the years as different publishers released them. For example, volume 5 has had the following titles:

It gets especially confusing because We Can Remember It for You Wholesale is also the title of the second volume as it was published by Citadel Twilight. So really, I think it’s just best to refer to these collections by the volume number. Some stories have been rearranged, but the changes are not large. “Second Variety” and “We Can Remember It for You Wholesale” were swapped between volumes in the Citadel Twilight editions, and the Subterranean Press editions added two stories, “Menace React” (a very early, incomplete story fragment, of interest only to collectors), and “Goodbye Vincent” (a minor story, which is also available in The Dark Haired Girl, a collection that I used to own but which is also only of interest to collectors).

Anyway, I chose “The Electric Ant.” It’s a weird story. Unfortunately Elanor screamed through much of the story, and so we didn’t get to discuss it last night, but we did enjoy talking about it today. In the story, a man discovers that he is actually an organic robot. Inside his chest cavity is a tiny punch tape that is slowly feeding into a reader. If he adds holes to the tape, new things pop into his subjective reality. The people around him experience these changes as well, which raises questions about whether they are real people as well, or also generated by the data on the punch tape. There’s a short computer-animated student film adapted from the story, as well as a song, and a comic.

Breakfast Sandwiches

Grace and I had another miserable night’s sleep, although it does seem like the children’s ibuprofen is helping her, to some extent. So I didn’t manage to get up early. When I finally got up, I didn’t shower. I made some fake Egg McMuffins, using English muffins, a little bacon, and some vegetarian sausage patties cooked in bacon fat. (Grace had asked me to get sausage patties at Costco, but they didn’t have anything that looked good, so I got MorningStar Farms sausage patties. The texture isn’t quite like meat, but they are really pretty tasty, especially if you give them extra flavor by cooking them in a pan with a little bacon fat.) We’re avoiding dairy, other than butter, so the muffins got butter but no cheese.

We considered going out for a movie today, but it was in the nineties outside, with high humidity, and all kinds of excessive heat and air quality warnings. We also didn’t want to drag the miserable baby to the movie. So we stayed home. For lunch we had some instant Udon noodles. I got a bath, and finished reading Divine Invasions: A Life of Philip K. Dick by Lawrence Sutin.

Divine Invasions: A Life of Philip K. Dick by Lawrence Sutin, Concluded

It’s frustrating to read a biography of a man like Philip K. Dick. He was a brilliant man, but the overwhelming sense of the man that I get from his biography is that he was deeply unhappy.

We also learn just what a selfish ass he was to his four wives and the other women who were entangled with him. He seemed like a profoundly needy man, and Sutin does a good job of connecting the dots to illustrate how his neediness went back to his difficult relationship with his mother, who very clearly did not meet his emotional needs. But there’s something profoundly sad about reading of a fifty-something-year-old man who still hated his mother, even after she died.

It really does seem like Dick was emotionally stunted. Despite his powerful mind, and years spent seeing therapists, in middle age he still seemed quite broken, intellectually advanced but retarded in his social relationships. He was wracked with psychosomatic illnesses, and suffered deeply from terrible bouts of depression and anxiety. I read about a later relationship that seemed mutual and fulfilling, for a while. I read about the women who gave up on him because of his neediness and need to control and limit them, and cheered for them as they left him. I read that he beat up at least one of his wives, and was angry. But I also found myself pitying him in his brokenness. His drug use was horrifying. He died at 53, and I find myself wondering often whether, if he had gotten his life shifted onto a better timeline, could he have had a third act?

Some might think that Sutin’s portrayal is unfair, but it seems to be meticulously sourced, and he appears to let Dick’s friends and wives and lovers speak about him in their own words. It’s also clear that Dick constantly altered and changed his story, as he told and re-told the events of his life to different people, and even to his own journals, changing them as his own interpretation of his spiritual insights and visions changed.

The argument that Dick suffered from temporal-lobe epilepsy is one I find fairly convincing. But an unusual condition like this isn’t really necessary, honestly, to explain Dick’s visions. He was doing a fine job damaging his vascular system and brain with drugs, poverty diet, lack of medical care, and his physically hazardous “binge-writing” technique, where he drafted most of his novels in near-sleepless sprints.

If ever an artist needed to change his work habits into something more sustainable, it was Dick. He seemed to be very attached to the “heroic effort” school of writing, where only an extremely debilitating working style can produce the breakthrough work he was famed for. But the same extremely debilitating working style also produced a lot of low-grade writing, best forgotten. And as I read about the way he did minimal “pre-writing, mostly just staring into space for days on end creating plots and characters in his head, I can’t help but think that a more workmanlike and steady approach to his craft, making paper notes or outlining his plots, might have produced better work while allowing him to preserve his health and relationships. And I say this as someone who has often taken pride in the school and work tasks I’ve completed myself in frantic sleep-deprived sprints rather than carefully paced laps.

This biography moves me because, in many ways, I identify with Philip K. Dick. I was a big fan of his writing, early on, and still am, and am still coming to grips with the complexity of what Dick was doing in Do Androids Dream of Electric Sheep?, and of course in his Exegesis. I expect that I will continue to re-read his better stories and novels and speeches and other writings on and off for the rest of my life. There’s no doubt that he will be remembered for a long time, even if most know him only as the author whose work was adapted into movies like Blade Runner and Total Recall.

Do Androids Dream of Electric Sheep? was all about empathy. It’s unfortunate that he couldn’t extend more of that empathy to himself and the people he rubbed against in his years on this earth.

There’s also a nice appendix in which Sutin rates all of Dick’s novels, and many of his story collections. This is a helpful resource for fans; Sutin read Vulcan’s Hammer so you don’t have to!

Back in the day (in my teenage years and early to mid-twenties) I read almost all of Dick’s novels, including many of his little-known mainstream novels such as Mary and the Giant and The Man Whose Teeth Were All Exactly Alike, which had only recently made it into print. I also had tracked down a number of rarities and obscurities like The Dark Haired Girl. In one of my rounds of unemployment, I wound up selling most of these books. I don’t miss, or even remember much about, most of them. I now own the three Library of America volumes collecting thirteen of his novels, and believe these volumes contain most of the essential ones. I also own recent paperback editions of his collected stories, and these are uneven but contain a lot of jems. I have only replaced a few of his other works. For example, I never replaced Eye in the Sky. Sutin rates that one quite highly, though, and based on his recommendation, I might track down a copy, not a collectible copy but one of the inexpensive reprint editions that didn’t exist back when I was in my twenties, and see if it is worth re-reading.

Grace and I tried to take a brief nap, but the kids didn’t really cooperate, and wouldn’t keep the noise level down.

This evening we’re down in the basement watching some more episodes of Lego Ninjago: Masters of Spinjitzu. (The kids live for this show; I’m listening to the episodes, but I’m in my office in the basement writing while they watch.) I think we’ll probably re-heat some hamburgers for dinner after it has cooled down outside a little bit, and have some salad, and call that dinner. On these miserably hot days I really don’t feel like eating all that much; a little protein and some salad is fine.

Media Discussed This Week

This list does not include books, chapters of books, or other works that I only mentioned briefly in the text above.

Pittsfield Township, Michigan
The Week Ending Saturday, June 30th, 2018

Creative Commons Licence
This work by Paul R. Potts is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. The CSS framework is stylize.css, Copyright © 2014 by Jack Crawford.

Year IndexAll Years IndexWriting Archive