An Unusual Request

Several weeks ago, I noticed that I was getting quite a few hits on my Lord of the Rings Personality Test despite its utter lameness. By perusing access logs, I determined that a lot of them were the result of a post on LiveJournal by “Some Primate” (a.k.a. June the Primate Girl). I sort of introduced myself as the guy who’d written the test, talked a little about how and why, and so on, which earned me a “will write more later” kind of reply from a surprised-sounding SP. I bookmarked the thread and checked in occasionally to see if there was anything new.

Bored one day, I decided to check out SP’s actual journal and found myself quite fascinated. Turns out she’s doing primate field research in Borneo, and is having some pretty out-there adventures. Which brings me to the real point of writing this. Her latest adventure seems to involve poachers, less than fully cooperative sanctuary staff, monsoons and alligators. Scary. I’d like to ask anyone reading this to check out her last few journal entries. If you think, as I do, that this is a person who deserves some support and encouragement, please leave a note on this thread saying so.

Why am I getting all activist about this? Damned if I know. Well, no, that’s not true. It’s because I find myself surrounded (and, alas, permeated) by a particular techie brand of self-satisfaction and absorption in things that are, ultimately, rather unreal. The stark reality of someone who’s literally risking life and limb for their work, plunging into the jungle without any kind of support or backup in an effort to make a positive difference in the world – the real world – just strikes some sort of chord in me. Maybe it will for you too.

Secure Writes

I’ve been writing “design notes” for my distributed storage system lately. The first one has to do with asynchronous ordered writes (or ordered asynchronous writes, if you prefer) and it’s pretty much done. Turned out to be easier to do than I’d expected, though still hard to explain. My current effort revolves around “secure writes” through untrusted intermediate hosts, by which I mean two things:

  • Unauthorized writes, or writes that have been tampered with, must be rejected.
  • Authorized writes must be performed exactly once, without being dropped or replayed.

Everyone seems to have a pet solution to the first problem. It’s the second one that’s tricky, though, especially if you want to retain the performance advantages of incorporating untrusted hosts into your distributed system in the first place, and it seems to me that nobody’s bothering to deal with it. In most systems, writing seems to be a “best effort” kind of thing: if the write actually happens that’s great, but if it doesn’t then, well, c’est la vie. And no, content-based addressing doesn’t solve the problem.

I think I’ve come up with a solution. It doesn’t involve very much overhead, and in some ways it’s actually quite elegant. However, if any of you regular visitors (I seem to have several dozen nowadays) happen to know of serious alternatives, I’ve love to hear from you. Just send me some email with suggestions (or, even better, actual citations).


I actually wrote this back on November 3 last year, but the topic came up again in a thread at Joel’s site so I figured it was worth resuscitating. The original context is here.

The ideal interface, in my opinion, would be to support nesting of window managers within other window managers and/or within applications. The biggest problem with MDI is that every MDI application basically acts as its own window manager. Usually this “embedded window manager” is a really crappy one, which turn people off to MDI in general, but there are exceptions; my preferred browser and text editor both use tabbed document windows to very good effect. It would be cool if we could tell applications what window manager instance (WMI) to use, so that the app can delegate window management to the WMI of the user’s choice. Want SDI? Tell the app to plop its subwindows into the same WMI as the parent window. Want MDI? Tell the app to plop its subwindows into a WMI (“using *this* window manager, please”) embedded within the parent window. You could use the same interface to switch between a Mac-style single menu bar and Windows-style per-window menu bars. All of this could go into a fairly simple config file, allowing users to choose whatever combinations of overlapping/tabbed, MDI/SDI, Mac/Windows styles – including hybrids and mixed modes – that they want.

Tip of the Day

I know we’ve all had that “oh, no” experience when we’ve accidentally sent email before we were finished editing it. No, I didn’t do that with the previous email. ;-) It just happened to occur to me, without having to learn the hard way, that there’s a really simple but effective trick to prevent it: just enter the recipients last. I know, it’s not exactly the most brilliant insight ever, but I also know that most people follow their email program’s subtle direction to enter the recipient first, then the subject, then finally the text, and might not have stopped to think that a different order is much safer.

Look out, it’s Outlook

The following is my response to intraspam that I got scheduling an Outlook 2000 training session at work. I thought some other people might appreciate the sentiment.

I realize that many of you don’t currently use Outlook as your mail client, however, it’s the corporate standard (and an industry defacto standard) and it facilitates increased communication and collaboration

It also facilitates numerous worms and viruses, which have had more of an effect on corporate productivity than its collaboration features. I (like many others, I’m sure) know quite well how to use Outlook but choose not to, and as long as EMC pays me to exercise my professional knowledge and judgement I will apply it to that choice as I do to other aspects of my work. In short: no thanks.

Evil Women

I was listening to a radio talk show about movie bad guys, like Hannibal Lecter, just about any character played by Christopher Walken or Alan Rickman, etc. I started to wonder about the relative absence of female icons of evil, especially those whose evil is presented as something other than a tired rehash of the Freudian “female sexuality is scary” schtick (e.g. Black Widow, Basic Instinct) or some other stereotype (e.g. witches). Off the top of my head I can’t come up with any examples of such a uniquely/creatively evil female character comparable to the male examples above. Any suggestions?

He’s Baaaaack!

Phew! I don’t know why, exactly, but this trip was one of the most exhausting I’ve ever taken. Here are a few highlights:

  1. Got up at Wednesday, 3:00AM, to catch a 6:10AM flight because that’s the only way I can hope to be at Lake Tahoe by noon when stuff gets rolling. Yech. Next time I’m in a similar situation I’ll spend the extra money and get out there the night before. One night in a different hotel at my own expense is still better than getting up at such an insane hour.
  2. Missed my exit to the airport because of Big Dig nonsense, had trouble finding the entrance to terminal E because of airport-construction nonsense, etc.
  3. The retreat itself was awesome. There are some really brilliant people at Berkeley, working on some very cool stuff. Nice folks, too, and that goes for the other “industry guests” as well. I feel honored to have been included in such excellent company.
  4. The snowboarding – half day at Alpine Meadows on Thursday as part of the retreat, plus two days on my own at Heavenly over the weekend – was a blast. Conditions were far from perfect, but good enough that I thoroughly enjoyed myself…and I didn’t injure anything. Yay.
  5. The folks at Reno airport know nothing about security. Most of their demands were just aggravating, without actually making anyone safer. My favorite was the Northwest flight attendant who kept telling people that if they sat in a particular section of the gate area they’d be searched, and then watching them get up and move elsewhere. Sort of defeats the purpose of doing the searches at all, don’t you think?
  6. Northwest sucks. Here’s a clue, people: if you schedule a flight at a certain place and time, it helps to have a plane there at that time. To add insult to injury, the baggage handling once we did (finally) get to Boston was the slowest I have ever seen. Clue #2: it pisses people off when they have to wait for skis and snowboards because they’re “oversized” while multiple bags each big enough to hold a family of four keep pouring out of the regular chute. If you just said it was “special handling” it might not change anything but at least it wouldn’t seem so inconsistent. Some people just know how to fly, the slogan goes, but it would be nice if they knew something about how to treat their customers with simple respect and courtesy too.

OK, I’m Done

I know I’ve been extra-talkative today. Partly it’s because I’m going to be out of town and busy for the next several days and I don’t know if I’ll have time to make any further updates. Feel free to space out today’s brain-droppings over the next few days, and I’ll post more when I get back on Tuesday from riding my snowboard at Heavenly near Lake Tahoe.

Shoot and Scoot

My project at work isn’t much fun right now. It has reached that stage where the requirements are getting piled on, and that just gets really annoying. By the time the people who haven’t actually written or debugged code for ten years (if ever) get done, this is what the requirements will look like:

  • It must run on systems and networks configured by idiots all over the world, and yet be blazing fast.
  • It cannot assume a secure network or VPN (cf. previous requirement regarding idiots), but must thwart all forms of unauthorized data inspection/insertion/modification using internal mechanisms.
  • It must be fully integrated in-kernel for every system it runs on, and it must run on several flavors of UNIX plus NT.
  • It must include hooks for every other product that anyone at this company ever thought of.

Yeah, fine, and you want than when, exactly? With just two people working on it, one of whom only started yesterday?

The real problem is that this company doesn’t believe in research. Yeah, they make lots of noise about how much they spend on “R&D” but it’s all D. Don’t follow this link because it goes nowhere. The only R that gets done around here gets done skunkworks-style, by people who believe strongly enough in an idea to develop it on their own and then put up with all the political battles and turf wars that occur when people find out about it. Nobody ever says “we need to invent something new in this area, so head in that general direction and don’t worry about how we’ll productize it”. There’s nothing wrong with a good dose of pragmatism, God knows I give academics enough grief for never considering real-world applicability, but there’s also value in being “agile” and demonstrating a capacity to innovate. If every single thing that goes out the door has to have every imaginable bell and whistle, every special hook and supported platform that any political faction asks for, you’ll always be a follower. No matter what product territory you go after, someone else will already be there with an established reputation as a technology leader, attracting talent and making money to pay them to work in that area. You can spread all the FUD you like about compatibility and lack of support and whatever, but you’ll still be a follower.

A while ago, somebody told me about a military metaphor for software development in three stages (let me know if you can identify the original source). The three types of programmers in this model are as follows:

  1. Paratroopers, marines, rangers, or other troops who enter enemy or unknown territory, travel light, and prepare the way for…
  2. Plain old infantry (plus artillery, I guess) who constitute the bulk of the force and expand the initial tenuous beach-head or drop zone into a strongpoint from which to launch further operations.
  3. MPs, who round up the captured enemy and generally maintain order in the rear areas while the first two groups go off and do their thing again somewhere else.

No, I don’t know where navy, air force, coast guard, ordnance, quartermasters, whatever fit into that. Let’s not get carried away with the metaphor, OK? The important thing is that these three military groups correspond in the software world to research, development (of new products), and maintenance (of old products). All three are necessary and valuable, but individual engineers are generally strongest in one particular role. I’m definitely a first-category kind of guy, probably most like Ranger or Force Recon in their exploratory (as opposed to prepatory or covert) roles, in an organization that’s heavy on the second and third categories. I can do those other jobs, but it’s not the most efficient use of skills and resources. First-category folks are the rarest, and should be used to do first-category jobs as much as possible; second- and third-category jobs, which are in no sense less important or require less skill, should be done to the more numerous people who function best in those particular roles.

What I’m really getting at, in my own verbose should-have-been-two-articles way, is that maybe it’s time for me to move on. I’m not into technical trench-digging.

Random Answers

My too-cool coworker Sea Sun Lee provided the answers to some random questions I posed earlier. Here they are.

Q: Do turtles make sounds? What kind?

A: Yes turtles make sounds. Mine usually hiss at me when it gets pissed off at me(red-eared sliders). I’ve heard snapping turtles make hissing sounds as well.

Q: How do you measure an animal’s visual acuity? I see a lot of claims about how this animal has sharp eyesight, and this other animal sees poorly, but how do they know? I don’t think they make the animals read eyecharts. ;-)

A: You can vivisection an animal cadaver and do measurements on optic nerve density on the retina, focal lengths, lense shapes, etc. and based on similarities or differences in human anatomy, determine how well an animal sees.