awol
I discovered that I am really quite serious about my displeasure with the
current state of my writing. When Saturday started to near an end I just
couldn't bring myself to write another lame paragraph about how I spent the
whole day typing in my pajamas, then ate food and went to bed.
The daily update schedule is its own reward, generally, but after 11 months
of forcing myself to spit out some nonsense just to have some text on the page,
I think it's past time that I figured out a way to have something more
interesting to say. So there'll be a brief hiatus while I get that sorted out.
I hope some of you are here when I return, but really, this is all about me.
(Anatole points out that blogger is a lying sack, or was at least mildly
untruthful, and that the link below was broken. The right one is apparently this,
but that doesn't render because of a MIME-type problem. Top Men are working on
it. I'll update the original link when that gets resolved.)
life during wartime
Orin Kerr thinks that people are making
too big a deal of the fact that this war is being watched in what's
basically real-time. I agree that it's a little unsettling, but I think that's
good: just as with capital
punishment, I think that the public's visibility into a war conducted on
their behalf is very important. I'm sure there are a lot of people 8 time zones
from me that would love to be bored of the war, too. (Yeah, I know Canada's not
in the war right now.)
I moved the two new links into the traffic analysis section, because
that's where they properly belong. I'm not really thrilled with most of this
new Clayton guy's posts on the Conspiracy, but Eugene continues to deliver.
When the military conducts itself
more
sensitivity and grace than the so-called statesmen, it makes one wonder if
we shouldn't have let the professional "last-ditch-diplomats" take over
earlier.
Anatole has justified my blogroll faith with some new updates, including a
choice bit of Fleischer
deconstruction.
The lady at Air Canada tried to convince me that their war-in-Iraq rebooking
policy only applied if I was changing my ticket "because of the war", but
she relented pretty quickly when I asked what that would mean, exactly. So I'm
off to Boston a little early.
you never get it back
I'm looking for a new doctor, if anyone has Toronto-area
recommendations to share. I'm leaving my current one partly because there is no
schedule management at all, partly because there is minimal "patient management"
— if you know the doctor is 3 hours behind, say so when I arrive
5 minutes before my appointment — and, well, it was the record management
that really broke the deal for me. In spite of telling both her and her
assistant twice during the visit, they didn't seem to believe that I'd been a
patient before. And they didn't have any records from my last visit, so I guess
they might as well have been right. I got to go back over my whole history
again, spar a little about whether or not I should be on Celexa "that long",
blah. I could go to a walk-in for that, and probably wait less.
And then it rained on me on the way back to the office.
...
Got to have a nice dinner with Tyla and Kev at Tiger Lily, and then come back
to work and actually get some good results out of llite/11.
I bought the Get Your War
On book at Indigo today, along with some other stuff. It was right next to
the books of anti-war poetry, so I didn't linger long. (I'm not really
pro-war, and I think that the US has screwed the process fifty ways to
Sunday, but I do think that use of military force to remove Hussein is likely
required, and very likely appropriate. Maybe I'll say more tomorrow, but I
spend all day talking about it, and, well, others — see below — say
most of the things I'm thinking in much more interesting ways.)
Two new additions to the links section today, and they're the first two
people linked up there that I haven't met and wouldn't consider to be friends.
But they write very well, and while I don't agree with all of their politics, I
very much enjoy the way they present their positions, and enjoy even more the
way their writings sometimes make me poke around a bit at the reasoning behind
my own positions. (Strictly speaking, the Volokh Conspiracy link points to the
writings of more than one person, but we'll just let that slide. Won't we?)
I haven't been very happy with my writing here lately: a lot of things are
being left unmentioned because I'm too tired when I get around to updating, and,
to add insult to what cannot really be described as injury, the quality
of the text I do produce isn't that great. I think I need to devote a
bit more time to it.
prime time
Phil is back from Edinburgh, which meant that I didn't have to
put on a Phil mask and trick the DLM into telling me secrets about the causes of
a bug I encountered. Also, I got to talk with him for a while on the telephone,
which is always fun. It's good to have him back.
I'm not going to write about the upcoming war today, if that's OK with
everyone. I would like to say, however, that it's harder than I expected to
find a list of signatories — or, if you prefer, High Contracting Parties
— to the Fourth Geneva Convention.
...
Went out for µPowered this evening, and had some fine conversation with
other local geeks. I was up $60 in the darts gambling before my sense of fair
play started to erode my winnings. (Gavin and I had, strangely, bet on each
other in a game that we played, and I was too much the gentleman to blow it
at the end. Ah well.) I think I ended up $20 down, but I'll get him back next
time, for sure.
I don't recall which of Gavin or Kris won the bet on the start-date of the
war, but it was a near thing.
reflexivity
This entry is missing because
$ cp content.html new.html
is not the same as
$ cp new.html content.html
I meant the latter, but my shell history tells me I typed the former. What a
dork.
heritage
I had intended to hold off until about 3 or 4 o'clock before I
started drinking today, but then I ran into some more nonsense on another test
cluster just after noon, and James was here waiting for Chris and me, and then
the next thing I knew I was at James' place playing videogames and wondering
where my first 3 beers had wandered off to. Mom assures me that I'm plenty
Irish for this sort of thing, so don't be giving me no guff.
I didn't see Deb on this trip, but I don't think it's because I'm a
loser. Which is to say that even if I weren't a loser, I might not
have seen her.
Tomorrow, back to Toronto. I miss my little woman, I must say.
mediocrity; mediocrity; excellence
I had only one concrete plan for today, so small that it was
really just a planette, and that was to see The Hunted with
Coop. Don't believe the anti-hype, it's really not all that bad. It felt like
it was edited with a heavy and perhaps somewhat overmedicated hand,
but what was left was not unpleasant. Unless you have a problem with blood, in
which case maybe you should just stick to Carrie.
The bug I was pretty sure I fixed on Friday may or may not be
fixed. I'll find out tomorrow, before I start drinking to forget in honour of St. Patrick's Day. I must be part Irish somewhere, given that my mother's name is Halligan, so I figure I'm entitled. Also, it will keep me from, you know, going insane.
It took some doing, because a lot of places close at five o'clock in this
fair city, but Chris and I returned to the house with some nice thick pork
chops, assorted vegetable matter and some fatty cow juice. Over the following
few hours, we turned them into some a-little-too-spicy, but still
oh-damn-that's-juicy pork chops, not-as-overdone-as-I-feared broccoli, a very
nice pilaf — note to self: Korean pear; who knew? — and a
crème brulée that, on its very own, justifies the continued
existence of dairy products. I only spilled a little wine, and in my defense I
think there are quite a few human endeavours where an error margin of a mere few
inches would be considered a virtual bullseye. It's not like I bombed a Chinese
embassy or something.
Kittens: still damned cute.
displacement
I woke up a little later for this morning's train than I'd have
liked — Tyla's lightning reflexes slayed the alarm clock after but a
single bleat, it seems, so I never really noticed — but because it's a
Via train it turned out to not matter very much. By the time we arrived in
Ottawa, we were running 45 minutes late, which apparently entitles me to a 50%
refund-credit thing. It's annoying to be late, as anyone who has ever done a
time-sensitive thing with me can attest, but I wasn't in an enormous
rush, so I think I'm happy with the trade.
Chris graciously met me at the new Fallowfield train station, and after some
en-route beer and wine purchases, we arrived at Chris and Kristina's lovely
house, where I got to meet their new kittens for the first time. Adorable as
all get out, which I think is why they call them "kittens". I apparently made
quite an impression on Saba, because he sat on my lap for an extended period of
time. Chris says that this is pretty much unheard-of, and I think that if he
were going to lie to me he'd do it about something more important. Regardless,
I squandered that goodwill later by hissing to get him (Saba, silly) and Miso
off the table later in the evening, so it's of little historical interest.
Between the waxing and waning of my friendship with Saba, there was a lot of
snow-oriented fun. About a dozen of us trekked out to Bruce Pit, a short walk
from — but, as you will hear, a longer walk to — the house
in question, where we proceeded to fling ourselves down washboard-like hills
until the combination of fatigue, deep-muscle bruising and dangerously low
blood-beer levels drove us back to shelter. Well, some people drove back to
shelter. I wanted to walk back and take the "shortcut" through the snowy park,
because it was a nice night, and because I thought it would be fun, but mainly
because I have the sort of foresight that may well someday lead me to attempt a
mid-December infantry invasion of Russia. The trip back, distance-wise, was
quite bearable; definitely under a kilometer. As the crow flies, it represented
a significant savings over our previous route. Given that we were unable to
find anyone in the "shortcut gang" with the gift of flight, however, we ended up
trudging in thigh-deep snow for about, oh, a decade. These are my thighs I'm
talking about here, so probably a good 80cm of snow. If you ever find yourself
in desperate need of lower-body fatigue, drop me a line; I have a great
source.
The rest of the evening was food and chatter and beer, all the ingredients of
a wonderful party. Chris-and-Kristina's house is truly lovely: wonderfully
decorated and furnished, immaculately maintained and, of course, nicely catered.
Some day I'll grow up and be able to have nice things like this.
I wrote some code on the train, just a few hundred lines, because I finally
had a few hours with a computer and without the seemingly-everpresent
distraction provided by truly world-class test flailing. It's good to be back,
or something.
damage control
I slept late today, but not too late. I'm going to try to get
llite/11 at least reporting useful results, but not too hard. I'll put some
work together to do on the train tomorrow and on the weekend, but not
too much work. I'm going to get on an early train tomorrow, but not too early.
I figure I'll give this balance thing a decent shot, see what it can do for
me.
Intelligence analysts once assumed that terrorists organize in isolated
cells. But [...] the
active structure resembled that of an IBM project team.
I thought the ads linking drug use
and terrorism were a little far-fetched, especially coming from a government
that poured money and training into their designated terror bad guys (Taliban,
and to some degree Iraq) for decades. But the idea that file-trading
funds terrorism is mind-boggling. They can't even show that the
commercial piracy operations are funneling money to Evil Men, and it's
a little amusing to watch them flounder around suggesting "public service
commercials" — well, I guess the RIAA is a part of the public too, in a
way — to "highlight that alleged connection between piracy and organized
crime". It's mainly sad, though. "If more American parents understood the
connection between the pirating of intellectual property and organized crime",
Mr Wexler, they'd realize that the biggest societal risk present when their kids
pass around the digital equivalent of a mix
tape is that Kazaa or some other piece of loser software will send piles of
personal
information floating around the net, helping the growth of identity theft. Hey,
this tenuous-link thing is kinda fun. Maybe I should run for office.
I think they do themselves and the public a disservice by distracting effort
from the genuine intellectual property violations present in commercial piracy
operations, but I'm not really sure that I mind anymore. Someone has to be
their worst enemy, and I guess it might as well be themselves. I mean, I have
always made my living off of the strength of intellectual property rights, and
they're totally failing to generate sympathy in me. Can they imagine
how ineffective they must be with people who only see IP rights as the reason
they have to pay $20 for a new CD, hundreds of dollars for prescription
medication, or $30/month for cable or satellite signals that are "out there
already"?
Hahahahahahahahahahaha.
Hahahaha. Ha. ... *sob*
Jamie, dude, I feel
for you:
: ptlrpc; history | grep -c "killall.*gdb"
27
...
I cannot believe how badly the last 6 hours of my life have been
wasted. Even my Halo break didn't go well, but that is nothing
compared to the utter squandering that was my evening. I can't even write about
it. Augh.
not just a river in egypt
Let's just not talk about work today, OK? I got to do some fun
stuff, sure, and I managed to beat the recovery test back into submission, but
the rest of it was just purest pain. Frosted with agony and served with a
frustration coulis.
Instead, I'll have one of these weird blog-conversations with Hoye. (This will make no
sense in a few months, because I have no idea how to link to a Hoye-blurb in a
future-proof way, but don't worry about that. Live in the moment.)
You don't make a method or a field private because you don't trust the person
using your classes. It doesn't matter if they have the source or not, it
doesn't work. "#define private public" and "#define class struct" before your library's headers and all
of the sudden the parents are out and the liquor cabinet was mysteriously left
unlocked. It's like const: a way of
setting policy for the use of your objects, in such a way that the compiler can
provide strong hints. You make something private because it's not suitable for
general use; people who want to use the class safely — which you could
usefully define as "in a manner which permits the class to perform its functions
as documented"; the kooky design-by-contract
Eiffel folks might like that — will play by those rules, and the compiler
will help them. (In some runtime environments, such as Java's, data hiding is
used as a security mechanism as well, but that's largely an extension of the
same concept: it's very hard to write security-safe code without controls on the
way your classes can be poked and prodded, and for many classes, the Java system
is relying on it keeping its contract to avoid a breach of the whole system. I
don't care if that didn't make sense, because it's not central to my point.)
Good code ownership isn't just about setting up fences around the squishy
parts of your data structures, though. It's about making sure that the code is
properly factored, and designed, and tested, and documented, and that it
interacts in a polite and friendly way with the other parts of the system.
Collective code ownership disperses that responsibility throughout the
development team, meaning that you can and should fix all those little
things in all the other people's code that just aren't right. It also
means, along with pair programming, that you develop experience with and
exposure to lots of parts of the software. This means that it's easier for you
to work in "other" parts of the code, but it also means that it's easier for you
to design "your" bits so that they fit well with "other" bits.
(I say "other" and "your" with the quotation marks, but I only half mean
them: while everyone owns the code, people will often work mainly on one part of
it. That's not a failure of collective code ownership, though; everyone on an
Ultimate team is responsible for the team playing well and having fun, but some
people will handle
more, and others will usually show up in the
cup.)
Pair programming is a fantastic thing. It's one of the things I miss most
when I'm telecommuting, and even then I try to find excuses to talk to people on
the phone while I'm coding and debugging. When I'm on the ground with someone
else — even when I'm actually in the air, actually
— I'm a lot more productive, and I think it's the case for my coworkers,
too. Talking to someone about what you're doing, having them that you really
typed "foo++" when you meant "bar++", the presence of an extra brain and pair of eyes that
can stay a level or two above the syntax details looking for things like
repetition and opportunities to refactor — priceless. Just being able to
toss the keyboard to someone else when you find yourself rewriting the same loop
condition over and over is enough to make you a believer, I think. This is an
OK
article about pair programming. You may not find the "interpersonal
interaction" bits interesting, but the benefits are very real. I've found that
students and new grads are often reluctant to get into it because they have bad
memories of group assignments. It's not like that. I promise.
I think the real money is in DoTheSimplestThingThatCouldPossiblyWork
and YouArentGonnaNeedIt. For
me, I think that's because I sort of "grew up" as a software person with this
awed reverence for The Right Design, and didn't realize until much later that
you can't design a system really well until you've built it. So the trick, I
think, is to move the code towards the design, and then move the design towards
both the code and the (constantly refining) goal, in lots of little steps. But
you've all heard
this before. I really want to believe that a lot of these things apply
outside of software, but I may never find out because I'm sure I'm driving away
all my non-geek readers.
I remembered what I had to do today: get tickets to Ottawa. I did most of
that, but now I'm not sure that I actually purchased them. I guess
I'll find out when I go to pick them up tomorrow.
...
It's a little after midnight — OK, it's about four hours after
midnight, fine — and I'm still chasing my tail. It's not as easy as it
could be, because my tail is caught in the jaws of "llite/test/11", and test/11
itself is being yanked all over the map by hardware and software failures of all
kinds. Maybe I'll take an early train on Saturday, so that I'm not filled with
blinding fury when I reach Ottawa. I'm not invited to the ballet, anyway.
contact with the enemy
The first part of my plan worked very well: I was perky and
productive and fixing bugs all over the place until about 9AM. At that point, I
realized that I was going to have to take a nap if I was going to be both
effective and polite during the day, so I went home and slept for two hours.
Which is 90 minutes more than I had planned for, truth be told, but for some
reason the single polite chirp of my cell phone wasn't enough to wake me up.
After I woke up, my day degraded into chaos. I spent about 10 hours involved
in setup for a test that should have been set up and running days, if not
months ago, during which I actually performed useful work for 10
(fixing some configuration scripts) plus 5 (fixing an honest-to-goodness bug in
recovery) minutes. By the end of the day, I was clinging to the last shards of
my veneer of implacable professionalism. The kid gloves are coming off
tomorrow, because my time is worth more than my reputation for pleasantness with
these particular people.
My driving instructor just sort of showed up today, apparently expecting me
to have been ready to go out with him, even though we had had no communication
in a week. Specifically, we had had no communication since I responded to his
message about rescheduling my last session, and his suggested time slot for that
— which I had indicated in my message was just fine — had just
slipped on by. I was pretty frazzled by that point, so we just booked a session
for next week and I sent him away. Nobody wanted me behind the wheel of a
car anyway.
...
More time has passed, and has mainly been wasted. I'm supposed to be writing
some license text for a contract we're otherwise ready to sign, but I think I'm
going to do that tomorrow, because right now the combined effects of fury and
fatigue have caused a state of intellectual near-paralysis. Oh yeah: we
released our beta today. The release notes are full of scary warnings about
recovery, because most of my choicest fixes missed the train, but all in all I
think it's a pretty good beta. The next one will be unbreakable, let me tell
you.
Tomorrow, really need to [ed: I fell asleep at this point, last night. I
don't know exactly what I need to do today, but I'm sure it'll come to
me.]
judo chop!
My sleep cycle and I are still not getting along. The insomnia
or time-shifting or whatever is very strong, and very aggressive, so I've
decided to use its strength to my own advantage: I'm not going to sleep tonight,
and then (hopefully, sweet heavens) fall asleep like a narcoleptic who lost a
Nyquil drinking game. Speaking of narcolepsy, it appears that you can get Modafinil on
the web, and it would seem to be a legal import here. But that's such a
fantastically bad idea. I can already hear Hilary frowning at me. (And man,
the email I would get from my Mom!)
I had to check yesterday's entry to remember what I was working on then, but
I did indeed get past the problem with the underlying filesystem. I'm sure
you're all thrilled for me. Today I fought with computers that didn't want to
come back up after I put them down — and this is what I do,
testing-wise, so it got old in a right hurry — and some testing missteps
at another site, but things picked up in the end.
I need some better headphones, and I need to make the sound card on the
machine at work, well, work. I should also buy a new keyboard, and probably a
headset for the desk phone. I'm sure I'll have time for that really soon. Uh
huh.
Simon Weijgers sent along a link to an interesting article about OO,
in case you didn't get your fill yesterday. I also had cause to visit WikiWikiWeb again today, and I got lost for an
hour or two in various fascinating software development topics. You can have a
good time there, if you let yourself.
I have yet to find anyone who doesn't think this whole "freedom
fries" thing is nonsense, but I'm sure there are some out there. I think
Tyla had a good take on it, and I'm not just saying that to make up for staying
at the office all night:
If they are that pissed at France and want to do something really
symbolic, they should return the Statue of Liberty. At least that would be an
actual comment on their country's ideals, rather than the needless renaming of
tasty but irrelevant foodstuffs.
Now, I think this is mainly the result of a few nuts having the authority to
deliver their clever culinary riposte without needing any sort of meaningful
consensus within their branch of government. And that's probably for the best,
because, really, who wants to risk a filibuster over every change to a cafeteria
menu? I bet the Representatives' press secretaries will be laughing about this
for a long time to come, once they finish destroying all records of their
employment.
tooth and nail
I need to kiss and make up with my sleep cycle, so I'm going to
bed after I finish with this. And then tomorrow, I'll get up and walk to
work, and fix all my bugs. And then I'll wake up for real and see that I've
slept through my meeting. You read it here first.
I thought I was supposed to have an in-car lesson today to make up for the
one that got snowed out last week, but I never heard back. Even checked the
messages. Ah well, I guess I'll see him Wednesday, though we didn't set a time
for that.
I fixed some stuff today, and tried my first real failover with the new
recovery code. Was looking pretty good, until I got spanked like a red-headed
rented mule by some infelicity in the loop driver. Or ext3's data journalling.
Or something. I don't really know, but it sucked. I'll use a different storage
system tomorrow, and it should go much better. I really should have done that
after the first hour spent debugging it, but I spent a while fearing that it was
a subtle bug in my code — heaven forfend! — and then after
that thinking that I could, you know, fix it with some configuration changes.
Error.
Tyla made a great dinner tonight, but my appetite sort of disappeared.
Sucks. City is showing Gunmen,
and it's not any better than it was last time.
maybe you should put some shorts on or something, if you
wanna keep fighting evil today
I didn't get an angry call from Phil, but the patch did have some problems.
All better now, and yay for me. I think I had extra hacking luck because I
didn't get out of my PJs today.
Brined some chicken breasts overnight last night, in a rare burst of
forethought, so I made some seared-chicken sandwiches for myself and Tyla for
dinner. Mmm, much yum. The boyz also had a good brined-food experience, just to
keep us in sync. (For posterity, the rub in question was: 1 tbsp each of cumin,
chili powder and curry powder; 1 tsp ground black pepper; 2 tsp brown sugar. I
think we're going to try it on tuna tomorrow.)
Madhava came over and the three of us watched Le pacte des loups. I drifted in
and out a bit, but it was pretty good. Felt a little long, at 2:32 — this
time, I might be interested in seeing the someone-other-than-the-director's cut
— but it was pretty fun, and the visuals were great. Madhava said that
some review described it as the product of an explosion in a genre factory, and
the facts would certainly bear that interpretation.
I chatted with Andrei and Vlad about game design some more, railed
against the NIH syndrome that
plagues game-development companies, and registered for an
online course in terrain rendering. I almost signed up for a
cocktail-party cooking class as well, but then I remembered that I'm going
to be at Coop's
toboggan party on the weekend. Maybe the knife skills course, instead.
Hoye is quite right to view OO as a
technique, and not a feature, and it's a position I've had to argue more
than once in my days as JavaScript
evangelist. I'm not sure that being able to #ifdef logging is the best argument I've heard for use of
accessors, but I've always been a bigger fan of the whole meta-object
protocol game than most other people. Especially if you restrict that set
of "other people" to those that program, but have never programmed anything
significant in a Lispy language. AspectJ™
and other bits of Aspect-Oriented
Programming might interest like-minded individuals; logging is one of the
"cross-cutting" pieces of software development that's often used as an example
of a good A-O candidate.
reunion and celebration
We ran a little late, as we always do when I'm involved, but we
still arrived early enough that our Mission of Cheese was successful. It was
wonderful to see the family again, of course, but I really need to practice my
drinking if I'm going to keep up in the future. Crikey.
Then we got a drive home with Chad and Jen, including a wonderful
demonstration of cool-headed collision avoidance provided by Chad, and I did a
little work on a
bug that Phil reported to me this morning. It fixed another longstanding
bug as well, so I'm generally happy.
I'm trying to decide if I should test that patch, sleep, or watch the
overdue copy of Brotherhood
of the Wolf that's been sitting on the coffee table for 9 days now, mocking
me with its monkey
pants. I suspect that I'll end up falling asleep while watching the movie,
and wake up tomorrow to an angry phone call from Phil about the patch. Who says
you can't have it all?
Speaking of movies, I was thinking that I'd try to find time to see The Life of
David Gale, but now, well, maybe
not. Zero. Huh.
return of the thing
I went into the office today, for the first time since Coop came to visit,
and it's a much calmer place now. The renovations are complete, and the new
lighting is nice. My desk and chair combination still suck, but I think I'll be
able to fix that next week. Neither Chris nor Fixy were there, because of a
late-night maintenance operation last night, so I'll have to wait until Monday
to make sure that they haven't grown extra noses or anything.
I walked to and from the office — about 35 minutes each way, not
counting the stop for dinner on the way home at 23h30 — and it was
tremendously pleasant. I need to try to make a habit of that. If it were
fattening or bad for my sleep cycle, I'm sure I'd have no trouble.
Today's diff was only about 300 lines net, but I did manage to remove more
than I added yet again, keeping the streak alive. It can't last, but it's fun
so far. Phil helped me sort out the last remaining problem in his refcounting
work, so we're in a pretty good position now with respect to the architecture we
need to have in order to deliver 1.0-grade recovery while that release-train is
still accepting passengers.
Tomorrow is Papa Ross' 80th birthday party, so I need to do some compensating
for last night's 4-hour sleep accomplishment if I'm going to be able to keep up
with my family. 'night.
makes perfect
I wrote the other day about
the various changes I was juggling, and how they were all proceeding in lockstep
towards an as-yet-invisible point of completion. I'm not done yet, quite, but
I'm about to fire one hell of a warning shot across the bow of our
software:
21 files changed, 312 insertions(+), 1106 deletions(-)
Even if you're one of the folks whose eyes glaze over every time you see
something here in a monospace font, I want to draw your attention to the fact
that I'm fixing bugs while removing hundreds of lines of source code. I don't
get to do that very often, but when I do, man, it's a great feeling.
What the hell, I'm going to geek right out — normal people can skip
ahead to the ellipsis, and I won't be hurt at all.
Some great discussion about iterative
development over in Hoyeland. Alex and the
other other Mike have said most of
the things that I wanted to say, but a few things remain to tempt me.
Most importantly, for all the times that I've been involved in projects that
tried to do non-iterative development, I've never seen any that did.
You always end up needing to make changes, unless you're building software
faster than any outside factor (competitive landscape, customer needs, marketing
whim) can change. I've never seen interesting software completed that quickly,
and I've worked with some pretty sweet teams. So now you have two choices:
"fall back" to iterative development, or start a new waterfall
attempt. (Alex and Mike and Mike and I are going to chuckle about that link for
a fair while, I think.) At Zero-Knowledge, I used to tell people to treat
software change like rain. You can either spend your days doing rain dances to
keep it at bay — design once, then never look back — or you can buy
some bloody umbrellas and learn to live with it. Maybe plant some flowers.
The other problem with doing waterfall is that you're fighting a losing
battle against time. You do a pile of design up front, it takes a month or two,
you write code for 6 months of a 4-month schedule, polish and document and box
and ship, and now, hey, look at that: you have software that's targetted at a
10-month-old market. Of course, if your market isn't totally moribund, it's
moved a little bit in that time. Your customers need to integrate with new
things, your competition has released some things with shiny new features that
your sales guys have to answer awkward questions about, and, huh, who knew that
you'd need a client for OS X? Oh, and of course, you were late. So now you
really need to nail the next iteration, so you end up with a more
ambitous — pronounce that "long and fragile" — design
cycle, a development phase that's even more overblown, and you end up losing
ground on the market by even bigger chunks.
I'm not sure if I believe in all of the things that XP would have us do, but I can buy
all the way into short, sharp iterations with frequent review of what would be
the best use of development effort now. (If Phik wants to send me to Italy to find out more, I can probably find
the time to pack.)
SCO suing IBM
about Linux is just pure comedy gold. Even ignoring the fact that SCO
bought Caldera — yes, they named their company "smoking crater" —
and is now suing IBM over putting things in Linux, the basic situation is that
SCO is bringing a knife to an intellectual property gun battle. My current
theory is that SCO's outside counsel pushed them into this, in order to get more
money out of SCO than the bankruptcy proceedings would provide.
I'm not the CEO of Red Hat or anything, so maybe I'm just missing something,
but I really don't see how Sun could produce a
non-GPL'd version of Linux.
...
OK, I'm done now. I also went driving today with Alasdair, who was a very
patient passenger, a source of calm wisdom about his car — did you know
that the Mustang I'm taking lessons in can actually creep forward just on idle
revs, without stalling? did you know that Alasdair's Honda can't? — and a
pleasant dinner companion. He even tried valiantly to remain non-smug about the
play of the Leafs the other day. We both miss Alyn.
I don't think I hurt his car too badly.
(This is getting long now, no? Stay with me: this next one is really
important.)
I should have written about this long ago, but I'll try to make up for lost
time now. Back when I told people that I'd
like people to give to charity in lieu of giving me birthday presents —
and this was, I swear, intended not to solicit such things as much as to deflect
people who were already intending birthday-gift silliness towards more
reasonable practices — um...that sentence just totally got away from me.
Anyway, Mehmet, about whom this paragraph is ostensibly written,
combined big-heartedness and athleticism in his usual way, and risked his very
life and limb at the Matterhorn Matt
All-Night Charity Ultimate Tournament. By all accounts, a great time was
had, and I'm touched that Met chose to participate "in my name" — I was,
in fact, touched some time ago when Mehmet first told me about this. I don't
know what I did to deserve this sort of thing, but it must have been in a
previous life. All I did in this one is drag him out to arcades at
very academically-questionable times and forget his birthday with a
regularity that would make the USNO blush.
co-optition
My driving lesson was cancelled today. Ah well. It's not like
I don't have things to fill the time. And while I'm sure that I will, someday,
be perfectly capable of handling a rear-wheel-drive vehicle on streets with 15cm
of fresh snow, I guess it's reasonable for that to not be on the second
day of in-car instruction.
Phil and I like to work together, because we have a psychic mind link which
allows us to coordinate our efforts with the precision of an atomic clock.
cvs server: [10:40:40] waiting for pschwan's lock in
/cvsroot/lustre/lustre/include/linux
cvs server: [10:41:10] obtained lock in /cvsroot/lustre/lustre/include/linux
cvs server: Up-to-date check failed for `include/linux/lustre_net.h'
cvs server: Up-to-date check failed for `include/linux/obd_class.h'
[15 more]
S'ok, pal. I didn't have 400 lines of changes in my tree, or anything.
...
My last in-class session was today, and it was...well, it was. Wasn't bad,
wasn't great, you know, the way most things in life are. They ran a video of
"National Driver Test" that CTV and YD did a decade ago, and of course we all
knew the right answers. So now everyone leaves that room thinking that they're
near-perfect drivers, which is just what we need. I didn't bother to ask about
the fact that the video was asking us to describe how we do drive,
rather than how we're supposed to drive, and that it was possible that,
you know, we didn't likely have an established driving style, since only three
of us had more than one in-car lesson. Then they showed us another "drunk
driving is bad" video, and asked us to fill out a feedback form. What? They
were asking for it.
For the record, you know, I offered to do this job for them back
in January of last year. I'm not really bitter, but it would make reading threads like
this even more entertaining. The Wolfpack guys (and gals, I presume, though
I never met any of their female employees) are pretty smart, and they really did
a much better job designing their server software than I have been led to
believe is common in that industry but I have this niggling suspicion that they
might have won a little bit more if they'd had a little more in the way of state
machines and a little less in the way of inter-thread communication. I mean,
I'm working with a very limited set of data here, and I'm not one of the "state
machines are what smart people use instead of threads" crowd, but still: that's
what my gut says. Maybe I'll have to hit Austin and visit a pub with them again
and see how very, very wrong I must be. (I understand that AC1 did a good job
with their server architecture, though they ended up not using most of the
fancier clustering and balancing features, and ran roughly over the shoals of
not having enough flexibility in other parts of their engine. Not the first
time that song's been sung in the software space either, of course.)
(No, I had no idea how I was going to get Tyla to move to Austin.)
I still don't understand airline pricing, but I did have a good time reading about
it.
For dinner, I made some pork chops and pasta. Tyla asks that we never ever
prepare pork again without brining it, and I think that's all I need to say
about that meal.
don't turn your back on it
I didn't get to sleep until, uh, nevermind last night, and then
I started today with a mildly irritating conference call, so this was looking
like a Tuesday of unusually sucky proportions.
Right after that meeting, I got on a much better meeting where we figured out
the rest of my
work for LL 1.0. Well, the rest of the recovery work. You can see
that I'm not doing all the work, but you know. I'll feel most nervous
about it until it's done.
I like game design. It's fun. Even if I never actually get to work on a
game — and these days it feels like I might never play a game
again — it's a wonderful intellectual exercise, and it stretches my brain
in different ways than the other stuff I do. In a parallel universe, where time
has no meaning and I can plan my way out of a wet paper xylophone, I'd be off to
the GDC again this year, to pay special
attention to the Experimental
Gameplay Workshop and everything that Doug
Church comes anywhere near. Ah well, maybe next year.
More in-car driving lesson stuff tomorrow. There's a lot of snow on the
ground, so it'll be pretty exciting. By which I mean, of course, that it will
be a fantastic opportunity to improve my defensive driving skills, and that
there will precisely zero skidding about and giggling. Alasdair, maybe
it's best if you go back and unread this paragraph.
New MGB
album out today. Consume, my friends; consume with all your consumptive might.
I'm sure the rest of his old band did a wonderful job, and I quite enjoyed their
performances, but this solo effort makes it pretty clear who put the "Matthew
Good" in "Matthew Good Band".
I'm about to start reading the first book in the Wheel of Time series, which I
have been led to believe will cause me to hate Robert Jordan —
specifically, his publishing non-schedule — with great fury and passion.
I'm already a patient fantasy fan,
so I think I'll be OK.
I've actually read a few good books in the last few weeks (Pattern Recognition, Down
and Out in the Magic Kingdom, Humans),
and I should write more about my thoughts on them. Or, you know, keep meaning
to for a month or two and then just forget about it once the moment has passed.
I can play it either way; crazy like a fox.
let's go shopping
I've been sort of schizophrenic at
work for the past mumble days, popping back and forth between different
parts of the stuff I'm working on, as work on one change points out a need to
get a little farther with another piece. Now I'm about 80% done with five nice
changes, and I have nothing checkin-able to show for it. Frustrating, and it
doesn't make dealing with my current up-and-down focus-swings any easier. But
soon I'll be able to land a nice set of changes, and feel all good about
myself.
Working on recovery stuff is weird. My job is really to make sure that
relatively infrequent occurances don't make things hurt too badly. It's hard to
measure incremental success — I don't get to make things a bit faster or
bigger or more efficient: either we survive a failure or we don't. Also, as our
software gets more stable, it turns out that it gets harder to validate my
changes. I hadn't expected that.
Hoye raises a
good point about useful diagnostics and error messages. One of the
interesting parts of the work I've been doing over the last week is cleaning up
our recovery-related error-reporting story. The core issue is balancing two
things:
- When a machine enters recovery — and, hopefully, exits unscathed out
the other side — we want to tell the administrator a fair bit about the
failure that occurred, what we're doing to fix it up, and how that process is
proceeding. In many cases, these diagnostic messages may be the only forensic evidence
available after the fact to help figure out what went wrong, so the
compleatist in me needs
to be indulged. But:
- When you have a thousand nodes cough and sputter due to a single event,
such as a critical server taking its ball and going home, what was once
considered "helpfully thorough" quickly becomes "an unbearable onslaught of
logging data".
I'm erring on the side of verbosity right now — I know, that must be
very difficult to believe — but I have this feeling that I need to swing
back the other way a fair bit. Is it OK to log a string of extremely concise
description and just expect the administrators to learn to decode it, or hand it
up the chain to their support contact? Should I be providing tools to aid in
the interpretation? Is there any way I can make this a configuration problem,
and thereby stick it on Robert's plate?
Whatever the answer is, I bet it's not this:
| <Isidien> | msvcprtd.lib(MSVCP70D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in GameObjects.lib(Player.obj) |
...
As if that weren't geeky enough, I just have to say something about
Judy. Zach pointed me towards it the other day,
and the "shop
manual" is a great example of technical documentation. I'm sure none of you
like data structure stuff as much as I do, but this is my diary, so nyaaaah.
(Confidential to Kev: I still love you! I haven't even thought clearly about
Halo in what feels like an eternity. Soon, though. So soon.)
brown paper bag
We pushed out a new interim release of Lustre yesterday, only
hours before Phil discovered an embarrassing bug in
the recovery code. I'm not 100% sure I caused it, but it did reveal a
significant gap in the test set I'd been running. Fixed, but still
shame-inducing. I think I'll pause my part of the rearchitecture work —
letting Phil continue to kick ass, of course — and just bang on recovery
with a test-mallet for the rest of the evening.
After we go watch Madhava's concert. I'm sure it'll
be wonderful, even if it is in a church.
...
The concert was quite nice, though we showed up ten minutes late. See, I was
showering, and we ran out of hot water, and...never mind. We were almost on
time. While we were there, it got cold out, and in one heck of a hurry.
Otherwise-pristine pools of water and slush became mirror-like patches of purest
glazed treachery. And I forgot my hat.
I get to eat the pie soon, though I'll have to brave Hilary's company.
Normally, that's not a big problem, but right now she has some lung thing that
may turn out to be whooping cough. Mom sent me my vaccination info a few weeks
ago, so I guess I should dig that up and find out if I'm going to die for the
taste of lovely pie.
my piehole?
I mentioned brining in the past, and Phil is a fan, but I really
want to drive this home. Even if you're not a fantastic
cook, it is nothing short of imperative that you bring this technique deep into your heart. Cherish it, like a fond memory or a childhood toy.
To start with, it makes stuff taste better. I mean, you get to put salt and
sugar and seasonings right inside the food, where they can mingle
productively with the flavourosomes and other important parts of the
chowganism. This is really reason enough to play the brining game, though it
is possible to misapply brine in such a way as to turn tender, lovely,
defenseless shrimp into Dark Warriors of Sodium. You won't do that, though,
because you're smarter than I am, and therefore won't brine a handful of shrimp
for 24 hours. (Well, you sure won't do it now.)
More important, though, is that brining puts water deep into enemy
territory. Moisture mismanagement is the easiest way to screw up a dish, in my
dish-screwing-up experience, and brining is like having a second chance in this
regard. Like having a scratch monkey
perhaps, only not quite as morbid. You can do things like cook your turkey to
an internal temperature of two-hundred-and-stupid degrees, or develop a very
crisp outside on pieces of chicken, without having to call for pizza. Plan ahead by a few hours, water+salt+sugar, bingo. You'll thank me later.
I burned my fingers cooking today, mainly because I really need to
concentrate pretty hard to remember that the lid from an otherwise innocuous
saucepan may be some 375 Farenheit degrees if it came out of an
appropriately-hot oven recently. I was not concentrating hard enough, it
seems. Ow.
Tyla made a pie today. It looks like it teleported in straight from the
Elemental Plane of Yummy. I can't eat it, because it's for sharing with
friends tomorrow. Friends and sharing both suck, I just decided.
I think it's safe to say that Tyla and I both think we should cook more
often, and perhaps more ambitiously, but I don't think either of us are this crazy. And
that's a damned shame.