Tag Archives: Gnome

www.gnome.org

Openismus needs another GTK+/GNOME developer

We need another full-time developer at Openismus to start in a month or so. You’ll ideally be a resident of Germany and you’ll have common sense and visible experience with GTK+ and some of the GNOME technologies such as D-Bus. I’m mostly interested in a C coder at the moment, but experience with Python and/or C++ is a plus. You’ll work from home and know that you can. Capable people are hard to find so you probably know if you are suitable. Working for Openismus is quite straightforward, with fairly clearly defined tasks, some choice about what you work on, and a boss who can be persuaded that he’s wrong sometimes.

I am very pleased with our current developers but we can’t wait the 20 years for a clone to mature – it’s just not practical.

Please email me with a CV (any format you like) and a paragraph describing yourself, your experience, and your current development interests.

Update on 1st March 2008: We are still looking, and we maybe need more than one new developer. But you need to be convincing.

giomm: gio in C++

Over the last couple of weeks I’ve been gradually pulling glibmm’s gio wrapper into shape. It provides a gtkmm-like API for the new gio I/O API in glib 2.15/16. It’s available in the glibmm 2.15.x tarballs, and will be API stable in glibmm 2.16 (Tarballs, svn).

There are a handful of giomm examples in the gtkmm-documentation module and we are adding more. Thanks to Marko Anastasov who did all the initial wrapping work and Jonathan Jongsma and José Alburquerque who have helped to perfect it.

It was quite awkward repetitive work because we had to add so many method overloads and reorder so many parameters, and write most of the documentation by hand (not finished yet). I feel most of the work is now done, so I’m less worried about impending API stability, but I still want more people to review the API and try to use it.

Some thoughts for people creating language bindings

Many gio functions take several arguments, half of which (such as the GCancellable, and sometimes the callback) can be NULL or have obvious defaults (such as G_IO_PRIORITY_DEFAULT, or G_FILE_QUERY_INFO_NONE, or “*” for attributes). It’s too late to reorder the parameters in the C API, but I strongly suggest that you try to copy the parameter sequences in the giomm methods. Replacing GError with an exception removes another parameter. For instance, compare Gio::File::query_info(), which can be called with no parameters, with g_file_query_info().

Some thoughts in general

I quite like the consistent approach to asynchronous operations. Basically, there are often two forms of a function – a synchronous one (blocks, returning when it has a result) and an asynchronous one (returns immediately, and tells you later when it has a result). For instance, g_file_query_info() and g_file_query_info_async(). With the async one, you then call the *_finish() (for instance, g_file_query_info_finish()) to get the result. See GFile (or Gio::File) for a full explanation.

For a while I wondered if some intermediate object would be conceptually more beautiful, so you wouldn’t have to read the documentation to know about the *_finish() method to call, but it seems worse. For instance:

async_request = file.query_info_async();
async_request.signal_finished().connect(&on_query_finished);
async_request.start(); //We would have to do this only after connecting the signal.
...
if(something happened)
  async_request.cancel();
...
void on_query_finished(...)
{
  ...
  result = async_request.get_result();
}

GNOME versus projectors

My post about my new not-working-automatically Monitor reminded me of something that I forgot to follow up, though it’s probably unrelated.

At FOSDEM in February 2007, I muttered to X man Keith Packard that my laptop (with Intel graphics) didn’t work with the projector. I complain to everyone about this at all conferences, because it never works for me, regardless of laptop or projector model. Either the size is wrong or the sync rate is wrong or there’s nothing to give me any clue. It often works up to the login and then stops working after I’ve logged in. So I always borrow someone else’s laptop at the last moment. This is just one reason why my presentations are always shit.

But Keith dropped a clue. He said that immediately after login GNOME reset something that breaks things. I chased him about it in email afterwards and he said
“Oh, I found it — if your configuration settings include a monitor size, gnome would randr you to that size. I can’t remember where that was as I deleted it from my config though.”

Can anyone do something with this nugget of information?

Widescreen

The end of the tax year encouraged me to get a new 24″ 1920×1600 widescreen monitor (HP W2408H) for the sake of my back and eyes.

Ubuntu Gutsy (7.10) didn’t work with it automatically, even after a restart. The monitor complained that the input was “out of range”. It seemed to be using too high a sync rate. Doing “dpkg-reconfigure xserver-xorg” fixed it, though I naturally had to use a second PC to do that via ssh.

I was using a 17″ before, so the hugeness and brightness is disorientating. It can rotate too, so I can have a tall thin screen instead, should I ever want that. I’ve seen desks at Google (through the windows) that have two of these side by side – that would be truly useful. Weirdly, drawing of windows is noticeably slow when the screen is rotated. I wonder what that’s about. (Via System/Screen Resolution in Ubuntu. I guess that’s XRandR.)

My graphics card only has VGA output (integrated Intel 915G), so I’m probably not seeing the clearest picture. I should get a separate card with a HDMI or DVI output, but I don’t look forward to the driver problems. It looks like life will be good with AMD/ATI Radeon cards in the near future, but not until the next version of Ubuntu, I guess.

Clutter Tutorial

Over the last couple of weeks, I’ve been writing a Clutter tutorial for Openismus. Clutter is a “2.5D” canvas API maintained by OpenedHand.

Here you can see a preview of the tutorial, though some sections just have TODOs for now. I think it’s already the only place to find a useful description of Clutter Timelines, Effects and Behaviours and how they relate to each other, and it’s the only place that I’ve seen mention of how to manage the refcounting of the various objects. Thanks to the OpenedHand guys for answering my questions so patiently.

I’m waiting for the new high-level Clutter library to be created before completing the remaining sections, because the containers have already been moved out of the main clutter library, and that new library should have some interesting (but maybe not perfect at first) actors for doing scrolling and lists of text.

It’s DocBook, with some scripts to pull in the example code, in the clutter-tutorial module in OpenedHand’s svn repository:

As I’ve done in the past for gtkmm documentation, the examples are almost mind-numbingly simple so people have the best chance of seeing the use of the relevant API. However, there is one slightly more realistic full example. I hope that the containers in the new library will help me to make it prettier.

I guess you should report bugs in the tutorial in Clutter’s bugzilla, in the Documentation component.

gstreamermm: C++ bindings for gstreamer

The latest attempt to create a gtkmm-ish C++ API for gstreamer is making good progress, this time started by Milosz Derezynski for his “Beep” player. Over the last few weeks I’ve tried to help out by solving the more difficult problems such as support for GstMiniObject (a cut-down GObject), and support for GstObject (GObject with a floating reference, like GInitiallyUnowned, and with thread-safe reference-counting, I think). José Alburquerque and Siavash Safi have been helping out too.

That’s done and we can now actually play an Ogg Vorbis file, as seen our first example. I’m fairly confident that gstreamermm can now become finished, useful and stable with a little more effort.

svn: http://svn.beep-media-player.org/gstreamermm/trunk/. though I ‘d like to move it to the GNOME svn if I can persuade Milsoz. It’s also in jhbuild.

Update:: gstreamermm is now in GNOME’s svn.

New www.gnome.org: Plone people needed

The plone-based replacement for www.gnome.org struggles forward. But it won’t get much further unless we find some new Plone developers who can help make it happen.

I have a whole other blog post that I’ve been waiting to publish for about a year as things have crawled forwards, variously delayed by an svn account request (Olav’s mango system fixed that problem), an unstable test server, and our single Plone developer’s extreme lack of time. It’s called “New www.gnome.org: Test it now” and it has lots of great links to a test site, our design plans, and where to report bugs. Instead you get this, based on my email to gnome-web-list:

Status

The Plone stuff is now in GNOME’s svn, in the gnomeweb-plone module. We also have a backup of the database with the content (Zope format).

However, the svn is not quite in the desired structure and the “buildout” system probably needs some work. See the README for hints from Ramon.

I had hoped that Ramon could get those done so we would be more ready for other people to contribute but that’s obviously not going to happen. He is now busy with his PhD and can’t help us much more. I’m posting this after talking to him.

So we need some Plone people who can do this for us. I personally have no experience of Plone so I wouldn’t trust me to do it even if I taught myself about Plone.

What to do

The first aim should be to make it possible for anyone to install it locally to test it. That includes instructions (hopefully simple) so that even I could deploy it and test it. I would like some reassurance that this “buildout” system is the best way to do that. Experienced Plone sysadmins should know the answer to that.

Then I would like the Plone experts to generally check it over and point out anything that we could do better.

Then we can deploy it as a beta on gnome.org, fix the last few bugs, and see if it’s good enough.

Glom’s Initial Dialog

Glom now lets you browse the local network to open a document already opened by someone else, so you can easily both use the same database system.

That adds a new button in a file chooser dialog (though it doesn’t use the file system or URIs). This has complicated our already odd start-up dialog. We have some thoughts about the initial Glom dialog in the wiki but, to summarize, this is my current best mock-up for what we should have. Apologies for the inept use of Glade and Inkscape:

glom_initial_dialog_mockup_from_inkscape.png

The treeview row buttons are to avoid having to select and then click a separate button. I think that’s easier. I generally hate start-up dialogs, so I’d avoid it if I could and I’d welcome suggestions. I do think it’s better than having a wizard and I do think something like this is needed to deal with the two common cases:

  • The first-time user starts Glom and has no idea what he could do.
  • The regular user starts Glom and wants to open the database that he uses every day. Unlike with a word processor, people will rarely use more than one or two Glom files.

Glom in Maemo Chinook extras

After much struggling with branch merging and fighting with incompatible scratchbox rootstraps, an alpha version of Glom is now available for Maemo’s new Chinook SDK, in the extras repository. Thanks to Armin and Johannes.

glom_maemo_screenshot.png

Software developers might also be interested in the dependencies that we packaged, in addition to the existing gtkmm and hildon*mm libraries: libglademm, libpq (postgres client), libgda, libgdamm.

I think Glom on Maemo could be very useful for tasks such as

  • Restaurant order-taking
  • Stock taking in warehouses
  • Surveying of property
  • Note-taking for deliveries or checkpoints
  • Portable databases
  • Jack Bauer fighting crime

But so far this is purely a proof of concept. Some work would be needed to make it really useful. For instance,

  • The screenshot shows that there is a huge amount of wasted space. The spacing and padding needs to be reduced to 1 pixel everywhere, and the table title and mode can be removed. We use libglade and don’t want to have a separate .glade file for the two platforms, so maybe a new feature in Glade/libglade could help us.
  • Obviously it shouldn’t say it’s in developer mode. This client-only version can’t even do developer mode.
  • The Details/List tabs and navigation buttons need to go into the menu so they are not seen normally.
  • The treeviews needs to have column headers. Applications must do this explicitly when porting to Maemo because it GTK+ changes the GtkTreeView defaults – this is unnecessary and frustrates people.
  • Entry widgets need the hildon keyboard hints so appropriate on-screen keyboards are used for numeric or text fields, plus auto-capitalization where appropriate.
  • Use hildon widgets such as the time and date widgets (needs modifications to hildon to allow them to be empty (NULL), though these should probably be in GTK+ anyway).
  • Special layouts for the Maemo version. We need to let the developer specify a full layouts for the regular desktop version and a cut-down layout for the handheld version, so he doesn’t need to keep two separate copies of the .glom file.
  • We probably need Mathias’ height-for-width extended layout to make sure that we only have vertical scrollbars, though I think we can fit a lot into the horizontal space, at least in full-screen mode.
  • Keyboard navigation: Make sure that this works well by default and allow the developer to specify a tab sequence.
  • Dealing with loss and reconnection of the network, requesting new connections when necessary, using libconic.
  • Support Maemo’s offline mode and other states (suspend).
  • Avoid excessive network re-connections and duplicate SQL queries
  • Self-hosting of databases. Glom on maemo is currently client-only, though the desktop version has self-hosting by starting its own postgres instances. So at the moment you need a central database server and a constant network connection. It would be nice to allow the database to exist on the handheld itself. We’d probably want to port the client-only version to sqlite, though I suppose we should check postgres’s performance on the internet tablet before dismissing it. Our use of libgda should make it fairly easy to use sqlite if necessary, though some generated SQL will need attention.
  • A simple replication feature. People will often need to add or edit data while offline and then have everything reconciled when they get back to base. This is a complex issue, but I hope we can offer some simple strategies for this which don’t require much human intervention.

I hope Openismus can find funding for that work somewhere.

By the way, Armin is now working on the Windows port.

Update: Here is a new screenshot after making some of the easiest small changes:
Glom 1.6.6 on Maemo

GNOME Board 2007 candidates: The good

Some thoughts about the candidates that I’ll be voting for, and why:

The successful board

Typically, a successful board member will achieve just one big thing and three or four much smaller things. The board as a whole will achieve maybe three big things. Some of your big things will not reach completion. If you focus on just one or two big tasks then you will get at least one done. If you think that’s not ambitious enough then you will waste your energies on five different tasks, none of which you will complete.

The successful board member will get these few things done because he believes it’s important or just because he enjoys getting things done. There will be no reward or thanks for success, and certainly no punishment for failure or inactivity. Nobody will know it was your fault. Do it anyway.

And to make all this work together, a firm chairman is needed. The chairman should keep the board focused by prioritizing tasks, tracking tasks, reassigning them when necessary, and keeping discussions on track. It’s simple stuff, but it isn’t done enough and then everything falls apart quickly.

And the board needs to recognize the things that only the board can do. It’s lazy to claim that something is not a board problem if nobody else can do it. The board is there to do what individuals cannot or may not do. That includes managing the teams whose authority flows from the board (e.g. fixing the release team when its broken. It’s not now.) and making statements on behalf of the GNOME community that elected you (e.g. about OOXML or about the code of conduct). Theoretical discussions about the range of your job just waste time when you should be taking action.

I don’t want to vote for people who think this is taking it all too seriously, or expecting too much. The 50% of people who actually vote probably take GNOME seriously and devote a large part of their lives to it. Don’t let them down and don’t get in their way.

The good

  • Vincent Untz:

    I don’t know Vincent well, but he seems to pop up everywhere when something needs done. I’m really glad he’s leading the release team now (following on from Elijah, who I also admire) and hope the board continues to benefit from his energy levels.

  • Lucas Rocha:

    Lucas can focus on a task and drive it to completion, herding the necessary people along. He knows that it takes determination and persistence. Well, that’s what I think when I see his work on the GNOME Road Map.

  • Behdad Esfahbod:

    Behdad is just so easy to like. He plans to work with the various groups to set up events such as GUADEC, and I think he’s a great person to do that. Though he’s also a very technical guy, I like what he’s saying about separating administrative board tasks from architectural direction, so he’s likely to stay focused.

  • John Palmieri:

    His involvement with the OLPC and GNOME Online Desktop projects should help the board to support them, though John recognizes that the board rarely needs to set technical direction. He fitted in well to the release team and knew when to pass it on to some one else. I think he’s responsible and capable and we’d benefit if he got even more involved.

  • Luis Villa:

    Luis displayed good judgment when we dealt with a big problem on the board in 2005, and the board is now far better organized because of it. We missed out on having him as an executive director because of our unnecessary delays. I’d be happy if he takes care of the legal stuff, though I don’t believe that he’ll stay focused on only that. He should.

    Luis, you still need to reduce the verbosity that pads your insights. Try to be better than the professional bloggers who name drop you, so you outlive them.

With one exception, the others are also capable and worthy, if they can focus their work and that of the others.

And next, the bad. The very bad.