Subscribe to Planet KDE feed
Planet KDE -
Updated: 1 hour 9 min ago

Last Weeks Activity in Elisa

Fri, 01/12/2018 - 17:40

Elisa is a music player designed to be simple and nice to use. It allows to browse music by album, artist or all tracks. You can build and play your own playlist. We aim to build a fluid interface that is easy to use.

We are preparing for the next alpha release when the following features will be done. Alexander is working on a metadata view for tracks. I am working on cleaning the different grid views into a generic one.

Diego Gangl did several modifications of the interface as part of the interactions with KDE VDG.

All in all, Elisa now looks like that:

Screenshot_20180112_174013Snapshot of album view including the changed application menu

The following things have been integrated in Elisa git repository:

  • Fix modification of files with DatabaseInterface::modifyTracksList by Matthieu Gallien ;
  • This patch increases the blur in the headerbar background, increases contrast
    between background and text, and brings the labels closer together by Diego Gangl ;
  • Tune appearance of all albums and all artists views by Matthieu Gallien ;
  • Fix wrong id reference in FilterBar by Matthieu Gallien ;
  • In all models, calls base class roleNames before adding new role names by Matthieu Gallien ;
  • Simplify the definition of custom roles in all models by Matthieu Gallien ;
  • Allow MusicArtist to be stored in a QVariant by Matthieu Gallien ;
  • Allow to enqueue artist in MediaPlayList by using MusicArtist objects by Matthieu Gallien ;
  • Change height of delegate in GridView by Matthieu Gallien ;
  • Fix a typo in the imported tracks notification by Diego Gangl ;
  • Make shadows centered and slightly larger. Fits better with other shadows in the
    desktop (like dolphin and widgets), and it also aligns with the new shadows for
    breeze (D9549) by Diego Gangl ;
  • Fixes key arrow navigation in list and gridviews and implements enter and return key actions for delegates by Alexander Stippich ;
  • Allow elisa to open any external files, scan them and enqueue them by Matthieu Gallien ;
  • Syncs the windows theme file with the current main theme file. Removes bundled icons for windows which are not needed as proven by ViewSelector.qml, but also tested on windows by Alexander Stippich ;
  • Make the delegates more appealing when using a dark theme also add hover animations while keeping the loader component by Alexander Stippich ;
  • Fix keyboard navigation for album artist view too by Alexander Stippich ;
  • Move all icon and image definitions to theme file and make some consistency fixes. In anticipation of a colorized version of the artist image, there are two definitions which currently hold the same icon. Also enables the display of a default cover in context view by Alexander Stippich ;
  • qml profiler shows a few percent of cpu time spent just for the creation for simple buttons for the delegates. cut this by loading on demand by Alexander Stippich ;
  • Try to find png files for covers if jpegs do not exist can probably be made a lot smarter than this, but kept it simple for now by Alexander Stippich ;
  • Try to fix build (as seen on by Matthieu Gallien ;
  • Re-order menu items to fit better with the order used in other KDE applications by Diego Gangl.


PackageKitQt 1.0.0 and 0.10.0 released!

Fri, 01/12/2018 - 14:07

Happy new year every one!

PackageKitQt is a Qt Library to interface with PackageKit

It’s been a while that I don’t do a proper PackageKitQt release, mostly because I’m focusing on other projects, but PackageKit API itself isn’t evolving as fast as it was, so updating stuff is quite easy.

It haven’t seems a proper release in a while, it got several patches from other contributors, including the Qt5 port, so 0.10.0 is for that, the 1.0.0 release is to match PackageKit 1.0.0 API, while 0.10.0 works with that some signals and methods where removed from PackageKit which where useless in PackageKitQt.

Add to 1.0.0 release the complete Offline updates interface some API cleanups, missing enums and a performance improvement on parsing package ids.

Due the complexity and effort used to roll a release, from now on releases will be done with tags on GitHub, so packagers stays tuned ��

Ceph Day Germany 2018

Fri, 01/12/2018 - 12:24

I'm glad to annouce that there will be a Ceph Day on the 7th of February 2018 in Darmstadt. Deutsche Telekom will host the event. The day will start at 08:30 with registration and end around 17:45 with an one hour networking reception. We have already several very interesting presentations from SUSE, SAP, CERN,, Deutsche Telekom AG and Red Hat on the agenda and more to come. If you have an interesting  15-45 min presentation about Ceph, please contact me to discuss if we can add it to the agenda. Presentation language should be German or English.
I would like to thank our current sponsors SUSE and Deutsche Telekom and the Ceph Community  for the support. We are still in  negotiation with potential sponsors and will hopefully announce them soon.
The agenda will be available here soon. You can register through this link. Stay tuned for updates! See you in Darmstadt!

New Stable Release: Krita 3.3.3

Fri, 01/12/2018 - 11:01

Today we’re releasing Krita 3.3.3. This will probably be the last stable release in the Krita 3 series. This release contains several bug fixes and one very important change for Windows users:

  • The Direct3d/Angle renderer is now the default for Intel users. Recent updates to the Intel display drivers have broken Krita on many more systems than before, so it’s better that everyone gets this workaround by default. If you experience decreased performance, you can always try to enable OpenGL again.

Other fixes and improvements include:

  • Fix an issue where it would not be possible to select certain blending modes when the current layer is grayscale but the image is rgb.
  • Set the OS and platform when reporting a bug from within Krita on Windows.
  • Make it possible to enter color values as percentage in the specific color selector
  • Add OpenGL warnings and make ANGLE default on Intel GPUs
  • Add an Invert button to the levels filter
  • Implement loading and saving of styles for group layers to and from PSD
  • Fix the erase mode not showing correctly when returning to the brush tool
  • Save the visibility of individual assistants in .kra files
  • Add an option to draw ruler tips as a power of 2
  • Disable autoscroll on move and transform tools.
  • Improve handling of native mouse events when using a pen and the Windows Ink API
  • Fix the focal point for the pinch zoom gesture
  • Fix loading netpbm files with comment.
Download Windows

Note for Windows users: if you encounter crashes, please follow these instructions to use the debug symbols so we can figure out where Krita crashes.


(If, for some reason, Firefox thinks it needs to load this as text: to download, right-click on the link.)

When it is updated, you can also use the Krita Lime PPA to install Krita 3.3.3 on Ubuntu and derivatives. We are working on an updated snap.


Note: the gmic-qt and pdf plugins are not available on OSX.

Source code md5sums

For all downloads:


The Linux appimage and the source tarball are signed. You can retrieve the public key over https here:
. The signatures are here.

Support Krita

Krita is a free and open source project. Please consider supporting the project with donations or by buying training videos or the artbook! With your support, we can keep the core team working on Krita full-time.

Seeding new ISOs the easy zsync way

Fri, 01/12/2018 - 07:26

Kubuntu recently had to pull our 17.10 ISOs because of the so-called lenovo bug. Now that this bug is fixed, the ISOs have been respun, and so now it's time to begin to reseed the torrents.

To speed up the process, I wanted to zsync to the original ISOs before getting the new torrent files. Simon kindly told me the easy way to do this - cd to the directory where the ISOs live, which in my case is 

cd /media/valorie/Data/ISOs/


cp kubuntu-17.10{,.1}-desktop-amd64.iso && zsync

Where did I get the link to zsync? At All ISOs are found at cdimage, just as all torrents are found at

The final step is to download those torrent files (pro-tip: use control F) and tell Ktorrent to seed them all! I seed all the supported Ubuntu releases. The more people do this, the faster torrents are for everyone. If you have the bandwidth, go for it!

This week in Usability and Productivity

Fri, 01/12/2018 - 03:04

I’d like to highlight some fixes and features that landed in the past week for our Usability and Productivity initiative:

  • Dragging a Firefox tab to the desktop now detaches it properly (KDE bug 337711)
  • Right-clicking on Discover’s icon exposes a new action that allows you to go straight to the Updates page (KDE Phabricator revision D9637)
  • You can now hide the “Comment” field in Dolphin’s Information Panel (KDE bug 365620)
  • Dolphin’s Properties window now has a tab that shows the same file metadata that the Information Panel does, for people who would prefer to access the information that way (KDE bug 384194)
  • Okular’s dialog box for when a PDF wants to be opened full screen is now presented more naturally (KDE bug 388511)
  • Okular can now Print .djvu files (KDE bug 388514)
  • Discover now de-duplicates categories from Flatpak (KDE bug 388313)
  • Discover no longer lets you scroll beyond the boundaries with the PageUp/PageDown keys (KDE bug 388745)
  • Discover app lists are now more compact (KDE Phabricator revision D9833)

These improvements were landed by KDE Developers Kai Uwe Broulik, Albert Astals Cid, Aleix Pol, Michael Heidelbach, and myself. And that’s not all; the entire KDE community has been busy landing many more bugfixes and features too–more than I can keep track of!

I want to especially focus on the last Discover change I mentioned above. After my last post about Discover, we got a lot of user feedback that people wanted greater density and to be able to see more apps at once. We’ve executed on a part of that, and this is now what Discover looks like if you make the window narrow:

I bring this up to highlight that we really do listen to users. Your feedback matters and we hear it! If you enjoy the results of our efforts, please consider becoming a contributor yourself or donating to KDE! In particular, we would love more contributors for our Usability and Productivity initiative. If you’re interested, please feel free to work on any of these bugs. Here are some that should be relatively easy. Happy coding!

KStars 2.9.1 is off to a fantastic start in 2018!

Thu, 01/11/2018 - 15:36
We're kicking off 2018 with a new fantastic release of KStars for Windows & MacOS. Linux users should wait a few more days to get the release in the official PPA due to Canonical's Launchpad downtime because of the Meltdown and Spectre CPU vulnerabilities discovered recently.

KStars 2.9.1 aka "Lancaster" release is primarily a bugfix release, but it brings with it as well several new features and improvements to existing technologies.
Over the holidays, Robert Lancaster made significant improvements to KStars and this release is named in his honor. Thank you Robert for your awesome contributions to KStars and Open Astronomy community!
MacOS users gained a few additional drivers with this release including Apogee, QHY, and Meade DSI support!Set Park PositionSetting a custom parking position used to involve going to INDI Control Panel and tinkering with a few settings before it is saved and active. With KStars 2.9.1, it is now a very accessible action. Simply click anywhere on the sky map and select your desired custom parking position.

The mount shall slew normally to the desired location and save it as the parking position. It will NOT park the mount, it will just save that position as the desired position. To park the mount, use the parking/unparking controls from the toolbar or from the sky map as you normally would.

Additional PHD 2 Support
Robert Lancaster built upon his previous changes to PHD2 to add a PHD2 command request list so that KStars can keep track of what it has asked PHD2 to do. This allowed the addition of several additional commands that could be used to control PHD2. Now, users can use the Ekos Guide Module to change the PHD2 exposure time, change the DEC guide settings, and get information about the guiding pulses sent to the mount. Also, after changing the Connect/Disconnect code, the PHD2 connection seems to be more reliable.

Dither support was improved by using the timeout variable in the Guide options to control how long KStars will wait after issuing a dither command before continuing. And in a related fix, the Guide module will use the setting in the guide options “Dither Failure Aborts Autoguide” to control whether a dither issue will cause the entire sequence to abort. The last two changes were due to the fact that if PHD2 did not send back a response after dithering, KStars would not complete the sequence and if PHD2 reported a guide error, it would abort the entire sequence regardless of the setting in the guide options. This should all now be fixed. Also he added a PHD2 Lost Lock Timer so that if it loses track of the guide star but then regains it within 5 seconds, then it won’t abort guiding.
Drift Graphics Updates
Robert Lancaster made several improvements to the graphs in the Guide Module. These changes will work whether the user is using PHD2 or the internal guider. First, the mount corrections were added to the Drift Graphics plot so that the user could see not just the RA and DEC error, but also the corrections that the mount is making in each axis.
Since this graph naturally has a different scale than the guide errors, a separate axis was added along with a slider to control its scale independently of the other axis. A set of controls was added at the bottom left so that each component could be added or removed from the graph independently. A slider was added so that the user could scroll through the guide history, or click the “Max” checkbox to lock the graph onto the latest point so it will autoscroll.
Also buttons were added for autoscaling the graphs, or exporting the guide data to a CSV file, clearing all the guide data, and for scaling the target in the Drift Plot. Finally, a label was added to the guide graph every time that a dither occurred so the user knows guiding was not bad at those points.
New 3D Star Profile and Data Visualization Tool
Robert Lancaster created a new KStars tool based on some QT Examples that would plot the Pixel Data shown in any of the KStars Image Views so that the user can inspect the data in a new manner. This is particularly useful for astrophotographers who want to visualize the profile of a star they are considering focusing or guiding on, for scientists who want to examine a cross section of their data to understand the relative brightness of different objects in the image, and for imagers who want to visually see what is going on in their data collection in a new way.
Note that in order to use this feature, KStars must be built with the Data Visualization module installed. For the Mac OS X DMG, users can start using this function right away. We are working to get it into the Windows exe and Linux PPA very soon so that these users can also use this function right out of the box. But for now, Linux users would have to build from source with Data Visualizations installed to have these features.

To use the new feature, the user needs to select the View Star Profile Icon in one of the Ekos Module Views, or in the Fitsviewer. Then, the region selected in the green tracking box will show up in the 3D graph as shown above. The user will then have one of the following toolbars at the bottom.

At the far left, the sample size combo box will let the user select the size of the image crop shown in the graph. This option is only available in the Summary Screen, the Align Module, and the Fitsviewer. The second combo box lets the user control whether they are selecting an individual item, or a row, or a column of pixels.
The slice button will be enabled if the user selects “Row” or “Column.” It will put the graph in slice mode so that the user can see a cross section view of the image. Third, is a check box that will open up two sliders that will let the user drag the slider to change the selection.
This is extremely useful in the slide mode to change the selected point and to move the cross section around the graph. It is also useful in the normal view when in “Explore Mode” so that the user can zoom around the image examining the pixels. 

Then the user has the “Zoom To” combo box, which the user can use to zoom the graph to different preset locations. Next is the combo box that lets the user select the color scheme of the graph. Then are the HFR and the Peak checkboxes, which will both turn on the HFR and Peak labels on each found star in the image, but will also display one of them at the bottom of the screen. And finally comes the Scaling checkbox, which enables the Scaling Side Panel. In that panel are three sliders, one to control the minimum value displayed on the graph or “black point”, one to control the maximum value displayed in the graph or the “white point,” and a third that is disabled by default that lets the user control the cutoff value for data displayed on the graph.
This third slider is very useful to get really big peaks out of the way so you can study the finer details in the image. There is a checkbox at the top to enable/disable the cutoff slider.

And finally at the bottom of the sliders is the “Auto scale” button. This will auto scale the sliders as you sample different areas in the image. It will not only optimize the display of the data, but will also affect the minimum and maximum points of the slider.

If you disable auto scale, then as you sample different parts of the image, they will be displayed at the same scale. A particularly useful way to use this is to select an area of your image using auto scale, tweak the min, max, and cutoff sliders to your liking, and then turn off the auto scale feature to explore other areas of the graph.

Krita 4.0 Beta 1

Thu, 01/11/2018 - 12:14

We’ve officially gone into String Freeze mode now! That’s developer speak for “No New Features, Honest”. Everything that’s going into Krita 4.0 now is in, and the only thing left to do is fixing bugs and refining stuff.

Given how much has changed between Krita 3 and Krita 4, that’s an important part of the job! Let us here repeat a very serious warning.


This doubles for files that contain text. Text in krita 3 is based on the ODT standard, text in Krita 4 is implemented using SVG. This beta is the first release that contains the new text tool. Here’s the low-down on the new text tool:

  • It’s not the text tool we wanted to create, and you could consider it as a stop-gap measure. Because of all the tax office worries, we simply didn’t have the time to create the fully-capable opentype-integrated text tool that we wanted to do.
  • But we couldn’t keep the old text tools either: they were broken, and based on ODT. We needed to have something that could replace those tools and that would would be functional enough for the simplest of use-cases, like text balloons in a comic.
  • So, what we’ve got is simple, it doesn’t do on-canvas editing. There’s no vertical text for Chinese or Japanese yet, there’s no OpenType tweaking, there’s no fine typographic control.
  • The user interface is not final yet, and there are quite a few things that need polishing and fixing, and that we’re working on, but Krita 4’s text tool will be mostly what we’ve got now.
Apart from that…

This beta contains pretty much everything… We started working on some of these features, like the export feedback in 2016. Here’s a short list:

  • SVG vector system, with improved tools and workflow
  • New text tool
  • Python scripting
  • SVG import/export
  • Improved palette docker
  • Bigger brush sizes
  • Improved brush editor
  • Refactored saving and exporting: saving happens in the background, and export shows warnings when your file contains features that cannot be saved to a given file format
  • We’re updating the set of default brush presets
  • A fast colorize brush
  • The default pixel brush is much faster on systems with many cores
  • Lots of user interface polish

And there’s much more, but please download the builds, or build Krita and see for yourself!

Platform Notes Windows Linux
  • The AppImage does not contain support for audio in animations
  • The AppImage does not have Python scripting
  • The AppImage does include the latest gmic-qt release
  • The app bundle does not contain gmic-qt
  • The app bundle does not contain Python scripting
  • The app bundle does not have support for importing PDF files
Download Windows

Note for Windows users: if you encounter crashes, please follow these instructions to use the debug symbols so we can figure out where Krita crashes.


(If, for some reason, Firefox thinks it needs to load this as text: to download, right-click on the link.)

When it is updated, you can also use the Krita Lime PPA to install Krita 4.0 beta 1 on Ubuntu and derivatives.


Note: the gmic-qt and pdf plugins are not available on OSX.

Source code md5sums

For all downloads:


The Linux appimage and the source tarball are signed. You can retrieve the public key over https here:
. The signatures are here.

Support Krita

Krita is a free and open source project. Please consider supporting the project with donations or by buying training videos or the artbook! With your support, we can keep the core team working on Krita full-time.

Nextcloud Talk is here

Thu, 01/11/2018 - 11:01

Today is a big day. The Nextcloud community is launching a new product and solution called Nextcloud Talk. It’s a full audio/video/chat communication solution which is self hosted, open source and super easy to use and run. This is the result of over 1.5 years of planing and development.

For a long time it was clear to me that the next step for a file sync and share solution like Nextcloud is to have communication and collaboration features build into the same platform. You want to have a group chat with the people you have a group file share with. You want to have a video call with the people while you are collaborative editing a document. You want to call a person directly from within Nextcloud to collaborate and discuss a shared file, a calendar invite, an email or anything else. And you want to do this using the same login, the same contacts and the same server infrastructure and webinterface.

So this is why we announced, at the very beginning of Nextcloud, that we will integrate the Spreed.ME WebRTC solution into Nextcloud. And this is what we did. But it became clear that whats really needed is something that is fully integrated into Nextcloud, easy to run and has more features. So we did a full rewrite the last 1.5 years. This is the result.

Nextcloud Talk can, with one click, be installed on ever Nextcloud server. It contains a group chat feature so that people and teams can communicate and collaborate easily. It also has WebRTC video/voice call features including screen-sharing. This can be used for one on one calls, web-meetings or even full webinars. This works in the Web UI but the Nextxloud community also developed completely new Android and iOS apps so it works great on mobile too. Thanks to push notifications, you can actually call someone directly on the phone via Nextcloud or a different phone. So this is essentially a fully open source, self hosted, phone system integrated into Nextcloud. Meeting rooms can be public or private and invites can be sent via the Nextcloud Calendar. All calls are done peer to peer and end to end encrypted.

So what are the differences with WhatsApp Calls, Threema, Signal Calls or the Facebook Messenger?
All parts of Nextcloud Talk are fully Open Source and it is self hosted. So the signalling of the calls are done by your own Nextcloud server. This is unique. All the other mentioned solutions might be encrypted, which is hard to check if the source-code is not open, but they all use one central signalling server. So the people who run the service know all the metadata. Who is calling whom, when, how long and from where. This is not the case with Nextcloud Talk. Mo metadata is leaked. Another benefit is the full integration into all the other file sharing, communication, groupware and collaboration features of Nextcloud.

So when is it available? The Version 1.0 is available today. The Nextcloud App can be installed with one click from within Nextcloud. But you need the latest Nextcloud 13 beta server for now. The Android and iOS apps are available in the Google and Apple App Stores for free. This is only the first step of course. So if you want to give feedback and contribute then collaborate with the rest of the Nextcloud community.

More information can be found here and here







What are the plans for the future?
There are still parts missing that are planed for future version. We want to expose the Chat feature via an XMPP compatible API so that third party Chat Apps can talk to a Nextcloud Talk server. And we will also integrate chat into our mobile apps. I hope that Desktop chat apps also integrate this natively. for example on KDE and GNOME. This should be relatively easy because of the standard XMPP BOSH protocol. And the last important feature is call federation so that you can call people on different Nextcloud Talk servers.

If you want to contribute then please join us here on github:

Thanks a lot to everyone who made this happen. I’m proud that we have such a welcoming, creative and open atmosphere in the Nextcloud community so that such innovative new ideas can grow.

Qt 3D Studio Remote Deployment on Android Devices

Thu, 01/11/2018 - 06:55

This blog post will get you started with Qt 3D Studio remote deployment to Qt 3D Viewer on Android devices. This feature enables making changes to your Qt 3D Studio presentation on your computer and seeing the changes live on the target device.

Qt 3D Studio Editor & Viewer with the remote connection feature

Qt 3D Studio Editor & Viewer with the remote connection feature

Setting Up the Target Device

To set up the target device for remote deployment, follow the steps below.

  1. Download Qt 3D Viewer from Google Play and install it on the target device.
  2. Run the Viewer.
  3. From the file menu, select File > Connect.
  4. Enter desired port or use default port, press OK.
  5. Connection information, IP address and port, will be displayed in the Viewer.
Connecting to the Target Device

To connect to the target device from Qt 3D Studio, follow the steps below.

  1. From the file menu, select File > Connect to Device.
  2. Enter the connection information displaying in the Viewer on the target device, then press OK.
  3. You are now connected. The Viewer on the target device should display Remote Connected.
Preview Presentation

To preview the presentation on the target device, press the Preview button in the Studio toolbar. After making changes to your presentation, press the Preview button again to see the changes on the target device.


The Preview button in Studio

Disconnecting from the Target Device

You can disconnect from the target device either by selecting File > Connect to Device from the Studio file menu, or by selecting File > Connect from the Viewer file menu.

The post Qt 3D Studio Remote Deployment on Android Devices appeared first on Qt Blog.

New in Qt 5.10: QThread::create

Wed, 01/10/2018 - 14:37

If you are using Qt and you need to run some code in a separate thread, chances are that you are using QThread for the job. QThread is a very old class in Qt, making its first appearance in Qt 2.2, released on the 22nd of September 2000. Its responsibility is to start a new thread, and let you execute code in that thread.

There are two main ways of running code in a separate thread using QThread:

  1. subclassing QThread and overriding run();
  2. creating a "worker object" (some QObject subclass) and connecting it to QThread signals.

Please refer to my Qt World Summit 2017 presentation (video) for more details about how to use these two functions. There are also lots of other documentation and blog posts available on the internet, discussing the pros and the cons of the two approaches.

Enter QThread::create()

In Qt 5.10 I have added another way to run some code in a new thread. Inspired by C++11's std::thread, I have introduced QThread::create, a factory function that creates a new QThread which will run a user-provided callable:

[sourcecode lang="cpp"]
QThread *thread = QThread::create([]{ runSlowCode(); });

The advantage of this approach is that it avoids creating a new QThread subclass manually for the sole purpose to override its run() member function and run some code.

Unlike std::thread, however, the newly-created thread is not automatically launched; the user is expected to start it with an explicit call to start(). This allows users to do some extra work before starting the thread, for instance, connect to its signals, set the name of the thread, or change its priority, as demonstrated by this snippet:

[sourcecode lang="cpp"]
QThread *thread = QThread::create(myFunction);

thread->setObjectName("WorkerThread"); // name to appear in ps, task manager, etc.
connect(thread, &QThread::started, gui, &Gui::threadHasStarted);


The user acquires ownership of the newly-created QThread object.

With a C++17 capable compiler it is also possible to pass extra arguments to QThread::create(): these arguments will be then passed to the function in the new thread, using the same semantics as std::thread's constructor. For instance:

[sourcecode lang="cpp"]
QThread *thread = QThread::create(myFunction, arg1, arg2);
// extra setup...
thread->start(); // calls myFunction in another thread, passing arg1 and arg2

That's it! I hope this will be useful to you. However, the API of QThread::create() is only half of the story. If you want to know more about what this apparently little patch meant for Qt, keep reading.

Implementation notes

In afterthought, the implementation of QThread::create is very simple. However, when doing the necessary research, I found a small oddity with the C++ Standard Library that deserves some attention.

The most important constraint I imposed on myself when writing QThread::create was to be as compatible as possible with std::thread's constructor semantics. If one reads the relevant section in the Standard (f.i. here), one can see that the actual semantics of the invocation are quite complex. The extra arguments to the function undergo a transformation (specified as DECAY_COPY), they're stored "somewhere", and finally the functor is invoked using the INVOKE function. Both DECAY_COPY and INVOKE are not actual Standard Library functions, but pseudo-functions formally defined elsewhere in the C++ Standard.

An oddity that I found during my research is that the C++11 Standard does not provide these building blocks to end-users (and by that I also include developers of other C++ libraries, like Qt). A way to use INVOKE for user code got added in C++17 with the std::invoke function; however, there is simply nothing ready-made that applies the DECAY_COPY transformation, and stores the callable and its decayed/copied arguments, and possibly even invokes the function with the right semantics.

The only workaround that I have found was to use a higher-level thread primitive provided by the Standard Library: std::async. std::async has the same invocation semantics as std::thread's constructor; it returns a std::future that we can use to examine the result.

We can force std::async to not spawn an additional thread and to run the callable only when asked to do so, by specifying the std::launch::deferred launch policy. std::launch::deferred allows a sort of lazy evaluation: the callable is invoked only when one tries to access the result (via the returned std::future object):

[sourcecode lang="cpp"]
auto future = std::async(std::launch::deferred, function, arg1, arg2);

// some time later, possibly in another thread:
future.get(); // calls the function with the arguments

This is exactly how QThread::create() is implemented: it calls std::async on the user-provided function and its arguments, and stores the returned std::future in an instance of an internal QThread subclass. This subclass overrides run(), which in turn simply calls get() on the future (see here and here). This machinery isn't zero-overhead, as the combination of std::async and std::future does way more than what we need, but it at least shifts the burden of the implementation from Qt onto the Standard Library.

The extra plumbing needed is the aforementioned std::invoke, which however is only available in C++17. Under a C++17 compiler, QThread::create() takes a callable and its arguments, whereas under a pre-C++17 compiler, QThread::create() only supports a callable (and no further arguments). In practice this isn't a big limitation, because one can always use a lambda to wrap the callable and its arguments, and then pass the lambda as the only argument.

Qt and the Standard Library ABI

The addition of QThread::create() to Qt was also possible because of a major policy change in Qt.

A little bit of history: up to and including version 4, Qt did not require the presence of a Standard Library implementation on the system (the configure script had a -no-stl option). From version 5.0 Qt started to require a working Standard Library implementation: the configure switch was dropped, and Qt code dealing with Standard Library types was compiled unconditionally. Qt itself started using Standard Library types (notably, containers) in its own implementation, mostly where such types provided more features or performance when compared to Qt's own versions.

However, Qt has never exposed Standard Library types from its public ABI: all functions taking or returning Standard Library types had to be inline (example). The main reason for doing so was to make the same build of Qt compatible across different Standard Library implementations (e.g. libc++ and stdlibc++, or two ABI-incompatible builds of the same implementation).

After lots of debate, this has finally changed in Qt 5.10: Qt is now allowed to expose Standard Library types from its public ABI. Users wishing to mix-and-match Standard Library implementations need to recompile Qt. (In other words, we've made this Someone Else's Problem).

What does this have to do with QThread::create()? As I explained before, the current implementation uses std::async under the hood. The std::future returned by std::async is then passed to an exported, out-of-line Qt function, which constructs and returns the result -- the QThread instance that runs the user-supplied function. (The reason for doing such a thing is because QThread is an exported polymorphic class. A subclass defined entirely inline would generate copies of its vtable / type_info in all the translation units using it, and this may cause problems.) Therefore, now std::future is part of Qt's own ABI; and I'm very glad I didn't have to re-implement it! continue reading

The post New in Qt 5.10: QThread::create appeared first on KDAB.

Season Of KDE

Wed, 01/10/2018 - 10:34


Hi and welcome to my blog! My name is Amit and with this blog I aim to keep you updated with my work at GCompris within Season of KDE 2018. After contributing for several months at GCompris, I applied for SoK 2018 and finally my proposal got selected among top 10 participants. I am very happy with the results I have got.

I will post here news, accomplishments and updates regarding my work. You can expect at least one post every two weeks and if anything comes up, I will post more often.

Polishing Discover Software Center

Mon, 01/08/2018 - 22:13

KDE Discover Software Center is a key element of our Usability and Productivity initiative because it encompasses the basic experience of discovering, installing, and removing software. Most regular people don’t want to use the command line to do this, and for them, we have Discover.

In the last few weeks, lead developer Aleix Pol has put an enormous amount of work into Discover, fixing bugs and implementing features:

  • Add Flathub button now disappears immediately after adding Flathub (KDE Bug 388294)
  • “Update All” button is now always visible on Updates page even after you scroll down (KDE Bug 384351)
  • Improved search on Updates page (KDE Bug 384463)
  • Fixed a large number of crashes (KDE Bugs 384351, 385040, 378339, and 383413)
  • Major overhaul of the Settings page UI (KDE Bug 388153)
  • Screenshot pop-up now allows navigation (including via keyboard arrow keys) between multiple images (KDE Bugs 387816, 387879, and 387858)
  • Screenshot pop-up margins now always match image size and dimensions (KDE Bug 387819)
  • App description text no longer cut off when window is resized to be very narrow (KDE Bug 388104)

I even got a few patches of my own accepted:

Here are some screenshots of how Discover looks today:

Browse page:

App page:

Settings page:

Installed apps page:

Updates page:

Eagle-eyed readers will notice a few bugs in these screenshots. Those are tracked by the following:

  • Discover’s sidebar is too wide (KDE Bug 385992)
  • Discover sometimes doesn’t de-duplicate categories from Flatpak backend (KDE Bug 388313)
  • Discover’s package update information displays identical information under “Reason:” and “Change Log:” headers on Debian and Ubuntu-based distros (KDE Bug 387041)
  • Dolphin shows the icon for Nautilus rather than its own in Ubuntu-based distros (KDE Bug 388702 for Neon; KDE Phabricator Maniphest Ticket T7717 for Kubuntu)

We’re aware of these issues and are actively working to investigate and resolve them. If you use Discover and find any other issues, please feel free to file a bug.

As always, thank you all for your support. If this work excites you or you find Discover useful, consider becoming a contributor yourself or donating to KDE!

Fancy Terminal Prompt

Mon, 01/08/2018 - 20:55

By default, the terminal looks as follows on my Linux distribution:

However, if you are working a lot on the terminal, there are a lot of scripts and tricks available in the net that improve the information displayed in the terminal in many ways. For instance, since many many years, I have the following at the end of my ~/.bashrc:

# use a fancy prompt PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]" PS1="$PS1 \`if [ \$? = 0 ]; then echo -e '\[\033[01;32m\]:-)';" PS1="$PS1 else echo -e '\[\033[01;31m\]:-(' \$?; fi\`\[\033[00m\]" PS1="$PS1 \$(__git_ps1 \"(%s)\") \$ "

Once you open a new terminal, then the appearance is as follows:

As you can see, now I have nice colors: The hostname is green, the folder is blue, the return value of the last executed command is a green �� in case of success (exit code = 0), and a red �� in case of errors (exit code != 0). In addition, the last part shows the current git branch (master). Showing the git branch is very useful especially if you are using arc a lot and work with many branches.

I am sure there are many more cool additions to the terminal. If you have some nice additions, please share – maybe also as a new blog?

Qt 5.9 on FreeBSD

Mon, 01/08/2018 - 12:11

Tobias and Raphael have spent the past month or so hammering on the Qt 5.9 branch, which has (finally!) landed in the official FreeBSD ports tree. This brings FreeBSD back up-to-date with current Qt releases and, more importantly, up-to-date with the Qt release KDE software is increasingly expecting. With Qt 5.9, the Elisa music player works, for instance (where it has run-time errors with Qt 5.7, even if it compiles). The KDE-FreeBSD CI system has had Qt 5.9 for some time already, but that was hand-compiled and jimmied into the system, rather than being a “proper” ports build.

The new Qt version uses a new build system, which is one of the things that really slowed us down from a packaging perspective. Some modules have been reshuffled in the process. Some applications depending on Qt internal-private headers have been fixed along the way. The Telegram desktop client continues to be a pain in the butt that way.

Following on from Qt 5.9 there has been some work in getting ready for Clang 6 support; in general the KDE and Qt stack is clean and modern C++, so it’s more infrastructural tweaks than fixing code. Outside of our silo, I still see lots of wonky C++ code being fixed and plenty of confusion between pointers and integers and strings and chars and .. ugh. Speraking of ugh, I’m still planning to clean up Qt4 on ARM aarch64 for FreeBSD; this boils down to stealing suitable qatomic implementations from Arch Linux.

For regular users of Qt applications on FreeBSD, there should be few to no changes required outside the regular upgrade cycle. For KDE Plasma users, note that development of the ports has changed branches; as we get closer to actually landing modern KDE bits, things have been renamed and reshuffled and mulled over so often that the old plasma5 branch wasn’t really right anymore. The kde5-import branch is where it’s at nowadays, and the instructions are the same: the x11/kde5 metaport will give you all the KDE Frameworks 5, KDE Plasma Desktop and modern KDE Applications you need.

Interview with Emily K. Mell

Mon, 01/08/2018 - 08:00
Could you tell us something about yourself?

I’m a 30-year-old housewife and mother living in New Mexico in the United States. I’ve always had an interest in becoming a storyteller, and visual art is the most appealing way for me to do it.

Do you paint professionally, as a hobby artist, or both?

Right now I would call myself a hobbyist, as I’ve never published anything professionally. I hope for that to change. What I need is to somehow find the time and energy to crank out images at high volume!

What genre(s) do you work in?

I’ve always been interested primarily in fantasy, although much of my work has consisted of humorous cartoons. Humor creeps into whatever I try to make whether or not I intend for it to be there. My goal for the next decade is to begin a serial, consistent fantasy world as portrayed through cartoons.

Whose work inspires you most — who are your role models as an artist?

My first and largest influences are the old-fashioned Disney animated films from the 20th century, as exemplified by the work of artists like Bill Tytla. I also consider cartoonists and illustrators like Bill Watterson, Maurice Sendak, and Hal Foster to be very influential on my style. Fantasy illustrators like Frank Frazetta inspire me on an emotional level.

How and when did you get to try digital painting for the first time?

I began using digital tools purely as a form of practice a few years ago. To me it was very casual; I was figure drawing and making fan art referencing in-jokes from a favorite podcast of mine called “We Hate Movies.” I didn’t intend to pursue it seriously, but found myself returning to it more and more often.

What makes you choose digital over traditional painting?

Traditional painting definitely produces the most beautiful results, but it’s a pain in the neck. Not only does it take up more time and physical space, it’s far more expensive and wasteful. I don’t like the “digital look,” and it will take a lot of practice to minimize that. However, I believe that real artists should never blame their tools for any failure.

I’d almost always drawn pictures with only a pencil before, but digital painting allows me to ink and color my images much more easily. It also opens up options for experimentation when I can simply recolor anything I don’t like. The hardest part has been trying to learn the kind of control with a stylus that I have with my own hand.

How did you find out about Krita?

My husband is an engineer who works frequently with Linux and is familiar with the open-source world. He suggested Krita to me when I was looking for a digital painting program not called Photoshop.

What was your first impression?

Krita was the most professional-looking Photoshop alternative that I’d come across. It also played nicely with my stylus and tablet in a way that some other software didn’t. Krita did have some bugginess and crashing, though.

What do you love about Krita?

That it’s free! I think it’s remarkable that the open-source community could create something of this quality without a money spigot. Given Adobe’s outrageous pricing scheme for Photoshop, you’d think that software like this couldn’t exist anywhere else. Krita is a much better option.

What do you think needs improvement in Krita? Is there anything that really annoys you?

Bugs and crashes come with the territory in open-source projects, but those are likely to be reduced over time. The real problem is how inaccessible Krita is to lay people. When I was looking to download the program for the first time, I had to follow a completely unintuitive chain of links that, to somebody like me, appeared to be made up of Seussian nonsense words (AppImages for cats? What’s a Gentoo? Why is it bloody?). Idiots like myself just want a giant button that says “GET THE LATEST STABLE VERSION OF KRITA HERE!” The way things are now, the less technically literate will give up on trying Krita before they have even started.

What sets Krita apart from the other tools that you use?

Krita has a great community of support that will ensure that it gets better year by year. It has the right priorities, i.e. essential tools like layers and brushes get implemented before more obscure features. Other than occasional crashes, I can just jump in and use it.

If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

I made this page in Krita in order to see whether I could use it for a webcomic I plan on creating. The experiment was a success, and I believe that my skills will continue to grow. This proves that I can use Krita to tell the kinds of stories that I have plans for.

What techniques and brushes did you use in it?

I mostly use a basic round brush that I resize accordingly. Line brushes are convenient for separating the panels. I think that skills are more important than tools, and I want to train myself to use the simplest tools that I can.

Where can people see more of your work?

I’m shy about publishing, but I realize that this is something I need to change about myself. Once I’ve worked up a sizable volume of content, which should be within the next year, I will be posting a regular webcomic called The Unknown Engine.

Anything else you’d like to share?

I’m grateful that the Internet and the open-source movement affords artists like me the opportunity to create and publish in new ways. I often think about Bill Watterson’s long fight with his syndicates, and how different it would have been for him if he was able to publish Calvin and Hobbes on the Internet under his own control. I’m nowhere near his level of course, but I want to improve my own skills until I get there.

Beginning 2018

Sun, 01/07/2018 - 22:55

2017 began with the once-in-a-lifetime trip to India to speak at That was amazing enough, but the trip to a local village, and visiting the Kaziranga National Park were too amazing for words.

Literal highlight of last year were the eclipse and trip to see it with my son Thomas, and Christian and Hailey's wedding, and the trip to participate with my daughter Anne, while also spending some time with son Paul, his wife Tara and my grandson Oscar. This summer I was able to spend a few days in Brooklyn with Colin and Rory as well on my way to Akademy. So 2017 was definitely worth living through!

This is reality, and we can only see it during a total eclipse
2018 began wonderfully at the cabin. I'm looking forward to 2018 for a lot of reasons.
First, I'm so happy that soon Kubuntu will again be distributing 17.10 images next week. Right now we're in testing in preparation for that; pop into IRC if you'd like to help with the testing (#kubuntu-devel). next week!

Lubuntu has a nice write-up of the issues and testing procedures:

The other serious problems with meltdown and spectre are being handled by the Ubuntu kernel team and those updates will be rolled out as soon as testing is complete. Scary times when dealing with such a fundamental flaw in the design of our computers!

Second, in KDE we're beginning to ramp up for Google Summer of Code. Mentors are preparing the ideas page on the wiki, and Bhushan has started the organization application process. If you want to mentor or help us administer the program this year, now is the time to get in gear!

At Renton PFLAG we had our first support meeting of the year, and it was small but awesome! Our little group has had some tough times in the past, but I see us growing and thriving in this next year.

Finally, my local genealogy society is doing some great things, and I'm so happy to be involved and helping out again. My own searching is going well too. As I find more supporting evidence to the lives of my ancestors and their families, I feel my own place in the cosmos more deeply and my connection to history more strongly. I wish I could link to our website, but Rootsweb is down and until we get our new website up......

Finally, today I saw a news article about a school in India far outside the traditional education model. Called the Tamarind Tree School, it uses an open education model to offer collaborative, innovative learning solutions to rural students. They use free and open source software, and even hardware so that people can build their own devices. Read more about this:

Discussing the future of Cantor

Sun, 01/07/2018 - 14:07

Hello devs! Happy new year!

It is common to use the new year date to start new projects or give new directions for old ones. The last one is the case for Cantor.

Since when I got the maintainer status for Cantor, I was working to improve the community around the software. Because the great plugins systems of Qt, it is easy to write new backends for Cantor, and in fact in last years Cantor reached the number of 11 backends.

If in a hand it is a nice thing because Cantor can run different mathematical engines, in other hand it is very common developers create backends, release them with Cantor upstream, and forget this piece of software after some months. The consequence of this is a lot of unsolved bugs in Bugzilla, unexpected behaviours of some backends, and more.

For instance, R backend is broken from some years right now (thanks Rishabh it was fixed during his GSoC/KDE Edu Sprint 2017 but not released yet). Sage backend breaks for each new release of Sage.

Different backends use different technologies. Scilab and Octave backends use QProcess + Standard Streams; Python 2 uses Python/C API; Python 3, R, and Julia use D-Bus.

In addition to these, remember each programming language used as mathematical engine for Cantor has their respective release schedule and it is very common new versions break the way as backends are implemented.

So, yes, the mainternhip of Cantor is a hell.

In order to remedy it I invited developers to be co-maintainer of these respective backends, but it does not have the effect I was suposed to. I implemented a way to present the versions of programming languages supported in the backend but it does not work well too.

So, my main work in Cantor during these years was try to solve bugs of backends I don’t use and, sometimes, I don’t know how they work, while new features were impossible to be planned and implemented.

If we give a look to Jupyter, the main software for notebook-based mathematical computation, it is possible to see this software supports several programming languages. But, in fact, this support is provide by the community – Jupyter focus effort in Python support only (named the ipython kernel) and in new features for Jupyter itself.

So, I would like to hear the KDE and Cantor community about the future of Cantor. My proposal is split the code of the others backends and put them as third-party plugins, maintained by their respective community. Only the Python 3 backend would be “officially” maintaned and delivered in KDE Applications bundle.

This way I could focus in provide new features and I could to say “well, this bug with X backend must be reported to the X backend community because they are accountable for this piece of software”.

So, what do you think about?

Latte bug fix release v0.7.3 and some news...

Sat, 01/06/2018 - 22:17

Latte Dock v0.7.3   has been released containing many important fixes and improvements! Soon at your distro repos or...

Go get   v0.7.3  from,*

-----* archive has been signed with gpg key: 325E 97C3 2E60 1F5D 4EAD CF3A 5599 9050 A2D9 110E

Fixes/Improvements (v0.7.3)
shadows with size:100% and opacity:100%
  • support RTL languages
  • translated to twenty one different languages
  • fix crash from audio badges
  • improve shadow behavior and calculations for corner cases
  • support "nomad systray" and "kdeconnect sms" in Latte heuristics
  • expand applets when clicked at neutral areas
  • shrink a bit the task number
  • support Fitt's Law in more corner cases
  • execute Latte at the same time between different users
  • ignore X11 signals that are sent with no reason
        (e.g. Firefox 57 upstream bug:
  • take into account the applets shadow size for mask calculations

Latte Git - development version (v0.7.75)

smart dynamic background

Work on the next major version has already started and for those that want to live on the edge these are the features that have landed:
  • New Smart Dynamic Background
        ( )
  • Panel / Dock options in Settings window to switch easy and fast between them
  • New settings for Active Indicator and Glow
  • Support multiple internal separators for Tasks plasmoid and assign them to different Activities
  • Download window for Latte Layouts found at website,
        ( )
  • Slide out/in the dock when changing edge or screen
  • Enhance command line options to load and import layouts on startup
  • open and close Settings window with global shortcut
  • Increase the tasks that can be executed from global shortcuts from nine to nineteen 
dock/panel options

Plans for v0.8
  • Pre-Load Multiple Layouts.
        ( ) 
Latte v0.7 introduced multiple layouts that change based on Current Activity user changes. This was the first step to see what users can do with it and if such a solution is realistic. The feedback is very positive and even though the audience is small, there are users that have reported very interesting workflows. At the same time some users reported that they would like to have these layouts pre-loaded based on the Active Activities. In such scenario switching between Activities the specific Latte Layouts will be instantly available. When the user activates a new Activity then its layout is loaded automatically and when an Activity is closed that layout is off-loaded from memory. Technologically this is very challenging and pushes our current implementantion to the limits but on the other hand it is possible. If you want to participate in the discussions feel free to join the above thread.

Latte Development Team

For a few months I am the only active developer and maintainer of Latte and I would love to have  more people contributing and sharing the Latte development process! Feel free to join and participate, I dont bite :) ! 

that's all for now, have fun everyone....
michail <psifidotos>

 Latte Dock and make a donation at !

LibAlkimia 7.0 released

Sat, 01/06/2018 - 13:02

LibAlkimia is a base library that contains support for financial applications based on the Qt C++ framework. One of its main features is the encapsulation of The GNU Multiple Precision Arithmetic Library (GMP) and so providing a simple object to be used  representing monetary values in the form of rational numbers. All the mathematical details are …