Older blog entries for zeenix (starting at number 302)

Slightly more on virtual world..

Forgot to mention in my last blog post that SPICE is not just more efficient at network bandwidth utilization but is also much more faster/responsive. Also, Jon Nordby pointed out that the screenshots of virt-manager I copied from virt-manager website are several years outdated. Here is how the main UI looks like now a days.

P.S. I was going to inline this screenshot but blogger.com is not letting me do that. :(

Syndicated 2011-06-22 13:40:00 (Updated 2011-06-22 13:40:01) from zeenix

22 Jun 2011 (updated 22 Jun 2011 at 02:05 UTC) »

Welcome to the virtual world!

About two months ago I informed  the followers of this blog that I will now be working on SPICE project  for Red Hat . Judging from the questions I was asked after that, I realized that not many people know about SPICE so I thought I write at least one blog entry dedicated to explaining what SPICE is all about. Before I get to SPICE itself, let me first introduce you to the world SPICE lives in.

Virtualization and Virtual Machines (VMs)

For some reason, I feel that I should leave the definitions to
wikipedia  and only quote it so that is what I am going to do:
" Virtualization, in computing, is the creation of a virtual (rather than actual) version of something, such as a hardware platform, operating system, a storage device or network resources. "
" A virtual machine (VM) is a "completely isolated operating system installation within your normal operating system".Today, this is implemented by either software emulation or hardware virtualization ".

Virtualization (of software and hardware platforms) is really nothing new and has been around since..well the the real thing itself: computers. There has been several implementations of different kind ever since and I are two main reason they exist and grow:
  1. Developing/testing software for hardware that you do not have. This makes virtualization softwares were attractive for consumer product manufacturers to be able to start the development of software soon after the plans for a particular product are finalized since it takes some time before they can manufacture enough prototypes for every developer and tester involved.
  2. Portability: In a typically VM setup, installation is done on drive images (files) rather than actual drives/partitions, which means you can carry or send your (virtual) machine anywhere you like.
  3. Ability to use multiple operating systems at the same time: Many Linux and Mac OS X users often need to run applications that are only available for windows and vice versa. Dual-boot is one solution to this issue but that implies you will only be able to use one OS at a time.
  4. Partitioning of a single host to multiple servers: Consolidation of many servers to a single host is a popular use case these days, done internally in many companies and also by hosting services. aka “The Cloud”.
Despite its big drawback, traditionally dual-boot has remained to be the preferred solution for many for a long time. The reason for that has mainly been the limitations of virtualization solutions, especially in terms of performance. However due to significant improvements in both hardware (built-in virtualization support and multi-core) and software, virtualization solutions have been gaining a lot of popularity lately.


Qemu  + KVM

There are many such solutions out there, both Free and non-Free out there but the solution of our choice is Qemu. This awesome virtual-machine manager (a.k.a hypervisor) combined with Kernel-based Virtual Machine (KVM) and built-in virtualization   extensions  in modern CPUs is capable of providing such a virtual environment that puts the real thing to shame.

Qemu+kvm might be a very powerful tool, its still very much a power-user tool. For example you have to use long commandlines with different switches to use Qemu effectively . Worry not! There is another set of tools to help there:


While Qemu+KVM might be an awesome solution, its still one of the many hypervisors out there and with some many people pouring into the virtualization industry, you can be assured that there will be a better alternative available sooner or later. libvirt not only abstracts you from hypervisors but also adds some really nice features on top of that:
  1. Manipulation (creation, deletion and modification etc) and monitoring etc of virtual machines on remote  hosts, securely.
  2. Live  migration of virtual machine(s) from one host to another.
Apart from the libvirt library itself, the libvirt package also comes with a very nice commandline tool called virsh  that exposes libvirt API as convenient arguments. As you can probably guess from its name, virsh is a shell so if you can launch it without (command) arguments it will launch an interactive shell, awaiting your commands.


Neither libvirt, not virsh are tools that an end-user could be expected to use. Thats where virt-manager comes into picture. It basically provides the same functionality as virsh but unlike virsh, its designed for end-users and hence has a very user-friendly graphical user-interface. Here is some screenshots that should give you a good idea:

While virt-manager has nice UIs for everything related to VM management, it still leaves the remote access of virtualized (guest) OS/desktop to tools that are tailored for that, such as VNC and SPICE.


SPICE was originally developed by
Qumranet  as a proprietary solution. Red Hat  acquired Qumranet in 2008 and in December 2009 Red Hat open-sourced the protocol.

Now with definition and history lesson taken care of, lets talk about the real thing: tools. SPICE, the implementation is divided into 3 main parts:





Just to be very clear here, spice-gtk is nothing specific to vinagre so if you want to have SPICE integration in your UI(s), you can do it very easily using spice-gtk. Apart from the C API, it also provides gobject-introspection  and Vala  bindings.




Whats wrong with VNC?

VNC has been around for a while now and in modern unix world, its considered as the  remote desktop solution so its natural for people to ask: why create yet another solution for the same problem? The reason is that SPICE protocol has been designed to be very efficient on bandwidth usage and to satisfy the needs of a virtualized environment [1] . Recall QXL I mentioned above? QXL is handled/implemented as something called paravirtual devices in SPICE. Its probably appropriate to quote the related wikipedia definition here first:
In computing, paravirtualization is a virtualization technique that presents a software interface to virtual machines that is similar but not identical to that of the underlying hardware. 
So while a VNC server reads frames from video memory and sends (compressed though) the updated areas (if any) to the client, spice-server on the other hand presents the guest windowing system with an X driver that captures X protocol operations directly. That is what makes SPICE a lot more efficient at network usage compared to RFB  protocol that VNC uses.

The end

I am really not good at explaining things so I’m sure I must have left-out some necessary details but worry not! We have a team of awesome hackers who can always help you with any issues related to SPICE. You can reach us either through our
IRC channel or mailing-list . If you are attending the Desktop Summit 2011 in Berlin, you are in luck cause not only there is a talk  about ‘Integrating virtualization into the desktop’ but also some of us will be attending the full duration of the conference so you can come and discuss with us in person.
If you are interested in readily available products based on these awesome virtualization tools, I suggest you have a look here .

[1] Actually, currently SPICE can only be used to access virtualized desktops, though one of our team members is actively working to make it possible to connect to normal/real desktops.

Syndicated 2011-06-22 01:03:00 (Updated 2011-06-22 01:27:14) from zeenix

20 Jun 2011 (updated 20 Jun 2011 at 19:03 UTC) »

Release logs are important!

Turns out that not many Free Software maintainers follow the practice of writing proper release logs targetted for packagers/end-users. To justify their laziness, they come-up with lame excuses like "Oh, the user never sees the release log" etc and at the very most copy&paste the (developer oriented) VCS changelog since the last release. Here is how it actually affects a user:

Now if you click on the URL provided, you will be taken to a page where there is a lot of information but the one you are looking for: What exactly changed? In this particular case, its just an bugfix release but many times new features are added and users can't know that unless you put that nicely in your release log.

So please stop justifying your laziness and take the efforts to write the release log if you are a maintainer of a Free Software project. OTOH, if you are a downstream packager, please copy or link to the upstream release log in your package's changelog that upstream maintainer has put his/her time/efforts into. Thanks!

Syndicated 2011-06-20 16:00:00 (Updated 2011-06-20 18:18:28) from zeenix

Canon Pixma MP560 printer and Linux

When I bought this printer, I failed to find any Linux drivers for it. I must admit I didn't try hard to find them either since I was very much in a hurry at that time. Since then I had just assumed that drivers for Linux just don't exist.

But today I decided to search/try harder to get it working against my fedora laptop. The result was that I found the drivers very easily and after several minutes of efforts, I finally got it working! So I thought it blog about it and provide some pointers so process gets easier for others:

  1. Ensure you have 'DefaultLanguage en_GB' line in your /etc/cups/cupsd.conf and your firewall isn't blocking Port 8611 for TCP/UDP.
  2. Get the drivers from here. The drivers are available as rpm and deb packages.
  3. Once you have the packages downloaded and installed on your system, find out the mac address of your printer somehow. The method I used was to watch for packets in wireshark and pinging the broadcast address of the network.
  4. Once you have the mac address, Run this command as root:

    /usr/sbin/lpadmin -p MP560LAN -m canonmp560.ppd -v cnijnet:/${MAC_ADDRESS} -E

    Note that mac address bytes must be separated by '-' here rather than ':'.
  5. Your printer should now be installed and working!

Syndicated 2011-05-30 19:50:00 (Updated 2011-05-30 19:50:44) from zeenix

Rygel 0.10 is here!

We just made our first stable releases of Rygel after many months of active development. I used to post a blog entry after each release with the full-log but I stopped doing that because some people didn't like it going to planet GNOME and I thought chances are high that other viewer might also be getting annoyed by it.

Anways, I would like to highlight some of the changes since 0.8.3:

  • Lots of improvements to our interoperability with other DLNA devices in the market.
  • Many optimizations to search, browse and streaming.
  • More efficient and correct use of Tracker APIs.
  • Richer media hierarchies.
  • Simplified transcoding by use of new 'encodebin' GStreamer element.
  • Preferences UI has been trimmed down to only provide a few options that users actually need. The plan is for this UI to disappear completely in GNOME 3.2 in favor of better (more integrated with rest of the desktop) alternatives.
  • More configurability (through config files, commandline and environment) for power users.
  • Ability to use Rygel as only a streaming server (without advertising it on the network).
  • Ability to bind Rygel to specific networks by their ESSID or network IP address.
  • Loads of random bug fixes.
  • Port to more modern APIs. For example port from dbus-glib and GValue usage to GDBus and GVariant.
For a full list of changes, please refer to our NEWS file. Hopefully this release is in time to make it to upcoming releases of all major GNU/Linux distributions along with awesome GNOME 3. Which reminds me:

Syndicated 2011-04-17 01:19:00 (Updated 2011-04-17 01:19:03) from zeenix

5 Apr 2011 (updated 5 Apr 2011 at 20:12 UTC) »

Future Perfect

Ever since I blogged about me looking for opportunities outside Nokia, I was contacted by quite some companies. Some of them ended-up giving me nice offers but in the end the offer that stood out amongst all was from Red Hat. So last evening, I accepted their offer to join the awesome Spice team.

The reasons I chose Red Hat over others were:

  1. Red Hat being undoubtedly the leader in Open Source technologies for more than a decade has always been on my 'awesome places to work at some day' list.
  2. The Spice project that I'm being hired to work on is simply awesome.
  3. They offer good working conditions.
I'll be staying in Finland and most likely working from home (unless I'm asked to work at the Espoo office). I will be officially joining Red Hat on May 2 and my last day at Nokia will be on April 21.

Before you ask, nothing disastrous is going to happen to GUPnP and Rygel. Of course I won't be spending as many hours on these projects as now but keeping in mind that my first 2 years of work on both these projects was purely in my spare time, I think I'll still be able to keep these projects running. Perhaps now I'll be able to better focus on upstream needs rather than that of my employers (more like working around DLNA conformance test tool issues).

Syndicated 2011-04-05 18:59:00 (Updated 2011-04-05 19:08:24) from zeenix

Yet another git history visualization

Here is a decade of GStreamer hacking squeezed into 5 minute visualization using gource.

I used the following commandline to create this:

gource -1280x720 -s 0.05 --stop-at-end --hide filenames  --highlight-all-users \
--file-filter po -a 5 --camera-mode track --user-image-dir ~/hackergotchies \
--disable-progress --disable-bloom --output-ppm-stream - --output-framerate 30 \
| gst-launch-0.10 fdsrc fd=0 ! 'image/ppm,width=1280,height=720,framerate=(fraction)30/1' \
! ffdec_ppm ! ffmpegcolorspace ! x264enc speed-preset=10 ! avimux ! \
filesink location=gst-dev-history.avi

Syndicated 2011-03-17 01:18:00 (Updated 2011-03-17 01:18:01) from zeenix

Rygel Development History Visualization (part II)

Here is yet another version thats twice slower (and therefore longer), has the gloom off and filenames disabled and is in H264+AVI format. Oh and this time I managed to use GStreamer to record the video, rather than ffmpeg.

In case anyone is interested, I used this commandline to create it:

gource  -1280x720 -s 0.1 --stop-at-end --hide filenames \
--highlight-all-users --file-filter po -a 5 --camera-mode track \
--user-image-dir ~/hackergotchies --disable-progress \
--disable-bloom --output-ppm-stream - |gst-launch-0.10 fdsrc fd=0 \
! 'image/ppm,width=1280,height=720,framerate=(fraction)60/1' ! \
ffdec_ppm ! ffmpegcolorspace ! x264enc speed-preset=10 ! \
avimux ! filesink location=rygel-dev-history.avi

Syndicated 2011-03-16 02:18:00 (Updated 2011-03-16 02:18:05) from zeenix

Rygel Development History Visualization

I recently discovered this awesome tool called, gource. Using that I created a visualization of rygel's development history and uploaded here.

Note that translation commits are missing. That doesn't mean I do not acknowledge or value those contributions but I had to exclude them because otherwise the screen was too crowded for viewer to actually see anything at all.

Syndicated 2011-03-13 16:18:00 (Updated 2011-03-13 16:18:33) from zeenix

12 Feb 2011 (updated 14 Feb 2011 at 01:11 UTC) »


Now that my company has decided to join forces with Microsoft, I am no longer certain of my future at Nokia. Although I would really like to stay until our MeeGo product is out at least since I hate leaving things unfinished but I don't see any harm in starting to look for other opportunities already.

So like my colleague and friend, Alberto I have put my updated CV here. Feel free to send job offers or suggest any good open job positions to my inbox.

Syndicated 2011-02-12 16:44:00 (Updated 2011-02-14 00:17:20) from zeenix

293 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!