Work in Karlsruhe

Starting Monday, I'll be working for a client in Karlsruhe for a couple of months, optimizing some Linux C++ server software. I don't expect to be very available for GNOME stuff.

If anyone knows of any short-term apartments or rooms in Karlsruhe, I'd appreciate the help.

Back from North Berwick

I’m back from North Berwick and a few days in Karlsruhe, trying to catch up on emails and To-Do lists.

I took the tourist boat to the Bass Rock for the first time. Next time I’ll try to take a zoom lense. The island appears greyish white from the mainland but that resolves, as you approach, to thousands (120,000 or so) gannets and their nests. It’s their realm.

img_0722img_0808

Release Team demanding API documentation?

Recent comments by Federico and Brian Cameron made me wonder: Are we ready to demand full documentation of any new APIs going into the GNOME Platform?

We usually try not to create feature-based criteria like this, so that we can actually release the software on a time-based schedule, as long as we are fairly sure that the important stuff will get done. So we don't demand that applications are accessible or internationalized immediately, as long as they can be eventually. But we have some limits – for instance, Platform APIs must be stable, not just likely to be stable some day.

The GTK+ team are 99% there. They document almost every new function, signal, and property, mark which ones are private, and when they were added. It works well. So, would any GNOME Platform maintainers rebel if the release-team said “No, you can't add that function (or add that module) until you've also written some gtk-doc documentation for it.”?

SQL: 2 joins to the same table, with the same key

I need advice from someone who really knows SQL.

This SQL command is simple and works, and hopefully the intention is clear. I get the actual contact name by joining on the contact id:

SELECT deliveries.departure_contact_id, contacts.name_last FROM deliveries
  LEFT OUTER JOIN contacts ON (deliveries.departure_contact_id = contacts.contacts_id)

However, what happens if I have two contact_id columns, and I want to get the full names for both? This is ambiguous, and incorrect:

SELECT deliveries.departure_contact_id, contacts.name_last, deliveries.arrival_contact_id, contacts.name_last FROM deliveries
  LEFT OUTER JOIN contacts ON (deliveries.departure_contact_id = contacts.contacts_id)
  LEFT OUTER JOIN contacts ON (deliveries.arrival_contact_id = contacts.contact_id)

Update: Thanks for all the comments. This seems to be common knowledge. You can use AS with LEFT OUTER JOIN to
give the join an alias, then use that alias name instead of the table name (even in the ON clause of the JOIN), like so:

SELECT deliveries.departure_contact_id, departure_contacts.name_last, deliveries.arrival_contact_id, arrival_contacts.name_last
FROM deliveres
  LEFT OUTER JOIN contacts AS departure_contacts ON (deliveries.departure_contact_id = departure_contacts.contacts_id)
  LEFT OUTER JOIN contacts AS arrival_contacts ON (deliveries.arrival_contact_id = arrival_contacts.contact_id)

That's a simple change in a generic function in Glom, and I can use the relationship names for the aliases.

Thin Clients really work

A week or so ago I was in Linz, Austria, to do a little report for GNOME Journal about the Pangea internet/multimedia centre for immigrants and refugees. I was really surprised at the performance of GNOME using very old PCs as thin clients with a regular new PC as the server. They seemed as fast as new PCs.

A couple of issues came up:

  • How can things be set up so that local drives (CDRoms, USB-sticks, etc) will be visible on the GNOME session that's actually running on the server? Hopefully the answer is simple.
  • There doesn't seem to be any UI for setting gconf lockdown keys. Not only would this be easier, but it would allow the administrator to, for instance, quickly unlock the panel on a user's computer, make a change, and lock it again. This could be a great little pygtk hack.

I was a bit confused when arriving in Linz this time. Last time I was there, it had a vaguely eastern-european-style makeshift train station, but I suddenly found myself inside a multi-level shiny metal and glass complex. The tram used to be across the street but I couldn't find the street anymore. I followed the signs, and eventually figured out that I was indeed in Linz.

Landshuter Hochzeit

Last weekend we visited Landshut, near Munich, for their Landshuter Hochzeit celebration. It only happens once every four years, and it was sold out in January, but a friend got us some tickets.

It’s apparently meant to be a reenactment of a royal wedding, and the accompanying festivities, that happened 500 years ago. Thousands of the local residents dress up in fancy medieval clothes and play assigned parts, so the whole town gets taken back in time a bit.

There’s a free parade down the main street of the old town, a huge area with fenced-in groups of medieval folks, like a human zoo, and a display of medieval entertainment. It’s less kitsch and a lot more fun than Oktoberfest, so I highly recommend it to visitors to Munich in 2009.

IMG_0582IMG_0600