Mot-clé - Collabora

Fil des billets - Fil des commentaires

lundi, mars 30 2015

Tracking the reference count of a GstMiniObject using gdb

As part of my work at Collabora, I'm currently adding Valgrind support to the awesome gst-validate tool. The ultimate goal is to run our hundreds of GStreamer tests inside Valgrind as part of the existing QA infrastructure to automatically track memory related regressions (invalid reads, leaks, etc).

Most of the gst-validate changes have already landed and can be very easily used by passing the --valgrind argument to gst-validate-launcher. I'm now focusing on making sure most of our existing tests are passing with Valgrind which means doing quite a lot of memory leaks debugging (everyone love doing those right?).

A lot of GStreamer types are based on GstMiniObject instead of the usual GObject. It makes a lot of sense from a performance pov but can make tracking ref count issues harder as we can't rely on tools such as RefDbg or gobject-list.

I was tracking one GstMiniObject leak today and was looking for a way to get a trace each time its reference is modified. We can use GST_DEBUG="GST_REFCOUNTING:9" to get logs each time the object is reffed/unreffed but I was actually interested in the full stack trace. With to the help of the French gang (kudos to Dodji, Bastien and Christophe!) I managed to do so using this good old gdb.

First thing is to break when the object you want to track is created, you can either do this by using in gdb b mysource:line or just add a G_BREAKPOINT() in your source code. Start your app with gdb as usual then uses:

set logging on
set pagination off

The ouput can be pretty long so this will ensure that logs are saved to a file (gdb.txt by default) and that gdb won't bother you asking for confirmation before printing ouput. Now start your app (run) and once it has paused use the following command:

watch -location ((GstMiniObject*)caps)->refcount

caps is the name of the instance of the object I want to track, as defined in the scope where I installed my breakpoint; update it to match yours. This command adds a watchpoint on the refcount of the object, that means gdb will now stop each time its value is modified. The -location option ensures that gdb watches the memory associated with the expression, not using it would limit us to the local scope of the variable.

Now we want to display a backtrace each time gdb pauses when this watchpoint is hit. This is done using commands:


All the gdb instructions between commands and end will be automatically executed each time gdb pauses because of the watchpoint we just defined. In our case we first want to display a stack trace (bt) and then continue the execution of the program.

We are now all set, we just have to ask gdb to resume the normal execution of the program we are debugging:


This should generate a gdb.txt log file containing something like:

Old value = 1
New value = 2
gst_mini_object_ref (mini_object=0x7ffff001c8f0) at gstminiobject.c:362
362	  return mini_object;
#0  0x00007ffff6f384ed in gst_mini_object_ref (mini_object=0x7ffff001c8f0) at gstminiobject.c:362
#1  0x00007ffff6f38b00 in gst_mini_object_replace (olddata=0x7ffff67f0c58, newdata=0x7ffff001c8f0) at gstminiobject.c:501
#2  0x00007ffff72573ed in gst_caps_replace (old_caps=0x7ffff67f0c58, new_caps=0x7ffff001c8f0) at ../../../gst/gstcaps.h:312
#3  0x00007ffff72578fa in helper_find_suggest (data=0x7ffff67f0c30, probability=GST_TYPE_FIND_MAXIMUM, caps=0x7ffff001c8f0) at gsttypefindhelper.c:230
#4  0x00007ffff6f7d606 in gst_type_find_suggest_simple (find=0x7ffff67f0bf0, probability=100, media_type=0x7ffff5de8a66 "video/mpegts", fieldname=0x7ffff5de8a4e "systemstream") at gsttypefind.c:197
#5  0x00007ffff5ddbec3 in mpeg_ts_type_find (tf=0x7ffff67f0bf0, unused=<optimized out>) at gsttypefindfunctions.c:2381
#6  0x00007ffff6f7dbc7 in gst_type_find_factory_call_function (factory=0x6dbbc0 [GstTypeFindFactory], find=0x7ffff67f0bf0) at gsttypefindfactory.c:215
#7  0x00007ffff7257d83 in gst_type_find_helper_get_range (obj=0x7e8280 [GstProxyPad], parent=0x7d0500 [GstGhostPad], func=0x7ffff6f2aa37 <gst_proxy_pad_getrange_default>, size=10420224, extension=0x7ffff00010e0 "MTS", prob=0x7ffff67f0d04) at gsttypefindhelper.c:355
#8  0x00007ffff683fd43 in gst_type_find_element_loop (pad=0x7e47d0 [GstPad]) at gsttypefindelement.c:1064
#9  0x00007ffff6f79895 in gst_task_func (task=0x7ef050 [GstTask]) at gsttask.c:331
#10 0x00007ffff6f7a971 in default_func (tdata=0x61ac70, pool=0x619910 [GstTaskPool]) at gsttaskpool.c:68
#11 0x0000003ebb070d68 in g_thread_pool_thread_proxy (data=<optimized out>) at gthreadpool.c:307
#12 0x0000003ebb0703d5 in g_thread_proxy (data=0x7ceca0) at gthread.c:764
#13 0x0000003eb880752a in start_thread (arg=0x7ffff67f1700) at pthread_create.c:310
#14 0x0000003eb850022d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
Hardware watchpoint 1: -location ((GstMiniObject*)caps)->refcount

Old value = 2
New value = 1
0x00007ffff6f388b6 in gst_mini_object_unref (mini_object=0x7ffff001c8f0) at gstminiobject.c:442
442	  if (G_UNLIKELY (g_atomic_int_dec_and_test (&mini_object->refcount))) {
#0  0x00007ffff6f388b6 in gst_mini_object_unref (mini_object=0x7ffff001c8f0) at gstminiobject.c:442
#1  0x00007ffff6f7d027 in gst_caps_unref (caps=0x7ffff001c8f0) at ../gst/gstcaps.h:230
#2  0x00007ffff6f7d615 in gst_type_find_suggest_simple (find=0x7ffff67f0bf0, probability=100, media_type=0x7ffff5de8a66 "video/mpegts", fieldname=0x7ffff5de8a4e "systemstream") at gsttypefind.c:198
#3  0x00007ffff5ddbec3 in mpeg_ts_type_find (tf=0x7ffff67f0bf0, unused=<optimized out>) at gsttypefindfunctions.c:2381
#4  0x00007ffff6f7dbc7 in gst_type_find_factory_call_function (factory=0x6dbbc0 [GstTypeFindFactory], find=0x7ffff67f0bf0) at gsttypefindfactory.c:215
#5  0x00007ffff7257d83 in gst_type_find_helper_get_range (obj=0x7e8280 [GstProxyPad], parent=0x7d0500 [GstGhostPad], func=0x7ffff6f2aa37 <gst_proxy_pad_getrange_default>, size=10420224, extension=0x7ffff00010e0 "MTS", prob=0x7ffff67f0d04) at gsttypefindhelper.c:355
#6  0x00007ffff683fd43 in gst_type_find_element_loop (pad=0x7e47d0 [GstPad]) at gsttypefindelement.c:1064
#7  0x00007ffff6f79895 in gst_task_func (task=0x7ef050 [GstTask]) at gsttask.c:331
#8  0x00007ffff6f7a971 in default_func (tdata=0x61ac70, pool=0x619910 [GstTaskPool]) at gsttaskpool.c:68
#9  0x0000003ebb070d68 in g_thread_pool_thread_proxy (data=<optimized out>) at gthreadpool.c:307
#10 0x0000003ebb0703d5 in g_thread_proxy (data=0x7ceca0) at gthread.c:764
#11 0x0000003eb880752a in start_thread (arg=0x7ffff67f1700) at pthread_create.c:310
#12 0x0000003eb850022d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
Hardware watchpoint 1: -location ((GstMiniObject*)caps)->refcount

If you see this kind of error in your log

Error evaluating expression for watchpoint 1 value has been optimized out

this means you may have to rebuild your application and/or its libraries without any optimization. This is pretty easy with autotools:

make clean
CFLAGS="-g3 -ggdb3 -O0" make

Now all you need is to grab a good cup of tea and start digging through this log to find your leak. Good fun!


Daniel pointed out to me that watchpoints can be pretty unreliable in gdb. So here is another version where we ask gdb to break when our object is reffed/unreffed. You just have to figure out its address using gdb or simply by printing the value of its pointer.

b gst_mini_object_ref if (mini_object == 0xdeadbeef)
b gst_mini_object_unref if (mini_object == 0xdeadbeef)
commands 1 2

jeudi, décembre 18 2014

Kernel hacking workshop

As part of our "community" program at Collabora, I've had the chance to attend to a workshop on kernel hacking at UrLab (the ULB hackerspace). I never touched any part of the kernel and always saw it as a scary thing for hardcore hackers wearing huge beards, so this was a great opportunity to demystify the beast.

We learned about how to create and build modules, interact with userspace using the /sys pseudo-filesystem and some simple tasks with the kernel internal library (memory management, linked lists, etc). The second part was about the old school /dev system and how to implement a character device.

I also discovered which is a great tool for browsing and find your way through a huge code base. It's definitely the kind of tool I'd consider re-using for other projects.

So a very a cool experience, I'm still not seeing myself submitting kernel patches any time soon but may consider trying to implement a simple driver or something if I ever need to. Thanks a lot to UrLab for hosting the event, to Collabora for letting me attend and of course to Hastake who did a great job explaining all this and providing fun exercises (I had to reboot only 3 times! But yeah, next time I'll use a VM :) )

kernel-workshop.jpg Club Mate, kernel hacking and bulgur

lundi, juillet 30 2012

Empathy BoF at GUADEC

I'll lead an Empathy BoF session tomorrow (Tuesday) from 4 to 6 (room 2.2a) feel free to show up if you are interested about the recent redesign work we have done in Empathy and our plans for the future.

Btw, a bunch of people have asked me about two annoying Telepathy issues:

 * GTalk contacts not showing up. That's actually a telepathy-glib bug which has been fixed in 0.18.2. If you are running F17 you can upgrade by grabbing the package from updates-testing: yum --enablerepo=updates-testing update telepathy-glib
 * Not being able to chat with 'People Nearby' contacts. Turns out that's because of Fedora's stupid firewall blocking incoming connections; disabling the firewall should make you reachable with Salut.

vendredi, juin 15 2012

New Empathy contact list

I've been working for a while implementing a new Empathy contact list and I'm happy to announce that this work just reached master! It's based on a brand new design from Allan; I'm pretty happy with the result as it looks pretty similar to the mockups.

This new contact list has been implemented using Alexander's awesome EggListBox. This new GTK+ container has been extracted from Contacts to its own git repository to be easily usable by other applications using git submodule or subtree. If you've ever cursed at GtkTreeView for being such a pain to use you should really give it a try. It's a delight to use: you can pack any GtkWidget in it and so don't have to use GtkTreeModel and GtkCellRenderer any more.

New Empathy roster - no group

One of the goals of this new design is to unify the way contacts are presented to users across the whole GNOME desktop, which is why it looks pretty similar to Contacts. We also wanted to make it look 'cleaner' so presence statuses are now only displayed if the contact explicitly defined one. Groups have been disabled by default as most users don't really use them (they are not as useful as they used to be as you can quickly find any contact using the integrated live search) but can easily be re-enabled in the preferences dialog.

A very nice feature of this new roster are the 'top contacts' which are always displayed at the top of the contact list. It contains the contacts you tagged as 'favourite' but also the contacts you to talk most often. This is done using Folks's Zeitgeist integration[1].

New Empathy roster - groups

I want to thanks all the people involved especially Alexander for his help with EggListBox, Allan for his design, Seif for the Zeitgeist integration, Danielle who reviewed my code, Intel who funded parts of the Folks and Zeitgeist work and of course Collabora who sponsored most of this work.


[1] It's actually disabled atm as we are waiting for a Folks release which should happen soon

lundi, janvier 16 2012

GNOME Beer event at FOSDEM 2012

Despite what some stats may say, my biggest contribution to GNOME is not in bugs or code but in the organization of beer related events!

So I'm pleased to announce that, like each year, we'll have a GNOME Beer party on the Saturday night of FOSDEM (4th Feb). People seemed happy of the location of last year, so we decided to stay at "La Bécasse" in the city center. Feel free to add yourself to the wiki if you are planning to attend.

See you at FOSDEM!

mardi, septembre 27 2011

Calling phone numbers in GNOME 3.2

One of my favourite feature of my N900 is the ability to very easily call a contact using my SIP account. Calling phone numbers in Empathy through SIP is possible since a while using the New Call dialog but you have to enter the number manually which can be annoying. Thanks to Folks's evolution-data-server backend, GNOME 3.2 will allow you to very easily call contacts from your address book!

First step is to mark a SIP account as being able to call phone numbers. We added an option for that in the accounts dialog.


Then if an IM contact is linked to an Evolution one having at least a phone field, you can call him from the contact list! Soon you should be able to call IM contacts publishing their phone numbers in their personal personal info as well.


You can also call any contact using gnome-contact directly; just click on the phone icon next to the phone number.

gnome contacts

This is pretty cool because thanks to gnome-shell's contact integration it's now easier than ever to call a contact. Just search for him in the Shell overview and then start the call from gnome-contacts. That's the kind of integration we were aiming for when we started the Telepathy and Folks projects and it's great to see that we are finally getting there!

lundi, août 29 2011

Shiny new UI in Empathy 3.2

One of our main goals during this developement cycle was to continue improving Empathy's user experience by re-designing different parts of the UI. To do so our Empathy team at Collabora worked closely with designers from the awesome GNOME Design Team.

The log viewer has been completely re-written based on an original design from Matthew Paul Thomas (Canonical). As you can see, this new log viewer now displays calls and offers different options to easily search through the mass of logs.

Empathy 3.2 will also introduce a whole new experimental user interface for audio and video calls designed by Nick Richards (Intel). The new UI is based on Clutter and allows users to select the webcam and microphone used during the call, move the video preview around, etc. It should also gain support for video effects once Raluca finishes integrating her work with Nick's design. This new UI will be optional in 3.2 as it relies on new Telepathy API but will definitely become the default as soon as those API are stabilised.

Not actually me

I have to say that working closely with designers is a really enjoyable experience. It's good to have people to ask to when we are unsure about the best way to present a feature or an option to users. I'm really looking forward to continuing to improve Empathy with them.

vendredi, août 5 2011

GNOME IM integration BoF during the Desktop Summit

Like 36 other Collaborans, I'm going to attend to the Desktop Summit in Berlin.

I'll lead the GNOME IM integration BoF session on Thursday. It will basically be a follow up of our Hackfest in June so if you are interested into instant messaging integration in GNOME feel free to join us.

mercredi, mars 16 2011

New Empathy icon!

Since its first release, Empathy was using the Telepathy logo as icon.

This icon suffers different problems, the main ones being its look in smaller sizes. Also, 2 blue heads may not be the best way to present an IM client to users.

So, after lot of discussions and different propositions, Empathy has now, thanks to Jakub Steiner, a new icon! As you can see, we now have slightly different versions depending on the size.

I hope you'll like it!

vendredi, octobre 1 2010

What's new in Empathy 2.32.0?

GNOME 2.32 was released a few days ago. As most of the developers focused on the upcoming 3.0 it's not exactly the most exciting release ever but I'm glad to say that Empathy is one of the modules with the most user-visible changes.

  • The main one is definitely meta-contacts. Thanks to the awesome work of Travis Reitter and Philip Withnall, it is now possible to easily link contacts together. This has been achieved using Folks, our new contacts aggregator library. See Travis's post if you want to know more about Folks.

  • Another new feature I really like is the contacts list live search implemented by Felix Kaser and Xavier Claessens. It allows you to very quickly find any of your contact by typing in the contact list. I hope to see more GNOME applications using this feature in the future as it's a very efficient way to dig through a treeview. Xavier even proposed to add this feature directly to GTK+. See Felix's post if you want to see it in action.
  • Notifications bubbles now have actions buttons allowing you to quickly accept or decline incoming events such as calls, file transfers, room invitations, etc.

  • Server certificates have been improved thanks to Cosimo Cecchi. Empathy can now ask the user if he wants to accept an untrusted certificate.

  • The IRC account widget has been improved to make it easier to select your IRC network. You can easily search through the list of networks using the live search feature and you can now create IRC accounts using the accounts assistant.

  • Empathy is now able to display vCard of your contacts and allow you to edit your own.

  • The audio/video pane gained a Details page displaying technical info about the call such as the codecs used which is always nice when you want to know what's going one without digging the logs

  • Some preferences have been added, by popular request, such as the ability to disable chat logging or automatically display incoming events (without blinking in the status area).
  • Connection error messages have been improved. Hopefully it should now be easier to understand the problem when an account fails to connect.
  • Empathy is now using status icons from the theme so artists can easily tweak them to fit well with the rest of your desktop.

Once you'll update your distribution you'll probably also update your Telepathy components. These upgrades should bring you some nice new features as well:

  • GTalk compatible p2p file transfers allowing you to exchange files with users of Google's GTalk desktop client. See Youness's post for details.
  • MSN file transfers and the return of MSN audio/video calls
  • And, last but not least, proxy support! Telepathy-gabble and telepathy-butterfly should now be able to make use of your proxy settings when connecting. Once again, best to check the blog of the one who implemented the feature if you are interested in details: Nicolas

Most of this work has been sponsored by my employer Collabora. But let's not forget all the contributors who have done a great job at reporting and triaging bugs, submitting patches, writing documentation, translating, etc. Your hard work is greatly appreciated!

mercredi, juillet 28 2010

GUADEC: Collabora party and Telepathy/Empathy talk

Once again I'm attending GUADEC thanks to my employer Collabora. There are certainly a lot of interesting things going on during these 3 days but I'd like to highlight 2 events that you certainly don't want to miss.

The traditional Collabora GUADEC party will take place on Thursday night at 7pm and will be a barbecue over the beach! Check the parties map for the exact location.

Friday at 9:30 am I'll give a talk called GNOME 3: the Telepathic Desktop. The first part of the talk will be some kind of overview of the cool new stuff we have recently added to the Telepathy framework or which should land soon. I'll also talk about the work we have done to make Telepathy easier to use by third party applications. The second part of the talk will present new features we have added to Empathy during this cycle. I'll also focus on integration of Telepathy in the GNOME desktop in general. I'll have some demos to show hoping they won't fail horribly. :)

Hope to see you there. I know that's pretty early in the morning, especially after the Collabora party but I'll be there in time so you don't have any excuse. :p

edit: Seems there is a live stream of sessions so you should be able to watch the talk even if you are not at the conference.

jeudi, juillet 8 2010

Empathy ported to GTK+3

As a good GNOME citizen, Empathy 3.0 will have to be able to build with GTK+3. As Ubuntu is not going to ship GTK+3 by default in its next release, we decided to stay compatible with GTK+2 for this cycle.

Empathy already built with GSEAL checks so porting was just a matter of playing with autoconf. Libraries linking to GTK+ itself have to be updated as we can't use GTK+2 and GTK+3 in the same process:

  • libcanberra-gtk, webkit-gtk and libunique now have releases using GTK+3 instead of GTK+2 so all we had to do was to change the PKG_CHECK_MODULES calls to check for the -3 flavour of the libs.
  • nautilus-sendto plugin has been ported as well since 2.90.0 but it breaks its public API so we had to do some #ifdef magic to stay compatible with older versions.
  • Since 0.5.1 libnotify doesn't link on GTK+ any more but use GModule instead (Thanks Bastien!) so we just had to make sure that this version was used when building with GTK+3.
  • Unfortunately clutter-gtk and champlain haven't been ported to GTK+3 yet so we had to disable champlain support for now. I hope to see a port of these libs soon.

During configure, we check if GTK+3 is present; if it is then we check for these new version of the deps. If it's not or if Empathy has been configured with --enable-gtk3=no then we continue to use GTK+2 and the old versions of the libs.

If you're interested in details, everything has been merged to master so you just have to look at Empathy's file.

This should hopefully make all the distributions happy during the transition. Once Empathy 3.0 is released we'll drop GTK+2 compatiblity and will start using the fancy new features offered by GTK+3.

vendredi, mai 28 2010

Interview in Linux Pratique Essentiel

Few weeks ago I answered some questions to Anthony Carré (yeKcim) for a French Linux magazine oriented end-users. The interview is now available in Linux Pratique Essentiel no 14.

I talk about the Empathy and Telepathy projects: what are our goals, what we are trying to achieve, our plan for the future, how to contribute, etc.

You can skim through the magazine on their website but this is what the 3 pages of the interview look like:

jeudi, mai 20 2010

Azimuth 0.2 released

I just uploaded the second release of Azimuth, the Maemo application allowing to publish your location to your contacts.

Lot of cool stuff in this new release! Thanks to Alban Crequy Azimuth gained a control panel menu. It can be used to easily enable/disable publishing so you can now safely install Azimuth even if you don't want to always publish your location (be aware that this option is turned on by default though). We also added an option to reduce the accuracy of the published position if you don't want to publish your exact location to your contacts. There is a third button than can be used to quickly turn the GPS on/off but be aware that letting the GPS always running will drain your battery.


Azimuth in the settings panel


Azimuth's control panel

Last but not least, Azimuth now has its own icon! Anthony Carré (yeKcim) designed a great icon which fit pretty well with the existing Maemo icons. I hope you'll like it as much as I do. Anthony is well known for his graphic work on the Wormux game.


I'm glad that my small pet project already attracted 2 contributors. :)

Here is the NEWS file:

* Add control panel
* Add option to enable/disable Azimuth
* Add option to reduce accuracy of the published position
* Add option to enable the GPS
* Use Maemo GPS icon
* Set Maemo display name
* New icon thanks to Anthony Carré (yeKcim)

dimanche, avril 25 2010

Introducing "Azimuth" for Maemo

Here is a small project I've been working on in my copious spare time.

The Nokia N900 is a great device but I felt kinda frustrated not being able to publish my location to my contacts in a way that Empathy can display it. Good news is the N900 uses Telepathy so that's something that can easily be fixed.

Here comes Azimuth a small daemon publishing your location using the Telepathy Location interface. The interface is only implemented in telepathy-gabble at the moment[1]. That means that your Jabber server has to support Pubsub to be able to publish. Unfortunately, Google Talk servers don't[2]; see the Telepathy FAQ for details.

I just uploaded the first version of Azimuth to Extras-devel (thanks Bigon for the package!) so you should be able to easily install it. This is my first Maemo application so I kept it pretty simple for now. Azimuth doesn't enable the GPS itself so you have to start another application using the GPS (as OVI Maps or Map Buddy for example) to publish.

So, if you want to test it you have to:

  • Install Azimuth
  • Reboot your N900 (the package doesn't start it automatically; suggestions about how to fix that properly are welcome[3]).
  • Set your IM presence to online
  • Start an application making use of the GPS

Be aware that once installed Azimuth will always publish your location when an application is using the GPS and your IM accounts are connected!

Plans for future versions include:

  • Add UI (probably a settings widget) to easily enable/disable publishing.
  • Allow Azimuth to poke the GPS for a position every $N minutes/hours
  • Add an option to reduce location accuracy for privacy reasons.
  • Allow using the Cell to get a position?
  • If you have more artistic skills than I have, an icon would be much appreciated.

If you experience issues or have nice ideas for improvements feel free to mail me. You can also use the Garage page if you feel brave enough. :)

Empathy displaying location using libchamplain


[1] XEP-0080 if you're into XMPP

[2] Google, I hate you for this

[3] The trick is to start the daemon as user and not root

lundi, mars 29 2010

Empathy 2.30 released

Here we go; after 6 months of work I just released Empathy 2.30 and I have to say I'm pretty happy with this milestone. As expected we didn't complete the full roadmap but I think we have done a good job making our software better and easier to use.

Let's see few of the new things this release brings to our users.

Improved accounts dialog

  • The accounts dialog now lives in its own process and can be started from the Gnome Preferences menu, even if Empathy is not running.
  • We improved its interface so that you can easily see the status of all your accounts and the detailed status of the selected account.

  • The first-time run accounts assistant had also be improved. It should now be more reliable and ask for details when creating the link-local XMPP account (aka Bonjour in Mac's world).

  • Thanks to K. Vishnoo Charan Reddy, we gained nice icons for a lot of protocols. Speaking of icons, if someone wants to design a better icon for link-local XMPP I'd be happy to use it. :)

Better chat room support

  • Empathy now supports a subset of most used IRC commands such as /join, /topic, /nick.
  • It is now also possible to join password-protected rooms[1].

Better error reporting

  • The contact list now displays a nice bar when an account is disconnected. You can easily try to reconnect it or open the accounts dialog to change its settings.

  • We also use these nice GtkInfoBar to display an error if something goes wrong during a VoIP call.


  • You can now easily send files to your contacts by drag and dropping to the contact list or a chat window.
  • The chat window gained a nice search bar.

  • Links in status messages are now clickable.

For Developers

  • We stopped pretending to be a library and so dropped libempathy and libempathy-gtk. Those libs never had any API/ABI guarantee and was a burden without real benefits. Plan is to continue to improve telepathy-glib client side API and create telepathy-gtk containing widgets useful for most applications.
  • Empathy 2.30 also stopped to dispatch tube channels. Tube applications should now use the very nicely designed Mission Control API. We ported Vinagre so be sure to upgrade it as well if you want to continue to use the desktop sharing feature with Empathy 2.30.
  • Empathy can now use the ContactCapabilites interface so if you are using telepathy-gabble 0.9.x Empathy will refuse to send files to contacts who don't support file transfers (such as Facebook contacts for example).

Those are just a few examples, we fixed more than 310 bugs during this cycle! If you are interested in more details, I suggest you to read the NEWS file.


[1] be sure to have at least telepathy-idle 0.1.6 if you want to use this feature with IRC

jeudi, février 11 2010

Facebook chat in Empathy

As you probably know, Facebook now allows you to connect to Facebook chat using any XMPP client. This is a great news as it allows Facebook users to chat using Free Software and can potentially bring millions of new people to XMPP, our favorite IM protocol.

As a XMPP client, you can already use Empathy to connect to Facebook. Alan wrote a nice post explaining how to configure Empathy to do so.

One of our main goals with Empathy is to make the application really easy to use for all kinds of users. So, today I added a new widget to configure Facebook accounts. Facebook now appears as a separate protocol[1] and the widget provides information to the user about how to configure it properly.

The release team folks have been kind enough to allow merging the branch despite the UI freeze so this new widget will be available in Empathy 2.29.91 (which will be released the 22th of Feb) and of course 2.30!


[1] as GTalk does

mercredi, décembre 23 2009

Moovida ARTE plugin

Few weeks ago I released a new plugin for Moovida. This little brother of my RTBF plugin brings content from the ARTE+7 website to Moovida.

ARTE is a cultural Franco-German public TV network providing lot of very interesting documentaries. Unfortunately, because of legal reasons, most of the documentaries are only available from Germany, France and Belgium. That's a shame because the content is generally pretty good. So if you are lucky enough to live in one of those countries you should really install Moovida and give the plugin a try (it should be installed by default now).

Three weeks ago Fluendo and Mandriva organized a plugin developement contest. The contest ended last week and I won! To celebrate that I wrote a small text introducing myself and my FOSS contributions on the Moovida blog.

mercredi, octobre 21 2009

Empathy 2.30 Roadmap

More and more distributions are now planning to ship Empathy as their default chat client: Fedora, Mandriva, Moblin, OpenSuse, Ubuntu, and so on. As a result of this, and because we want to offer the best experience to our users, we at Collabora decided to put more resources on the Empathy project. That's why, as of this Monday, I'm now working full-time on Empathy, and have become co-maintainer with Xavier.

One of my first tasks has been to write a roadmap for Empathy 2.30. As I said on the wiki page, these are really just guidelines detailing the general direction we want to give to the project. We'll, of course, continue to review patches[1] from contributors and to fix nasty issues such as regressions and crashers reported by users.

So don't hesitate to report any issue you could have experienced with Empathy and join the Empathy/Telepathy community to help us to make 2.30 rock!


[1] yay for the new review feature on the GNOME Bugzilla!

mardi, septembre 22 2009

Empathy 2.28: Easy Desktop Sharing

One of my favorite new feature in Empathy 2.28 is definitely the Vino and Vinagre integration. Users can now easily share their desktop with their contacts by a simple click in Empathy. The contact then receives an invitation which will automatically launch Vinagre and connect it to the Vino server of the sharer. No need to worry about sending your internet IP or open and forward a port in your firewall; all the technical details are hidden to offer the easiest user experience as possible.

This integration between IM and application is done by using Telepathy tubes in Vino and Vinagre. Kudos to Arnaud Maillet who worked on this as his internship project at Collabora and to the Vino/Vinagre developpers who welcomed our work with lot of enthusiasm.

With the switch to Mission Control 5, I hope to see more and more projects starting to use Telepathy in order to increase the collaborative user experience in the GNOME desktop.

What next?

Better integration

Mission Control 5 and the new ContactCapabilities interface will allow us to improve the integration during the 2.30 cycle. We'll be able to hide the 'Share my desktop' button if Vino hasn't been built with Telepathy support and to unsensitive it if the contact doesn't have a tube enabled Vinagre installed.

Better performance

Currently telepathy-gabble tries to connect the tube to the peer using the following algorithm:

  • If available connect to peer's IPv6 address
  • Try to connect to peer's IPv4 address
  • Try to use a SOCKS5 proxy
  • Fallback to IBB

That means that if your are on a different LAN than your contact, without IPv6, and that your Jabber doesn't provide a fast SOCKS5 proxy, the connection will be pretty slow. We hope to solve this at some point by implementing stream tube Jingle NAT penetration in telepathy-gabble. Thanks to the Telepathy abstraction, Vino and Vinagre won't have to change a single line of code to benefit from this improvement; they'll magically start to use it as soon as Gabble gains this feature!

KDE interoperability

George is also working on implementing similar feature in KDE using Kopete, krdb and krdc. Easy cross desktop sharing is coming!


Share your desktop in one click

- page 1 de 2