Category Archives: libsoylent

libsoylent v0.5.0 “let’s talk about…”

Version 0.5.0 brings online-functionality to libsoylent. Want to launch a chat with someone? One function call. Want to see who’s online? One function call. Want to see someone’s online-status? You get it.

This release is also the last one for Google Summer of Code 2008. It’s the result of about four months of work. Phew.

The plan for the next release is that it will be a pure documentation and bug-fixing release. Also in that version: libsoylent will stop taking control of strings passed to it.


  • implemented Telepathy / Mission-Control / Empathy support
  • implemented various functions / methods for IM-information (get online-people, get presence etc.)
  • added communication functions (e.g. launching a chat with someone)
  • added an example for online-functionality
  • enhanced documentation
  • fixed some bugs


libsoylent is available for download at:


Feature requests, questions and related discussion go to the Soylent mailinglist. You can join at:

If you found a bug please report it at:


More information on libsoylent is available at:

libsoylent v0.4.0 “small step, giant leap”

Let me present you the newest version of libsoylent: 0.4.0. Three weeks of hard work went into this release, and in fact so much was added and changed that we decided to skip a version-number. Sorry 0.3.0.

So, what’s in it? More or less a complete people-management-library. Our goal was to create a simple yet-powerful API that “just works”. Hopefully we managed that. If you have no clear picture of what libsoylent is or just want to know more about it, look at the examples we’ve put up on the libsoylent-page.

What comes next? Because the library is that new and fresh, much testing will be needed. If you want to help, just play around with libsoylent and report bugs that you may encounter to our mailinglist. Thanks! Besides, next to the need of more documentation and polishing, here is a list of features that will follow in the next releases:

  • live-attributes (e.g. online-status)
  • communication (launch applications for chat / mail etc.)
  • address-book searching (atm you can only get all people)
  • people association / merging

Please leave a comment on my blog if you have thoughts, ideas, criticism, feature-requests or suggestions for changing something. Just let us hear your opinion.

Anyway, if you’re working on something that needs people-functionality, why not give libsoylent a try?


  • creating and modifying attributes works
  • adding / removing attributes to / from people works
  • attribute-mapping (for C runtime-types) implemented
  • attribute-system (definition, cleanup and to-string functionality) implemented
  • changes to people can be commited
  • loading people from the addressbook implemented
  • signals for SlBook, SlPerson and SlAttribute implemented
  • integrated gtk-doc
  • added a bunch of documentation
  • added more tests
  • added example-code (three examples)
  • revised architecture
  • a lot of internal-code improvements
  • fixed a bunch of bugs
  • added debugging functions
  • a lot of polishing was done (code-cleanup, convinience functions and macros etc.)


libsoylent is available for download at:


Bugs, feature requests, questions and related discussion go to the Soylent mailinglist. You can join at:


More information on libsoylent is available at:

When will libsoylent be Usable?

What happened since the last release? It has been a productive week for libsoylent.

Attributes are implemented. That means adding and removing attributes to / from people as well as modifying them works. With that come attribute-handlers. That’s basically a system which provides a way to convert runtime-types to libsoylent-system-types, so you can use arbitrary types like C-structs as attributes (for more information on that see the libsoylent API-draft). Furthermore storing and loading people (and attributes) works. Also the SVN trunk now contains some documentation and a bit of example-code.

Some important things are still on the TODO-list: some bugs have found their way into the code and want to be removed soon. Signals are not implemented at the moment, so libsoylent won’t notify you if some person was added or modified or something like-wise. And of course some more documentation and example-code wouldn’t hurt.

So, when will libsoylent be usable? The answer is: soon! Perhaps with the next release, coming in one week? ;)

libsoylent v0.2.0 “management qualities”

The second release features the basic functionality one would expect from a people-library. Create addressbooks and add some people to it. And then remove them again. People management at its basic level.


  • creating, opening and deleting addressbooks implemented
  • added tests for addressbook functionality
  • creating people implemented
  • people can be added and removed to / from addressbooks
  • added tests for people functionality


libsoylent is available for download at:


Bugs, feature requests, questions and related discussion go to the Soylent mailinglist. You can join at:


More information on libsoylent is available at:

libsoylent v0.1.0 “the seed”

The first release of libsoylent is finally there. It contains the most important GObject classes and many function and method stubs and should provide a good ground for the next upcoming features. You can’t do much with it, but you will get a good impression of the whole libsoylent architecture.


  • created basic architecture (SlPerson, SlGroup, SlBook, SlEntity, SlEntityHandler)
  • created basic test-suite
  • implemented listing and creating addressbooks


libsoylent is available for download at:


Bugs, feature requests, questions and related discussion go to the Soylent
mailinglist. You can join at:


More information on libsoylent is available at:

Back to Work: libsoylent Foundation

Moving to the new flat took longer than expected. But I think the extra time was worth it. The whole flat and my room look pretty nice and comfortable now. Most things are organized, only for the party on friday there is some planing left to do ;) . Internet is still an issue after two weeks of having (almost) no internet-access. Currently we are using the neighbours WLAN until our ISP is done with installing the new connection.

The Southside festival was great too. Radiohead and Sigur Ros, yeah! Tegan and Sara were also amazing. Looking back I would say it was one of the best music festivals I’ve been to so far.

Nevertheless, being away for two weeks kept me slightly behind my schedule. Version 0.1 is ready but not released, because of organizational reasons. In the meantime I’m already working on v0.2.

Last week I finished the foundation of libsoylent. That basically means I thought in greater detail of the architecture (see below), designed the needed GObject classes and made stubs for most functions and methods. From now on there should be a release every week, and a solid foundation will help a lot.

libsoylent overview

The libsoylent architecture as shown in the diagram: SlBook is the addressbook where people (SlPerson) and groups (SlGroup) are stored. People and Groups are entities (i.e. objects with attributes that can be modified etc.). SlEntities are backed by SlEntityHandlers. For SlPerson there will be an EDS-handler and for SlGroup a file-handler. More handlers can easily be added (if needed).

The storage of attributes (SlAttribute) is managed by attribute-handlers (SlAttributeHandler). They are responsible to convert runtime-values to values that can be stored by the entity-handlers (e.g. a SlAddress C-struct to a VCard-string for EDS).

If you have any thoughts on the architecture I’d be glad to hear them. This week I will have more time and work on people, group and addressbook management. And of course on the first release :) .

libsoylent API draft and schedule

Finally the libsoylent API draft is available. After another week of discussion, I think it covers most of the functionallity the API should provide and also some interesting background information and implementation detail. I’m really looking forward to comments, ideas, suggestions for improvement and also criticism :) .

Last week, besides enhancing the libsoylent API draft, I also focused on two other things: creating a detailed schedule for the rest of GSoC and getting my hands dirty with coding.

Some implemented things already work: creating addressbooks and also listing all available addressbooks. I mostly found out how to do this with libebook by digging through the Evolution source; really a huge codebase. Furthermore I refactored the little libsoylent test “suite” to better work with make check and added some tests for SlBook.

For the schedule I wrote down the tasks that have to be done for libsoylent, developed a roadmap including milestones and releases and planed when what functionally should be implemented. The schedule is available here.

The next one or two weeks I will be very busy (as you can see in my schedule). Tomorrow I’m going to the Southside music festival for 4 days, and after that I will move to my new flat share, what will probably take about a week. Luckily I started early with GSoC and will have much time after the current university term is over :) .

Designing an API

Last week I put all my effort in the libsoylent API. I started thinking about the API design weeks ago, but now I gathered all my notes and assembled them into one big document, made some diagrams and worked out the API in more detail. The person and the addressbook objects are mostly done, while groups still need a bit of work. All in all it seems like a good base to get started. Currently me and my mentor are discussing the whole draft, and I will publish the API as soon as we are done.

After I had a feeling that the API looked solid enough, I started to get my hands on the “base-code” of libsoylent, i.e. adding the main classes and GObject stuff and making everything compile and work with stubs. I also added a simple “test-suite” that can easily be extended to test certain functionality of libsoylent.

libsoylent is in the Soylent SVN trunk. If you’re interested, you can check it out at:

and build it with:

./configure –enable-libsoylent=yes && make

This week we also received a patch from Gilles Dartiguelongue that fixed some issues with the autotools configuration of Soylent / libsoylent. That was the first patch for me to apply (yeah ^^).

In the end something off-topic. After weeks and months of searching for a new flat (it’s not easy in Erlangen, I can tell…) for me, my girlfriend and a good friend of mine, we finally found a new home. Today we signed the lease contract. So, in three weeks I will post from a new flat. Nice! :)

Diving into Soylent (and Gnome)

As this is my first post on Planet Gnome (and also Planet SoC by the way) I’d like to take the chance to introduce myself: I’m Sven Pfaller, a 21-year-old computer science student from Erlangen (near Nürnberg), Germany. In the scope of this years’ Google Summer of Code I work on Soylent, more precisely on libsoylent, a library that will try to integrate people deeper into the (Gnome) desktop. If you want to know more about the project, you can have a look at a previous blog post I have written some time ago. So, hello everyone, nice to be here :) .

The last 6 weeks…
… or “the community-bonding-period”

So, what happened the last weeks? I was busy learning many things, digging through tutorials and writing some sample programs. I’ve put together a list of all tutorials and documentation I studied so far. The first items on the list I found really usefull for entering and exploring Gnome:

Much stuff, isn’t it? The sample programs I wrote include a simple GTK+ GUI, a GObject based mini-game, D-Bus and libebook utilities, and ChabChab, a command-line instant messanger. I am amazed of the capabilities of the Telepathy / Mission Control / Empathy trio, as I was able to write a solid IM in almost no time.

live and in action

Last week…
… or “the start”

With all the things listed above I felt well prepared. After adjusting the SVN repository’s autotools to include libsoylent (outch, pain!) and carefully going through the complete existing Soylent code, I started to write down my thoughts about the libsoylent API. Presumably a first public draft will be available by the end of this week.

There’s still much to do and I am slightly behind my schedule, so I better get going ;) .

GSoC 2008 Application – Accepted!

With a delay of about one hour, the results for GSoC were announced on Monday. At 21:42 a mail from Google landed in my inbox. Subject: “Congratulations!”. My proposal was accepted!

Before going into detail about the proposal, I wanted to thank Travis Reitter, my mentor in this year’s GSoC. He was a great support the last weeks, it was a pleasure and fun to work with him and certainly will be this summer. I’d also like to thank Rainer Müller, Christian Rieß and Karolina Osietzki for proof-reading and constructive criticism on the proposal.

So what is it all about? I applied to GNOME, more exactly to the Soylent Project. Let the abstract of my proposal describe it:

Communication is one of the most important parts of human life. In recent times computers and software made it not only easier to communicate, but helped to create new dimensions of interaction. Whether it’s email, chatting, voice or video, social platforms or blogs, everyone communicates somehow. This is an exciting development. But it is also a challenge for existing desktop systems to better integrate these new technologies. This is where Soylent comes in.

The Soylent Project is an attempt to really make people a part of the Gnome Desktop. Therefore it will provide a library, called libsoylent, that can be used by Gnome applications to have easy access to people-centric functionality. This includes system-wide access to contacts and groups, aggregating and managing individuals’ static information (e.g. name) and dynamic information (e.g. whether he / she is online) and much more.

I’ve created a diagram that shows the components and structure of Soylent:

Soylent components

More information is available in the full application.

This summer I will work on the people framework, namely libsoylent. This includes creating a convinient API, implementing the library and adjusting Soylent to use libsoylent.

For now there is still some organizing left to do before I can dive right into Soylent. I’ll keep the GSoC Soylent Roadmap page up-to-date.

Congratulations to everyone who was also accepted. I’m sure this will be a great summer :) !