vendredi 16 décembre 2011

FOSDEM Crossdesktop devroom

GNOME, KDE, XFCE, ... will be present at FOSDEM this year in the crossdesktop devroom. The call for talks has been out for a few weeks now and the deadline (December 20th) is quickly approaching, it's next Tuesday! So don't delay your talk proposal any further, just email the crossdesktop devroom mailing list now :)

Talks can be specific, such as developing GNOME application with Vala; or as general as predictions for the fusion of Desktop and web in 5 years time. Topics that are of interest to the users and developers of all desktop environments are especially welcome. The FOSDEM 2011 schedule might give you some inspiration.

vendredi 17 juin 2011

Spicy apples

It has been a few months since I've  been hired by Red Hat to hack on Spice, and I realized I haven't blogged as much as I should have :)


First, let me introduce Spice quickly. Spice is a protocol which then gets implemented in clients such as Vinagre (using the spice-gtk widget) and in servers (QEMU or the experimental X11 driver). Using this protocol, the video, sound, keyboard, mouse inputs and ouputs can be abstracted away from a virtual machine. This means you can run a Spice client application on one box to get the display of a QEMU virtual machine running on another box. Or you can have a big server running dozens of virtual machines, and connect to the VM you're interested in from your laptop. Or you use it in a VDI setup where you'll have N different PCs connecting to a single server running N virtual machines.

One of the thing I've done during these few months at Red Hat is to look into building a Mac client for Spice. Indeed, so far we have a linux client (as well as a GTK widget if you want to embed Spice in your applications, a Windows client, but nothing on Mac OS X. Since I was the only one in the team with a functional OS X install, I was volunteered to look into this port ;)

The long way toward Vinagre on OS X

I started by building the gtk+ OS X port. Using these build instructions, it was quite straightforward even though it took some time since there were a few bugs to fix here and there in the stack. Then I realized I needed gtk3 and that I had only built gtk2, so I started again, and fixed some more bugs (the glib maintainers really didn't want me to succeed :-) )

Once I had gtk-demo running, it was time to start thinking about my real goal, getting spice-gtk and vinagre to compile. Luckily, I had made a jhbuild moduleset for these, which I could reuse (after adapting it) for the OS X build since gtk-osx is using jhbuild too. This way, I could focus on the real porting work. The easy bits were tweaking spice-gtk build options to use gstreamer instead of pulse-audio, gthreads instead of coroutines, ... And then I finally had to do some actual porting work ;) This ranged from small fixes due to OS X BSD roots, or to older libraries on OS X, to new code to write because there was some linux/Windows specific code to handle screen detection/resolution changes. And after that, lo and behold, I could connect to my remote VM from my Mac!

Then, with the help of Marc-André, I could tackle Vinagre. This mainly meant making some Vinagre dependencies optional (namely gtk-vnc, gnome-keyring and GtkApplication) because I didn't want to compile/use dbus. After some confusion because of a regression in glib causing Vinagre to crash on startup, I was really thrilled to connect to finally connect to a virtual machine running on my work laptop from my Mac OS X laptop!

While this was great, things were far from being over :) In order for this work to be usable by other people, I had to build an application bundle, this basically means making Vinagre relocatable at runtime. Thanksfully, the work from the people porting gtk+ to OS X came to the rescue once again! They provide an ige-mac-bundler to help generate application bundles for gtk+ applications. I had to tweak it since it's not fully ready for gtk3 yet, and to figure out how to get it to change the location of libpeas plugins, typelibs, pango modules, gdk-pixbuf modules at runtime. The good new is that all these modules provide handy environment variables which help with that (PEAS_PLUGIN_LOADERS_DIR, GI_TYPELIB_PATH, PANGO_SYSCONFDIR and GDK_PIXBUF_MODULE_FILE), but it took quite a bit of trial and error to figure out all of these :) Last but not least, I wrote a few patches for Vinagre to add similar environment variables to locate its data files.

The reward

And here is the final result (disclaimer: it's still a work in progress) :

As you can see in the video above (bigger ogg version here), it's already working pretty well, you can connect to a VM, go fullscreen, sound is working, ... But as always, there are still some improvements to be done...
The most important one is to upstream the various changes I had to make in Vinagre, spice-gtk and ige-mac-bundler. For spice-gtk, this is mostly done, for Vinagre and ige-mac-bundler, I have to clean up the changes first. I also have to make building Vinagre on OS X much easier  And then, there is more work to do to polish the OS X integration, like looking at GtkOSXApplication to get the usual OS X top menu bar, finding a better looking theme, having a native GtkApplication backend, and developing native OS X code for things like monitor detection/resolution changes/... (which is currently not implemented/not working). And obviously, it also needs lots of testing :)

All in all, I'm pleased with the result so far, it's a really good basis for a rocking Spice OS X client! Any takers for working on an iOS Spice client next ?

mercredi 30 mars 2011

Public Announcements

GNOME 3 in Paris

Thanks to YoBoY, there will be a GNOME 3 release party in Paris. It will happen on Friday, April 8th, registration is mandatory, and the number of available seats is limited, so register now for the party! There will be some GNOME 3 goodies ;)

Summer of Code

If you are a student, you can now apply for this year Google Summer of Code! GNOME is a mentoring organization this year again, this means you can be paid to hack on GNOME for a whole summer. Just browse our list of ideas for potential projects, or you can just write a proposal for any idea that you care about and would make GNOME even cooler!

Personal Life

I'm really happy to announce that I've started working at Red Hat last week. I have joined the Spice team and I'm looking forward to do great stuff (take over the world, this kind of things ;) with the people working there. Hopefully I'll get my own red hat soon!

mercredi 23 mars 2011

Transferring contacts to an iDevice

Recently, I wanted to transfer my addressbook from my good old but dying Sony Ericsson W910i phone to one of Apple iOS devices (aka iPhone 4).

Reading the contacts out of the old phone was a bit hackish but pretty straightforward using gammu/wammu and a bit of hacking. I didn't manage to import 100% of the data in GMail/evolution-data-server (had to retype a few addresses/phone numbers by hand), but I decided I could live with that.

Then I looked at the computer to iDevice writing, thinking it would be a pretty similar process, ie grab an existing tool, do a bit of fiddling and be done with it. Alas not :) I quickly realized that there was no tool on linux to send contacts to an iDevice. The alternatives involved booting into OS X, or sending a vcf file by mail and opening it on the iDevice. I didn't want to do the former, and the latter didn't work for some reason (and it's cheating anyway ;)

After talking with the nice people on #libimobiledevice, I realized the low-level building blocks were there in libimobiledevice, so I decided to go ahead and write the missing code (which involved parsing and writing XML plists from the device after figuring out their format). After a few days of hacking, eds-to-idevice was born! This C program can read contacts from evolution-data-server and writes them to an iDevice.
Be aware that this does not try to handle contact synchronization: when I use it, I tell it to erase all contacts from the iDevice and to unconditionnally write all contacts from evolution-data-server to the iDevice. If it's called multiple times, it will create duplicate contacts on the device.
However, I tried to make the code as generic and reusable as possible, with the hope that someone would pick up the ball and improve it to write a synchronization plugin for one of the linux synchronization framework. Volunteers :) ?

You can find the code on gitorious and I made a tarball. Enjoy!

samedi 19 mars 2011

GNOME and GSoC 2011

We just got the great news that GNOME got accepted to be part of Google Summer of Code 2011. This is a great opportunity for GNOME, thanks again to Google for organizing this!

The bad news is that the work is just starting for everyone :) We are looking for cool ideas for students to work on during the summer, so if you are working on a GNOME project and have ideas that would make a nice 3 months coding project for a student, please add it to our idea page.

We'll also need mentors for all the students that will have fun hacking on GNOME during the summer, you can already register to be a mentor for GNOME on melange, don't wait, register now :)

Last but not least, if you are a student, be sure to check our ideas list and our information page for students. For now it's preliminary, the ideas will be sorted in the coming week. And you don't have to limit yourself to these ideas, you can also come up with your own cool idea and describe it in your application on Google website. The application period for students hasn't opened yet, it will open in about 10 days for now. However, you can already start thinking about what project you'd like to work on, start playing with the code of the project you'd like to work on during the summer, start discussing about your idea and your application with people involved in the project, ... Remember that in the previous years, we required candidates to show us a patch they had written for a free software project, and it's really likely that we'll do the same this year. You can also drop by on #soc on if you have specific questions!

All in all, it should be a fun summer! :)