March 14, 2003

I’m back to the

Filed under: Archives — mhoye @ 12:00 pm

I’m back to the shop talk. I’d love to hang with all the cool
kids, but I’m a geek. Believe me, it’s not something you do; it’s
something you are.

Seeing as I’ve got all these links pointing my way from people who
code for money, rather than just for grades, I’ve got a few questions
about newfangled buzzwords that I’d like to get off my chest.

The extreme
people stress collective code ownership in a
project, and I’m not sure how to reconcile that with the idea of
private methods or classes. I realize that the two can coexist,
but if everyone should be collectively responsible for the code, and
everyone involved can look at the code, is the distinction between
public and private really necessary? Alex, getting ahead of me,
argues that when you make an Object of any kind, you’re making it
for a client – any programmer who deals with it becomes a user of
that object, in the same “them” way we all normally mean “user”. I
don’t put a lot of stock in that, because if you don’t like the
shape of your hammer, people who work in a smithy are clearly a
different class of people than the guys who pick theirs up at
Home Hardware. But nevertheless, if OO is a way of enforcing a
modelling structure in a large project, does that not conflict
with the idea of collective code ownership?

Basically, if everyone’s on the same page, why restrict
things? And if everyone’s not on the same page, well, why not?

The more I read about Extreme
, the more conflicted I am about it. One the one hand,
the idea of designing your tests before you actually produce code
seems like a great idea, a good way to codify exactly what you intend
a swatch of code to do before you write it. On the other hand, this
” thing seems like a social-studies experiment with a lit

The “merciless” refactoring and constant regression testing,
I think are great ideas, and ideas that I don’t think have
been aggressively explored. I’ve been looking high and low for
a paper that discusses the relationship between beta testing and
refactoring – the whole Simplify And Consolidate goal looks exactly
the same in UI design as it does in XP refactoring, so it’s clear
to me that there should be a way to use user-testing results to
guide a top-down refactoring effort, but I can’t see anything on the
‘net about it. Maybe it’ll be my paper to write. Huh.

There might even be an idea in there for a new fifth-generation
language: defining a language in terms of what tests it has to

Finally, I think Carleton as a university, regardless of what
I think of the institution, might have some students here who have
a lot to contribute to that. One of my colleagues has figured out
a way of to cut GCC compile times in half, and don’t ask,
because his idea’s brilliant and I’m not telling ’til he’s published
it, and my honors project is going to involve, in part, distributing
vast, monstrous suites of codified regression testing and returning
the results very quickly. We think that between a couple of us we
can get a project to compile and do all of the related
regression testing in a fraction of the time it previously took
just to compile. Super-sweet. It’s just a shame that they had to
pick a name for the process that makes it sound like dirt bikes,
parachutes and cases of Mountain Dew are part of the future of
software engineering, is all I’m saying.

Caveat: Assuming it all works, of course. He’s got his working
– my half is still on the drawing board, but it’s a very pretty

March 13, 2003

Shaver wields a mysterious

Filed under: Archives — mhoye @ 12:00 pm

Shaver wields a mysterious power; drawing a pentacle on the
ground he calls to my weblog, speaking its name three times, and
my inbox is suddenly haunted by the legions of wayward spirits he
has invoked. I fear his awesome power.

I’d also like to know how he manages his e-mail. Christ. For
a while there I couldn’t check my mail and microwave my coffee at
the same time. I fired up Pine, and the lights in my house would
dim and flicker.

Being cited on this inter-web thing by people whose kung-fu is far
more powerful than your own is a good way to ramp up an unhealthy
trade surplus in egotism, and here in Mountain Fortress Blarg it’s
not like that fire is short of kindling. That said, quite a bit of
The Exact Opposite Of That happens here too. Here are this month’s
Distressing Search Strings as mined from my referrer logs. People
have found my website, typically this weblog, searching for the

  • Picture of Stay Puffed Marshmallow man
  • flamenco Markham lesson
  • iceberg graphic hoax
  • superman mouse pointers
  • hoist the black flag and start cutting throats
  • muhammad ali influence on society
  • ikea jerker hoye
  • Bubba’s poutine
  • photo ikea satan
  • keflex digestive system gone ruined
  • how to speak 1337
  • diagram of the digestive tract of an iguana
  • marijuana in playa del carmen
  • Funny Jean Chretien Pictures Archive

“Diagram of the digestive tract of an iguana”?

March 10, 2003

More geekery coming. Sorry,

Filed under: Archives — mhoye @ 12:00 pm

More geekery coming. Sorry, folks. I’ll stop soon, I promise.
For the time being, though, if you’ve never in your life had
something big riding on a die roll where none of the dice involved
had six sides, then you can probably skip to the end. That’s where
I start talking about movies.

I’m going to have to rant about things more often. Just this
week, my colleagues at school were discussing the relative merits of
object-oriented programming, another thing that’s presented here at
Carleton alongside UML as a kind of
magical pixie dust that you sprinkle over a software project to bring
it in on time and under budget. I was arguing that this would only
work on projects that nicely fit the idea of discretized modelling
– OOP is a technique, not a feature, and it can be just as easily
abused as anything else out there. Then they said “Turing-Complete”,
and I said whatever, being able to hammer in a screw doesn’t make
it a good idea. One of my profs pops in at that
point, when I’m mentioning that I’ve never heard a good argument for
using get() and set() with primitives that doesn’t involve the word
“paradigm”. Casually, the prof (a new guy) says “Yeah… They usually
tell you something about object-orientation, but Java breaks that all
over the place
anyway, and nobody seems to care about that
much. The best argument that I’ve ever heard is that you can #ifdef
a print statement into them, so that you don’t have to spatter them
all over the rest of your code when you’re debugging.”

That’s beautiful. Crystalline, even. Phrase it like that, and
suddenly the idea of examining a variable in a programmer-controlled
function is obviously a hugely useful one. As contrasted with
the “part of the object-oriented paradigm” argument, which not
only doesn’t tell you much of anything but points you to the dogma
while wheeling out everybody’s favorite management-speak stalwart,

This has left me wondering how many useful things I’ve been
quick to dismiss, just because their proponents have introduced
them to me with the less-than-thrilling arguments I’ve made some
effort to correctly describe here. That said, if they really were
that useful I suppose that the case-in-favor would be stronger in
the first place so I doubt I’ll lose too much sleep over it.

While we’re on the subject of red-light words
like “Paradigm”, I think that it’s safe to add “Reese
” to the list of warning
that in this enlightened age the sensible citizen
would do well to avoid. Having just recently been exposed,
through no choice of my own I hasten to add, to brief
fragments of a
so toxic that my cringing was like unto a strychnine-induced
, I can only say that exposing yourself to that is taking
your life in your hands. If I had not been given a life-saving
dose of The Fast
, I would surely have perished.

March 6, 2003

This is just for

Filed under: Archives — mhoye @ 12:00 pm

This is just for Shaver,
who’s diary reveals that he’s started reading Robert Jordan‘s Wheel Of Time
series: Mike, don’t.

I’ve been a contributer
for almost a decade, I’m a WOTFAQ contributor, I’ve
even got a spot
in the newsgroup’s Humor
, and I’m telling you that you won’t hate him for the
Halley’s Comet publishing schedule; the thing that’ll do it is the
fact that the last three books have sucked hard enough to give you
the bends.

I’ve got quite a few of the hardcovers, and you’re welcome
to them. Jordan’s burned up an enormous amount of his audience’s
goodwill in the last few years, and he’s not getting any more
of my money.

March 5, 2003

There’s going to be

Filed under: Archives — mhoye @ 12:00 pm

There’s going to be a lot of geek talk here, fearless reader,
so anybody who doesn’t design stuff or write code can probably
stop reading right now and be no worse off for it, though I am
offered a measure of comeuppance for past diatribes. Nevertheless,
this might be a veritable cornucopia of mind-numbing tedium for
the non-geek.

Though this comes as news to nobody, I apparently have no idea
what I’m talking about. My previous rants about the iterative
development model we work on here at school have been roundly
shouted down by a number of people with actual jobs whose shouting
has included some very good arguments, so I’m going to have to
change my opinion on the matter. Those arguments are included

Alex Rootham has stumbled across a clever way of avoiding the
disgusting, reductio-ad-recursion little catfights that come up
between adversarial weblogs by not having one. He emails it to me
and makes me put it on mine instead. Way to stick to the base case,

At a fundamental level, if you fail to cycle through
iterations of development, you will fail. Most of the time, this
cyclic-iterative process is not spelled out as such – nonetheless is
must be there. If I start my design, see something wrong or unclear
about requirements that I didn’t notice before, and then ask for
clarification on X, then we’re already in cyclic-iterative mode.
I’m sure you’ll agree that if I see something wrong or unclear
in requirements, and I don’t do anything about it, bad software
will result. Therefore, the only way to get good software without
following cyclic-iterative is to make sure that the is absolutely
nothing wrong with the requirements. So, each phase must be perfect
before moving on to the next phase. My contention is that this
is impossible at a practical level. Thus – I think that any “good
software” came from a cyclic-iterative model whether it was explicit
or not. Furthermore, I would say that there is generally benefit
to making process explicit rather than implicit. […]

“Design, code, notice problem, modify design” is similar to
“code, compile, notice problem, modify code”. Notice how these
steps would keep going until we get to a satisfactory conclusion –
very very similar to cyclic-iterative.

Further, Mike
has after stumbling on my site via Shaver’s rebuked me thus:

You (assuming you have no evil twin) rip on iterative
development, but you missed the point of it. The point of iterative
development comes back to the “graven-in-stone gospel” of the client
requirements, which are more usually graven in butter and sitting
in a warm room. Because, see, what happens is that the client THINKS
they need features A, B, and C. You’ll have long planning meetings
where you go into excruciating detail with phenomenal thoroughness
to find out what the client wants, and at the end of that time,
you’ll all walk away convinced you know exactly what’s needed.
So then you go off and build the app for a year, and you give it
back to the client, and they start using it and say, “Oh, well,
I guess this really isn’t what we need after all – what we REALLY
need is A, D, and F. Although C doesn’t really hurt anything,
so you can leave that in.”

The point of iterative development is to de-emphasize that first
requirements gathering by acknowledging that there’s simply no way
you’ll ever figure out what people really want upfront. You do your
best to geta good set of requirements, then build the application,
give it to them, and wait for their feedback, so you can radically
change the design of the application. And then again. And then
again. And eventually they’ll have something that’s actually what
they wanted in the first place, if they’d been smart enough to know
what they wanted.

(And I’m not saying users are stupid. They can’t know how
they want the software to work until they have experience using
it, the same way that you can’t know what bugs the hell out of
you about an IDE or something until you’ve done actual work with

So I’m going to have to change my tune, here, and give this
some serious thought. I’m glad for the feedback – I would hate
to be so spineless as to be able to cope only with affirmation,
especially considering how little of it I see in a typical calendar
year. Ideally, I’d like what I have to say to be criticized in
the strongest available terms; if my ideas can’t stand up to some
vigorous prodding, they’re hardly ideas worth keeping. Thanks,

Finally, in response to my condescention about addressing the
process as a “science”. Alex says:

The process is very scientific; think “requirement
is hypothesis”, and go from there, and it all fits in very

Now that, folks, is an analogy. Not only does it drop the ball
back in my court, but it does so by framing the process with one I’ve
previously claimed to be highly prized, that of scientific method
and rigor. So it’s hard to counterpunch here, without undermining
my previous arguments over there. Good work, A.

March 3, 2003

Today, in my Software

Filed under: Archives — mhoye @ 12:00 pm

Today, in my Software Quality Assurance class, I learned that
you can assure yourself of the quality of a piece of software by
writing all of it at the last possible minute. Counterintuitive,
you say? Not at all: it’s actually out-and-out wrong. But after a
half-dozen false starts and a 36-hour work weekend, I’m reasonably
happy with the result. I even found time to fit a game of Ultimate
and some Mardi-Gras Zydeco in there, if you’ll believe that. I’ve
even found some new bugs in an estabished product, and I’m going go
so far as to submit them and thus make the world a better place,
in some small way. I even found some bugs that weren’t already
listed in the known-bugs category; those are the same ones the great
majority of my classmates “found”, suspiciously. Not what you’d call
plagiarism, but dangerously close to it in my opinion. Certainly the
QA-tester’s version of teaching to the test, at the very least.

So after typing until my fingers cramped and eyes refused to
focus, I immediately went off to the courthouse to sign up for
Jury duty, which despite my lack of sleep was a very interesting
experience. The first thing is, there’s an awful lot of people there
for one trial. Two hundred people by my rough count. We all showed
up and registered in an anteroom, and after about twenty minutes
of sitting around, we all piled into a courtoom and sat around for
twenty minutes again.

After a surprising amount of just sitting around, the ball got
rolling with a twenty minute speech from the judge about what jury
duty is all about. Court time seems to happen in twenty minute
blocks. The next thing that happened, after an overview of the
court’s business and the reading of the somewhat-felonious charges,
the actual selection started. The way this works, I’m sure some of
you already know, is that they put all these cards with people’s
names on them in a bin, spin it like a lottery-draw and pull out
juror’s names, who line up and find out if they’re in or out.

That last step is a fascinating little psychological drama,
in which the defendant’s counsel and the crown prosecutors both
have a certain number of challenges based on the severity of the
crime. A juror may be rejected by either side, using up one of their
challenges; when the juror comes to the front, a court administrator
tells the juror to look at the accused, and the accused to look at
the juror, and then the lawyers both size that person up based only
on their reactions and their job, and either accept, challenge or
occasionally play a little game of chicken to see whether the other
person will give up one of their own valuable challenges first. The
defendant also sizes up the juror, and he confers with his lawyer
about it. All of this happens in the space of about one minute,
and watching people’s reactions to the defendant and trying to
guess the lawyer’s decisions and motives for them is a neat little
exercise in applied psychology.

A few points about the selection process:

  • If you get selected, the court makes you swear or affirm
    something that sound a lot like a comma-spattered Ecclesiastes as
    read by Yoda. The only difference between “sworn” or “affirmed”,
    as far as I could tell, is whether or not you put your hand on
    a religious text when you agreed to it. After all twelve jurors
    are selected, they go over who in the jury did which one; I don’t
    understand why, since you’re apparently locked in at that point.

  • When it’s time to do something they really don’t want to do,
    adults are exactly, precisely like children. The only difference
    is the size of the words.

  • The judicial system is putting an awful lot of faith in the
    postal system and citizens in general. At no point was anybody asked
    for ID, or indeed to assure the court in any other way that they
    are who they say they are. This looks like a monstrous security
    problem to me, giving anyone who comes into physical contact with
    the mailouts a couple of obvious ways to manipulate the selection
    process and stacking the outcome of the trial. I hope they take
    better precautions with more serious crimes than they did for this
    admittedly-minor one.

  • Jury selection is an enormous waste of man-hours, incredibly
    disrespectful of the value of a citizen’s time. I realise that
    it’s a civic duty, and that if it was fun it wouldn’t be called
    “duty”, but this is clearly an unexamined process. Opportunities
    for improving the efficiency of jury selection without biasing
    the outcome are littering the landscape, and most of them are as
    straightforward as a game of “Where’s Somebody Who’s Not Waldo”.

I didn’t get called up, much less chosen, in the first round. I
have to go back again next Monday to do the same dance again. This
time, though, I no longer have the piece of paper they gave me,
which as far as I can tell is the only assurance they have that
I’m actually me. so I’ll be curious to see how the whole thing
is administered.

March 1, 2003

I’ve come across some

Filed under: Archives — mhoye @ 12:00 pm

across some fascinating
lately, each of which deserves more attention than I can currently
give it. I promised angry, so let’s get to it.

One thing that happens a lot when you’re “in computers” is
that you get asked to fix things a lot. This is a mixed blessing;
on the one hand, it’s nice to be the go-to guy for your friends,
and if making things go wasn’t fun then you wouldn’t have gotten
into this job in the first place. On the other hand, I’m reasonably
sure that people don’t casually mention to accountants at parties
that they’re having problems balancing their checkbooks, and could
they maybe take a look at it?

That’s the reason that this
sort of thing

The thing is, there should be some sort of solidarity among
computer people, from the toolmaker-gods on down to the tech-support
weenies – not a “keep out the barbarian hordes” kind of solidarity,
but more of a “let’s not make this any harder on each other
than we have to” solidarity. Every developer out there who writes
“X_Graph_Bork Error 452” in a pop-up instead of “I’m expecting X, but
I only see Y. You can get X from…” really is ruining things for
the rest of us just to save a few keystrokes. C’mon: throw the home
team a bone, here. Clean, intuitive user interfaces maybe? Useful
tooltips? Informative error messages? You know, the kind of thing
that lets Joe User figure things out his own bad self, rather than
asking me to drop my partying and work for free?

I recently linked to JWZ’s rant about the state of video on
because I thought it was well-written, and because I’ve
had a similar experience, though I hadn’t had that exact one. But
then with the power of prophecy I was asked the very next day to
fix somebody’s Mandrake install of the very source of his bilious
hatred, Xine.

Now, this guy I’m helping is a newbie. He’s learning things
like “ls”, “chmod” and “mount”, and stuff. He’s not stupid, by a
stretch. He assumes, reasonably, that when you install a program
that it will work, or at least tell you why it won’t work
and point you in the right direction. But he’s getting absolutely
no love from this machine. Xine doesn’t work, what to do? Well,
let’s look at the error messages.

Wait, how do we even get it to load something? Oh, that’s right,
I remember this from Zawinsky’s bit. It’s the button labelled
://“. The one with the tooltip that says “MTU Browser”. Jesus
Christ, it really says that. My God. The first problem I’m
going to have here is working around an interface designed by
second-generation crack babies. How anybody can create a UI
like that and not immediately stab their own eyes out in a fit of Oedipal
is beyond me. Whoever you are, mail me;
I’ll spring for the brooch pins, if you don’t have any handy. I’m
sitting in front of a monitor, for crying out loud. There’s
acres of real estate here, pixels and UI-consistent widgets
are dirt cheap. Why would you make the interface look like
a riced-up car stereo? Grow up.

Ok, can we load something? No, of course not. Why would that be
easy? Where’s his DVD player? Xine suggests that there’s no DVD in
the current directory, nor DVD player in his machine. The current
directory is his home directory on the hard drive, so there’s no
DVD on the hard drive; gosh, that came as a surprise. Maybe I should
fuck around in /dev, the help says, rather than maybe changing the
working directory. This is very quickly escalating away from the
kind of problem my colleague is capable of, much less comfortable,
dealing with. I’m not a Linux God either, and this is going to get
away from me soon, too.

Urge to kill rising. Mandrake has called his DVD-ROM a CD-ROM, but
it seems to work right anyway even if it won’t supermount properly.
If you’ve read this far and don’t know what supermount is, that’s
cool; it’s a relatively recent innovation in Linux that lets you
push the button on your CD-ROM and have the tray come out. The
future is now, I’m telling you.

Ok, got a DVD in, I hit play, I got a “demuxer error” and some

Well, I’m stumped. What the hell is that?

I gave up at this point. I just wrote down the error
messages verbatim and went off to Google. Typing error messages
character-for-character into Google, or Google Groups, is one of the
best ways of actually figuring out what’s gone wrong in a user app,
and bar-none the best way of finding a solution fast, and the truth
of that fact stands as an indictment of programmers everywhere.

A good error message is “This program is looking for
LibraryWhatever, Version Bla. You can get that here: url”. A bad
one is “demuxer error”, just to pick an answer out of a hat. Error
messages that appear to the user should always, always tell
them what went wrong and how to deal with it. A UI that doesn’t
make me want to nuke your home state from orbit might help, too.
If only so that Joe User doesn’t interrupt me at another party.

« Newer Posts

Powered by WordPress