[ Content | Sidebar ]

feisty fawn

May 20th, 2007

I just upgraded to Ubuntu 7.04; seems to have gone smoothly. Haven’t noticed any vast improvements, but that’s fine: I’d rather have a distribution that subtly improves frequently than one that saves up for big bang changes. Nice to be able to do it (in a supported fashion) by downloading packages over the net, instead of having to burn CDs/DVDs – that’s one aspect of Fedora that I don’t miss.

wii play

May 19th, 2007

Wii Play is a fifty dollar game packaged with a forty dollar controller. There’s not much point in buying it if you don’t need an extra Wii controller; if you do need an extra controller, however, is it worth paying an extra ten bucks to get the game as well?

My answer: sure, why not, but it doesn’t make a big difference either way. It’s a collection of nine minigames, each of which can be played with one or two players. I played through them all once with Miranda; we basically enjoyed it but weren’t blown away. I played through them all again in single-player mode, some of them more than once. I didn’t mind any of them (well, Find Mii was annoying at times), some were rather fun (Billiards, Tanks). I might have spent more time on it if, in the modes that get progressively harder, it had taken less time to get to the difficulty level that I found enjoyably challenging.

So I’ve spent maybe three pleasant hours playing the game, and I have a collection of two-player minigames that might get picked up again in the future. Fine for ten bucks (and I’ve already used the extra controller, my fourth one, so I’ve gotten use out of that aspect of the package, too); people without video game experience might appreciate the way it’s structured as a controller tutorial. (To that end, a Wii plus Wii Play would be a very good combo for some people: a console, two good introductory games, two controllers.) In general, though, not something about which I feel like going into depth here (any more than in real life).

weinberg quotes

May 19th, 2007

I’m in the middle of rereading Gerald Weinberg’s Quality Software Management series, which is motivating me to type various quotes on mailing lists that I’m on. Not sure that they’ll do much without the context (actually, I have no reason to believe that they did much for anybody even with the context!), but if I’m going to go through the trouble of typing it out once, I might as well reuse the effort.

From the first volume, Systems Thinking, p. 110:

I once was called in to consult on a troubled project that was missing all of its goals, much to the puzzlement of its project manager, Simon. As part of my visit, I attended a code review meeting that (against my advice) Simon also attended. Herb, whose code was being reviewed, took a lot of personal abuse from Simon to the point where his eyes started watering. I called for a “health break,” and during the break, Simon came up to me and asked, “Does Herb have something in his eye?”

“Why do you ask?” I replied.

“Well, I noticed that there was water coming out of his eye.”

From the third volume, Congruent Action, pp. 60–61:

If you are acting incongruently, you are likely to trigger incongruent reactions in others. Rather than blaming them for incongruence, ask yourself, “What could I be doing to contribute to their behavior?” Here’s how it worked for Parson, one of my students:

“I was telling one of my project managers that I had to see a plan to get her project back on schedule. As she handed me a folder containing her revised project plan, I became aware that the papers in her hand were rattling. That caught my attention, and I thought, ‘How strange that the papers should rattle like that.’ Looking for an explanation, I noticed she was trembling, that her face was ashen, and finally that her eyes were wet.

“My first thought was, ‘Oh, she’s sick!’ but then I remembered the idea from class that she might be reacting to me. That seemed ridiculous, as I thought I was merely talking to her normally, but I decided to check it out.

“The first thing I noticed about myself was that I was gripping the edge of my desk as if it were a safety rail between me and the Grand Canyon. I thought I should loosen my grip, but then I realized I would probably fall on my face toward her if I did. All this while I continued talking to her about the project plan, until I noticed that I was actually shouting and banging my other fist on the desk. That’s when I had my big AHA!”

From the second volume, First-Order Measurement, p. 109, defending the definition that “Quality is value to some person”:

Why is this definition so troublesome to some people? There are people in the world whose strongest desire is to find perfection, the one right way. Many of these people choose to work with computers, and particularly with software. They don’t like the idea that quality is relative – to people, to place, to time – but it is.

And again from Congruent Action, p. 196 this time:

Avoiding blamers works if you don’t have to deal with them again, but this is exactly the opposite of engaging. If your work requires that you engage the blamer, you need to learn the method of the aikido masters when dealing with all forms of attack, including blame:

When someone hits you, he is extending his ki toward you and it starts to flow when he thinks he will hit you — even before his body moves. His action is directed by his mind. You don’t need to deal with his body at all if you can redirect his mind and the flow of his ki. That’s the secret; lead his mind away from you and the body will folow.

In aikido, you lead the mind away by physical means, though these are always as gentle as possible. The idea is not to further upset the person or draw more attention to yourself, as stiff resistance or a punch would do. In fact, skilled aikidoists often disable their attackers without even touching them, which of course is what you want to do with someone who is blaming you.

Blaming can be handled in the same way, first by yielding, but in such a way that the blame is unable to harm you. Done properly, this surprising move engages the blamer’s mind, so that you can easily change its direction. For example, suppose that an employee blames you for his failure to develop a specified function. “You didn’t tell me that this function was part of the spec,” he screams. Although you remember telling him, you don’t try to deny the allegation, which only focuses his blame more firmly on you. Instead, you may say, “If you didn’t know it was in the spec, I can certainly understand why you didn’t develop it.”

Saying this, you have agreed with his anger without accepting his blame. Next, you redirect the energy of this blame (the ki, in aikido terms) into something more productive. You have aligned with his energy, so you can push from behind rather than resisting it from the front. You might say, “What’s the best way for you to be informed of functions to implement?” This makes you collaborators, rather than opponents, by turning the energy toward preventing the problem in the future, rather than belaboring the unchangeable past. Even better, you have not become a blamer yourself.

rejection in person; printf debugging

May 16th, 2007

One of the least pleasant aspects of hiring is rejecting candidates. (More actively unpleasant for them than for me, to be sure.) It’s something which, until recently, I did almost exclusively over e-mail.

Sometimes, rejection over e-mail makes sense. I typically put candidates through up to three stages of filters. (Not counting the initial resume screen.) The first stage is a sanity check over the phone: is there some obvious reason why this situation is a misfit that I didn’t figure out from the resume? Almost everybody makes it through this stage; in the few places where a candidate doesn’t make it through this stage, it’s because it’s clear to both of us that their goals aren’t a fit for this position, so we agree that it’s not a match, and it’s simply not a matter of me rejecting them. (One could argue that I should make my phone interview stricter and reject more candidates at this stage; for better or for worse, I’m not doing that yet, and it’s tangential to the issues in this post.) The third stage is a half-day team interview; in this situation, my team discusses the candidate as a group after the interview is over (usually the next day), so I’m simply not in a position to deliver an immediate verdict to the candidate.

The second stage is the tricky one. This is a one hour in-person interview, where I ask some questions and have the candidate do a bit of programming. Sometimes, after the end of the interview, I’m genuinely not sure whether or not I want to bring the candidate back. More frequently, however, I am sure, and the answer is “no”. I can’t remember having second thoughts about my initial no reaction at this stage, so why not deliver the news then?

I think my actions started to bother me because of some blog posts that I’ve read recently, but I just looked at the usual suspects, and I couldn’t find any relevant posts. Certainly one reason why I’m thinking about this, though, is that I’m in the middle of rereading Gerald Weinberg’s Congruent Action. I can’t claim that I’m acting congruently in this case: I don’t believe that it makes job candidates any happier to have to wait and wonder for a day or two. Nobody likes being rejected, but you might as well get the news as soon as it’s available. The only reason why I’m delaying is to avoid in-person awkwardness; it’s just a sign of lack of courage on my part, with no obvious benefit to anybody.

So today I rejected two candidates in person. And, actually, it turned out rather well: both were disappointed, but both took it well, and both asked for advice about what they could have done better. In retrospect, it seems that I haven’t been saving myself any grief: all I’ve been doing is elimimating a potential learning opportunity for the job candidates. (Which raises the question: what learning opportunities might my actions in this regard be costing me?) Nice to have immediate positive reinforcement like that: I will try to continue to behave this way in the future. (And I should spend some time thinking about how to politely reject people in person.)

To be sure, I don’t claim to have any great pearls of wisdom on what the candidates could have done better. But, in time-hallowed blogger tradition, I won’t let that stop me from sharing my thoughts on the subject. The interesting thing about this case was that both candidates failed for the same reason: neither was completely hopeless, their initial attempts at a solution were both reasonable, but both floundered significantly when debugging. (Learning about people’s debugging skills is actually my goal in the programming question: I’m always a little disappointed when people solve the problem without making a mistake, because I know that, no matter whom I hire, they’ll make programming mistakes with some regularity, and I want to see how they deal with that.)

And, in both cases, it seemed like they didn’t know what they were looking for when debugging, or indeed when testing the program before discovering that debugging is warranted. (I tell them to implement a function and do enough testing to convince themselves that it was correct.) I suspect that both of them could be helped by taking a more scientific approach to debugging.

Sometimes, scientists are just gathering data: poking around, seeing if they see anything interesting. But science really progresses when people are making and testing hypotheses. Make a prediction that is concrete enough to be testable, to be falsifiable, and then test it. If the test results match your prediction, that’s always fun; if not, though, you’ve still learned something concrete, and can use that to make further hypotheses.

And this works for debugging, too. At the very basic level: if you think something is wrong with your code, you should know what you expect to have happened, so you can tell whether or not something really did go wrong! But it helps to make concrete predictions at a more refined level than that: “we know that something went wrong overall because we saw X instead of Y. If the problem isn’t in this part of the code, then expression E should have value V, whereas if it is there, then E should have a different value”. If you do this a few times, you should be able to zero in on the problem quite quickly, much faster than you could have by just looking at the code and hoping for inspiration.

This helped crystallize one thing that I think is wrong with printf debugging. Many people’s first reaction, when confronted with misbehaving code, is to sprinkle printouts throughout the code and hope that enlightenment results. This can be great, if you have specific hypotheses about what the output of those messages should be. I think that many people, though, don’t really have specific hypotheses in mind, just a vague feeling of values that they’re interested in. When this happens, printf debugging doesn’t lead to answers very quickly: the messages give you a lot of data, data that can easily lead you down all sorts of unproductive paths, data that can fool you into thinking that you’re learning something when you don’t really know what that data represents. (I suspect that debugging with a debugger is less likely to lead to this problem, if only because it takes more effort to generate lots of values, so you’re more likely to spend time thinking about what values you want to generate.)

Maybe I’m unfairly characterizing printf debugging, but I will stand by the value of concrete hypotheses when debugging. Which raises the question: if it’s so good when debugging, can we use the same ideas when writing new code, code which we don’t yet have reason to believe is incorrect? The answer is yes, of course: that’s exactly what test-driven development is all about.

misplaced hiring confidence

May 15th, 2007

A bit from Bob Sutton’s Weird Ideas That Work (pp. 59–60) that caught my eye:

People sometimes get annoyed when I say job interviews are a weak, often useless, way to select new employees. I’ve had executives, middle managers, engineers, scientists, lawyers, a fire chief, and a minister respond with anecdotes that “prove” how skilled they are at using interviews to pick which job candidates will succeed and which will fail, even if others are lousy interviewers. Their confidence clashes with literally hundreds of studies, going back to before World War I, showing that there is rarely much agreement about who should be hired or who will perform best (and worst) when several interviewers talk to the same job candidate. These studies conclude that the typical “selection interview” is a bad method for deciding which employees to hire. A much better way to pick good employees is to just see if they can do the job, or at least crucial parts of the job – to give them “job sample tests.”

Most companies interview candidates something like this: An untrained interviewer leads a job candidate through an unstructured, unplanned conversation. No record is kept of what questions were asked or answered, and the person who ultimately makes the decision to hire the person – or not – sometimes has only a dim understanding of the job skills needed. Despite these flaws, the interviewer has great confidence that he or she can distinguish between good and bad candidates. Unfortunately, research shows that job interviewing is a lot like driving, where 90 percent of adult drivers report that they have “above average” skills. The truth is that the typical interviewer learns little useful information for predicting job performance beyond what is available no the applicant’s job application and resume.

Another reminder of how much I doubtless have to learn about hiring. (And a reminder that there might be much for me to learn from empirical studies about this and other managerial topics.)

Despite which I insist on continuing to try to hire. Here are my current open reqs. (The reqs should basically be identical; I only link to both of them because I might fill one of them one of these days, at which point that link will go stale.) If you know anybody who lives in the Bay Area or is planning to move here, who has good OO programming skills, and who likes the idea of streaming out 320Gbps of data, please send them my way. Consider this an open invitation: I expect to be hiring off and on for the indefinite future.

eternal sonata

May 15th, 2007

Forget Halo 3, GTA IV, and all that: it’s starting to look like the real reason I’ll get an Xbox 360 this year is that there’s an RPG coming out for it starring Frederic Chopin. Yes, that Chopin. From IGN’s capsule summary:

Three hours prior to [his death], Chopin saw a dream of a fairy-tale land populated by people with incurable diseases but also magical powers.

Now, I ask you: who wouldn’t want an RPG with that as its premise?

(Speaking of works about Chopin, of the first things Liesl and I went to together was a showing of Impromptu. We were supposed to go with our friend Jim Blandy, but somehow he neglected to show up. At first, we assumed he was setting us up, but no, he just forgot…)

finished backing up cds

May 13th, 2007

I’ve finished my somewhat quixotic effort of backing up my CD collection. (Or rather ours: most of them I bought, a few Liesl bought. Miranda’s are, alas, not backed up.) They’re all backed up both on-site and off-site, with the sole exception of Rongchun Zhao: Master of the Erhu. Which last is a pity, since it’s a rather good CD, and it doesn’t seem to be currently available anywhere. (Here’s a video of one of the songs.) Ah well; I’ll have to go out and buy another 8 or 9 CDs, at which point I’ll have an excuse to burn another DVD backup. In the meantime, that CD is stored (lossily) on the iPod in my pocket, so I’ll probably still have a copy if the house burns down.

The full list of artists is below; I’m happy with it. I’m not quite as big a Stravinsky fan as all that, I just have a big boxed set of performances of his music that he conducted, and Wagner only gets so high because I’m counting on a per-disc basis (15 = the Ring), but in general it’s not too misleading.


panini$ ls */* | cut -f2 -d/ | cut -f1 -d- | uniq -c | sort -rn | more
62 bach
29 beethoven
28 stravinsky
27 shostakovich
24 britten
22 mahler
15 wagner
14 beatles
11 gronemeyer
11 freberg
11 anderson
10 brubeck
10 berio
9 guthrie
6 schoenberg
6 janacek
6 bartok
5 lang
5 handel
5 bruckner
4 thomson
4 porter
4 martin
4 dylan
4 brahms
3 webern
3 webber
3 u2
3 strauss
3 simon
3 schumann
3 rameau
3 offenbach
3 oberlin
3 mussorgsky
3 lehrer
3 hindemith
3 gubaidulina
3 groovelily
3 flanders
3 dvorak
3 davis
3 costello
3 charming
3 andrews
2 walton
2 they
2 sweet
2 ravel
2 ragin
2 namco
2 mozart
2 modern
2 lutoslawski
2 lennon
2 klezmer
2 gluck
2 eisenberg
2 dahlstrom
2 coltrane
2 bobs
2 biber
2 bernstein
2 berg
2 amos
1 zhao
1 zero
1 zemlinsky
1 zappa
1 willan
1 weill
1 weavers
1 watson
1 valdes
1 tsuji
1 tonic
1 thomas
1 tavener
1 sweelinck
1 sondheim
1 siberry
1 seeger
1 schmidt
1 saint
1 rush
1 rogers
1 respighi
1 red
1 public
1 prokofiev
1 prince
1 powell
1 picker
1 peace
1 part
1 orff
1 mouth
1 mountain
1 morris
1 messiaen
1 makeba
1 louis
1 lipitone
1 leroux
1 lauridsen
1 indigo
1 horowitz
1 guem
1 grieg
1 gospel
1 funaro
1 elizabeth
1 deep
1 debussy
1 davies
1 copland
1 cooper
1 carter
1 camper
1 bush
1 blue
1 blades
1 ben
1 africa
1 adventures
1 advent
1 adams

grand theft auto iii

May 11th, 2007

I felt a bit uncultured never having played Grand Theft Auto III. I’d played GTA: SA, and was quite impressed by it, but I thought I should go back and see where the series really took off.

And, for a while, I wished I hadn’t. GTA: SA drops you off right in the middle of the plot: you meet up with family and old friends, people have histories, you get dragged right in. Not so with GTA III: you’re an anonymous character with no history, no friends, no connection to the world around you.

And the initial dialogues and settings just seem vulgar. I’m not sure that, taken on its own, it would be any worse than what’s in GTA: SA, but the lack of a plot and the lack of wit makes what I saw as artistry in the later game just seem (uninterestingly) offensive in the earlier game. And, to top it off, the early missions are so short as to be actively boring. (And once they get out of the overt tutorial mode, you see that the interface is rather worse than GTA: SA. Not that the latter game is a model of control…)

So I almost stopped playing two hours or so into it. Around then, though, they started stringing together a bit of a plot, and I started enjoying the missions more. I ended up finishing the first third of the game, but gave up after that, feeling that I had better ways to spend my time. Not that I wouldn’t have basically enjoyed finishing it, probably, but there are enough other games out that I’m curious about that I didn’t see why I should devote much time to this. (Actually, a better choice would be to devote time to movies: it’s a game that I can’t play with Miranda around, obviously, which is also the case with most movies we rent.)

Or maybe I didn’t feel that I would have enjoyed finish it. I almost wish I hadn’t played it: I was reasonably exciting about the forthcoming GTA IV, for example, but now I’m thinking I won’t be up for another one of these games by next fall. We’ll see; it’s not like I won’t have a zillion other great games to play then, after all. (At least if Nintendo keeps their promises. Which, based on past experience, is highly unlikely, but there should still be several really good games out there.)

the recipient can arse it

May 9th, 2007

I was looking at the HTML version of the HTTP standard on the W3C web site today. Apparently there’s a bug in their text-to-HTML conversion program, causing some words to lose their initial letters. Which led to this:

4.If the message uses the media type “multipart/byteranges”, and the ransfer-length is not otherwise specified, then this self- elimiting media type defines the transfer-length. This media type UST NOT be used unless the sender knows that the recipient can arse it; the presence in a request of a Range header with ultiple byte- range specifiers from a 1.1 client implies that the lient can parse multipart/byteranges responses.

Call me juvenile, but I laughed for a while when I read the first part of the second sentence…

groovelily; regret

May 7th, 2007

I learned about the band GrooveLily from an episode of Next Big Hit. I wasn’t paying too much attention when the song, “No Room In Your Bag”, started: a patter song over a drum backing. But then some chords on the piano came in, the instrumentation started getting richer (electric violin, yay), and I started realizing that I rather liked the lyrics. (Not to mention the singer’s sliding into falsetto.)

Quite a song; it’s stuck in my head since. I hesitate to link to a myspace page, but it seems to be the best place to listen to the song. (There’s also a live version available on the band’s web site, but the instrumentation is worse, so I won’t link to it here.) About marriage, gender structures, jobs, academia (in part), art, kids: all things that are dear to my heart.

And about making choices, choices with serious consequences, yet not being paralyzed by the consequences of those choices. The title of the song comes from the chorus:

You make a choice, you make a call.
You may rise, you may fall.
You will pay for what you get.
You’ve got no room in your bag for regret.

So: you make choices. They have consequences, potentially serious ones, and won’t always turn out the way you expect. But, if they don’t, wishing you’d chosen differently isn’t going to do squat for you.

I’m not sure why this is rattling around in my head so much right now. I don’t want to give my readers the impression that my life was full of bad choices, choices with unpleasant consequences, because that simply isn’t true: I’m quite happy with the way that basically all of my major life choices have turned out. (And I don’t spend time worrying about the minor ones, either!) But the meme does seem to be showing up in my environment a fair amount; one bit I may post about later, but I’m also thinking of a discussion on the XP mailing list about the prime directive for retrospectives.

Some people like the directive, some people don’t, and I’m not sure myself which side I come down on, but we can all agree that certain aspects are positive. It’s not that you don’t look at the effects of your past choices – if you’re not going to do that, then you’re not holding a retrospective! But that doesn’t mean that you should spend your time beating yourself up over bad consequences. (Or beating other people up, which seems to be more the thrust of the prime directive: don’t waste your energy on blame.) Make a good effort to learn what you can from the past, see if you can come up with a strategy to do better in some way next time, and leave it at that.

Anyways, enough on regret. I got GrooveLily’s album Are We There Yet? on the strength of that song. The album doesn’t live up to its promise, but there are several nice moments. One of my favorites, on the first track: the lyric “I’m feeling paranoid” coming up in a context where you think we’re going to get a Freud rhyme, but no: “Hanging like Harold Lloyd”. They seem to be turning to the stage more these days (or maybe they have a long stage history – I should look into their back catalog); I just finished listening to Striking 12, a charming musical based on “The Little Match Girl”. (I was amused by this Anime Music Video based on the song “Screwed-up People Make Great Art” from the album.)

Good stuff; I plan to listen to more of their music.

warriors-mavs, games 5 and 6

May 5th, 2007

Game 5 was in Dallas; the Mavs went up twenty, I decided that it just wasn’t the Warriors’ night. I wasn’t worried about them not winning the series or anything, but the Mavs were a good team on their home court, and the Warriors were obviously having an off night.

And then the Warriors started coming back. And came all the way back, and were up by (I believe) 9 points, and I was lamenting my faithlessness. (This happens to newly converted fans.) But they let it slip away at the end; oops.

Still, game 6 was in Oakland; I had high hopes for a victory there. Which were quickly dashed when Baron Davis strained his hamstring. The Warriors hung in while he was out, but when he came back, he could barely move, and you could just tell that the Mavs would take advantage of him.

Which they tried to do, but the Warriors kept it close, and were even up by 2 at the half. And then, all of a sudden, it was the third quarter, Stephen Jackson rained down threes like manna from the heavens, and in the blink of an eye, the Warriors were up by 23 points.

Which lead, unlike the Mavs’, they managed to hold on to. I still am having a hard time understanding what happened: winning the series at all was a huge upset, but winning the final game 111-86? I have no context for that.

So what’s going to happen next? We’ll find out soon if they’re going to face Utah or Houston in the next round. Am I supposed to expect the same thing to happen in the next round? I have to think that, somehow, the Mavs were a particularly good matchup for the Warriors, that the Warriors aren’t really as good as they’ve looked, and that they’ll be lucky to make it through the next round. But given what I’ve seen of them, given the way they closed out the season, I can’t say that with conviction.

warriors-mavs, game 4, fourth quarter

April 29th, 2007

In the fourth quarter, the Warriors went on a run a bit earlier, and it paid off. Dallas tried to come back with threes at the end, but the Warriors sealed the game by stealing an inbounds pass with 3.3 seconds left.

I guess I’ll be watching a fair amount of basketball over the next few weeks; this is fun! The Warriors didn’t dominate game 4 the way they dominated game 3, but the Mavs merely looked like a decent team instead of an .817 team, the Warriors were really energetic on defense, and it all worked out in the end.

probability

April 29th, 2007

A puzzle from This Week’s Finds, Week 250:

You and your friend each flip a fair coin and then look at it. You can’t look at your friend’s coin; they can’t look at yours. You can’t exchange any information. Each of you must guess whether the other person’s coin lands heads up or tails up. Your goal, as a team, is to maximize the chance that you’re both correct.

What’s the best you can do? If you pick an answer at random, you’ll get it right 1/4 of the time; can you prove that that’s the best you can do? If not, can you find something better?

streamstar launch

April 29th, 2007

I had the pleasure of going to the StreamStar launch in New York. In a private jet, no less; Sun execs occasionally take them, Fowler was using one to get to the launch, and the rest of us got to tag along.

Which was fun. Not a transcendent experience or anything: the food was so-so, there wasn’t any place to put my backpack. And I was surprised that there wasn’t any internet access: I thought the technology for that sort of thing was available, and it seems like exactly the sort of thing executives would appreciate to make more effective use of the hours in the air. Dunno. But it was very nice to be able to show up just a few minutes before the plane was scheduled to leave, and to not have to go through security: it eliminates all sorts of waste and uncertainty. If I’d been taking a commercial flight, I probably would have had to go a day earlier, and otherwise I would have had to get up at an ungodly hour; as it was, the timing was quite civilized.

What was not so great was waking up that morning with a sore throat, and having it turn into a quite nasty cold by the end of the day. I ended up lasting through about 45 minutes of the launch party; nice to see a StreamStar system set up and working in a hotel (never thought I’d see that), but I wish I’d been able to enjoy more of it. We had something interesting planned the next day which I had to bow out of, too.

Fortunately, the cold went away about as fast as it arrived: I was feeling much better by the end of the flight home. Which was my favorite part of the whole experience, as it turned out: I got to hear Fowler talk about several really amazing products we have in development. I’d been feeling a little out of touch for a while; there’s obviously been a lot going on that I’ve been missing. To the extent that I’m now starting to think that I want to hang out at Sun for the indefinite future just to see how this comeback plays out. We have a stream of products (not least of which is StreamStar itself) coming out that nobody has seen before; they won’t all stick, but I bet some of them will, and I bet some of them will create markets that nobody has envisioned.

I need to start figuring out what’s happening on the software side, too…

warriors-mavs, game 4, third quarter

April 29th, 2007

The steal and dunk at the end of the third quarter to tie the game perhaps wasn’t quite as impressive as the midcourt shot at the end of the half, but it was pretty close.

Or maybe it was more impressive: hustle rather than luck.

warriors-mavs, game 4, first half

April 29th, 2007

Not sure yet how this game will go, but it’s looking up all of a sudden. For much of the half, the Warriors couldn’t really get anything going; the Mavs weren’t doing anything too special either, though, so the Warriors stayed within 8 or so. But then Pietrus came in, and had several excellent blocks and a really stunning dunk out of nowhere on an offensive rebound, and the energy went way up and the score got closer. At the end of the half, it’s tied, in the most improbable fashion imaginable: the Warriors were down three, got the ball back with 1.1 seconds left and made a half-court shot to tie it. (Their three-point shooting sucked through most of the half, but it picked up towards the end.)

So it’s tied now, with the energy in the Warriors’ fashion. They need to keep up the energy and cut down a bit on the bone-headedness (the worst of which was hotdogging on a three-on-one that turned a guaranteed score into an attempt at an alley-oop foiled by a non-shooting foul); I’m looking forward to the second half.

warriors

April 27th, 2007

I don’t watch basketball much. I don’t have anything against the sport – it seems reasonably entertaining to watch – but the baseball season alone already provides more sports than I really feel like watching over the course of the year. And it doesn’t help that my local team for the last eight years has been bad, slow, boring, with boneheaded management.

Until recently. One trade last year gave a glimmer of hope, a managerial hire this year gave another. And then they unloaded several mediocre, slow players and got a bunch of rather good ones in return. (I have no idea what Indiana was thinking when they made the trade.) Still, I saw that as a sign of hope (doubtless soon to be dashed) for the future rather than a move that would pay off this season. And they went into a slump which seemed to confirm that.

But then they won nine out of their last ten ending the season, and now they’re in the playoffs for the first time in more than a decade. Of course, their opponent, Dallas, has by far the best record in the league, so they don’t any realistic chance, do they?

Apparently they do. The A’s game wasn’t on this evening (stupid Comcast), so I watched most of game 3 of the Warriors’ playoff series; and they just beat the crap out of Dallas. You’d never believe that the Warriors’ record this season was .512; you’d never believe that the Mavericks’ record was .817. I saw several amazing plays, and the Warriors were clearly far from intimidated.

Right now, they’re leading the (best of seven) series 2-1. Dallas is a very good team, it could obviously go either way. But I am impressed with what I’ve seen.

streamstar details

April 26th, 2007

As promised, here’s some more information about StreamStar. (Which is officially known as the “Sun Streaming System”.) It’s an extremely high performance video server, targeted at cable companies and telcos trying to move into the video space; its distinguishing features are that it can pump out an extremely high number of video streams at a much lower cost per stream and a much lower footprint (in terms of rack space) than its competitors, backed by a much larger amount of storage than its competitors. It’s a distributed system; some of the nodes (handling video ingest, control traffic, etc.) run on general purpose Opteron servers, but there are also storage nodes (Thumpers, each of which contains 24TB of disk storage plus a couple of Opterons), and one specialized box.

The specialized box, StreamSwitch (whose official name is “Sun Fire x4950”; blech) is quite a beast. Fully loaded, it has 32 10Gb ethernet ports for streaming video out, 32 10Gb ports for getting video off of the Thumpers, and up to 2TB of memory for caching video, so we don’t have to hit the disks every time we want to stream.

This is an obscene amount of streaming and video capacity. On the streaming side, we can send out 320Gb of traffic every second. Modern encoders can generate pretty good-looking standard definition video at 2Mbps using H.264; we can support 160,000 individual streams at that bitrate. (I’m not sure what the best numbers are for high definition H.264 video – maybe 6-8Mbps? Double those numbers if you’re using MPEG-2, but at this point H.264 is mature enough and has enough momentum that there’s a clear shift in its direction.) And that number isn’t marketing hype: while we do lose a little bit of overhead from bandwidth allocation issues (rounding, fragmentation, etc.), the hardware and software really is capable of saturating those ports. We’ve observed performance of above 310Gbps, which is a huge amount of streaming capacity. (Fun fact: 40,000 StreamStar systems provides enough video capacity to send a high-definition stream to every single television on the planet! So this will never be the highest volume of products – no matter how well it takes off, there’s a cap on how many we can sell…)

And this can be hooked up to 32 Thumpers, providing 320Gbps of video data coming into the switch. Again, using the same 2Mbps number, each Thumper can store around 9400 hours of video. So a fully loaded system could conceivably store around 300,000 hours of video. There are a few bits of marketing hype here – for one thing, you’d probably want to store each video twice for redundancy purposes. (Even with RAID providing data security guarantees, you’ll still occasionally want to bring a Thumper down for maintenance or something.) Even if you divide by two for redundancy purposes, though, you can still store 75,000 two-hour movies, or you can store a month’s worth of TV from 200 different channels. (The system is designed to ingest large numbers of video streams in real time, for live TV; it can ingest movies much faster than real time.) Also, we can’t currently saturate the 10Gbe ports coming out of the Thumpers; we’ll work on improving that, but I’m not sure how much it matters. Many people will be watching the same content simultaneously, so we don’t actually need the bandwidth coming into the switch to equal the bandwidth going out of the switch; and having a couple terabytes of cache (almost a minute per stream) gives us a lot of wiggle room to play with there.

So what can you do with all of this? It opens up new usage models in two different ways. For one thing, that’s a lot of storage. (768 TB; I imagine that it won’t be too long before we’re up to a petabyte!) If it’s used for movies, then you can go very far indeed down the long tail. I haven’t checked – how many DVDs have ever been released? I assume that Netflix will still have us beat towards the end of the long tail, but we can put up a good fight. Alternatively, you can use some of that storage for live TV. It lets cable companies store weeks worth of TV channels, so if you miss a TV show, no problem: it can all be sitting there on the server. (At least if the content providers will let them: as the Cablevision case shows, content providers apparently have a horror of letting people actually, say, watch TV shows when they want to.)

For another thing, the streaming bandwidth means that everybody watching TV can get their own unicast video stream. Right now, TV signals are being broadcast out: a TV station sends out a signal once, and everybody watches that same signal. So everybody is watching the same thing at the same time. Cable companies can refine that model somewhat, so different zip codes might, say, get slightly different ads, but it’s pretty far from being personalized.

If everybody gets their own video stream to play with, though, then there are a few new games you can play. For one thing, it can act as a Tivo (except with a lot more disk storage, and with the disks at the head end instead of at each TV): you can pause, rewind, fast-forward at will. (Networked Personal Video Recorder, or NPVR, is the buzzword here.) Which is great for TV watchers. For another thing, it opens up new ad models: each person can get their own customized set of ads. Which is great for TV providers and advertisers; with luck, it will even mean that the ads that TV watchers get will be a little more interesting to us, too.

All of a sudden, we’re a lot closer to the holy grail of video service: we’re not quite at a situation where anybody can watch any movie ever made any time they want, or any television show any time they want, but we’re much much closer to that than we’ve ever been before. And we can do this all at a reasonable price, one which is more than low enough to fit the cable companies’ business models. (And which is significantly lower than the price of existing low-capacity video servers.) In fact, at this stage the barriers to that holy grail seem to be legal rather than technical: we just have to convince the people who make the movies and TV shows to let people watch them!

This has been a fascinating product to work on; it’s hard to believe that I’ve been working on it for almost four years. I have a great bunch of coworkers, I’m still learning something new every day, and we have some interesting things coming up in our road map. It’s wonderful that the product is finally launching; I expect great things going forward.

we’ve launched!

April 26th, 2007

The product that I’ve been working on for the last four years has launched! I am very excited. I will blog more later; nice to be able to finally talk about this.

lego star wars ii

April 22nd, 2007

Lego Star Wars II is a very lightweight adventure game based on the original trilogy of movies, with everything made out of Lego. Mostly fluff, but a fair amount of humor, and the whole package is really quite fun.

The best part, for me: it’s very easy, and has a cooperative multiplayer mode. This meant that Miranda and I could play through it all together. I’ve never done much cooperative video game playing; I highly recommend it, especially with one’s daughter. It worked great in this game; we could both happily wander our way through the levels, puzzles weren’t too tough (and there were a few that she solved before me), and, on the rare occasions when she got too frustrated, she could drop out for a minute without penalty.

Gameplay: you wander through areas from the movies. At any given time, there are at least two playable characters in your party; most of the time, there are more than two, and you can switch between them (almost) at will. Different characters have different abilities: force-wielding characters can manipulate certain objects; certain doors can only be opened by, say, one of the robots; R2D2 can hover across chasms; the robots can’t jump up platforms, etc. There are your standard switches and the like to manipulate the environment; you can often destroy parts of the environment, as well, and you periodically encounter piles of lego blocks which you can assemble into something. You can imagine the puzzles that result: human A gets to location B, assembles something or flips a switch to let C3PO go somewhere, C3PO flips another switch, or R2D2 flies somewhere and flips a switch, eventually the whole party has crossed a chasm.

You accumulate money as you go along (used to unlock extras); if you die, you lose some of the money but reappear in the same place, and if you’re out of money, there’s no cost to dying. So an amazingly forgiving game in that regard. I wouldn’t propose this as a general model, but there’s something here that other games can learn from, I think. Why don’t all games do this? As far as I can think of, there are two good reasons to penalize characters for dying:

  1. You want to make the game harder, so you require people to carefully navigate a series of challenges without making a mistake.
  2. It’s hard to figure out what state to put people in when bringing them back to life.

The former is pretty obvious; let me explain the latter. In a typical game, you have various bits of state: location, health, ammo, items, money, etc. So, when you die, the game has to decide what state to restore you in. Sometimes, games give up and restore you to the last time you saved the game. Another common choice is to bring you back to a recent checkpoint: Halo, for example, takes this route.

But Lego Star Wars has a remarkably small amount of state. There’s no ammo, there are almost no items. (The only exceptions are hats (usually stormtrooper helmets) that you occasionally wear, looking quite silly; those get knocked off the first time you get hit, so it’s reasonable to not restore them when you die.) You do have health, but your health bar is so short (four hearts) that it might as well just restore you to full health when you die. So the only choices the game has to make are what to do with your location and money when you die. And it simply preserves the former and docks the latter a bit (an entirely acceptable choice, given how unimportant money is, and how easy it is to acquire).

I was, of course, aware of the virtues of the lack of state when doing certain types of programming, but this was the first time I’d thought of that when designing video games. I certainly wouldn’t recommend that all games go this route, but it’s a valid choice that I wasn’t aware of.

And other games impose penalties on dying for reasons other than the two listed above, for no good reason that I can see. While playing this game, for example, I was also working my way through parts of GTA III. When you die in that game, it plunks you near a hospital; you’ve lost all your guns, ammo, and armor. Assuming you’ve saved before starting the mission, there’s absolutely no reason to not reload your save game at this point, if for no other reason than to get your guns back. Which leads to the following problems:

  • The default action on death is useless.
  • It forces you to explicitly go to your hideout in the game to save before starting each mission, even if you’re near the start point for the next mission, in case you die during the next mission.
  • When you die, you have to drive back to where you were given the last mission, and then drive from there to where the action in the mission actually happens. (And sometimes watch lengthy cut scenes for the n‘th time.)

Which is pointless. Making you replay stuff in order to make the game harder is fine in general, though it can certainly be overdone, but there’s a difference between that and forcing you to repeat busywork. Why not just put in a simple checkpoint right before the start of the real action of each mission, and leave it at that? The sad thing is that this flaw is still present in later games in that series.

Enough about death; back to the regular gameplay. Once you’ve played through each level, you can play it again using a wider range of characters. (Including ones you assemble yourself by mixing and matching lego pieces, should you so choose.) Which is a nice way to extend replay value: they hide lots of stuff in each level that you can only access by using special powers or by being certain characters; so you have lots of stuff to look for the second time through the level, while also at times rethinking your basic approach (since your new characters may move in different ways than the original characters you used for the level). I didn’t play through too many levels a second time, but that was because I had other games I wanted to try; I’m sure I would have happily replayed the whole thing had I been in a bit more of a game drought. (Or had been only able to acquire video games at restricted intervals, instead of being able to buy them whenever I felt like it.)

I don’t want to claim that the game is a vast advance in the genre, or anything. But it’s quite well done, made several smart choices, and the cooperative multiplayer is great. I certainly recommend it to anybody who wants to play video games with a child, and I imagine lots of people in other circumstances would enjoy it as well.