GNOME bug-buddy magic

Today I noticed that GNOME’s bug-buddy crash reporter has become almost self-aware. The SoundJuicer audio ripper crashed (first time for me, and not reproducable). Bug-buddy reported the bug (without asking me for any sendmail nonsense), then showed me a clickable URL link to my bug. The magic:

  • It was actually not a new bug. It was an old bug, which bug-buddy/bugzilla had automatically identified as a duplicate, probably by comparing the stack trace. The comments in the bug report mentioned that it was actually caused by musicbrainz, but that musicbrainz fixed it in a later version. I added a comment about distros needing to update their musicbrainz version for the next person who finds themselves there.
  • A few seconds later, bugzilla sent me an email saying

    You recently submitted a bug report to GNOME Bugzilla using Bug-Buddy.

    Thank you for reporting this bug. This is actually caused by musicbrainz (used
    by sound-juicer). See for more information:
    http://bugs.musicbrainz.org/ticket/2262

That’s amazing.

Self-hosting Glom

Glom 1.3.5 has experimental support for self-hosting of its databases, so you should never again need to configure PosgreSQL.

It does this by starting its own PostgreSQL instance, supplying its own PostgreSQL configuration and data files, and connecting to it. Those files are stored in one directory, though I’d like to improve that directory structure. This vastly improves the user experience, so I expect this to bring a lot more users once I’ve shaken out the new bugs.

This should satisfy most people who were demanding support for SQLite instead of PostgreSQL. Unlike SQLite, this still allows you to share your database across the network with multiple users. Support for non-PostgreSQL external database servers is still possible, but that work is really not my priority.

I really do need to combine some of the dialogs. At the moment you see several dialogs, one after the other, to save a new file, choose a database name (and choose self-hosting or external hosting), then to connect or provide initial connection details.

glom_new_database_with_self_hosting

Wish Lists

As Festivus approaches, now is as good a time as any to symbolically thank a hard-working open source developer. Amazon wish lists are a pretty good way to do this. But few of you seem to have wish lists, so I can’t give you stuff.

Come on, give your users a wish list for once, instead of vice-versa.

GNOME Foundation Board elections, 2006

You have only until Saturday December 16th to vote in the GNOME Foundation Board elections. Read the discussions in foundation-list, find your “Official Ballot for 2006 GNOME Foundation Elections” email in your inbox, and use the “Vote token” to vote.

Generally, only half of us vote, so there is still time to change that this time. You could be one of the people who voted for the board that employed a dedicated sysadmin, funded developer documentation, created a beautiful marketing strategy, encouraged your local GNOME group, talked to your local politicians about using free software and open standards, created GNOME merchandise web sites, sponsored you to travel to GUADEC, gave you a free T-shirt, or whatever you care about most.

I voted already. I always vote for a mix of newcomers and veterans, generally picking the people who are passionate about specific tasks.

Glom: Showing related related records

The feature I mentioned in “SQL: joins and duplicates” is now implemented in Glom 1.3.3. It’s just a matter of choosing relationships from a tree rather than just a list, though it’s only 2 levels deep for now to keep it simple.

So if there are, for instance, Invoices with related Invoice Lines records, which refer to Products, then you could look at a Product details screen and see all the Invoices that use the Product (via their Invoice Lines records). If I added a 3rd level of child relationships then you could even see all the Customers (used by the Invoice table) that had ever been invoiced for the product.

Here’s a screenshot of the UI for the Licenses, Packages, Package Scans example:

glom_screenshot_related_related

The UI isn’t perfect. I don’t like that it’s enabled via a checkbox but I think the tree would be confusing if it was default. Trees in GtkComboBox widgets are also rendered as these confusing menus, but it could be replaced by a popup GtkTreeView some day. But I feel very satisfied that I’ve made it easy to do something that’s usually difficult, with only minor UI changes. Many thanks to Jerry Haltom for showing me how this could be done.

The SQL that’s generated is much the same as for regular related records (SELECT related_table.field1, related_table.field2 FROM related_table WHERE related_table_field3 = 123), but with an extra JOIN … AS … ON clause to link to the intermediate table, a slightly changed WHERE clause (to refer to that intermediate join), and a GROUP BY on the related table’s primary key to ensure that we get only one row for each related record. A sub-select query might be more efficient, but this allows me to reuse the existing code, and lets the user think in terms of the target related table rather than an intermediate one.

So using Glom’s –debug_sql now shows yet more complex SQL that you wouldn’t want to write yourself.

SQL: joins and duplicates.

Here’s a little SQL problem for the lazy web. It’s something that I’m trying to implement in Glom for the Repository Analyzer:

Let’s say we have these tables:

Packages:

package_name package_description
something something description
somethingelse something else description
somethingmore something more description

and Package Scans:

package_name version license_id
something 0.1 43
something 0.2 43
something 0.3 44
somethingelse 1.5 43
somethingmore 0.9 40

Now, I want to get the package.package_description for all packages that appear in package_scans with license_id 43, which would look like this:

‘something description’
‘something else description’

The best I can do so far is a SELECT on package_scans, doing a LEFT OUTER JOIN:

SELECT “relationship_package”.”package_description” FROM “package_scans” LEFT OUTER JOIN “packages” AS “relationship_package” ON (“package_scans”.”package_name” = “relationship_package”.”package_name”) WHERE “package_scans”.”license_id” = 43;

which gives me duplicates, like so:

‘something description’
‘something description’
‘something else description’

If possible I’d like to do this without GROUP BY. I feel there must be a simpler way to say “give me a row for each record in packages for which the (indirect) relationship is true”. If the main FROM table could somehow be packages, instead of package_scans, then the LEFT OUTER JOIN would cause me to have only one row for each relevant packages record. In general, Glom never gives you repeat rows because that’s confusing.

If I can figure out what SQL should be generated, I could imagine that I might get that result in Glom by defining a relationship in terms of a doubly-related field. So the user could say “Show me records from the packages_with_package_scan_license_id” relationship. That relationship would be defined as something like

records from packages where licenses.license_id == packages::package_scans::license_id

But maybe a GROUP BY option really is the clearest.

Update: I feel like the sub-select idea might be what I want, if I can figure the syntax out. I like the idea of showing records from a relationship that is itself defined by a link between a value and a field in another related set of records.

GNOME Code of Conduct: GNOME is people

Please do “sign” the GNOME Code of Conduct and show the world what nice people we are. It’s something to be proud of.

It’s a little silly that we must do this individually just to establish what we think is self-evident, but let’s just get it done. I’m hoping for an overwhelming response.

Update: 100 signatures is great, but it doesn’t yet feel overwhelming. A few more would send a convincing message.

Parallel Skiiing in Munich

People in Munich who want to learn to ski in January and February (3 weekends), without the dullness or expense of a regular ski course, should sign up to Ken Lawler’s Parallel Skiing course. It’s a fun international bunch and you’ll learn to ski confidently and safely without any of that splay-legged awkward snowplow nonsense that the locals usually learn. The trick is that you start on short skiis and get slightly longer skis each day. I did the course in 2000, and I finally persuaded my girlfriend to do the course this year, because it’s silly not to.

The next information evenings are Sunday 12th November, Wednesday 15th, and Sunday 19th. Just be at Quidde-Str. U-Bahn station at 19:00 and look for the guy with a baseball cap and a short ski. It’s best to send him an email beforehand to parallel_skiing AT gmx DOT com.

Update: Time is running out to sign up. The next information evenings are:

  • Sunday 10th December, 19:00
  • Wednesday 13th December, 19:00

Got him!

Extra work has been taking up the spare capacity, so another slot at Openismus GmbH opened up. Employee number 4 is Armin Burgmeier, developer of the much-loved Gobby collaborative editor. He’s working part-time.

He’ll start with some C++ wrapping work, using gtkmm’s gmmproc to generate C++ bindings for an existing open-source GObject-based C API, for a client in Austria. Surprisingly, there’s a lot of demand for this, but I guess it makes sense – It’s not particularly difficult, but it’s quicker when you know how, and commercial projects cannot wait a year until someone else gets around to it. It also takes some expertise to know when a C++ API looks right, and what kind of bugs to expect.

(This one is not C++ bindings for GStreamer. I’d love us to be paid to do that work.)

Additionally, this means that Openismus is ready to do paid work on Gobby if you need it.

Another part-time employee slot might open up in the next few weeks, so I’d welcome emails from candidates with significant GTK+ and gtkmm experience. Python would be a plus.