<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8472120078842080683</id><updated>2012-02-01T14:50:19.016+01:00</updated><category term='red hat'/><category term='libgpod'/><category term='gsoc'/><category term='hacking'/><category term='rhythmbox'/><category term='spice'/><category term='personal'/><category term='mandriva'/><category term='libgpod hacking'/><category term='GNOME'/><title type='text'>No Inspiration</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-5584824933040711987</id><published>2012-01-31T10:24:00.000+01:00</published><updated>2012-01-31T10:24:30.033+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='spice'/><category scheme='http://www.blogger.com/atom/ns#' term='red hat'/><title type='text'>Going to FOSDEM!</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;This is this time of the year again, &lt;a href="http://fosdem.org/2012/"&gt;FOSDEM&lt;/a&gt; will take place in Brussels next week-end. This is one of my favourite free software event, lots of interesting talks, lots of interesting people, and lots of energy everywhere. This year, it looks like it will be the best FOSDEM ever! More devrooms, more than 400 talks, more everything!&lt;br /&gt;&lt;br /&gt;I've helped again organizing the &lt;a href="http://fosdem.org/2012/schedule/track/crossdesktop_devroom"&gt;crossdesktop devroom&lt;/a&gt;. Among these talks, I can only recommend the &lt;a href="http://fosdem.org/2012/schedule/event/gnomeboxes"&gt;gnome-boxes presentation&lt;/a&gt; that Marc-André and &lt;a href="http://zee-nix.blogspot.com/"&gt;Zeeshan&lt;/a&gt; will be giving :) While I'm at it, here are a few more shameless plugs: &lt;a href="http://hansdegoede.livejournal.com/"&gt;Hans de Goede&lt;/a&gt; will be giving 2 &lt;a href="http://spice-space.org/"&gt;SPICE&lt;/a&gt; talks in the Virtualization devroom, one &lt;a href="http://fosdem.org/2012/schedule/event/spice"&gt;general presentation of SPICE&lt;/a&gt;, and one where he will describe the &lt;a href="http://fosdem.org/2012/schedule/event/usb_network_redirect"&gt;USB redirection support in SPICE&lt;/a&gt;. And &lt;a href="http://blog.saymoo.org/"&gt;Alon Levy&lt;/a&gt; will present his work to &lt;a href="http://fosdem.org/2012/schedule/event/xorg_xspice"&gt;interact with an X server through SPICE&lt;/a&gt; without using a virtual machine.&lt;br /&gt;&lt;br /&gt;Last but not least, there will also be a GNOME booth with some goodies...&lt;br /&gt;&lt;br /&gt;See you all there in a few days!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-5584824933040711987?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/5584824933040711987/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=5584824933040711987' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/5584824933040711987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/5584824933040711987'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2012/01/going-to-fosdem.html' title='Going to FOSDEM!'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-4670321997284320166</id><published>2012-01-23T12:54:00.000+01:00</published><updated>2012-01-23T12:54:37.653+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='spice'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>Unpacking Boxes...</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;For the impatient people running Fedora 16 but who still want to get an aperçu of &lt;a href="https://live.gnome.org/Boxes"&gt;Boxes&lt;/a&gt;, today's your lucky day! I set up a preview repository with all the needed package to install Boxes on Fedora 16.&lt;br /&gt;If you want to try it, download &lt;a href="http://teuf.fedorapeople.org/boxes/gnome-boxes-preview.repo"&gt;this file&lt;/a&gt; to&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; /etc/yum.repos.d&lt;/span&gt; and then run &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;yum install gnome-boxes &amp;amp;&amp;amp; yum update&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MSs74JJntLA/Tx1I5JI4_VI/AAAAAAAAAqQ/ZSvcC0Fkbv4/s1600/boxes2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://3.bp.blogspot.com/-MSs74JJntLA/Tx1I5JI4_VI/AAAAAAAAAqQ/ZSvcC0Fkbv4/s320/boxes2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;To go back to your previous setup, you can either use the convenient &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;yum history&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;, or remove&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/yum.repos.d/gnome-boxes-preview.repo&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; and use&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;yum remove libvirt-glib &amp;amp;&amp;amp; yum distro-sync&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;Keep in mind that this is a new application still in heavy development, so you're likely to find bugs and missing features. But I'm sure you will enjoy it nonetheless :)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;Feel free to join us in &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#boxes&lt;/span&gt; on &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;irc.gnome.org &lt;/span&gt;if you have any issues, or if you just want to chat with us.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-4670321997284320166?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/4670321997284320166/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=4670321997284320166' title='6 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4670321997284320166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4670321997284320166'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2012/01/unpacking-boxes.html' title='Unpacking Boxes...'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-MSs74JJntLA/Tx1I5JI4_VI/AAAAAAAAAqQ/ZSvcC0Fkbv4/s72-c/boxes2.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-1941046430555540084</id><published>2011-12-16T16:03:00.001+01:00</published><updated>2011-12-17T20:42:00.545+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><title type='text'>FOSDEM Crossdesktop devroom</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;GNOME, KDE, XFCE, ... will be present at &lt;a href="http://fosdem.org/2012/"&gt;FOSDEM&lt;/a&gt; this year in the crossdesktop devroom. The &lt;a href="http://mail.gnome.org/archives/desktop-devel-list/2011-November/msg00076.html"&gt;call for talks&lt;/a&gt; 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&lt;a href="https://lists.fosdem.org/listinfo/crossdesktop-devroom"&gt; crossdesktop devroom mailing list&lt;/a&gt; now :)&lt;br /&gt;&lt;br /&gt;Talks can be specific, such as &lt;a href="http://archive.fosdem.org/2011/schedule/event/vala"&gt;developing GNOME application with Vala&lt;/a&gt;; or as general as predictions for the &lt;a href="http://archive.fosdem.org/2011/schedule/event/desktopbrowser"&gt;fusion of Desktop and web in 5 years time&lt;/a&gt;. Topics that are of interest to the users and developers of all desktop environments are especially welcome. The &lt;a href="http://www.fosdem.org/2011/"&gt;FOSDEM 2011&lt;/a&gt; &lt;a href="http://archive.fosdem.org/2011/schedule/track/crossdesktop_devroom"&gt;schedule&lt;/a&gt; might give you some inspiration.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-1941046430555540084?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/1941046430555540084/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=1941046430555540084' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/1941046430555540084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/1941046430555540084'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2011/12/fosdem-crossdesktop-devroom.html' title='FOSDEM Crossdesktop devroom'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-1521463630107391482</id><published>2011-06-17T16:49:00.009+02:00</published><updated>2011-06-17T17:42:45.662+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='spice'/><category scheme='http://www.blogger.com/atom/ns#' term='red hat'/><title type='text'>Spicy apples</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;It has been a few months since I've&amp;nbsp; been hired by &lt;a href="http://jobs.redhat.com/"&gt;Red Hat&lt;/a&gt; to hack on &lt;a href="http://spice-space.org/"&gt;Spice&lt;/a&gt;, and I realized I haven't blogged as much as I should have :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First, let me introduce Spice quickly. Spice is a &lt;a href="http://www.spicespace.org/docs/spice_protocol.pdf"&gt;protocol&lt;/a&gt; which then gets implemented in clients such as &lt;a href="http://www.gnome.org/projects/vinagre/"&gt;Vinagre&lt;/a&gt; (using the &lt;a href="https://gitorious.org/spice-gtk"&gt;spice-gtk&lt;/a&gt; widget) and in servers (&lt;a href="http://wiki.qemu.org/Main_Page"&gt;QEMU&lt;/a&gt; or the experimental &lt;a href="http://cgit.freedesktop.org/%7Ealon/xspice/"&gt;X11 driver&lt;/a&gt;). 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 &lt;a href="http://en.wikipedia.org/wiki/Desktop_virtualization"&gt;VDI&lt;/a&gt; setup where you'll have N different PCs connecting to a single server running N virtual machines.&lt;br /&gt;&lt;br /&gt;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 ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;The long way toward Vinagre on OS X&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I started by building the gtk+ OS X port. Using &lt;a href="http://sourceforge.net/apps/trac/gtk-osx/wiki/Build"&gt;these build instructions&lt;/a&gt;, 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 &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=651920"&gt;really&lt;/a&gt; didn't &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=651959"&gt;want&lt;/a&gt; me to &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=652148"&gt;succeed&lt;/a&gt; :-) )&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://cgit.freedesktop.org/%7Eteuf/spice-jhbuild/"&gt;jhbuild moduleset&lt;/a&gt; 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!&lt;br /&gt;&lt;br /&gt;Then, with the help of &lt;a href="http://blogs.gnome.org/elmarco/"&gt;Marc-André&lt;/a&gt;, 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!&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://en.wikipedia.org/wiki/Application_bundle"&gt;application bundle&lt;/a&gt;, 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 &lt;a href="http://sourceforge.net/apps/trac/gtk-osx/wiki/Bundle"&gt;ige-mac-bundler&lt;/a&gt; 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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;The reward&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And here is the &lt;a href="http://people.freedesktop.org/%7Eteuf/spice-gtk-osx/Vinagre.zip"&gt;final result&lt;/a&gt; (disclaimer: it's still a work in progress) :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-f69df3ecd8e51042" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v13.nonxt2.googlevideo.com/videoplayback?id%3Df69df3ecd8e51042%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330407211%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D65CE5EC6B7A2D4B734EF3D5040A53068ACC65250.80F679E876A0D55D2C455CC108EC275756DBB9C3%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Df69df3ecd8e51042%26offsetms%3D5000%26itag%3Dw160%26sigh%3Drovsh_YlGDu5T7duf-H_H0PqRyE&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v13.nonxt2.googlevideo.com/videoplayback?id%3Df69df3ecd8e51042%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330407211%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D65CE5EC6B7A2D4B734EF3D5040A53068ACC65250.80F679E876A0D55D2C455CC108EC275756DBB9C3%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Df69df3ecd8e51042%26offsetms%3D5000%26itag%3Dw160%26sigh%3Drovsh_YlGDu5T7duf-H_H0PqRyE&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As you can see in the video above (bigger ogg version &lt;a href="http://people.freedesktop.org/~teuf/spice-gtk-osx/vinagre.ogg"&gt;here&lt;/a&gt;), 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...&lt;br /&gt;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&amp;nbsp; And then, there is more work to do to polish the OS X integration, like looking at &lt;a href="http://sourceforge.net/apps/trac/gtk-osx/wiki/Integrate"&gt;GtkOSXApplication&lt;/a&gt; to get the usual OS X top menu bar, finding a better looking theme, having a native &lt;a href="http://developer.gnome.org/gtk3/3.0/GtkApplication.html"&gt;GtkApplication&lt;/a&gt; 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 :)&lt;br /&gt;&lt;br /&gt;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 ?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-1521463630107391482?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/1521463630107391482/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=1521463630107391482' title='10 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/1521463630107391482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/1521463630107391482'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2011/06/spicy-apples.html' title='Spicy apples'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-3393396233981399999</id><published>2011-03-30T00:03:00.000+02:00</published><updated>2011-03-30T00:03:35.169+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='red hat'/><title type='text'>Public Announcements</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;GNOME 3 in Paris&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;/span&gt;Thanks to &lt;a href="http://blog.yoboy.fr/"&gt;YoBoY&lt;/a&gt;, there will be a &lt;a href="http://gnome3.ubuntu-party.org/paris/"&gt;GNOME 3 release party&lt;/a&gt; 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 ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Summer of Code&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;/span&gt;If you are a student, you can now &lt;a href="http://www.google-melange.com/"&gt;apply&lt;/a&gt; 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 &lt;a href="https://live.gnome.org/SummerOfCode2011/Ideas"&gt;list of ideas&lt;/a&gt; for potential projects, or you can just &lt;a href="https://live.gnome.org/SummerOfCode2011/Students"&gt;write a proposal&lt;/a&gt; for any idea that you care about and would make GNOME even cooler!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Personal Life&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;/span&gt;I'm really happy to announce that I've started working at &lt;a href="http://www.redhat.com/"&gt;Red Hat&lt;/a&gt; last week. I have joined the &lt;a href="http://spice-space.org/"&gt;Spice&lt;/a&gt; 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 &lt;a href="http://static.pcinpact.com/images/bd/news/48418-red-hat.jpg"&gt;red&lt;/a&gt; &lt;a href="http://bostonkayakguy.files.wordpress.com/2008/11/red-hat-lady.jpg"&gt;hat&lt;/a&gt; soon!&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-3393396233981399999?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/3393396233981399999/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=3393396233981399999' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3393396233981399999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3393396233981399999'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2011/03/public-announcements.html' title='Public Announcements'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-7756990247681188560</id><published>2011-03-23T20:20:00.001+01:00</published><updated>2011-03-23T20:34:05.782+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>Transferring contacts to an iDevice</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;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).&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Reading the contacts out of the old phone was a bit hackish but pretty straightforward using &lt;a href="http://wammu.eu/"&gt;gammu/wammu&lt;/a&gt; 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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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 ;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After talking with the nice people on #libimobiledevice, I realized the low-level building blocks were there in &lt;a href="http://www.libimobiledevice.org/"&gt;libimobiledevice&lt;/a&gt;, 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, &lt;a href="http://gitorious.org/eds-to-idevice/eds-to-idevice"&gt;eds-to-idevice&lt;/a&gt; was born! This C program can read contacts from evolution-data-server and writes them to an iDevice.&lt;br /&gt;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.&lt;br /&gt;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 :) ?&lt;br /&gt;&lt;br /&gt;You can find the code on &lt;a href="http://gitorious.org/eds-to-idevice/eds-to-idevice"&gt;gitorious&lt;/a&gt;&amp;nbsp;and I made a &lt;a href="http://people.freedesktop.org/~teuf/eds-to-idevice/eds-to-idevice-0.5.tar.bz2"&gt;tarball&lt;/a&gt;. Enjoy!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-7756990247681188560?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/7756990247681188560/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=7756990247681188560' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/7756990247681188560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/7756990247681188560'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2011/03/transferring-contacts-to-idevice.html' title='Transferring contacts to an iDevice'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-215423654913102896</id><published>2011-03-19T22:11:00.002+01:00</published><updated>2011-03-19T22:35:01.770+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>GNOME and GSoC 2011</title><content type='html'>We just got the great news that GNOME got &lt;a href="http://www.google-melange.com/gsoc/program/accepted_orgs/google/gsoc2011"&gt;accepted&lt;/a&gt; to be part of &lt;a href="http://www.google-melange.com/gsoc/program/home/google/gsoc2011"&gt;Google Summer of Code 2011&lt;/a&gt;. This is a great opportunity for GNOME, thanks again to Google for organizing this!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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 &lt;a href="http://live.gnome.org/SummerOfCode2011/Ideas"&gt;idea page&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We'll also need &lt;a href="http://live.gnome.org/SummerOfCode2011"&gt;mentors&lt;/a&gt; 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 &lt;a href="http://www.google-melange.com"&gt;melange&lt;/a&gt;, don't wait, register now :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last but not least, if you are a student, be sure to check our &lt;a href="http://live.gnome.org/SummerOfCode2011/Ideas"&gt;ideas list&lt;/a&gt; and &lt;a href="http://live.gnome.org/SummerOfCode2011/Students"&gt;our information page for students&lt;/a&gt;. 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 irc.gnome.org if you have specific questions!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All in all, it should be a fun summer! :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-215423654913102896?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/215423654913102896/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=215423654913102896' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/215423654913102896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/215423654913102896'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2011/03/gnome-and-gsoc-2011.html' title='GNOME and GSoC 2011'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-3555475183972630431</id><published>2010-09-08T17:23:00.002+02:00</published><updated>2010-09-08T17:37:09.942+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><title type='text'>GNOME devroom at FOSDEM</title><content type='html'>This is just a public notice to let people know that this year again, I'll be handling the GNOME devroom at &lt;a href="http://fosdem.org/2011/"&gt;FOSDEM&lt;/a&gt;. For now I have applied to get one, let's see if we'll be lucky enough to get accepted this year again. This should be &lt;a href="http://fosdem.org/2011/call_for_mainspeakers_devrooms"&gt;announced&lt;/a&gt; by the end of October.&lt;br /&gt;&lt;br /&gt;But if you are willing to help organize GNOME presence at FOSDEM, don't wait until it's cold and nearly winter to get in touch, just tell me now! And if you have any suggestions about things to improve or things that went well in the GNOME devroom handling in the last years, let me know too!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-3555475183972630431?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/3555475183972630431/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=3555475183972630431' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3555475183972630431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3555475183972630431'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2010/09/gnome-devroom-at-fosdem.html' title='GNOME devroom at FOSDEM'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-2010273737514098042</id><published>2010-04-10T18:10:00.002+02:00</published><updated>2010-04-10T18:13:27.481+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><title type='text'>GUADEC Paper Selection delayed</title><content type='html'>GUADEC Paper Selection has been slightly delayed, speakers should have been notified today (April 10th), this announcement will be done on Friday April 16th instead. So don't worry if you sent a paper submission and haven't heard from it yet :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-2010273737514098042?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/2010273737514098042/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=2010273737514098042' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/2010273737514098042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/2010273737514098042'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2010/04/guadec-paper-selection-delayed.html' title='GUADEC Paper Selection delayed'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-4527571661172180321</id><published>2010-03-24T12:16:00.003+01:00</published><updated>2010-03-24T14:04:11.884+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><title type='text'>GNOME and GSoC</title><content type='html'>GNOME was once again &lt;a href="http://socghop.appspot.com/gsoc/program/accepted_orgs/google/gsoc2010"&gt;accepted&lt;/a&gt; as a mentoring organization by Google for their &lt;a href="http://code.google.com/soc/"&gt;Summer of Code&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;The fun will begin later in the summer, but there are already a few things you can do to help:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://live.gnome.org/SummerOfCode2010/Ideas"&gt;add ideas&lt;/a&gt; for  cool things that could be done during the summer&lt;/li&gt;&lt;li&gt;&lt;a href="http://socghop.appspot.com/gsoc/mentor/request/google/gsoc2010/gnome"&gt;apply  as mentor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;or just hang around on #soc to guide students looking for help&lt;/li&gt;&lt;/ul&gt;So you know what you have to do now to help GNOME have a rocking summer!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-4527571661172180321?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/4527571661172180321/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=4527571661172180321' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4527571661172180321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4527571661172180321'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2010/03/gnome-and-gsoc.html' title='GNOME and GSoC'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-1783086396356641571</id><published>2010-03-21T14:27:00.002+01:00</published><updated>2010-03-21T14:33:16.237+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><title type='text'>For the late birds....</title><content type='html'>For those of you that procrastinated for too long and missed the GUADEC paper submission deadline, I've got insider information... Something tells me the application interface on the &lt;a href="http://guadec.org/index.php/guadec/2010"&gt;GUADEC website&lt;/a&gt; will accept paper submissions until 23:59 UTC today (Sunday).&lt;br /&gt;So this is really your last chance to propose a talk for GUADEC 2010 if you were really really late :)&lt;br /&gt;&lt;br /&gt;On your mark, get set, go!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-1783086396356641571?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/1783086396356641571/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=1783086396356641571' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/1783086396356641571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/1783086396356641571'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2010/03/for-late-birds.html' title='For the late birds....'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-3134942712190753883</id><published>2010-03-19T11:51:00.003+01:00</published><updated>2010-03-19T14:27:15.170+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><title type='text'>Only one day left!</title><content type='html'>Time is ticking away, the deadline for talk submissions for GUADEC 2010 is &lt;a href="http://mail.gnome.org/archives/guadec-list/2010-March/msg00023.html"&gt;tomorrow evening&lt;/a&gt; (Saturday 20th 23:59 UTC). If you are planning go give a talk there and haven't applied yet, there's no more time for waiting, better to apply now before it's too late! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-3134942712190753883?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/3134942712190753883/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=3134942712190753883' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3134942712190753883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3134942712190753883'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2010/03/only-one-day-left.html' title='Only one day left!'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-9196622377328269539</id><published>2010-03-15T15:55:00.003+01:00</published><updated>2010-03-15T16:00:34.000+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><title type='text'>GUADEC Call for Papers deadline</title><content type='html'>It's nearly over us, it's coming fast!&lt;br /&gt;&lt;br /&gt;If you want to &lt;a href="http://guadec.org/index.php/guadec/2010/presenter/submit/1"&gt;submit a talk proposal&lt;/a&gt; for &lt;a href="http://guadec.org/index.php/guadec/2010"&gt;GUADEC 2010&lt;/a&gt; (July 24, 2010 – July 30, 2010 in The Hague, The Netherlands), make sure to make your submission real soon since the &lt;a href="http://guadec.org/index.php/guadec/2010/schedConf/cfp"&gt;deadline is Saturday, March 20th&lt;/a&gt; (aka "End of this week").&lt;br /&gt;&lt;br /&gt;That's all folks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-9196622377328269539?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/9196622377328269539/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=9196622377328269539' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/9196622377328269539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/9196622377328269539'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2010/03/guadec-call-for-papers-deadline.html' title='GUADEC Call for Papers deadline'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-93363125549313177</id><published>2010-03-04T21:47:00.006+01:00</published><updated>2010-03-04T23:16:37.457+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox'/><category scheme='http://www.blogger.com/atom/ns#' term='libgpod'/><title type='text'>One way to help free software projects</title><content type='html'>Free software projects are always looking for new volunteers to help, new coders, new translators, new documentation writers, ... However, sometimes you want to contribute but can't become any of those, either because you lack time, because you are already involved in other projects, or because you feel you don't have time. For some projects, another way to help is through donations, here are 2 examples for projects I'm involved with.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Rhythmbox&lt;/h3&gt;&lt;br /&gt;Rhythmbox has had a plugin for &lt;a href="http://magnatune.com"&gt;Magnatune&lt;/a&gt; for quite a while now. In addition to not being evil (their website says so, it must be true! Joke aside, they give 50% of what they sell to the artist), &lt;a href="http://blogs.magnatune.com/buckman/2008/04/giving-money-to.html"&gt;they give 10% back&lt;/a&gt; to the Rhythmbox project for every purchase through its plugin.&lt;br /&gt;&lt;br /&gt;And since they are not evil, today &lt;a href="http://blogs.magnatune.com/buckman/2010/03/magnatune-sends-check-to-gnome-foundation-thanks-to-rhythmbox.html"&gt;they sent a $600 check&lt;/a&gt; to the GNOME Foundation (which we chose as the recipient for the money). So you can buy lots of cool music on Magnatune while giving money to the GNOME Foundation at the same time! &lt;br /&gt;&lt;br /&gt;Thanks a lot to John Buckman from Magnatune who was a really nice guy to interact with and to Adam Zimmerman for all his hard work on Rhythmbox Magnatune plugin.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;libgpod&lt;/h3&gt;&lt;br /&gt;libgpod is the iPod handling library used by gtkpod, rhythmbox, amarok, songbird, ... It &lt;a href="http://article.gmane.org/gmane.comp.ipod.gtkpod/4447"&gt;recently&lt;/a&gt; gained support for most of the latest devices released by Apple (iPod Nano 5th generation, iPhone, iPod Touch) which were unsupported under Linux until now (thanks a lot to Marcan, Nikias and all the people who helped with that by the way :)&lt;br /&gt;&lt;br /&gt;However, this development was made harder by the lack of devices to test the code on, forcing us to look for testers with the right devices and going back and forth with bug reports and bug fixes until things work as expected. So &lt;a href="http://sourceforge.net/project/project_donations.php?group_id=67873"&gt;donations to the project&lt;/a&gt; (even small amounts) are really helpful so that we can buy these missing devices and move things forward. &lt;br /&gt;This already let us fund an iPod Nano which was a tremendous help to polish support for it in libgpod, thanks to everyone that made that possible. Next on the list are an iPod Touch to make sure the iPhoneOS support is up to par, and a buttonless iPod Shuffle which is so far unsupported by libgpod.&lt;br /&gt;&lt;br /&gt;I've already mentioned it &lt;a href="http://cfergeau.blogspot.com/2009/07/modern-begging.html"&gt;here&lt;/a&gt;, but if you have old iPods you no longer use , please get in touch, they can also be helpful for testing (thanks Götz!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-93363125549313177?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/93363125549313177/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=93363125549313177' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/93363125549313177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/93363125549313177'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2010/03/one-way-to-help-free-software-projects.html' title='One way to help free software projects'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-8805333660827696755</id><published>2010-01-15T17:35:00.002+01:00</published><updated>2010-01-15T17:49:30.027+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><title type='text'>FOSDEM 2010</title><content type='html'>GNOME will be present at &lt;a href="http://fosdem.org"&gt;FOSDEM&lt;/a&gt; and will have its own devroom on Saturday again. The &lt;a href="http://live.gnome.org/Brussels2010/Devroom#Schedule"&gt;schedule&lt;/a&gt; is now final (at least I hope so ;) ). Thanks to everyone who sent talk proposal to help make this room rock this year again!&lt;br /&gt;&lt;br /&gt;On a related note, if you're coming to FOSDEM, &lt;a href="http://live.gnome.org/Brussels2010/Attendees"&gt;let us know!&lt;/a&gt; This will allow us to print nice nametags (maybe!) for all gnomies around Brussels :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-8805333660827696755?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/8805333660827696755/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=8805333660827696755' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/8805333660827696755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/8805333660827696755'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2010/01/fosdem-2010.html' title='FOSDEM 2010'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-5029067284477539567</id><published>2009-07-26T20:56:00.003+02:00</published><updated>2009-07-26T21:05:48.768+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libgpod hacking'/><title type='text'>Modern Begging</title><content type='html'>The more I hack on &lt;a href="http://www.gtkpod.org/libgpod/"&gt;libgpod&lt;/a&gt;, the more I realize that having iPod models from various generations would be really helpful. When implementing support for setting the iPod time, for parsing the iPod timezone, for figuring out which information is useful in SysInfoExtended, ... I always end up running after people with various iPod models to make sure the code works as expected both on new and old iPods.&lt;br /&gt;&lt;br /&gt;I'm sure some of you have old iPods they no longer use hidden somewhere in their room, if you are in this situation, a donation would be really welcome and helpful :) Even iPods with dead batteries or broken screens might be useful.&lt;br /&gt;&lt;br /&gt;And while I'm at it, it would also really really help if I could get my hands on an old iPod touch or iPhone. Because this is where most of the work is to be done today, and without one such device, I cannot test thoroughly and get into shape stuff like &lt;a href="http://cgit.freedesktop.org/%7Eteuf/libgpod/log/?h=iphone30"&gt;that&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So if you're feeling generous today and want to help support iPods on linux, drop me an email or leave a comment below!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-5029067284477539567?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/5029067284477539567/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=5029067284477539567' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/5029067284477539567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/5029067284477539567'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2009/07/modern-begging.html' title='Modern Begging'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-6384703873538393867</id><published>2009-05-27T20:58:00.003+02:00</published><updated>2009-05-27T21:45:16.579+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox'/><title type='text'>Rhythmbox GSoC</title><content type='html'>The coding period for this year &lt;a href="http://socghop.appspot.com/"&gt;Google Summer of Code &lt;/a&gt;has just started. I haven't blogged yet about &lt;a href="http://rhythmbox.org/"&gt;Rhythmbox&lt;/a&gt; GSoCs, now is a good time to do it ;)&lt;br /&gt;&lt;br /&gt;This year, 2 students will be hacking on Rhythmbox. Paul Bellamy (who I am be mentoring) started hacking on synchronization between Rhythmbox and media players.&lt;br /&gt;&lt;br /&gt;And John Iacona (mentored by Jonathan Matthew) will spend the whole summer working on a contextual information pane for Rhythmbox. This information pane will display various information about the song being played (artist bio, similar artists, ...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-6384703873538393867?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/6384703873538393867/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=6384703873538393867' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/6384703873538393867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/6384703873538393867'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2009/05/rhythmbox-gsoc.html' title='Rhythmbox GSoC'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-8710601669460117508</id><published>2009-05-19T20:13:00.012+02:00</published><updated>2009-05-21T00:56:26.225+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='libgpod'/><title type='text'>Adventures in udev land</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've mentionned &lt;a href="http://cfergeau.blogspot.com/2008/07/libgpod-callout-improvements.html"&gt;a while ago&lt;/a&gt; the work that has been done on libgpod hal callout. It's working nicely, but with &lt;a href="http://lists.freedesktop.org/archives/devkit-devel/2009-April/000140.html"&gt;HAL being deprecated&lt;/a&gt;, I thought now might be a good time at looking at how to do things in the future, and to check if udev already lets us do what we do in the HAL callout. The good news is that it's working now and is pretty straightforward. However, I got stuck on a few details, so I thought it might be useful to others if I documented my findings here.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Currently, libgpod installs a .fdi file with the iPod vendor ID/device ID and a binary name. When HAL detects that a device that matches these 2 IDs is plugged in, it runs the binary. The binary issues a &lt;a href="http://www.ipodlinux.org/wiki/Device_Information"&gt;SCSI inquiry command&lt;/a&gt; to the iPod to get various information, and set some HAL properties using libhal.&lt;br /&gt;&lt;br /&gt;My goal was to do something similar with udev, ie get udev to run a binary when an iPod is inserted and then associate some information with the iPod device in udev database so that other applications can access it.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-weight: bold; text-align: justify;"&gt;&lt;span style="font-size:130%;"&gt;iPod detection&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Running a binary when the iPod is inserted wasn't too hard, it's done with a udev rule file (the format is documented in udev manpage, don't forget to read it if you have to write such a file! ) which goes to &lt;span style="font-family:courier new;"&gt;/lib/udev/rules.d&lt;/span&gt;. My first version was simple enough:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: rgb(51, 204, 0); font-family: courier new; text-align: left;"&gt;ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem",&lt;/div&gt;&lt;div style="color: rgb(51, 204, 0); font-family: courier new; text-align: left;"&gt;ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1204",&lt;/div&gt;&lt;div style="color: rgb(51, 204, 0); font-family: courier new; text-align: left;"&gt;RUN+="/tmp/udev-test.sh"&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:courier new;"&gt;udev-test.sh&lt;/span&gt; is a simple shell script wrapping the actual udev callout. It makes it easier to dump various information to a log file (for example the callout environment which udev uses to pass useful information to the callout). And, lo and behold, after plugging an iPod, my shell script was run!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-weight: bold; text-align: justify;"&gt;&lt;span style="font-size:130%;"&gt;Adding information to the udev database&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The next logical step was to add some values read from the iPod to udev database so that other apps can get this additionnal information. And this is one of the steps that &lt;a href="http://lists.freedesktop.org/archives/devkit-devel/2009-May/000176.html"&gt;gave me some troubles&lt;/a&gt;. I was a bit ashamed of finding a &lt;a href="http://www.spinics.net/lists/hotplug/msg01978.html"&gt;really informative post by Kay Sievers&lt;/a&gt; answering my question right after having sent this email...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;In short, it's really easy to import new values in the udev database, all you have to do is to output key/value pairs on stdout. This is nice, since udev passes information through environment variables and adds information to its database by reading stdout, this means that your callout doesn't have to depend in anyway on libudev.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I quickly modified my test program to print a few key/value pairs to add to the environment, triggered an unplug/replug of my ipod with udevadm, and watch the 'block' subsystem devices with the devkit binary. But I was really disappointed not to find my values associated with the iPod :(&lt;br /&gt;&lt;br /&gt;After double checking everything and fiddling a bit to try to figure out what was wrong, I read again Kay's email, and I saw there was another difference between his code and mine: he is using an &lt;span style="font-family:courier new;"&gt;IMPORT&lt;/span&gt; rule to run his binary while I was still using a &lt;span style="font-family:courier new;"&gt;RUN&lt;/span&gt; rule.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I changed my udev rule to an &lt;span style="font-family:courier new;"&gt;IMPORT&lt;/span&gt; rule and.... it still didn't work :;)After staring at udevadm monitor output, I noticed that when the iPod was plugged in, there was first an "add" udev event for the iPod device shortly followed by a "change" event. Since my rule was only catching the "add" event, I hypothetized maybe my changes to the udev database were first properly added, and then overwritten by the "change" event. So I changed my rule file to catch "change" events in addition to "add" events, and it finally worked!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: rgb(51, 204, 0); font-family: courier new; text-align: left;"&gt;ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem",&lt;/div&gt;&lt;div style="color: rgb(51, 204, 0); font-family: courier new; text-align: left;"&gt;ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1204",&lt;/div&gt;&lt;div style="color: rgb(51, 204, 0); font-family: courier new; text-align: left;"&gt;IMPORT{program}="/tmp/udev-test.sh"&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;one last=""&gt;&lt;/one&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I was very happy with my udev callout, however I shortly realized that when going from a &lt;span style="font-family:courier new;"&gt;RUN&lt;/span&gt; rule to an &lt;span style="font-family:courier new;"&gt;IMPORT&lt;/span&gt; rule, udev no longer passed me the device name (&lt;span style="font-family:courier new;"&gt;/dev/sd??&lt;/span&gt;) in the &lt;span style="font-family:courier new;"&gt;DEVNAME&lt;/span&gt; environment variable. I went to &lt;span style="font-family:courier new;"&gt;#udev&lt;/span&gt; on freenode to check if this was the expected behaviour, and Kay confirmed this is normal because when &lt;span style="font-family:courier new;"&gt;IMPORT&lt;/span&gt; rules are run, the final device doesn't exist yet.&lt;br /&gt;&lt;br /&gt;However, &lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:georgia;"&gt;the&lt;/span&gt; $tempnode&lt;/span&gt; variable can be used as an argument to the binary that is being run to give it access to a temporary device node which can be interacted with. And indeed, after adding this argument to my udev rule, I could do everything that I wanted to :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Final polish&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After this successful experiment, all that remained to be done was to make the udev callout as featureful as the HAL callout. This was pretty straightforward, I abstracted the information gathering part from the HAL callout. This generic code then uses some backend-specific code to set the values. The HAL backend does that by using libhal, the udev backend does that by just outputting values to stdout.&lt;br /&gt;&lt;br /&gt;David Zeuthen was (as always) really helpful by pointing me at the udev/devicekit &lt;a href="http://cgit.freedesktop.org/DeviceKit/DeviceKit-disks/tree/doc/man/DeviceKit-disks.xml#n31"&gt;equivalent&lt;/a&gt; for &lt;span style="font-family:courier new;"&gt;info.desktop.icon&lt;/span&gt; and info.desktop.name: &lt;span style="font-family:courier new;"&gt;DKD_PRESENTATION_NAME&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;DKD_PRESENTATION_ICON_NAME&lt;/span&gt;. I also cooked up some variable names in a &lt;span style="font-family:courier new;"&gt;LIBGPOD&lt;/span&gt; namespace to have an udev equivalent to the stuff provided by &lt;a href="http://git.gnome.org/cgit/podsleuth/"&gt;podsleuth&lt;/a&gt;, let me know if it could be useful in your projects, it can be changed to fit your needs :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;End result&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;And here is the end result after plugging in my iPod:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;font-size:85%;"  &gt;# udevadm info --query=env --name=sdb2&lt;br /&gt;&lt;br /&gt;DKD_PRESENTATION_ICON_NAME=multimedia-player-apple-ipod-color&lt;br /&gt;LIBGPOD_VERSION=1&lt;br /&gt;LIBGPOD_IS_UNKNOWN=0&lt;br /&gt;LIBGPOD_FIREWIRE_ID=000A270002BAD546&lt;br /&gt;LIBGPOD_SERIAL_NUMBER=JQ446FN4R5Q&lt;br /&gt;LIBGPOD_FIRMWARE_VERSION=1.2.1&lt;br /&gt;LIBGPOD_IMAGES_ALBUM_ART_SUPPORTED=1&lt;br /&gt;LIBGPOD_IMAGES_PHOTOS_SUPPORTED=1&lt;br /&gt;LIBGPOD_IMAGES_CHAPTER_IMAGES_SUPPORTED=1&lt;br /&gt;LIBGPOD_DEVICE_CLASS=color&lt;br /&gt;LIBGPOD_MODEL_GENERATION=4.000000&lt;br /&gt;LIBGPOD_MODEL_SHELL_COLOR=white&lt;br /&gt;LIBGPOD_PRODUCTION_FACTORY_ID=JQ&lt;br /&gt;LIBGPOD_PRODUCTION_YEAR=2004&lt;br /&gt;LIBGPOD_PRODUCTION_WEEK=46&lt;br /&gt;LIBGPOD_PRODUCTION_INDEX=20272&lt;br /&gt;LIBGPOD_MODEL_CONTROL_PATH=/iPod_Control&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Et voilà! The code is available from the &lt;a href="http://cgit.freedesktop.org/%7Eteuf/libgpod/log/?h=devicekit"&gt;devicekit branch&lt;/a&gt; of my &lt;a href="http://cgit.freedesktop.org/%7Eteuf/libgpod/"&gt;libgpod git repo&lt;/a&gt;&lt;br /&gt;and will be committed to libgpod svn soon.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-8710601669460117508?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/8710601669460117508/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=8710601669460117508' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/8710601669460117508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/8710601669460117508'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2009/05/adventures-in-udev-land.html' title='Adventures in udev land'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-4472244315220689388</id><published>2009-03-31T00:09:00.001+02:00</published><updated>2009-03-31T00:10:28.776+02:00</updated><title type='text'>Solutions Linux 2009</title><content type='html'>&lt;span style="font-size:100%;"&gt;It's tomorrow. 9am. I'll be there. Waiting for you.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-4472244315220689388?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/4472244315220689388/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=4472244315220689388' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4472244315220689388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4472244315220689388'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2009/03/solutions-linux-2009.html' title='Solutions Linux 2009'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-3700546579230980597</id><published>2009-03-29T21:44:00.008+02:00</published><updated>2009-03-29T23:48:31.229+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><title type='text'>Why is so hard to find a blog post title?</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;GSoC 2009&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xeBcjs5_03s/Sc_fsBxkhMI/AAAAAAAAAVU/2bOQF8HPcAg/s1600-h/summer-of-code-2009.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 129px;" src="http://2.bp.blogspot.com/_xeBcjs5_03s/Sc_fsBxkhMI/AAAAAAAAAVU/2bOQF8HPcAg/s400/summer-of-code-2009.png" alt="" id="BLOGGER_PHOTO_ID_5318715632431432898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;GNOME is a mentoring organization for the &lt;a href="http://socghop.appspot.com/"&gt;Google Summer of Code 2009&lt;/a&gt;. If you are a student who wants to get paid to hack all summer on free software, now is the time to apply, the deadline for application is on Friday, April 3rd.&lt;br /&gt;&lt;br /&gt;You can find a list of ideas that have been proposed by GNOME contributors &lt;a href="http://live.gnome.org/SummerOfCode2009/Ideas"&gt;here&lt;/a&gt; but this list is in no way exhaustive so you can apply for any idea you care about and you think would improve the GNOME desktop!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Rhythmbox&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rhythmbox 0.12 was finally released a few weeks ago, it contains a lot of bugfixes and new features compared to the aging Rhythmbox 0.11.6. And development and bugfixing is going on in svn contrary to the impression &lt;a href="http://ubuntuforums.org/showthread.php?t=1078732"&gt;some people had &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are 2 ideas proposed for the GSoC, one about media player synchronization (to keep Rhythmbox library and you favourite media player in sync), and one about getting information about the currently playing song (to know everything about your favourite group, get stats about the song that is playing, ...). You can find more details on the &lt;a href="http://live.gnome.org/SummerOfCode2009/Ideas"&gt;GSoC idea&lt;/a&gt; page on &lt;a href="http://live.gnome.org"&gt;live.gnome.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Solutions Linux&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.solutionslinux.fr/"&gt;&lt;br /&gt;Solutions Linux&lt;/a&gt; will take place in Paris on the 31st March, 1st and 2nd April (this is Tuesday, Wednesday, Thursday this week). This year it has moved from CNIT/La Défense to Paris Expo/Porte de Versailles so this will be an exciting new experience for exhibitors ;) Mandriva and GNOME-FR both have a booth, you should definitely come to visit us, entrance is free! And there will be tshirts and stickers on the GNOME booth, and plenty of good stuff on the Mandriva booth!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-3700546579230980597?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/3700546579230980597/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=3700546579230980597' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3700546579230980597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3700546579230980597'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2009/03/why-is-so-hard-to-find-blog-post-title.html' title='Why is so hard to find a blog post title?'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xeBcjs5_03s/Sc_fsBxkhMI/AAAAAAAAAVU/2bOQF8HPcAg/s72-c/summer-of-code-2009.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-182029265409902032</id><published>2009-02-06T00:00:00.003+01:00</published><updated>2009-02-06T00:12:14.584+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><title type='text'>FOSDEM!</title><content type='html'>It's this week-end in Brussels, so make sure to go there if you don't already have plans for the week-end! I'll arrive in Brussels on Friday evening, not sure I'll be able to attend the beer party. Then I'll enjoy most of the great talks in the &lt;a href="http://live.gnome.org/Brussels2009/Devroom"&gt;GNOME devroom &lt;/a&gt;and spend some time on the &lt;a href="http://blog.mandriva.com/2009/02/02/fosdem-09/"&gt;Mandriva booth&lt;/a&gt; as well. And am not sure yet what I'll be doing on Saturday evening, I guess something with the GNOMErs. Or the Mandrivians, we'll see ;)&lt;br /&gt;&lt;br /&gt;If you are a GNOME contributor, don't forget the group photo on Saturday at 3.45pm. And there will be cool GNOME tshirts on sale as well.&lt;br /&gt;&lt;br /&gt;Well, that's it, I don't really have much to say, this is just some shameless advertising ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-182029265409902032?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/182029265409902032/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=182029265409902032' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/182029265409902032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/182029265409902032'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2009/02/fosdem.html' title='FOSDEM!'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-3888326550281500689</id><published>2009-01-23T20:33:00.005+01:00</published><updated>2009-01-23T21:33:35.891+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><title type='text'>Bloody spammers</title><content type='html'>If you are subscribed to a GNOME mailing list, you probably got a really long and off-topic email from me. Except it wasn't me who sent it.&lt;br /&gt;&lt;br /&gt;Yesterday, I was spending a nice evening enjoying some good home-made sushis, and when I went back home, I was really surprised to see lots of emails about waking up the world, meeting the new boss, ... And I got very annoyed when I realized that these emails had been sent from my email address to most GNOME mailing lists existing on earth. I felt really bad when I saw some replies showing that some people thought this email really originated from me. So I did the only thing I could do, some limited damage control. I replied to the persons who mailed me directly and to a few select mailing lists to make it perfectly clear that this mail didn't originate from me despite what it seemed.&lt;br /&gt;&lt;br /&gt;By looking at the headers of the email, it's quite clear (at least to me) that I didn't send it: it was sent from a US ISP and I'm living in France these days and mainly using gmail as a mailer. Moreover, careful readers of the email (I haven't even read it myself ;) will have noticed that this email is signed "&lt;a href="http://en.wikipedia.org/wiki/David_duke"&gt;david duke&lt;/a&gt;" which is not my name ;).&lt;br /&gt;&lt;br /&gt;I think some guy box was taken over by a trojan and that it crawled gnome.org mailing list archives, got my email address from there and gathered the addresses of most mailing GNOME lists and then blindly spammed them. I sent an email to the abuse contact of the ISP, but I don't really expect too much from them.&lt;br /&gt;&lt;br /&gt;Now you know about as much as I do about that embarrassing email that some spam bot sent impersonating me. If you know people who got this email and think it was really from me, please spread the word and let them know that I had nothing to do with that. I'd never sent some political email to dozens of mailing lists where it's off-topic, especially not a really controversial one like this one.&lt;br /&gt;&lt;br /&gt;That's all folks, let's go back to hack now :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-3888326550281500689?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/3888326550281500689/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=3888326550281500689' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3888326550281500689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/3888326550281500689'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2009/01/bloody-spammers.html' title='Bloody spammers'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-1688462515091378386</id><published>2009-01-21T20:33:00.005+01:00</published><updated>2009-02-06T00:11:55.360+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='libgpod'/><title type='text'>First news of 2009 :)</title><content type='html'>&lt;span style="font-size:130%;"&gt;New job&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://cfergeau.blogspot.com/2008/11/autumn-update.html"&gt;my last post&lt;/a&gt;, I was looking for a job. The good news is that I started working at &lt;a href="http://mandriva.com/"&gt;Mandriva&lt;/a&gt; 2 weeks ago. I'll be working on the core distro to (partially) replace &lt;a href="http://blog.mandriva.com/2009/01/08/pixel-departure/"&gt;pixel&lt;/a&gt; which means I'll hack on urpmi and bootloaders among tons of other things. Thanks to everyone who helped me with job opportunities!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;libgpod&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After far too much time, we finally released &lt;a href="http://sourceforge.net/forum/forum.php?forum_id=910091"&gt;libgpod 0.7&lt;/a&gt;. It contains tons of improvements, the most noticeable being support for the latest Nano and iPod Classic, but there were lots of other improvements: writing of compact artwork files making the iPod more responsive, chapter data support, better iPod model detection, updated python bindings, improved API documentation, ...&lt;br /&gt;&lt;br /&gt;There aren't many changes in this release for iPhone/iPod Touch support. However, in addition to the great work from the &lt;a href="http://matt.colyer.name/projects/iphone-linux/index.php?title=Main_Page"&gt;iFuse&lt;/a&gt; team, marcan figured out &lt;a href="http://marcansoft.com/blog/2009/01/using-amarok-and-other-itunesdb-compatible-software-with-the-iphone-2x/"&gt;how to add songs to a jailbroken iPhone&lt;/a&gt; using amarok/gtkpod/rhythmbox/&lt;insert&gt;. If you add to that the iPod Touch is on its way to being &lt;a href="http://blog.iphone-dev.org/post/70407787/thermonuclear-pop"&gt;jailbroken&lt;/a&gt;, this means that people really insisting on buying those devices will at least be able to use them without iTunes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;FOSDEM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fosdem.org/2009/"&gt;FOSDEM&lt;/a&gt; is only a few weeks away now (7th and 8th of February), the GNOME and Freedesktop devrooms are booked and their &lt;a href="http://live.gnome.org/Brussels2009/Devroom"&gt;schedule&lt;/a&gt; has been published. You should definitely plan a trip in Brussels if it's not done already :) And don't forget our group picture on Saturday if you are a GNOME hacker!&lt;/insert&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-1688462515091378386?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/1688462515091378386/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=1688462515091378386' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/1688462515091378386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/1688462515091378386'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2009/01/first-news-of-2009.html' title='First news of 2009 :)'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-800124696176156616</id><published>2008-12-04T23:06:00.003+01:00</published><updated>2008-12-04T23:29:43.400+01:00</updated><title type='text'>FOSDEM!!</title><content type='html'>Months go by, and it's once again time to start thinking about the upcoming &lt;a href="http://fosdem.org/2009/"&gt;FOSDEM&lt;/a&gt;. It will take place on the 7th and 8th February week-end in Brussels.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This year, we'll have a devroom, we'll be on our own on Saturday, but on Sunday we'll share it once again with KDE and, this is new this year, with XFCE for talks of crossdesktop interest. I just got the confirmation about the room, so organization on our side is just starting, but if you already know you are going to FOSDEM and want to give a talk, please contact me and tell me about it :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another good news is that we'll also have a booth (like last year). The not-so-good news is that there is noone dedicated to the organization of said booth yet, so we'd need a volunteer to coordinate everything as soon as possible :) Contact me!!! It's not complicated, you just need to ask for the GNOME Event Box, think about what can be shown on the stand, find a few volunteers to be present on the stand during the FOSDEM, ... All that is needed is a bit of time, there are lots of helpful people who can give really good advice about the organization :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-800124696176156616?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/800124696176156616/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=800124696176156616' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/800124696176156616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/800124696176156616'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2008/12/fosdem.html' title='FOSDEM!!'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-4040779201793131031</id><published>2008-11-25T15:04:00.006+01:00</published><updated>2009-01-21T21:32:50.472+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox'/><category scheme='http://www.blogger.com/atom/ns#' term='libgpod'/><title type='text'>Autumn update</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Rhythmbox&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;In the &lt;/span&gt;last weeks, I finally landed a few patches for Rhythmbox iPod plugins that had been waiting for too long.&lt;br /&gt;&lt;br /&gt;The first one adds a dialog to setup new (empty) ipods, courtesy of gtkpod. This was &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=358029"&gt;bug #358029&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;and the initial patch was made by James Doc Livingston&lt;span style="font-weight: bold;"&gt;.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The second patch was written by Ed Catmur and Paul Drain. Its purpose is to&lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=411634"&gt; avoid copying duplicate tracks to the ipod&lt;/a&gt;. It's currently a bit simplistic, 2 songs are considered duplicates if they have the same title/album/artist. And the code doing that is factored in a generic function in the RBRemovableMediaSource class so other DAP sources can easily get the same behaviour. The fact that the duplicate check is made in a single function also means that we can easily replace this check with a more elaborated one (using audio fingerprints for example) in the future.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;The 3rd (and last) patch has been made by John Daiker and &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=317089"&gt;adds a property dialog to the iPod&lt;/a&gt; source to see how much space is available on the ipod, to see the ipod serial number, device name, ... This code is specific to the iPod source for now, but seeing &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=561955"&gt;bug #&lt;/a&gt;&lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=561955"&gt;561955&lt;/a&gt; which asks for the same feature for MTP devices, there is probably some factoring to be done...&lt;br /&gt;&lt;br /&gt;And, more or less related to this last bug, in the last days I worked on porting the Banshee SegmentedBar widget to C to be able to reuse it in Rhythmbox. After writing the GObject boilerplate for a new GtkWidget, the porting was pretty straightforward since Cairo/Pango mono bindings are really close to their C counterparts. The end result can be seen on this screenshot :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gnome.org/%7Eteuf/segmented-bar.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 428px; height: 101px;" src="http://www.gnome.org/%7Eteuf/segmented-bar.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The code can be found in &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=558576"&gt;bug #561955&lt;/a&gt; as a patch to Rhythmbox source. However, the widget code doesn't depend on any Rhythmbox code which means it should be easy to reuse in any GTK+/C project if you need such a widget. If you do so, please let me know about any bug or API issues you encounter since the code is really young and hasn't been tested much :)&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Libgpod&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;On&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;the libgpod front, not too many news. svn trunk is in a satisfying state and is probably releasable as is. The lastest ipod nanos and ipod classic are supported (with artwork and photos). As always, any testing with the latest ipods is welcome. We are also missing a few serial numbers for the new 16GB nanos, so if you own one, it would be great if you could send us the last 3 digits of its serial number (printed on the back) as well as its color.&lt;br /&gt;&lt;br /&gt;The iphone 3g and the ipod touch with 2.x firmwares are not supported at this time, the song database needs to be checksummed to be valid, and noone has reverse engineered the hashing scheme yet. Moreover, Apple is making things difficult through code obfuscation and &lt;a href="http://arstechnica.com/journals/apple.ars/2008/11/21/apple-lawyers-hand-ipod-hash-cracking-site-a-dmca-notice"&gt;legal hurdles.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;UPDATE: the EFF published this &lt;a href="http://www.eff.org/deeplinks/2008/11/apple-confuses-speech-dmca-violation"&gt;really interesting analysis&lt;/a&gt; of the issue&lt;br /&gt;&lt;br /&gt;On a brighter side, the &lt;a href="http://matt.colyer.name/projects/iphone-linux/index.php?title=Main_Page"&gt;iFuse&lt;/a&gt; guys have made great progress to make USB communication to non jail-broken devices to work. Before their work, one had to jailbreak his phone and to talk to it through wifi to do anything with it. Now that's no longer necessary thanks to those guys.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Personal life&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;After a few years working as a team leader on &lt;a href="http://www.anevia.com/"&gt;Anevia&lt;/a&gt;'s Video-on-Demand server, &lt;/span&gt;&lt;span&gt;it's time for me to move on and to look for new exciting job opportunities. So if you are looking for an experienced C/C++ Linux developper&lt;/span&gt;&lt;span&gt;, you are very welcome to contact me. My resume is available &lt;a href="http://www.gnome.org/%7Eteuf/CV-en.html"&gt;here&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-4040779201793131031?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/4040779201793131031/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=4040779201793131031' title='5 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4040779201793131031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4040779201793131031'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2008/11/autumn-update.html' title='Autumn update'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-7779884345105300909</id><published>2008-09-25T16:00:00.005+02:00</published><updated>2008-09-25T16:20:17.834+02:00</updated><title type='text'>Lutèce d'or</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3080/2885470645_7ce14bd347.jpg?v=1222296506"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 149px; height: 200px;" src="http://farm4.static.flickr.com/3080/2885470645_7ce14bd347.jpg?v=1222296506" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Yesterday, I attended the &lt;a href="http://www.paris-libre.org/index.php?option=com_content&amp;amp;task=view&amp;amp;id=18&amp;amp;Itemid=44"&gt;Cérémonie de remise des Lutèce d'Or&lt;/a&gt; (Lutèce d'Or awards). This is an annual event which is organised as part of &lt;a href="http://www.paris-libre.org/index.php"&gt;Paris Capitale du libre&lt;/a&gt; (yeah, arrogant name, but we are French after all ;). This is a corporate event whose goal is to gather companies using free/open source software. The ceremony was great, free food in a really nice place except that I felt a bit out of place with my jeans and tshirts while everyone was wearing a suit ;)&lt;br /&gt;&lt;br /&gt;But the most important (and most interesting) thing is that we (the GNOME project) won an award for the "Meilleure action communautaire menée" (best action led by the community) for the     &lt;a href="http://www.gnome.org/projects/outreach/a11y/"&gt;GNOME Outreach Program: Accessibility&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Getting this prize is really good since it give more exposure to our a11y efforts, even though now I really hate vuntz since he tricked me into going to this event instead of him and to go on stage to get the prize and say a few words with my tshirt (my best one!) in front of the suited audience. So no ice-cream for you Vincent!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-7779884345105300909?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/7779884345105300909/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=7779884345105300909' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/7779884345105300909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/7779884345105300909'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2008/09/yesterday-i-attended-crmonie-de-remise.html' title='Lutèce d&apos;or'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-4171447132635569152</id><published>2008-07-29T23:55:00.004+02:00</published><updated>2008-07-30T00:09:03.837+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='libgpod'/><title type='text'>libgpod callout improvements</title><content type='html'>&lt;a href="http://cfergeau.blogspot.com/2008/07/and-my-other-project-is.html"&gt;The other day&lt;/a&gt;, I mentioned that libgpod hal callout was setting &lt;span style="font-family: courier new;"&gt;volume.label&lt;/span&gt; to the iPod name to get a nicer name displayed for iPods in Nautilus (among other apps). What I didn't say is that I wasn't really sure that overriding that property with something that has nothing to do with the actual filesystem label was such a good idea.&lt;br /&gt;&lt;br /&gt;And it wasn't. After asking &lt;a href="http://blog.fubar.dk/"&gt;David Zeuthen&lt;/a&gt; about that on IRC, he kindly told me about &lt;span style="font-family: courier new;"&gt;info.desktop.name &lt;/span&gt;which was added explicitly for that purpose. And I also learnt about &lt;span style="font-family: courier new;"&gt;info.desktop.icon&lt;/span&gt; which is to be preferred to &lt;span style="font-family: courier new;"&gt;info.icon_name&lt;/span&gt;. So I made these 2 changes and pushed them to the &lt;span style="font-family: courier new;"&gt;podsleuth&lt;/span&gt; branch of my &lt;a href="http://gitweb.freedesktop.org/?p=users/teuf/libgpod.git;a=summary"&gt;git repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While I was at it, I worked on the few things that are still in the way to a libgpod 0.7 release, ie I cleaned up the exported symbols to make sure what we export make sense from an API point of view, and I added some missing API doc and made a few fixes in the existing one (some functions were renamed and the API doc wasn't properly updated).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On an unrelated note, I'm glad to see that some people find this blog worth some comments, thanks ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-4171447132635569152?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/4171447132635569152/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=4171447132635569152' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4171447132635569152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/4171447132635569152'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2008/07/libgpod-callout-improvements.html' title='libgpod callout improvements'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-8821092349542380700</id><published>2008-07-28T00:04:00.006+02:00</published><updated>2008-07-28T01:25:33.580+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='libgpod'/><title type='text'>And my other project is...</title><content type='html'>After describing my latest work on Rhythmbox &lt;a href="http://cfergeau.blogspot.com/2008/07/after-being-kicked-again-and-again.html"&gt;yesterday&lt;/a&gt;, here's what I did on &lt;a href="http://www.gtkpod.org/libgpod.html"&gt;libgpod&lt;/a&gt; in the last month. libgpod is a cross-platform library used by many different projects (amarok, gtkpod, rhythmbox, songbird to name a few) to access and modify your ipod content.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Extensive SysInfoExtended parsing&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;As has been &lt;a href="http://www.snorp.net/log/2006/09/18/maybe-theyre-not-as-bad-as-i-thought/"&gt;known for a while&lt;/a&gt; now, the iPod can be queried about its capabilities using SCSI commands and returns XML data describing the iPod (serial number, firmware version, ...) and what it can do can do (podcast support, video formats supported, image formats that it knows how to display, ...). When we released libgpod 0.6, we introduced a hal callout to send the appropriate SCSI query to the iPod and to dump the returned XML data to a file that we named SysInfoExtended. Normal users aren't guaranteed to be able to send raw SCSI commands to a device, hence the use of a hal callout and the dumping of the information to a regular file. However, in libgpod 0.6, we only had a very basic parser for that file which only knew how to read the only SysInfoExtended field we needed. Most of the information about the iPod capabilities was hard-coded into per-ipod model tables, and libgpod had to be told the iPod model before being able to (for example) being able to write artwork to an iPod.&lt;br /&gt;&lt;br /&gt;For the next release of libgpod, I decided that we had to be able to use the information from SysInfoExtended to its fullest. I started by writing a generic &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/plist.5.html"&gt;plist&lt;/a&gt; (which is the XML subset SysInfoExtended is in) to GValue parser using libxml instead of GMarkup. Then, I extracted the data I was interested in from the GValue collection the parser gave me to a nice C struct. To make the addition of new fields easy, most of the work is driven from a table indicating the field name in the plist file, the type we want to assign that field data and the offset we want to put that data in the resulting struct. Modifying that table and the struct definition are the only things that need to be done if we want to read additionnal fields from SysInfoExtended.&lt;br /&gt;&lt;br /&gt;With that being done , I had everything I needed to have libgpod use the information provided by the device to write artwork to the iPod instead of relying on hard-coded tables. Some refactoring was needed to make it possible to use the artwork data from the iPod (there were some assumptions here and there that the formats supported by the iPod were known at compile time) but now that it's done, the code feels much more natural and maintainable than before.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Getting the iPod model from SysInfoExtended&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With the aforementioned work, writing artwork to the iPod has been made much more flexible, but libgpod was still unable to automatically guess the iPod model/color/... from the device without asking the user. This is due to the fact that to do that, libgpod relied on the iPod "ModelNum" which used to be present in a file on the iPod filesystem but for quite some time now, the only way to get that model number is to read it on the iPod box, which is not really easy to do from software :)&lt;br /&gt;&lt;br /&gt;But for all recent iPod models, there's another way to guess the iPod model, this is by &lt;a href="http://support.apple.com/kb/HT1353"&gt;parsing the iPod serial number&lt;/a&gt;. And this serial number is precisely one of the things that  we can read from SysInfoExtended! So all we had to do to be able to automatically detect the model/color/.. of a plugged iPod was to properly parse the iPod serial number and to infer the iPod physical features from that serial number, just as what &lt;a href="http://wiki.banshee-project.org/PodSleuth"&gt;podsleuth&lt;/a&gt; does with that &lt;a href="http://download.banshee-project.org/podsleuth/ipod-model-table"&gt;table.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Podsleuth&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Given that libgpod had already installed a hal callout, and after all the work done to parse the SysInfoExtended data, I realized that libgpod had gathered all the pieces to build a podsleuth clone, so I decided to try to write one just for fun and to test the new API added to libgpod in real-world situations. This led to the work which can be found in the &lt;span style="font-family:courier new;"&gt;podsleuth&lt;/span&gt; branch of my &lt;a href="http://gitweb.freedesktop.org/?p=users/teuf/libgpod.git;a=summary"&gt;libgpod git repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Even though I haven't tested it against banshee, I compared the properties exported by podsleuth and by this experimental stuff, so this code can probably be used as a drop-in replacement to podsleuth. Writing it also made me realize that podsleuth doesn't export enough information about artwork formats compared to what libgpod needs. I'm also not a big fan of how podsleuth exposes the artwork formats: it parses the XML to get the artwork data to immediatly serialize it again to a string. It's then up to the app using podsleuth to parse that string (again) to get the artwork formats supported by the ipod.&lt;br /&gt;&lt;br /&gt;Anyway, since I now have hacked this nice tool, it's now up to me to experiment a bit with all of that and to make suggestions as to how things could be improved :) By the way, I already used that code to see how iPod integration with the desktop could be improved: it sets the &lt;span style="font-family:courier new;"&gt;volume.label&lt;/span&gt; HAL property to the name of the iPod as extracted from the iPod database which results in a nicer name for the iPod on your Nautilus desktop.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-8821092349542380700?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/8821092349542380700/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=8821092349542380700' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/8821092349542380700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/8821092349542380700'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2008/07/and-my-other-project-is.html' title='And my other project is...'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8472120078842080683.post-7898713078795035159</id><published>2008-07-27T01:11:00.000+02:00</published><updated>2008-07-27T02:07:55.925+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='rhythmbox'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>blogo ergo sum</title><content type='html'>After being kicked again and again (which hurts, the guy is a black belt in karate) by &lt;a href="http://dodji.blogspot.com/"&gt;Dodji&lt;/a&gt; who wanted me to blog, here is a first post.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Album Artist support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These last days, I've been trying to get back to Rhythmbox development to scratch a few itches of my own.&lt;br /&gt;First, I've looked at how Rhythmbox could &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=318579"&gt;handle compilations&lt;/a&gt;, ie albums containing tracks by different artists. Currently, if the album has 12 different artists, these 12 artists will appear separately in the artist list which can quickly create a big mess. I wrote a &lt;a href="http://bugzilla.gnome.org/attachment.cgi?id=114618&amp;amp;action=diff"&gt;basic patch&lt;/a&gt; to make it possible to set an "album artist" for such albums and to use that instead of the multiple different artists in the artist list. I had to experiment a bit with various approaches, but in the end, the patch is surprisingly small.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Song UIDs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then, I wanted Rhythmbox to be able to provide UIDs for the songs in its database. What I call an UID is some kind of identifier that is unique to a song and that can be generated by only looking at the song data. This can be useful for various things : iPod (or whatever your portable media player of choice is) synchronization, associating user data (rating, play count, ...) to a song which persists even if the user does a mv of the song from the shell, ... I learnt after doing that work that &lt;a href="http://undamped.blogspot.com/2008/07/version-01.html"&gt;Charlotte had been looking for such a feature&lt;/a&gt; in Rhythmbox for her nice &lt;a href="http://code.google.com/p/rhythmbox-predictive-playback/"&gt;Rhythmbox SOC&lt;/a&gt; which was good news :)&lt;br /&gt;&lt;br /&gt;To generate that UID, I chose to hash the song title, artist, album (read from the tags of the song) with the first 8kB of data of the file (actually, this hashing scheme was heavily inspired by what Amarok does). I'm not sure yet if this is the best way to uniquely identify a song, but we'll only know after people try to use it. Before you ask, I thought about using musicbrainz/musicDNS acoustic fingerprints but as far as I know, none of those fingerprints can be generated using free software end to end, there's always some closed source webservice that must be queried to get a fingerprint from a few parameters that were generated by analyzing the song audio data.&lt;br /&gt;&lt;br /&gt;Once again, this feature was straightforward to implement.&lt;br /&gt;&lt;br /&gt;The main issue I had was to debug the UID generation. Indeed, metadata reading (where I chose to add the UID generation) is done by a separate process which communicates with Rhythmbox through dbus. Reading metadata is basically equivalent to feeding random data to the tag reading library, so it's really hard to guarantee the library won't crash or hang in some corner cases. Using that external process allows Rhythmbox not to crash or hang if such an event should occur during metadata reading.&lt;br /&gt;&lt;br /&gt;But this external process also makes debugging harder: it's short lived, spawned on-demand and run in the background (ie it's not possible to print stuff to stderr or stdout). So moch's help was really welcome since he explained me how to be able to run that metadata helper process by hand and to tell rhythmbox to use it. It's really simple, all you have to do is to (optionally) increase ATTENTION_SPAN in metadata/rb-metadata-dbus-service.c so that the helper stays alive longer (by default, it dies after 30 seconds of inactivity).&lt;br /&gt;Then, you can run &lt;span style="font-family:courier new;"&gt;rhythmbox-metadata&lt;/span&gt; in &lt;a href="http://home.gna.org/nemiver/"&gt;nemiver&lt;/a&gt; (or in your favourite debugger), this will output a line like :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  unix:abstract=/tmp/dbus-vXSVpHsnpL,guid=ba4e19b37904dba3bb1fc2214889d478&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you now set the RB_DBUS_METADATA_ADDRESS environment variable to that value before running Rhythmbox, then Rhythmbox will use the metadata helper you just launched in your debugger. Now all that is left to do is debugging!&lt;br /&gt;&lt;br /&gt;The result of this work can be found in the &lt;span style="font-family:courier new;"&gt;uid&lt;/span&gt; branch of my &lt;a href="http://gitweb.freedesktop.org/?p=users/teuf/rhythmbox.git;a=summary"&gt;Rhythmbox git tree&lt;/a&gt;. It still needs some polishing, but the basics should already be working (including automatically updating your database to add UIDs when you first run it).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8472120078842080683-7898713078795035159?l=cfergeau.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cfergeau.blogspot.com/feeds/7898713078795035159/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8472120078842080683&amp;postID=7898713078795035159' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/7898713078795035159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8472120078842080683/posts/default/7898713078795035159'/><link rel='alternate' type='text/html' href='http://cfergeau.blogspot.com/2008/07/after-being-kicked-again-and-again.html' title='blogo ergo sum'/><author><name>Christophe</name><uri>http://www.blogger.com/profile/17507942489639330482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
