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

Sunday, 12 October 2025

Matrix Widgets in NeoChat, systemd user units in KJournald and a lot of fixes all other the place

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

Getting back to all that's new in the KDE App scene, let's dig in!

KDE PIM

Merkuro Calendar Manage your tasks and events with speed and ease

Yuki Joou continued improving Merkuro Calendar, fixing the "Today" button, which wasn’t working as expected (25.08.3 - link).

System Applications

Dolphin Manage your files

Akseli Lahtinen fixed an issue where the icon sizes of list items were incorrect when zooming in and out rapidly. (25.12.0 - link).

Journald Browser Browser for journald databases

Andreas Cord-Landwehr added support for loading user units in KJournald Browser (25.12.0 - link).

Utilities

Kate Advanced text editor

Jack Hill added configuration for rust_hdl, a language server for the VHSIC Hardware Description Language (VHDL) (25.12.0 - link).

Kåre Särs fixed Git blame parsing for commits containing tabs in their summary. (25.12.0 - link)

Clock Keep time and set alarms

Kai Uwe Broulik reworked how the list of alarms and timers is loaded. This process is now asynchronous. (25.12.0 - link)

Konsole Use the command line interface

Wendi Gan fixed some styling issues that occurred when saving Konsole output as HTML. (25.12.0 - link)

Calculator A feature rich calculator

Alberto Jiménez Ruiz fixed decimal number parsing for locales that don’t use a dot as the decimal separator, such as Spanish. (25.12.0 - link)

Barcode Scanner Scan and create QR-Codes

Volker Krause added some missing icons on Android (25.12.0 - link).

KDE Connect Seamless connection of your devices

Forest Crossman fixed a crash in the virtual monitor plugin when used with misbehaving virtual monitor devices (link).

Games Applications

KRetro Libretro emulation frontend for Plasma

Laurent Montel updated KRetro to follow KDE best practices (link 1, link 2, link 3 , link 4, link 5, and more).

Chat Applications

NeoChat Chat on Matrix

Arno Rehn added basic support for Matrix Widgets and Jitsi (25.12.0 - link).

James Graham and Tobias Fella fixed various crashes in NeoChat detected by Sentry (link 1, link 2, and link 3).

Social Networks

Tokodon Browse the Fediverse

Joshua Goins moved the "Post" toolbar action to be a floating button on mobile devices (25.12.0 - link).

Browsers

Falkon Web Browser

Juraj Oravec added a context menu to the bookmark menu (25.12.0 - link) and fixed custom protocol handler registration (25.12.0 - link).

Konqueror KDE File Manager & Web Browser

Stefano Crocco increased the quality of the exported PDFs (25.12.0 - link) and added support for the standard JS window.print() call to open a print dialog (25.12.0 - link).

Third Party Applications

Dr. Tej A. Shah started porting Clear.Dental to Kirigami!

…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.

I'm writing this blog in the very very early stages of development because I'm 50% sure someone will link me to some existing library that Google failed to find.

Varlink

Varlink is an IPC mechanism that is gaining popularity in a few places across Linux. It's very simple, JSON blobs over a socket terminated with a null byte. It doesn't have anywhere near the features of DBus, but the simplicity is the main selling point.

Ultimately when it comes to choosing IPC what matters is what the servers you want to talk to are already using and then things become forced.

QtVarlink

Interacting with C APIs is a horrible experience for all involved. We want something that looks and behaves likes a Qt developer would expect and used the inbuilt QtJson classes.

My new library provides API as follows.

    VarlinkClient client("unix:/tmp/foo");
    QFuture<VarlinkResponse> pendingResponse = client.call("org.example.Ping", QJsonObject({{"ping", "1"}}));
    pendingResponse.then(this, [](VarlinkResponse response) {
        qDebug() << response.parameters()["pong"].toString();
    });

Or any variation of QFutureWatcher or just blocking.

State

Code is available at: https://invent.kde.org/davidedmundson/qtvarlink

As mentioned in the intro, it's pre pre alpha. It's the minimum viable product for a task I had, but I intend to make it a standalone project.

Please let me know if this would be useful to you. There's a roadmap in the Readme and pull requests are more than welcome!

Saturday, 11 October 2025

Linux Magazine included a nice article about Tellico in its June 2025 edition on Cool Linux Hacks. It has a nice description of adding items to one’s collection and how to search various sources online. A couple of screenshots are included that do a good job of showcasing the interface.

It even connects to the subsequent review of a barcode scanner to talk about using it together with Tellico. The distinction between using a webcam for scanning, where Tellico has to convert the image to a barcode, and a specific barcode scanner isn’t always clear to users. A scanner can essentially act as a keyboard, where the barcode comes across just as if someone were typing it in. For Tellico’s use, the webcam functionality isn’t well-tested since scanners are much more prevalent.

Welcome to a new issue of This Week in Plasma!

This week more work was poured into making Plasma 6.5 the best and most stable release ever. I know I write that a lot, but I feel like we get better at it every time, and this time it feels like that’s the case here too as well.

Our bug triaging team has basically finished getting through Plasma’s bug report backlog, allowing them and developers to focus on the known and fixable issues. And fix they did! This week there were just tons and tons of bug fixes. Among them were the #2 and #3 most common Plasma crashes, and we also identified the #1 most common crash as being caused by 3rd-party code.

This kind of concerted bug-fixing may not be the most glamorous work, but it makes a big difference to the overall quality of the product!

Notable UI Improvements

Plasma 6.5.0

You can now activate the Sleep, Shut Down, and Restart (etc.) buttons in Kickoff using the Enter key in addition to the spacebar. (Julius Zint, link)

Plasma 6.6.0

The Breeze icon theme now has reversed versions of the “Send” icon (which normally looks like a little paper plane flying to the right), and uses them in notifications when using a right-to-left language, like Arabic or Hebrew. (Farid Abdelnour and Nate Graham, link)

Improved the randomness of randomly-ordered wallpaper slideshows. (Sebastian Meyer, link)

Notable Bug Fixes

Plasma 6.4.6

Fixed an issue that could make KWin crash when trying to look at a device’s orientation sensor. (Xaver Hugl, link)

Fixed the current second most common Plasma crash, which could happen when using a Weather Report widget displaying information from the Environment Canada source. (Ismael Asensio, link)

Fixed a very annoying issue that made graphical vector content copied in apps like Inkscape and LibreOffice Draw get unnecessarily and destructively rasterized when pasting them. (Fushan Wen, link)

Fixed an issue that made screen colors not look quite right (or at least not as intended) when playing HDR videos. (Xaver Hugl, link)

Plasma 6.5.0

Fixed a case where KWin could crash when dragging files or folders from Dolphin. (Vlad Zahorodnii, link)

Fixed another case where KWin could crash. (Vlad Zahorodnii, link)

Fixed a case where Plasma could crash when you tried to create a new folder inside a sub-folder popup from a Folder View widget or a folder on the desktop. (Akseli Lahtinen, link)

Fixed a case where KDE’s XDG portal implementation could crash. (David Redondo, link)

Fixed an issue that made text copied to the clipboard in an XWayland-using app get lost when the window focus changed immediately afterwards. (Vlad Zahorodnii, link)

Fixed an issue that could make automatic screen rotation not work properly. (David Edmundson, link)

Fixed an issue that could make XWayland-using apps flicker a bit on some screens with some GPUs. (Xaver Hugl, link)

Fixed a weird issue in that could make the CPU and memory usage skyrocket after you used KRunner to search for certain specific things and then pressed the Page Up key. (Harald Sitter, link)

When you turn on automatic login and a message appears telling you to change your wallet to have en empty password so that it will automatically unlock, the button you can click to do so once again works. (David Edmundson, link)

Fixed a couple of labels that didn’t display localized text properly. (Nicolas Fella and Nate Graham, link 1 and link 2)

Fixed an issue that made desktop icons jump around when you moved a panel to an adjacent screen edge. (Akseli Lahtinen, link)

Fixed a funny issue that made newly-created panels inherit some of their initial sizing settings from the most-recently-created panel, rather than using the default settings. (Fabian Vogt, link)

Fixed an issue in System Monitor that made it impossible to re-select table columns after clearing the selection by clicking in the empty area below the table. (Arjen Hiemstra, link)

Frameworks 6.20

Fixed the current third most common Plasma crash, which could happen when changing themes. (Arjen Hiemstra, link)

Fixed an issue that made the external link icon look weird in GTK apps when using the Breeze icon theme (David Redondo, link)

Other bug information of note:

Notable in Performance & Technical

Plasma 6.4.5

Substantially reduced KWin’s CPU usage while playing full-screen video. (Someone amazing in KWin, link)

Plasma 6.5.0

Improved the speed with which Discover fetches Flatpak information while starting up, improving launch speed and responsiveness in many cases. (Aleix Pol Gonzalez, link)

Information about the size of the folder selection dialog is now stored in the state config file, not the settings config file. This helps keep the settings file from changing when transient states change, making it easier to version-control your config files. (Nicolas Fella, link)

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, too.

You can also help us by making a donation! A monetary contribution of any size 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.

Friday, 10 October 2025

Buttons in the Plasma Design System

Buttons play a pivotal role in user interaction within the Plasma Design System. It provides a set of states and roles for clear actions and navigation. In this design system, buttons are categorized into various types, each with distinct styles and purposes, contributing to an intuitive user experience.

Buttons are probably the most used component in a UI and it needs to clearly convey its meaning and purpose.

Button Types

  1. Primary Buttons: These buttons are the primary interactive elements, designed to stand out on the interface with a shadow effect that creates a sense of depth. They are used for essential actions like “Create,” “Confirm,” or “Proceed,” encouraging user engagement. The elevation can adapt to the background color, ensuring good visibility across different surfaces. Default buttons are identified by their distinct brand color and are used sparsely in the UI.
  2. Secondary Color: Provide an alternative action option. They often complement the primary buttons, allowing users to execute actions that may not be the main focus but are still significant. These buttons usually have a less prominent visual hierarchy, helping to guide user interactions without overshadowing primary actions. They can also serve for less urgent or secondary tasks, improving the overall user experience in UI design. They also come in Secondary Color, which is likely the most used version of the button in a UI.
  3. Outlined Buttons: Outlined buttons are a secondary option, featuring a transparent background and a defined border. They serve as supplementary actions that are less critical than default buttons, maintaining clarity without overshadowing primary actions. They come in color and gray versions depending on their usage.
  4. Text Buttons: Also known as flat buttons, these are used for less prominent actions or in placements where space is limited. Text buttons have no elevation or border, displaying a subtle underline on hover to indicate interactivity. They are effective for actions like “Learn more” or “Cancel,” blending harmoniously with text-based interactions.

States and Feedback

In Plasma Design, buttons incorporate multiple interaction states to provide immediate feedback to users:

  • Default: Displaying the button’s primary style with appropriate color contrast.
  • Hover: Changing background color slightly or applying a ripple effect, signaling potential interaction.
  • Selected: Is a button that indicates it is currently active or chosen among a group of options. Its visual state (such as color, elevation, or outline) changes to show that it’s the selected or focused choice. Selected state is permanent and does not need the user to keep the mouse over it. The selection is removed when another UI element is selected.
  • Pressed: A visual response when the button is actively being clicked, often shown by a darker shade or scale effect, reinforcing the tactile feel of the interface. It is a temporary state shown when the user clicks a button, for example.
  • Disabled: Buttons in this state are visually muted and unresponsive, maintaining clarity that the action cannot be taken. There are disabled button versions for color and gray colorings.
  • Round Buttons: Are used for additional visual interest and to draw differences between buttons and actions that are part of the general UI or external to it. They only come in icon-only varieties.

Accessibility and Responsiveness

Buttons should convey their functions through clear labeling and icons where applicable. Together they should have sufficient contrast between button colors and the background is essential for readability.

Implementation Guidelines

From a development standpoint, buttons in Plasma Design system should be structured as modular components. They need to utilize a consistent naming convention aligned with the design tokens defined in the system, such as button.primary or button.outlined. This approach promotes reusability and maintainability across the codebase. Incorporating customization options, such as size variations and whether to include icons, allows developers to create a diverse set of buttons while ensuring adherence to the material aesthetic.

The design system contains primary-derivative buttons and danger-related versions as well. Danger or destructive button states mirror the ones from the primary color but are dedicated for potentially damaging consequences in a system.

Internally, buttons contain color variables, shadow variables, text variables and spacing variables thus:

/* cyrillic-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZJhiI2B.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZthiI2B.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZNhiI2B.woff2) format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZxhiI2B.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZBhiI2B.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZFhiI2B.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZ9hiA.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


html, body {
  margin: 0;
  min-height: 100%;
  min-width: 100%;
  padding: 0;
}

body {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 100vw;
  min-height: 100vh;
}

* {
  box-sizing: border-box;
}

.text-node { background-clip: text !important; -webkit-background-clip: text !important; }

/* Button */
.button-ef52f83471d2 {
  position: relative;
  width: 105px;
  height: 34px;
  border-radius: 0px 0px 0px 0px;
  z-index: 0;
}

/* _ButtonBase */
.button-bas-ef52f83471d3 {
  position: absolute;
  left: 0px;
  top: 0px;
  width: auto;
  height: auto;
  background: #4172deFF;
  border: 1px solid #4172deFF;
  border-radius: 6px 6px 6px 6px;
  box-shadow: 0px 2px 4px -2px #dedede54, 0px 12px 12px -8px #dededeFF, inset 0px -4px 12px -8px #0020461F;
  display: flex;
  align-items: center;
  align-content: stretch;
  justify-content: center;
  gap: 8px;
  padding: 8px 14px 8px 14px;
  flex-direction: row;
  flex-wrap: nowrap;
}

/* Button CTA */
.button-c-t-a-ef52f83471d4 {
  height: 18px;
  flex-shrink: 0;
}
.button-c-t-a-ef52f83471d4 .root-0 {
  
  
  display: flex;
  white-space: break-spaces;
  align-items: flex-start;
}
.button-c-t-a-ef52f83471d4 .root-0-paragraph-set-0 {
  display: inline-flex;
  flex-direction: column;
  justify-content: inherit;
  
  margin-right: 1px;
  vertical-align: top;
}
.button-c-t-a-ef52f83471d4 .root-0-paragraph-set-0-paragraph-0 {
  font-size: 0;
  line-height: 1.25;
  margin: 0;
  text-align: left;
}
.button-c-t-a-ef52f83471d4 .root-0-paragraph-set-0-paragraph-0-text-0 {
  color: rgba(250, 248, 255, 1);
  text-transform: none;
  
  line-break: auto;
  overflow-wrap: initial;
  white-space: pre;
  font-size: 14px;
  text-rendering: geometricPrecision;
  caret-color: rgba(250, 248, 255, 1);
  text-decoration: none;
  letter-spacing: 0px;
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
}
<!-- frame: Button -->
<div class="frame button-ef52f83471d2">
  <!-- frame: _ButtonBase -->
  <div class="frame button-bas-ef52f83471d3">
    <!-- text: Button CTA -->
    <div class="shape text button-c-t-a-ef52f83471d4">
      <div class="text-node-html" id="html-text-node-26931f38-d193-8030-8006-ef52f83471d4" data-x="821" data-y="637">
        <div class="root rich-text root-0" xmlns="http://www.w3.org/1999/xhtml">
          <div class="paragraph-set root-0-paragraph-set-0">
            <p class="paragraph root-0-paragraph-set-0-paragraph-0" dir="ltr"><span class="text-node root-0-paragraph-set-0-paragraph-0-text-0">Button CTA</span></p>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

As the design process progresses, these internal variables will make more sense. While today, Plasma Design is manually implemented, in the future, we see that developers would not need to interact with the button design directly and just implement the desired action.

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


Citizen Protest Halts Chat Control

Tags: tech, law, surveillance

Well done everyone. This bullet was dodged… for now! This kind of fever comes back regularly unfortunately.

https://www.patrick-breyer.de/en/citizen-protest-halts-chat-control-breyer-celebrates-major-victory-for-digital-privacy/


In Praise of RSS and Controlled Feeds of Information

Tags: tech, social-media, rss

Another nice one about the power of RSS and why it’s an important technology.

https://blog.burkert.me/posts/in_praise_of_syndication/


Windows 11 removes all bypass methods for Microsoft account setup, removing local accounts

Tags: tech, windows, surveillance, foss

Probably preaching to the choir here… but if you still got Windows in your life between the end of 10 and what they’re doing to 11, it’s really high time you ditch it. Come over to the Free Software operating systems side. It might require an initial effort but it won’t stab you in the back like this.

https://alternativeto.net/news/2025/10/windows-11-now-blocks-all-microsoft-account-bypasses-during-setup/


Who Owns Express VPN, Nord, Surfshark? VPN Relationships Explained

Tags: tech, vpn, business, privacy

Some relationships here are definitely shady. Be careful who you trust with your traffic.

https://windscribe.com/blog/the-vpn-relationship-map/


Apertus: a fully open, transparent, multilingual language model

Tags: tech, ai, machine-learning, gpt, foss

ETH Zurich keeps making progress on its model. It’s exciting and nice to see an ethical offering develop in that space. It shows that when there is political will it can be treated as proper infrastructure.

https://ethz.ch/en/news-and-events/eth-news/news/2025/09/press-release-apertus-a-fully-open-transparent-multilingual-language-model.html


WireGuard topologies for self-hosting at home

Tags: tech, networking, vpn, wireguard, self-hosting

Interesting breakdown of a possible organisation for accessing self-hosted hardware at home through wireguard.

https://garrido.io/notes/wireguard-topologies-for-self-hosting-at-home/


UUIDv47 — UUIDv7-in / UUIDv4-out

Tags: tech, uuid, privacy, performance

Interesting idea, trying to bridge the best of both UUID options.

https://uuidv47.stateless.me/


Python 3.14.0

Tags: tech, python, foss

It’s out now, this is a big one with quite a few interesting features. Let’s see how it’s used in practice.

https://www.python.org/downloads/release/python-3140/


Python 3.14 Is Here. How Fast Is It?

Tags: tech, python, benchmarking, performance

First rough benchmarks for CPython 3.14. It looks like the JIT isn’t giving much improvement on the cases explored, the free threading on the other hand is a clear advantage for multithreaded cases. Of course as usual Pypy is still way faster. That said, like anything else: first measure in your own context before taking any decision.

https://blog.miguelgrinberg.com/post/python-3-14-is-here-how-fast-is-it


C++26: range support for std::optional

Tags: tech, c++, design, api

It’s kind of an unusual design choice… This is subtle, I think I’m still a bit on the fence regarding this one.

https://www.sandordargo.com/blog/2025/10/08/cpp26-range-support-for-std-optional


std::ranges may not deliver the performance that you expect

Tags: tech, c++, benchmarking, performance

As usual, you need to measure before you jump to conclusion…

https://lemire.me/blog/2025/10/05/stdranges-may-not-deliver-the-performance-that-you-expect/


Const, Move and RVO

Tags: tech, c++

Reminder that there are a few cases where you might not want your variables declared as const.

https://www.cppstories.com/2017/01/const-move-and-rvo/?m=1


Why we didn’t rewrite our feed handler in Rust

Tags: tech, c++, rust, type-systems

An illustration of why C++ can still be a relevant choice in new code. It all depends on the contraints you have for a given problem.

https://databento.com/blog/why-we-didnt-rewrite-our-feed-handler-in-rust


Cancelling async Rust

Tags: tech, rust, asynchronous

Interesting post which gives plenty of insights on how async Rust is designed and behaves.

https://sunshowers.io/posts/cancelling-async-rust/


A case for learning GPU programming with a compute-first mindset

Tags: tech, gpu, shader, teaching, learning, debugging

An interesting way to approach the topic of GPU programming nowadays. It might indeed make more sense nowadays than reaching for putting pixels on screen as a first objective.

https://themaister.net/blog/2025/10/05/a-case-for-learning-gpu-programming-with-a-compute-first-mindset/


The Single Responsibility Principle

Tags: tech, design, craftsmanship, quality

An explanation about where the SRP comes from and what it really means. It’s very often misunderstood or overlooked.

https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html


ATDD From the Trenches

Tags: tech, tests, tdd, atdd

A little introductory article about putting an ATDD cycle in place for your development.

https://www.infoq.com/articles/atdd-from-the-trenches/


Programmer Test Principles

Tags: tech, tests, tdd

A bit old but still relevant. Don’t focus on tools or the fashion “du jour”, instead have a set of timeless principles and evaluate your work against them.

https://medium.com/@kentbeck_7670/programmer-test-principles-d01c064d7934


Concerns about TDD

Tags: tech, tests, tdd, learning, teaching

This is definitely a skill which is hard to teach an learn. When it sticks it brings really nice results though…

https://ronjeffries.com/articles/020-01ff/tdd-issues/


The static risk fallacy

Tags: tech, security, risk

Interesting take. Indeed risks shouldn’t be considered in isolation. They actually compound and that can add up fairly quickly.

https://chrisbeckman.dev/posts/static-risk-fallacy


Products Over Projects

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

I wouldn’t frame it as always superior (I’d argue the article falls a bit in this trap). Still this can sometimes be an alternative to driving everything purely on project mode. Some organizations would benefit from such a change of perspective other less so.

https://martinfowler.com/articles/products-over-projects.html


Better Agile Adoptions

Tags: tech, agile, team, change, organization, management

I think the Open Agile Adoption ideas have been unfortunately unnoticed. It’s thus hard to tell if it would have been fairly efficient. What’s sure though is that the widespread mandate approach used during the past decade does a disservice to teams.

https://www.infoq.com/articles/open-agile-adoption-1/


How to Reward Agile Teams

Tags: tech, team, hr, economics, project-management

I’m a bit on the fence regarding this article. That being said there’s something I like about it: it’s not always purely about money. It’s also a good reminder that if the reward is in monetary form it’s almost impossible to not somehow alter team dynamics with it.

https://www.mountaingoatsoftware.com/blog/how-to-reward-agile-teams


Seeing like a software company

Tags: tech, organization, management

Interesting view… This explains quite well why most organizations have both formal and informal processes. I’m not sure I agree that the informal will always be fought against by management though. I’ve seen clever management which accepts the informal processes as long as it doesn’t harm the organization.

https://www.seangoedecke.com/seeing-like-a-software-company/



Bye for now!

The second maintenance release of the 25.08 series is out continuing the focus on stability and polish. It fixes issues with effects and transitions, improves clip selection, and resolves crashes related to filter jobs and effects on sequences. This version also comes with updated parameters for frei0r effects and GIF rendering preset.

The Windows package also fixes an annoying short freeze issue affecting the 25.08.1 version.

For the full changelog continue reading on kdenlive.org.

I’m very glad to participate in the 2025 edition of the International Calligraphy Festival of Kerala, and present a talk to a great audience.

ICFK is organized by KaChaTaThaPa foundation headed by master calligrapher Narayana Bhattathiri. The event usually takes place on 2–5 October in Kochi. Varying talks, workshops, demonstration sessions, exhibitions, and above all meeting and learning from exemplary calligraphers is the best part of the event. The venue always bursts with beauty, energy, and fun; where everyone is approachable.

Reconnected with old friends and made new friends. Ashok Parab was traveling pan-India and documenting scripts, that lead to teaching scripts — including Malayalam — as well. Abhishek Vardhan is doing research on Nāgarī script. Syam is doing research on Malayalam calligraphy. They promised to share their findings and public/open resources, which would be very interesting to look at. Vinoth Kumar, Michel D’Anastasio, Nikheel Aphale, Muqtar Ahammed, and Shipra Rohtagi gave me souvenirs — thank you! I had chances for interesting long chats with Uday Kumar (who asked me about Sayahna Foundation after the t-shirt I wore), Achyut Palav, Sarang Kulkarni, Brody Neuenschwander, and also Shyam Patel of Kochi Biennale Foundation.

On many occasions delegates approached and asked me about font development process, complex text shaping and related topics. It was also too tempting to not buy fountain pens and Bhattathiri’s merchandise on sale, as gift to friends. The dinner with the ICFK team at Boulangerie Art Cafe was delicious. TM Krishna’s carnatic music concert on Saturday evening was a heavenly experience — Krishna Seth sitting next to me was spontaneously drawing on the notebook for the entire duration of the concert.

For the last edition, I presented a talk about font development, font engineering, complex text shaping, and such back-end tasks that designers generally find difficult. This year, I talked about the ‘Fundamentals of Typography’. I hope the talk succeeded to some extent in making everyone unhappy when they look at a badly typeset page 🙂.

The slides for the presentation are available here.

Friday, 10 October 2025

KDE today announces the release of KDE Frameworks 6.19.0.

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 the org.kde.* links without generation script. Commit.
  • Adjust test to new locations. Commit.
  • If we get just one dir, that is a generated one. Commit.
  • Set and create the generation directories, we always need them. Commit.
  • Combine the generation & install in one subdir. Commit.
  • Remove not needed files. Commit.
  • Simplify icon generation and install. Commit.
  • Add RTL versions of microphone icons. Commit. See bug #509598
  • Add RTL version of audio icons that need them. Commit. Fixes bug #509598
  • Remove last 4 non-generated dark icons. Commit.
  • Add symlink for applications-accessories. Commit.
  • Can we do verbose ?. Commit.
  • Cleanup remaining colorful 3rd-party icons. Commit.
Extra CMake Modules
  • Improvements and fixes for KDEInstallDirs documentation. Commit.
  • [KDEInstallDirs] Warn about likely unwanted behaviour. Commit.
  • [KDEInstallDirsCommon] Minor code refactoring for better readability. Commit.
  • [KDEInstallDirsCommon] Improve code comments. Commit.
  • [KDEInstallDirsCommon] Modernize to mprove code readability. Commit.
  • [ECMQmlModule] Mark non-generated plugins as non-optional. Commit.
  • Ecm_generate_headers: add SHARED_PREFIX argument. Commit.
KArchive
  • Handle QTemporaryFile::open potentially failing. Commit.
  • 7z: Fix infinite loop on malformed file. Commit.
  • Remove no longer used parent return parameter for path lookup. Commit.
  • Avoid recurrent sanitization overhead in findOrCreate. Commit.
  • Avoid O(N^2) memory complexity in path lookup. Commit.
  • Sanity check path length and dir nesting level early. Commit.
  • Create test files and benchmarks with high nesting level. Commit.
  • 7z: Optimize returning early for broken files. Commit.
  • 7z: Fix infinite loop on malformed file. Commit.
  • 7z: Optimized K7ZipPrivate::readPackInfo for the bad case. Commit.
  • Fix various typos. Commit.
  • 7z: Fix infinite loop on malformed file. Commit.
  • Fix testcase name. Commit.
  • 7z: Fix crash on malformed file. Commit.
  • 7z: Fix abort in malformed file. Commit.
  • 7z: Fix infinite loop in malformed files. Commit.
  • Reduce findOrCreate memory usage drastically. Commit.
  • K7Zip: Avoid recurrent temporary buffer allocation, fix shadowing. Commit.
  • K7Zip: Replace some raw pointers with unique_ptr<>s. Commit.
  • K7Zip: Store FolderInfo by value. Commit.
  • K7zip: Use in-class initialization/defaulted constructor for FolderInfo. Commit.
  • Karchivetest: Fix shadowing of some local variables. Commit.
  • Fix a few shadowing warnings for shadowed members/parameters. Commit.
  • Iterate over directory entries directly instead of lookup by name. Commit.
  • Fix time_t type being shadowed by a variable name. Commit.
  • Kzip: Use skip instead of seek, so the QIODevice internal buffer gets used. Commit.
  • Document that KZipFileEntry::createDevice can return null. Commit.
  • 7z: Fix memory leak on malformed files. Commit.
  • 7z: Fix assert/crash on malformed files. Commit.
  • K7zip: Add support for additional decompression filters. Commit. See bug #419126
  • 7z: Limit a bit more the size of nextHeaderSize. Commit.
  • 7z: Fix crash on opening malformed files. Commit.
  • Add docu to data() to make it clear that it may allocate lots of memory. Commit.
  • Autotests: traverseArchive: Read in chunks instead of all data at once. Commit.
  • Add OSS-Fuzz CI Job. Commit.
  • 7z: Fix crash on opening malformed files. Commit.
KCalendarCore
  • Src/xcalformat.cpp - porting to libical v4. Commit.
KCodecs
KColorScheme
  • Don't overload activateScheme slot. Commit.
  • [SchemeManager] Use new id based approach. Commit.
  • Deprecate saveSchemeToConfigFile(). Commit.
  • [SchemeManager] Add id based endpoint. Commit.
KConfig
  • Make sure config isn't dirty after deleting nonexistent key. Commit.
  • Fix reading of localized config values on Windows (and macOS). Commit.
KConfigWidgets
  • KHamburgerMenu: Workaround Qt6.10 issue. Commit.
KCoreAddons
  • KTextToHtml: If URL ends with double-quote, it's not valid URL. Commit. Fixes bug #507952
  • Make tests more stable. Commit.
  • Try to make test more stable. Commit.
  • Kcoreaddons_add_plugin: Fail fast if CMAKE_LIBRARY_OUTPUT_DIRECTORY is not set. Commit.
  • Some more seconds to the future to be less flacky. Commit.
  • Make test less flaky by using longer time and more fuzzy compare. Commit.
  • Update timestamp to avoid rounding error. Commit.
  • Document org.kde.coreaddons.AboutData. Commit.
  • Require tests on all platforms to pass. Commit.
  • KAboutData: Notify that KAboutData has been set. Commit.
KDE Daemon
KFileMetaData
  • [MobiExtractorTest] Verify extracted plain text. Commit.
  • [MobiExtractorTest] Reenable test for Qt6. Commit.
  • [MobiExtractorTest] Fix QT_NO_CAST_FROM_ASCII breakage. Commit.
  • [MobiExtractorTest] Move test class declaration to source file, cleanup. Commit.
KGuiAddons
  • Make KColorUtils available to QML. Commit.
KHolidays
  • Updated holiday file for Italy (South Tyrol). Commit.
KI18n
  • Temporarily link to repo Programmer's Guide. Commit.
KIconThemes
  • KIconLoader: Prefer SVG files before PNG files. Commit.
KImageformats
  • Fix assert on broken data. Commit.
  • Add const so we know that QImage is not being modified. Commit.
  • Add color space check during read test. Commit.
  • Limits the max RAW size to 300000x300000 pixels. Commit.
  • Limits the max DDS size to 300000x300000 pixels. Commit.
  • Fix compilation failure with Qt 6.7. Commit.
  • Switch all plugins to QLoggingCategory. Commit.
  • Resolution calculations performed by functions. Commit.
  • Add a CI job for oss-fuzz. Commit.
  • Use std::lround instead of qRound. Commit.
  • RAW: Disable broken stream protection. Commit.
  • Add checks on the seek return value. Commit.
  • Fix Null-dereference READ. Commit.
  • HDR: Limits the header to the first 128 lines. Commit.
  • IFF: support for PCHG chunk. Commit.
  • Fix assert when read corrupted floats. Commit.
KIO
  • KUrlNavigator: Add API for setting the frame off and on. Commit.
  • Port to KWaylandExtras::xdgActivationToken. Commit.
  • Disable Windows tests that ATM not pass to get a baseline. Commit.
  • On Windows we just create pseudo mount points for drives, that will fail the tests. Commit.
  • Cut down to int from size_t. Commit.
  • Don't cut values, use unsigned char. Commit.
  • Desktopexecparsertest needs a classic unix shell & terminal. Commit.
  • Check that the result is the same when accessing the source, skip on Windows. Commit.
  • Skipping test on Windows, QSaveFile fails to handle concurrent accesses. Commit.
  • Backslash literals in file names - Unix only case. Commit.
  • Skipping test using a symlink on Windows. Commit.
  • Ci: require passing tests on all platforms. Commit.
  • Use offscreen plugin for testing. Commit.
  • Kprotocolmanager: don't consider stream protocol for ArchiveMimetype. Commit. Fixes bug #502124
  • Trashimpl: Fix size limit check to allow automatic deletion. Commit. Fixes bug #469598
  • Cleanup include, add fully qualified, add as_const. Commit.
  • Filepreviewjob: Don't apply size check to directories. Commit.
  • [knfsshare] Don't write back exportsFile config. Commit.
  • Deprecate setPreviewWidget in KDirOperator and KFileWidget. Commit.
  • Drop kfileaudiopreview. Commit.
  • Deprecate KEncodingFileDialog. Commit.
  • KFilePlaces: better compute maximum icon height. Commit.
  • Deprecate WorkerBase::setIncomingMetaData. Commit.
  • KMountPoint: use mount id to match filesystem if possible. Commit.
  • Drop more dead code for priviledged execution. Commit.
  • Increase deprecation level for Qt to 6.10. Commit.
  • Drop workerStatus handling. Commit.
  • Drop HostInfo API from Worker. Commit.
  • [kfilewidget] Drop hidden completionmode config. Commit.
  • Kioworkers/file: remove dead execWithElevatedPrivilege code path. Commit.
Kirigami
  • Fix incorrect documented type for Theme::useAlternateBackgroundColor. Commit.
  • Primitives: Use pre-multiplied blending in ShadowedRectangle shader. Commit.
  • Primitives: Use nearest texture filtering if ShadowedTexture::smooth is false. Commit. See bug #445759
  • Primitives: Add API to ShaderNode to override texture filtering. Commit.
  • Consider safe area margins for page paddings. Commit.
  • Apply safe area margins to application headers. Commit.
  • [shadermaterial] Fix leaking material types. Commit.
KJobWidgets
  • Keep KWidgetJobTracker wide even if keepOpen checkbox is hidden. Commit.
  • Add Alpine CI. Commit.
KNewStuff
  • Switch to ecm_generate_headers SHARED_PREFIX arg. Commit.
KNotifications
  • Fix Android notifications (with reply intents) for API 34+. Commit.
KPackage
  • Add missing parameter "dir" to kpackage_generate_appstream_metadata. Commit.
  • Fix clazy warnings about detaching and preferring arrow operator on QPointer. Commit.
KQuickCharts
  • Controls: Don't perform a layout in LegendLayout if we're invisible. Commit. Fixes bug #505010
KRunner
  • Port to KWaylandExtras::xdgActivationToken. Commit.
  • Modernize code using clang-tidy. Commit.
  • Remove unused lambda capture. Commit.
KService
  • Disable some tests that fail on Windows ATM. Commit.
  • Ci: require passing tests on all platforms. Commit.
  • Silence clazy warning about temporary container that is not worth fixing. Commit.
  • Kbuildsycoca: Utilize QDateTime method that is significantly faster. Commit.
  • KService: Simlify code for reading schemeHandlers a bit, avoid unused Q_D. Commit.
  • KMimeAssociations: Slightly more consistent log messaged, avoid Q_UNUSED for variable that is printed in log. Commit.
KStatusNotifieritem
  • Kstatusnotifieritem: remove "do you really want to quit" prompt. Commit.
KSVG
  • Use alphaMask for the overlay only when the svg actually has a mask. Commit. Fixes bug #510157
  • Restrict shared rendering to the main thread. Commit.
KTextEditor
  • Use an array here, std::vector is not necessary. Commit.
  • Avoid allocating when reading config. Commit.
  • Remove unused include. Commit.
  • Use std::span instead of manually incrementing iterators. Commit.
  • Merge the loops. Commit.
  • Store KateLineLayout* instead of a pair. Commit.
  • Dont use deprecated stuff. Commit.
  • Mark unused stuff as deprecated. Commit.
  • Update/cleanup completionmodel docs. Commit.
  • Use a pool allocator for KateLineLayout. Commit.
  • Fix various typos. Commit.
  • Dont override XDG_DATA_DIRS. Commit.
  • Update copyright year. Commit.
  • Fix my homepage and kill dead links. Commit.
  • Always restore highlights and only set non-null pixmap. Commit.
  • Still trigger delayed update, else we miss some resizing and get artifacts. Commit. Fixes bug #509269
  • Dont remove one cursor at a time, it can be very slow. Commit.
KUserFeedback
  • Use state location to store data. Commit.
  • Skip OpenGL test on Windows. Commit.
  • Require passing tests on all platforms. Commit.
  • Make tests more stable with relaxed timeout. Commit.
KWallet
  • Ci: skip fdo_secrets_test on Windows. Commit.
  • Ci: require passing tests on all platforms. Commit.
KWidgetsAddons
  • Fix bug 510055: When we press enter in search line we don't want to close dialog. Commit. Fixes bug #510055
  • Kpageview.cpp - quiet an unused variable warning. Commit.
  • KRecentFilesMenu: do not cut text for zero-width screens. Commit. Fixes bug #509320
KWindowSystem
  • Make tests more stable. Commit.
  • Deprecate KWaylandExtras::requestXdgActivationToken(). Commit.
  • Add QFuture-based xdg-activation token helpers. Commit.
  • Wayland: Drop WaylandXdgActivationTokenV1::failed signal. Commit.
  • Wayland: Fix leaking xdg activation objects. Commit.
  • Enable build & fix tests on Alpine. Commit.
KXMLGUI
  • Switchlanguage: push country stripped language code to the back of the list. Commit. Fixes bug #509902
Prison
  • Don't crash if some barcodes are not supported. Commit.
  • Switch to ecm_generate_headers SHARED_PREFIX arg. Commit.
QQC2 Desktop Style
  • SpinBox: Allow any sub-element layout. Commit.
Sonnet
  • Fix handling of symlinks for hunspell dicts. Commit. Fixes bug #507931
Syntax Highlighting
  • Add initial syntax highlighting definition for Quarto. Commit.
  • Monokai: Fix JSONC highlighting. Commit.
  • Improve monokai BEGIN/END highlighting. Commit.
  • Systemd unit: update to systemd v258. Commit.
  • Zig: Allowing folding at brace. Commit.
  • Added wildcard in extensions. Commit.
  • Snakemake: drop redundant .syntax file. Commit.
  • Snakemake: initial support. Commit.
  • XKB: fix key pattern: The character '<' cannot be present in the name. Commit.
  • Debianchangelog.xml: add Ubuntu releases after 24.04. Commit.
  • Clarify license info in for opsi-script files, reformat. Commit.
  • Add XKeyboardConfig (XKB) syntax highlighting. Commit. Implements feature #432587
  • Update contact info to website. Commit.
  • Indexer: check kateVersion attribute format. Commit.
  • Fix documentation of Theme::EditorColorRole and Repository::DefaultTheme. Commit.
  • Fix version attributes following suggestion by @jpoelen. Commit.
  • Add tests according to README. Commit.
  • Change tags used to and . Commit.
  • Add KDE syntax file for SPARQL highlighting. Commit.
  • Fix clazy warning by fully-qualifying arguments. Commit.
  • Switch to ecm_generate_headers SHARED_PREFIX arg. Commit.
  • Port to declarative QML type registration. Commit.

Thursday, 9 October 2025