Skip to content

Saturday, 8 June 2024

In this video I explain how the accerciser utility works. Accerciser is a tool used to identify and test GUI accessibility elements. I also run accerciser on KCalc, the KDE calculator application.

Selenium AT-SPI is an amazing piece of software written by KDE developer Harald Sitter. It is a tool used in KDE to automate tests of GUI applications. This enables developers to design applications that are accessible for all and increase their energy efficiency. As part of Season of KDE 2024 I decided to make a video tutorial for KDE developers.

If you find this video helpful, you can reach out to me on Gitter. I would love to hear back from you 😃

This video was made by Pradyot Ranjan (@pradyotranjan:gitter.im).

In this video I set up Selenium AT-SPI locally on KDE Neon. This video follows the Selenium setup guide found here: https://community.kde.org/Selenium.

Selenium AT-SPI is an amazing piece of software written by KDE developer Harald Sitter. It is a tool used in KDE to automate tests of GUI applications. This enables developers to design applications that are accessible for all and increase their energy efficiency. As part of Season of KDE 2024 I decided to make a video tutorial for KDE developers.

If you find this video helpful, you can reach out to me on Gitter. I would love to hear back from you 😃

This video was made by Pradyot Ranjan (@pradyotranjan:gitter.im).

G2 posted some fun logos for Kate on reddit.

I think they are nice and flashy and well suited if you want to show your appreciation for Kate and like that art style and a good addition to our awesome icon and mascot.

Static Version

Static Fun Logo for Kate

Animated Version

Animated Fun Logo for Kate

Licensing

G2 licensed these files under the CC BY-NC-SA 4.0. Feel free to share the stuff with this license and credit for G2.

Comments?

A matching thread for this can be found here on r/KDE.

A week ago I attended the 22. Gulaschprogrammiernacht (GPN22) in Karlsruhe, Germany. That’s a bit of a smaller version of the Chaos Communication Congress, although with 1000+ attendees “small” doesn’t really do it justice. Below are some of my notes from conversations I had there.

GPN22 banner.
ⓒ Entropia e.V.

KDE Itinerary

Debugging other people’s trips

Occasionally Itinerary produces weird results in its timeline for complex trips, and this can be hard to debug remotely without asking for a full export of all the personal data in there. Meeting users and contributors at events is a good opportunity to look at such issues on their devices and analyze the problems together.

Some things could be fixed on the spot, and verified shortly afterwards on the affected installations:

  • Improved trip grouping for incomplete trips and closely adjacent trips.
  • Improved recovery from wrong timezone information in manually added entries.
  • Fixed timeline ordering with location change elements without arrival time.

Data syncing via Matrix

Syncing multiple Itinerary instances is an often requested feature. One of the most promising approaches is doing this via Matrix. An in-depth discussion on that at least gave me a much more refined idea on how that could look like, and what we’d need in order to get there.

Specifically:

  • Use a special room type for this, so it’s not cluttering the room list in “normal” chat clients.
  • Use one room per trip rather than one room for the entire data set. This avoids scalability problems with state events, and would allow sharing individual trips with other people for joint planning and traveling together.
  • Use one state event per timeline element, so that there is always a known latest state without having to load/replay the entire room history.

iOS port

I also met someone looking into an iOS port of Itinerary. Obviously that’s in a very early exploratory state, but should that turn out viable it would probably also benefit many other KDE applications.

Project management

We also talks about how to clean up and revive task tracking for Itinerary. For various historic reasons relevant tasks are currently spread over two Phabricator boards, a Gitlab board, tasks in Itinerary’s Gitlab project and Bugzilla, neither of which is perfectly maintained, current nor complete.

Not sure yet how to best structure this, but it clearly needs to change, and I need to more actively use this rather than having things in my local notes.

KDE Platform & Frameworks

Password and credential management

How could credential/secrets storage/management look like for our platform in a world beyond KWallet? KWallet’s design, UX and security model goes back more than 20 years by now, and it shows. And since this is a sensitive and complex topic to touch, it’s probably worth working out first how we would want this to look like eventually.

Things to consider include:

  • Standardized access APIs for applications like XDG portals or the secret service API.
  • Data exchange formats with other password management systems.
  • Integration with cloud-based password managers for synchronization between different devices.
  • Supporting external hardware tokens and TPMs.
  • Supporting Passkeys and WebAuthn.
  • Unlocking UI nicely integrated into the shell, and also supporting e.g. biometric unlocking.
  • Hiding the complexity of all that from the user during setup to the extend possible.
  • Browser integration and integration with SSH and GPG key stores.
  • Should 2FA tools like Keysmith use this or remain separate?
  • Minimizing the need for configuration, while keeping much of the above opt-in.

Given the complexity we probably should find a place to collect all the ideas and requirements, and then get a few interested people together for a few days to turn this into a plan.

Application debug and support infrastructure

We do have functionality in Frameworks to help us diagnosing issues happening on a user’s device, most prominently KCrash. Some of our applications have additional custom-built diagnostic functions as well though, such as:

  • NeoChat has some debug output capturing system.
  • Itinerary has a “debug mode” that shows some additional diagnostics and test functions.

Would it make sense to generalize/standardize some of this and upstream it to Frameworks?

Emergency and weather alerts

One of my main agenda points was meeting with FOSS Warn again, for our joint work on an emergency and weather alert aggregation server.

Topcis included:

  • Quality metrics and monitoring of the input feeds. While we have feeds from 100+ countries, the activity on those ranges between 10+k alerts in the last 30 days to none. The latter could be valid for a small island nation with stable weather recently, but for a larger country this raises questions on how well that feed is maintained.
  • The data format and data model for feed metadata and API to query that, something my prototype didn’t do at all. This is useful to show in clients what kinds of alerts (or any at all) could be expected for an area of interest.
  • How to deal with split-up multilingual feeds. The Common Alerting Protocol (CAP) has support for multilingual entries, but in at least two cases (Russia and Saudi Arabia) those seem to be provided in separate single-language feeds instead.

Transitous

Improvements for Transitous also came out of this.

Chatting with a bunch of people the acquisition of Greyhound by FlixBus was mentioned, leading to somebody raising the question whether that would mean Transitous includes the Greyhound network (given FlixBus in Europe is covered). That turned out to not be the case, so the next person started to do a quick web search finding data for North America as well. Yet another person who had recently travelled that way was able to confirm that to be valid and current. A pull request for Transitous followed soon after, and within less than an hour this was available on the production instance.

Barely four months after this all started at FOSDEM this was just awesome to watch.

And that’s probably the biggest value of such events, a random hallway conversation can result in a significant improvement to public transport routing connectivity on another continent :)

Sorry for the interruption last week; I was on vacation. While I was vacating, my colleagues were in full-on fix-everything mode in preparation for the upcoming Plasma 6.1 release in a little over a week. And what a release it promises to be! I think this is going to be a good one, folks. Lots of great features, improved performance and smoothness, and oodles of fixes for all kinds of strange bugs with your wild and wacky hardware devices!

New Features

Plasma’s Networks widget now supports WebAuth for SAML-based authentication. I don’t know what this means, but if you do, that probably means you’re happy about it! (Joel Holdsworth, Plasma 6.2.0 Link)

The network QR code that you can show in Plasma’s Networks widget is now draggable, so you can get an image file out of it wherever you want! (Fushan Wen, Plasma 6.2.0. Link)

System Monitor’s data backend now supports getting CPU/memory/IO/etc. pressure data from /proc/pressure/ (when supported by the Linux kernel) and displaying it in sensors. Hopefully this data will start to show up in user-facing features soon! (Adrian Edwards, Plasma 6.2.0 Link)

UI Improvements

Dolphin once again recommends installing Filelight if you try to get information about free space but it’s not installed (Felix Ernst, Dolphin 24.08.0. Link)

Passwords copied from KWalletManager no longer appear visible in the Clipboard widget (Weng Xuetian, KWalletManager 24.08.0. Link)

Plasma’s Panel Settings dialog no longer obscures the hover pop-ups for individual widgets while it’s open (David Edmundson, Plasma 6.1.0. Link)

In Plasma’s Sticky Notes widget, the colors of the inline buttons already change with the system color scheme. Now they also change appropriately based on the color scheme you select for the sticky note itself! (Evgeniy Harchenko, Plasma 6.1.0. Link)

Removed the “Hide utility windows for inactive applications” option, because it was broken and apparently nobody had noticed or reported this, and also it’s kind of a weird thing to exist in the first place. This also fixes a Plasma panel auto-hide bug caused by using it (Xaver Hugl, Plasma 6.1.0. Link 1 and link 2)

Searching in System Settings no longer sometimes returns nonsensical matches based on keywords that got implicitly joined together in ways that didn’t make sense (Harald Sitter, Plasma 6.1.0. Link)

A better cursor icon is now used when dragging windows (Vlad Zahorodnii, Plasma 6.1.0. Link)

On X11 with an NVIDIA GPU, a floating panel, and adaptive panel transparency, an unfortunate bug in the NVIDIA driver causes windows to lag when moved and resized. For now we’ve added a warning in the panel settings dialog about this (Ivan Tkachenko, Plasma 6.2.0. Link)

Improved the accessibility of the common Kirigami.PlaceholderMessage UI component (Aleix Pol Gonzalez, Frameworks 6.4. Link)

The custom accent color feature (including “accent color from wallpaper”) now does a better job of picking colors for links that will be readable, no matter what colors your base color scheme uses (Akseli Lahtinen, Plasma 6.1.0. Link)

Bug Fixes

Fixed an unusual issue in Elisa that could cause it to not launch when certain DBus setups on certain distros (Jack Hill, Elisa 24.05.1. Link)

Fixed Elisa not launching at all on Windows after a Windows integration library we were using was removed (Jack Hill, Elisa 24.05.1. Link)

Elisa no longer crashes when you try to enqueue the contents of filesystem folders that don’t actually have any music in them (Jack Hill, Elisa 24.05.1. Link)

Spectacle’s highlight annotation once again actually highlights (Noah Davis, Spectacle 24.05.1. Link)

Fixed a way that KWin could crash after the system wakes from sleep with weird screens that turn on strangely (Vlad Zahorodnii, Plasma 6.1.0. Link)

KWin should no longer crash when apps do weird things and for some reason two drag operations end up happening at once (Vlad Zahorodnii, Plasma 6.1.0. Link)

Fixed a way that KWin could crash on X11 when you change Global Themes (Xaver Hugl, Plasma 6.1.0. Link)

Fixed a weird crash in KWin that could happen when you’re pressing keys on the keyboard during the exact moment that XWayland disconnects (David Edmundson, Plasma 6.1.0. Link)

Fixed a cause of Plasma using too much memory and/or freezing due to system notifications containing certain sizes of images (Akseli Lahtinen, Plasma 6.1.0. Link)

Changing a System Monitor widget located on a thick panel to the “Application Table” or “Process Table” display style no longer causes Plasma to freeze (Akseli Lahtinen, Plasma 6.1.0. Link)

Fixed the most common crash in System Settings’ Firewall page which could be experienced by changing settings and then switching pages (Nicolas Fella, Plasma 6.1.0. Link)

Fixed an extremely esoteric Plasma crash that was caused by repeatedly wiggling the pointer over certain menu items of the context menu of the sub-folder popup of a folder located on the desktop (Akseli Lahtinen, Plasma 6.1.0. Link)

When you try to add a sensor to System Monitor or one of its so-named widgets that you’ve already added, you’re now warned and prevented from doing so, instead of being allowed to continue, which would silently break the display of all sensors (Arjen Hiemstra, Plasma 6.1.0. Link)

Connected devices that are nice enough to report battery information to Plasma no longer sometimes randomly get disconnected for no good reason (Ivan Tkachenko, Plasma 6.1.0. Link)

Some monitors that do unusual and exotic things under the hood no longer get their resolutions set to 640×480 after resuming from sleep (Xaver Hugl, Plasma 6.1.0. Link)

The “Allow restore on future sessions” checkbox on the screen sharing dialog once again works (Nicolas Fella, Plasma 6.1.0. Link)

Titlebar context menus of non-maximized Aurorae-decorated windows are no longer misplaced on Wayland (Vlad Zahorodnii, Plasma 6.1.0. Link)

Kicker’s panel button is no longer too large with a thin panel, which was a regression caused by me trying to keep it from getting too large with thick panels! (Niccolò Venerandi, Plasma 6.1.0. Link)

Connecting a new screen that’s larger than any of the current screens no longer causes it to get a small constrained version of the default wallpaper; now it gets the correct size (Marco Martin, Plasma 6.1.0. Link)

When you’ve got a floating Plasma panel on a screen edge that’s shared with another screen, it no longer pushes an odd blurry rectangle onto that adjacent screen when it de-floats (Niccolò Venerandi, Plasma 6.1.0. Link)

Using the “Application” or “Window” layout switching mode no longer causes Plasma’s System Tray popup to close immediately when you try to open it while the widget is located on a panel on the bottom or right screen edge (Marco Martin, Plasma 6.1.0. Link)

Shutting down, restarting, etc. from within KWin’s Overview effect no longer causes it to freeze for 45 seconds before completing the operation (David Edmundson, Plasma 6.2.0. Link)

Fixed a bug that caused items on the Plasma desktop to disappear until Plasma was restarted after their icons changed, either because you changed them manually, or they got automatically changed by something else automatically—for example by putting items into the trash (Akseli Lahtinen, Frameworks 6.4. Link)

Worked around a Qt regression that prevented toolbar buttons in QtQuick apps from showing that they have keyboard focus (Aleix Pol Gonzales, Frameworks 6.4. Link)

Other bug information of note:

Performance & Technical

Improved the performance of basically everything for cases where the ~/.cache folder is located on a slow disk, such as a hard drive (David Edmundson, Plasma 6.1.0. Link)

Plasma and KWin no longer rocket up in CPU usage for no good reason when using the using “Keep the selection and clipboard the same” and “Text selection: Always save in history” Clipboard widget settings (David Edmundson, Plasma 6.1.0. Link)

Re-enabled hardware-accelerated cursor support for Intel GPUs, since the bugs that were causing us to disable it have since been resolved. This should make cursors more responsive and not increase CPU usage when moving it (Vlad Zahorodnii, Plasma 6.2.0. Link)

Implemented Breeze styling for movable splitters in QML software, so we can now start porting things to use it. This will eventually result in, for example, resizable sidebars in places where you’d expect for sidebars to be resizable—imagine that! (Ivan Tkachenko, Frameworks 6.4. Link)

Automation & Systematization

Turned a manual test for the Plasma System Tray into an automatic one, so now it actually gets run regularly (Fushan Wen, link)

Added a few autotests for the Plasma Clipboard widget to verify recent fixes (Fushan Wen, link)

…And Everything Else

This blog only covers the tip of the iceberg! If you’re hungry for more, check out https://planet.kde.org, where you can find more news from other KDE contributors.

How You Can Help

The KDE organization has become important in the world, and your time and labor have helped to bring it there! But as we grow, it’s going to be equally important that this stream of labor be made sustainable, which primarily means paying for it. Right now the vast majority of KDE runs on labor not paid for by KDE e.V. (the nonprofit foundation behind KDE, of which I am a board member), and that’s a problem. We’ve taken steps to change this with paid technical contractors — but those steps are small due to growing but still limited financial resources. If you’d like to help change that, consider donating today!

Otherwise, visit https://community.kde.org/Get_Involved to discover other ways to be part of a project that really matters. Each contributor makes a huge difference in KDE; you are not a number or a cog in a machine! You don’t have to already be a programmer, either. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

Friday, 7 June 2024

Let’s go for my web review for the week 2024-23.


Alice in Wonderland: Simple Tasks Showing Complete Reasoning Breakdown in State-Of-the-Art Large Language Models

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

Another cruel reminder that basic reasoning is not to be expected from LLMs. Here is a quote from the conclusion of the paper which makes it clear:

“We think that observations made in our study should serve as strong reminder that current SOTA LLMs are not capable of sound, consistent reasoning, as shown here by their breakdown on even such a simple task as the presented AIW problem, and enabling such reasoning is still subject of basic research. This should be also a strong warning against overblown claims for such models beyond being basic research artifacts to serve as problem solvers in various real world settings, which are often made by different commercial entities in attempt to position their models as a strong mature product for end-users. […] Observed breakdown of basic reasoning capabilities, coupled with such public claims (which are also based on standardized benchmarks), present an inherent safety problem. Models with insufficient basic reasoning are inherently unsafe, as they will produce wrong decisions in various important scenarios that do require intact reasoning.”

https://arxiv.org/abs/2406.02061


A critique of Cara.app: the ‘No AI’ Instagram and Artstation copycat child. - David Revoy

Tags: tech, social-media, art, criticism

Interesting critique of this new platform… it’s the beginning of the hype cycle but will probably exhibit the same decay phenomenon than other platforms.

https://www.davidrevoy.com/article1032/a-critique-of-caraapp-the-no-ai-instagram-and-artstation-copycat-child


Why are vulnerabilities out of control in 2024? – Open Source Security

Tags: tech, foss, security, data, data-science

The more releases out there the more vulnerabilities are (and could be) discovered. Some actions are necessary to get things under control properly.

https://opensourcesecurity.io/2024/06/03/why-are-vulnerabilities-out-of-control-in-2024/


Engineering for Slow Internet

Tags: tech, networking, reliability

A good reminder of everything which might go wrong when connectivity is bad. Most tools let you down in such a case.

https://brr.fyi/posts/engineering-for-slow-internet


Why do CPUs have multiple cache levels? | The ryg blog

Tags: tech, hardware, cpu

Very nice explanation and metaphors on how CPUs cache levels work.

https://fgiesen.wordpress.com/2016/08/07/why-do-cpus-have-multiple-cache-levels/


BenchExec: A Framework for Reliable Benchmarking and Resource Measurement

Tags: tech, benchmarking, tools

Looks like an interesting benchmarking tool. To keep an eye on.

https://github.com/sosy-lab/benchexec


TIL #099 – order values of dictionary by iterable of keys with operator.itemgetter | mathspp

Tags: tech, programming, python

Definitely a nice Python trick. Fairly elegant, I’ll try to remember it.

https://mathspp.com/blog/til/order-values-of-dictionary-by-iterable-of-keys-with-operator.itemgetter


Message authentication codes for safer distributed transactions

Tags: tech, filesystem, distributed, safety, cryptography

Interesting use of cryptography without a security concern. It’s more about safety and ensuring something wasn’t missed by mistake.

https://mazzo.li/posts/mac-distributed-tx.html


The state of Vulkan apps in 2024

Tags: tech, 3d, vulkan, portability

The difficult path for Vulkan. The data obviously is biased since it includes games and most of them are still targeting Windows and so DirectX. I’d be curious to see something similar excluding games (and so focusing on medical, industrial etc.).

https://www.carette.xyz/posts/state_of_vulkan_2024/


How I learned Vulkan and wrote a small game engine with it

Tags: tech, 3d, game, vulkan

Interesting dive into the experience of writing a small Vulkan engine (almost) from scratch.

https://edw.is/learning-vulkan/


How to Build Engineering Strategy

Tags: tech, management, strategy, vision

Packed with useful information. Clearly some things I’m eager to test in there.

https://blog.practicalengineering.management/how-to-build-engineering-strategy-42e464018177


xkcd: Earth Temperature Timeline

Tags: science, history, data-visualization

So yes, the climate changed before… now slowly scroll until the end to appreciate how brutal it is this time.

https://xkcd.com/1732/



Bye for now!

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

Friday, 7 June 2024

KDE today announces the release of KDE Frameworks 6.3.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
  • Qml: don't do blocking DBus calls in Baloo.Monitor. Commit. Fixes bug #487064
  • Remove explicit maintainer from metainfo. Commit.
Bluez Qt
  • Remove explicit maintainer from metainfo. Commit.
Breeze Icons
  • Use normal resource adding, big resource variant has issue with LTO. Commit.
  • Kmahjongg app icon: drop broken entries href'ing to non-existing id. Commit.
  • Fix remaining missing semicolons. Commit.
  • Fix missing semicolon. Commit.
  • Fix path styling. Commit.
  • Treat hicolor as "no fallback theme set" too. Commit.
  • Ensure we fallback to breeze, if no user fallback is set. Commit.
  • Fix dark icon generation. Commit.
  • Revert "ensure we fallback to breeze, if no user fallback is set". Commit.
  • Ensure we fallback to breeze, if no user fallback is set. Commit.
  • Avoid to generate dead links. Commit.
  • Remove duplicate of window.svg. Commit.
  • Better duplicate checking. Commit.
  • Stricter external link check. Commit.
  • Integrate better test for whitespace of any kind. Commit.
  • Fix escape sequences. Commit.
  • Do full link checking for git win links, too. Commit.
  • Do full symlink checking during resource creation. Commit.
  • Better name for windows link resolving. Commit.
  • Remove recently-added process-working-symbolic icons. Commit.
  • Replace dialog-* icons with data-* icons. Commit.
  • Add symbolic icons as symlink to existing monochrome icons. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Remove copy/pasted 16px go/lua/scala icons from mimetypes/22. Commit.
  • Fix actions/22/fingerprint viewBox. Commit.
  • Include duplication check. Commit.
  • Let Qt do the simple XML linting. Commit.
  • Add my copyright, too. Commit.
  • Add more comments and use better function name. Commit.
  • Reenable x24 icons on Windows. Commit.
  • Try to ensure we really run late enough. Commit.
  • Run resource file generator on dark, too, for checks. Commit.
  • Generate icon 24 gen dir always. Commit.
  • Move more helpers to same dir. Commit.
  • Split files to avoid dep cycles. Commit.
  • Pack in generated icons. Commit.
  • Add symlinks for new ISO MIME type names. Commit.
  • Use rcc like we do it in other frameworks. Commit.
  • Move helper, simplify deps searching. Commit.
  • Avoid the copying. Commit.
  • Add back BINARY_ICONS_RESOURCE for breeze only. Commit.
  • Fix qrc generation for system with symlinks and always build the library. Commit.
  • Remove BINARY_ICONS_RESOURCE. Commit.
Extra CMake Modules
  • Skip app template packaging when cross-compiling. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • ECMQueryQt: Provide better error message when Qt6 qpaths is not found. Commit.
Framework Integration
  • Remove wrong note from metainfo. Commit.
  • Remove explicit maintainer from metainfo. Commit.
KAPIDox
  • Don't show maintainers for frameworks. Commit.
  • Don't show framework type in frameworks list. Commit.
KArchive
  • Require unit tests to pass on Windows. Commit.
  • It compiles fine without qt6.7 deprecated methods. Commit.
  • Add missing includes. Commit.
KAuth
  • Remove explicit maintainer from metainfo. Commit.
KBookmarks
  • It compiles fine without qt6.7 deprecated methods. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
KCalendarCore
  • Tests: Remove workaround not needed anymore after 80f7731c591dfe656d8c6769fa2efba9256a60f4. Commit.
  • CI: Require passing tests on Linux and Windows. Commit.
  • Adapt date/time output for tests to Qt 6.7 formatting behavior changes. Commit.
  • Remove explicit maintainer from metainfo. Commit.
KCMUtils
  • It compiles fine without qt6.7 deprecated methods. Commit.
  • AbstractKCM,SimpleKCM: Stop overlapping the 1px of content with a header Separator. Commit.
  • SimpleKCM: Port header's wrapper from QQC2.Control to Kirigami.Padding. Commit.
  • SimpleKCM: Drop unnecessary id qualifier from the bindings at the top-level component. Commit.
  • AbstractKCM,SimpleKCM: Unify header/footer content swapping. Commit.
  • AbstractKCM,SimpleKCM: Unify OverlaySheet detection, port to cool iterators. Commit.
KColorScheme
  • Allow to bundle color schemes with applications inside resources. Commit.
  • Remove explicit maintainer from metainfo. Commit.
KCompletion
  • It compiles fine without qt6.7 deprecated methods. Commit.
  • Remove explicit maintainer from metainfo. Commit.
KConfig
  • Ensure test works with Qt 6.7 on Windows. Commit.
  • Use QT_TRANSLATE_NOOP instead of QT_TR_NOOP for KStandardActions. Commit.
  • Add helper method to fully move a group to another. Commit.
  • Deprecate ctor that takes a backend. Commit.
  • Move parts of KStandardAction to KConfigGui. Commit.
  • Remove KConfigBackend abstraction. Commit.
  • Add a mutex to protect globalData. Commit.
  • Kconfigxt: Remove docs for SourceExtension parameter which was removed in KF6. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
KConfigWidgets
  • Add api to have a style chooser. Commit.
  • KStandardAction: reduce allocation by using view type. Commit.
  • Add KStyleManager::initStyle to enforce proper application style. Commit.
  • KConfigDialogManager: port to non-deprecated QCheckBox signal. Commit.
  • KCommandBar: Better UI. Commit.
KContacts
  • Add SPDX license/copyright information for new CMakeLists.txt as well. Commit.
  • Properly expose address format API to QML. Commit.
  • Add qml module. Commit.
  • Update feature documentation. Commit.
  • Remove explicit maintainer from metainfo. Commit.
KCoreAddons
  • Not all distros have /bin/true, e.g. NixOS lacks it. Commit.
  • Bundle license texts inside resource. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Kfilesystem: recognize nfs4 as KFileSystemType::Nfs. Commit.
  • Replace KAboutDialog with KAboutApplicationDialog. Commit.
KCrash
  • Handle kwin's wayland qpa as wayland platform. Commit.
KDBusAddons
  • It compiles fine without qt6.7 deprecated methods. Commit.
KDeclarative
  • KeySequenceItem: Fix height management. Commit.
  • Remove useless note from metainfo. Commit.
  • Fix tier in metainfo. Commit.
  • Remove explicit maintainer from metainfo. Commit.
KDNSSD
  • Remove explicit maintainer from metainfo. Commit.
KDocTools
  • Remove explicit maintainer from metainfo. Commit.
KFileMetaData
  • Remove explicit maintainer from metainfo. Commit.
KGlobalAccel
KGuiAddons
  • Deprecated KColorCollection. Commit.
KHolidays
  • Remove custom definitions of pi. Commit.
  • Proofreading. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Latvia holiday grammar corrections. Commit.
KI18n
  • Remove explicit maintainer from metainfo. Commit.
KIconThemes
  • Add missing include. Commit.
  • KIconDialog: Prevent briefly visible mini-window from showing up. Commit. Fixes bug #487762
  • Update file kicontheme.cpp. Commit.
  • Include only if needed, avoid extra define. Commit.
  • Set QML module base version to 1.0. Commit.
  • Windows tests work now. Commit.
  • Use Qt to fill in the generic mime-type icon information. Commit.
  • Use Qt to fill in the generic mime-type icon information. Commit.
  • Ensure tests pass locally with KDE platform theme, too. Commit.
  • Ensure we not clash with breeze from resource. Commit.
  • Adapt test to fact we now have Breeze with hicolor inherits. Commit.
  • Remove not used files. Commit.
  • Remove my old rcc test, no longer done. Commit.
  • Always require the icon library. Commit.
  • Add KIconTheme::initTheme() to configure proper icon set as opt-in. Commit.
KImageformats
  • Remove explicit maintainer from metainfo. Commit.
  • Ensure dependencies are provided on Android. Commit.
KIO
  • KAbstractFileItemActionPlugin: Remove wrong sentence in documentation. Commit. See bug #425997
  • Don't install header for pure dbus class if no dbus. Commit.
  • Disable dbus not only for android but windows & mac, too. Commit.
  • Drop errorpage handling from worker. Commit.
  • [http] Implement resuming at offset again. Commit. Fixes bug #480506
  • CI: Require passing tests on Linux and FreeBSD. Commit.
  • Deprecate KFileWidget::readConfig. Commit.
  • SSL Info UI file: use notr="true" instead of old comment="KDE::DoNotExtract". Commit.
  • Kfileitem: cache group names. Commit. Fixes bug #486956
  • Move HAVE_STATX cmake test to core. Commit. Fixes bug #487015
  • Remove unused includes. Commit.
  • Properties dialogue URL tab: Fix vertical alignment. Commit.
  • Systemdprocessrunner: change the order launchmodes are returned. Commit.
  • Systemdprocessrunner: change env var names. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
  • Kprocessrunner: add third parameter to a connect. Commit.
Kirigami
  • Revert "icon: Remove the node with lowest opacity when animation end". Commit. Fixes bug #487577
  • ImageColors: Rework the example app. Commit.
  • ImageColors: Remove unused QTimer member. Commit.
  • ImageColors: Remove an unused variable. Commit.
  • ImageColors: Disconnect the old QFutureWatcher. Commit.
  • ImageColors: Mark internal function as static. Commit.
  • ImageColors: Do not grab an item without a window or with an invisible window. Commit.
  • ImageColors: Port QVariantList to a typed and named gadget. Commit.
  • ImageColors: Fix multi-threading crash. Commit.
  • Use consistent import alias for QtQuick.Controls. Commit.
  • Drop all QML import versions. Commit.
  • Doc: Improve FormData.label example. Commit.
  • Fix typo in docs. Commit.
  • Introduce the layouts submodule. Commit.
  • SearchDialog: Expose search field placeholder text. Commit.
  • Per default DBus only enabled on systems that use it. Commit.
  • SearchDialog: Add page up/page down key navigation. Commit.
  • Move dialog stuff in a new dialogs submodule. Commit.
  • Card: emit toggled() when the user clicks on the header checkbox. Commit. Fixes bug #481461
  • SearchDialog: Improve up/down item navigation. Commit.
  • PromptDialog: adjust label spacing to conform to new HIG. Commit.
  • Icon: Remove the node with lowest opacity when animation end. Commit.
  • Remove custom backgrounds. Commit.
  • Add SearchDialog. Commit.
  • Always color icons. Commit. Fixes bug #485801
  • PromptDialog: Fix regression where content is not scrollable. Commit.
  • Add README.md for delegates and primitives modules. Commit.
  • Delegates: Use relative imports for types from the same module. Commit.
  • Delegates: Use Platform/Primitives directly instead of main Kirigami module. Commit.
  • Add Platform and Primitives modules as dependencies for Delegates module. Commit.
  • Introduce a "primitives" submodule that contains primitive types. Commit.
  • Move ColorUtils to Platform. Commit.
  • CMake: Change variable name for install() command. Commit.
  • FormLayout: Compare types against base TextEdit instead of styled QQC2 component. Commit.
  • Improve metainfo.yaml. Commit.
  • TitleSubtitle Title Accessiblity. Commit.
  • Don't include CPack. Commit.
  • Don't include quiet package in feature_summary. Commit.
  • Revert "PageRow: Rework page component caching". Commit.
  • Revert "Dialog: Always use an overlay as visual parent". Commit.
  • GlobalDrawer: Fix up code example in docs. Commit.
  • OverlaySheet: Fix typo in docs. Commit.
  • [inlineviewheader] Qualify property lookup. Commit.
  • Add frame contrast. Commit.
  • [dialog] Qualify property access. Commit.
  • [dialog] Fix signal handler. Commit.
  • FormLayout: Fix QML imports in doc example. Commit.
  • FormLayout: Annotate function parameters. Commit.
  • FormLayout: Qualify property access. Commit.
  • PageRow: Rework page component caching. Commit.
  • KirigamiPrivatePlugin: Reformat CMake into multi-line statements. Commit.
  • Fix Dialog parenting. Commit.
  • Dialog: Expand past preferred size to implicit size, as documented. Commit.
  • Fix all occurrence of UnusedImports. Commit.
  • Add config file for qmllint. Commit.
  • PromptDialog: Don't use qualified property access in top-level expressions. Commit.
  • Add support for global smooth scroll setting. Commit.
  • Fix scrollable dialogs. Commit.
  • Revert change to OverlaySheet. Commit.
  • Update design of dialogs. Commit.
  • GlobalDrawer: Clip content in more cases to fix overflowing header. Commit.
KItemModels
  • Revert "KSelectionProxyModelTest: Skip tests broken by upstream changes". Commit.
KItemViews
  • KWidgetItemDelegatePoolPrivate: remove unused allocatedWidgets member. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
KJobWidgets
KNewStuff
  • Remove explicit maintainer from metainfo. Commit.
  • Action: Fix type of transientParent property. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
  • ItemsModel: Fix up docs after refactoring. Commit.
  • Fix the "Use" label on certain delegates. Commit.
  • QuestionAsker: Remove broken sizing bindings. Commit.
  • Explicitly set QQC2.Overlay.overlay as a parent for popups. Commit.
  • DownloadItemsSheet: Port from OverlaySheet to Kirigami.Dialog for file selection dialog. Commit.
  • DownloadItemsSheet: Wrap the file names of entries instead of eliding. Commit.
  • ProvidersModel: Redo the engine property in a way which doesn't break ABI. Commit.
  • Register properties as properly typed. Commit.
  • Qtquick: Clean up unused #includes. Commit.
  • UploadPage: Fix engine property binding. Commit.
  • UploadsPage: Fix punctuation in a user-visible string. Commit.
  • Comments: Manage ListView's delegate width & position correctly. Commit.
  • ConditionalLoader: Drop meaningless checks and unused root id. Commit.
  • Don't manage visibility of a BusyIndicator. Commit.
  • QML: Don't abuse implicit casting of binding values to bool property. Commit.
  • QML: Port Qt.rgba to the new Qt.alpha. Commit.
  • QML: Port to strict === JavaScript equality operator. Commit.
  • QML: Drop import alias for QtQuick.Layouts module. Commit.
  • QML: Normalize QtQuick.Templates import aliases as T. Commit.
  • QML: Normalize QtQuick.Controls import aliases as QQC2. Commit.
  • QML: Add missing Kirigami import alias. Commit.
  • QML: Normalize QtQuick.Controls import aliases as QQC2. Commit.
  • QML: Remove unused imports. Commit.
  • QML: Drop all import versions. Commit.
  • QML: Drop major version from Kirigami imports. Commit.
  • QML: Throw QtQuick.Window out of the window. Commit.
  • QML: Clean up whitespace-related code style issues. Commit.
  • QML: Remove superfluous trailing semicolons from bindings. Commit.
  • QML: Explicitly specify arguments in signal handlers. Commit.
KNotifications
  • Don't include quiet package in feature_summary. Commit.
  • Notifybysnore: correct action buttons. Commit. Fixes bug #486911
  • Remove explicit maintainer from metainfo. Commit.
KNotifyConfig
  • Remove explicit maintainer from metainfo. Commit.
KPackage
  • It compiles fine without qt6.7 deprecated methods. Commit.
  • Remove explicit maintainer from metainfo. Commit.
KParts
  • Only use KDirNotify if existing. Commit.
  • Docs: KMimeTypeTrader no longer exists. Commit.
  • Use QUrl::PreferLocalFile for URL emitted with Part::setWindowCaption. Commit.
KPeople
  • Fix tier information. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Port to ecm_add_qml_module and declarative type registration. Commit.
KQuickCharts
  • Set a better default size for the example application. Commit.
  • Don't crash if we try to access an item from an empty ArraySource. Commit.
  • Enable highlighting for most pages in the charts example. Commit.
  • Port example pages to use ChartPage. Commit.
  • Add a common base type for pages in the chart example. Commit.
  • Remove API selection from charts example. Commit.
  • Convert chart example to use an executable QML module. Commit.
  • Expose highlight property on PieChartControl. Commit.
  • Support highlighting in LineChartControl. Commit.
  • Controls: Add support for highlighting hovered items in Legend. Commit.
  • Fix normalized line size calculation in LineChartNode. Commit.
  • Support highlight in BarChart. Commit.
  • Support highlight in PieChart. Commit.
  • Support highlight property in LineChart. Commit.
  • Add a protected method to Chart to deemphasise non-highlighted items. Commit.
  • Add a highlight property to Chart. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Controls: Ceil all components of preferredWidth in LegendDelegate contents. Commit. Fixes bug #486411
KRunner
  • Fix X-KDE-ConfigModule not working for DBus runners. Commit.
  • Fix same query not yielding results in new match session. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Templates/runner6python: Only depend on shebang line for executing. Commit.
  • Rename entrypoint file to always be main.py. Commit.
  • Document krunner-plugininstallerrc file. Commit.
  • Document how AbstractRunner::config is resolved. Commit.
  • Runnercontext: Fix saving the launch counts. Commit.
KSVG
  • Support for fractional scaling. Commit.
  • Color also absolute path images. Commit. Fixes bug #485801
  • Reapply "Port to declarative type registration". Commit.
KTextEditor
  • Ensure the color name text is visible. Commit. Fixes bug #487068
  • Ensure we not reset the dynamic word wrap state. Commit. Fixes bug #487216
  • Port to KStandardActions. Commit.
  • Never remove trailing spaces on diff file type. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Screenshot dialog: support drag of image. Commit.
  • Make tests independent of the user's environment. Commit.
  • Modernize use designated init. Commit.
  • Do not display diff result in script tests when -silent is used. Commit.
  • Fix raw string indentation with cstyle + C++. Commit.
  • Screenshot dialog: omit ellipsis from window title. Commit.
  • Screenshot dialog: use default QFileDialog::getSaveFileName window title. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
KTextTemplate
  • Remove explicit maintainer from metainfo. Commit.
KTextWidgets
  • Use ellipsis character instead of three dots in UI strings. Commit.
KUnitConversion
  • Remove explicit maintainer from metainfo. Commit.
KUserFeedback
  • CI: Require tests to pass on Linux and FreeBSD. Commit.
  • Add homepage url, CI was complaining. Commit.
  • Fix target names in metainfo. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
KWallet
  • Fix secrets portal wallet access. Commit. Fixes bug #487348
  • Remove explicit maintainer from metainfo. Commit.
KWidgetsAddons
  • Fix KMessageWidget background color. Commit.
  • KMessageWidget: Avoid calling polish() inside of palette update. Commit. Fixes bug #487247
  • Revert "KMessageWidget: Set the palette to work with non-KStyle styles". Commit.
  • KMessageWidget: Set the palette to work with non-KStyle styles. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
  • Skip tests that need GUI on Windows CI. Commit.
  • KViewStateSerializer: fix docu: setTreeView -> setView. Commit.
  • KBusyIndicatorWidget: fix warning when hiding on startup. Commit.
KWindowSystem
  • Update to plasma window management v17. Commit.
KXMLGUI
  • It compiles fine without qt6.7 deprecated methods. Commit.
  • [kactioncollection] Add addAction for KStandardActions without name. Commit.
  • Add KStandardActions::StandardActions overload. Commit.
  • Remove icon fallback setting. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
  • Work with a local copy of container when removing elements. Commit.
  • Skip tests that need GUI on Windows CI. Commit.
Prison
  • Restore compatibility with older ZXing versions. Commit.
  • It compiles fine without qt6.7 deprecated methods. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Enable exceptions where needed by ZXing. Commit.
  • Add image barcode scanning API. Commit.
Purpose
  • Remove explicit maintainer from metainfo. Commit.
QQC2 Desktop Style
  • Fix rendering the focus of our items. Commit. Fixes bug #486041
  • Update background of Dialog. Commit.
  • TreeViewDelegate: Replace top/bottom padding with vertical. Commit.
  • TreeViewDelegate: Add return type annotations to methods. Commit.
  • TreeViewDelegate: Make it actually vertically centered. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • TextArea, TextField: Fix position of a "selection end" cursor. Commit.
  • TextField: Fix mobile cursor positioning for fields with custom padding. Commit.
  • Context Menus: Port to pragma ComponentBehavior: Bound. Commit.
  • Context Menus: Use controls directly instead of via QQC2. Commit.
  • MobileTextActionsToolBar: Slightly refactor expressions. Commit.
  • MobileTextActionsToolBar: Set text and display mode for action buttons. Commit.
  • MobileTextActionsToolBar: Use symbolic versions of icons. Commit.
  • ComboBox: Clip the ListView when its relevant. Commit.
  • ComboBox: Use strict === equality operator. Commit.
  • ComboBox: Replace magic numbers with standard named units. Commit.
  • [TextArea] Access controlRoot directly. Commit.
  • [TextArea] Enabled ComponentBehavior: Bound. Commit.
  • [Combobox] Use Popup directly instead of via QQC2. Commit.
  • DialogButtonBox: Use largeSpacing as padding. Commit.
Sonnet
  • Remove explicit maintainer from metainfo. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
Syndication
  • Remove explicit maintainer from metainfo. Commit.
Syntax Highlighting
  • Updates to Catppuccin themes. Commit.
  • Nix: Version 2 -> 3. Commit.
  • Nix: Correctly highlight first key in set when it is quoted. Commit.
  • Nix: Correctly highlight bare ${}. Commit.
  • Nix: More correctly model inherit syntax. Commit.
  • Build with QT_NO_CONTEXTLESS_CONNECT. Commit.
  • Remove explicit maintainer from metainfo. Commit.
  • Use ellipsis character instead of three dots in UI strings. Commit.
  • Xml: add fictionbook format. Commit.
Threadweaver
  • Remove explicit maintainer from metainfo. Commit.

Wednesday, 5 June 2024

When working on a legacy codebase that has leading-edge C++ constructs, but also deeply legacy design decisions, sometimes there’s nifty ways to use the one against the other.

Here is a class with a needlessly public data member. I don’t know who wrote it, git history stops in 2014. At least there’s some modern C++ around it.

class Example
{
public:
    void reset(int x) { std::ranges::fill(needlesslyPublic, x); }

    static constexpr std::size_t publicSize = 8;
    int needlesslyPublic[publicSize] = {};
};

int consumer(Example & e, int index)
{
    return e.needlesslyPublic[index];
}

Now, it so happens that I know that the only place that writes to this needlessly public data member is the member function reset(). Every other access is read-only, like in the function consumer().

Legacy codebases will also have lots of missing const, which is something clang-tidy can help with, and often use int where std::size_t is meant – but those are critiques for the function consumer(), not the Example class.

Now, I’ve got 400 places in the codebase that all access needlesslyPublic for reading, and I don’t feel like causing code-churn in those places. So I want to keep the name and its access specifier (public) intact, while ensuring read-only access from elsewhere. I don’t care about having to recompile things, though.

Narrator: Enter “the totally-bogus data-pointer”.

class Example
{
public:
    void reset(int x) { std::ranges::fill(m_needlesslyPublic, x); }

    static constexpr std::size_t publicSize = 8;
    const int * needlesslyPublic = &m_needlesslyPublic[0];
private:
    int m_needlesslyPublic[publicSize] = {};
};

Thanks to in-class initialization, and the fortune that the needlessly-public thing is an array, I can move the array into private, and re-introduce the public name as a pointer. It’s a legacy code base, we just love array-pointer-decay. So now needlesslyPublic[i] dereferences the pointer, but the dereferenced type is a const int & so it is read-only. The one place that writes to the array can use the private data member, which is writable.

Minimal fuss, easily detects that one other place (there’s always one) in the codebase that writes to the data member, no code-churn in read-only consumers.

Narrator: But did you forget serialization? Copying? Moves?

Ugh. While being clever about one bunch consumers, I totally forgot that this was adding the size of a pointer to each object and that this pointer was meaningless outside of the specific object and its location in memory. Copying an object should copy the contents of m_needlesslyPublic and not change the pointer. The pointer always needs to keep pointing to the array owned by this object.

Rather than going into the weeds of copy- and move-construction (rule of five), I realized that the relevant bit was operator[] on the needlessly public data member.

Narrator: Enter “the array-ish”.

Read-only consumers are only interested in needlesslyPublic[i], so what if I provide an object that has that interface, but read-only? Here is a nested class Hidden that provides such an interface:

class Example
{
public:
    void reset(int x) { std::ranges::fill(needlesslyPublic.data, x); }

    static constexpr std::size_t publicSize = 8;

    class Hidden
    {
    friend class Example;
    public:
        int operator[](std::size_t index) const { return data[index]; }
    private:
        int data[publicSize] = {};
    };
    Hidden needlesslyPublic;
};

I don’t like the friend declaration (nobody likes friends). But it works, in the sense that consumers have no code change, read-only behavior is enforced, and only the methods of class Example can write to the hidden data. It’s like a const data member, but writable!

Narrator: What about non-array data members?

Look mr-know-it-all-narrator, if I really wanted to play silly games with member access, I would write Python and use attributes.

This particular approach works only because all my consumers use some specific syntax – array indexing – which I can capture with operator[]. If the needlessly public data member was some non-array type, then I don’t have any syntax to grab hold of.

For my particular legacy codebase, I ended up using the pointer approach to verify that all (but one) access was read-only, and then rolled it back because the Hidden class example didn’t work well with others. For the foreseeable future I need to rely on process and code reviews to keep this sane.

I am still here, busy as ever, I just haven’t found the inspiration to blog. So soon after the loss of my son, I have lost my only brother a couple weeks ago. It has been a tough year for our family. Thank you everyone for you love and support during this difficult time. I will do my best in re-capping my work, there has been quite a bit as I am “keeping busy with work” so I don’t dwell to much on the sadness.

KDE Snaps:

Trying to debug the unable to save files breakage in the latest Krita builds without luck.

KisOpenGLCanvas
Renderer::reportFailedShaderCompilation\[0m: Shad
er Compilation Failure:  "Failed to add vertex sh
ader source from file: matrix_transform.vert - Ca
use: "

I have implemented everything from https://snapcraft.io/docs/gpu-support , it has worked for years and now suddenly it just stopped. I have had to put it on hold for now, it is unpaid work and I simply don’t have time.

With the help of my GSOC student we are improving the Qt6 snap MR: https://invent.kde.org/neon/snap-packaging/kde-qt6-core-sdk/-/merge_requests/3 and many improvements on top of that. This exposed many issues with the kf6 snap and the linking to static libs. Those are being worked on now.

Updated qt to 6.7.1

Qt6 apps in the works: okular, ark, gwenview, kwrited, elisa

Kubuntu:

So many SRu’s for the Noble release, I will probably miss a few.

https://bugs.launchpad.net/ubuntu/+source/ark/+bug/2068491 Ark cannot open 7-zip files. Sadly the patches were for qt6, waiting for a qt5 port upstream.

https://bugs.launchpad.net/ubuntu/noble/+source/merkuro/+bug/2065063 Crash due to missing qml. Fix is in git, no upload rights. Requested sponsor.

https://bugs.launchpad.net/ubuntu/+source/tellico/+bug/2065915 Several applications no longer work on architectures that are not amd64 due to hard coded paths. All fixed in git. Several uploaded to oracular, several sponsorship has been requested. Noble updates rejected despite SRU, going to retry.

https://bugs.launchpad.net/ubuntu/+source/sddm/+bug/2066275 The dreaded black screen on second boot bug is fixed in git and oracular. Noble was rejected despite the SRU. Will retry.

https://bugs.launchpad.net/ubuntu/+source/kubuntu-meta/+bug/2066028 Broken systray submenus. Fixed in git and oracular. Noble rejected despite SRU. Will retry.

https://bugs.launchpad.net/ubuntu/+source/plasma-workspace/+bug/2067747 Long standing bug with plasma not loading with lightdm. Fixed in git and oracular. Noble rejected… will retry.

https://bugs.launchpad.net/ubuntu/+source/plasma-workspace/+bug/2067742 CVE-2024-36041Fixed in git and oracular, noble rejected, will retry.

And many more…

I am applying for MOTU in hopes it will reduce all of my uploading issues. https://wiki.ubuntu.com/scarlettmoore/MOTUApplication

Debian:

kf6-knotifications and kapidox. Will jump into Plasma 6 next week !

Misc:

Went to LinuxFest Northwest with Valorie! We had a great time and it was a huge success, we had many people stop by our booth.

As usual, if you like my work and want to see Plasma 6 in Kubuntu it all depends on you!

Kubuntu will be out of funds soon and needs donations! Thank you for your consideration.

https://kubuntu.org/donate/

Personal:

Support for my grandson: https://www.gofundme.com/f/in-loving-memory-of-william-billy-dean-scalf