Language Selection

English French German Italian Portuguese Spanish

Kde Planet

Syndicate content Planet KDE
Planet KDE | English
Updated: 4 hours 41 min ago

Web Review, Week 2021-37

9 hours 36 min ago

Let’s go for my web review for the week 2021-37.

A spoonful of sugar opens a path to longer lasting lithium sulfur batteries – ScienceDaily

Tags: battery, energy

If confirmed and possible to industrialize quickly this could have an interesting impact on public transportation.

The Very First Webcam Was Invented to Keep an Eye on a Coffee Pot at Cambridge University | Open Culture

Tags: tech, web, coffee, innovation

This is an interesting anecdote. Academics and engineers do indeed run on coffee for most of them. Apparently it’s a driving force for innovation. :-)

Social networks - It’s worse than you think

Tags: tech, social-media

Alright, interesting result… puts a nail in the coffin of social media being a positive force in the world ever. At that point it’s not only about the toxic architecture of the ones running from ads… it’s more fundamental than that. It’d definitely need to be completely rethought.

Facebook under fire over secret teen research - BBC News

Tags: tech, facebook, instagram, social-media

Those companies get more creepy by the minute… it’s a never ending train of such social experiments.

Oracle SQL Is The Devil – Coding To Freedom

Tags: tech, oracle, databases

Between DB2 and Oracle, those old closed source databases are really a pain to work with.

10 Cool SQL Optimisations That do not Depend on the Cost Model – Java, SQL and jOOQ.

Tags: tech, databases, sql, optimization

Interesting set of SQL optimizations. Also shows PostgreSQL still had (has?) some room for improvement.

A categorized list of all Java and JVM features since JDK 8 to 17 - Advanced Web Machinery

Tags: tech, java

Nice comprehensive list of new features since Java 8.


Tags: tech, frontend, web, markdown

Looks like an interesting web markdown editor.

Designing Beautiful Shadows in CSS

Tags: tech, web, css, frontend

Nice exploration of how to produce shadows in CSS. Make sure to read it all the way until the filter + drop-shadow approach.

Python Anti-Pattern :: Valinsky

Tags: tech, programming, python

Illustration of one of the traps I hate most with Python.

rr: lightweight recording & deterministic debugging

Tags: tech, debugging, c++

Interesting debugger to complete your arsenal next to GDB. Super nice to be able to travel back in time.

PyTrace - Time Travel Debugger for Python

Tags: tech, debugging, python

Similar to RR but for Python.

The Time Travel Debugger for Web Development

Tags: tech, debugging, web, react, javascript, typescript

Similar to RR but for web frontends.

Bye for now!

QML Modules in Qt 6.2

13 hours 25 min ago
QML Modules

With Qt 6.2 there is, for the first time, a comprehensive build system API that allows you to specify a QML module as a complete, encapsulated unit. This is a significant improvement, but as the concept of QML modules was rather under-developed in Qt 5, even seasoned QML developers might now ask "What exactly is a QML module". In our previous post we have scratched the surface by introducing the CMake API used to define them. We'll take a closer look in this post.

KStars v3.5.5 Released!

Thursday 16th of September 2021 07:53:00 AM

KStars v3.5.5 is released on September 16th for Windows, MacOS, and Linux. This release includes a number of new features and bug fixes.

Google Summer of Code 2021Let's start with the highly successful Google Summer of Code project: KStars Deep-Sky-Objects Overhaul by Valentin Boettcher. This is mostly backend plumping and refactoring to enable KStars to process very large DSO catalogs without impacting memory or processor utilization. This required the development of a new Python-based catalog generator that consolidates and de-duplicates deep sky catalogs in a form usable by KStars.

The legacy system for handling DSO catalogs in KStars has grown rather organically and was a tangle between databases, CSV files and special case implementations. Many catalogs were hard-coded explicitly, making it hard to extend and generalize. Also, the sources of the catalogs and methods how they were transformed into the KStars format were inhomogeneous and hard to reproduce, making deduplication almost impossible.
De-duplication is a process to identify when different designations are used to denote the same deep sky object. For example, the infamous Andromeda Galaxy is known as M31 in the Messier catalog, whereas in the NGC catalog, its designation is 224, and in the PGC catalog, it is 2557 and so forth. Previously, when each catalog was loaded separately in KStars, there was no way to know whether these designations were actually referring to the same physical object. This led to interesting side-effects as these designations were sometimes loaded as separate unique objects in KStars. This is where de-duplication comes into play, it prevents duplication of the same object even when it is exists in multiple catalogs with different designations.
Another limitation for KStars deep sky catalog management is memory handling. KStars just loaded all the DSOs into memory and computed their position on the virtual sky for every draw cycle, which made all too large catalogs infeasible. Valentin task was to implement a unified catalog format which can be loaded into a central database and supports de-duplication. Furthermore, taking inspiration from the handling of star catalogs in KStars, the objects should be trixel indexed and cached in and out of memory (but only for large catalogs). Finally, it would be very desirable to make the creation/compilation of the catalogs reproducible and easily extendable to facilitate future maintenance.

Valentin developed a new python framework to generate KStars catalogs from sources. To learn how to create new DSO catalogs for KStars, please checkout the documentation.
While the above method is the recommended method to create highly efficient catalogs, you can still import DSOs using a basic CSV importer. This might be helpful to add a few DSOs of interest to some users.

With the previous legacy catalogs, the DSO object colors were hard-coded in the catalog itself. Now you can customize the color of each catalog to get the best experience possible suited to your needs.

Port Selector ToolWhen creating a new Ekos Equipment profile, you will be presented with the Port Selector tool if any of your devices is a serial or networked device.

Your equipment profile may contain one or more serial and/or network-enabled devices. Although INDI performs an auto-search when you connect to your serial devices, it's recommended to select the appropriate ports and baud rates before connecting for the first time.

If a device is available on the network (WiFi or Ethernet), then you can configure the device host-name (or IP address) and port. It must be located on the same network where Ekos is running in order for them to communicate with each other. The port selector tool can be toggled at any time and not only during initial connection phase.Re-usable Widgets
Wolfgang Reissenberger implemented new reusable widgets to be used across Ekos. These widgets replace the legacy raster-based pixmaps that were used in the Summary screen to report progress in focus, capture, and guide modules. Not only this reduces the memory footprint of KStars, but it also present fully interactive widgets at native resolution. 
You can switch back and forth between the available widgets to select the desired information to display. Scheduler Artificial Horizon Restriction Hy Murveit implemented a feature that was requested by our users for years: Artificial-Horizon -aware-scheduler! 

Users may define an artificial horizon zones where visibility is obstructed by natural or man-made structures. Furthermore, a terrain map can be superimposed to provide a 360 degree view of the horizon.

Artificial Horizon constraints, when enabled via the standard artificial horizon UI, will now be used by the scheduler to start or interrupt jobs. That is, if there is an artificial horizon constraint at a given azimuth, it will be used by the scheduler, along with the standard altitude constraint to determine if a job can start or continue. The scheduler uses the max of the altitude constraints as the constraint to enforce.

Ekos Internal Guider Improvements

Hy Murveit overhauled the Guider UI starting with simplifying the Guider Options Menu (GOM):
  • Dither options used to be in GOM's Guider Tab. Now the GOM has a Dither tab for dither parameters.
  • Moved the control parameters (e.g. DEC proportional gain = 133) to the GOM's Guide tab (where dither parameters used to be).
  • Removed the Control sub-tab from the Guide page (the sub-tab next to "Drift Plot" and "Calibration Plot").
  • Removed UI controls related to image guiding and rapid guiding
Furthermore, The standard control algorithm now uses calibration information when computing pulses. The control gain parameter for RA and (a separate one for DEC) now go from 0 to 1.0. It multiplies the error and the calibrated arcsec_per_ms_pulse. (Similar adjustments were made to the optional integral_gain.) proportionalResponse = arcsecDrift * proportionalGain * arcsecPerMsPulseThe Proportional Gain was renamed to the industry standard name of Aggressiveness. The guider's min-pulse and max-pulse (both in milliseconds) parameters were changed to Min Error and Max Response, both with units of arc-seconds instead of milliseconds of pulse. Hopefully more intuitive to users. The derivative gain control was dropped since it was never used in the code before.

Users are highly recommended to revise their internal guider settings to achieve the best results.More Improvements & Fixes
  • Add shortcuts for increasing and decreasing the time scale (by Nate Graham).
  • Control Mount with arrow keys (by Siyu Zhang)
  • Eliminating formerly required Python options for local on MacOS (By Robert Lancaster)
  • Stable alphabetical INDI device order (by Dušan Poizl)
  • Remove pre-calculated pixel-to-WCS lookup table which takes huge amounts of memory (two floats per pixel) and slows down image loading (by Jarno Paananen)
  • Broad Documentation updates with updated screenshots (by Antoni Bella Pérez)
  • Batch add option in the Observation Planner (by Akarsh Simha)
  • Better sectioning for translation (by Yuri Chornoivan)
  • Fix core computations in SkyPoint and StarObject, and a few other improvements (By Akarsh Simha)
  • Move focuser back to initial position when interrupted by a meridian flip (By Wolfgang Reissenberger)
  • Save Binning, Fits filter settings (guider), Camera gain (solver) and configure SEPMultistarOptions correctly (By Antonio Escriban)
  • Resize manager: change the size of the log view (By Jürgen Terpe)
  • Update skyculture sternenkarten simplifying some constellation lines adding new constellation lines for the southern hemisphere (By Edgar Scholz)

Plasma 25th Anniversary Edition Beta

Thursday 16th of September 2021 12:00:00 AM

Thursday, 16 September 2021

This is the Beta release of Plasma - 25th Anniversary Edition. To make sure that end-users have the best possible experience with the next version of Plasma, KDE is releasing today this test version of the software. We encourage the more adventurous to test-run it and report problems so that developers may iron out the wrinkles before the final release scheduled for the 12th of October.

Plasma 25th Anniversary Edition is a leap forward in the quest for a more performant and usable desktop. We have improved the speed and stability of Plasma, while including changes that make it easier to use both on desktop and touch-enabled devices.

DISCLAIMER: This is beta software and is released for testing purposes. You are advised to NOT use Plasma 25th Anniversary Edition Beta in a production environment or as your daily desktop. If you do install Plasma 25th Anniversary Edition Beta, you must be prepared to encounter (and report to the creators) bugs that may interfere with your day-to-day use of your computer.

These are the most noteworthy changes coming in Plasma 25th Anniversary Edition Beta:


We made several improvements to the Breeze theme to make Plasma even more pleasant to use:

  • Breeze now has redesigned buttons, menu items, checkboxes, radio buttons, sliders, scrollbar and spinboxes
  • Scrollbars and spinboxes are bigger and easier to use with touch
  • We added a gear loading spinner throughout Plasma and KDE apps
  • There is a highlight effect for when opened widgets touch the panel edge
  • Widgets on the desktop now have a blurred background

Kickoff, our application launcher, includes many improvements this time around:

  • The code received a gigantic overhaul
  • A huge number of bugs were fixed
  • It has improved performance and accessibility
  • You can now choose whether to use a list or a grid for all apps view
  • Now you can make Kickoff stay on the screen with the new pin button
  • Pressing-and-holding with a finger now opens the context menu
  • You can now configure power/session action buttons
Other Widgets
  • Entering tablet mode makes System Tray icons bigger, making it easier to use Plasma on touch screens
  • You are now able to easily copy text on notifications with the Ctrl+C keyboard shortcut
  • The Global Menu applet got a more “menu-like” appearance
  • We added an easy way to switch power profiles. You can choose between “power-saver”, “balanced” and “performance”
  • It is now possible to fine-tune the manual speed setting for wired Ethernet connections and to disable IPv6
  • Plasma now shows more details about the currently-connected network
  • System Monitor and sensor widgets can now display load averages
  • By default, the clipboard now remembers 20 items and ignores selections that you did not explicitly copy
  • The Audio Volume applet now distinguishes between applications that are currently playing or recording audio
  • It is now possible to delete selected items in the Clipboard applet’s popup by pressing the Delete key on the keyboard
System Settings

System Settings also received many new additions and improvements:

  • Now you can override a color scheme’s accent color in the Colors page
  • The Feedback page now shows you a history of data that you chose to send to KDE
  • You can set the status of your Bluetooth adapter on login. The options available are “on”, “off” and “remember”
  • Login Screen page’s synchronization feature now syncs your screen arrangement
  • Display settings now shows a timer to revert possibly undesired changes
  • We sorted the screen refresh rates list
  • Night Color page now tells you when you’re about to undertake an action that will perform geolocation using a 3rd-party service
  • Now it is easier to find options in System Settings. We added many keywords to improve search.

Discover, our app center, is faster and more transparent in this version:

  • Discover will now load faster
  • The app install button now tells you the name of the source

In this release we made many improvements to the Wayland session:

  • There is a new screen rotation animation
  • The System Tray will notify you when something is recording the screen and will also let you cancel it
  • Using touchpad gestures will be more satisfying than ever. Now the animation of realtime gestures follows your fingers
  • It is now possible to middle-click-paste between native Wayland and XWayland apps
  • You can now drag-and-drop stuff between native Wayland and XWayland apps
  • In the Plasma Wayland session, it is now possible to adjust the Intel GPU driver’s Broadcast RGB settings
  • It is now possible to change the screen resolution when run in a virtual machine
  • Virtual desktops are now remembered on a per-activity basis
  • The Task Manager now shows feedback on app icons when you click on them to launch apps
  • The cursor now shows animated icon feedback when launching apps
  • The “Present Windows” effect was rewritten
  • Multi-screen layouts are now retained across X11 and Wayland sessions
  • Numerous crash/hangs have been fixed
  • DrKonqi, our bug reporting application, warns you when an app is unmaintained
  • The question mark button in the titlebar is hidden by default for dialogs and System Settings
  • Windows no longer become transparent when moving or resizing them
  • Passwordless accounts without autologin now show a simple login button
  • The Media Player widget now always displays the album art and its blurred background at the same time
  • The Networks applet now supports additional authentication settings/protocols/requirements for OpenVPN connections

If you would like to learn more, check out the full changelog for Plasma 5.23 Beta.

Qt Creator 5.0.1 released

Wednesday 15th of September 2021 09:25:36 AM

We are happy to announce the release of Qt Creator 5.0.1 !

September Development Update

Wednesday 15th of September 2021 08:52:56 AM

Not directly development related, but the scammers who registered, and for ransomware attacks have lost those domains. Let’s hope that also means the scammers decide they have had enough and stop spamming people. It’s been quite a chore dealing with all the enquiries, but it’s better that people ask than that they blindly go with the flow!

The Krita development fund now has over 150 subscription members — and about 250 occasional supporters per month. We’re still quite far from making it possible to fund more developers from the dev fund instead of — always fickle — store sales, so if you aren’t a member, please consider joining!

We have just now released Krita 5.0 beta 1, and now we’re working on the second beta. At the same time, there are some exciting developments for Krita 5.1, and we’re looking into what we want to focus on after the Krita 5.0 release.

Halla and Wolthera had the first real life meeting since February 2020, and spent their time triaging and fixing bugs. That resulted in the bug count dropping by about sixty, because in the same week, over forty new bugs were reported. That means that people are really taking testing the first Krita 5.0 beta seriously, which is awesome!

Wolthera and Raghukamath have been working hard on updating the manual for Krita 5, while Tyson Tan and Windragon have been digging into the translation of Krita and the manual, finding many places, especially in Krita, where text wasn’t translatable yet.

Windragon not only worked on translations a whole lot, he also fixed issues with handling touch input when drawing with a stylus, and looked into the use of OpenGL ES on ARM.

Dmitry and Ivan have worked on a workaround for the slowness of the OpenGL canvas on macOS. Halla has been testing their work during a really long inking session, and she reports that there’s a huge improvement in performance. The code is still experimental, but we really want this to be in Krita 5.0 Beta 2, that is the next beta, so everyone on macOS can test it. And… It should also improve painting performance on Windows systems with 4K or higher resolution screens.

Dmitry and Amyspark have been working on improving Krita’s performance by updating the compilers Krita can be built with on Windows and Linux. In some cases, this improves Krita’s brushes performance by up to sixty percent, but there were a lot of pitfalls along the way, and many bug reports were submitted to compiler developers. Amyspark is also working with people from CERN to improve the Vc library, which Krita uses for making the brush engines work in parallel.

Amyspark has also implemented loading and saving layered tiff files the Photoshop way (Krita has supported the tiff standard way of doing that for more than a decade), refactored our metadata support (exif and so on), away from the really baroque design we implemented back in … 2005. They also implemented support for metadata in tiff files. Then there were issues with LittleCMS. That now comes with a plugin that makes some calculations a lot faster, but we ran into various bugs. Together with Matthias, Amyspark worked with the LittleCMS maintainer, Marti Maria to fix those issues, and the results should be visible in today’s nightly builds. Fingers crossed! And then Amyspark started looking into a whole lot of legacy OpenGL code with a view to cleaning it up and making it easier to understand.

Matthias has also worked on an experiment where even in subwindow mode, there’s a tab bar to switch between documents.

Sharaf is working on improving Krita on Android and ChromeOS. New Android API’s are less than ideal for working with local files, but he’s managed to work his way through the problems. He’s also been fixing bugs in Krita’s vector layer and objects, and issues with Krita’s dockers on smaller screens.

Agata has been fixing issues found in Beta 1 with the area-limited perspective assistants, as well as the way gradients are shown in the gradient selector.

Emmet and Eoin have been working both on animation and storyboard bug fixes for Krita 5.0, as well as improving the brand new storyboard feature, which makes its debut in Krita 5.0, but will be even more awesome in Krita 5.1. An experienced storyboard artist is helping them fine-tune the functionality!

The post September Development Update appeared first on Krita.

Plasma System Monitor and FreeBSD

Tuesday 14th of September 2021 10:00:00 PM

Arjen and David – also other KDE contributors, but I’ll name those two because they suffered the brunt of my questions and merge requests – have come up with KDE Plasma System Monitor, which is an application for monitoring system resource usage, sensors and processes. It is a successor to the venerable ksysguard (14 years between those two posts), and promises better pluggability and a nicer UI.

In packaging System Monitor for FreeBSD, we had forgotten some bits and pieces, so until today the application would start, but not actually display anything useful. There’s lots of new code, and there is a code being moved from one library to another, so here’s a comparison shot of the old libraries and old UI (KSysGuard) and the new tools:

KSysGuard and Plasma System Monitor

CPU usage information is all there – and the new UI in System Monitor gives me much much more freedom to do UI design, even if I’ve not used it in the screenshot at all. The CPU monitor widget which can run in the panel or as a separate widget is a lovely dancing bar graph (in rainbow colors, although it needs to be 56px wide in order to display all my cores correctly).

The screenshot also shows that other things – networking, processes, memory use – are not there yet, so there’s plenty left to do. Mostly, I think, it’s porting existing code over and cleaning it up and making it modernly-acceptable to the ksystemstats library which now does most of the work. Having the port available (at all) is just the first step to more MRs making it a fully-worthy successor.

That means I need to work together with my KDE friends. “Darn” (also, there will be coffee).

TUXEDO Computers Becomes the Newest KDE Patron

Tuesday 14th of September 2021 08:22:22 AM

Herbert Feiler, CEO TUXEDO Computers.

TUXEDO Computers, a company known for selling Linux-powered computers and notebooks, now joins us as a KDE Patron!

"Our customized Linux notebooks (for work or play) are equipped with KDE Plasma, which leads to a positive response from our customers", said Herbert Feiler, CEO TUXEDO Computers. "Furthermore, we additionally do our own development work, which could benefit KDE as upstream as well. We are happy to share our knowledge and would like to secure as well as expand KDE's development work in the long run. Feedback that we receive from customers can also flow directly into KDE's development work."

"For KDE, reaching and serving end-users is part of our reason to exist and TUXEDO can be a great ally in this endeavour." said Aleix Pol, President of KDE e.V. "Together, we will get to expand our frontiers and create systems and tools to further serve our users. It's especially encouraging to see TUXEDO's commitment to join our development communities and collaborate towards making KDE products better for everyone."

TUXEDO Computers joins KDE e.V.’s other Patrons: The Qt Company, SUSE, Google, Blue Systems, Canonical, Enioka, Slimbook and Pine64 to continue to support Free Open Source Software and KDE development through KDE e.V.

Introduction to the QML CMake API

Monday 13th of September 2021 01:12:05 PM

When Qt 6 migrated to CMake, we also wanted to provide a nicer experience for setting up QML projects. With the initial Qt 6.0 release, we did however only provide some tech preview API, which did not do much more than what was available in qmake since Qt 5.15.

Translation Sadness

Sunday 12th of September 2021 10:00:00 PM

Qt is a great toolkit, with fine support for translations in general. You can take a Qt application and, assuming that the guidelines have been followed, it will adjust really well to starting in different languages. Changing languages on-the-fly is a different matter; even though there are guidelines to get you to 98%, I’m going to write about the 2% sadness that remains. OK? 确定? OK? ठीक है?

I’m going to gloss over the technology here; the documentation is much more in-depth, and QTranslator does most of the work-work. Read those things, then gripe about my gloss.

Happy Translations

Qt comes with translations for many things; applications can organize their translations into catalogs. To display a text, Qt applications will typically use the tr() function to look up a source-text and return a translation in the current language. For instance, tr("OK") will return the translation of “OK”.

Translations have a context, which in the case of a naive call to tr() is generally the class name performing the call. This gives the translations at least the opportunity to change the way “OK” is translated in the context of classes MyFancyWidget or MyAwkwardDialog.

So a catalog will basically be a table, helping to look up string in context to produce a translation.

Using the QTranslator class, it’s easy to load a new catalog; if the catalog is installed on the application, then subsequent calls to tr() will find the string in context in that new catalog. And by golly it works pretty well. Calamares is a Qt-based installer for Linux distributions, and it ships with translations into 81 languages (although some of them are very rudimentary). The application starts up in whatever language the system is configured in, but the first thing it does is ask the user what language to use for the application – you can start it in an English environment, and tell it to continue in Russian (or vice-versa).

Here are two screenshots of Calamares; one started in English, one started in Russion.

Calamares in English, welcome page Calamares in Russian, welcome page

For strings under the control of the application, the catalog is easy to identify, and the application source-code contains all of the contexts and strings. So dealing with the translation of “Welcome” (a string that occurs in Calamares) is straightforward.

Qt itself ships catalogs, too. For instance a catalog qtbase that contains strings used in user-visible messages from the qtbase repository. Loading a different qtbase catalog works exactly the same way as any other catalog, assuming your distribution puts the catalogs in the expected location (mine doesn’t).

This concludes the 98% happiness talk.

2% Sadness

There are a couple of corner cases:

  • languages where qtbase has no translation,
  • places where you don’t know what the context is for a string.

Qt has community-contributed translations, with 28 languages participating in qtbase. Calamares has a Thai translation, which Qt as a whole does not. That means that the application displays OK on buttons where the text comes from Qt, and ตกลง if Calamares sets the text explicitly using translations from Calamares. Similar things apply to Yes and No and Cancel.

Here are three screenshots of Calamares, one started in English, one started in Russian, and one started in English and then switched to Simplified Chinese.

Calamares in English, about dialog Calamares in Russian, about dialog Calamares in Simplified Chinese, about dialog

Notice that all three use a user-visible string OK, even though the qtbase catalog contains a translation (for Simplified Chinese, anyway). This shows that the context of the string matters, and that the OK button in this dialog, gets its user-visible string from a different context, but with the same source string, as other OK buttons.

The relevant difference in context is QStandardButton. The not-translated OK buttons are added to the dialog as standard buttons; I chased the code for some distance, and found that the string comes from the platform integration module, which in turn probably means the theme that is applied to the application. In other words, some source of strings provides the user-visible string here, but I don’t know what, or even if it is Qt-based.

It is, quite simply, futile to try to change translations for the OK text on a standard button by loading catalogs or applying Qt translation techniques, because it’s impossible to know where the text comes from.

In the end, I wrote a helper function that applies a Calamares-translated text to a Qt standard button, using the context StandardButton. That moves translations into a different catalog, applies the standard Calamares translation workflow to it, and gets me the last 2% of the way:

Calamares in Simplified Chinese, fixed!


My remaining sadness is that Qt is almost there, and documentation says that it should all work, and that in the end I need to pull off some stupid hack to provide the right display of a 2-character string (2 glyphs in Simplified Chinese, 5 in Turkish). At least it’s documented, and the next time someone files an issue that there’s a missing translation I have a handle on what kind of code to add.

KDE DEVLOG: The Science Of... Changing The Wallpaper!?

Sunday 12th of September 2021 09:34:31 AM
Stay in the loop: If you want to help me make these videos: Patreon: Liberapay: Paypal: My website is and if you want to contact me, my telegram handle is [at] veggero. Background music by: After The Fall - KaizanBlu - Low FM - Idyllic - Evol - [](VGOtxjgtxLU)

Latte Dock v0.10.2 | Bug Fix Release

Saturday 11th of September 2021 07:48:00 PM


Let's welcome Latte Dock v0.10.2 the 2nd Official Bug Fix Release of v0.10.x branch!   Go get it from,*


  • fix crash from containmentactions loading after kde frameworks 5.86
  • Fitt's Law fix for vertical panels in justify alignment
  • Fitt's Law fix for applets touching the screen edge and at the same time using parabolic effect
  • hide all context menu actions if the user has chosen it
  • add missing translations for docks/panels dialog

You can find Latte at Liberapay,    

or you can split your donation between my active projects in kde store. -----   * archive has been signed with gpg key: 325E 97C3 2E60 1F5D 4EAD CF3A 5599 9050 A2D9 110E


Tag filtering, better navigation and lots of little UI tweaks — Kalendar devlog 14

Saturday 11th of September 2021 06:03:08 PM
Note: Kalendar is still under heavy development. You’re free to poke around and try it out, but it is not yet final software! If you want to contribute to its development, join us in Kalendar’s Matrix room. This week, we have done lots of small tweaks to Kalendar and are introducing a big, new, highly …

This week in KDE: a random grab-bag collection of stuff

Saturday 11th of September 2021 05:08:47 AM

Bit of a short list this week, but there’s much more still happening, with merge requests aplenty going through review! Plasma 5.23 is now in “soft feature freeze” and we are working hard to stabilize it for the release next month.

New Features

With Kate’s git integration enabled, you can now delete branches (Waqar Ahmed, Kate 21.12)

Bugfixes & Performance Improvements

Konsole is no longer so slow to close a tab when something is written at the prompt (Christoph Cullmann, Konsole 21.08.2)

Copying text from Okular now strips off any trailing newline characters (Albert Astals Cid, Okular 21.08.2)

Konsole’s “New Tab” menu item now works when there is only one profile, as there is by default (Nathan Sprangers, Konsole 21.12)

Skanlite now respects your chosen default image format when you go to save a file (Alexander Stippich, Skanlite 21.12)

Elisa no longer inappropriately parses HTML in song metadata text (me: Nate Graham, Elisa 21.12)

Unchecking the “Inhibit automatic sleep and screen locking” checkbox in the Battery and Brightness System Tray applet now works properly (Peifeng Yu, Plasma 5.23)

Fixed one of the ways that the ksystemstats daemon could crash on launch, which would cause System Monitor widgets to not display any data (David Edmundson, Plasma 5.23)

In the Plasma Wayland session, when the virtual keyboard has been temporarily disabled, it now stays disabled on the lock screen too (Oleg Solovyov, Plasma 5.23)

In the Plasma Wayland session, when using a multi-screen setup with one screen plugged into an AMD GPU and other ones one plugged into an Intel integrated GPU, the screens driven by the Intel GPU no longer continue to show the login screen after logging in (Xaver Hugl, Plasma 5.23)

No border” and “Is closeble” KWin Window rules now automatically apply as expected, if you’ve set them to do this (Ismael Asensio, Plasma 5.23

System Settings pages launched as standalone windows using kcmshell5 now have the correct icon in their titlebar and Window Switcher visualization (Aleix Pol Gonzalez, Plasma 5.23)

In System Settings’ Virtual Desktops page, you can once again use the mouse to select text while editing the virtual desktop name (me: Nate Graham, Plasma 5.23)

The desktop context menu no longer exhibits a visual glitch at the bottom when pressing the shift key to access the “permanently delete” action, including when a sub-menu is open (Derek Christ, Plasma 5.23)

In the Plasma Wayland session, shadows for Plasma dialogs, notifications, and OSDs are no longer often broken especially when using a left-edge panel (Andrey Butirsky, Plasma 5.23)

KWin window rules now automatically apply themselves as expected after KWin crashes and restarts itself (Ismael Asensio, Plasma 5.23)

It is now possible to create a Plasma Vault using the gocryptfs backend when using version 2.1 of gocryptfs (Ivan Čukić, Plasma 5.23)

User Interface Improvements

Gwenview’s new behavior to preview a zoom level when you hover the cursor no longer applies the new zoom setting instantly, so if you close the combobox without selecting anything, the view snaps back to the original zoom level (Felix Ernst, Gwenview 21.12)

System Settings’ pages now have many many more keywords associated with them, so you can now find things more easily by searching for stuff in the search field (Guilherme Marçal Silva and Nayam Amarshe, Plasma 5.23)

Removing a Bluetooth device now prompts for confirmation, and the action to do so now uses a red-colored icon to hint that something will be removed (Tom Zander, Plasma 5.23)

After searching for an Emoji using the Emoji picker window, using the arrow keys now always navigates between the found emojis, rather than moving the text insertion point in the text field (Kristen McWilliam, Plasma 5.23)

…And everything else

Keep in mind that this blog only covers the tip of the iceberg! Tons of KDE apps whose development I don’t have time to follow aren’t represented here, and I also don’t mention backend refactoring, improved test coverage, and other changes that are generally not user-facing. If you’re hungry for more, check out, where you can find blog posts by other KDE contributors detailing the work they’re doing.

How You Can Help

Have a look at to discover ways to be part of a project that really matters. Each contributor makes a huge difference in KDE; you are not a number or a cog in a machine! You don’t have to already be a programmer, either. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

Finally, consider making a tax-deductible donation to the KDE e.V. foundation.

KDE Ships Frameworks 5.86.0

Saturday 11th of September 2021 12:00:00 AM

Saturday, 11 September 2021

KDE today announces the release of KDE Frameworks 5.86.0.

KDE Frameworks are 83 addon libraries to Qt which provide a wide variety of commonly needed functionality in mature, peer reviewed and well tested libraries with friendly licensing terms. For an introduction see the KDE Frameworks release announcement.

This release is part of a series of planned monthly releases making improvements available to developers in a quick and predictable manner.

New in this version Breeze Icons
  • Add language-chooser symlinks for Maliit keyboard
  • Add keyboard icons for maliit Breeze theme
  • Add symlinks using reverse domain name for Haguichi app and status icons
  • Add new bookmark-new and bookmark-edit icons
  • Re-organize bookmark icon symlinks
  • kdenlive icons: Simplify xml and try to fix breeze-dark
  • Use a rotating gear for the process-working animation
  • Remove itinerary icons
  • Add Xfce compatibility symlinks (bug 432333)
Extra CMake Modules
  • ECMSetupQtPluginMacroNames: avoid adding duplicates to vars in config code
  • Enable KDEGitCommitHooks on Windows
KDE Doxygen Tools
  • Mention this updates, use standard kde/src paths, improve language
  • Add support for static builds
  • KCharsets: add custom US-ASCII QTextCodec as workaround for QTBUG-83081
  • Add Ctrl+Alt+Comma shortcut for “Configure Keyboard Shortcuts” (bug 441537)
  • Make enum value visible to QML when using GlobalEnum mode
  • KDesktopFile::isAuthorizedDesktopFile: reduce warning to info a log
  • Add support for static builds
  • Hide KHamburgerMenu in QMenus when a native menu bar is used (bug 439997)
  • KFileSystemType: Fix hurd build
  • Python bindings: skip KPluginFactory::loadFactory and KNetworkMount
  • KStringHandler: insert ZWSP between camelCase sub-words in preProcessWrap
  • Create utility methods for plugin loading
  • Deprecate KPluginMetaData::instantiate method
  • Deprecate KPluginLoader class
  • KPluginLoader: move static methods to KPluginMetaData
  • Fix issue when building KCrash static (bug 440416)
  • Downgrade the “invalid plugin” warning message to a debug message
  • KFileSystemType: add a method to return filesystem type name
  • Adapt to KIO DavJob factory methods removing QDomDocument from their API
  • Try to fix Android build via linking GLESv3
  • qtquicksettings: Add workaround for Nvidia Wayland (bug 432062)
  • GridDelegate: Fix non-existant context property
  • AbstractKCM: Fix padding when header/footer is not visible
  • Don’t use the KIO AccessManager on Android
  • Move ksnake to deprecated and add ksnakeduel entity
  • Add an entity for Kigo
  • Fix launching commands with args using kstart5 (bug 433362)
  • Start processes with kstart5 if available (bug 433362)
  • Be more lenient in reading QImages
  • Add support for static builds
  • SGIImage::writeImage: Properly fail if the image is too big
  • exr: Port to std::log/pow
  • PCXHandler::write: Properly fail if the image is too big
  • Inline kssld operators to avoid duplicate symbol errors (bug 428807)
  • KFilePlaceEditDialog: Make the trash url non-editable
  • KFilePlaceEditDialog: Always preserve previous icon (bug 439622)
  • Check for “PrefersNonDefaultGPU” desktop entry (bug 433714)
  • DBus activation with filemanager iface
  • Build on Android without D-Bus
  • kio_http: wrap a long error message (bug 160399)
  • Port internal usage of KDesktopFileActions::executeService
  • Remove unneeded org::kde::KDirNotify::emitFilesChanged part from deprecation message
  • Deprecate KDesktopFileActions::userDefinedServices overload
  • Fix wrong deprecation of method in previewjob
  • KMountPoint: match by device ID (dev_t) in findByPath()
  • KMountPoint: check for more network filesystems
  • Don’t include FUSE support on Android
  • Don’t include the internal/discrete GPU switching support on Android
  • Don’t use KAuth on Android
  • Exclude various non-functional components from the Android build
  • kio_file: detect failure to create symlinks due to filesystem support (bug 253678)
  • Add icons for XDG publicshare and templates dirs
  • Change KIO’s default behavior to fork slaves rather than use klauncher
  • [JobUiDelegate] Ensure button icon name and label aren’t empty
  • Also exclude KAutoMount on Android
  • Don’t build KDynamicJobTracker on Android
  • CommandLauncherJob: don’t use a shell when not needed
  • Allow using scheme handler in OpenURLJob if kio slave exists too
  • Deprecate the last bit of QDomDocument in the public KIO API
  • CopyJob: ask users about replacing invalid characters in file/folder names (bug 199063)
  • SkipDialog: ask users about replacing invalid chars when copying files/dirs
  • KCoreDirLister: un-anchor the regex pattern in setFilter()
  • [kpropertiesdialog] Allow editing icons for root-owned desktop files
  • KDirOperator: expand to url only in detail tree view (bug 440475)
  • Switch many loaders to asynchronous
  • Don’t use DropShadow for overlay drawer handles
  • Avoid creating then immediately discarding a page’s ActionButton instance
  • Add “Report Bug” action to the about page
  • Support horizontal scrolling in ScrollablePage
  • Use text as tooltip only for icon-only buttons (bug 441810)
  • Fix Page.rightAction being labeled as leftAction in API docs
  • [ActionTextField] Use small icon sizing for actions
  • Add settings components
  • Make the static build build again
  • Add Attached property used as a hint for application to enabled spellchecking
  • Handle KirigamiPluginFactor::createPlatformTheme returning nullptr
  • Use rate limiting to display warnings for deprecated Units properties
  • Remove iconScaleFactor and related code from Units
  • Only load the first style plugin that we find
  • Rewrite Units in c++
  • Load theme definition when Kirigami is built with bundled resources
  • fix isCurrentPage
  • controls/AbstractApplicationHeader: disable hiding on touch scrolling behaviour by default (bug 439923)
  • controls/AbstractApplicationHeader: make it possible to disable hiding on touch scrolling behaviour
  • Enable static build of QML plugin
  • Don’t force QML plugin to be shared library
  • Build without D-Bus on Android
  • Port from KMountPoint to QStorageInfo
  • Set KLocalizedContext for QtQuickDialogWrapper
  • Use QToolButton for reset button as we have the same style
KPackage Framework
  • Deprecate unused virtual functions in PackageLoader
  • Try loading package structures by name
  • kpackagetool: Fix small typo in its output
  • Don’t use D-Bus on Android
  • Refactor LineChartNode to reuse LineSegmentNode
  • Increase minimum size for line chart interpolation
  • Implement batching for Line chart material
  • Add a property to BarChart that renders it as horizontal bars
  • Support specifying a corner radius for bar chart bars
  • Support setting a background color for bar charts
  • Refactor BarChart to use individual nodes per bar and an sdf shader
  • Output warning if unknown X-Plasma-API is requested
  • Deprecate constructor overload which can not be used with KPluginFactory
  • cmake: Remove intermediate copy target
  • Use the pointer-to-member-function QObject::connect() signal/slot syntax
  • Add snippet on how to port deprecated AbstractRunner action methods
  • abstractrunner: Deprecate utility methods for actions
  • dbusrunner: Add Teardown and Config methods to D-Bus interface
  • Add support for PrefersNonDefaultGPU desktop key
  • Deprecate plugin instanciation methods in KService/KServiceTypeTrader
  • Point docs to KPluginMetaData/KPluginFactory instead of KPluginLoader
  • Python indentation: decrease indent when appropriate keyword is typed (bug 392732)
  • indentation: add Julia indentation script
  • KateModeManager: unify wildcardsFind() and mimeTypesFind()
  • KateModeManager::mimeTypesFind: consider types with negative priorities
  • Simplify presentation of word wrapping options
  • KateModeManager::wildcardsFind: consider types with negative priorities
  • KateWildcardMatcher => KSyntaxHighlighting::WildcardMatcher
  • KateWildcardMatcher: treat unmatched filename prefixes as no match
  • tidy up text area config appearance widget
  • Only process BOM for valid encodings (UTF-8/16/32)
  • Do not show encoding error when file only contains BOM (bug 272579)
  • Fix initialization of currency values (bug 441337)
  • Fix automatic currency file sync after 24h (bug 441337)
  • Implement set_frost in contrast protocol
  • Implement org_kde_plasma_window_management::send_to_output
  • Decouple activation feedback from plasma window management global
  • plasma-window-management: Support new activation concepts
  • KTitleWidget: Set frame backgroundRole to Window
  • KFontChooser: add a default constructor that takes a QWidget* first arg
  • KFontChooser: add a new shorter constructor, and setter methods
  • KFontChooser: deprecate “relative font size” methods
  • KMessageDialog: add buttons by default
  • Add blur and frost to fiddly thingy
  • Implement setting frost
  • Provide methods to translate to Qt types
  • Provide constructors for compatibility with Qt types
  • Read uncomplete WM_CLASS string (bug 441005)
  • Don’t link publicly against XCB (bug 441266)
  • Add find_dependency for X11 and XCB
  • Remove unused xrender dependency
  • Make link against X11 and XCB public
  • Use imported targets for X11 libs
  • Support static builds on Linux as well
  • Add support for static builds
Oxygen Icons
  • Import icons from KAlarm
Plasma Framework
  • ExpandableListitem: Implement the expanded button view in a better way
  • Fix wide button content alignment
  • ExpandableListItem: Fix overlapping entries with many expanded items (bug 428102)
  • ExpandableListitem: Fix stylus input for buttons (bug 426079)
  • CMake: do not expand variables beforehand
  • IconItem: No need to disconnect before deleting
  • avoid holding onto old Svg object when changing source of an IconItem
  • don’t make duplicate connections to ThemePrivate::onAppExitCleanup
  • [PC3&PC2/TextField] Consistent sizing of clear button with kirigami
  • Plasma::PluginLoader cache: Only store and return single plugin for given id
  • Applet & Containment: Take KPluginMetaData in constructor
  • Add top line to plasmoidheading similarly to titlebar
  • Fix Plasma (non-Qt) icon scaling with integer scale factors
  • [calendar] Don’t rely on ServiceType for distinguishing between old and new plugins
  • Define new KPackageStructure property in kpackage structures
  • Consistently name kpackage structures
  • Implement KirigamiPluginFactory::createPlatformTheme
  • Correct include location of Kirigami Units
  • Port Kirigami Plasma plugin Units to use a C++ implementation
  • [Calendar] Fix pinned calendar displaying the wrong number of dots (bug 440627)
  • Deprecate unused virtual methods in Plasma::PluginLoader
  • [PC3/TextField] Fix text color with certain themes (bug 438854)
  • [imgur plugin] Add Delete Url support
  • Port Telegram plugin to KIO::ApplicationLauncherJob
  • Fix combobox popup in RTL mode (bug 441178)
  • Label: set horizontalAlignment explicitly
  • Vertically center slider (bug 410672)
  • MenuItem: make it look more like Breeze QStyle
  • Menu: make it look more like Breeze QStyle
  • Add C++ Units implementation
  • ScrollBar: less scuffed implementation of reading from QStyle (bug 418327)
  • SpinBox: less scuffed implementation of reading from QStyle
Syntax Highlighting
  • cpp.xml: Add two QFlags-related macros
  • markdown.xml: End nested sub-headers fold regions when parent header is closed (bug 441278)
  • Python: Add “yield from” keyword (bug 441540)
  • Julia highlighting fixes
  • Simplify helpers of Repository::definition[s]For*()
  • Optimize Repository::definitionFor(FileName|MimeType)
  • Repository: unify definitionsForFileName() and definitionsForMimeType()
  • add extra resource path lookups for app files
  • Remove caseSensitive parameter to optimize WildcardMatcher
  • Export WildcardMatcher
  • Accept both Definition objects and definition names
  • Move the default repository management out of KQuickSyntaxHighlighter
  • Add a QObject wrapper for Repository
  • Don’t hardcode the default theme, but pick one based on the palette
  • Import Eike’s QtQuick syntax highlighter and adapt the build system
  • WildcardMatcher: treat unmatched filename prefixes as no match
  • Port QStringRef (deprected) to QStringView
  • Add rbreak and watch keywords for GDB highlighting
  • Properly highlight RR keywords containing a dash
  • PL/I: Also recognise “pl1” extension and MIME type
  • default themes: Add contrast between String and VerbatimString
  • breeze-light.theme: Add contrast between strings and raw strings
  • isocpp.xml: Highlight raw string delimeters (bug 440038)
  • Update Kconfig highlighter to Linux 5.13
Security information

The released code has been GPG-signed using the following key: pub rsa2048/58D0EE648A48B3BB 2016-09-05 David Faure Primary key fingerprint: 53E6 B47B 45CE A3E0 D5B7 4577 58D0 EE64 8A48 B3BB

Web Review, Week 2021-36

Friday 10th of September 2021 09:51:34 PM

Let’s go for my web review for the week 2021-36.

Germany wants smartphone makers to offer 7 years of software updates

Tags: tech, repair, smartphone

Now this looks like an interesting move. Let’s see if that delivers.


Tags: tech, social-media, art

This is a very interesting experiment. What if social media were finite? Which kind of relationship people would develop to them? Would they be less toxic?

A curated list of awesome actions to use on GitHub

Tags: tech, github

I don’t like GitHub Actions much if at all. Still, this is a nice curated list which can come in handy when having to work with it.

Like jq, but for HTML.

Tags: tech, html, rust

Sounds like a potentially interesting tool especially combined with curl.

Run GUI applications and desktops in docker. Focus on security.

Tags: tech, docker

Oh very interesting tool. This is likely an interesting path to run your in development build of GUI apps insulated from your system.

Ship / Show / Ask

Tags: tech, programming, codereview

Not 100% convinced by all the points, but definitely a good conversation to have around the pull/merge request model. Might need a minimum threshold to be crossed in term of team maturity though.

Bye for now!

BorgBackup - Continued

Friday 10th of September 2021 07:45:00 PM

In my last BorgBackup post I described my new setup using BorgBackup for the backup of my private data.

After two weeks of use, I have now first experiences on the way the incremental backups perform and some additional information how I apply this to backup a virtual FreeBSD server hosting some of my stuff.

Incremental Backup Performance ;=)

I must confess, I am positively impressed.

As told before, my duplicity setup did have a very bad performance (even just in the locally to my NAS). Perhaps I did something wrong, on the other side, I followed the default way as described to setup a encrypted backup.

On the other side, the new BorgBackup powered variant performs well locally (with 1 GBit networking) and remotely (with just between 25-50 MBit upload).

Instead of multi-hours to sync, the new variant runs in minutes.

Naturally, for larger increments, the upload is the restricting part here, this means for the remote backup, some minutes upload are added on top.

Let’s see what happens if I backup my data again after I bought some music album online and the usual stuff that happens in a day:

Time (start): Fri, 2021-09-10 20:38:39 Time (end): Fri, 2021-09-10 20:39:19 Duration: 40.65 seconds Number of files: 68984 Utilization of max. archive size: 0% ------------------------------------------------------------------------------ Original size Compressed size Deduplicated size This archive: 256.50 GB 249.26 GB 405.36 MB All archives: 1.82 TB 1.77 TB 240.18 GB Unique chunks Total chunks Chunk index: 148438 1118042 ------------------------------------------------------------------------------

Just the expected, more or less the size of my new album + a bit more given other minor things in my home did change, like this blog post ;=)

More or less the same happens for my remote increment:

Time (start): Fri, 2021-09-10 20:38:32 Time (end): Fri, 2021-09-10 20:40:52 Duration: 2 minutes 20.11 seconds Number of files: 68984 Utilization of max. archive size: 0% ------------------------------------------------------------------------------ Original size Compressed size Deduplicated size This archive: 256.50 GB 249.26 GB 405.32 MB All archives: 2.38 TB 2.32 TB 240.41 GB Unique chunks Total chunks Chunk index: 148994 1454388 ------------------------------------------------------------------------------

The backup time is more or less just the local network backup time + the extra time you need for the poor 25-50 MBit upload speed.

This looks reasonable and allows to run this daily via cron or other means without large impact on my local machine.

I have already a few increments online, e.g. for roughly each second day (the data varies here on the remotes, not all have the exactly same backups). Still the combined archives size on both remotes is below the actual size of the raw data I backup.

The Zstandard compression I did choose for the backup has a small impact, most of my stuff is already either compressed or likely not that well suites for further compression. But BorgBackup was able to de-duplicate already in the initial backup a few things that are redundant in my home, like duplicated albums I have by accident in different folders. Good hints what to cleanup if I need again disk space ;=)

Full FreeBSD server backup

I own some virtual FreeBSD server to host various things. I backup that server to a pure backup server without any other services regularly.

Below is the setup to do this via rsync & BorgBackup in some hopefully both secure and usable way.

The below stuff runs as a plain old cronjob without any other fancy stuff around.

First step: Plain rsync

The basic backup is just a plain rsync of more or less all things.

1 2 3 rsync -alHSvh --no-specials --no-devices \ --delete --force --stats \ "root@my-cool-server:/" "/some-where/my-backup"

Naturally on the server we pull our backups from, some stuff like databases are dumped to the local disk via cron before this rsync run, to have some consistent data and not relying on good luck that e.g. the database that way on disk during this sync was consistent (that will most likely not be the case).

Using this method, on the actual server, you have no way to get access to the backup server. The backup server will just pull all stuff via rsync. Even if somebody breaks into the actual server running my services, getting to the backup server will still be as hard as without any access to the first server.

If you like to copy this, keep in mind: the above rsync call will rsync all mounted file systems. This is useful for me, as e.g. the FreeBSD machine has ZFS with a bunch of individual mount points (like the standard FreeBSD ZFS setup) and I really just want to have everything.

Second step: History via BorgBackup

This rsync method is easy and fast, but it provides no history. As this sync runs nightly, if I ever delete e.g. some mail on my server by accident and not notice that before the nightly deadline => all hope (and the mail) is lost!

A nice solution for this is to use BorgBackup to backup your synced files once more into a local repository.

This might sound a bit strange, why not just use BorgBackup directly, but it has a few benefits:

  • The normal BorgBackup way will need access to the backup server from the server you backup => Once you capture the server, you might be able to do evil things on the backup server or at least mess with the backups.
  • There are ways to pull via BorgBackup, but they are complicated and still will rely on BorgBackup to have no exploitable holes, I trust rsync more in that regard (but you can still try the described pull variants if you are less paranoid).
  • You have a plain 1:1 copy always available, in the case BorgBackup really screws up. If you have the space for that one copy, I think that extra safety is nice.
Initial preparation of the repository

You need to create once the repository. I use for that no encryption, I have anyways my not encrypted rsync copy on the same backup machine:

1 borg init --encryption=authenticated "/some-where/my-backup.borg"

The documentation recommends the “authenticated” variant to avoid issues with malicious input data. Given a bit more hashing won’t hurt as I will use compression, too, I just went with that recommendation (without a passphrase). If you like to skip that, use “none”. But better read the documentation yourself.

Create increment after rsync

After each daily rsync, just create a new increment via:

1 2 3 borg create --compression zstd --stats \ "/some-where/my-backup.borg::{now:%Y-%m-%d}" \ "/some-where/my-backup"

And that’s it ;=)


The initial BorgBackup run is slow (single core machine), but the compression actually make at least some visible difference on my server data, not just the de-duplication:

Time (start): Fri, 2021-09-10 21:21:35 Time (end): Fri, 2021-09-10 22:02:00 Duration: 40 minutes 25.12 seconds Number of files: 259439 Utilization of max. archive size: 0% ------------------------------------------------------------------------------ Original size Compressed size Deduplicated size This archive: 56.48 GB 45.17 GB 40.61 GB All archives: 56.48 GB 45.17 GB 40.61 GB Unique chunks Total chunks Chunk index: 252076 278721 ------------------------------------------------------------------------------

An increment is a much faster thing, just like for my normal backup:

Time (start): Fri, 2021-09-10 22:16:36 Time (end): Fri, 2021-09-10 22:19:36 Duration: 2 minutes 59.12 seconds Number of files: 259624 Utilization of max. archive size: 0% ------------------------------------------------------------------------------ Original size Compressed size Deduplicated size This archive: 56.51 GB 45.18 GB 46.81 MB All archives: 112.99 GB 90.35 GB 40.66 GB Unique chunks Total chunks Chunk index: 252551 557639 ------------------------------------------------------------------------------

Btw., the rsync received size was ~76 MB for the above run, BorgBackup did break this down to just 46 MB for the increment, not that bad.

And just 3 minutes more for the nightly run in addition to the plain rsync, I would say nicely usable even on my single core machine.


As shown above, I think BorgBackup performs well for my use case.

The increments are reasonable small and fast, seems to be no issue to have daily ones.

Naturally, one will later start to expire older backups, I will need to read up more about this in the future, I just skimmed through that parts of the documentation so far.

At least for my personal data and server backup, this seems to be now a rather nice setup.

I hope this is helpful for others, too, but please always do your own research. There are plenty of other open-source backup tools out there, perhaps they fit your requirements better.

But at least from my side: thanks to the BorgBackup developers to provide the world with such an useful piece of software!

At least my backup setup got successfully assimilated .P

Get more out of the window title with Konsole

Thursday 9th of September 2021 12:00:00 AM

If you use git on a regular basis, you should look into using git-prompt; there is a file called that is shipped with git, the location in your setup varies depending on the Linux distribution you're using, for example in OpenSuse it's /etc/bash_completion.d/ The file is of course available in the upstream git repo.

Following the instructions from the top of that file should give you a very useful addition to the prompt of your shell (the file has instructions for BASH and ZSH). However that is not what this blog post is about; this post is about making the Konsole window title more useful, and by that I mean use the window title to show the current dir path and the info from git-prompt.

Now, the details, (these instructions are for BASH, but I expect it'll work with other shells with a bit of tweaking?):

  • Set Konsole to show the title from the shell session on the title bar: Settings -> Configure Konsole -> General -> Show window title on the title bar

  • Open ~/.bashrc in your favourite editor and add this:

# Adds a '*' and/or a '+' character to the window title to show # the status of the repo, see for the details export GIT_PS1_SHOWDIRTYSTATE=1
  • Next add this small helper function to set the window title (for what this function does see [1]):
__prompt_set_window_title() { printf '\e]2;%s %s\a' "$(__git_ps1 " [ %s ]")" "${PWD/#$HOME/\~}"; }
  • Next add the __prompt_set_window_title() function to the PROMPT_COMMAND (the prompt command in BASH is executed after each command in the shell), by putting this on a new line in .bashrc:
PROMPT_COMMAND='history -a; __prompt_set_window_title'

For what history -a does see [2].

Now when you cd to any dir that has a git repo, the name of the branch will be displayed between the square brackets on the title bar, along with a '*' and/or '+' characters to show the status of the repo.

[1] Breaking down __prompt_set_window_title():
  • prinft '%s %s' "first arg" "second arg" printf will replace the first "%s" with "first arg" and the second "%s" with the second arg ...etc

  • \e]2; starts the escape sequence to set the window title and \a marks the end of it

  • $(__git_ps1 " [ %s ]") for this details about this part, read the docs at the beginning of the file; this will put the current branch name between square brackets. Note that if you're not in a dir with a git repo, this will show nothing, i.e. an empty string.

  • ${PWD/#$HOME/~} this will put the path of the current dir (i.e. the string stored in the PWD env var) next to the git branch name (and replace /home/username with ~), you can remove it if you don't want that behaviour (you'll also want to remove the second "%s" in the printf command).

[2] history -a adds a very useful feature, which I picked up from Mandriva more than a decade ago (thanks, Colin Guthrie :)), it appends the shell history to the history file after you run each command, which means that if you open a new terminal emulator window, you'll find that the shell history has the last command you ran from any other shell session; without 'history -a', the shell history is only appended in one go to ~/.bash_history (or whatever it's called in your distro) after you close the session). You can remove the history -a; part if you don't want that behaviour.

The mystery of load average spikes

Wednesday 8th of September 2021 06:00:00 PM

A while ago, we discovered a KDE server had strange and perfectly periodic spikes in system load average. Every 1 hour 45 minutes like clockwork, the load average would double or triple very briefly.

This caused some actual practical problems. For example, is configured to block new connections if the load average is too high. These spikes made anonsvn refuse connections, which more than once occurred while a release was being created, which caused missing languages in the release because the release script couldn't get translations from anonsvn...

We couldn't figure out what was causing these increases in load average. I waited for when the peak was "due" to happen, looked at top in the server, and nothing seemed out of the ordinary. There was no increased CPU that matched those peaks. We looked at disk I/O, network activity, interrupts, context switches, running processes... nothing seemed to have a correlation to the load average peaks. None of those metrics had noticeable changes that matched the 1h45m frequency.

So what could possibly be causing this? We even suspected a kernel bug or a hardware problem.

Looking at historical metrics

Many KDE servers are actually LXC containers sharing a physical server. Unlike Docker, which is designed for individual applications, these containers run a full Linux distro, init system, etc. We basically treat them like VMs with less overhead. In this case, we have a physical server called Ctenzi, which has two LXC containers: Leptone (hosting KDE Invent / GitLab) and Gallien (hosting MyKDE). We run Telegraf, the agent collecting system metrics, on both the host system and inside each container.

I looked at the oldest historical metrics we had for leptone to see if this problem has always been happening. It turned out that back then we weren't running Telegraf on all servers, we were installing it "as needed", so unfortunately we didn't have metrics from the very beginning of leptone's life. But I found something interesting:

  • 2020-05-09 00:30: I installed Telegraf on leptone, so that's where the graphs start for leptone.
  • 2020-05-09 17:30: I finally made the change to install Telegraf on every server (including the host ctenzi and the other container gallien).

And the metrics we have before 17:30 don't seem to show those peaks:

So... Telegraf is somehow eating CPU on the other two systems? Or they're somehow interferring with each other?

I tried stopping Telegraf on ctenzi and gallien... and it didn't seem to change anything:

[17:57] <nicolas17> the stats we have for leptone between those two times don't appear to have load peaks... [17:57] <nicolas17> is telegraf on ctenzi/gallien causing this?! [17:59] <nicolas17> I will do a test on the next "scheduled" peak [17:59] <nicolas17> in about an hour [18:21] <bcooksley> How could telegraf cause it? [18:21] <bcooksley> That makes no sense... [18:22] <bcooksley> Surely our other servers would be having the same issue in that case [18:22] <bcooksley> Especially Hersili which is a near identical setup [18:22] <bcooksley> With Deino and Telemid [18:22] <bcooksley> It has NVMe storage and spinning rust [18:23] <bcooksley> Only difference is 1TB vs. 512GB NVMe and maybe the CPU? [18:23] <bcooksley> Ctenzi might be Intel vs. Hersili likely being Ryzen? [18:26] <nicolas17> I have no idea why it could be [18:27] <nicolas17> I will stop it on ctenzi and gallien and see if leptone gets a peak again [19:06] <nicolas17> just stopped telegraf on ctenzi and gallien [19:12] <nicolas17> and just got the peak in leptone's graphs [19:12] <nicolas17> so that was not it [19:16] <bcooksley> So it didn't happen for 17 hours, and then started happening [19:17] <bcooksley> Yet the thing that changed at the time... Isn't the cause apparently

We did some other tests (like shutting down GitLab to see if that was the cause) and they also didn't seem to make any difference.

Other servers too

Later we discovered that other physical servers were actually having the same problem, we just hadn't noticed, in some cases because the peaks weren't as high, or because load average from normal activity was more "noisy". Load average peaks on other servers were at the exact same frequency (1h45m), but not on all servers simultaneously.

I tried to overlay lines at the right frequency on top of the graph to see if they happened when "expected" and found it was closer to 1h44m (104 minutes). This was getting more mysterious because the other affected servers had different hardware and different kernel versions.

I still suspected Telegraf could have something to do. So I did what I should have done before.

I Googled "telegraf 104 minutes".

Drifting timers

And sure enough, this did happen to other people. I found issues reported on the Telegraf repository on GitHub titled CPU load due to Telegraf agent (mentioning the 104m interval) and high load average every 1h 45m.

Following some links from there, I found a blog post from Avast where they had a similar problem, with a different metrics-collection agent (collectd), and at a different interval between spikes (~7 hours), but ultimately the same cause.

Apparently what happens is: every 5 seconds, Telegraf polls lots of system metrics simultaneously, using a dozen separate threads. Every 5.004 seconds, the kernel counts how many threads are runnable or blocked and calculates the load average based on that. And every ~104 minutes, those two timers line up exactly, before drifting again.

When the timers line up, at the exact moment the kernel calculates the load average, it sees Telegraf has a dozen running/runnable threads at the same time, and adjusts the load average upwards accordingly. The sudden increase in running threads is very brief, which is why we don't see an increase in CPU usage, but every 104 minutes, the load average calculation catches precisely at the right time.

Where does the "104 minutes" number come from? The kernel calculates load average every 5 seconds plus 1 kernel tick (Linux has an HZ setting with the tick frequency). In the Avast blog post, they mention they have load average spikes every ~7 hours. In their CentOS systems, HZ=1000, so that's every 5.001 seconds. If you add 5.001 every 5 seconds, you arrive at another integer multiple of 5 after 25000s (5×5÷0.001 = 25000s = 6h56m40s). In our Ubuntu servers, HZ=250, so the load average is calculated every 5.004s, which makes them match up after 6250s (5×5÷0.004 = 6250s = 1h44m10s).

And the containers make it worse

By default, Telegraf aligns its timer with the system clock, so that it collects metrics at exactly :00, :05, :10, etc. This means multiple Telegraf processes running on the same server will collect metrics at the same time; they will be in sync with each other. On this particular system there's 3 Telegraf processes running (on the host and the two LXC containers), so when metric collection happens, the number of running threads is 3 times higher.

This is probably why the problem appeared to be absent before Telegraf was installed on the other containers, and why it appears to be absent in some servers. It was actually already happening before, when it was only installed in one container, the peaks are just less noticeable in the graph (especially in lower-resolution historical data). And it happens on every server, it's just less noticeable on servers with only one Telegraf instance running, less metrics to poll, faster CPUs, etc.

I'm not sure why the problem seemed equally bad when I turned Telegraf back off on the other containers as a test. But I suspect the reason is that by now, the one instance on Leptone is doing more work than in the past. For example, it makes two or three SQL queries for GitLab CI statistics.


For now I set round_interval=false. This disables Telegraf's alignment to the system clock, so that metrics collection runs every 5 seconds from whatever time the daemon is started, not at exactly :00, :05, etc. Multiple Telegraf processes on the same server will be "out of phase" and won't run in perfect sync. The load average peaks still happen, the metrics-collection timers still periodically match up with the load average calculation timer, but now the kernel will only catch one Telegraf instance at a time and not all 3 staying in perfect sync, so the peaks are smaller.

I'm not yet sure if this is enough. Maybe I will end up enabling collection_jitter instead, which adds slight randomness to each interval. But for now this solved the issue with anonsvn rejecting connections due to high load.

QCoro 0.2.0 Release Announcement

Wednesday 8th of September 2021 02:00:00 PM

Just about a month after the first official release of QCoro, a library that provides C++ coroutine support for Qt, here’s 0.2.0 with some big changes. While the API is backwards compatible, users updating from 0.1.0 will have to adjust their #include statements when including QCoro headers.

QCoro 0.2.0 brings the following changes:

Library modularity

The code has been reorganized into three modules (and thus three standalone libraries): QCoroCore, QCoroDBus and QCoroNetwork. QCoroCore contains the elementary QCoro tools (QCoro::Task, qCoro() wrapper etc.) and coroutine support for some QtCore types. The QCoroDBus module contains coroutine support for types from the QtDBus module and equally the QCoroNetwork module contains coroutine support for types from the QtNetwork module. The latter two modules are also optional, the library can be built without them. It also means that an application that only uses let’s say QtNetwork and has no DBus dependency will no longer get QtDBus pulled in through QCoro, as long as it only links against libQCoroCore and libQCoroNetwork. The reorganization will also allow for future support of additional Qt modules.

Headers clean up

The include headers in QCoro we a bit of a mess and in 0.2.0 they all got a unified form. All public header files now start with qcoro (e.g. qcorotimer.h, qcoronetworkreply.h etc.), and QCoro also provides CamelCase headers now. Thus users should simply do #include <QCoroTimer> if they want coroutine support for QTimer.

The reorganization of headers makes QCoro 0.2.0 incompatible with previous versions and any users of QCoro will have to update their #include statements. I’m sorry about this extra hassle, but with this brings much needed sanity into the header organization and naming scheme.

Docs update

The documentation has been updated to reflect the reorganization as well as some internal changes. It should be easier to understand now and hopefully will make it easier for users to start with QCoro now.

Internal API cleanup and code de-duplication

Historically, certain types types which can be directly co_awaited with QCoro, for instance QTimer has their coroutine support implemented differently than types that have multiple asynchronous operations and thus have a coroutine-friendly wrapper classes (like QIODevice and it’s QCoroIODevice wrapper). In 0.2.0 I have unified the code so that even the coroutine support for simple types like QTimer are implemented through wrapper classes (so there’s QCoroTimer now)


You can download QCoro 0.2.0 here or check the latest sources on QCoro GitHub.

More About QCoro

If you are interested in learning more about QCoro, go read the documentation, look at the first release announcement, which contains a nice explanation and example or watch recording of my talk about C++20 coroutines and QCoro this years’ Akademy.

More in Tux Machines

Programming Leftovers

  • Announcement : An AArch64 (Arm64) Darwin port is planned for GCC12

    As many of you know, Apple has now released an AArch64-based version of macOS and desktop/laptop platforms using the ‘M1’ chip to support it. This is in addition to the existing iOS mobile platforms (but shares some of their constraints). There is considerable interest in the user-base for a GCC port (starting with - and, of great kudos to the gfortran team, one of the main drivers is folks using Fortran. Fortunately, I was able to obtain access to one of the DTKs, courtesy of the OSS folks, and using that managed to draft an initial attempt at the port last year (however, nowhere near ready for presentation in GCC11). Nevertheless (as an aside) despite being a prototype, the port is in use with many via hombrew, macports or self-builds - which has shaken out some of the fixable bugs. The work done in the prototype identified three issues that could not be coded around without work on generic parts of the compiler. I am very happy to say that two of our colleagues, Andrew Burgess and Maxim Blinov (both from embecosm) have joined me in drafting a postable version of the port and we are seeking sponsorship to finish this in the GCC12 timeframe. Maxim has a lightning talk on the GNU tools track at LPC (right after the steering committee session) that will focus on the two generic issues that we’re tackling (1 and 2 below). Here is a short summary of the issues and proposed solutions (detailed discussion of any of the parts below would better be in new threads).

  • Apple Silicon / M1 Port Planned For GCC 12 - Phoronix

    Developers are hoping for next year's GCC 12 release they will have Apple AArch64 support on Darwin in place for being able to support Apple Silicon -- initially the M1 SoC -- on macOS with GCC. LLVM/Clang has long been supporting AArch64 on macOS given that Apple leverages LLVM/Clang as part of their official Xcode toolchain as the basis for their compiler across macOS to iOS and other products. While the GNU Compiler Collection (GCC) supports AArch64 and macOS/Darwin, it hasn't supported the two of them together but there is a port in progress to change it.

  • Dirk Eddelbuettel: tidyCpp 0.0.5 on CRAN: More Protect’ion

    Another small release of the tidyCpp package arrived on CRAN overnight. The packages offers a clean C++ layer (as well as one small C++ helper class) on top of the C API for R which aims to make use of this robust (if awkward) C API a little easier and more consistent. See the vignette for motivating examples. The Protect class now uses the default methods for copy and move constructors and assignment allowing for wide use of the class. The small NumVec class now uses it for its data member.

  • QML Modules in Qt 6.2

    With Qt 6.2 there is, for the first time, a comprehensive build system API that allows you to specify a QML module as a complete, encapsulated unit. This is a significant improvement, but as the concept of QML modules was rather under-developed in Qt 5, even seasoned QML developers might now ask "What exactly is a QML module". In our previous post we have scratched the surface by introducing the CMake API used to define them. We'll take a closer look in this post.

  • Santiago Zarate: So you want to recover and old git branch because it has been overwritten?
  • Start using YAML now |

    YAML (YAML Ain't Markup Language) is a human-readable data serialization language. Its syntax is simple and human-readable. It does not contain quotation marks, opening and closing tags, or braces. It does not contain anything which might make it harder for humans to parse nesting rules. You can scan your YAML document and immediately know what's going on. [...] At this point, you know enough YAML to get started. You can play around with the online YAML parser to test yourself. If you work with YAML daily, then this handy cheatsheet will be helpful.

  • 40 C programming examples

    C programming language is one of the popular programming languages for novice programmers. It is a structured programming language that was mainly developed for UNIX operating system. It supports different types of operating systems, and it is very easy to learn. 40 useful C programming examples have been shown in this tutorial for the users who want to learn C programming from the beginning.

Devices/Embedded: Asus Tinker Board 2 and More

  • Asus Tinker Board 2 single-board computer now available for $94 and up - Liliputing

    The Asus Tinker Board 2 is a Raspberry Pi-shaped single-board computer powered by a Rockchip RK3399 hexa-core processor and featuring 2GB to 4GB of RAM. First announced almost a year ago, the Tinker Board 2 is finally available for $99 and up. Asus also offers a Tinker Board 2S model that’s pretty similar except that it has 16GB of eMMC storage. Prices for that model start at about $120.

  • Raspberry Pi Weekly Issue #371 - Sir Clive Sinclair, 1940 – 2021

    This week ended with the incredibly sad news of the passing of Sir Clive Sinclair. He was one of the founding fathers of home computing and got many of us at Raspberry Pi hooked on programming as kids. Join us in sharing your Sinclair computing memories with us on Twitter and our blog, and we’ll see you next week.

  • cuplTag battery-powered NFC tag logs temperature and humidity (Crowdfunding) - CNX Software

    Temperature and humidity sensors would normally connect to a gateway sending data to the cloud, the coin-cell battery-powered cuplTag NFC tag instead sends data to your smartphone after a tap. CulpTag is controlled by an MSP430 16-bit microcontroller from Texas Instruments which reads and stores sensor data regularly into an EEPROM, and the data can then be read over NFC with the tag returning an URL with the data from the sensor and battery, then display everything on the phone’s web browser (no app needed).

  • A first look at Microchip PolarFire SoC FPGA Icicle RISC-V development board - CNX Software

    Formally launched on Crowd Supply a little over a year ago, Microchip PolarFire SoC FPGA Icicle (codenamed MPFS-ICICLE-KIT-ES) was one of the first Linux & FreeBSD capable RISC-V development boards. The system is equipped with PolarFire SoC FPGA comprised a RISC-V CPU subsystem with four 64-bit RISC-V (RV64GC) application cores, one 64-bit RISC-V real-time core (RV64IMAC), as well as FPGA fabric. Backers of the board have been able to play with it for several months ago, but Microchip is now sending the board to more people for evaluation/review, and I got one of my own to experiment with. That’s good to have a higher-end development board instead of the usual hobbyist-grade board. Today, I’ll just have a look at the kit content and main components on the board before playing with Linux and FPGA development tools in an upcoming or two posts.

  • What is IoT device management?

    Smart devices are everywhere around us. We carry one in our pocket, watch movies on another while a third cooks us dinner. Every day there are thousands of new devices connecting to the Internet. Research shows that by 2025, more than 150,000 IoT devices will come online every minute. With such vast numbers it is impossible to keep everything in working order just on your own. This brings the need for IoT device management. But what is IoT device management? To answer this question we first need to understand what the Internet of Things (IoT) is.

  • Beelink U59 mini PC with Intel Celeron N5095 Jasper Lake coming soon - Liliputing

    Beelink says the system ships with Windows 10, but it should also supports Linux.

  • Beelink U59 Celeron N5095 Jasper Lake mini PC to ship with 16GB RAM, 512GB SSD - CNX Software

    Beelink U59 is an upcoming Jasper Lake mini PC based on the Intel Celeron N5095 15W quad-core processor that will ship with up to 16GB RAM, and 512 GB M.2 SSD storage. The mini PC will also offer two 4K HDMI 2.0 ports, a Gigabit Ethernet port, WiFi 5, as well as four USB 3.0 ports, and support for 2.5-inch SATA drives up to 7mm thick.

Graphics: Mesa, KWinFT, and RADV

  • Experimenting Is Underway For Rust Code Within Mesa - Phoronix

    Longtime Mesa developer Karol Herbst who has worked extensively on the open-source NVIDIA "Nouveau" driver as well as the OpenCL/compute stack while being employed by Red Hat is now toying with the idea of Rust code inside Mesa.  Karol Herbst has begun investigating how Rust code, which is known for its memory safety and concurrency benefits, could be used within Mesa. Ultimately he's evaluating how Rust could be used inside Mesa as an API implementation as well as for leveraging existing Mesa code by Rust. 

  • KWinFT Continues Working On WLROOTS Render, Library Split

    KWinFT as a fork of KDE's KWin X11/Wayland compositor code continues making progress on driving fundamental display improvements and ironing out the Wayland support.  KWinFT has been transitioning to use WLROOTS for its Wayland heavy-lifting and that process remains ongoing. KWinFT has also been working on splitting up its library code to make it more manageable and robust.  Among the features still desired by KWinFT and to be worked on include input methods, graphical tablet support, and PipeWire video stream integration. Currently there are two full-time developers working on the project but they hope to scale up to four to five full-time developers. 

  • Raytracing Starting to Come Together – Bas Nieuwenhuizen – Open Source GPU Drivers

    I am back with another status update on raytracing in RADV. And the good news is that things are finally starting to come together. After ~9 months of on and off work we’re now having games working with raytracing.

  • Multiple Games Are Now Working With RADV's Ray-Tracing Code - Phoronix

    Not only is Intel progressing with its open-source ray-tracing driver support but the Mesa Radeon Vulkan driver "RADV" has been rounding out its RT code too and now has multiple games correctly rendering. Bas Nieuwenhuizen has been spearheading the RADV work on Vulkan ray-tracing support and after more than a half-year tackling it things are starting to fall into place nicely.Games such as Quake II RTX with native Vulkan ray-tracing are working along with the game control via VKD3D-Proton for going from Direct3D 12 DXR to Vulkan RT. Metro Exodus is also working while Ghostrunner and Doom Eternal are two games tested that are not yet working.

Audiocasts/Shows: Full Circle Weekly News, Juno Computers, Kali Linux 2021.3