Mood: Asleep

It’s way too early for me. I got up at 7:00, which is not something I do very often at all. I’m groggy and wearing my Destroy Mornings shirt. Still, it’s for a good cause! I’m seeing my girlfriend in half an hour or so and heading back home to visit family and friends. My little sister Jenna is turning five years old. I could have sworn that she was this little thing that practically fit in my hands only a few days ago, but somehow, she turned five.

I bought her this very cool Vtech Nitro Notebook, which looks and feels like a laptop (albeit a cheap one). She’s been wanting a real computer for a while, and though I won’t buy her a real one just yet, this will feel close enough for her. She knows the difference between real computers and toys, but she’ll still like it.

This thing has 80 built-in activities. English, Spanish, science, social studies, math, etc. It even has a My Tools area where you can populate an addressbook of names, phone numbers, and e-mail addresses. There’s a lot to this little device. One of the features they advertise that I like, though I have not tested it, is that the difficulty apparently adjusts to the level at which the user is at. So if she’s having trouble in an area, it’s supposed to become easier so she can begin to complete it, and then the difficulty will eventually go back up. We can check how she’s doing with this built-in progress report. On top of all this, it has some games and stories.

Cool toy. I want one for myself 🙂


Last Wednesday at SVLUG, I gave a talk (well, more of an interview in the format of The Actors Studio) on Galago, Project Soylent, the Desktop Notifications spec libsexy, and some other stuff (demos of Beagle and such). We scheduled this something like six months ago, and I was nervous as hell the day of the talk. It actually went really well, though, and people seemed genuinely interested. I had a lot of questions at the end about the various things I’m doing and plan to do. I wish I had it in some re-broadcastable format.

Heading out soon, so I’m wrapping this up for now.

Beagle with Galago support

The release of Beagle 0.0.12 rocks. Among the many reasons is support for Galago, provided by Lukas Lipka. This just kicks ass. Simple, informative, useful integration that doesn’t get in your way. Now if some other IM clients will step up and provide at least optional support for Galago, non-Gaim users will be able to get this functionality as well.

Beagle with Galago support

I Can’t Believe It’s Not Chicken, now in gelatin style

Something I threw together the other night in Inkscape


I finally gave up with the whole “playing everything politically safe” with Galago and am now moving the whole library to GLib. It’ll take some time, and there’s a few things I need to figure out first. For example, a very useful feature that Galago’s object model let you do was connect a signal handler on a class itself, which would call the handler any time the signal of any object of that class was emitted. This of course didn’t translate to other object models or bindings well, and certainly doesn’t translate to GLib at all.

One of my potential solutions was to create a Manager class for each class where developers would want to do this. The Managers would be singletons and objects would emit signals on them as well as themselves. Maybe Manager is a bad name of the type of object… I’m still not sure what to do about this. It’s a very useful feature though, and the only alternative for everything that currently uses this is to set up a bunch of signal handlers for parent containers to know when these objects are added/removed and then register/unregister signal handlers every time the objects of interest are created/destroyed. It’s a lot of messy code, and would take up more memory than a manager interface. Still got to play around with the idea more…


I’ve begun work on porting libnotify and notification-daemon to D-BUS 0.3x. I plan to use a simple abstraction layer consisting of macros to keep compatibility with D-BUS 0.23.x for now. I have a lot of work to do this week at VMware, so I don’t have a whole lot of time to devote to it right now.

Mike Hearn and I had a talk earlier about extending the notifications spec. Sorry, we’re still not going to provide a way to embed Mozilla. One thing people have been wanting, though, is to be able to associate a notification with something on the screen, say, a notification icon. So what we’re going to do is provide support for X, Y coordinate hints. Since they are hints, the renderer will be able to just ignore them if they want. However, this would allow the battery applet (for example) to say, “I have a notification, and here’s my location!” and the renderer could pop up a notification near there with, say, a little arrow pointing to that X, Y location. This could be useful in a few situations, though hopefully it won’t be abused.

I have some future plans for the notification daemon. I’m going to put together a (for now at least) experimental daemon that has two types of plugins: Render plugins and Transition plugins.

The Render plugins will be responsible for rendering the notification. They could do the nifty folding thing that appeared on Planet GNOME a while back. They could do a bar sitting at the bottom of the screen, semi-transparent. They could do toaster popups. Whatever.

Transition plugins handle how the notification will be displayed. They could just show a notification, fade it in, slide it in, make a poof of smoke.

Again, it’ll be a while before I can start on this, due to life just being busy right now.


And this is one other reason why life is busy. My girlfriend Jamie and I are going with my family to Disneyland after next week. Unfortunately, this week is spent on some deadlines at work. But that’s just going to make the next week even more fun 🙂 We’re staying at the Disneyland Hotel, which will be a first for both of us. I’ll have plenty of pics when I return.

The self-planted rumors are true!

So over the past few hours, I managed to put together a new Galago release. There was a lot done in this release, and I wouldn’t be surprised if I broke stuff, but at least now it should work with both D-BUS 0.23.x and D-BUS 0.3x. I have neat things planned for the next release, but as I’m basically going to be away from computers for a week, spending time with Jamie, I probably won’t get to any Galago hacking.

Releases of this magnitude take forever.. There’s just so many components to package up. I need to get a small release team together. Any packagers want to package things up for Fedora Core or some other distro?

I also need to find a sane way to announce releases for several independently versioned apps and libs at once. Shame I can’t really give them each individual release names without being too confusing. Hmm, and I need to get screenshots of the contact chooser dialog up. Lots to do still.

If you’re going to invest, don’t invest in llamas

The Motley Fool had some great 401(K) advice. They say that if your 401(K) lets you invest in llamas, consider moving to a job where the owner is not insane, as llamas cannot possibly help your retirement. I think they understimate the power of the llama.

Galago with D-BUS 0.30

I’ve been hacking a bit on Galago’s D-BUS 0.30 support the past couple of days, and although it’s not yet complete, good progress has been made. Most things now work, with the exception of a few bugs here and there.

Thanks to D-BUS 0.30’s new struct container support, I can really start to clean up the protocol. However, for the time-being, not much protocol-wise has changed. I’ve been developing a small abstraction layer to minimize the number if D-BUS versioning checks in the code. You see, I’m not dropping D-BUS 0.23.x support just yet. Not until more desktops have 0.30+ installed.

Galago in VMware Workstation 5

I do all development nowadays on my laptop, which runs Ubuntu Hoary (containing D-BUS 0.23.x). I needed to be able to quickly and easily move back and forth between this and a distro with D-BUS 0.30.x support for testing, and I certainly didn’t want to set up a new distro on one of my other computers.

I ended up installing Fedora Core 4 test 3 inside a VM using VMware Workstation 5. It’s working beautifully, and just sits on one of my virtual desktops taking up a good portion of the screen. The theme and everything matches, so for the most part it doesn’t even feel like I’m using another virtual computer. I’ve been able to make a D-BUS 0.30 change, submit the code, switch virtual desktops, and make sure the 0.23.x support still works. And vice-versa. It truly makes this kind of development a lot easier to deal with.

Also, since I’ve been using my laptop and taking that to work with me, I’m able to just click Suspend on the VM when I need to power down to travel with it. Gotta love that. I wish I had suspend working on my laptop itself.

The secret is in the easternmost peninsula

I’ve been hacking away at various pieces of Galago lately at an attempt to improve the API and Gtk+ widgets. This is leading to some very cool applications and utilities I’m developing. Hopefully if I can get some of this set up the way I want soon, I’ll get another release put together.

A wiki has been put up containing some installation documentation, a preliminary FAQ, and other documentation. It’s also hosting the wiki for Project Soylent, which we’re starting to develop some decent plans for (they’re not on the wiki yet, just in some discussions).

My latest cool Gtk-related Galago work is the Contact Chooser. I love this thing, seriously. It’s not finished yet, but is close, and is simple and easy to work with. The screenshots are fairly self-explanatory.

Contact Chooser with MSN contacts

Contact Chooser with people list

Contact Chooser with a person's accounts

If you haven’t guessed, it’s a widget and dialog that resembles the Gtk+ file chooser, but it’s designed to select contacts. The gnome-presence-applet will be using this fairly soon. I need to work on some of the speed issues, but they’re not too major.

libgalago got some major code cleanups these past couple of weeks. A lot of the communication code was abstracted, and as a result, several hundred lines of code have been removed. This will dramatically ease the porting effort to D-BUS 0.33. I plan to keep compatibility with D-BUS 0.23.x as well. I’m not sure when exactly all this will be done, but definitely before the upcoming stable release.

I’ll post some screenshots of the design we’re considering for Project Soylent once we have something I feel is worth demoing.

Galago: Hey! Where’s the cream filling?!

I felt especially motivated today and started work on an API I came up with in the shower. I spent hours hacking on libgalago and, when I was done, I had reduced the codebase by over 800 lines, all of which consisted of D-BUS 0.23.x-specific communication code. There’s now a much cleaner API abstraction over D-BUS, which could easily in the future be expanded to not be D-BUS-specific, if that ended up becoming important (say, a Windows port of MacOS X port without D-BUS). Furthermore, it should now be much simpler to get Galago working cleanly with D-BUS 0.31+. I’m not going to be able to work on that right away, but it’ll happen sometime before libgalago 0.4.0.

The abstraction still has some work to go, but most of the codebase for libgalago has moved to it. I still don’t know what I’m going to do for galago-daemon’s D-BUS 0.31+ support, but it’s probably not as huge an effor as I’m thinking. Worst case, I do some more abstraction work, but it won’t be as bad as libgalago’s.

Also, I hacked up contact-lookup-applet a few days ago to check for libgalago at compile time and to use Galago for the Instant Messaging section of the Address Card dialog. If Galago’s dead due to some bug, it falls back on the default implementation of just showing a protocol icon. There is a patch available for now, and I’m hoping that perhaps support can be added to CVS at some point. Next stop, gnome-present-applet UI work and Evolution.

Contact Lookup Applet