Breathing Space


The training I had scheduled for tomorrow was cancelled at the last minute, so it turns out I have a couple more days to get things done. Melo, Nuno and myself took the opportunity to harass pfig over his completely non-existent (or at the very least non-published) photos of the London Apple store during lunch.

As well as quite a few other things, ranging from Perlisms to our upcoming hardware purchases (Doom III was not openly acknowledged as one of the driving factors, but hey, we're all old Quake hands...)

Amidst the talk about Growl, GeekTool, Disctop and whatnot, I got my hands on a spanking new 2100MAh battery for my aging 1G iPod, which was just installed (thanks, Melo).

The single piece of news I found of some interest today was this one (actually, I read it here first) and it put me off for the rest of the evening. It just can't be true.

Ah well. Maybe I should just do some coding, relax a bit, and wait to see where the ripples from this will spread. I still haven't finished all of the Kubrick changes, and the bad CSS on my edit template has been getting on my nerves for quite a while now.

Growling in UDP

People interested in exploring the bleeding edge of Growl development are encouraged to get the latest Subversion trunk, which includes UDP-based notifications between Growl instances on different machines. Since I've been looking for a fully cross-platform thing for my own purposes, I started coding the base protocol in Python. It's a moving target, but it's fairly straightforward (provided I'm reading GrowlDefines.h and GrowlUDPUtils.m properly):

class GrowlRegistrationPacket:
  def __init__(self, application="Application Name", password = None ):
    self.application = struct.pack("s", application.encode("utf-8"))
    self.data = pack( "BB!HBBs",
                      GROWL_PROTOCOL_VERSION,
                      GROWL_TYPE_REGISTRATION,
                      self.application.calcsize(), 0, 0,
                      application.encode("utf-8") )
    self.checksum = md5.new()
    self.checksum.update(self.data)
    if password:
       self.checksum.update(password)
    self.data = self.data + self.checksum