I finally got around to purchasing a bike this weekend. Yay me!
I had forgotten how fun it is to blast between lanes on gridlocked
streets at 40kph. Whee! In other news, I'm in pretty bad shape these
days, having not biked in a while. Need to work on that...

Notifications

Not in the programming sense, but in the UI sense. IMO, notifications
have become public enemy number one. There are way too many of them,
and they're almost all for stuff I don't care about.

My music player just started a new song? You know what, I know
that! I can bloody well hear it! No need to pop up a stupid, ugly
yellow box in my face! My software update is complete? Who the fuck
cares? Such-and-such program that I manually started needs
to access the Internet, and you need me to click "yes"? Would I
have started the stupid thing in the first place if I didn't want
to use it?

No operating system is immune here: the above 3 examples came from
Linux, Mac and Windows respectively.

The thing is, notifications are distracting to the user. If you're
going to disrupt the user's train of thought and get in the way of
what they're doing, it better be for a damn good reason. "Your battery
is almost dead," for example. If I don't know that, my computer will
die and that will be even more annoying than getting the notification.
But if the notification does not help the user avoid something more
annoying than the notification itself, it's not worth it.

BTW, Microsoft has an item about notifications in their new HIG.
Though it recommends them for "non-critical" information;
I strongly disagree with that. It does, however,
say to use them "judiciously," whatever that means. As pphaneuf says, you can tell
something is easy when it's done often, badly. Maybe vendors should
make APIs that do annoying things like notifications exceptionally
difficult to use :P

Shiny Thing

I became one of those people with a vanity domain recently. You can
now reach me at caffeine@colijn.ca.

The MTA (aka the NY transit people, aka
the only people I know who actually use a .info TLD) hate me. The past
few weeks, the train I take home (the L) train has not been running
between midnight and 5am. For those who know me, you can understand
that this seriously cramps my style. Bastards!

But now, to rub salt in an already painful wound, they've decided not
to run the L train all weekend. So I'm essentially stranded in
Brooklyn unless I want to spend an altogether rediculous amount of time
taking the G and J trains. Grr!

I bought this a little while after GUADEC and being inspired by
pvanhoof. It's pretty good. I've
actually used most of the patterns in some way, shape or form before
but it's good to put a name to them and get the formal definition in
my head. However...

Rant: UnsupportedOperationException

So I touched on this a while earlier
but today my hatred for UnsupportedOperationException
got some more fuel when I was reading the design patterns book.

In the composite pattern they actually recommend using this exception
so an implementation can avoid implementing some of the methods from
the interface. They do mention that not implementing some of the
interface methods is bad, it's a tradeoff, etc. Fine.

What's evil about UnsupportedOperationException is that
it's unchecked. Meaning the compiler doesn't warn you about it if you
don't try to catch it. So here you are, coding against some interface
and unbeknownst to you some of the methods are just going to bail on
you and your app will crash, and you would never know that this will
happen by looking at the interface specification or from compiler
warnings. Lovely!

Please, people: stop using UnsupportedOperationException!
If you really need to leave some interface elements unimplemented make
your own checked exception like UnimplementedException
or something and explicitly indicate which interface elements
are optional by using throws in the declaration.

Unchecked exceptions should really only be for serious
runtime errors, like NullPointerException,
ArrayIndexOutOfBoundsException
or ClassNotFoundException. IMO
UnsupportedOperationException is a gigantic hack that
should never have existed in the first place. And now we're all screwed
by it.. sigh.

My iPod just died. It's very sad. It just won't turn on at all,
even if it's connected to my machine (so it isn't just that the
battery's dead).

Either I've had extremely bad luck with my iPod, or they just
plain suck. I bought it less than a year ago and it's already been
replaced once. In addition, it skips on mp3s that xmms, mplayer,
rhythmbox and my Rio Karma all manage to play just fine.

slatepelican also
had her iPod die recently. And I notice that everyone seems to have
a pretty new iPod around here; either the nano or the video. You
don't see very many minis or pre-video full-size pods. Either
people really love upgrading their iPods all the time (Apple's marketing is really good, so
this is possible, I suppose) or I'm not the only one experiencing
iPod distress.

Is it unreasonable to expect a gadget to last more than a year? Or
are iPods and the like just the latest thing to become disposable?

In your .bashrc. Why this isn't on by default is a pretty
huge mystery to me.

Unfortunately...

There's still lots of suckiness left. People often ask me why I
don't like Mac OS X. I have some good reasons, but they're hard to
articulate. I'm going to try anyway. Also note that I don't mind
OS X for stuff like browsing the web, listening to music or managing
photos. Since those kinds of things are where OS X is mostly targetted,
I'm not claiming OS X sucks in general. I'm claiming it sucks for
me.

Not really a feature of OS X itself, but Mac keyboards and
mice are annoying, especially if you use UNIX apps. ctrl
and fn are reversed, so I hit fn all the time
(ctrl is also the way more useful key, so it should be easier
to hit). And one button mice.. yeah, lots of fun when you want to use
an X11 app. On a non-laptop you can of course just plug in whatever
keyboard and mouse suit your fancy, but you're stuck on a laptop.

Window management. In short, it sucks. When you have 4 or 5
terminals, plus a few Vim windows, plus a few browsers, it's really
hard to get around. command-tab helps a bit but its semantics
for apps that have multiple windows (like terminals and web browsers)
are never quite what I expect. Exposé was supposed to remedy
this, but when I'm working away I don't want to make my machine swap
to disk just so I can see all my windows. Plus, on my MacBook Pro it
doesn't work for some reason. I setup the hotkeys I want and they just
show some weird symbol I don't understand when I push them.

The dock. Most confusing interface EVER. You can put files,
folders and applications there. Some applications disappear from there
when you quit them, some don't (yes, I know the rule governing this
behaviour, but it's not intuitive). And if an application isn't
in there it's a lot of effort to go and find it and run it. Some
apps, if they're running and you click the icon in the dock, they
will raise their windows. Some won't. So you can't depend on that
behaviour from the dock (it does at least appear to be consistent
with command-tab).

Speed. This has gotten much better over the years as Apple's
hardware has gotten faster and Mac OS X has gotten more efficient,
but it still can be an issue. For example, Firefox takes 11 "hops"
in the dock before displaying a window on my MacBook Pro after I
boot. I have a gig of RAM.

Notifications. When an app wants to tell you it's done something, it bounces incredibly annoyingly in the dock for a while, completely distracting you from whatever you were doing. This often happens for seemingly unimportant things, like "we finished installing your software update." You know what? I don't care. I'll reboot when I feel like it, thank you very much.

I finally got my new bank card from WAMU (that's Washington Mutual for those lucky
enough not to know). This has been a long saga.

Step 1: learn from drheld that
WAMU was replacing their VISA debit cards with MasterCard debit cards
(which in itself sucks, since MasterCard is accepted in fewer places than
VISA).

Step 2: have WAMU cancel the VISA part of my old card before I had
received or activated the new card. Incidentally, this happened while
slatepelican and I were
in Spain. Not the best time.

Step 3: have WAMU assure me, very convincingly, that my card would continue
to work in ATMs until I got the new one and activated it. Indeed it did
work in an ATM. One more time. And then it stopped working entirely.

Step 4: receive my new card, finally, because Tony was nice
enough to bring my mail from California when he was visiting
drheld and Don in Vancouver.

Step 5: activate the new card! Yay, money! Order stuff online from
Amazon and PalmOne.

Step 6: orders from Amazon and PalmOne not working. Call WAMU. I thought
I activated my card? No, we cancelled it. Ah, so when I said "activate"
you thought I meant "cancel." I see. Well can I get a new one? Sure, it
only takes two weeks.

Step 7: get new card finally today.

Step 8: activate new card. We'll see if they actually did it this time.

The thing that infuriates me the most about this is that to get a new card
with WAMU they have to send it in the mail. Pretty much any Canadian
bank that I know of will give you a new card on the spot if you go into a
branch. WAMU claims they can't do that because all the cards have to come
from some central MasterCard place. They should at least be able to give
you a new ATM card on the spot. Not being able to get money, especially in
a city like New York, really sucks hard.

Paris CDG is quite possibly the worst airport in the world. Too
ghetto to have the little walkway from the plane to the terminal,
incredibly slow busses to take you to the terminal, incredibly slow
busses to take you between terminals, glacial immigration lines
(though when you finally get to the front, they don't do anything;
they just take your little card out of your passport and let you
go) and a lossy baggage system. Fun! I keep trying to come up with
some funny expansion for CDG, preferably starting with "crappiest,"
but I can't think of anything good. Suggestions welcome.

Stores and restaurants and pretty much any kind of business
in Spain have the oddest hours. At any given time, maybe 1/3 of
things are open. We've gone by a supermarket at many times of day
and never seen it open. You can walk down the main street
in the middle of a business day, when you would expect all the shops
to be open, and only find a few willing to take your money. Odd.

Evolution uses 80MB of memory. Gahjeebus.

Happily, tinymail uses 4.5MB of memory on the same mail.
I should really check that out. pvanhoof's talk was really good,
and I need to check out this.

Gimmie is
pretty cool, and almost makes me want to switch back to a
GNOME desktop from ion. Almost :)

Some very cool stuff is going on in monodevelop. I usually
can't stand IDEs because I'm a vi addict, but it turns out the editor
in monodevelop is completely replaceable, so you could conceivably just
drop in vim. And it's not just for C#.
Worth looking into, anyway.

Wrote my last exam Saturday night, and am now completely finished my
degree. It was a long haul, and quite frankly I'm glad it's over. I
do have a lot of good memories from this degree, but I'm also getting
pretty sick of Waterloo and the whole assignment + exam scene.

In 2 days, I begin 2 months of pretty solid travelling that has me
doing this:

This is the project I worked on at Google. I mainly told people I worked
on Gmail because they're kinda related,
but they are separate projects and I was on calendar.

I'm pretty excited about the product. Our hope was that it would really
be the first calendar product ubiquitous enough to really get people
using calendars in a big way, so wide-scale use was definitely one
of our biggest goals. Some features that help with that:

Event extraction. Google Calendar will scan your
Gmail inbox for messages that contain
some structured event information, extract that information, and
place a link on the side of the message allowing you to add the
extracted event to your calendar. This works with both free-form text
and Outlook-style meeting invitations with an actual iCal attachment.

Quick add. Near the top-left corner of Google Calendar is a "Quick add"
link. You can use it to enter free-form text describing an event,
and the corresponding event will be created for you.

iCalendar and XAPI (CalRSS) feeds. Every calendar you create
on Google Calendar can have
public and private iCalendar and CalRSS feeds to make integration with
3rd-party applications (like Evolution, Apple iCal and Mozilla Calendar)
easy. Google Calendar can also
subuscribe to iCalendar feeds and import iCalendar files.

Outside organisers. Using the iMIP standard, responding to meeting
invitations send from Outlook, Hotmail, and Yahoo! Calendar works
properly.

The features I worked on, for the morbidly curious:

Calendar sharing and ACLs

Multiple calendars and new calendar creation (this is definitely
something you should use; you can create multiple calendars to have,
say, a "work" calendar and a "personal" calendar)

Some of the calendar feed stuff

Some of the recurrence stuff

General backend stuff

Anyway, go login and enjoy!
If you have a Gmail account you can
just login and start playing right away!