Trying out Chromium (Google Chrome)

Due to tiredness with Firefox eating all my memory, getting out-of-memory killed for eating all of my memory, getting kind of slow (probably because it ate all of my memory) and an annoying layout bug in one website (which strangely didn’t appear on any other machine using Firefox except mine); I have decided to give Chromium a go (also, Melbourne is currently full of Google Chrome ads, this may have contributed to my decision).

Initial niggle was that it doesn’t seem to have a concept of minimum font size exposed in the UI. You can edit a config file to solve this, which is significantly less annoying than the extension that resizes your page 5 seconds after it loads.

Most of the extensions I use are available for Chrome, except I haven’t found an analogue for the very useful highlighter extension.

Telepathy GIT repositories move to freedesktop.org

Although Telepathy has always been a freedesktop project, for the longest time the repositories were hosted on Collabora’s git server (I blame the original use of darcs). Sjoerd informed me today that this is no longer the case and the repositories have finally been moved to freedesktop.org where they belong.

The repositories are still available read-only on git.collabora.co.uk for the time being. It’s not known to me when they might be moved to an archive directory or go away completely.

You can update your remotes with git remote set-url, in shell it looks like this (assuming your origin is Telepathy upstream):

# set NEW_URL appropriately
NEW_URL=git://anongit.freedesktop.org/telepathy/
# NEW_URL=ssh://git.freedesktop.org/git/telepathy/

for d in telepathy-*; do
  ( cd $d && \
    git remote set-url origin $NEW_URL$d && \
    git remote update -p origin )
done

~

Also in case you missed it, telepathy-sofiasip, the SIP connection manager has been renamed to telepathy-rakia. SofiaSIP is the name of the library that telepathy-rakia uses and since Telepathy connection managers are often referred to by the last part of their name (e.g. gabble, haze, butterfly), calling it sofiasip was ambiguous. Like all Telepathy names, there is a tenuous link between the name of the protocol and the name of the CM.

announcementses

The biographies of the advisory group for the Ada Initiative was recently announced and I’m extremely proud to say that I’m a part of it.

In other news, I merged support for contact blocking in Empathy 2.33.2, which will be in the Empathy 2.34 release (the gtk2 branch of Empathy), for Telepathy connection managers that support blocking (at least Google Talk). Hopefully my talented GOPW intern Chandi will find time to forward port that work to master (i.e. Empathy 3.x) before I do, so everyone else can enjoy it too.

Thanks to the hard work of other Collaborans (Emilio and Sjoerd), Empathy 2.33.2 also has experimental support for Call, the new VoIP API in Telepathy that supports a lot more than the older StreamedMedia API.

LD_PRELOAD GObject lifetime debugging tool

For years and years I’ve dreamt of a tool that would show me what GObjects are currently alive, and let me have a look at information about them. Today, while trying to debug a particularly horrid reference leak (program wedged under refdbg, and without being able to script SIGTRAP I’ve never found this method useful), I actually started writing the tool.

The tool uses LD_PRELOAD to replace g_object_new() — it should really replace g_object_newv() and g_object_new_valist() also, but I didn’t need those — to install a weak reference on the created objects to track their lifetime.

The result of which is something like this:

[danni@adelie src]$ LD_PRELOAD=libgobject-list.so \
    GOBJECT_LIST_FILTER=Gabble GABBLE_PERSIST=1 \
    /usr/lib/telepathy/telepathy-gabble 
 ++ Created object 0x9912530, GabbleGatewayPlugin
 ++ Created object 0x990c460, GabblePluginLoader
 ++ Created object 0x9917ab8, GabbleJabberProtocol
 ++ Created object 0x99172f0, GabbleConnectionManager
...

You can then list the currently living objects and their reference counts by sending SIGUSR1.

[danni@adelie src]$ killall -USR1 telepathy-gabble
Living Objects:
 - 0x9b47038, GabblePresence: 1 refs
 - 0x990c460, GabblePluginLoader: 2 refs
 - 0x9918ae0, GabbleRosterChannel: 1 refs
 - 0x991cb38, GabbleIMChannel: 1 refs
...

This by itself was useful in showing which object wasn’t finalized but should have been (and why my object in question also hadn’t finalized), but didn’t show me who was still holding the reference.

My hunch was that the problem was a reference cycle between two objects, so I hacked a bit of code into my tool to list the “connection” property on all objects that had it. [In Telepathy Connection Managers, objects are typically meant to let this go when connections become disconnected.]

  while (g_hash_table_iter_next (&iter, (gpointer) &obj, NULL))
    {
      GObjectClass *klass;
      GObject *conn;

      g_print (" - %p, %s: %u refs\n",
          obj, G_OBJECT_TYPE_NAME (obj), obj->ref_count);

      klass = G_OBJECT_GET_CLASS (obj);
      if (g_object_class_find_property (klass, "connection") != NULL)
        {
          g_object_get (obj,
              "connection", &conn,
              NULL);
          g_print ("\t + connection = %p\n", conn);
          if (conn != NULL)
            g_object_unref (conn);
        }
    }

This showed me which object was still holding a ref it should have let go. [Now I just need to work out why, the code in question is in an abstract base class, for which 5 of 6 concrete classes work correctly.]

If you’re interested, the code is in Git.

The tool could still benefit from a lot of work. For instance, the filtering is pretty basic at the moment and it should support all the ways to create GObjects. Originally I had envisioned this tool as a GUI window that popped up, so that you could click on an object and view all of its properties, connected signals, etc. That would be pretty neat actually.

Update: cassidy has already contributed by adding a listing of the objects remaining when a program exits and thus found a leak in Empathy. Awesome!

The Ada Initiative

A couple of weeks ago at linux.conf.au I was invited to a meeting to help brainstorm on a new initiative being set up by open source contributors Valerie Aurora and Mary Gardiner. That initiative, the Ada Initiative, has just been launched.

The Ada Initiative is a new non-profit organization dedicated to increasing participation of women in open technology and culture, which includes open source software, Wikipedia and other open data, and open social media.

The Ada Initiative is focused on helping women get careers in open technology through recruitment and training programs for women, education for community members who want to help women, and working with corporations and projects to improve their outreach to women.

Get more information from the launch announcement.

N.B. The Ada initiative should not be confused with Ada Lovelace Day, which incidentally has been moved further back in the year to October 7.

Creative Commons Attribution-ShareAlike 2.5 Australia
This work by Danielle Madeley is licensed under a Creative Commons Attribution-ShareAlike 2.5 Australia.