Skip to content

Welcome to Planet KDE

This is a feed aggregator that collects what the contributors to the KDE community are writing on their respective blogs, in different languages

Monday, 17 March 2025

Optimization in Akonadi, configurable holiday region in Merkuro and progress on Krita Qt6 port

Welcome to a new issue of "This Week in KDE Apps"! Every week we cover as much as possible of what's happening in the world of KDE apps.

Last week we released the beta for KDE Gear 25.04 and focused on polishing the coming release.

Creative Apps

Krita Digital Painting, Creative Freedom

The developer teams continued to improve the Qt6 port of Krita. Dmitry fixed the HDR support on Windows (Dmitry Kazakov, link). Freya fixed an OpenGL crash on macOS (Freya Lupen, link).

Personal Information Management Apps

Akonadi Background service for KDE PIM apps

Carl Schwan reduced the memory usage of various Akonadi resources by around 75% each. The optimized resources, which take advantage of this new API, are the following: Birthday, VCard files and directories, Ical, Mbox, Open-Xchange, cardDAV and calDAV. There is already significant progress done in that direction also for the IMAP and POP3 resources. The technical background behind this is that these resources running as independent processes are now using non-visual QCoreApplication instead of the more powerful QApplication, which is more appropriate resource wise for background services. This is part of the Don't depend on QtWidgets in lower parts of the stack milestones. (Carl Schwan, 25.08.0. Link 1, link 2, link 3, link 4, link 5, link 6, link 7, link 8, link 9, link 10, link 11, ...)

Daniel made a change to ensure that operations in Akonadi that operate on a large number of items are processed as multiple smaller batches which the SQL engine can then handle (Daniel Vratil, 25.08.0. Link).

Merkuro Calendar Manage your tasks and events with speed and ease

Tobias ported Merkuro Calendar to the new QML declaration which slightly improves the performance but more importantly enables us to take advantage of the QML tooling (Tobias Fella, 25.04.0. Link).

Carl made the region used to display holidays configurable. You can also select more than one region now (Carl Schwan, 25.04.0. Link)

Kleopatra Certificate manager and cryptography app

Tobias moved the notepad feature to a separate window, which means it's now possible to have multiple notepads open at the same time (Tobias Fella, 25.08.0. Link).

Tobias also ensured the GPG password prompt (pinentry) in Kleopatra is properly parented to the correct parent window on Wayland (Tobias Fella, 25.04.0. Link). Other apps using GPG were also fixed.

KOrganizer KOrganizer is a calendar and scheduling application

Allen made a series of small improvements and bugfixes to Korganizer. He improved the configure view menu action description (link), added more information to the delete folder dialog (link), and added a search option to consider the current view filters. (Link).

Social Apps

NeoChat Chat on Matrix

James improved the thread support. Now it is possible to open a context menu for the individual thread messages (James Graham, 25.08.0. Link).

Kaidan Modern chat app for every device

Melvin fixed downloading files (Melvin Keskin, link 1 and link 2).

Graphics and Multimedia Apps

Amarok Rediscover your music

Tuomas fixed some database and encoding issues. (Tuomas Nurmi, link)

digiKam Photo Management Program

The digiKam team released version 8.6.0. of the powerful photo classifying and editing tool. Among many other things, digiKam now comes with a smarter face management tool, an improved auto-tagging system that identifies elements in your images, fully automatic red-eye removal, and a new image quality feature that classifies images according to their aesthetic quality. The digiKam developers also fixed 140 bugs.

You can read more about this release on digiKam's website.

System Apps

Kate Advanced text editor

Javier Guerra added text search to the build output. (Javier Guerra, 25.08.0. Link)

Leo Ruggeri made the reset history menu button only visible when relevant. (Leo Ruggeri, 25.08.0. Link)

Educational Apps

GCompris Educational game for children

Bruno Anselme added a 6th level to the Guess 24 game. (Bruno Anselme, Link)

Utilities

KTrip Public transport navigator

Volker improved the history of past searches in KTrip by reusing some code from Itinerary. The biggest improvements are that the list is now de-duplicated, and the model supports more features not yet exposed to the UI. (Volker Kruase, 25.08.0. Link)

Other

Luigi removed Qt5 support in Minuet and Step.

…And Everything Else

This blog only covers the tip of the iceberg! If you’re hungry for more, check out Nate's blog about Plasma and be sure not to miss his This Week in Plasma series, where every Saturday he covers all the work being put into KDE's Plasma desktop environment.

For a complete overview of what's going on, visit KDE's Planet, where you can find all KDE news unfiltered directly from our contributors.

Get Involved

The KDE organization has become important in the world, and your time and contributions have helped us get there. As we grow, we're going to need your support for KDE to become sustainable.

You can help KDE by becoming an active community member and getting involved. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine! You don’t have to be a programmer either. There are many things you can do: you can help hunt and confirm bugs, even maybe solve them; contribute designs for wallpapers, web pages, icons and app interfaces; translate messages and menu items into your own language; promote KDE in your local community; and a ton more things.

You can also help us by donating. Any monetary contribution, however small, will help us cover operational costs, salaries, travel expenses for contributors and in general just keep KDE bringing Free Software to the world.

To get your application mentioned here, please ping us in invent or in Matrix.

Sunday, 16 March 2025

I just got myself a brand new car: an ID.Buzz with seven seats so that I can fit the whole family at once. I’m very happy with the car this far, but since it has connectivity, I want to see if I can integrate it into HomeAssistant.

To do this, I wanted to use the CarConnectivity project by Till Steinbach. It is a Python package that comes in a few parts. The main project, a Volkswagen connector, an MQTT bridge and a HomeAssistant MQTT discovery helper.

Having played with the software for a bit (and reported a bug that Till fixed asap – I’m impressed!) I decided to setup the whole thing on my little RaspberryPi that runs a few little services I use around the house.

Preparing this, I setup a new user and installed the software in a Python virtual environment:

sudo adduser carconnectivity
sudo su carconnectivity
cd
mkdir carconnectivity
cd carconnectivity/
python -m venv venv
source venv/bin/activate
pip install carconnectivity-connector-volkswagen==0.5a1 carconnectivity-plugin-mqtt carconnectivity-plugin-mqtt_homeassistant
vim carconnectivity.json

Using the vim command, I created the CarConnectivity configuration file. Update usernames, passwords and IPs to your needs. I will experiment with the interval parameter, as I don’t want to discharge the 12v battery by querying the car too much.

{
        "carConnectivity": {
                "log_level": "error",
                "connectors": [
                        {
                                "type": "volkswagen",
                                "config": {
                                        "interval": 1800,
                                        "username": "hello@example.com",
                                        "password": "secret"
                                }
                        }
                ],
                "plugins": [
                        {
                                "type": "mqtt",
                                "config": {
                                        "broker": "my-mqtt.local",
                                        "username": "user",
                                        "password": "secret"
                                }
                        },
                        {
                                "type": "mqtt_homeassistant",
                                "config": {}
                        }
                ]
        }
}

Having configured the service (and having run it manually to fix my mistakes) I created the carconnectivity.service systemd service shown below (in /etc/systemd/system):

[Unit]
Description=Car Connectivity to MQTT
After=network-online.target

[Service]
Type=simple
User=carconnectivity
Group=carconnectivity
WorkingDirectory=/home/carconnectivity/carconnectivity/
Environment="LC_ALL=sv_SE"
ExecStart=/home/carconnectivity/carconnectivity/venv/bin/carconnectivity-mqtt /home/carconnectivity/carconnectivity/carconnectivity.json

[Install]
WantedBy=multi-user.target

And then I started and enabled the service.

sudo systemctl start carconnectivity
sudo systemctl enable carconnectivity

Finally, I had a look at the status and made sure that everything looks ok.

sudo systemctl status carconnectivity

And, viola, the car shows up as a device in Home Assistant. Magic!

Saturday, 15 March 2025

The FreeBSD Foundation exists to support the FreeBSD community and the FreeBSD project. Some of its projects are aimed at improving the experience of FreeBSD on specific hardware. There is an ongoing, and expanding, laptop experience project. To expand that project further, the foundation has provided Framework laptops to a bunch of developers working on the FreeBSD laptop and desktop experience. I’m one of those developers, and here are some initial notes on the process. The notes assume experience with FreeBSD.

Some disclaimers up front: the FreeBSD foundation is a lot like KDE e.V., which supports the KDE community and project. I wear a board hat for KDE e.V., but on the FreeBSD side I’m “just a ports developer”. Of course, the ports I try to work on are the KDE ones, so there’s a happy synergy here.

An anonymous donor sponsored these machines. While I am part of the FreeBSD donations@ team, I was not involved in the overall decision-making around this donation.

The machine I got is a Framework 13 with an AMD 7000 series CPU. That’s not the very-very latest one, which has a Ryzen 300 series in it, but it is at least 3 CPU generations newer than any other machine I have. For me in particular of interest is that it has the same GPU series, AMD Polaris 12, as my FreeBSD 14-STABLE desktop machine, so I can share experimentation with graphics drivers between them.

I picked the 2.8K display with rounded corners, because that’s potentially an interesting edge-case for the KDE Plasma 6 desktop; if there’s any funny-stuff needed for those corners, then we need to know about it.

Let’s Get Physical

Although it’s completely irrelevant for the long-term use of the laptop, I’ve got to hand it to the Framework folks: the packaging is really nice. Recyclable cardboard, well-laid-out, understandable boxes. I don’t often get a “huh, that’s clever” reaction when unpacking consumer electronics.

There’s a screwdriver included, cunningly hidden beneath the do-it-yourself-installation memory modules. That’s clever.

When it comes to putting the machine together, the installation guide with videos is both comprehensive and easy-to-follow. “Put DDR5 SO-DIMM modules in corresponding sockets” and “insert NVMe into socket” is straightforward, I do that all the time when (re)building desktop machines.

The bezel, on the other hand …

The bezel around the screen is just a thin bit of plastic. I got a red one, because FreeBSD (there is no KDE Blue option). It is essential to place it correctly, with all the screen-cables nicely aligned. I did not, and just clicked the bezel in place, pushed down on it and then closed the laptop, “per the instructions”. Except the bezel stuck out about 2mm, and on re-opening the laptop, it just about tore the bezel in half.

After 20 tricky minutes I could get the laptop open again and removed the bezel, repaired it, and tried again. I don’t really have a suggestion to improve the bezel installation except “try very carefully to close the laptop a bit, re-open, close a bit further, re-open, …” until it’s clear that the lid closes properly. Take some time to (re)route the cables to the screen so that they are as flat as possible.

Accessories

The little modules for the Framework laptop are pretty nifty. I’m already thinking I should have gotten an additional USB-C one. I selected one unusual module, RJ-45 wired ethernet, because my experience with FreeBSD and WiFi is not a good one. However, that’s what this whole laptop project is for. The FreeBSD Foundation has already funded work on laptop WiFi, so it’s probably over-cautiousness on my part.

With all the physical bits in place, the big question…

Will it run Doom?

Framework 13 AMD DIY build with FreeBSD 14.2 boot screen. It sure looks like it could be Doom.
Framework 13 AMD DIY build with FreeBSD 14.2 boot screen. It sure looks like it could be Doom.

Of course. Don’t be silly.

Will it run FreeBSD?

Yes, but that takes a little bit of effort. Download a FreeBSD 14.2 image and write it to a USB stick on some other machine. Leave it on your desk for now.

Boot the Framework laptop for the first time and let it do memory training and whatnot. Do not connect any devices and let it complain that there’s nothing to boot.

Reboot, still with nothing attached, and spam F2 during boot. You have to do this to get to the EFI shell / system configuration before it tries to boot anything. Disable secure boot. Linuxes have a signed GRUB shim nowadays, or other bits and pieces so they work with secure boot. FreeBSD 14.2 does not, yet.

Now insert the USB stick, reboot, and go through the installer process. It’s a text installer (still, as I still haven’t built FreeBSD support in Calamares) and gets you to a working system in about 5 minutes. Having the wired ethernet helps avoid any trouble here.

Reboot after installation and you can get a text console. All that technology for a late-80s user experience.

Will it run X11?

Yes, but the 14.2-RELEASE Errata point out that DRM kernel modules do not work if you grab the pre-built ones. This was true on March 12th 2025, so:

  • Run pkg to install the package manager (initially it is a stub)
  • Run pkg install git to install git (this pulls in a surprising amount of other stuff)
  • Get the system sources (with git)
  • Rebuild the world and install it
  • Get the ports tree (with git)
  • Build graphis/drm-61-kmod from ports (just make ; make install, and the port itself is a real quick build)
  • Build graphics/gpu-firmware-amd-kmod from ports

After that, enable the amdgpu module in rc.conf, or load it by hand. Any old X11 stuff will do, but I suggest installing x11/kde and x11/sddm.

Will it run KDE Plasma 6 Wayland?

Hahaha. No. But yes.

KDE Plasma 6 on Wayland in general works. But on this specific machine, with this specific grapics card, Plasma starts, all the processes of a KDE Plasma desktop are running, and the screen displays a single white text-cursor in the upper-left corner.

It’s not this-specific-machine, either, since I have a desktop with Intel CPU and an AMD RX550 video card that behaves the same.

Last time I dug into KWin internals in an attempt to figure this out I ended up with “some part of the OpenGL stack is lying” and then gave up. Now with a fresh laptop that just cries out for a modern desktop, I’m going to try again.

KDE Mascot
KDE Mascot

Thank you everyone for keeping the lights on for a bit longer. KDE snaps have been restored. I also released 24.12.3! In addition, I have moved “most” snaps to core24. The remaining snaps need newer qt6/kf6, which is a WIP. “The Bad luck girl” has been hit once again with another loss, so with that, I will be reducing my hours on snaps while I consider my options for my future. I am still around, just a bit less.

Thanks again everyone, if you can get me through one more ( lingering broken arm ) surgery I would be forever grateful! https://gofund.me/d5d59582

Welcome to a new issue of "This Week in Plasma"! Every week we cover the highlights of what's happening in the world of KDE Plasma and its associated apps like Discover, System Monitor, and more.

This week, Plasma 6.4 began to take shape. A bunch of impactful features and UI improvements landed, not to mention some juicy technical changes in the form of a newly-implemented Wayland protocol and HDR energy efficiency improvements. Just a whole lot of good stuff! Check it out below:

Notable new Features

Plasma 6.4.0

After being punted from Plasma 6.3, per-virtual-desktop custom tile layouts are now implemented for 6.4! (Vlad Zahorodnii, link)

Clicking the "Details" button on a system notification showing file transfer progress will now reveal a graph showing the transfer speed over time! (Méven Car, link)

You can now fully disable System Tray icons provided by apps that lack an internal setting for this (looking at you, Discord). Note that this could potentially break apps as they won't know their tray icon isn't being shown, so only use this feature if you know what you're doing! A warning message explains this, too. (Nate Graham, link)

Notable UI Improvements

Plasma 6.3.4

Plasma's sidebar-style UI elements (e.g. the Activity Switcher sidebar) now overlap panels when shown outside of Edit Mode. This looks nicer and helps communicate focus better. (Niccolò Venerandi, link)

Plasma 6.4.0

Improved KRunner search result ordering by adding the power and session actions into the default set of favorite actions, ensuring they appear first when searched for. (Nate Graham, link)

Refined the heuristic for when a panel widget's popup will be displayed centered on the panel or the screen, so that it happens more often in cases where you obviously configured your panel with this in mind. (Niccolò Venerandi, link)

In the panel configuration dialog, the little wireframe visualizations for options now all visually reflect their panel's actual position on screen. (Niccolò Venerandi, link)

You can now configure which modifier keys plus a scroll trigger KWin's zoom effect. (Vlad Zahorodnii, link)

Improved keyboard navigation in KRunner's popup: now if the pointer happens to be hovering over an item, you can still use the arrow keys to move the selection highlight to a different item. (Christoph Wolk, link)

If you're being slowly driven mad by the system notification telling you how to regain control when an app like Input Leap is using the input devices, you can now disable it like you can any other notification. (David Redondo, link)

Plasma widgets in the System Tray that hide completely when they deem themselves not relevant no longer do this when placed in standalone form on the panel; we reasoned that in this case, if you put them there yourself, you probably always want to see them! (Niccolò Venerandi, link)

Widgets using the ExpandableListItem component — commonly seen in the System Tray — now display tooltips on hover for any list items with labels so long they've become elided. This was very uncommon, which is how we missed it until now! (Kai Uwe Broulik, link)

When you've configured the Kickoff Application Launcher to only show app names or only show app descriptions, you'll no longer see tooltips with the labels you said you didn't want. (Nate Graham, link)

Frameworks 6.13

Implemented touch scrolling in open/save dialogs. (Marco Martin, link)

Improved KRunner search result ordering in another way as well, by returning to the older style of strictly respecting the ordering that the user user configured. (Nate Graham, link)

Notable Bug Fixes

Plasma 6.3.3

Fixed a bug that could cause Discover to get stuck refreshing forever following flaky network connectivity. (Aleix Pol Gonzalez, link)

Fixed some layout glitches affecting the folder chooser dialog at certain window sizes. (Luke Horwell, link)

Plasma 6.3.4

Fixed a bug that would cause fit-content panels with Task Manager widgets on them to not immediately shrink as expected when apps or windows were closed. (Niccolò Venerandi, link)

Fixed a glitch in the Bluetooth wizard's scrollable device view that made scrolling using a touchscreen unreliable. (Marco Martin, link)

Plasma 6.4.0

A notorious Plasma 6 panel bug has been fixed: now when there are multiple panels sharing the same screen edge, they're all displayed properly, and reserve only as much space away from the screen edge as the thickest panel. (Niccolò Venerandi. link 1 and link 2)

Fixed a visual glitch involving the ruler for resizing custom-length panels in auto-hide mode. (Niccolò Venerandi, link)

Other bug information of note:

Notable in Performance & Technical

Plasma 6.3.4

Improved the pixel-perfection of various KWin effects, including Wobbly Windows. (Xaver Hugl, link)

Plasma 6.4.0

KWin's codebase has been formally split between an X11 version and a Wayland version, allowing the Wayland version to develop faster and the X11 version to avoid accumulating bugs due to changes in a shared base combined with a lack of testing (82% of users with telemetry turned on use Wayland now). This will continue until Plasma 7, at which point it's highly likely the dedicated X11 session will be removed. Note that the Wayland-only version will continue to run XWayland-using apps just as it can right now. More information about this can be found in Vlad's blog post on the topic!

Added support for P010 color-formatted videos, improving power efficiency for playing full-screen HDR video content. (Xaver Hugl, link)

Implemented support for the get_input_idle_notification Wayland Protocol. (Xaver Hugl, link)

Improved the reliability with which the Power & Battery widget is able to detect and display battery information for Bluetooth devices. (Kai Uwe Broulik, link)

It's no longer possible to create new Plasma Vaults using the EncFS encryption system, as it's been discontinued and has known security vulnerabilities. You can still use existing EncFS vaults; you just can't create new ones. (Nate Graham, link)

Continued to resolve binding loops and QML warnings throughout Plasma, succeeding at handling a large fraction of the ones seen in basic usage that are within KDE's power to resolve without Qt changes. (Christoph Wolk, link 1, link 2, link 3, link 4, link 5, link 6, link 7, link 8, link 9, link 10, link 11, link 12, link 13, link 14, link 15, and link 16)

How You Can Help

KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.

You can help KDE by becoming an active community member and getting involved somehow. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine!

You don’t have to be a programmer, either. Many other opportunities exist:

You can also help us by making a donation! Any monetary contribution — however small — will help us cover operational costs, salaries, travel expenses for contributors, and in general just keep KDE bringing Free Software to the world.

To get a new Plasma feature or a bugfix mentioned here, feel free to push a commit to the relevant merge request on invent.kde.org.

Dear digiKam fans and users,

After four months of active maintenance and many weeks triaging bugs, the digiKam team is proud to present version 8.6.0 of its open source digital photo manager.

The digiKam team has continued to work on a better Artificial Intelligence integration in digiKam, and many parts have been improved with the 8.6.0 release.

Friday, 14 March 2025

This is a recipe post. I loathe and despise recipe sites, but this is one I regularly need to look up. In Canadian measures, which is what I still do my baking in even after 30 years in Europe.

Mix well and let stand while collecting the rest:

  • 1½ cups rye bran
  • 1 c. milk
  • ½ tsp. salt

Ready:

  • ⅓ c. oil
  • 1 egg

Ready:

  • ⅔ c. brown sugar
  • 1 c. flour
  • 2 tsp. baking powder
  • ½ c. raisins

Mix the wets. Stir in the drys. Fill muffin pan. Bake 25 minutes at 180℃. Makes 11 muffins because my muffin pan has one broken cup. Uses rye bran because the local windmill has that “left over” as animal feed after milling rye – apparently very few people in the Netherlands use bran anyway, and rye bran even less so. Instead of flour and baking powder use zelfrijzend bakmeel.

Edit: reduce sugar to ½ cup and add 1 tbsp. of molasses to improve flavor and color and reduce sweetness.

Let’s go for my web review for the week 2025-11.


Kill your Feeds - Stop letting algorithms dictate how you think

Tags: tech, social-media, criticism

Simple steps to escape the algorithmic social media circus.

https://usher.dev/posts/2025-03-08-kill-your-feeds/


Music labels will regret coming for the Internet Archive, sound historian says

Tags: tech, culture, archive, history, law, copyright

Once again the music labels can’t understand the cultural value of building archives. Let’s hope they loose the lawsuit.

https://arstechnica.com/tech-policy/2025/03/music-labels-will-regret-coming-for-the-internet-archive-sound-historian-says/


What does “PhD-level” AI mean? OpenAI’s rumored $20,000 agent plan explained

Tags: tech, ai, machine-learning, gpt, marketing, business

Here we go for a brand new marketing stunt from OpenAI. You can also tell the pressure is rising since all of this is still operating at a massive loss.

https://arstechnica.com/ai/2025/03/what-does-phd-level-ai-mean-openais-rumored-20000-agent-plan-explained/


Microsoft is reportedly plotting a future without OpenAI

Tags: tech, ai, machine-learning, gpt, microsoft, business

Are we surprised? Not really… This kind of struggle was an obvious outcome from the heavy dependencies between both companies.

https://techstartups.com/2025/03/07/microsoft-is-plotting-a-future-without-openai/


Cognitive Behaviors that Enable Self-Improving Reasoners, or, Four Habits of Highly Effective STaRs

Tags: tech, ai, machine-learning, gpt, cognition, research

I like this kind of research as it also says something about our own cognition. The results comparing two models and improving them are fascinating.

https://arxiv.org/abs/2503.01307


Google’s Gemma 3 is an open source, single-GPU AI with a 128K context window

Tags: tech, ai, machine-learning, gpt

More smaller footprint models are becoming available. This is becoming interesting (even though the open source claim is overrated here).

https://arstechnica.com/gadgets/2025/03/googles-new-gemma-3-ai-model-is-optimized-to-run-on-a-single-gpu/


Why extracting data from PDFs is still a nightmare for data experts

Tags: tech, ai, machine-learning, gpt, ocr, computer-vision

So much data trapped in PDFs indeed… Unfortunately VLM are still not reliable enough to be unleashed without tight validation of the output.

https://arstechnica.com/ai/2025/03/why-extracting-data-from-pdfs-is-still-a-nightmare-for-data-experts/


A Quick Journey Into the Linux Kernel

Tags: tech, linux, kernel, programming

Nice exploration of the important areas in the kernel.

https://www.lucavall.in/blog/a-quick-journey-into-the-linux-kernel


Standards for ANSI escape codes

Tags: tech, unix, command-line, terminal, standard

A nice glimpse into the maze of the escape codes on the terminal.

https://jvns.ca/blog/2025/03/07/escape-code-standards/


Tech Notes: Rust trait object layout

Tags: tech, rust, type-systems, memory

OK more questions than answers I guess… That said, it shows interesting differences in design choices with C++ to support the traits system.

https://neugierig.org/software/blog/2025/03/trait-object-layout.html


When are Rust’s const fns executed?

Tags: tech, rust, compiler, optimization

A quick primer about compile time evaluations in Rust.

https://felixwrt.dev/posts/const-fn/


Why do I find Rust inadequate for codecs?

Tags: tech, rust, c, codec, performance, safety

Interesting reasons to let go of Rust, some spaces indeed can have a safety vs performance tradeoff which would justify using good old C.

https://palaiologos.rocks/posts/rust-codecs/


The Art of Formatting Code

Tags: tech, programming, tools, unicode

Ever wondered how to make a code formatter? This post does a good job showing the main problems you might encounter. The impact of Unicode is especially funny. Very interesting stuff.

https://mcyoung.xyz/2025/03/11/formatters/


Idiomatic Go

Tags: tech, programming, go

An evolving list of how to write idiomatic Go.

https://dmitri.shuralyov.com/idiomatic-go


Building Websites With Lots of Little HTML pages

Tags: tech, web, frontend, css

You can really do a lot with CSS transitions nowadays.

https://blog.jim-nielsen.com/2025/lots-of-little-html-pages/


Post-Processing Shaders as a Creative Medium - Maxime Heckel’s Blog

Tags: tech, gpu, shader, web

Nice set of tricks for post-processing effects all centering around pixelated patterns. Really neat.

https://blog.maximeheckel.com/posts/post-processing-as-a-creative-medium/


What Makes Code Hard To Read: Visual Patterns of Complexity

Tags: tech, programming, maintenance

The whole field is unfortunately a bit fuzzy. That said, this article gives interesting ideas about what to pay attention to when writing code to ease the readability.

https://seeinglogic.com/posts/visual-readability-patterns/


How Long Should Functions Be? - by Kent Beck

Tags: tech, engineering, craftsmanship, quality, tdd, programming

Nice post. Explains well why the answer is not a number to target. You want to impact the distribution.

https://tidyfirst.substack.com/p/how-long-should-functions-be


How to Write Useful Commit Messages

Tags: tech, version-control, codereview

Might be going a bit far if you use everything listed here. That said, it gives lots of good ideas so you might want to decide on what you should adopt on your project.

https://refactoringenglish.com/chapters/commit-messages/


CSS Relative Colors

Tags: tech, web, css, colors

Nice new tricks to specify colours in CSS.

https://ishadeed.com/article/css-relative-colors/


Stewardship over ownership

Tags: tech, engineering, maintenance, leadership

I like this. Sometimes a simple word can make all the difference in the way we behave. Code stewardship is indeed a better word.

https://ntietz.com/blog/stewardship-over-ownership/


The Staff+ Performance Cliff

Tags: tech, leadership, management, learning

It’s indeed not easy to go from individual contributions, to team level leadership, to organisation level leadership. Many things need to be learned or relearned at each step.

https://sylormiller.com/posts/2025/staff-plus-cliff/


There is No Automatic Reset for Engineering

Tags: tech, quality, project-management, product-management

Interesting thinking around a portfolio of activities. You can prioritise differently within it to manage quality vs speed of delivery over time.

https://agileotter.blogspot.com/2025/03/there-is-no-automatic-reset-in.html?m=1


Reducing Power Gradients - Psych Safety

Tags: organization, management, power, psychology

Interesting tips to reduce the power dynamics in organisations.

https://psychsafety.com/reducing-power-gradients/



Bye for now!

Friday, 14 March 2025

KDE today announces the release of KDE Frameworks 6.12.0.

KDE Frameworks are 72 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

Baloo
  • [FileContentIndexer] Avoid race on updatedFiles modification. Commit.
  • Extractor: don't try to extract when index failed. Commit. Fixes bug #498236
Breeze Icons
  • Remove themed SmartGit icon. Commit.
  • Let the GNOME icon loader re-color our window-close icons. Commit. Fixes bug #500950
  • Add -symbolic symlinks for value-decrease/increase. Commit. Fixes bug #494086
  • Add MIME-type icons for kdenlive project files. Commit.
  • Fix fill-rule-even-odd.svg and fill-rule-nonzero.svg. Commit.
  • Borrow debug function from Qt documentation. Commit.
  • Simplify qrcAlias to not use as much memory. Commit.
  • Force folder creation. Commit.
  • Remove inkscape icons. Commit.
  • Safe half of memory for duplicate checking. Commit.
  • Add battery-profile-balanced symlink. Commit.
Extra CMake Modules
  • Consider BSL-1.0 as GPL-compatible. Commit.
  • Improve docs for ECM QML modules. Commit.
  • Drop old > 2 cmake version conditional branch. Commit.
  • Require cmake >= 3.16 for the tests too. Commit.
  • Add tests for KDE_INSTALL_APP_TEMPLATES. Commit.
  • Unless setting KDE_INSTALL_APP_TEMPLATES, kde_package_app_templates is skipped when cross-compiling. Commit.
  • Try to also satisfy Google Play's version code constraints. Commit.
  • Generate Gradle version include file as part of ecm_add_android_apk(). Commit.
KArchive
  • KF6 TODOs are now KF7 TODOs. Commit.
  • Kgzipfilter.cpp use nullptr instead of zero. Commit.
  • Use 'const QString' declarations for test filenames. Commit.
  • Move all test data files to data directory. Commit.
  • 7zip: Add default naming for files without a name. Commit. Fixes bug #496175
  • Add error checking for writing back temp files in KTar. Commit.
  • Handle errors in KTar::writeLonglink. Commit.
  • Remove stale TODO. Commit.
  • Refactor KXzFilter::init to use QScopeGuard. Commit.
KCalendarCore
  • Codespell fixes (minor). Commit.
  • Calfilter.cpp - CalFilter::filterIncidence() bail on null incidence. Commit.
  • Recurrence.cpp - shiftTimes() prevent crash on missing or invalid period. Commit. Fixes bug #499470
KCMUtils
  • ScrollView: don't move focus to empty toolbar. Commit.
  • Kcmultidialog: set AccessibleName for ScrollArea. Commit.
  • Kcmultidialog: only focus ScrollArea if scrollable. Commit.
  • Src/kcmultidialog.cpp - prevent a crash in KCMultiDialogPrivate::apply(). Commit.
  • Restore non-default highlight for widget kcms. Commit.
KCodecs
  • Move entities table into read-only data section. Commit.
  • Binary search instead of gperf. Commit.
KConfigWidgets
  • KRecentFilesAction: Don't call into QMimeDatabase to get what we already have. Commit.
KCoreAddons
  • Declare KFormat option flag operators. Commit.
  • Add missing break in switch statement. Commit.
KDeclarative
  • KeySequenceItem: Only steal shortcut if the user accepted. Commit.
KDE Daemon
  • Add Restart=on-failure to plasma-kded6 service configuration. Commit.
KFileMetaData
  • [dump] Always build utility, even when tests are disabled. Commit.
  • [XmlExtractor] Use non-deprecated QDomDocument::setContent overload. Commit.
  • [dump] Build/install utility even when tests are disabled. Commit.
  • Exiv2: Avoid calling enableBMFF for exiv2 >= 0.28.3. Commit.
  • Odf: port to new QDomDocument::setContent version. Commit.
  • [autotests] Remove leftover unused CMake variable. Commit.
  • [ExtractorPlugin] Declare private helpers as deprecated. Commit.
  • [ExtractorCollection] Warn if metadata is invalid. Commit.
  • [ExtractorCollection] Warn if an extractor has no metadata. Commit.
  • [ExtractorPlugin] Improve documentation. Commit. See bug #398101
  • [ExtractorPlugin] Define the interface ID in a single place. Commit.
KGuiAddons
  • Add KKeySequenceRecorder patterns. Commit.
KHolidays
KIconThemes
  • Do not remove all instances of "-symbolic" at once. Commit.
KImageformats
  • Use of heif_context_add_XMP_metadata instead. Commit.
  • Sct: qRound with param bigger than max int is undefined. Commit.
  • Sct: Use height instead of width when calculating dotsPerMeterY. Commit.
  • MicroExif: search for the TIFF signature. Commit.
  • MicroExif: API improvements and minor bugfixes. Commit.
  • Fix compilation error. Commit.
  • Added support for resolution and EXIF/XMP metadata to HEIF. Commit.
  • JXR: Added rotation (transformation) support. Commit.
  • JXR: added support to EXIF metadata. Commit.
  • AVIF: added support to XMP and EXIF metadata. Commit.
  • Added pixel limit detected by experimental tests. Commit.
  • Jxl: fix build with Qt before 6.8.0. Commit.
  • JP2: Disable ICC profile writing when saving an image with OpenJPEG V2.5.3 or lesser and improve the format detection on reading. Commit.
  • Heif: improve handling of grayscale ICC profiles. Commit.
  • Improve printing details when writetest fails. Commit.
  • Update HEIF writetest templates. Commit.
  • Added JXL to CMYK formats. Commit.
KIO
  • KFileItem: fix stat() argument for URLs with local hostname. Commit.
  • KUrlNavigatorButton: Use icon name we got after stat. Commit.
  • KUrlNavigatorButton: Look up icon only when URL is set. Commit.
  • Add background to KUrlNavigator. Commit. See bug #475106
  • Add Fedora Packages search. Commit.
  • Add kde icons to web shortcuts. Commit.
  • Urifilters: Change the query url for wordreference.com. Commit.
  • Remove the spaces between words in the DuckDuckGo provider. Commit.
  • Shorten the Wikipedia search provider. Commit.
  • Kurlnavigator: restrict middle click pasting from selection clipboard. Commit. Fixes bug #486229
  • Filewidgets/kfilefiltercombo: std::copy_if instead of std::remove_if without std::erase. Commit.
  • KDirListerTest:testDeleteCurrentDir: there can be duplicated delete events. Commit.
  • Widgets/kabstractfileitemactionplugin: update header documentation. Commit.
  • Widgets/kabstractfileitemactionplugin: add a TODO KF7. Commit.
  • Fail loading admin.so outside of the KIO PLUGINDIR. Commit.
  • PreviewJob: Don't try to get thumbnail for empty files. Commit.
  • Update broken links in kde_apps urifilter. Commit. Fixes bug #498278
Kirigami
  • ScrollablePage: fix width and height binding loops. Commit. Fixes bug #459284
  • Columnview: Fill width column when only one column is present. Commit.
  • Platform: Use the old color set for disabled colors in PlatformTheme. Commit. Fixes bug #495694
  • Add a PageStack attached property. Commit.
  • Dialog: fix width and height binding loops. Commit. Fixes bug #494420
  • Controls, layouts: set Accessible.name for Mnemonics. Commit.
  • Mnemonicattached: add plainTextLabel property. Commit.
  • Primitives/Separator: mark as non-focusable for a11y. Commit.
KNotifications
KPTY
KStatusNotifieritem
  • Do not crash if KDE platform integration is loaded but SNI is unavailable. Commit. Fixes bug #350785
KTextEditor
  • Remove static_assert to avoid compiler warnings. Commit.
  • Add "gc" motion for vim to Toggle Comment. Commit. Fixes bug #490195
  • Fix boundary condition in argument hint navigation. Commit.
  • Fix line no info tooltip persists on right click. Commit.
  • Improve wording of Copy as HTML whatsthis. Commit.
  • Add "Copy as HTML" to context menu. Commit.
  • Don't reset revision on reload but increment it. Commit. Fixes bug #499311
  • Katedocument: Optimize mimeType. Commit.
  • Compute at least inside cursorToX with floats. Commit. Fixes bug #499669
  • Fix scrolling to search results in wrapped long lines. Commit. Fixes bug #448765
  • Renderer: simplify text ranges comparison function. Commit.
  • Add direct camel/subword movement actions. Commit.
KUnitConversion
  • Rename variable as KFUNITCONVERT_NO_DOWNLOAD. Commit.
KWallet
  • Remove superfluous spaces and quotes from debug output. Commit.
KWidgetsAddons
  • Allow limiting the selectable range of a KDatePicker. Commit.
  • KFontRequester: Force frame around sample label. Commit.
  • Correct DateKeywords option check in KDateComboBox::initDateWidget. Commit.
  • Set a QComboBox placeholder when KSelectAction is on a toolbar. Commit.
  • KActionMenu: Apply popupMode to existing widgets. Commit.
  • Add 1840d8fb to .git-blame-ignore-revs. Commit.
  • Run clang-format. Commit.
  • KCapacityBar: Allow to specify state in drawCapacityBar. Commit.
  • Fix popup menu position. Commit.
KWindowSystem
KXMLGUI
  • Delay accepting the bugreport dialog. Commit. Fixes bug #482240
  • Add KKeySequenceWidget::patterns property. Commit.
  • Add KKeySequenceWidget::recording property. Commit.
Network Manager Qt
  • Expose AccessPoint bandwidth property. Commit.
Purpose
  • Plugins: make name and actiondisplay more consistent. Commit.
Syntax Highlighting
  • Fix XML syntax for Hjson syntax highlighting. Commit.
  • Add syntax highlighting file for Hjson (syntax extension to JSON). Commit.
  • Don't ignore the result of QFile::open. Commit.
  • Adjust stan tests to new hl state. Commit.
  • Update Stan language for newer keywords. Commit.
  • Add example SPDX and alerts comments in test.gleam. Commit.
  • Replace inlined license by SPDX-License-Identifier in gleam.xml top comment. Commit.
  • Refactor alerts keywords to crash keywords and add import keyword list. Commit.
  • Increment gleam.xml version number. Commit.
  • Add example documentation comments. Commit.
  • Refactor comments and improve import highlighting. Commit.
Threadweaver
  • Increase required CMake version for example. Commit.

Thursday, 13 March 2025

One of the biggest behind-the-scenes changes in the upcoming Plasma 6.4 release is the split of kwin_x11 and kwin_wayland codebases. With this blog post, I would like to delve in what led us to making such a decision and what it means for the future of kwin_x11.

Background

KWin started as an X11 window manager almost two and a half decades ago. Over the course of the years, it transformed drastically. It gained support for compositing on X, and it became a Wayland compositor.

Sharing the same codebase was critical in the early days of kwin_wayland. We already had working window management abstractions, which had been tested for many years, so we could reuse them on Wayland instead of writing new from scratch. Also, if kwin_x11 gained a new feature, then kwin_wayland would likely gain it for free too.

As time went by, kwin_wayland outgrew kwin_x11. They still shared code but they became quite distinct projects with different mental models how things operate, e.g. how pixels get on the screen or how input works. It also didn’t help that many Plasma developers jumped the X11 ship and turned to the Wayland side as part of the “eating your own dog food” practice, which eventually led to the feature freeze in KWin/X11 back in 2018 due to the lack of sufficient testing and various breakages.

Some time around 2020, we started taking a more bold and aggressive approach to Wayland session development because we saw that Plasma Wayland was trailing behind other desktop environments and something had to be changed in order to catch up. Such a policy produced great results, and Plasma is now one of the leading Wayland desktop environments. Unfortunately, it also greatly contributed to the number of regressions in the X11 session.

Another issue was that there were some features that we couldn’t make work as expected on Wayland so we had to drop them for everyone, which understandably made X11 users unhappy.

Goals

A few years ago, we started contemplating the idea of splitting the X11 and Wayland codebases because of the growing list of regressions affecting the X11 session, and architecture restrictions imposed on KWin/Wayland by the way KWin/X11 works.

That would allows us to keep KWin/X11 working as is without it breaking too often and freely change KWin/Wayland in ways that we think are best suited to make the Plasma Wayland session even better. Of course, it is not a silver bullet solution: we replace one problem with another problem (mainly related to maintenance and ensuring interface compatibility between two projects).

Details

After various discussions online and at Akademy and also seeing (impressive) Plasma Wayland usage statistics, we decided that it’s the right time to do such a split. The main kwin repository is going to host KWin/Wayland, while the kwin-x11 repository is going to host KWin/X11.

KWin/X11 and KWin/Wayland are co-installable so users can freely switch between the X11 and Wayland sessions back and forth and also make sure that updating to 6.4 is not a big hassle for distributions. You’ll be able to have only KWin/X11 or only KWin/Wayland on your computer, or both.

The codebase split doesn’t affect Xwayland support in KWin/Wayland. In other words, X11 applications will continue running on Plasma Wayland.

Extensions

Like any other Plasma component, KWin’s functionality can be extended using plugins. There’s good and bad news. The good news is that extensions written in JavaScript and QML (for example, fancy effects that are available at the KDE Store) will continue working both with kwin_x11 and kwin_wayland as expected, so extension developers don’t need to do anything about it. The bad news is that C++ extensions should be specifically targeted for kwin_x11 and kwin_wayland because neither provides API and ABI compatibility guarantees for its C++ API.

As Wayland progress moves forward, it is likely that the scripting API of KWin/Wayland will be further extended.

Future of KWin/X11

KWin/X11 will be still maintained for the foreseeable future. But that maintenance work will boil down to fixing build errors, adapting to new KDE Frameworks and Plasma APIs, and backporting window-related fixes from KWin/Wayland. There are no plans to drop KWin/X11 in the Plasma 6 lifecycle, although it’s highly possible that it will happen in Plasma 7.

KWin/X11 won’t receive new features anymore; until recently, it received new features that had been developed against KWin/Wayland passively (because both lived in the same repository). However, it might be actually a good thing because the X11 session doesn’t receive that much testing nowadays.