libbluedevil is a stable Qt-based library written in C++ to handle all Bluetooth functionality. Here is the man that you want to blame when something isn’t working properly on this library. It consists of a very easy and straight-forward API, featuring:

  • Manager

The entry point for the library. The Manager will tell you whether the Bluetooth system is operational, will signal you when adapters have been connected or disconnected, or when the default adapter has changed.

  • Adapter

The Adapter class has everything you can imagine to handle Bluetooth adapters. It can retrieve and set all kind of settings for the physical adapter. Summing up: start and stop discovering, visibility, timeout for visibility, retrieve known devices, register or unregister an agent, retrieve device by its hardware address (MAC) or its UBI… It will also signal you when discovering devices, and a remote device has been found.

  • Device

It represents a remote device. It basically retrieves information, but it can also set certain properties such as whether the remote device is trusted, block it, or set an alias for the device. Regarding what it can retrieve… all kind of information: its name, hardware address (MAC), icon, device class, supported services (UUIDs)…

The library is currently at its v1.7 version, and the idea is to keep API/ABI between minor releases as we are used to. The version 2.0 will be released at some point with more handy includes (currently “#include <bluedevil/bluedevilmanager.h>”, what will be renamed to “#include <bluedevil/manager.h>”).

Since BlueDevil will be moved to KDE upstream soon, eventually libbluedevil will also be placed at kdesupport, since the BlueDevil system has a hard-dependency on this library.

Bug tracking exclusively for library users will be tracked here. The official repository can be cloned by running:

However, as some of you may know, a completely-always-updated mirror lives at gitorious:

As always, feedback is very important, so I am open to suggestions, patches… Actually the gitorious mirror is a very nice place to propose merge requests in the case that you want to contribute any patch.

This library is in production since v1.0 and it is stable, being used by BlueDevil as well as other applications KDE-unrelated.

It has been very fun to develop this library, and there is more fun waiting… I have some more ideas on how to make it even more complete, but those news will come incrementally…

Blue smile

Yeah ! It is now for real ! We have an integrated Bluetooth system with our desktop. BlueDevil (the new bluetooth stack for KDE) consists of several key features:

  • libbluedevil: a Qt-only based library to handle almost everything Bluetooth related. It contains lots of functionality. It deserves a post for itself πŸ™‚
  • 2 KIOs: bluetooth and obexftp. Former for discovering devices and services. Latter for browsing and doing typical operations over a remote device.
  • 3 KCMs: Devices, Adapters and File Transfer. First one will allow you to configure everything related to your known remote devices. Second one for configuring your adapters (usually you will only have one, but having several adapters is supported here). Third one for configuring where the files being sent over bluetooth will be saved, and to globally enable/disable file transfer.
  • Monolithic application: ala KBluetooth.

It has been a pretty intense work, but it has been fun, and I am really glad of having contributed heavily to this technology. Working in UFO Coders is being a pretty great experience and while being fun and letting me develop for KDE it is also helping out in the task of finishing the University as a grant holder. Spare time now really reduced to -24 hours.

We expect bugs, and that is pretty much the point of the RC1. We want to fix ’em all !

Missing you…

I’m missing you guys. So much…

Looking forward to meet you at other event rather sooner than later πŸ˜‰

Hoping you guys have a great time at Akademy, and that cool stuff happens for our community and desktop πŸ˜‰

EDIT: I somehow wrote YOUR, I obviously meant OUR

No limits

KDE SC has improved a lot. It was already a really good piece of software, but it is getting a real boost lately and things are progressing exponentially. Good times.

As a wise teacher once told us: limits exist only in our imagination. So, now is time to break limits. All of them. To sum up my work on free software, this is what will receive lots of love from now on:

  • KDE SC: some fixes that I have to introduce. For example: support for RTL layouts in KCategorizedView that was missing because of the hard refactor done there. Also, KPluginSelector will need a review on that endless loop. Big bluetooth support, and lots, lots of things to come.
  • Qt: spare ideas on spare places. QList is on the aim. Something performance related. Can’t tell much yet though.
  • Spokify: finish what I started here. Make it feature complete (allowing drag and drop). Will need to revisit libraries to implement all kind of goodies they introduced on social networks and all that.
  • BugBuster: a distributed bug tracking system. I started this project with lots of hopes of it being really useful, and it needs to be completed to the point of being usable as a real bug tracking system. Basically my aim is to make it as feature complete as BugZilla. High goals. Possibly a script to convert BugZilla databases to BugBuster.
  • Ideal Library: in my little spare time of all the previous: the library of my dreams. Something similar to Qt, but with advantages provided by nowadays compilers. Basics are there: it now needs to grow.

Every project is in the plan with the full-hearted hope of making this world a bit better on what I really love. Sometimes I think that most people first study and later finds the reason to move their minds in a determinated direction (or not), something they really love. Probably most of us on this community found this love much before starting studying. Studies took me a bit longer for loving so much this science and the could-not-stop working on unrelated stuff (or what university understands as unrelated). However I feel confident and really happy I found something that moves my heart that fast and makes me feel that good. Good times.

Let’s forget limits. Let’s work together. Let’s make KDE SC rock, thus, helping this world to be a better place for every person living here.

I’m back !!

This year has been amazingly busy. I had some subjects (9, to say) that required lots, and I mean lots of laboratory time to get done, and finally I got over them pretty successfully. The good thing: they didn’t had exam. The bad thing: until the end they take your time out to study subjects that have final exams.

So after last exams this week (still one to go, next week), I’m really glad to be back with this maravelous community. I am strength-full to work like never before.

I am now working on Artesanos del Software, and I am really glad I have been given green-light to work on Qt/KDE SC. This is also great since I’ll be working as a scholar for almost three months in order to get lots of hours done and get them recognized by the University as working hours.

So my really full-hearted wish is to work hard in KDE SC and do everything that is possible from my side.

PS: I am really sad I won’t be able to attend Akademy this year. I have to defend my “final project” career (which takes one year) in july, and guess what, there is no concrete date set: between 5th – 10th july, so that is a huge window time to book tickets / accommodation.

Spokify: in its way to a release candidate

Spokify has suffered lots of improvements in a very short period of time, and it is getting in shape to a release candidate version. However I don’t want to rush, since I want the 1.0 version of Spokify to be completely stable and functional.

I have recorded a video in order to show how things are progressing. This video focuses on the main features of Spokify and on the significant changes that it has suffered in the last days, but it is impossible to show up all the details in a “wrap up” video.

You can watch the video through YouTube too:

PS: the application I used to record the video (xvidcap) for some reason is not recording linearly. At some points in the video, it plays really fast, and others, it plays normal. However, if you see this kind of strange things, is because of the recording, Spokify is working normally.

Hope you like it !

Welcome home. Finally Spotify service on KDE (or almost)

Hi all,

First of all I want to thank those who did congratulate me by Facebook because of my birthday πŸ™‚

Next, I really love Spotify. I love it so much that I have been using wine lately for it to run, and I am even a Premium user. I have been always annoyed because of using wine for this purpose. Still, I think paying for _the service_ is fair enough, and I didn’t care too much about the client itself, what is important.

Some days ago I started a Spotify client for KDE (called “Spokify“). It is getting in shape, and well, it plays sound using Alsa for now (Phonon or QtMultimedia wasn’t enough when streaming, as far as I have seen, but I will keep an eye on them). It also can search, load your playlists, filter (this isn’t implemented in the official Spotify client!), load and show covers.

I am going to improve it to the point that I can assure it does the same things as Spotify, and more. Next steps are to include KWallet and probably some configuration options.


Some people have asked me why I have started a new application instead having developed an Amarok extension. Well, (and I don’t expect to start a flamewar here, please guys, don’t follow this path), I believe Spotify service is absolutely all I need. I for sure don’t need so many features that Amarok provides, and I wanted to start a small application that has a very well stablished goal.


I am currently developing the application based on the official libspotify library. However, there also exists a library called libopenspotify which is source and binary compatible with libspotify.

For those who really care about their freedom, they are free to use libopenspotify πŸ™‚

The bad part of the story is that for you listening to music using Spokify you will need to be a Premium user because of the library restrictions (Application Key, better said).


I still wonder why I have developed Spokify. Spotify service is very restrictive with the libspotify library usage, and they force you to have an appkey that you need to set on compile time.

Only Premium users can have an Application Key. So, my question here is: how is this thing going to be packaged, if ever ? I should assume the packager will be a Premium user, or in that case I could give him mine ? (since in the license, it is explicitly said that team coworkers can share the same Application Key, despite it being private and personal).

I think following this reasoning, the despotify developers have their Application Key directly on the project repository. I am not that brave. I have added an empty file with an #error that asks you to read HOW_TO_DEVELOP file. I can’t assume everyone that clones out my repo will use that Application Key for “legal?” stuff. Since I don’t want to be banned, I keep the Application Key secret.


PS: If you try to compile Spokify, you will probably fail πŸ™‚ I have written a patch for kdelibs that is not still in kdelibs trunk, but you can have the patch here.

(Un)Selecting groups of elements in Dolphin (Part II)

/me loves constructive criticism and nice ideas. I think I have several times guided some development through my blog in order to try to accomplish the maximum number of people ideas and suggestions.

This time is not an exception. Eike put onto the table something I was already aware, and something I wanted to fix, so his comment just pushed me what needed.

However I feel the need to explain why I won’t make headers clickable as before (unless you have a very good reason that will convince me :).

1. On the rewriting of KCategorizedView now the “header” is “everything”. Have Β a look at System Settings. You will notice the “header” is covering the whole area of elements in that block. In case we have such a “category drawer” (as it is called in the code itself), how can we “draw” it to say “hey you are going to select the whole group”. Imagine you could select several items in System Settings (you shouldn’t, despite in 4.4 SC it is possible), how could you notify that in a visible way to the user ?

2. I felt showing the same icons as Dolphin does was a nice idea. Dolphin has this icons for individual selection of items, and I think that was the best way to go.

3. For this improvement (still not in trunk) I have gone through the path of “disabling” plus and minus signs, instead of making them disappear. From some UI classes taken I have learnt sudden visibility changes on elements are not good for the average user.

So here you have got the video. As always, please feel free to comment, give ideas, suggestions…

(Un)Selecting groups of elements in Dolphin

I am very happy to blog again about KDE. Here I come with an old feature with a new face. I will hopefully come soon also with some Bluetooth updates, since I am working on a KCM for it, but it deserves another post entry when it is in shape and happy with it.

In KDE SC 4.3 I did some work for KCategorizedView to select several items by clicking on the header of the group. You could also unselect items, but that wasn’t so easy to discover. I later rewrote KCategorizedView internally to have a much better and clear structure. It was missing one feature: this kind of “grouping” selection. Todd wrote a patch for not losing this feature for KDE SC 4.4, which got into the review board and got into trunk. Nowadays KDE SC 4.4 has this patch.

I really had no time to review this patch, and I am the only guilty for this patch not being ‘so good’. And I say this because of two main reasons:

1. It does not check whether the model allows multiple selections or not. You can check this problem by clicking on System Settings group headers.

2. There is no indicator that “something is going to happen if you click here” to the user, what can feel like kind of magic if you click on the view randomly and suddenly all those items become selected, when you really wanted to clear your selection.

Actually, this feature and collapsing and expanding blocks was somehow in shape with the rewriting. I had that thought, and some pieces of the puzzle were there, but I was missing the actual time that took writing it.

So, I got hands to work today that I had “some free time”. Here is the video result:

PS: This is still not in trunk. Finishing it and I hope very soon it will be all yours πŸ™‚

PS2: If you feel curious about it, give it a try locallyΒ (kdelibs, and kdebase patches).

PS3: Do not misunderstand my words please, I deeply thank Todd for the patch since he introduced a feature that was lost.

Dreaming on bugtracking

It has been a while since my last post. I have been working mostly for University, and now I got a job offer to work for very little time (even from home) on a new business that is emerging here in Madrid, Spain. I think is a good chance to get things done (R), and finish my studies at the same time that I am working. Hopefully we will be doing some Qt stuff, so I am glad after all. However dreams are still there.

In case you don’t know, I have been working in a library, called the ‘Ideal Library‘. The idea was to create something similar to Qt (obviously million years behind in size and features), but with the advantages of the nowadays compilers improvements (c++0x in particular).

While I was setting up the Mantis bugtracker I thought that git, mercurial, bazaar are great tools. They allow you to work even offline among other really great features. However, there is a small problem here: what matters if you can work offline, having access to the full history of a project if you can’t access the bug tracking system because you need connection.

Here is when the idea came up. Why not having a bugtracking system that is also distributed. Why not even hook it up with git, being it a really great “one thing”. You can close bugs from your commit message, everything locally, and then, push those changes on bug reports state when you get connection.

And yes, database is actually huge. It would be a matter of just keeping the last 6 months attachments (or even older if you explicitly ask the system to do it for a certain bug report, because you are very interested in that one).

So to finish this blog entry, I’d like to wish you all a really great 2010 year, and I am looking forward to finish my studies and work hard on KDE. Really. There’s nothing I expect more than that, being back with this great community that I love so much.