It’s been a while since I want to do a new colord-kde release, the fact is that there is still some stuff to do and I have to balance the time between a bunch of other stuff I do in parallel, I just found boring stick to one thing at time
This release is very recommended as it has lots of fixes compared to 0.2.0, some distros shipped backports to some of those issues but over the last week I have fixed even more stuff. Here is a quick list of changes:
- Lots of new translations (thanks to KDE tranlation teams)
- Fix setting an ICC profile while KDE SC is starting
- Fix setting the ICC_PROFILE X atom that applications like Krita, digikam, gimp use (I was impressed by how long it took to some user actually notice this but I just guess there aren’t many users doing color correction on apps…)
- Add a mimetype handler to handle ICC profile files, so that when you click on an ICC file a dialog asks you if you want to import it.
- Handle the talk with colord using auto generated classes from XML interface which simplified the code a lot and probably made some stuff faster and non-blocking
- Improved support for colord 0.8
- Improved information about why the calibration button is disabled thanks to Lukáš Tinkl
- Moved the code that scans and parse ICC profiles to a thread so we don’t block the main KDED process
- and of course a bunch of other fixes…
For the next release I’ll try to make sure KWin color correction feature works with colord-kde (it should just work but seems it’s not working so I have to dig into this), and also a cool new feature is that we will have a native KDE dialogs for the calibration phase!
For those who don’t follow Hughsie’s blog, I’m reposting it here. It’s about helping with statics data if you use colord-kde.
What he asks is quite simple but doesn’t make sense if don’t have colord-kde installed, you don’t need to have ever touched it, colord-kde creates an edid ICC profile for your display automatically so the kded module only needed to have run once, please try:
A favour, my geeky friends:
gnome-settings-daemon and colord-kde create an ICC profile based on the color information found in the EDID blob. Sometimes the EDID data returns junk, and so the profile is also junk. This can do weird things to color managed applications. I’m trying to find a heuristic for when to automatically suppress the profile creation for bad EDIDs, such as the red primary being where blue belongs and that kind of thing. To do this, I need data. If you could run this command, I’d be very grateful.for f in $HOME/.local/share/icc/edid-* ; do curl -i -F upload=@$f http://www.hughski.com/profile-store.php done
This uploads the auto-EDID profile to my webserver. There is no way I can trace this data back to any particular user, and no identifiable data is stored in the profile other than the MD5 of the EDID blob. I’ll be sharing the processed data when I’ve got enough uploads. If you think that your EDID profile is wrong then I’d really appreciate you also emailing me with the “Location:” output from CURL, although this is completely optional. Thanks!
this is short news mostly for packagers, but well I want to thank José Manuel Santamaría Lema which did most (if not all) of the changes in this release, he found a few bugs and extended the debconf protocol support. I didn’t manage to release this soon as I’m way too busy. His work was made when I got arrested in Germany last year so I’m quite late here…
Next week I’ll probably do a new colord-kde release stay tunned!
Stop me if you can
If you followed my last post about sessionk you might be wondering “what the hell…”, well I like to code on stuff I’m in need, about sessionk I hope soon I give it an update now that I have more or less the whole picture.
So what’s up with networking? If you didn’t see the new plasma network manager go take a look, the greatest thing about it in my opinion is to have new blood around, so when I look at it I decided I should stop complaining and do something I wanted for a long time.
There’s nothing basically wrong with the NM plasmoids, it’s just that for the use case I’m interested in no plasmoid will ever fit it. The Mom’s use-case. If you have non nerd friends, wife, kids, parents that use Linux you know that they will someday call you. And when they do you need some sort of script to diagnose why isn’t “Facebook” opening. My script is like this:
- First click on the (hmm) icon that looks like (hmm) a dot with semi-curves next to the clock
- - There’s none.
- Ok then try to find one that is a square with a smaller square inside
- - There’s none.
- Maybe a square with a black empty square in?
- - Ah ok…
- - But it says the cable is not connected and I just plugged on the power
- Do you have an wifi right?
- - I have a Wifi…
As you can it’s hard to describe a plasmoid UI by phone, also the user might have removed the plasmoid from the tray or might be using plasma-netbook (I took half an hour trying to explaing where the K menu was till I figured out it was netbook edition…). Also the current Network Manager KCM only handle connections which means you must have a plasmoid if you want to manage network.
This is where System Settings comes in:
- The user can’t screw the interface
- The user can read labels like “networking”
- It has regular buttons (not flat things that are transparent and hard to distinguish)
- It offers the possibility of a more advanced user interface
With this new plasma-nm I felt it was just the right time for me to do this, more people active on looking at NM means people can fix your code and the other way too. Last week then I started this and at the same time I tried to give some Qt/C++ classes to Jayson Rowe and we immediately feel that some parts of the API was hard to use, like the IPv4 class was giving you an Int, when I saw this I had no idea how to convert that easily to an string, luckly there is a QHostAddress class that I never had used but it turns out I decided to make libnm-qt actually return a QHostAddress, and I started lot’s of changes on the lib, among them a change on how to handle pointers which has fixed some crashes here.
And here is the first screenshot
If you want to take a look it’s at git://anongit.kde.org/plasma-nm.git
A few years ago when I was attending at UDS-M, the Kubuntu guys and I tried to understand why KDE took so long to start, we used bootchart and started debugging startkde & friends, after disabling lots of kded modules and a bunch of stuff we couldn’t get rid of the ~10 seconds marker.
Time has passed and no matter how fast your computer is we still have to wait a lot for KDE to start, is KDE slow? Is Qt Slow? Is C++ slow? All these questionings kept coming to my mind, and well lots of friends ask why is KDE slow to start, after it has started it’s fast. So the other day I decided to try Unity to know if all the FUD were true or not, and I got stunned with a desktop bloated with python scripts and stuff it was much faster than KDE to start, it’s really fast to load, after a few hours trying to use it and not being able to even move the panel to the bottom I gave up and installed Kubuntu again…
I keep seeing Martin (KWin maintainer) blogging about the milliseconds he was able to get rid of, and make KWin startup faster, still I can’t notice it, it’s like there is a 10 seconds timer for KSplash to go away…
So I decided to dissemble it, and created a thing called “sessionk” (yeah like systemd but with a K), the idea behind sessionk was to debug and understand all phases of startup and find who is being slow. The very first code started KWin and plasma but KRunner couldn’t launch anything, so I had to go deeper and deeper till I think now I fully understand what happens today:
- ligthdm launches X, DBus, startkde
- startkde do some X calls (using cmd line tools) to set mouse pointer, RandR
- startkde starts kdeinit with an option to load KCMInit modules (which do pretty much the same as the above, but the code is in KDE modules) – takes around 2 seconds
- kdeinit also auto launches kded which loads KCModules that have phase= 0 or 1
- startkde then starts ksmserver which only returns after the session is closed so startkde script continues and quits killing the X session
- ksmserver now launches the window manager, normally KWin, here is were ksmserver shows it’s age (around 13 years), it has a 4 seconds timer to make sure KWin will have enough time to start so that when the auto start phases start it’s loaded.
- after those 4 seconds ksmserver starts autostart phase 0, 1, 2 at these phases apps like plasma, nepomuk, polkit-kde are loaded
- after all those phases are reportedly to be finished ksmserver restores the user session (if the settings say so) lauching the apps there were open when the user left.
In short our code works but it’s showing it’s age, surelly KWin starts much faster than that, actually it hardly takes more than one second to start.
What needs improvements? Lots of stuff, even without those 4 seconds timer plasma still takes quite a while to load, with Plasma 2 it’s said that it’s starting almost instantly, but you can get that behavior in trade of removing some widgets another killer is kded4, if I load all the modules before Plasma and KWin, it delays startup by around 2 seconds and makes plasma to freeze a lot…
A suggestion would be to improve ksmserver, so I took a look at the job, and really I don’t feel I can make “safe” changes in it, I mean it’s 13 years old code that WORKS! If I change anything and break it your session is gone, startkde will return and X is closed. A second reason is it’s current license BSD, and I refuse to code using this license (won’t get into the license merit), a third reason is that I want to sessionk to be small with the fewer deps it can have (like removing the shutdown dialog from the main process), the fourth and last reason is that I don’t think ksmserver is doing a good job on restoring sessions, for instance Chromiun always complain that it was closed abruptally, it could be fixed but due to the code license, age and well the code isn’t easy for me to understand I decided to push sessionk a bit further, I might not replace ksmserver/startkde but it will surely show other components of KDE that we have a large room for improvements.
What sessionk does:
- lightdm launches X, DBus, sessionk
- sessionk setups some stuff, including shortcuts (which also have OSX shortcuts due to my Mac keyboard), when the shortcuts are loaded it loads kdeinit because of kglobalaccel
- kdeinit auto loads kded and klauncher (kded is loaded without any modules)
- when klauncher is loaded sessionk starts KWin and Plasma
- sessionk listen for X events to know if a desktop window was created, then it tells KDED to load all modules
- after all kded modules are loaded autostart phases 0, 1, 2 are loaded (which loads, policykit-kde, nepomuk …)
- restore the apps that were open on last session (TODO)
Videos say more than a thousand words…
Looking for code? Be careful as it’s still work in progress and might crash your session…
EDIT : Forgot to thank Kai Uwe Broulik for that awesome plasma zoom in effect
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.
- 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).
- 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.
Thank you for using it and enjoy the new release
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:
UPDATE – I forgot to put the screen shot when you click and expand an update, to see it’s changelog (still misses some info):