print-manager updates in KDE 4.11

For those who doesn’t know print-manager is a project I started back in 2010 (yes it’s 3 years old now!), but only got included into KDE 4.10 (the current stable release). The reason for that is that since it was meant to replace system-config-printer-kde it needed to provide at least the most used features, and that was only possible as the logic to find a good PPD for a given printer was then exposed through DBus, so we could use that but not it’s GUI.

I’m very pleased to say that my expectation of receiving bug reports of missing features, surprised me by being just one of the few bugs it got (sadly it’s not the easiest to one to fix). The number of bugs was also quite low and it’s acceptance quite positive, which helped me managing fixing most of them then in a short time. Currently there are only 2 standing bugs, and none of them are crashes (all were fixed), one is a missing convenience feature and the other is half fixed but I failed to setup a similar environment to figure out what was happening, but this next version will include some debug info to try to figure that out.

What about new stuff?

So CUPS is not a new project that earns features everyday, actually we fear to have more features removed, that being said print-manager already covers most of it’s functionality. One CUPS feature I didn’t make use in 4.10 was the ability to reprint canceled/completed jobs, this feature also only works if the job is preserved which is something that can be disabled on the server. Of course we only enable the button if the job can do that: p-m-queue-reprint Notice the Reprint button, now there’s something even cooler than that, the last column “From Hostname” is also new, but the coolest part of it was that this was actually a feature request from a KDE 3 (kprint) bug, funny enough I fixed it on the exact same day were it completed 10 years 😀 (I accept cookies…) Next we have a bunch under the hood changed and fixes.

When I first presented the print-manager plasmoid it would have a feature to configure which jobs to show. Having “Active jobs”, “Completed jobs” and “All jobs” ended up becoming an issue, since if the completed job list had like 20 entries the plasmoid was taking several seconds to load, so since the “Active jobs” is always the smallest list I removed the other options to avoid bug reports. Latter Apper gained a plasmoid and I run into the same slowness very quickly, actually a list of 200 updates (which is not uncommon) was taking half a minute to load.

My previous investigations showed the Plasma DataEngines were too slow, in fact I believe it’s the mapping between the DataEngine and QML since plasmaengineexplorer is not _that_ slow. This was a no go for Apper, so I created a hybird C++/QML plasmoid, and quickly I noticed that this would also be the best thing for printer manager. It’s not only is blazing fast now, but also has the important benefit of not keeping four models implementations as the QWidgets dialogs already had them, so now I fix one model and both plasmoid/KCM/print-queue get it. p-m-plasmoid-configIf you have used the 4.10 version you will also notice an important improvement on the above, instead of a weird LineEdit to select which printers the plasmoid will display, now you have a nice checkable list.

Bonus points to Kai Uwe Broulik that added the second icon there (and did some more stuff) which is the full System Settings printers module so you don’t need to open system settings. And yes I’d like to have a different icon for the first option but I failed to find the option (if it even exists) to do that as Plasma uses the plasmoid icon for the first item. The internal library that talks to CUPS also got several improvements and fixes which made it Qt5 safe, due to QHash getting items stored randomly (yes Qt4 says we can’t rely on the order but we know we can :P). To be honest I don’t really know how well this worked with the mess it was… The plasmoid also got several improvements:

  • It’s fully usable from the keyboard now
  • The highlights/states work more reliable
It isn't empty anymore if no printer is configured
It isn’t empty anymore if no printer is configured

You get this if you filter some printers out and they get removed
It detects if CUPS has stopped and show a proper error message
It detects if CUPS has stopped and show a proper error message

And finally the plasmoid full of printers and a few jobs, with the new NIHSwitch, fully draggable and with I/O visual to avoid confusing, done my real world testing and so far nobody got confused:

print-manager plasmoid in KDE SC 4.11
print-manager plasmoid in KDE SC 4.11

Until KDE Frameworks 5 isn’t released (and probably also packaged), the development of print-manager will continue in the next SC 4.x releases, of course the list of TODOs is quite small and if you are willing to give a hand send me an email.


print-manager updates in KDE 4.11

Happy new Apper release! 0.8.0

Happy new year everyone 🙂

I was planning a to release Apper as Christmas gift, but well the release wasn’t good, lot’s of small bugs here and there due to the changes to accommodate QML and the new plasmoid updater.

The new release was initially just to be an update to PackageKit 0.8.0 new API, but then I realize I could do lot’s of improvements without losing time with things I want to port to QML.

One of the biggest changes in PackageKit 0.8 series is a feature from the moment I joined the PackageKit project, and thanks to Matthias Klumpp we now can run parallel transactions in the daemon, which means you will be able to browse packages while installing (if the backend supports that), right now Apper is still designed to the old behavior of only one transaction at time, but most backends doesn’t have this feature anyway… I’m planning on doing this for APTcc but forking a process and doing IPC is not something you want to do every day… So it’s likely Apper 0.8.1 or later will be able to do two things at time.

So what changed from Apper 0.7.x to 0.8.0:

  • When untrusted packages were to be installed we only knew that there were some not which ones, now you’ll get a proper description.apper0.8-3
  • When a install/remove/update transaction was started you had to wait till simulate to enter your password, now PackageKit asks it when simulating, so if simulate takes long (the case of a few backends) you won’t miss the password dialog.
  • It’s now possible to automatically download new updates when they arrive and have a notification to install them when they finish downloading, so you review and install.
  • All transaction messages where added to a list and a tray icon was created to show them, this was a duplication of KDE notifications so you won’t see an note icon with backend messages on the tray, they will arrive as regular notifications.
  • When a restart is requires there is no more a restart tray icon, you will get a persistent notification with restart/logout options.
  • From the above you can see that all tray icons were moved to a different structure, the remaining was the update icon, which from my last post you can see I ported it to a plasmoid, so if you don’t want it, just remove from the tray (you will still get a notification when new updates are available and full Apper GUI will open). apper0.8-2 apper0.8-1
  • To have Apper more smart and remember if it has shown a notification about new updates, I decided to move all apper-sentinel code that was related to monitoring transactions and showing the update icon to KDED, this way the code is much easier to debug, maintain and remember what we already did. With this the annoying bug of prompting about new distro upgrades every 5 minutes is gone sine we know when we have shown that.
  • Information about new distro upgrades in the Apper Updater GUI was moved to a KMessageWidget
  • I’ve also made packagekit-qt API a bit lighter so it’s probably a bit faster.
  • I also fixed some other bugs that happened to be in the way of the changes.
  • APTcc also got several improvements, fixes and speed ups.

I also want to thank the people who reported bugs, committed fixes and tested it, so it can be a good release.

For the future I first want to make APTcc to handle parallel transactions so I can test this new way of dealing with PackageKit transactions, then I’ll start porting it to a QML interface which will make the experience much nicer.

Download (mirrors might be still syncing):

Thank you for using it and enjoy the new release 🙂

Happy new Apper release! 0.8.0

new Apper updater


I’m very glad to be able to be making new posts about stuff I like, though my situation still not finished, we have sent some papers to lawyers at Argentina and since this year booking is too much expensive my wife will only be going there next year. The donations money helped a lot but almost half of it is already gone, we still need to pay the Germany lawyer and if you know BRL vs EUR it doesn’t play  nice 😛 Maybe next year I’ll set another pledgie, and I hope to be able to have payed most of bank debts till next year…

Back to the topic, I’ve already said I was planning a new updater, and now I want to share it with you. I’m so happy about it because it makes the updating use case much easier… come on! Just click the icon (maybe do a quick) and press update 😛 how easier could it be?

Apper 0.8.0 will probably be released next week, tomorrow I’ll try to do the last strings changes, and then I’ll give the translators a week to update the few missing strings, 0.8.1 hopefully will follow by January to fix the new introduced features that certainly broke something.

I’m not entirely happy yet with how it works but it works. I still have to show some KDialogs to review dependencies, agree with not trusted packages… hopefully in near future all of that will be inside the plasmoid.

The old tray icon will be gone with this and more changes (I’ll blog when I handle the release) to move away from the regular tray have been done too.

And really thank you very much for your support, thanks to everyone that cared about me I was able to be at my wife’s birthday 7th, my soon 8th and today mine on the coolest day of the year 12/12/12 😀

Enjoy the screen shots:

Getting Updates
Getting Updates
A rare up to date system
A rare up to date system
The list of updates
The list of updates
Downloading Updates
Downloading Updates

UPDATE – I forgot to put the screen shot when you click and expand an update, to see it’s changelog (still misses some info):

Updates Changelog
Updates Changelog
new Apper updater

Who said Apper couldn’t have a plasmoid?


This will be a quick post, I’m about to travel to my parent’s house this weekend, it’s elections on Sunday, so I’ll go right to the point.

When I first started Apper (well it was KPackageKit), people were all “wow plasmoids are so cool”, and well they were indeed but 99.9% of my time I don’t even see my wallpaper, my desktop has nothing but the default wallpaper, so I thought “Why should I make a plasmoid for it?”, well it isn’t a fancy comic strip, or an cool CPU usage widget.. Who would want to go to the desktop just to search for a package?

It turns out that after I wrote a plasmoid for print-manager and realized it was really that easy to do, and also that for some releases now you can even put them on the systray I started thinking what else can I make? It was fun so I wanted more…

It turns out that I sort of hate systray, but for system (and only for that) stuff it’s quite handy to have smaller icons. Now that PackageKit 0.8.x has it’s API frozen and I have fixed all changes in packagekit-qt a new Apper release is needed. The new PackageKit is awesome, though most backends (including my aptcc) doesn’t support parallel transaction, adjusting to this new ability is a must for Apper, so I started hacking in it again, I want to replace the current UI with QML but there are distros waiting for my release so I will do this change slower.

Apper-sentinel has 3 systray icons, one for reboots, one for backend messages, and one for updates. It turn outs that I can get rid of the three of them. The reboots can be made a persistent notification, if the user doesn’t care it will just go away. The backend messages should already be simple notifications, and the updates icon can be a plasmoid! Yup a plasmoid!

Wouldn’t it be cool to see the updates icon on the tray click it and see the updates right away, push an “Update” button, and have it started? And if you don’t want it on the systray you can move to another place, it makes you free from systray!

It’s not finished, but already lists the updates:

A quite huge list of updates…

Yes, I do update my system 😛


Who said Apper couldn’t have a plasmoid?

Print Manager 0.1.0 Released!


Release soon and release often wasn’t really the case of print-manager, I started this project 2 years ago, and this is the first official release. I’ve been waiting for this moment for so long which I can’t say I’m not super happy!!!

First off I REALLY want to give a BIG THANK YOU to all who contributed to my fund raising campaign, without it, this project would have to wait even more, because without a real printer testing the “Add New Printer” feature is real hard, even tho I don’t have all printer models available out there with a printer I can at least guess what s-c-p (system-config-printer) did.

My new printer and monitor 😀

It’s been a while since my last blog, but the truth is that there is a lot I’m doing under the hood of the applications I develop, for example PackageKit is passing through some real deep changes which will change a lot how Apper talks with it (for the better). I’ve been fixing stuff on upower, libsolid, colord-kde…

This week I read a rather sad news Dolphin 2.1, and I must admit I’ve been through the same feelings, especially when your friends show their fancy new OS(X), and they show everything just works, it might have it’s limitations, but the overall experience shows something that was not just written, I was well thought. So it made me rethink why I don’t gave up on doing this and just surrender for the fancier that could make all my work much easier? Well remembering last Linus talk (the one he express our hard time with NVIDIA), he said that before he started writing linux he used to write all his tools, and that’s pretty much what keeps me going, the tools I write pretty much to myself, if I was happy with the existing ones I wouldn’t write a new one anyway… Being in a OS where (at least for me) everything just works, removes my fun of writing stuff that doesn’t 😉  (which BTW I’m about to start a new one…)

All I have to say is that Dolphin is really one of the best piece of software I have in my PC and that I’ll keep my hope someday he will return bringing another useful tool for us.

Back to the topic, this new release is a very important step to get print-manager in KDE 4.10, I’ve finally added the most important bits missing compared to s-c-p. Comparing to s-c-p-kde it even has some features that weren’t ported from the original s-c-p. Being pratical it means there are a very small list of TODO’s and we really need your help with testing, thanks to Kai Uwe Broulik the user interface received some real nice updates, and some testing. But we really need more, so if you can test the software so we have zero or near zero bugs before 4.10 it would be awesome. If your distro want to pick this version it’s fine too, but surely there are some bugs…

The cool things this release has (compared to my old posts):

  • When automatically adding a printer show actions: “Print test page”, “Configure Printer”, “Install Driver” which are shown on the popup that comes when you plug it into the USB port.
  • KDED module runs on a thread
  • Dialogs now save their size
  • KCM doesn’t show the printer list if you only have one printer.
  • Fixed some authentication bugs

Add Printer Wizard:

  • Renewed UI
  • Improved URL handling (specially for samba shares)
  • PPD chooser calls s-c-p DBus interface to find the best driver
  • Devices listing calls s-c-p DBus interface to group devices that provide different communication protocols

And lots of other fixes…

If you want to help making this tool the best ever, we miss:

  • Patch smb kio to see printer shares to be able to browser them and easily add them
  • Make sure the application works well when we stop/start CUPS
  • Make sure CUPS DBus notifications don’t break (sometimes it simply stops working)
  • Create a QML model to expose the print jobs to the QML plasmoid, since Plasma DataEngines don’t perform well on large lists
  • Integrate with PackageKit (hehe this is fun, I’m a PackageKit guy who did not integrate his own app 😛 ) – easiest one

As you can see the list is really small, so TRY IT!

Print Manager 0.1.0 Released!

Meet PhotoBook!

Hello Planet KDE!!!

I have the pleasure to announce my new app PhotoBook! I’ve been waiting for quite some time to put the code on public and I just did this today. So what is PhotoBook?

PhotoBook is a photo management application. I know what you are just thinking! Don’t we have gwenview and digikam already?

So before everyone starts a flamewar let me explain why I did not put my ideas on those two apps (though after talking to Aurilen – gwenview he might end up using some of the ideas into gwenview).

Starting with gwenview we have an excellent Image Viewer (It’s the application description), an Image Viewer as the name says allows for viewing images, you may think “well a photo is an Image”, but not all images are photos, gwenview is an application oriented on your file system (if you enable nepomuk you can also tag all your images), you can just browse your files and view any kind of image it supports, it even has slide shows and can play clips. You don’t organize by events for example your Krita drawings…

On the other hand we have digikam a professional application with tons of filters, geolocation, tags, lighttable, colorcorrection and the list goes on. Due to this it’s more oriented for a photographer.

Both applications integrate KIPI plugins so you can even export your images/photos to several webservices.

What I noticed is that we have a gap here, well I’d like an application to manage my photos with some of the features that digikam has, but it must be a simpler application since I want my with using it. Her files are just a mess, photos all around the hard drive if it’s not me to organize it sometimes it would be a huge mess, being honest I even prefer not touching it, apart from that, every time she’s going to upload her photos she opens KolourPaint and resize image by image so the upload is faster, I tryied several times teaching how to do that with KIPI but she always forget it.

At the beginning of this year my boss showed me iPhoto, wow, that had everything I was looking for, a pretty smart importer, photos organized by events, tags, faces, places and facebook integration, not to mention that it organizes all the photos you import so you don’t have to pass through the PAIN of manually create a directory structure…

After that day I searched for a Linux app that did that, the closest was ShotWell a Gnome app, I’d use if it wasn’t by the fact that it doesn’t has an smart importer, and well I’m not a Gtk fan so I decided to do a Qt application that could fill my needs.

QML is everywhere on the news, it’s the Qt hype, I had never tried it (it was before the printer-manager QML plasmoid), playing with some Qt demos I said to myself this will look awesome with QML, drawing the solution and playing with it at first was a frustrating experience, without Desktop components it’s a major pain as I’m not very skilled with inkscape and I don’t like to waste time learning a tool just for one or two icons… so I gave up a few months ago.

Time passed and I got robbed, the window of my car got crashed, my company’s laptop stolen and so was my wife’s camera, 8 GB + what was on the laptop of photos lost, the laptop could have a backup (my fault), but the 8 GB was actually the fault of not having a tool to smart handle the import. At the same time Marco Martin (notmart), posted his improvements on a QML File Browser for Active that had a feature I couldn’t reproduce in QML.

This motivated me to get back to my old code, now I had more experience with QML, but still the pain of creating everything was there, but now I don’t really care, Qt 5.(something) will have it… then I just replace 😀 the core of the app is just pure Qt, even the code that provides the images, the thumbnails are all C++ code.

I have a bunch of stuff to say about what this app already does, and what it will do, but this post got too huge already… If I were you I’d be sleeping by now… 😛

So say Hello World!

Importer for removable media

You can find the code in

As I’m no CMake expert after you compile the code you will need to create a link called qml_files that points to the qml files, and run photobook from the directory containing this link. If you know how to improve this please give me a hand.

The ui is still a bit of a mess, and PLEASE this is alpha software, the indexer might change, the directory layout might change, right now is just a tech preview…

I’ll soon make more posts about how the importer works and what you can do with it 😀

Enjoy 😀

Meet PhotoBook!

Say Hello to our must have new plasmoid

No, Apper is not winning a plasmoid (I still see no use for that) 😛

It has been almost two years since I last touched print-manager, probably a few bug fixes but nothing big. The main reason was that when I reached the part where we add new printers I saw that it was very hard to do it like system-config-printer does, the reason is that it has a bunch of tricks to find the best driver for your printer. The ideal world would be taking the system-config-printer python code that has the smartness and put it into a C shared lib, this would be great since anyone willing to write this kind of software could use it just as we use the CUPS library which is also written in C.

I asked a bunch of people to help me on this task since it’s not a very easy task and demands time which I don’t have. I think two persons tried to help me but also due to my complex threaded code they got scared, so last week I had an idea what about making a plasmoid!? Yes, this could not only make print-manager super cool, but also could call some attention to someone willing to take the above task 😛

So to start, print-manager was my first application I’ve made to use threads communicating by Qt queued’s calls, which make it much easier to code, the original code was really a mess since I didn’t knew CUPS nor Qt queued invocation. Thanks to this I was able to do a nice threaded code on my commercial Qt app. so as I learned some better ways to do this threaded thing I decide to improve this code first.

The code is much easier to read, basically you have a CUPS thread running it’s own event loop and all the requests you do to CUPS move to that thread process and return to the GUI thread, very simple.

I’ve never touched Plasma API nor it’s QML components, I tried to build a photo management application in QML and end up giving up to use QWidget at least until QML fits well on desktop, but for simple applications like a plasmoid it fits perfectly, in short it was not very easy to export the CUPS data through Plasma::DataEngine and QML is also a bit trick when lay outing items so tanks: sreich, aseigo and notmart 😀 who gave me a hand to figure out what was wrong…

So check it out the cool print plasmoid:

Jobs Actions
The actions each job might have (hovering one of the buttons)
Jobs Printers
When hovering a printer it's jobs get hightlighted

As you can see the jobs with the plasmoid is pretty much done, pause/resume printer works, canceling/holding/releasing a job too. Drag and Drop is not possible yet, I have to stufy how QML handle this (if it does), so that you would be able to drag a job from on printer and drop on another…

Code is here: git://  please if you can help 😀 no printer is needed for testing (I myself don’t have one) though I’ll need one to test the plug and add new printer…

Anyways Enjoy 😀

Say Hello to our must have new plasmoid