Older blog entries for pcolijn (starting at number 65)


pphaneuf: Keep in mind that I'm an idiot, here.

At first I interpreted your post to mean that in realtime devices, like iPods, spending a long time in the interrupt handler can be a desirable behaviour. This, of course, doesn't make much sense. Rarely, if ever, do you want your interrupt-handling code to be slow (precisely because interrupts are usually disabled when that code is being executed, so you risk missing them if you take too long).

What you almost certainly meant was that in realtime systems it's important to process interrupts fast (i.e. before a hard deadline) which can lead to spending a (relatively) large portion of CPU time handling interrupts, but not because your interrupt handling code is slow, because there are a lot of interrupts and you handle them all right away.

For an idiot like me, it was easy to mis-interpret your post.


Been insanely busy. The project I'm working on has seen much faster growth than anticipated internally. Basically that's good news, but it meant there were (are) some growing pains.

It got to the point today where drheld, someone I live with, had to call me at work and ask what I wanted to do this weekend. Must redouble my efforts to leave work at a reasonable hour from now on, though apparently I'm not yet as bad as one of the other interns who frequently doesn't sleep at night, and when he does, tends to do it on a couch at the office.

The thing is during the day it's all noisy, with people coming and asking me questions, talking all around me, dragging me off to meetings, etc. At night I can think clearly and get stuff done so much easier. Some people get around this by showing up insanely early, but I'm so not a morning person...


My parents were here for a while, and they had a good time. I showed them around Google, we visited Berkeley and SF, and basically just hung out. My mum enjoyed the climate, coming from a very chilly Winnipeg.

Going to Vegas in 2 weeks, which should be interesting. I've never gambled before and I'm not particularly interested in it, but I'll play some black jack just for the heck of it ("... our own company, with black jack.. and hookers!") I anticipate being appalled at the cheesiness of it all, but, you know, "when in Rome"...

Next Friday drheld and my cube mate and I are heading over to Berkeley to a beer and pizza receoption with Joel Spolsky. Hopefully it'll be interesting and a chance to chat with Joel, but if not at least there'll be free beer.

28 Feb 2005 (updated 28 Feb 2005 at 23:23 UTC) »

So today, after about 2 weeks of downtime, the new Quest system at Waterloo came online. They even spammed us all to tell us, so I took a look.

It is, without question, the worst web software I have ever used, and possibly the worst supposedly "release-quality" software I've ever seen. To demonstrate the suck, I present you with a screenshot:

The transcript request queue

Why the block is there a freakin' queue for transcript requests? There never used to be. And, what's worse is that I have to manually sit there and click refresh. Any monkey with half a brain could write some JavaScript to refresh the page, say every 30 seconds. Or use <meta http-equiv=refresh> or something, and any RDBMS written in the last 30 years shouldn't need to queue requests for as long as thing does. Jeebus.

Worst. Software. Ever. I mean I thought Waterloo was pioneering new levels of suck with JobMine, but they've really outdone themselves this time.

28 Feb 2005 (updated 28 Feb 2005 at 07:35 UTC) »
Adventures with Karma

So I got my Karma replaced. They were actually stunningly efficient; I called, got an RMA number, sent it to them and had a new one, all in under a week.

Now, naturally, I want to put some songs on it. Previously I'd used the Java app it comes with to do this from OS X, and that worked fine, except that it's slow. On an 11mbps wireless link, it takes about a minute per ~5MB song. It should take at most 6 or 7 seconds; 802.11b (with good signal strength) is faster than 1MB per second (which is still faster than USB 1.1, which is my other alternative).

The funny thing is, I used the Java app on a friend's Windows machine at Christmas, and it was nice and snappy, so I guess Mac OS X's Java VM has super crappy networking or something. So I figure hey, this is Java, right? I'll just run it in Linux; maybe the VM there has better networking. You can actually get a Java VM for Linux/PPC from IBM.. except that when you try to run the Karma transfer program it dumps core. Great. Write once, run anywhere my ass.

So then I see libkarma. Looks promising.. except that it's horribly written, segfaults all over the place and does fun stuff like returning pointers to buffers on the stack. So then I just cut my losses and write a simple app using WvStreams to copy files to the Karma, and guess what? It doesn't take a minute per song!

I don't know why people haven't done more with the Karma. It's got networking for crying out loud! And the protocol is documented! You can definitely do some cool stuff with that, so it's surprising nobody has, especially since people have written gnome-vfs backends and KIOSlaves for the Rio 500. Anyway, my plan is to write a fuse filesystem for it so I can just mount the sucker.

Moral of the story: don't buy a Karma unless you really like tinkering.


Was super busy for a while, but a bit less so now. It looks like I'm going to have to write a bunch of Java code soon-ish, which will be, uh, interesting, since I've not written any Java code in years.

In an effort to re-familiarise myself with Java today, I've been looking at the new generics implementation in Java 5 (apparently that's the correct thing to call it; will Sun ever stop having rediculously stupid version numbers?)

It turns out that to support backwards compatibility, they've used erasure to implement generics in Java. So you can do this:

public String joinStrings(Vector<String> listOfStrings, String delim);

And then if you pass it just a Vector, or a Vector<Integer>, you'll get an error (which is what you want).

But then you can also do this:

public String joinStrings(Vector listOfStrings, String delim);

And pass in Vector<Integer> if you like. I can see that if you want old class files and old code to work on the new VM and with the new compiler, you need this kind of thing, but it makes generics considerably less useful.

Another nice tidbit is that you can never do new T(); inside a generic class, because the type information is gone, so the compiler doesn't know if the type replacing T provides a no-parameter constructor. So what you see is that in the actual JDK, the code written by engineers at Sun, they're doing nasty things like T[] foo = (T[])new Object[size];

The other way around this is to pass in a Class object of the appropriate type:

public class Generic<T>
    Class<T> tClass;
    public Generic(Class<T> tClass)
        this.tClass = tClass;
    public void Foo()
        T myT = tClass.newInstance();
        // ... do stuff with myT

Yeesh. It seems like there are a lot of these kinds of things in Java; things you want that are there, but only in a half-baked, semi-useful way.

Notice that I dissed Java without even touching on the GC or VM. Those are old, old debates and everybody has opinions on them, so whatever.. apparently that stuff is better these days, but I have no idea.


Like most, I was pretty excited to see Novell getting into this space in an open source fashion. I finally got some time today and played around with it a bit. Previously, I couldn't even get it to compile on non-2.6 systems and then I could get it to compile but it would segfault immediately. Now the latest stuff in svn finally seems to be working.

So, first off, it's pretty, but it's not really usefully pretty. IMO there's far too much graphics. This is a web app, and the web is slow. Most people use dialup. No, really, they do. Even now.

I also don't really like the fact that creating a calendar event is like writing an email, with a "to", "cc", etc. Sure, maybe you want to invite people if it's a meeting, but not always (eg. doctor's appointment). I don't know what to put there. My email? My name? My username?

Also the "new event" page feels like filling out a form. I don't like forms, and I especially don't like web forms. Give me a better way to do this, by clicking on a time in the day view or something. Oh, yeah, why does the day view have no times? Most calendar apps show you the hours of the day in day view, not just a summary of your events. That's a much more useful visual representation, IMO.

Now I don't mean to be overly critical. I realise this project just got started and of course I really hope it turns into something great; a solid web mail/calendar/contacts app is sorely missing from the open source stack, but some of the initial design decisions are a bit worrying, in that it seems at risk of becoming "yet another Horde."


I just found out that my coworker and friend Deniz Sarikaya has passed away. It came as a complete surprise to me that someone so full of vigour and so lively could be removed from our lives like this. I have great memories of the summer at Niti with her, and I don't think anyone would disagree that she brought a warmth and liveliness to the office that will be sorely missed.


Several people today, after seeing my T-shirt, asked me about Nitix. Where do I sign to get my free advertising bonus?

Sci Fi

So, Enterprise is officially cancelled, barring any fan-supported rescue. I watch it, and I'm ashamed of it, because it's so bad, so I'm not really sad to see it go. But it is a shame there won't be any new Star Trek.

On another note, iMac brought all the Firefly DVDs with him, and we've been watching those. It's a pretty good show, so my desire for decent sci-fi is being satisfied for the moment.

And for when I'm finished those.. I bought the entire Star Trek TNG series on DVD. All 7 seasons, 48 DVDs. Oh baby. Only cost me $130 incl. shipping on eBay. It's gonna be good. I was thinking it'd be fun to index the subtitles so I can search for episodes. With 48 DVDs, you want to know exactly which one contains the episode you're looking for...


So mag, being the monkey man that he is, bought a projector. It's only 800x600, but it's nice and bright and is pretty damn decent for playing Smash Brothers or Star Fox 64, not to mention watching movies. Last night we watched Kill Bill, and the other day pphaneuf expressed his undying love for me on it.


We're going to the Computer History Museum today. Should be interesting. drheld has also convinced me to see Sideways tonight, which is supposed to be good. Then there's talk of cheesecake. Mmm, cheesecake. The thing is there's this cheesecake place around here that also serves normal meals, but their meals are so big that if you go for a meal you won't be able to have cheesecake. So it looks like dinner today will be a very healthy piece of cheesecake. Meh, whatever, I eat enough healthy food at Google during the week.


It broke again. So I'm going to send it in and get it replaced, and hopefully the new one won't exhibit the same problem. But apparently it's pretty common with these things, so if you're looking for a portable player that plays Oggs, I can't recommend it.


So, after a fair bit of tweaking, I have the Debian on my laptop setup decently, with Ion as my window manager. Ion just makes more sense on a laptop, where your mouse probably sucks and your resources are probably more limited (and they certainly are on my laptop :) Although to get certain settings, I have to run gnome-settings-daemon from my .xinitrc, which doesn't seem to be mucking too much stuff up yet, but apparently it horribly screwed some stuff up for mag and drheld, so I guess we'll see. They had some weird Xresources problem I think.


I haven't blogged too much about the goings on down here. Mostly because my laptop was semi-functional and I was too lazy to actually nab pictures off my camera. But we've been having a lot of fun. Last weekend we walked around Stanford.

mag and drheld ride the, uh, the thingy

Stanford has a pretty darn nice campus, of course, with a big forest, nice grassy areas, a statue garden and a cactus garden. But that doesn't mean it escapes America's more crass customs...

You know you're in America when...

And did I say cactus garden? Actually I meant penis garden.

The rare species penis catusitis.. er sumthin (no actual penis filmed here.. don't worry :)

This weekend we went with our landlord, a very strange but well-meaning guy, for a drive around the coast and a bit of a hike. It was nice, and it was good to get out of Palo Alto for a bit. And I hadn't seen the Pacific in over a year, so that was fun.

Sunset from Highway 1

Finally, I leave you with the "inverse mohawk" with which I was temporarily endowed.

It's all the rage these days


hub: My biggest complaint about Gaim is this:

I can make Gaim almost usable if I minimise my buddy list and chat window, put them on all desktops (in GNOME), use audio notifications (notification icon would be much nicer though) and turn off window raise. Window raise pisses me the hell off, because I'll be typing in Vim or something, and a freaking window will pop up and steal focus. So I'll end up telling my friend something like "foo.bar();" Not to mention it completely disrupted my train of thought, etc.

So fine, I set everything up that way. What's the problem? As soon as a new buddy (i.e. one for which there is no tab in my message window) messages me or I double-click a new buddy to add a tab to my message window, the window becomes "un-sticky" again. Meaning I have to re-stick it, or I'll lose it among all my desktops.

If they just made it so the message window didn't steal focus when it popped up, I could stand to use the pop-up mode. But my ideal way to use it would be to have a notification icon, no sounds, no popups, and no stupidly becoming "un-sticky". Ah well, maybe someday...


So I recently installed Debian on my laptop, because Ubuntu just wasn't doing it for me (long story). I found a deb source with a PPC mplayer and installed it. Great. So I fire it up and try to watch something, but it's insanely slow and the audio is out of sync and it isn't full screen (well it is, but it's not scaled, so there's a tiny video in the middle of the screen).

After reading the man page for a while, it turns out that the magic incantation to make things not suck is mplayer -cache 8192 -vo xv -zoom <filename>. Oh, of course. That's so obvious. If that's what makes it not suck, why the fork isn't that the default!? Sigh. I mean it's not hard to detect that I have XV and use it, and it's obviously not hard to detect that I need cache because if I don't use it, it prints a message telling me to. Clue for the clueless: if you're going to print a message telling the user to turn on an option, just turn the bloody thing on already!

Totem did work out of the box, of course, but turned out to be not quite fast enough to play things smoothly. It usually is my preferred video player though, for precisely the above reason.

That was this week's cynical software rant. Be sure to join us next time :)

56 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!