Stuck with me

guadec 2008: I’m late, but I wanted to thank everyone in the GUADEC team for making this edition of the conference really rocking. thanks to everyone.

clutter: well, after the 0.8.0 release during GUADEC things have slowed down — but just a little bit; we’re fixing bugs in trunk and preparing for a 0.8.2 release of Clutter core. we also released the various integration libraries, and I’m trying to find more time to fix up the bindings. at the moment, the only bindings that have been officially released are the Perl bindings, the C++ bindings (thanks to Murray Cumming), the C# bindings (thanks to Thomas Machelen) and the Ruby bindings (thanks to Neil Roberts). I plan to release the Vala bindings really soon now — just some finishing touches to make the API nicer to use.

pyclutter: I wrote a couple of weeks ago that the Python bindings for Clutter have been, let’s say, problematic. taking a week or so away from them seems to have worked well enough, though, and now trunk is in a much better shape. unfortunately that have been some reports of segfaults and weird memory allocation issues — so any help in terms of testing is much, much appreciated. I also finally got around and generated the API reference for pyclutter using a slightly modified script coming from pygobject — but the content is missing sections like the object properties and signals. it just needs editing and some kind Python developer to start contributing documentation and fixes. again: any help is much appreciated.

travel: next week I’m headed to Sunnyvale for work; I’ll be there from the 17th to the 22nd. after I get back I’ll finally get a couple of weeks off, which I’ll spend with my wife travelling between New Haven and New York.

gnome-utils: finally found some time to do bug triaging and applying some old patches. nothing stellar: for what I have in mind I’d need a lot more time, or a lot more contributions (and less drive-by patches). for instance:

  • gnome-screenshot needs a maintainer, badly. preferably somebody with a dual screen set-up, that can test the behaviour on multiple screens;
  • gnome-system-log either needs a rewrite and a maintainer or needs to be dropped from gnome-utils and moved into its own module and its presence in the desktop suite re-evaluated; as it is, it’s mostly a liability and a relic of the past; if somebody comes up with a maintained replacement, we can talk about integrating that;
  • gfloppy needs to go. seriously: it’s useless. I had hopes for gnome-format, but now David Zeuthen is planning for a complete disk manager using the DeviceKit-disks API and PolicyKit so we can either wait for that, or write something really simple using those two APIs.

as you can see, gnome-utils is not at all dead — it just lacks manpower sticking around enough to get a SVN account and an entry in the MAINTAINERS file.

Small Stakes

Tonight I released version 2.17.90 of the GNOME Utilities package.

It’s not just another release: it marks the end of the work on the interactive dialog of the screenshot utility:

GNOME Screenshot Interactive

Now every command line switch is replicated on the interactive dialog that comes up when you launch the screenshot utility either from the menu or from the command line using the --interactive switch; each setting is taken into account, so calling gnome-screenshot --interactive --delay=5 --window --border-effect=border will change the UI accordingly (this very command line produced the dialog above).

This point release also marks the beginning of the work for the next development cycle; instead on working on the main trunk, I’ll open branches for the features I plan to add to the various components of the Utilities package:

  • plugin support for the System Log Viewer; this has already been written by the (great and incredibly patient) Lin Ma from Sun, but it still needs some cleaning up;
  • local sources for the Dictionary; as above, there already is a patch but needs to be cleaned up;
  • a new save dialog for the Screenshot utility;
  • add an area selector for the Screenshot, so you can pick a specific part of the desktop;

I’m also considering dropping the Dictionary applet from the Utilities, as its functionalities are pretty much covered by the plugin of the deskbar applet, and the deskbar applet is considerably more worth your panel space. The only thing that keeps me from removing the applet is that the deskbar applet is written in Python, and this might be an issue for slower machines; I could move the applet out of tree into its own package and let the distributions or the single users pick it up.

What I would really like to do in the next cycle is to revive GFloppy. At the moment, is compiled conditionally and it’s pretty much useless unless you have a floppy drive and the floppy utilities installed (it can use HAL to check for the available drives, but HAL doesn’t have the ability to programmatically format a volume); since not many computers come with a floppy drive anymore, I’d like for someone with HAL knowledge to pick GFloppy up and find a way to make it work with removable devices, like USB or flash solid state memories. Otherwise, I’ll have to consider dropping GFloppy too, as I don’t have a floppy drive anymore and can’t obviously maintain an application I can’t test.

Finally: if you have a small utility you deem useful enough to end up into the Utilities package, send me an email and propose it for inclusion.

The Engine Driver

Here we are again with the Dictionary hacking; I left my development trunk with barely enough time to close crashers and brown paper bags patchs, and now I’m finally able to return working on it.

Here’s an interesting bug, about the poor discoverability of the look up process. First of all: discoverability? Is that even a word? Who the hell filed that bug? Opened by Emmanue… ehr… looks uncomfortably away.

Anyway, linguistic issues aside, the issue is interesting: some complained that the old Dictionary had a BFB and the new Dictionary has, well, nothing – the word is searched by activating the entry. This makes sense if you are typing the word, but it breaks down if you are pasting a word into the entry as you have to reach out for the keyboard and press enter. The idea was adding a “Go” button, removable by turning off a knob inside GConf. Then I realised that the label bound to the entry could be removed in favour of a button with no relief; it would keep the current appearance of the Dictionary while adding the “mouse-only” interaction requested (and by having a mnemonic, you can also activate the entry using the button’s mnemonic tag). It’s an experiment: the bug I linked has a full patch for the button+GConf knob (courtesy of Stephen Cook, kudos to him), so if people are going to throw themselves out of the window, I’ll gladly forget my solution and apply the patch.

Another couple of squashed bugs: you cannot edit a dictionary source and even if you could, the advanced settings do not work anyway. Both these bugs are really missing implementations of existing features: the source editing was mostly in place before the code freeze of GNOME 2.16, while the advanced settings required two widgets (the database chooser and the strategy chooser) that weren’t ready in time for the UI freeze of last January. Now that I have written both widgets and that I have time to finish what I started, the source dialog has been overhauled, and it allows choosing the database and the matching strategy for the chosen source, both when adding and when editing it.

strategy chooser

Speaking of the strategy chooser, I’ve added it to the sidebar, and like the database chooser allows you to set a matching strategy for the session, so you can use the default strategy (the same set for the source) or whatever strategies the source supports; I’ll add a “reset and use the default” button, which is also currently missing from the database chooser.

Here’s the real tricky bug: adding the speller widget to the dictionary applet. I thought about it, and how integrating the speller inside the applet, now that we have that widget. While inside the application having a sidebar makes sense, the same doesn’t not hold for the applet, as it would make it really big. For this reason, I added the speller widget (and every other page inside the sidebar) as pages of a notebook; you can switch between each of them using a drop-down menu – effectively making the whole applet work like the application’s sidebar.

As for the new features: four months ago I began hacking on a parser for the DICT file format, which is used to store a database (a single “dictionary” in a dictionary source) for dictd to use. It took a bit to get ahold of the actual format, but once found I wrote a small parser object, modelled on the GKeyFile object used to parse the desktop entry files. You can use it to load the dictionary and the index from data, or from file; you can just preload the index or load everything; you can even begin with an empty object, fill stuff and write it down. Unfortunately, it doesn’t support compressed files – but it should be enough for closing this bug, and work as a base for the StarDict dictionary parser (this I’ll have to write really from scratch, as the C++ parser code sucks horribly).

dictionary with syntax highlighting

Finally, from the old-dictionary-feature-ported-to-the-new-dictionary department, the syntax highlighting has come back! Well, not entirely: just the links and the phonetics have been reinstated, and links still don’t work. Links are colored using the gtk-link-color style property, which is also used by link buttons and the like (if your application renders hyperlinks or something like them, please use that style property!). The reason why I disabled the syntax highlighting was that there’s no formal definition for the dictionary syntax: it really can break at any given time – as you’ll see when using it; also, the highlighting code was really messy, so I had to rewrite it and that took time.

All of this is going to hit HEAD this week or so.

There are plenty of other bugs lying around in Bugzilla, though; I hope to have more time during December to look at them and squash some more; but you know the drill: if you have your own pet bug scratch an itch and provide a patch. ;-)

Song for Sunshine

I just made two releases for gnome-utils: the first is 2.16.2, another release in the stable branch, which fixes a couple of bugs in Baobab and Screenshot that were also fixed in HEAD and deemed important enough to be backported.

The second release is – finally – 2.17.0, the first release of the new unstable release cycle which will lead to gnome-utils 2.18.0.

The major change in this release is in Baobab, which acquired the new, spiffy, cairo-based ringchart view, thanks to the hard work of Fabio, Paolo, Alejandro and Miguel. Baobab also dropped the search option, which mostly replicated the Search Tool already included in gnome-utils. Baobab user interface was cleaned up, its memory consumption was reduced and many bugs were fixed.

The other modules in gnome-utils got some love, but not much; my development tree still doesn’t build well and it’s not ready for inclusion in HEAD, but I plan to work on it before the next release.

As usual, download, test and file bugs.

Special Delivery

I almost forgot – this should tell you how bad a maintainer I am ;-) – but Lennart’s blog reminded me: the ringchart code hit Baobab HEAD:

Baobab Ringchart

The ringchart view is really nice – even though I still very much like the treemap – but the real improvements are in Baobab’s user interface, which got streamlined and made simpler. Kudos to both Fabio Marzocca, Paolo Borelli and to all the people at Igalia who worked really hard in order to make the next stable release of Baobab rock.

I did not package a gnome-utils tarball in time for 2.17.1, as I’m still working on my development tree for both the dictionary and the screenshot tool; but since I got a couple of bug fixes (backported to the stable branch) I plan to do a 2.16.2 release this weekend and a 2.17.1 before the end of the month. In the meantime: grab a snapshot from CVS and test away!

Rainbows and Pots of Gold

Of docked windows, bugs and the Dictionary applet

One of the two major UI issues for the new Dictionary was the absence of the speller. Since that has been somewhat fixed, even if it still lacks some polish, I decided to address the other, that is the fact that the Dictionary applet uses a docked window instead of a full window.

The rationale for having a docked window instead of a floating one was that a docked window is alwas at the same place, linked to the applet, so if you want to check a word you can’t possibily “lose” the Dictionary and have to cycle through the window or workspaces list – which is the whole point of having the applet on a panel. If you want a “fire and forget” Dictionary you can always create a launcher on you panel and click on it.

One problem with this rationale is that the dictionaries usually return preformatted text, which is understandable – they should work on ANSI terminals too; but this creates a dilemma: should we remove the formatting from the text, allowing the text view widget to reflow its content without changing the size of the window? Or should we keep the formatting and resize the window?

Docked window should not be resized by the user; I don’t resize the clock applet’s drop-down, or the drawer applet, or any menu: I expect them to change their size according to their content. So, if we want to avoid what could be perceived as a regression by some users and keep the formatting of the dictionary entries, we must resize the window according to its content whenever is possible.

Here comes the bug:

Neat Bug

I haven’t been able to hit, let alone reproduce, this bug until a couple of days ago. Actually, I tried again with 2.14.0 and I could not hit it, so I think the issue is much more weird that I’ve thought :-P. Anyway: if you exposed the definition window before searching something, the window would not be resized. The actual fix took less than ten minutes (writing, compiling, adding the stock applet to the panel, killing the applet, launching the newly compiled applet from terminal and hijacking the factory included) and consisted in a couple of lines.

I’ve closed both reports, essentially because inside all code paths that lead to the visualization of the window now take care of checking its size against its content. If you hit this weird bug again with HEAD file a bug about it, but please, please avoid asking that the window should be resizable. The definition window should just work; if it does require the user to change it, it’s a bug.

Of side bars, widgets and UI changes

In related news, I’ve finally been able to spend some time updating Dictionary’s UI; the Speller widget is now embedded into a real side bar (like the one Evince and Totem use, albeit I used my own code), and there’s also a list showing the databases available on the dictionary source used; if you double click on a database, the following queries will be made against that database only (the setting is not permanent: you’ll have to update the source definition for this to happen).

Available databases

Still, the time I planned to spend and the features I intended to add to the Dictionary (and the rest of gnome-utils) are way below par, as you can see on gnome-utils roadmap. I can mostly blame moving to London and the wedding, but the thruth is that after the feat of rewriting the entire Dictionary (backend, main frontend and applet) in three months I felt a little bit burned out. The real upside, though, is that I can still hack new features like these without spending too much time (the sidebar and the database chooser are the result of 12 hours of hacking, after two months of not touching the code base except for the occasional bug fixing) thinking: “what was I thinking when I wrote this code” (except for the occasional: “hrm, what was I drinking before writing this code”); this means that the rewrite turned out pretty good: compare to adding the docked window inside the applet, a minor feature that required rewriting the entire thing.

Here I Dreamt I Was An Architect

Today I finally did find time to work on gnome-utils. I applied a whole slew of patches that sit in my development trunk for almost a couple of months now, and that I tested locally. The first thing that went is is the speller widget for Dictionary; it’s still rough on the list of words it displays (no separation between results from different databases), but it works nicely: when you activate a row in the list it’ll only search on the database the word was found in. The spinner is gone – replaced by a progress bar in the bottom right of the status bar; still, the Dictionary looks like a web browser in my opinion. Maybe a more radical approach in the design of the UI is needed, or maybe I’m definitely on crack and this is how a dictionary application should really look like.

Dictionary 2.15.3

By the way, since 2.15.0 the “rounded window corners without alpha channel” bug has been fixed in the Screenshot application. I don’t remember if I wrote it in the announcements of the last release.

Thanks to Lin Ma, the System Log Viewer should Just Work(tm) on Solaris; also, thanks to Joe Marcus Clarke, many of the crashers on 64bit platforms should have been fixed. Kudos to both of them. The plan was to refactor and update the code-base, but I’m afraid it’ll have to wait.

Between GUADEC and wedding, I hope to find time to hack on System Log Viewer and Screenshot. Anyway, tomorrow I’m going to release gnome-utils 2.15.3, in time for the GNOME 2.15.3 dealine.

All You Want

this week end I decided to work full time on the dictionary; I ended up fixing a bunch of bugs and RFEs, namely

  • no more dialogs in case of word not found
  • a visual indicator of progress inside the main window
  • the re-addition of the “speller” widget
  • themed icons and bugzilla version inside the launcher

the error dialogs have been switched to an inline error message inside the defbox; I’d like to add an icon too, but there’s no direct placement of a pixbuf inside a GtkTextView: if you want pixel-positioning you must use a GtkImage widget.

I’ve added a throbber widget, using the same code nautilus and epiphany use. while I’d like for the “spinner” widget to get into gtk+, I don’t really like the idea of having it on the dictionary UI: it makes the dictionary look like a browser or something, which is not. on the other hand, I don’t know what to use to visually indicate that the dictionary is working and it’s not blocked; if you have an idea (even though code would be better) please let me know.

and, finally, I’ve re-done the infamous speller widget, the list of similar words that comes up when no words have been found. it’s like the old widget, for the time being, but I intend to twist it a little bit more. it remebers its state across sessions (like the whole dictionary does), and I’ll add a knob for disabling it in case you want your own personal grammar nazi on the desktop. <sarcasm>thanks to all the people that bitched about it on bugzilla and never felt the urge to move their collective asses and help instead</sarcasm>. really – if half of the energy some people spend bitching on Bugzilla about missing features could be transformed in electricity we wouldn’t need to make wars for oil anymore.

anyway, here’s the obligatory screenshot:

GdictSpeller

the code needs to be cleaned up a little bit, and some cvs surgery is needed as I changed some of the layout of the files; I expect to land my development trunk on cvs.gnome.org this weekend.

July, July

veronica mars: I’ve watched the season finale last week and it was awesome; the entire second season was awesome, but last episode was a blast. I’ll avoid any spoiler here, but really you should watch the show if you aren’t – with its gritty and cynical view of the world, with good acting and great storylines; I’m really happy CW confirmed it for another season.

foundation: my application for the GNOME foundation membership has been finally approved; I’ve asked for the ‘cool @gnome.org email alias’ and behdad was really kind enough to set it up, so kudos goes to him as well as the Foundation membership committee.

gnome-utils: work and real life took precedence in the last weeks; so I didn’t release gnome-utils in time for GNOME 2.15.2. Development didn’t stop, though, and you can count on a release in time for 2.15.3. Especially the Dictionary users should track the next unstable release, as it will feature the Infamous Missing Speller Widget, plus a bunch of fixes and other features. I’ll make a blog with screenshots about it soon. By the way, check out gnome-utils roadmap on the wiki and see if there are tasks you’d like to mention, or take up.

GUADEC: My proposal for a tutorial about the recent files and bookmarks architecture has been left out of the core days, and moved to the warm up weekend like the other tutorials; so, if the provisional schedule holds, I’ll give my tutorial at 18:00 on Sunday, right before the GNU/FIFA soccer game – I’ll try to keep the tutorial short. :-)

Now listening: The Decemberists, Castaways and cutouts

Growing Family

I’ve just finished including baobab, the disk usage analysis tool written by Fabio Marzocca (and others), into gnome-utils HEAD. Everything seems to build fine, and make distcheck has just confirmed that gnome-utils-2.15.0 is ready to be released. I plan to give the final touches before the deadline of tomorrow, so that the first unstable release of Gnome will ship the growing family of gnome-utils.

Now Listening: The Decemberists, Picaresque