Planet KDE

Subscribe to Planet KDE feed Planet KDE
Planet KDE | English
Updated: 23 hours 26 min ago

Accessibility and a bit of automation at the KDE Goals Sprint in Berlin

Sun, 2024-05-19 20:00

A few weeks ago (Time flies!) I attended the KDE Goals Sprint in Berlin. I didn't have concrete plans, but I intended to look into accessibility. Quite some time ago I had improved the accessibility of Kleopatra and at Akademy 2023 in Thessaloniki I gave a talk about it. Back then I had taken the easy route fixing everything directly in Kleopatra and working around several issues in Qt instead of fixing the issues in Qt itself so that all apps could profit. Time to do something about it.

(In-)Accessible icon-only buttons

A common problem for accessibility is icon-only buttons. If a button doesn't have text then screen readers can only tell their user that there's a button. That's not very helpful. Sometimes the developers have at least assigned a tool tip to the button. This can be read out by the screen readers (Qt provides the tool tip as accessible description of the button.), but it's often too verbose. To make a button without text accessible the developer has to set the accessible name property of the widget or, in case of a Qt Quick app, the name property of the Accessible QML Type. Unfortunately, that's often forgotten if the UI isn't designed with accessibility in mind.

At the sprint I discussed several ideas with other participants to help developers remember to set the accessible name:

  • A helper class to instantiate in your app which inspects the app's windows and prints a report at the end with all inaccessible icon-only buttons it has found. A bit like Qt's QAbstractItemModelTester or the different compiler sanitizers. I implemented a prototype of such a class, but didn't pursue this further. The downside of this approach is that the developer needs to open each window of the app to find all inaccessible buttons. If they are already aware of the problem then it's probably easier to search the code.
  • Instead of using a helper class to inspect the widget tree from the inside one could inspect the accessibility tree of the app from the outside. This could be built into our Appium-driven UI test framework so that developers don't have to do anything special. Except that they need to write UI tests that open each and every window of their app. I think it's still worth to look into this.
  • Last but not least, we pondered writing a clazy test. Thinking about the many different ways a text can be set on a button (e.g. with KGuiItem::assign) we doubted that it would be feasible to write such a test.

In the end the easiest approach could be education. If the developers are aware of the problem then there's a good chance that they remember to set an accessible name the next time they add an icon-only button to their app.

Accessible date/time inputs

Volker, Carl, David, Harald and me discussed and explored some ideas to make the date and time inputs in Qt Quick apps like Itinerary accessible. In Kleopatra I resorted to allow the user to enter the date in a simple text input instead of trying to make the complex UI of KDE's date picker accessible. Read Volker's blog and David's blog to find out which solutions they found for Qt Quick apps.

A small automation interlude

One advantage of sitting with other people in the same room is that you may overhear them talking about a mistake (e.g. a faulty commit) and you know exactly how to prevent this kind of mistake in the future. In this case the problem was a missing quote character in some YAML file. And the preventive measure was adding a YAML linter CI job. While I was at it I removed some unnecessary code from the CI job and added the job to a second repository.

List views with underlying multi-column model

In several widgets that show or use a simple list of items Qt allows using a model with multiple columns, e.g. QListView, QComboBox, QCompleter. In general this works well except that Qt has a long-standing bug: When navigating through the list screen readers read the entries of the underlying model column by column instead of reading only the entries in the selected model column (QTBUG-33786). In Kleopatra I worked around this bug with a proxy model which pretended that the model only had one column.

During the sprint I finally sat down and prepared a fix for Qt. For better readability I split my changes in five separate commits which resulted in five separate patches for Qt: 556857, 556858, 556859, 556860, 556861. Being used to multi-commit MRs in GitLab I wondered if I had done something wrong when I submitted my changes, but apparently that's Gerrit's way of handling patch reviews. The first two commits are code clean-ups, the third commit changes one aspect of the accessibility test for list views, the fourth commit is the actual fix, and the fifth commit adds a few more unit tests I find useful. The first three commits have been merged, but the actual fix is still waiting for a review.

After that I looked into the problem that QListView emitted an accessibility focus event when the current item changed even if the list view didn't have focus. I found out that this had been fixed recently by a fellow Qt contributor who ran into the same problem independently of me. This meant that I could remove the workaround in Kleopatra for new enough Qt.

Thanks to MBition for hosting us and to Aleix for making sure we don't starve. And many thanks to those donating to KDE which makes these sprints possible.

Categories: FLOSS Project Planets

Python Bindings for KDE Frameworks

Sun, 2024-05-19 13:50
This is a brief overview of the project that I will be doing this summer as part of Google Summer of Code. As the title of this post says, I will create Python bindings for KDE Frameworks. There are more than 70 libraries, so the aim is to add support for three of them: KWidgetsAddons, KCoreAddons and KI18n. As predicting how much time we’ll need for each one is a little bit complex, I might end adding support to other libraries if the time allows.
Categories: FLOSS Project Planets

KDE Ships Frameworks 5.116.0

Sat, 2024-05-18 20:00

Sunday, 19 May 2024

KDE today announces the release of KDE Frameworks 5.116.0.

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

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

New in this version Breeze Icons
  • Add audio/ogg and audio/x-vorbis+ogg icons
  • Add audio/vnd.wave MIME type
Extra CMake Modules
  • ECMAddQch: drop trying to set IMPORTED on targets with installed config
  • Remove extraneous docs-build CI job that is no longer needed following the switch of api.kde.org to Gitlab CI
KActivitiesStats
  • resultset: fix agent escape string
KCalendarCore
  • Fix Calendar::updateNotebook event visibility updates
KContacts
  • Restore country detection tests on FreeBSD
  • Disable FreeBSD tests that recently started to fail in the CI
KDED
  • Wait until kconf_update finished
KFileMetaData
  • fix handling of attribute namespacing
KI18n
  • KF5I18nMacros.cmake.in - don't look for python[2,3] on Windows
  • KCountrySubdivision: unbreak support of iso-codes >= 4.16
KImageFormats
  • TGA: added options support (bug 479612)
  • More header checks (CCBUG: 479612) (bug 479612))
KIO
  • Strip trailing slash in iconForStandardPath
KItemModels
  • Trivial fix for crash in buddy() when sourceModel isn't set yet
KPackage Framework
  • testpackage: Add a website so that the tests succeed
KRunner
  • Add default arg to AbstractRunner QVariantList constructor
KService
  • Fix warning: mimeType "x-scheme-handler/file" not found (bug 442721)
QQC2StyleBridge
  • Localization support
Syntax Highlighting
  • fix refs
  • use (?:sub){0,2} to work with all pcre versions
Security information

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

Categories: FLOSS Project Planets

Address formatting in QML

Sat, 2024-05-18 02:45

KDE’s KContacts framework provides API for locale-aware address formatting and address format metadata since quite some time, with an upcoming change this will all also be available for QML code directly.

Country-specific address formatting

Addresses are generally formatted differently depending on the country they are in. Such differences can be whether the state or region is relevant/included, how different parts are ordered or how different parts are joined in the local language/script.

If we have address information in a somewhat structured form, ie. broken up into individual parts (street, postal code, city, country, etc), displaying that correctly requires knowledge of those formatting rules. As this is not an uncommon problem, the KContacts framework provides C++ API for this. Using that from QML without custom glue code is now also becoming possible.

pragma ValueTypeBehavior: Addressable import org.kde.contacts import QtQuick.Controls Label { text: { const addr = { country: "DE", region: "BE", locality: "Berlin", postalCode: "10969", street: "Prinzenstraße 85 F" } as address; return addr.formatted(KContacts.AddressFormatStyle.MultiLineInternational, "KDE e.V."); } }

Different formatting styles are supported (single- or multi-line, international or domestic, for display or for postal mail labels).

Address format metadata

Additionally, the metadata necessary for formatting addresses can also be queried. This is useful for example for:

  • Showing only the input fields in an address edit form actually relevant for a specific country.
  • Input validation of postal codes, as shown in the code example below.
  • Ordering input fields in the canonical order in a given country.
import org.kde.contacts import org.kde.kirigami import QtQuick.Controls import QtQuick.Layouts RowLayout { TextField { id: postalCodeEdit text: "SW1P 3EU" property string format: AddressFormatRepository.formatForCountry("GB", KContacts.AddressFormatScriptPreference.Local).postalCodeRegularExpression property bool isValid: text.match("^" + format + "$") } Icon { source: postalCodeEdit.isValid ? "dialog-ok" : "dialog-warning" } }

More elaborate examples can be found e.g. in Itinerary’s address/location editor.

What’s still missing

Review and approval of this MR.

Categories: FLOSS Project Planets

This week in KDE: all about those apps

Sat, 2024-05-18 00:07

A few weeks ago, some of us discovered that KDE apps just looked terrible when run in GNOME. A lengthy discussion on icon theming ensued, with various improvements made on both sides. The KDE effort was spearheaded by Christoph Cullmann, as already described in his post on the subject. In a nutshell, KDE apps opting into the new system that are run outside of Plasma will always have the Breeze style and icons available, unless overridden by the system or the user. Apps opting in so far include Kate, Konsole, and Dolphin. Feel free to help opt more apps in by using those commits as inspiration!

Dolphin itself also received a lot of special attention this week, in addition to other cool stuff:

New Features

Dolphin now gives you the option to enable previews for folders on remote locations. Be aware that this can cause slowdowns, and the UI tells you that, too (Sergey Katunin, Dolphin 24.08. Link):

Discover now handles the case where one of your Flatpak apps has been marked as “end of life” and replaced with another one; it gives you the opportunity to switch to the new one, or cancel and keep using the old one anyway (Harald Sitter, Plasma 6.1. Link):

Eagle-eyed readers have noticed this isn’t using the new dialog style. It hasn’t been ported yet. There are a lot of instances like this where Kirigami.OverlaySheet is inappropriately used as a confirmation dialog that need porting. UI Improvements

Dolphin’s ability to let you change things as root when kio-admin is installed has received a big upgrade: now it shows you a warning telling you what bad things you can do if you’re not careful, and also keeps a banner visible while you’re in root mode (Felix Ernst, Dolphin 24.08. Link):

Dolphin has received a number of UI improvements and better handling for viewing read-only folders (Jin Liu, Dolphin 24.08. Link)

Switched Spectacle over to using the common style for immutable toolview tabs in Kirigami apps (me: Nate Graham, Spectacle 24.08. Link):

KMenuEdit no longer annoyingly prompts you for confirmation when you delete a group (Kenny Hui, Plasma 6.1. Link)

The icons shown in our dialogs no longer themselves depict dialogs for mega dialog-ception; now they’re just normal colored icons (me: Nate Graham, Frameworks 6.3. Link):

Bug Fixes

Attempting to open multiple “New Folder” dialogs on a slow network location no longer causes Dolphin to crash (Akseli Lahtinen, Dolphin 24.08. Link)

Very small SVG images are now displayed properly in thumbnail previews (Méven Car, kio-extras 24.08. Link)

Fixed a case where our authentication system could crash and leave apps unable to request authentication (me: Nate Graham, Plasma 6.0.5. Link)

Turning on HDR mode no longer makes the screen colors wrong when using Night Color (Xaver Hugl, Plasma 6.0.5. Link)

Screens using fractional scale factors no longer get a weird row of pixels on the bottom edge that are held to the color of previously opened windows (Xaver Hugl, Plasma 6.0.5. Link)

Fixed several Plasma crashes that were introduced by porting some custom drag-and-drop code to the upstream Qt thing, but turns out to not be suitable for our purposes. Reverting to our custom code fixes the crashes (Kai Uwe Broulik, Plasma 6.1, Link 1 and link 2)

When Chromium-based browsers are running in native Wayland mode, dragging and dropping files into websites no longer makes them freeze and crash. This was a complicated bug largely caused by Chromium doing something unusual, but KWin now handles it properly (David Edmundson, Plasma 6.1. Link)

Visiting System Settings’ File Search page no longer sometimes causes a long hang when the file indexer is under heavy load (Janet Blackquill, Frameworks 6.3. Link)

If for some reason you want to use the Kickoff application launcher to search for a single character, close Kickoff, and then do the same thing again, the second search will now show results as expected (Alexander Lohnau, Frameworks 6.3. Link)

KSvg items and Kirigami.Icon used in Plasma now re-color re-colorable SVG images in the expected way when they’re displayed in Plasma irrespective of color scheme. This makes the CatWalk cat look correct while using a mixed light/dark global theme like Breeze Twilight (Marco Martin, Frameworks 6.3. Link):

Other bug information of note:

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

Categories: FLOSS Project Planets

MarkNote 1.2

Fri, 2024-05-17 12:15

The MarkNote team is happy to announce the 1.2 release of MarkNote, KDE’s WYSIWYG note-taking application. Marknote lets you create rich text notes and easily organise them into notebooks. You can personalise your notebooks by choosing an icon and accent color for each one, making it easy to distinguish between them and keep your notes at your fingertips. Your notes are saved as Markdown files in your Documents folder, making it easy to use your notes outside of Marknote as well as inside the app.

Notes management

This releases brings highly wanted features like the ability to choose a custom folder where to store your notes. Mathis Brüchert also added the ability to change the sorting of notes from alphabetically to by date.

Mathis made the sidebar collapsable and added a focus mode where everything but the editing page is displayed.

Finally if you prefer to just use Marknote as a Markdown editor, we made it possible to just open any markdown files directly from the file browser or the console. Additionally Marknote supports markdown files with a so called front matter, which is a common way to inject metadata to markdown in static website generators like Hugo and Jekyll.

Editing

In term of edition support, the subset of markdown supported increased again. Now it is possible to add and edit tables.

Additionally we started transforming inline markdown directly to rich text as you type. Support is limited to a few markdown constructs but is likely to grow over time.

You can now customize the font used by editor.

Aside from being able to edit text, it’s now possible to also create sketches directly from MarkNote.

Mobile Support

Mathis took care of ensuring MarkNote was fully usable when used with Plasma Mobile.

Windows and macOS support

Marknote now provides nightly builds for Windows and macOS. While the Windows builds should be fully usable, the macOS build still has an issue where most icons are not displayed. This should be fixed as soon as we can make use of the new KIconTheme version.

As part of the work to improve the macOS support, Marknote also gained global menu support for Linux.

Others
  • The command bar will show translated shortcuts. (Laurent Montel)
  • Unify spelling of MarkNote and fix typos in the README.md (Jonah Brüchert)
Get Involved

Mathis created a Matrix channel for MarkNote: #marknote:kde.org. There is also still a lot of small improvements that can be done everywhere and which don’t require a lot of programming experience. Take a look at these two tasks !31 and !27 for some inspiration on what you could work on.

Categories: FLOSS Project Planets

Web Review, Week 2024-20

Fri, 2024-05-17 06:34

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

Password cracking: past, present, future

Tags: tech, security

Ever wondered about the state of the art in password cracking? This is not an easy read but a good reference.

https://www.openwall.com/presentations/OffensiveCon2024-Password-Cracking/


Beyond public key encryption – A Few Thoughts on Cryptographic Engineering

Tags: tech, cryptography

There are other cryptography schemes out there with interesting properties. Too bad they’re not very much used.

https://blog.cryptographyengineering.com/2017/07/02/beyond-public-key-encryption/


SSD death, tricky read-only filesystems, and systemd magic?

Tags: tech, system, hardware, failure

Strange things do happen when the hardware fails… indeed the systemd open question at the end is mysterious.

https://rachelbythebay.com/w/2024/05/15/ro/


The new APT 3.0 solver | Blog of Julian Andres Klode

Tags: tech, debian, packaging

Interesting work. This is nice to see improvements and experiments in dependency solvers for package managers.

https://blog.jak-linux.org/2024/05/14/solver3/


Extensions for GNU Make

Tags: tech, tools, make

Looks like nice extensions to use GNU Make to run simple tasks.

https://github.com/mitjafelicijan/makext


Which filepath-join behavior is implemented for relative and absolute paths as arguments?

Tags: tech, system, filesystem

You expect joining file paths to be a simple operation? Think again, it’s definitely error prone and can change between stacks.

https://lukas-prokop.at/articles/2024-05-03-filepath-join-behavior


What even is a pidfd anyway?

Tags: tech, processes, system, linux

Definitely a recent and lesser known to interact with other processes. Could be useful in some cases.

https://www.corsix.org/content/what-is-a-pidfd


An informal comparison of the three major implementations of std::string - The Old New Thing

Tags: tech, c++, performance, memory

Interesting quick comparison, this shows the design tradeoffs quite well.

https://devblogs.microsoft.com/oldnewthing/20240510-00/?p=109742


GPUs Go Brrr · Hazy Research

Tags: tech, gpu, hardware, ai, machine-learning, neural-networks, performance

Interesting how much extra performance you can shave off the GPU by going back to how the hardware works.

https://hazyresearch.stanford.edu/blog/2024-05-12-tk


Sir, there’s a cat in your mirror dimension

Tags: tech, graphics, mathematics, funny

Funny experiment playing with the frequency domain and the spatial domain of an image. This gives unintuitive results for sure.

https://lcamtuf.substack.com/p/sir-theres-a-cat-in-your-mirror-dimension


Snapshot Testing For the Masses

Tags: tech, tests, snapshots

This is a technique which is definitely underestimated. There are plenty of libraries out there allowing to use them.

https://tigerbeetle.com/blog/2024-05-14-snapshot-testing-for-the-masses


Laurence Tratt: What Factors Explain the Nature of Software?

Tags: tech, programming, software, craftsmanship, engineering

Good food for thought. Explains quite well the factors which impact software development.

https://tratt.net/laurie/blog/2024/what_factors_explain_the_nature_of_software.html


Bye for now!

Categories: FLOSS Project Planets

KDE e.V. is looking for a graphic designer for environmental sustainability project

Tue, 2024-05-14 08:30

KDE e.V., the non-profit organisation supporting the KDE community, is looking for a graphic designer to implement materials (print design, logo design, infographics, etc.) for a new environmental sustainability campaign within KDE Eco. Please see the job ad for more details about this employment opportunity.

We are looking forward to your application.

Categories: FLOSS Project Planets

Introducing the Formatting plugin

Mon, 2024-05-13 13:35

So this is not quite an introduction since the plugin has been around for almost a year now, having been released in the 23.04 release but since I never got around to writing a blog about it, here I am.

In simple words, the formatting plugin allows one to format code easily and quickly. Well the "quickness" depends on the underlying code formatter but we try to be as quick as possible. So far if you wanted to do code formatting from within Kate, the only way to do that was to configure a tool in the External Tools plugin and then invoke it whenever you wanted to format the code. While this works it wasn't great for a few reasons. Firstly, you would loose undo history. Secondly, the buffer would jump and you would most likely loose your current position in the document. Thirdly, for every language you get a different tool and you need to remember the right tool to invoke on the right document type.

To simplify this, I decided to write a plugin that would expose a minimal UI but still provide a lot of features.

There are basically two ways to use this plugin:

  • Manually using the "Format Document" action.
  • Automatically on save

The correct formatter is invoked based on the document type in all cases. Additionally the plugin will preserve the document's undo history and user's cursor position when formatting the code so that the formatting of code doesn't disrupt user's workflow. This is especially important for automatic formatting on save.

Supported languages:

The current list of supported languages and formatters are as follows:

  • C/C++/ObjectiveC/ObjectiveC++/Protobuf
    • clang-format
  • Javascript/Typescript/JSX/TSX
    • Prettier
  • Json
    • clang-format
    • Prettier
    • jq
  • Dart
    • dartfmt
  • Rust
    • rustfmt
  • XML
    • xmllint
  • Go
    • gofmt
  • Zig
    • zigfmt
  • CMake
    • cmake-format
  • Pythong
    • autopep8
    • ruff
Configuring

The plugin can be configured in two ways:

  • Globally, from the Configure dialog
  • On a per project basis using the .kateproject file

When reading the config, the plugin will first try to read the config from .kateproject file and then read the global config.

Example:

{ "formatOnSave": true, "formatterForJson": "jq", "cmake-format": { "formatOnSave": false }, "autopep8": { "formatOnSave": false } }

The above

  • enables "format on save" globally
  • specifies "jq" as the formatter for JSON
  • disables "format on save" for cmake-format and autopep8

To configure formatting for a project, first create a .kateproject file and then add a "formatting" object to it. In the "formatting" object you can specify your settings as shown in the previous example. Example:

{ "name": "My Cool Project", "files": [ { "git": 1 } ], "formatting": { "formatterForJson": "clang-format", "autopep8": { "formatOnSave": false } } }
Categories: FLOSS Project Planets

KDE Goals April 2024 sprint

Mon, 2024-05-13 08:41

A few weeks ago I attended the KDE Goals April 2024 sprint

I was there as part of the Automation & Systematization sprint given my involvement in the release process, the "not very automatized" weekly emails about the status of CI about KDE Gear and KDE Frameworks, etc. but I think that maybe I was there more as "person that has been around a long time, ask me if you have questions about things that are documented through oral tradition"

I didn't end up doing lots of work on sprint topics themselves (though I participated in various discussions, did a bit of pair-programming with Aleix on QML accessibility issues, inspired DavidR to do the QML-text-missing-i18n check that he describes in his blog); instead I cheated a bit and used the sprint to focus on some of the KDE stuff I had a bit on my backlog, creating the KDE Gear release/24.05 branches and lots of MR reviewing and more!

Thanks KDE e.V. for sponsoring the trip, if you would like such events to continue please we need your continued donations

And remember Akademy talk submission period ends in 10 days, send your talk now!

Categories: FLOSS Project Planets

digiKam Recipes 2024-05-13 released

Sun, 2024-05-12 20:00
A new revision of digiKam Recipes is available for your reading pleasure. The new version covers the auto tagging feature introduced in digiKam 8.3 and explains how to run digiKam in a container. If you bought the book through Gumroad, you’ll find the new revision in the Library section. The book purchased through Google Play should be updated automatically to the latest version. If you have problems getting the latest revision of the book, contact the author at dmpop@cameracode.
Categories: FLOSS Project Planets

Introducing the Enhanced KubuQA: Revolutionising ISO Testing Across Ubuntu Flavors

Sun, 2024-05-12 17:28

The Kubuntu Team are thrilled to announce significant updates to KubuQA, our streamlined ISO testing tool that has now expanded its capabilities beyond Kubuntu to support Ubuntu and all its other flavors. With these enhancements, KubuQA becomes a versatile resource that ensures a smoother, more intuitive testing process for upcoming releases, including the 24.04 Noble Numbat and the 24.10 Oracular Oriole.

What is KubuQA?

KubuQA is a specialized tool developed by the Kubuntu Team to simplify the process of ISO testing. Utilizing the power of Kdialog for user-friendly graphical interfaces and VirtualBox for creating and managing virtual environments, KubuQA allows testers to efficiently evaluate ISO images. Its design focuses on accessibility, making it easy for testers of all skill levels to participate in the development process by providing clear, guided steps for testing ISOs.

New Features and Extensions

The latest update to KubuQA marks a significant expansion in its utility:

  • Broader Coverage: Initially tailored for Kubuntu, KubuQA now supports testing ISO images for Ubuntu and all other Ubuntu flavors. This broadened coverage ensures that any Ubuntu-based community can benefit from the robust testing framework that KubuQA offers.
  • Support for Latest Releases: KubuQA has been updated to include support for the newest Ubuntu release cycles, including the 24.04 Noble Numbat and the upcoming 24.10 Oracular Oriole. This ensures that communities can start testing early and often, leading to more stable and polished releases.
  • Enhanced User Experience: With improvements to the Kdialog interactions, testers will find the interface more intuitive and responsive, which enhances the overall testing experience.
Call to Action for Ubuntu Flavor Leads

The Kubuntu Team is keen to collaborate closely with leaders and testers from all Ubuntu flavors to adopt and adapt KubuQA for their testing needs. We believe that by sharing this tool, we can foster a stronger, more cohesive testing community across the Ubuntu ecosystem.

We encourage flavor leads to try out KubuQA, integrate it into their testing processes, and share feedback with us. This collaboration will not only improve the tool but also ensure that all Ubuntu flavors can achieve higher quality and stability in their releases.

Getting Involved

For those interested in getting involved with ISO testing using KubuQA:

  • Download the Tool: You can find KubuQA on the Kubuntu Team Github.
  • Join the Community: Engage with the Kubuntu community for support and to connect with other testers. Your contributions and feedback are invaluable to the continuous improvement of KubuQA.
Conclusion

The enhancements to KubuQA signify our commitment to improving the quality and reliability of Ubuntu and its derivatives. By extending its coverage and simplifying the testing process, we aim to empower more contributors to participate in the development cycle. Whether you’re a seasoned tester or new to the community, your efforts are crucial to the success of Ubuntu.

We look forward to seeing how different communities will utilise KubuQA to enhance their testing practices. And by the way, have you thought about becoming a member of the Kubuntu Community? Join us today to make a difference in the world of open-source software!

Categories: FLOSS Project Planets

KDE Applications & Icons

Sat, 2024-05-11 14:30

In this rather lengthy post I talk a bit about the current issues with icons for the KDE applications I work on or use.

Let’s start with looking at what I mean with KDE applications and what the current state is, up to KDE Frameworks 6.2 and current KDE Gear 24.02. Then let’s see what will be improved in future releases.

What do I mean with ‘KDE Applications’ #

If I speak about ‘KDE Applications’ here I talk about applications like Kate, Dolphin, Okular and others like that.

This means applications developed with Qt and KDE Frameworks that integrate well with the KDE Plasma desktop but are not restricted to it.

Many of this applications not just aim to work well on Linux & BSD or other open source operating systems but are ported and working well on the rather different Windows and macOS desktop. Some even are successful since years in the official Windows Store.

The above applications are part of the KDE Gear releases, but the described issues and solutions naturally are not restricted to stuff released with that.

What most of these applications have in common is that they rely on rather large parts of our Frameworks. With that they depend at least indirectly on an icon set that covers large parts of what our default icon set Breeze provides. Even if you use no icons from that icon set yourself in your application, just using the standard actions or many widgets/dialogs from Frameworks will rely on some subset of Breeze.

Current State of Icons per Desktop or Platform #

When talking about the current situation of icons that depends largely on the desktop or platform you are running the KDE application on.

Let’s take a look at some (I for sure miss some that are common or loved, that doesn’t mean I disregard them, I just want to limit the scope).

KDE Plasma on Linux/BSD with Wayland/X11 #

If you just aim to run on the KDE Plasma desktop with your Qt and KDE Frameworks based application, all is fine with icons, there is no problem.

The KDE project did their job, at least for Kate I never did have any issues with icons on Plasma.

Below a screenshot of Kate 24.02 running on Plasma 6. All icons are there, they are properly re-colored for the dark theme, too, including not just the used Breeze icons but for example the small Git icons in the left sidebar that Kate has bundled.

This is the vanilla state each user will get if Kate is installed on Plasma (and the dark theme is used). There are no patches done during building to achieve that nor is there any extra user configuration necessary.

Microsoft Windows #

If you run Kate on Windows, the icon situation is good, too, if you use our Windows Store variant or get at build done via Craft.

See below what the current nightly of Kate looks like in some Windows 11 VM (I just started it from the unpacked ZIP, no setup needed).

In the Craft build descriptions we do some patches to ensure the Breeze icons are bundled as library and the application links with that. In addition we ensure with some more patching that our own icon engine is used to allow for the proper recoloring.

If you don’t do that patching you will end up with close to no icons or for dark theme black on black icons.

Apple’s macOS #

The situation on macOS is the same as on Windows.

If you go with a Craft build of Kate, you will end up with something like below.

All icons are there and even application provided icons like our Git one are properly recolored.

Without the Craft patches Kate has more or less no icons like on Windows.

Haiku #

After covering Plasma and the two large closed-source desktop operating systems, as a small excursion, look how Kate (the KF5 based version) looks if installed on Haiku with the package they provide.

Kate looks ok, system icons intermixed with Breeze as fallback icons.

GNOME #

For testing this, I installed the latest Fedora Workstation in a VM. I have done no user configuration beside what the installer and initial setup wizard asked and then just installed the Kate package. The shell was even helpful to ask to do that after you just tried to start the not installed Kate.

Most icons not there, not that nice. For details about that read this post, we don’t need to re-iterate this again.

If you think: that is just Kate, let us just try Okular.

One thing that can be at least solved easily is that the icons are gone, we just install the Breeze icon set as package.

Looks ok, system icons intermixed with Breeze as fallback icons just like on Haiku. Not stylish but usable.

I was unable to trigger Kate or Okular to adjust to the dark mode GNOME provides, therefore I can not test if we end up with black on black icons there, but it is likely, as the fallback is just Breeze.

MATE #

Kate and Dolphin 24.02 on MATE with dark mode on NixOS, normal system packages, Breeze icons is installed.

System icons intermixed with Breeze as fallback icons, looks not that nice. Breeze icons not readable, as recoloring is not working.

Xfce #

Kate and Dolphin 24.02 on Xfce with dark mode on NixOS, normal system packages, Breeze icons is installed.

Same mix and unreadable state as on MATE.

Enlightenment #

Kate 24.02 on Enlightenment with dark mode on NixOS, normal system packages, Breeze icons is installed.

Just unreadable icons, beside out own Git icon and the few colored ones.

Summary: What’s up with Icons today #

The icons in KDE applications do look perfect on KDE Plasma. That should be no real surprise as many people working on these applications will test them there and KDE Frameworks and Qt are well tested on Plasma, too.

The icons look fine on Windows and macOS, too, at least for applications that got properly ported, but only thanks to patches we do in Craft. If you just grab e.g. Kate’s and the needed frameworks sources from our normal repositories, you don’t get that.

If the maintainers of the port for some OS do care, like the Haiku people, KDE applications can look fine there.

On other desktop environments it doesn’t look that great out of the box.

Unlike for the other operating systems, there the same packages without extra patches are running.

Whereas that works perfect on Plasma, we rely too much that the desktop environment running provides an icon set that has a similar coverage and naming as Breeze. As we don’t hard depend on the Breeze icons for our applications, it can even happen that just no fitting icons are there per default.

Even if that can be solved with some better package dependencies, you still end up with a patchwork look and without a Qt platform theme plugin that handles the needed recoloring to make dark mode feasible.

Getting it fixed #

Fortunately, just because the status quo is not that nice, it must not stay that way.

We have more or less all needed parts to fix the situation, we did already fix it during the porting to Windows and macOS.

We just never pushed to get this stuff done on Linux and Co.

How did we solve it there?

  • We have the Breeze icon set as Qt resource inside a library and link with that. That makes them a hard build and runtime dependency and easy to deploy.
  • We ensure the icon engine we have in our KIconThemes framework is there and used.
  • We enforce the Breeze Qt style. (this is not really icon related, but ensures an usable look’n’feel, too)

The first and the last thing are easy to do on Linux and Co., too, even with still allowing the user to override the icon set and style, but still defaulting to Breeze.

The second point is harder, as that requires at the moment a few hacks and is not 100% as good as going the Qt platform theme plugin route we use inside Plasma.

For KDE Frameworks 6.3 we worked to get that done.

See our meta issue on our GitLab instance covering that topic.

All is not perfect, we will need to get some Qt API to fully do that, but the current state is already usable.

Here a comparison with the state as we have it now in our released software compared to with the state in the current master branch on an Cinnamon desktop.

The left side is the current Kate 24.02, the right side the current master build of Kate with master Frameworks.

The hard dependency to the Breeze icon library is done in KIconThemes, if you link to that, you are guaranteed that you have Breeze icons. You can naturally just link to only the Breeze icon library on your own.

The ensuring that the proper icon engine is done with some new API in KIconThemes that application developers must opt-in for. The same for the Qt style setup, there we have API in KConfigWidgets.

For Kate the concrete changes can be found here. They are minimal and even remove some platform specific code for the style setup.

Including fallback code for pre 6.3 Frameworks compatibility of the style setting, the basic idea is:

#include <KIconTheme> #define HAVE_STYLE_MANAGER __has_include(<KStyleManager>) #if HAVE_STYLE_MANAGER #include <KStyleManager> #endif int main(...) { /** * trigger initialisation of proper icon theme */ #if KICONTHEMES_VERSION >= QT_VERSION_CHECK(6, 3, 0) KIconTheme::initTheme(); #endif QApplication yourAppInstance(...); #if HAVE_STYLE_MANAGER /** * trigger initialisation of proper application style */ KStyleManager::initStyle(); #else /** * For Windows and macOS: use Breeze if available * Of all tested styles that works the best for us */ #if defined(Q_OS_MACOS) || defined(Q_OS_WIN) QApplication::setStyle(QStringLiteral("breeze")); #endif #endif ... }

In the long run, once 6.3 is the minimal version the application depends on, this is just:

#include <KIconTheme> #include <KStyleManager> int main(...) { /** * trigger initialisation of proper icon theme */ KIconTheme::initTheme(); QApplication yourAppInstance(...); /** * trigger initialisation of proper application style */ KStyleManager::initStyle(); ... }

At the moment KIconTheme::initTheme() is still a bit hacky until we have proper Qt API, but that is not visible for the API user.

If we get this properly done in our applications, that will not just solve the current issue for running them in other desktop environments.

With that API in use and the now already upstreamed patches, one can build vanilla Frameworks and Kate on Windows and macOS and the icons will just work in the resulting application bundles and you get an usable style out of the box if Breeze is there.

Help Wanted! #

We have now some API to help our applications to be more usable on non-Plasma installations and Windows and macOS.

We still need to make use of it and we need to improve the implementation and upstream to Qt the needed extra API to make it a real 100% replacement to what we do with the Plasma integration plugin.

If you have time to help us, show up on our meta issue.

Not just coding is needed, we for example have still a few icons that don’t recolor well, help to fix that is wanted, too.

Feedback #

You can provide feedback on the matching KDE Social, reddit or Hacker News post.

Categories: FLOSS Project Planets

Hello Planet KDE!

Sat, 2024-05-11 09:31
Hello Planet KDE! I will be participating in Google Summer of Code this year adding Python support to a subset of the KDE Frameworks. You can follow my progress on this blog.
Categories: FLOSS Project Planets

This week in KDE: our cup overfloweth with cool stuff for you

Fri, 2024-05-10 23:43

This week a lot of work that has been in progress for weeks got merged! So check out the free goodies! And isn’t that amazing? Free stuff day after day, week after week. No price tag, no ads, no spying, no activation, no subscription, no nonsense. Just good work donated to the public. And not only from KDE, but the software stack we rely on, the distributions that make our software available, and on and on! We really live in an amazing time, folks.

New Features

By default, Dolphin now selects everything in a folder when you double-click on its view background, and also lets you configure it to do other things instead–up to and including running custom terminal commands! (George Florea Bănuș, Dolphin 24.08. Link)

Elisa now lets you shuffle the playlist contents by album, not just by track (Bart De Vries, Elisa 24.08. Link)

System Settings now features a page where you can turn on and configure remote login based on the Remote Desktop Protocol (Akseli Lahtinen and me: Nate Graham, Plasma 6.1. Link 1 and link 2)

Final UI is still a bit in flux; you’ll notice that the merge request at the second link isn’t merged yet, and there are some obvious misalignments

On Wayland, KWin can now be configured to pull color profile information from the monitor’s EDID metadata where present. Note that color profile information in EDID metadata is often wrong, so use this setting with caution. The feature includes inline help text to make you aware of this, too. (Xaver Hugl, Plasma 6.2. Link 1, link 2, link 3, and link 4)

UI Improvements

It’s now more obvious how you end a screen recording in Spectacle: the “currently recording” icon it shows in the System Tray now animates to get your attention a bit more, and Spectacle also sends a system notification to tell you about it (Noah Davis, Spectacle 24.08. Link)

When the clock disappears on Plasma’s lock screen, the cursor does too, which makes it possible to use the screen locker as a true screensaver if you give it a wallpaper plugin that has some kind of animated effect (Someone amazing, Plasma 6.0.4. Link)

It’s now obvious how you close Plasma 6’s fancy new panel configuration dialog: it has a “Done” button in the corner! (Taro Tanaka and Me: Nate Graham, Plasma 6.1. Link):

When you disconnect from a network while it’s showing the speed graph view, it now automatically switches over to the info view (Eugene Popov, Plasma 6.1. Link)

Smooth scrolling in KDE’s QML-based apps is now optional (though still on by default). It’s also possible that 3rd-party apps will eventually read and respect this setting, as I recently noticed Firefox does for our global animation speed setting (Nathan Misner, Plasma 6.2. Link 1 and link 2)

Small in-window dialogs in QtQuick-based software have gotten a visual overhaul to remove everything not visually necessary, which gives the text and buttons more focus (Carl Schwan, Frameworks 6.3. Link 1 and link 2)

Also not the final appearance, but this is the general design direction right now

Command bars in QtWidgets-based apps have also gotten a visual overhaul to match this more minimalistic style (Eugene Popov, Frameworks 6.3. Link):

Bug Fixes

Elisa no longer freezes when you open Party Mode while music is playing and the headerbar is collapsed or sized in certain ways (Pedro Nishiyama, Elisa 24.05. Link)

Fixed two longstanding issues that could cause Plasma to crash when it didn’t find all the screens it expected to find when waking up or booting the system (Marco Martin, Plasma 6.0.4 and 6.0.5. Link 1 and link 2)

Discover no longer misleadingly and incorrectly claims that apps with no licenses listed are proprietary (Harald Sitter, Plasma 6.0.5. Link)

Fixed a Plasma 6 regression that caused Discover to show annoying and ignorable error messages when viewing pages for content from store.kde.org (Harald Sitter, Plasma 6.0.5. Link)

The search/filter field in Plasma’s Printers widget now works (Mike Noe, Plasma 6.0.5. Link)

Fixed a Plasma 6 regression that caused panel widgets to overlap when you have an Activity Pager widget somewhere on a horizontal panel (Edo Friedman, Plasma 6.0.5. Link)

KWin is now more reliable about turning off screens in response to hardware and driver quirks that previously made this less than reliable with certain setups (Arsen Arsenović, Plasma 6.0.5. Link)

Config windows for Plasma’s System Monitor and System Tray widgets and the power profiles OSD no longer have mismatched colors for some UI controls and icons when using a mixed light/dark global theme such as Breeze Twilight (Akseli Lahtinen, Evgeniy Harchenko, and Nicolas Fella, Plasma 6.0.5. Link 1, link 2, and link 3)

Searching for something in Plasma’s Clipboard widget now returns a message with the correct text (“No matches”) when your search didn’t match anything (Thomas Duckworth, Plasma 6.0.5. Link)

Plasma’s Task Manager widget was internally refactored to simplify some old crusty code, which fixes two prominent layout glitches, including a Plasma 6 regression where tasks would overlap with adjacent widgets when in multi-row mode (Marco Martin, Plasma 6.1. Link 1 and link 2)

Other bug information of note:

Automation & Systematization

The plasma-workspace git repo has adopted a merge request template to guide people towards writing good commit messages, testing their changes, and including before-and-after screenshots. If this works out well, we’ll expend it elsewhere too (me: Nate Graham, link)

We now have a bug announcement bot that yells at us about the number of high and very high priority Plasma bugs, as well as the number of current known regressions (Ben Bonacci, 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!

Categories: FLOSS Project Planets

HDR and color management in KWin, part 3

Fri, 2024-05-10 20:00

Since the last two posts about this topic (part one, part two) there has been some more progress, so let’s take a look.

Brightness Control

In Plasma 6.0, when HDR is enabled, you get to choose the brightness of SDR content in the display settings:

This is however not convenient to change quickly and doesn’t apply to HDR content, which so far is always presented at 100% brightness. In Plasma 6.1, you’ll be able to use the same ways to control brightness as on laptops or with displays that support DDC/CI in SDR mode: Just drag the brightness slider, press keyboard shortcuts or scroll on the brightness icon in the system tray, and it’ll dim the whole screen like you’d expect.

Powerdevil unfortunately only supports controlling the brightness of a single screen right now, and that limitation also applies here. The API it uses to communicate with KWin is per display though, so once powerdevil supports multiple screens, it’ll work for HDR displays too.

More accurate colors without a Colorimeter

Many new displays have a color gamut much wider than sRGB, and assume that their input signal is fitting for their color gamut - which means that, unless you use an ICC profile, colors will be much more saturated than they should be. There’s a few ways to correct this:

  • find an sRGB option in your monitor’s OSD. This is usually pretty accurate if it’s available, but also limits all apps to sRGB
  • buy a Colorimeter and profile your display. That costs money though, and the display profiling situation on Linux isn’t in great shape at the moment (DisplayCAL on Flathub is 4 years old, my last attempt at building it on Fedora didn’t work, and it only works correctly on Xorg atm)
  • find an ICC profile for your display on the Internet and use that, hoping the display doesn’t deviate too much from the one that was profiled

There is a fourth option though: Use the color information from the display’s EDID. In Plasma 6.1, you can simply select this in the display settings.

Note that it comes with some caveats too:

  • the EDID only describes colors with the default display settings, so if you change the “picture mode” or similar things in the display settings, the values may not be correct anymore
  • the manufacturer may not measure every panel and just put generic values for the display model into the EDID
  • the manufacturer may put completely wrong values in there (which is why this is disabled by default)
  • even when correct values are provided, ICC profiles have much more detailed information on the display’s behavior than the EDID can contain

So if you care about color accuracy, this is not a way out of getting a Colorimeter and profiling your display… but if you just have two screens and you’re annoyed that one of them has much more intense colors than the other, this option is an easy and fast way to fix it.

Gamescope

Joshua Ashton implemented a new backend in gamescope, that uses Wayland subsurfaces to forward content to the host compositor instead of compositing it all into one image, and includes direct support for the frog_color_management_v1 protocol. The result of this is that with a new enough gamescope you don’t have to use any Vulkan layers to have gamescope pass HDR content to KWin, and you don’t have to use the --hdr-debug-force-output option anymore. If you want to play a game in HDR, you can now just put

gamescope -W 5120 -H 1440 --hdr-enabled --fullscreen %command%

into its launch options in Steam (with width and height adjusted to your screen ofc) and you’re done.

The backend also reduces the image copies made in comparison to the previously default SDL backend; the game’s buffers are directly passed to the host compositor, in most cases even while overlays are visible.

GPU Drivers

The driver situation is something I’ve been kind of ignoring in previous posts, but it’s obviously pretty important. First, let’s talk about the KMS API for setting a display into HDR mode. It consists of two parts:

  • the HDR_OUTPUT_METADATA property, which compositors use to set mostly brightness related metadata about the image, like which transfer function is used and which brightness and color values the content roughly contains
  • the Colorspace property, which compositors use to set the colorspace of the image, so that the display interprets the colors correctly

When you enable HDR in the system settings in Plasma, KWin will set HDR_OUTPUT_METADATA to the Perceptual Quantizer transfer function, and the brightness and mastering display properties to almost exactly what the display’s EDID says is optimal. This is done independently of the actual image content or what apps on the screen tell the compositor, to prevent the display from doing dumb things like dimming down just because an HDR video you opened claims it wants to display a supernova in your living room.

The one exception to that is the max_cll value - the maximum brightness of any pixel on the screen. It’s set to the maximum average brightness the display can show, because my Samsung C49RG94SSR monitor reduces the backlight brightness below SDR levels if you set the max_cll value it claims is ideal… With that one exception, this strategy has worked without issues so far.

On the Colorspace front, KWin sets the property to Default in SDR mode, and to BT2020_RGB when HDR is enabled. Sounds simple enough, but it’s of course actually more complicated.

Like any API that didn’t actually get used in practice for a very long time (if ever), both the API and the implementations were and are quite broken. The biggest issues I’ve seen so far are:

  • AMD’s implementation of the Colorspace property for DisplayPort was broken, which caused colors to be washed out in HDR mode (fixed in Linux 6.8)
  • the NVidia driver doesn’t force a modeset when HDR_OUTPUT_METADATA changes the transfer function or Colorspace changes its value, which causes temporary glitches when enabling HDR on some displays
  • the Intel driver claims to support both properties for HDR laptop displays, but the implementation is missing entirely (this is being worked on)
  • the Colorspace property implementations from Intel and NVidia cause washed out colors on many displays, because the API requires the compositor to change the property value depending on whether or not communication with the display uses RGB or YUV encoding… which the compositor doesn’t actually know anything about. The AMD implementation works around this by translating the property to the correct value in the kernel
  • multiple laptop- or display specific issues that you can look up in the bug trackers if you want to

To summarize, if you want to use HDR, it’s best to use an AMD GPU with either kernel 6.8, or if you really must use an older kernel, HDMI. Even then, you might still see issues in some cases though - if you do, please make bug reports about it! Neither driver nor compositor developers can fix what they don’t know is broken.

What’s next?

As always, for every bit of progress made or feature implemented, there’s ten more upcoming exciting things that could be talked about or worked on… but the big next topic is offloading of color management tasks to the GPU’s scanout hardware, to save power and improve performance. Next week I’ll be attending the 2024 Linux Display Next hackfest, which will focus on exactly that, so stay tuned!

Categories: FLOSS Project Planets

Using the QML Language Server for KDE Development (update)

Fri, 2024-05-10 06:30

In a previous post I talked about using the QML Language Server for KDE development. Since writing that post a few things happened, so it’s time for an update.

I mentioned that when using Kate qmlls should work out of the box when opening a QML file. That’s mostly true, there is one problem though. Depending on your distribution the binary for qmlls has a different name. Sometimes it’s qmlls, sometimes qmlls6 or qmlls-qt6. You may need to adjust the LSP Server settings in Kate to match the name on your system.

In order for qmlls to find types that are defined in your application’s C++ code those must not only be declaratively registered, qmlls also needs to be told where to find the type information. Fortunately Qt 6.7 comes with a handy way to do that. By passing -DQT_QML_GENERATE_QMLLS_INI=ON to CMake you get an appropriate config file generated. This will be placed into the project’s source directory but is specific to your setup, so add that to your gitignore file (PS: You can set up a global gitignore file for your system, so you don’t need to add this to all your projects). Unfortunately the initial implementation produced wrong configurations for some modules, but this is fixed in Qt 6.7.2.

A problem I mentioned is that qmlls doesn’t find modules that are not installed into the same path as Qt. With Qt 6.8 there will be two new options. The -I parameter allows to add custom import paths to qmlls’ search paths. The -E parameter makes qmlls consider the value of the QML_IMPORT_PATH environment variable for its search paths.

In order for qmlls to work properly modules need to be created using the CMake API and use declarative type registration. Since writing the last post some KDE modules have been converted to those, but there’s still more to do.

Thanks to the QML team for those swift improvements!

Categories: FLOSS Project Planets

Web Review, Week 2024-19

Fri, 2024-05-10 05:18

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

Heat Death of the Internet - takahē

Tags: tech, internet, web, satire, criticism

Obviously a satire, some of it feels eerily real though.

https://www.takahe.org.nz/heat-death-of-the-internet/


“AI now beats humans at basic tasks”: Really?

Tags: tech, ai, machine-learning, gpt, research, benchmarking, criticism

Nice article. It’s a good reminder that the benchmarks used to evaluate generative AI systems have many caveats.

https://aiguide.substack.com/p/ai-now-beats-humans-at-basic-tasks


Did GitHub Copilot really increase my productivity?

Tags: tech, ai, copilot, productivity

Interesting data point. This is a very specialized experience but the fact that those systems are kind of random and slow clearly play a good part in limiting the productivity you could get from them.

https://trace.yshui.dev/2024-05-copilot.html


AI Copilots Are Changing How Coding Is Taught - IEEE Spectrum

Tags: tech, ai, copilot, ethics, programming, teaching, learning

Well, maybe our profession will make a leap forward. If instead of drinking the generative AI cool aid, if we really get a whole cohort of programmers better at critical skills (ethical issues, being skeptical of their tools, testing, software design and debugging) it’ll clearly be some progress. Let’s hope we don’t fall in the obvious pitfalls.

https://spectrum.ieee.org/ai-coding


Machine Unlearning in 2024 - Ken Ziyu Liu - Stanford Computer Science

Tags: tech, ai, machine-learning, gpt, copyright, gdpr

Interesting questions and state of the art around model “unlearning”. This became important due to the opacity of data sets used to train some models. It’ll also be important in any case for managing models over time.

https://ai.stanford.edu/~kzliu/blog/unlearning


Systemd heads for a big round-number release [LWN.net]

Tags: tech, linux, systemd

Indeed the next systemd release feels feature packed. Definitely to keep an eye on.

https://lwn.net/SubscriberLink/971866/f244aee59d4d6a66/


UEFI, BIOS, and other confusing x86 PC (firmware) terms

Tags: tech, bios, uefi, hardware

Confused? Well, not surprising we mostly use those terms with very lax definitions.

https://utcc.utoronto.ca/~cks/space/blog/tech/UEFIAndBIOSAndOtherPCTerms


It’s always TCP_NODELAY. Every damn time. - Marc’s Blog

Tags: tech, tcp, networking

Getting network protocols right is definitely difficult.

https://brooker.co.za/blog/2024/05/09/nagle.html


Why Full Text Search is Hard

Tags: tech, language, search

If you wonder why information retrieval from natural language texts is a tough domain, here is a short article listing the important things to keep in mind.

https://transactional.blog/blog/2023-why-full-text-search-is-hard


All error messages are necessarily bad to some degree

Tags: tech, failure, ux

Not a reason to make no effort into having as proper error messages as possible. Still there’s some truth there that trying to have a really useful error message is a fool’s errand.

https://www.haskellforall.com/2024/05/all-error-messages-are-necessarily-bad.html?m=1


pyspread

Tags: tech, python, qt, spreadsheets, tools

Looks like a fun spreadsheet tool where you can use Python in any cell.

https://pyspread.gitlab.io/


The UX of UUIDs | Unkey

Tags: tech, uuid, encodings

Interesting set of tricks around UUIDs to make them easier to manipulate.

https://www.unkey.com/blog/uuid-ux


Build your own HTMX

Tags: tech, web, frontend, htmx

Excellent exercise in understanding how HTMX works under the hood.

https://joshi.monster/posts/build-your-own-htmx/


No, I don’t want to fill out your contact form - Adam Jones’s Blog

Tags: tech, web, email

Good exploration of the many ways contact forms fail us regularly. Also shows a few cases where you might still want to us them… in most cases you shouldn’t.

https://adamjones.me/blog/dont-use-contact-forms/


What You Need to Know about Modern CSS (Spring 2024 Edition) – Frontend Masters Boost

Tags: tech, web, frontend, css

Looks like a good reference about everything which can be done with the latest CSS evolutions.

https://frontendmasters.com/blog/what-you-need-to-know-about-modern-css-spring-2024-edition/


Google Testing Blog: Test Failures Should Be Actionable

Tags: tech, tests

Good advice indeed. Having asserts using appropriate matchers can go a long way understanding what went wrong.

https://testing.googleblog.com/2024/05/test-failures-should-be-actionable.html?m=1


Simplicity is An Advantage but Sadly Complexity Sells Better

Tags: tech, complexity

Definitely this. We tend to like complexity too much as a profession and field. It’s also a good reminder that the complexity of the problem and the complexity of the solution shouldn’t be conflated.

https://eugeneyan.com/writing/simplicity/


Programming mantras are proverbs - lukeplant.me.uk

Tags: tech, programming, culture, craftsmanship

Interesting take about the mantras often used in our profession. They shouldn’t be treated as laws, but as proverbs carrying a piece of contextual wisdom. It’s thus unsurprising that they tend to contradict each other. This contradiction should make us pause and think.

https://lukeplant.me.uk/blog/posts/programming-mantras-are-proverbs/


Refactor: Inline-Adjust-Extract - XP123

Tags: tech, programming, refactoring

Since there’s a clear tendency in the developers I meet to “extract at all costs”, this is a good reminder that sometimes you need to inline the code first. This very often brings better clarity in the context of use. In turns this leads to a better final extraction.

https://xp123.com/refactor-inline-adjust-extract/


Bye for now!

Categories: FLOSS Project Planets

KDE Ships Frameworks 6.2.0

Thu, 2024-05-09 20:00

Friday, 10 May 2024

KDE today announces the release of KDE Frameworks 6.2.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 Attica
  • Modernize: don't else after return. Commit.
  • Provider: document default ctor. Commit.
  • Providermanager: remove unused function with typo. Commit.
  • Postfiledata: simplify private. Commit.
  • Modernize: use unique_ptr for privates. Commit.
  • Basejob: don't leave dangly pointers. Commit.
  • Platformdependent: v3. Commit.
Baloo
  • Don't kill the lock file, can lead to random corruption. Commit. Fixes bug #389848
Bluez Qt
  • Fixed min_bitpool and max_bitpool from capabilities where ignored. Commit.
  • Port QML module to declarative type registration. Commit.
Breeze Icons
  • Add support for media-playlist-no-shuffle icon name. Commit.
  • Add audio/ogg and audio/x-vorbis+ogg icons. Commit.
  • Add audio/vnd.wave MIME type. Commit.
  • Remove generic non-symbolic audio and video icons. Commit.
  • Add 16 and 22px symbolic versions of some Places icons that were missing. Commit. Fixes bug #486316
  • Add zoom-in-map and zoom-out-map icons along with -symbolic versions. Commit.
  • Longer description for the ICONS_LIBRARY option. Commit.
  • Add symbolic versions for more USB device style icons. Commit.
  • Fix some scale errors. Commit. Fixes bug #485479
  • Fixed input-combo-on.svg colour issue. Commit.
  • Add -symbolic symlinks for notification-* icons. Commit.
  • Use new dev.suyu_emu.suyu id, add symlink for old id. Commit.
  • Add accessories-screenshot-tool icon/symlink. Commit.
  • [webfont] enable ligatures. Commit.
  • Gitignore: add VS Code dir. Commit.
  • Add input-keyboard-color 22px, 32 px. Commit.
Extra CMake Modules
  • API dox: KDEInstallDirs6: refer to qtpaths now as source of Qt paths. Commit.
  • API dox: KDEInstallDirs6: drop outdated note about being in ALPHA state. Commit.
  • Test: Increase minimum cmake version so that it works with Qt 6.7. Commit.
  • ECMQmlModule6: group qml and resource file calls. Commit.
  • Modules/ECMAddTests.cmake - handle unset or empty QT_PLUGIN_PATH. Commit.
KArchive
  • Gitignore: add VS Code dir. Commit.
KCMUtils
  • KQuickConfigModule: Don't crash on null object. Commit.
  • SimpleKCM: Remove remnants of footerParent. Commit.
  • Use ellipsis character instead of three dots. Commit.
  • GridDelegate: Port to ComponentBehavior: Bound. Commit.
  • GridDelegate: Consolidate code paths for opening a menu. Commit.
  • GridDelegate: Don't use qualified property access as appropriate. Commit.
  • GridDelegate: Use concrete type for the popup menu. Commit.
  • GridDelegate: Use somewhat more consistent ToolTip bindings, remove timeout. Commit.
  • Components: Drop QML import versions, unify import aliases. Commit.
  • Components: Guard nullable property access. Commit.
  • Components: Explicitly specify signal handler arguments. Commit.
  • KCModuleQml: Provide a fallback in case a pushed page is not one of magical KCMUtils types. Commit.
  • Add API to make header and footer paddings optional. Commit.
  • Round all the things consistently. Commit.
  • Pluginselector: cache delegates. Commit.
KCodecs
  • Gitignore: add VS Code dir. Commit.
KColorScheme
  • Gitignore: add VS Code dir. Commit.
KConfig
  • Avoid allocations while parsing int/float lists. Commit.
  • Adapt kdesktopfiletest to QTemporaryFile behavior change. Commit.
  • Guard header with an ifndef and include moc generates sources in the cpp file. Commit.
  • Autotests: Don't use a timeout in testLocalDeletion. Commit.
  • Adjust kconfig_compiler autotests to include a version without kcfgc. Commit.
  • Add a CMake function to add a kcfg file without kcfgc. Commit.
  • Gitignore: add VS Code dir. Commit.
KConfigWidgets
  • KRecentFilesAction: Load mimeType and action lazily. Commit.
  • Remove forward declaration of KToggleAction. Commit.
  • Test that an invalid language gives the empty string. Commit.
  • Gitignore: add VS Code dir. Commit.
KContacts
  • Restore country detection tests on FreeBSD. Commit.
  • Disable FreeBSD tests that recently started to fail in the CI. Commit.
KCoreAddons
  • Gitignore: add VS Code dir. Commit.
KCrash
  • Gitignore: add VS Code dir. Commit.
KFileMetaData
  • API dox: use "MIME type" and "URL" spellings consistently. Commit.
  • API dox: add some minimal info to undocumented classes. Commit.
  • API dox: add empty line between @brief (ends by first period) and rest. Commit.
  • API dox: add some dummy info to namespaces for doxygen to cover them also. Commit.
  • API dox: escape space after e.g. to work-around doxygen sentence end magic. Commit.
  • UserMetadata: return errors when xattr ops fails. Commit.
  • Value is already default timeout value in QT6 framework. Commit.
  • [XmlExtractor] Add support for compressed SVGs. Commit.
  • [XmlExtractorTest] Move Test class declaration to source file. Commit.
  • [Office2007Extractor] Reuse DublinCoreExtractor, fix namespace handling. Commit.
  • [DublinCoreExtractor] Add CreationDate (dc::created) support. Commit.
  • [DublinCoreExtractor] Skip properties from empty elements, cleanup. Commit.
  • Move date parser helper out of ExtractorPlugin, clean it up. Commit.
  • [TaglibExtractor] Include vnd.audible.aaxc audio books in supported types. Commit.
  • [Test] Include vnd.audible.aax audio books in coverage tests. Commit.
  • [TaglibWriterTest] Move test class declaration to source file, cleanup. Commit.
  • [TaglibExtractor|Writer] Fix mimetypes. Commit.
KGlobalAccel KGuiAddons
  • Recorder/kkeysequencerecorder: conform to KKeyServer changes. Commit.
  • Gitignore: add VS Code dir. Commit.
KHolidays KI18n
  • Gitignore: add VS Code dir. Commit.
KIconThemes
  • Allow to configure if we register our icon plugin for SVGs. Commit.
  • Port QML module to declarative type registration. Commit.
  • Fix typo in BreezeIcons::initIcons loading. Commit.
  • Gitignore: add VS Code dir. Commit.
KImageformats
  • Fix build with Qt 6.7 on 32 bits. Commit.
KIO
  • [kfilefilter] Consider mime globs valid. Commit.
  • Kfileitemtest: add basic tests for dir. Commit.
  • File_unix: don't call QMimeDatabase::mimeTypeForFile for directories. Commit.
  • Widgetsaskuseractionhandler prevent crash when job had no parent widget. Commit.
  • PreviewJob: Add file extension to thumbnail temp files. Commit. Fixes bug #463989
  • KFileItem: handle the case parent url path is empty. Commit.
  • KFileItemActions: Add logic to order actions between separators. Commit. Fixes bug #466115
  • KFileItem: fix getStatusBarInfo() displaying symlink target as "http:". Commit. Fixes bug #475422
  • ScopedProcessRunner: support waitForStarted. Commit.
  • ScopedProcessRunner: fix use of undeclared identifier 'close'. Commit.
  • [ftp] Always use default timeout values. Commit.
  • [http] Set error string for ERR_DOES_NOT_EXIST. Commit.
  • Force test language to en. Commit.
  • Knewfilemenu: Add @since 6.2 to the new signals and methods. Commit.
  • Kfilefilter.h: update API docs. Commit.
  • Kencodingfiledialog dox: rewrite API dox that refer to removed functions. Commit.
  • Kfilewidget dox: replace references to setFilter() with setFilters(). Commit.
  • Fix a few warnings. Commit.
  • Add EnableRemoteFolderThumbnail option checking. Commit.
  • PreviewJob: Display preview for locally mounted remote directories. Commit.
  • Knewfilemenu: add isNewDirNameJobRunning. Commit.
  • KFilePlacesItem: Show teardown busy indicator during optical media eject. Commit.
  • KDirModelTest.testDeleteFiles: lower debug output. Commit.
  • KUrlNavigator: allow adding a badge widget after the breadcrumb. Commit.
  • Set ideal case for TwoVectors. Commit.
  • Udsentry_api_comparison_benchmark: update. Commit.
  • Kurlnavigatorbutton: prevent. Commit.
  • Add more explicit moc includes to sources for moc-covered headers. Commit.
  • Connection: don't queue tasks until OOM. Commit.
  • Http: Fix parsing DAV:getlastmodified. Commit. Fixes bug #484671
  • Kfileitem: Linux, use statx to refresh files. Commit. Fixes bug #446858
Kirigami
  • Fixed wrong navigation and dialog header button colors. Commit. Fixes bug #486163
  • Card: Remove the unnecessary "reality check" binding on footer, add test. Commit.
  • Card: Restrict actions type from arbitrary QObject to T.Action. Commit.
  • Card: Shuffle things around a bit to make them look nicer. Commit.
  • Remove linkActivated/linkHovered from Delegate types. Commit.
  • InlineMessage: Improve examples in documentation, clean up QML. Commit.
  • OverlayDrawer: Rework separator's code, animate transitions. Commit.
  • OverlayDrawer: Hide segmented separator when the drawer is collapsed. Commit.
  • OverlayDrawer: Rewrite visibility condition for segmented separator. Commit.
  • OverlayDrawer: Rewrite segmented separator positioning expression. Commit.
  • OverlayDrawer: Bind segmented separator's width to the real separator's width. Commit.
  • GlobalDrawer: Set spacing on the default header. Commit.
  • Fix null deref in OverlaySheet. Commit.
  • OverlaySheet: Port layout hacks to a simple Padding with its contentItem. Commit.
  • Tst_pagepool: Port testing code from verify(==) to compare. Commit.
  • Tst_pagepool: Fix test properly. Commit.
  • Revert "tst_pagepool: Fix test". Commit.
  • CardsGridView and CheckableListItem are not a thing anymore. Commit.
  • Actions.main is not a thing anymore. Commit.
  • Tst_pagepool: Fix test. Commit.
  • Revert "PageRow: Fix parent of Component-based pages". Commit.
  • PageRow: Fix parent of Component-based pages. Commit. Fixes bug #482753
  • MnemonicAttached: Fix logic when pressing Alt. Commit.
  • Dialog: Always use an overlay as visual parent. Commit.
  • Link Activation TitleSubtitle. Commit.
  • ContextualHelpButton: remove excess space from tooltip. Commit. Fixes bug #481817
  • Fix crash on teardown when QML engine is already unset. Commit.
  • ListSectionHeader: Deprecate label property. Commit.
  • PageRow: Remove superfluous trailing semicolon from a property alias. Commit.
  • PromptDialog: Create default contentItem dynamically on demand. Commit.
  • Padding: Remove old overridden contentItem from the visual hierarchy. Commit.
  • Gitignore: add VS Code dir. Commit.
  • Add a explicit page type check in AbstractApplictionHeader. Commit.
  • Add radius unit for rounded rectangles. Commit.
KItemModels
  • Add dependency to QML module. Commit.
  • Port to declarative type registration. Commit.
KItemViews
  • Add more explicit moc includes to sources for moc-covered headers. Commit.
KNewStuff
  • Show header warning message framelessly. Commit. Fixes bug #485464
  • DownloadItemsSheet: use alternating background colors for legibility. Commit. Fixes bug #483724
  • Document ContentWarning. Commit.
  • Page: conditionalize warning message based on riskiness. Commit.
KNotifications
  • Enforce passing tests on Windows. Commit.
KParts
  • Enforce passing tests on Windows. Commit.
KRunner
  • Action: Make bool operator explicit. Commit.
  • Fix matchInternalFinished not being emitted in case of dbus errors. Commit.
KSVG
  • Don't call update on missing marginObject. Commit.
  • Make property type fully qualified. Commit.
KTextEditor
  • Fix caret painting for inline notes at the end of line. Commit.
  • KateCompletionWidget: Mark function static. Commit.
  • KateCompletionModel: remove useless std::as_const. Commit.
  • Run more tests offscreen. Commit.
  • Fix performance with many cursors in a large line. Commit.
  • Fix test expectations. Commit.
  • Fix crashs and OOM on load with encoding failures. Commit. Fixes bug #486195. Fixes bug #486134
  • A11y: Improve tab order for "Appeareance" -> "Borders". Commit.
  • A11y: Set "Line Height Multiplier" buddy. Commit.
  • Fix broken navigation in completion widget with multiple views. Commit.
  • Fix clicking in completion. Commit.
  • Fix textInsertedRange signal for insertText behind last line. Commit. Fixes bug #483363
KTextTemplate
  • Enforce passing tests on all platforms. Commit.
KUserFeedback KWallet
  • Fix reply type in portal implementation. Commit.
  • Kwalletportalsecrets.h: Add missing include. Commit.
  • Implement XDG Secrets Portal. Commit. Fixes bug #466197
KWidgetsAddons
  • Introduce KContextualHelpButton. Commit.
  • KMessageWidget: Fix handling of palette changes. Commit.
  • KMessageWidget: Make sure icon label is always vertically centered. Commit.
  • Gitignore: add VS Code dir. Commit.
KWindowSystem
  • Port to QNativeInterface::Private::QWaylandWindow. Commit.
  • Remove an unused explicit moc include. Commit.
  • Add more explicit moc includes to sources for moc-covered headers. Commit.
  • Introduce KXcbEvent to initialize the memory of sent XCB events. Commit.
KXMLGUI Purpose
  • Add pre share hooks. Commit.
  • Enforce passing tests on Windows. Commit.
QQC2 Desktop Style
  • TreeViewDelegate: Fix non-observable modelIndex property getting stuck. Commit.
  • [CheckIndicator] Use control as AbstractButton. Commit.
  • Add missing dependency to private module. Commit.
  • Add QTBUG to comment. Commit.
  • Make SwitchIndicator more compiler-friendly. Commit.
  • ItemBranchIndicators: Fix uninitialized member variable m_selected. Commit.
  • StyleSingleton: Check whether object is qGuiApp. Commit.
  • [RadioButton] Use id instead of parent lookup. Commit.
  • [TabButton] Fix property type. Commit.
  • Apply Kirigami.Units.cornerRadius to default list item background too. Commit.
  • Gitignore: add VS Code dir. Commit.
  • Use consistent radius value from Kirigami.Units.radius. Commit.
Solid
  • Remove too aggressive assert. Commit. Fixes bug #464149
  • [StorageAccess] Fix storageAccessFromPath returning unmounted filesystems. Commit.
  • [SolidHwTest] Extend FakeHW description with encrypted volume, add tests. Commit.
  • [SolidHwTest] Test Device::storageAccessFromPath. Commit.
  • [DeviceManager] Remove exists() check from storageAccessFromPath. Commit.
  • Udisks: Return empty string for "root" clearTextPath. Commit. Fixes bug #485507
  • [SolidHwTest] Remove unnecessary slotPropertyChanged helper, fix bug. Commit.
  • [SolidHwTest] Remove setenv wrapper, unnecessary qt_windows.h include. Commit.
  • [SolidHwTest] Move test class declaration to source file. Commit.
  • Udisks2: Add support CanCheck/Check/CanRepair/Repair. Commit.
Sonnet
  • Add dependency to QML module. Commit.
  • Gitignore: add VS Code dir. Commit.
Syntax Highlighting
  • Support single-quoted strings in MapCSS. Commit.
  • Add Syntax Highlighting for Vue Template Files. Commit.
  • Add syntax highlighting support for CashScript. Commit.
Categories: FLOSS Project Planets

Kirigami Addons 1.2

Thu, 2024-05-09 16:00

Kirigami Addons 1.2 is out with some accessibility fixes and one new component: FloatingToolBar.

Accessibility

During the accessibility sprint, there was an effort to ensure the date and time pickers were actually accessible. Aside from improving the screen reader support, this also allow to write Selenium integration tests which uses these components in Itinerary. Thanks Volker, David Redundo and others for working on this!

FloatingToolBar

Mathis and I worked on a new addition to Kirigami Addons adding to the existing FloatingButton and DoubleFloatingButton components. This component is perfect to add tool to editing and drawing areas and can either contain a simple RowLayout/ColumnLayout containing ToolButtons or a Kirigami.ActionToolBar.

import org.kde.kirigamiaddons.components import org.kde.kirigami as Kirigami FloatingToolBar { contentItem: Kirigami.ActionToolBar { actions: [ Kirigami.Action { ... } ] } }

Dialogs

With the style used by FormCardDialog and MessageDialog merged in Kirigami and soon in qqc2-desktop-style too, I did some changes to the FormCardDialog and MessageDialog to use the same padding as Kirigami.Dialog.

MessageDialog now works better on mobile with the layout adapting itself to the dialog size.

messagedialog with a mobile layout

Aditionally similar to KMessageBox, MessageDialog has an optional “don’t show again” option which can be enabled by setting the dontShowAgainName property similar to the KMessageBox api.

I also prepared these two components to work as standalone windows which is likely to come with this Qt 6.8 change request.

Dialog in Qt 6.8

CategorizedSettings

Jonah fixed a bug where it would be impossible to escape the settings on mobile.

Documentation

I added more screenshot to the API documentation and updated the TableView example app to use a ‘frameless’ style.

Qt 6.7 support

This release also brings support for Qt 6.7 on Android as this release introduced an API and ABI change to the Android code. Thanks Joshua for tackling this issue.

Categories: FLOSS Project Planets

Pages