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 charaacterization. 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 themes that he 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 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) and the original novel Androids.
Blade Runner, the Soundtrack
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. So ultimately the fans despaired of ever getting a complete, decent-sounding soundtrack album, and so they have taken the matter into their own hands. For a history of the bootleg soundtrack albums, see Wikipedia.
The Esper Retirement Edition is a six-disc set: five CDs of music, plus a data DVD (playable in a computer, not a DVD player) collecting over 200 FLAC and MP3 files of dance tracks that are in some way related to Blade Runner. Some sample Vangelis, 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 when you listen closely it becomes apparent that a lot of the background sounds the producers mixed are in short loops, which tends to ruin my enjoyment a bit.
My one real gripe is that some of the terrific themes still have some dialogue. I think in a “soundtrack album to end all soundtrack albums” format, it would have been wonderful to have a complete version of all the music with no dialogue at all. On one of the supplemental discs the producers could have put in the versions with dialogue—available for people who want to listen that way, skippable for those who don’t. The producers probably felt they had good reason not to remove all the dialogue bits. First, some of the themes do run a bit long and become a bit repetitive and tedious. The dialogue helps hide this. And second, since this collection is built from other sources, including the authorized Vangelis albums that were mixed with dialogue, the producers may simply not have had access to a clean version of the theme. Such a version may be forever out of reach, unless Vangelis or his heirs dig out an original tape. And it’s not entirely clear to me whether clean, complete mixes of the original themes survive.
Despite these minor issues, the Esper Retirement Edition is clearly the Blade Runner soundtrack album to end all Blade Runner soundtrack albums, if, like me, you want to hear all the music from the movie. At least, that is, until someone makes another one; you never know when a fan might gain access to a master tape in an archive somewhere. The next-best release is probably the 25th anniversary “Blade Runner Trilogy” 3-CD set from Vangelis, which has most of the well-known themes. But it also includes a CD of mediocre new compositions “inspired by” the original; this is very opportunistic, and cheap, of Vangelis.
I’ve also heard the 2013 red vinyl edition, which is of course much shorter. That version includes a lot of dialogue, but it sounds very nice and it’s quick and easy to listen to; it’s probably the best version to listen to as a single LP-length stand-alone album, rather than an encyclopedic collection. It’s been remastered from the original CD version. Check out this video in which Kevin Gray describes the mastering. There used to be playbacks of the red vinyl album on YouTube, but they seem to be gone at the moment. There also seems to be a SACD version of this album available; both are from Audio Fidelity. These were limited editions, so you can’t get them from Audio Fidelity any more. Copies go on eBay for quite a bit of money, so unfortunately I don’t have one. Some SACD discs are “hybrid,” with a layer that can be played at standard CD resolution in a standard CD player, but I don’t think this SACD disc is one of them.
The idea that digital media, which can be perfectly reproduced cheaply, should be “scarce,” and come in “limited editions,” doesn’t make any goddamn sense, but here we are. And SACD itself is a failed format that almost no one can actually play at full resolution. It might sound marginally better than a CD, given the right equipment. But I’d rather just have a 24-bit WAVE file at 48kHz, or 96kHz. There’s nothing magical in the master tapes that this PCM format would “lose,” if it was digitized using good equipment and current best practices, unless the problem stems from the aging of the master tapes themselves; in that case, an earlier digitization and mastering job might actually sound better.
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, they just didn’t work very well. They just didn’t seem very effective—cast iron is hard. So if we’re going to need to refinish them—I want to outsource it. Out, out, damned pot!
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 it 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. But he is re-mortaring the wall. So it wasn’t some surprising act of vandalism, and we don’t ahve 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’s, 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.
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 had just written something about how I was pleased that my computer had completed a backup, and stayed up and running all night. Then I wrote a description of last night’s events: dinner of leftovers, cleanup, fixing Veronica’s bike brakes, and had started describing the flood under the sink when my computer crashed again with a blue screen of death. So that text is lost, and 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.
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.
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.”
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 it myself.
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.
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 small man who gets to compensating 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, where Sakia meets incomprehensible alien around the planet Sigma 957, fits neatly alongside the main one, as Sakai also brushes up against something outside of human experience and understanding, the “First Ones,” 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.
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!
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 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 enabled the following scenario to exist:
- Save a VI, with no breakpoints enabled.
- Make a copy of that VI file, giving the copy a name like “Thing_without_breakpoints.vi”
- Set a breakpoint in the original VI and save the file.
- Make a copy of the updated file, something like “Thing_with_breakpoint.vi”
- Remove the breakpoint in the original VI and save the file.
- Make a third copy of the updated file, something like “Thing_once_again_without_breakpoints.vi”
- Using your favorite tool that can compare binary files (such as Beyond Compare), note that all three files are different.
This means that if I’m working with a LabVIEW source file that’s under version control, and I’m doing some debugging, and I set a breakpoint, and then remove that breakpoint, the version control system will still show that I’ve changed the source file. To clean it up I either have to commit the meaningless change, or tell the version control system to throw out the changes and revert the file. The first approach is wasteful and clogs up the file history with meaningless commits. The second approach is dangerous; what if I really did make a significant change in the source file, and want to keep it, but I am reverting it because I think I only set and cleared breakpoints? And there’s not easy way to compare files, 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.
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.
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, like a list of soft drinks on a restaurant menu. What you see is what you can get, and all that you can get.
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:
- If you add a new option, but leave all the existing options alone, code that uses the existing options doesn’t have to change.
- If you remove an option, but leave all the other options alone, only code that uses the removed option has to change.
- If you change an existing option, only code that uses that changed option has to change.
The code that uses the changed interface will be recompiled, but the source code itself doesn’t have to change, except as described above.
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, and 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.
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 is changing a VI that has an enumeration as an interface, and the change he’s making involves adding an option to that enumeration, by changing the type definition.
Every VI in his sandbox which uses that interface now has to change, and will be marked as dirty, and saved.
And let’s say we have another type definition, for a data cluster, which is used by most of the VIs we use in a system, and this data cluster definition includes an instance of the enumeration which has just had its type definition change. Now the data cluster type definition is “dirty,” and will need to be saved. And every VI that uses this data cluster type definition is also dirty, and needs to be saved.
In other words, intern’s change to a single VI and a single type definition has resulted in something like twenty-five files marked as dirty, and needing to be saved.
Meanwhile, on another computer, I was making changes from the “top” down, to support the necessary new feature, and 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.
And so, now we’ve got a version control mess between us, to sort out, as a result of trying to both work on the same code base, both making changes that, in a text-based language like C, would remain confined to only two source files and two interface (header) files.
In a language like C, these two changes to type definitions would have had no “ripple” effect that required all of the other clients of these type definitions to change, as described above; source files that relied on the enumeration type definition in a header file would only need to change if one or more of the options they were using actually changed or went away. Textual representation allows you to abstract away issues of visual representation.
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, and 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 things that were derived 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. And so, also, I don’t have a simple way to say that at a given point in the document, I’d also like an alphabetized list of these “book title” entities, numbered, and following a specified format, and I’d also like them to appear in the index, etc.
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 technologies which won the day—HTML, and Markdown—versus 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. I wouldn’t have had the patience to write this blog if I had to format everything by hand in HTML, because I’m picky about my typography. But this toolchain 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, and allow me to add features and specify visual representations more exactly.
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.
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. We’ll 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 on one machine, with everything committed and checked in, so that we don’t wind up with a version 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.
(Update: well, that was exciting. I was very happy today, because my laptop seemed to be happy; it didn’t crash, all day. But as I was typing the last paragraph, 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 the control key and S did actually save my changes. But what a way to harsh my mellow. I thought this thing was fixed. Now I wonder how far I can trust it.
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 am tired this morning but not as tired as Grace is. I stopped at the Coffee House 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. So I’ll check in with him at some point this morning.
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, and very little memory by current standards, so I can only install two or three big 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.
I heard a factoid on the radio 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.
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.
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.
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.
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:
- The Collected Stories of Philip K. Dick Volume 5 (Underwood-Miller, 1987)
- The Little Black Box (Gollancz, 1990)
- The Eye of the Sybil (Citadel Twilight, 1992)
- We Can Remember It for You Wholesale (Subterranean Press, 2014)
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 fragment, not worth reading in my opinion), and “Goodbye Vincent” (a minor story, which is also available in The Dark Haired Girl, a collection that I used to own but which in my opinion also is only worth reading for obsessive fans).
Anyway, I chose “The Electric Ant.” It’s a weird story, and we enjoyed talking about it today. Elanor was scream-y again last night, and screamed through much of the story, so we didn’t get to discuss it last night.
Grace and I also had a pretty 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 a little bacon 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.
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 constantly if he could have gotten his live shifted onto a better timeline, what might have been.
Some might thing 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 it isn’t really necessary, honestly, to explain Dick’s visions with an exotic illness. He was doing a fine job damaging his vascular system and brain with drugs and his physically hazardous “binge-writing” technique, where he drafted most of his novels in near-sleepless sprints.
If ever I’ve seen an example of an artist who needed to change his work habits into something more sustainable, it was Dick. He seemed 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 designed his books before writing, by staring into space for days on end creating plots and characters in thin air, I can’t help but think that a more workmanlike and steady approach to his craft might have actually produced better work while preserving his health and relationships. And I say this as someone who has frequently loved doing that “heroic” writing binge myself.
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 a book like Do Androids Dream of Electric Sheep, and of course in his Exegesis. I expect that I will continue to re-read his 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.
He 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.
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.
Books, Music, Movies, and TV Mentioned This Week
- Down and Out in Paris and London by George Orwell
- Divine Invasions: A Life of Philip K. Dick by Lawrence Sutin (finished)
- Blade Runner ‘25th Anniversary Culmination’ version of the Esper ‘Retirement’ Edition (2011)
- Blade Runner Trilogy: 25th Anniversary soundtrack (2007 3-CD edition)
- Blade Runner Red Vinyl Album and SACD version (Audio Fidelity, 2013)
- Babylon 5 Season 1, Episode 5, “The Parliament of Dreams”
- Babylon 5 Season 1, Episode 6, “Mind War”
- Babylon 5 Season 1, Episode 7, “The War Prayer”
- Lego Ninjago: Masters of Spinjitzu Pilot Episode 1, “Way of the Ninja” (and a few more episodes)
- Star Wars: The Clone Wars Season 1, Episode 1, “Ambush”
- “The Electric Ant” (Philip K. Dick short story)
The Week Ending Saturday, June 30th, 2018