Dear Oracle

Dear Oracle: If you ever install a directory whose name contains an ‘&’ in my system’s PATH environment variable again, I will travel directly to the Bay Area and it won’t be for fun. What were you thinking, that people wouldn’t notice? That it looked pretty? That writing out A-N-D was too hard? Are your directory names chosen by Marketing? (“Can you make that directory a little more puce? No, way too puce now. More, you know, edgy and confident puce, not blatant developer puce.”)

Of course, it would be nice if the Windows command interpreter wasn’t such an awful embarrassment and could do things like string quote escaping without losing its mind. I heard some of the political backstory to why cmd has been left to languish for the past two decades and was not surprised (summary: old and crusty NT dev, with matching territorialism and ego). Oh, and the answer to “cmd is crappy” is not PowerShell, thanks. Who said that? We can go outside and settle it, if you want.

Not really sure what the answer is. For instance, every time I write a bit of bash I want to throw up a little. The only shell programming language I didn’t actively hate was the MPW Shell, and that is decades dead now; MPW sure had some flaws, but parts of it were really nice.

But those ‘&’s don’t work anywhere, not matter how fucking puce they are.

Posted in Uncategorized | 13 Comments

m-x start-them-early

Since it was a national holiday, I took The Gibber into work for the day. I sat him down at a desk near me with a laptop and got him on the guest network. He played some MineCraft, and after a while I suggested he work on his book report a little.

“Here, use this,” I said, launching a program. “First, you can just type stuff and it appears. Then, control F goes Forward, control B goes Back, and control N and control P go the next and the previous lines. You can use the arrow keys, if you want.”

He typed some stuff and tried it out.

“Okay, now Control U and a number does the next thing you type that many times. Type Control U and thirty and the letter A.”


“Okay, Control U by itself just does four. Another control U multiplies that by four. And another.”


“Works for the commands that move around, too. Try it out.”


“And the Meta key (and now you know what that ESC key is for) makes things go _bigger_, so you can jump around by words and paragraphs…”


I show him C-X C-S and C-X C-C, and a little more, and five minutes later he’s happily typing away.

A cow-orker comes by and asks what I’m doing.

“Teaching him Emacs.”


“No son of mine will use vi.”


Posted in Uncategorized | 5 Comments

Comcastic (The Tale of the Good Tech)

[follow-up] So in the end, resolving the issue we had with Comcast took someone who knew what they were doing, with good debugging skills and a good attitude, and about 15 minutes. It helps to be methodical. It’s fine to twist knobs and keep trying stuff, but you need to be scientific about things. Write stuff down if you need to. Be organized. Change one variable at a time.

1. Examine the data carefully

Clueless tech: “I don’t even know where to start.”

Good tech: “Hmmm, only some channels work when they ALL should. Let’s look up some of these channel frequencies on the channel map reference and see if they’re correct.”

2. See if you can state the problem simply (possibly by recognizing that there is a problem)

Clueless tech: “Lots of channels aren’t working. Huh. Did you give us money for them?”

Good tech: “Channel 647 isn’t working, and it should.”

3. Ask yourself if there’s any more data you can gather

Clueless tech: [Argues about subscription packages with the customer]

Good tech: “Hmmm, I have a signal strength meter with me, maybe I should measure this.”

4. For a complex system, try tracing a fault back to its source.

Clueless tech: [still arguing about the channels we’re paying to not get. Shows me a page on his phone that he says supports his argument that we shouldn’t get those channels, I do research in front of him to show that he’s flat wrong and looking at stuff from years ago]

Good tech: “Hmm, no signal here on that frequency, maybe sampling the signal closer to the street will help localize the fault?”

5. While it might make sense to twist a knob a few times to see if the problem just goes away, twisting the same knob thirty or forty times only makes you look like a frustrated skinner box rat when the researcher has gone on vacation and fogotten to fill the pellet jar.

Clueless tech: “Let’s do that thing that didn’t work before, again, a few more times, because it’s the only tool I’ve got.”

Good tech: [Already out the door and finding the cable closet]

Root cause was one of the two things I thought might be the issue. The first possibility was a bad channel assignment from the head-end (and believe me, the software that runs the head-ends is crap), the second was a cable trap that had been left on the line. Turned out to be the trap; a filter had been installed maybe ten years ago in a locked utility closet and never removed, and it was happily quashing the signals between 270 and 670 Mhz, and since Comcast went entirely digital in our area a few years ago, these traps should just have been removed.

The first tech just flailed and couldn’t actually think about the problem, but could have solved it if he had paid attention.  The second tech knew a few failure modes, but more importantly he knew how to think about a problem.

6. Don’t design systems that lack end-to-end diagnostics. They will be expensive for you, and your customers will have little pity as they stand back and watch you flail. I’m happy to pay NASA to publically fail because they do stuff that is exciting, dangerous and hard; cable provisioning is none of those.

Posted in Uncategorized | 2 Comments

And we’re back

Nothing like a good random savaging from your $hostingProvider. Sorry about that. It’s been a week of downtime because the tools that $hostingProvider has for diagnosing problems are about as useful as a stack of moldy Ouija boards. Logs? Oh you can ask for logs, but they will not come. Forum quality on $hostingProvider ranges from “Cargo Cult” nonsense to “plz hlp” because it’s a cheap-ass neighborhood.

Me to support: “Site down. Apache looks utterly dead. Logs? WTF.”

Support: “Huh. Lots of stuff wrong, too much to describe, really, and we’re throttling traffic to that server because there are too many people on it. Why are you on that old server anyway?”

Me: “What?”

Support: “No problem, we’ll just move your site. Oh, wait. You have to delete all your old databases first.”

Me: “What?”

Support: “Bye now. Merry Christmas.”

Took another call to support to get Apache high enough to crash. Actually the support folks are pretty good, it’s the policies and configurations they’re called on to support that are, shall we say, legacy. It says so, right there.

Another call or two to have them repair permissions. On stuff. No word on what actually changed or what permissions they had to fix, just, um, you know . . . stuff that needed permissions changing. Oh yes, all this time, the entire time the site was down, the little status widget in the corner of my site’s administration page was cheerfully reassuring me that the site was 100% up and functional (while right next to that, a site preview page was declaring HORRIBLE ERROR and APACHE CATASTROPHE). Yay for modern technology.

So, I mucked with crap for a week, twisting knobs and pushing buttons and waiting for random pieces of web UI to agree with each other. Honestly, half of this time was looking at how to run the hell away from $hostingProvider by moving a few domains experimentally and discovering the roadblocks that $hostingProvider decided were necessary to prevent customer flight, go figure. Finally got things in order, restored the database, restored it again because $hostingProvider, and things seem to be working now. Hi there.

$hostingProvider will soon be an ex hosting provider. I’ve already moved a couple of domains, this one is next. It’s fun.

Posted in Uncategorized | 4 Comments

Even more Comcastic than before

Apparently they’re sick of me calling (well, I sure am) so they schedule a tech visit, because of course you need to have someone on site to fix a configuration problem on your servers.

He shows up. “Oh, a cablecard. I haven’t done any of these.”

Oh great.

He replaces some cables, I think mostly because he had some cables and that was a thing he could do. Nope.

“Dweep dwoop dworp.” Calls into the same support numbers I’ve been calling in to, tells the people at the other end to frob configuration things. No joy.

“Huh”. Starts calling private numbers and has someone else frob configuration things. Also no joy.

At this point he realizes he’s utterly out of his depth, so he accuses me of not actually subscribing to the channels that aren’t working; I show him the lineup I’ve got and point out that half of the channels in the lineup are working, and the other half are not.  He puzzles over this, then instructs me to re-run guided setup twice on the Tivo (which takes 40 minutes each time), goes to lunch and doesn’t come back.


Another tech visit scheduled for tomorrow. I’m guessing they don’t even bother to show up.

I fucking hate Comcast.

Posted in Uncategorized | 12 Comments


“First,” says the Comcast customer support technician, “You dangle the chicken over the cablecard by that coax and then cut its throat with the wire strippers. Make sure it’s over the pentagram, okay?”

Okay. At this point I’m willing to try anything, and frankly the ritual chicken, um, ritual I just got from Tier 2 support is the most constructive suggestion I’ve received in the last four hours of being in Comcast’s support pinball machine.  The gigantic cable monopoly (let’s call Comcast what it really is, okay?)  apparently believes that “support” means “string customers up by their thumbs until they agree to an upsell,” and while I realize I’m still in the bush leagues compared to the true veterans of the Comcast support treatment, the ones that have racked up 20 or 30 hours and who are on a first-name basis with half the staff, that doesn’t make it feel any better. It would be nice if this was a battle against Good and Evil, or Black Spy versus White Spy, or even chocalate versus vanilla, but this is really just a war against the burning stupid and it sucks. I’m mad as hell and Comcast doesn’t give a flying crap.

The staff studies to be like this:

“Try turning it off and then turning it on again.”

Oh-ho. Way ahead of you. Done that. But if you insist, we can power cycle the Tivo and wait ten minutes while it boots. Maybe I can hum some of your damned devil-spawn-of-Girl-from-Ipanema hold music back at you.  Hey, I’ve been waiting on hold for you all day, and I hear that music causes cancer in lawyers.

“I yam sorreeee sir, but your account needs to be (garbled). Call this number, please. 1-800-…”

Oh no no no. I called that number already. In fact, that’s how I reached *you*. If your precious efficiency rating is going down because you’re in peril of accidentally helping a customer, then you have no idea how happy that thought makes me. Let’s talk about the weather while you frob uselessly at your Fisher Price support terminal and look frantically over your shoulder for your boss. Do you like baseball? Cricket? Flicking boogers at photos of your corporate VPs? I thought so.

“Good day, sir. I can assure you that you have reached the correct department and that we will be able to resolve your issue.”

Facepalm. “We’ll be able to fix this, and this will be your last call to us on this issue” is what the last five people I talked to said.  And they either hung up on me, or transferred me to another department, even transferred me to another fucking company, or told me they were closed, or tried to arrange for a service call two weeks from now from a guy who will miss the service window three times in a row. I no longer believe you possess a shred of humanity or free will, and that you are in fact the very zombie apocalypse we have been expecting to arrive, only you’re eating our brains over the phone. I have to admit, that’s pretty god damned clever.

Seriously, fuck these people. Hard. With a stick sharpened by the folks at the Public Utilities Commission (to whom I am writing feedback) and whoever down at City Hall I can get to listen (in this election season) about the responsibilities of a monopoly.

Dear Comcast. You suck.


After further research of people who have been dealing with Comcast and cablecards over the past few years, I now realize that I am totally screwed.

(Why their support is not asking for information like “Tell us what the QAM and signal lock settings are on the channels that don’t work?” is beyond me. Well, no. Actually I know why they’re not asking — they’re just not capable).

Posted in Uncategorized | 5 Comments

Programming Sucks

This is so beautiful that I was nearly weeping.

Programming Sucks

It’s the best description of the state of modern software engineering that I have read in a long time.

Posted in Uncategorized | 2 Comments

Random notes

I just got done being a juror on a very short two-day trial (about as short as they come). This was a criminal case that wasn’t even close. We reached our decision in about 30 seconds, spent ten or fifteen minutes tossing the evidence around and being absolutely sure, and then we sent a guy to jail for a while.

Words of advice:

  • If you have been arrested and are being video taped by the police, shut the fuck up until you have legal representation. Realio trulio honest to God just shut your damned pie-hole and be quiet. What the guy said on camera wasn’t a key piece of evidence, but it sure didn’t help.
  • Meatloaf may turn up in unexpected places. If you’re ever up to something sketchy and a small voice in your brain is trying to say, “Hey, rest of my brain, you might want to reconsider this thing you’re about to do because it’s against the law and also kind of fucked up, too,” you should listen. Because: Meatloaf.

I’ll leave you with that little mystery and I’m never going to explain it.


I got a second call from “Microsoft Support” this evening and it was another lost opportunity because my dinner was ready and frankly I wasn’t in the mood to troll the scammer after battling the Forces of Criminal Idiocy earlier. “Sir, your license to run Windows has been revoked because of viruses and we must check your registry.” / “Oh no! This sounds serious. We’d better do something about it!” Then the microwave beeped and I lost heart. I told the scammer to get an honest job and stop being a crook and hung up.

Any other day and it would have been epic, though.

Posted in Uncategorized | 4 Comments


I know, first we hang all the lawyers. But soon after that, maybe when the telephone sanitizers have stopped kicking (a little mission creep never hurt anyone, right?) we line up the recruiters and introduce them to a little high school physics. F=MA and G=Mm over R-squared something something and you can’t push a rope. Oh, and when you meet the Big Guy, you should know that we made a couple of minor changes to your resume, so just go along with the modifications, okay? It’ll be totally cool, don’t worry, nobody ever checks that stuff.

But . . . I know, you’re a /good/ recruiter, right? You never cold-emailed an employer and said “I’ve got a bunch of super red hot engineers” and then started pimping knuckle-draggers incapable of spelling ‘C’ without looking up the answer on The Google. No, you’re not one of /those/ recruiters, and that makes me happy because you are special and sure, we’ll work with you. Let’s see some of your best clients.

And suddenly it’s like that sequence in Mrs Doubtfire where Robin Williams is faking calls from various inappropriate prospective nannies in order to nail the nanny job himself, except that the people on the other end of the phone are a lot less funny than Robin Williams.

“Print the numbers from 1 to 100? Sure? First we fill a table with numbers 1 to 100, then we run SELECT on the table. Easy!”

“This is like code, right? It’s been a while. Let’s see. Um. FOR. No, IF. Wait, I know this. PRINT 1 TO 100. Okay, that was easy. Next question?”

“Here in Havenukeistan we have many fine count. You relocate, yes? Then I write count for you, best you ever see.”


This works in the other direction, too. 30 years ago a recruiter sent me to the hinterlands outside of Minneapolis, and in that flat desolation surrounded by wheat fields was a small brick building with a bunch of workers in it. I walked in, introduced myself as the candidate, and spent an hour laughing with someone while we tried to figure out what my recruiter figured a game programmer and systems guy would do at a company that made sewing machines and that didn’t even have a computer on the premises. (A couple of later start-ups I was at made me wonder if bolting together light machinery and sleeping in a cow barn would have been a good choice of career change).

Ever wonder how those little bobbin things work? Fascinating, now /there/ is genius we should all aspire to.

Posted in Uncategorized | 7 Comments

A bird on the wall …

It was mid-afternoon and someone was poking me. “Hey, are you awake?” they whispered. I blinked and raised my chin.


“Ralph wants to know what database we’ve chosen. What database did we choose?”

“Grughnk. Guhbbah.” I’d nearly fallen asleep in the marathon marketing meeting again. “Um, we decided on, um, Squorical.”


“Orasqueakle Server. Yeah, that was it.”

“Oh God.”

Many eyes were on me. Many of the eyes had suits and ties attached to them, and they wore expectant looks. I put down the notebook I’d been doodling satanic cartoons in and lurched from my chair. “Sorry, I’ve got to –” I said, and waved generally toward the door. (“Oraskwackle? Really?”)

Ralph the Marketing Guy said, “Great idea. Ten minute bio-break everyone!” He was chipper and ready for another hour at least. I wanted to throw him off our balcony.

We’d been in that meeting room for nearly two hours, discussing nonsense and useless stuff (along the lines of Douglas Adams: “Okay, if you’re so smart, YOU tell us what color the database tables should be!”) and I needed to be doing designing and coding rather than listening to things that made my shit itch. It was the third multi-hour marathon meeting with Marketing that week, and I was nearly at the end of my rope. One of the of the topics under discussion was why engineering was behind schedule.


Our little group of programmers often walked to lunch. I’m not sure where we went the next day; it might have been to the borderline not-very-good chinese place down the hill that had wonderful mis-spellings on its menu (my favorite dish was Prok Noddles), or it might have been the Insanely Hot chinese place that was in an old IHOP A-frame building (they had a great spicy soup that would spray a perfect Gaussian distribution of hot pepper oil on the paper tablecloth as you ate from the bowl). All I remember for sure is that on the return walk we passed the shops on the street as we always did, but for some reason I paused just outside the clock shop, which I’d never really paid attention to before.

A spark of evil flared in my head. “You guys go on, I’m going in here.” I got a couple of strange looks, but nobody followed me in. I spent about a hundred dollars.


The next morning the marathon meeting started on time, but there was a new attendee. I had nailed it to the wall. It said “Cuckoo!” ten times.

“What is that?” one of the marketeers asked. [This question pretty much defines most marketing for me, by the way].

“Just a reminder,” I said with slight smile and a tone that implied it was no big deal. (I’d talked with our CEO about it earlier and he had said okay, but I think I was going to do it anyway).

The rest of the usual attendees filtered in and the meeting started. The clock said “Bong!” at fifteen minutes past the hour, which got a couple of raised eyebrows, and it bonged again on the half hour and a quarter-to. At 10:59 it made a “brrrr-zup!” sound, as if it was getting ready for some physical effort, then at 11:00 the bird popped out, interrupting a PowerPoint presentation that I’ll never be able to recall, and went “CUCKOO! CUCKOO!” about a million times. Well, only eleven, but it certainly felt like a long, long time. The guy who had been talking had trouble remembering what he’d been saying. Everyone else had been expecting the display, but the speaker, one of our serial meeting-stretchers, had been lost in his own blather.

The meeting broke early that day.

The next day, too.

The hours we spent in that room no longer passed anonymously. The clock’s smaller noises, as it prepared to say “Bong”, and its more dramatic preparations for each hour’s Big Show were now part of the agenda. We knew time was passing. The meetings did become shorter. We had an interesting time explaining the clock to customers (for this was a small company with only a couple of meeting rooms), but in general people from outside understood, and often laughed in approval.

The clock was a relatively cheap model that had to be wound every day. I usually got in to work pretty early and wound it, but occasionally I forgot to, or worked remotely and didn’t get to the office at all. Somehow the clock never ran down. It turned out that our office manager was winding it, and occasionally our CEO would wind it, too.

I knew I’d gotten the message across when one of the marketing guys looked up at the bird (which had just announced 3PM) and said, “I hate that thing.” And I smiled, and the meeting ended soon after, and I got up and left the room and went to my keyboard and wrote some more code.

[I left that start-up a few months later. I still have the clock.]

Posted in Uncategorized | 7 Comments