Planet KDE
Week 2 recap - Aseprite's pixel perfect
New Human Interface Guidelines
Today I’d like to share a new set of Human Interface Guidelines (HIG) for KDE’s software that I’ve written, replacing the old one. This work was done over the past several months in consultation with many KDE designers and developers; the merge request says 42 people were CCd, and almost 500 comments were posted during the 2+ month review process.
You can read the document at https://develop.kde.org/hig.
Wait, why does anyone need this at all?Strictly speaking, we don’t need a HIG. Developers with an excellent eye for design can usually produce good results even without one. But for most of us, it’s useful to have guidelines to follow so you don’t have to think about the design side too much. Even for design-oriented developers, it’s useful to be able to have a quick reference for common patterns and rules.
And having a HIG is a good idea for any organization that wants for its software to share a similar look-and-feel and mode of operation, or any small individual developer who wants their software to match fit in well with a specific target platform (ours, in this case). When software fits into the visual and functional conventions of the platform with which it wants to integrate most closely, people already familiar with that platform learn to use it faster and like using it more. It feels at home to them. Comfortable, familiar, appealing.
Having and following a HIG makes all of this possible. And besides, we already had one anyway! But it needed major work.
Ok, so what was wrong with the old one?To be honest, it wasn’t very good. I say this as a contributor to the old one! But it suffered from multiple problems that demanded a total rewrite:
- It was hard to find anything because the basic structure was confused, with excessive segmentation.
- Content was severely outdated and reflected design paradigms that KDE developers haven’t used in years, and that the industry in general has moved away from. It was also missing a lot of information relevant to how we write apps today.
- Far too wordy; hard to find the actionable recommendations amid all the filler text!
- Full of old mockups and screenshots that weren’t even needed to illustrate the point, and which would become out of date again quickly if we took the time to update them.
- Many basic style errors: misspellings, incorrect English grammar, awkwardly phrased sentences, etc.
For these reasons, very few KDE developers or designers still paid any attention to the old HIG, besides of a small number of pages that did still have a reasonably high threshold of information density. And for the same reason, the HIG got very few contributions. I think when something is in a sufficiently poor state, it can even discourage people from contributing, because any small improvement seems like a raindrop in the ocean of urgent need. It’s demoralizing.
How is this new one any better?The new one was informed by research into how KDE apps look and work today. Some inspiration for structure and organization was taken from the ElementaryOS, GNOME, Apple, and Google HIGs — but not content! The content is all KDE.
The new HIG had the following design goals:
- Make 100% of the content actionable. No filler text, no rambling philosophy, no redundancy — just actionable recommendations for how to design your app. Short and sweet, and to the point!
- Reflect how KDE designs software today. For example we’ve seen a huge growth in new Kirigami-based apps using QtQuick as their UI technology (including some older KDE apps getting their UIs ported to Kirigami), and Kirigami is the UI platform that’s improving most quickly in KDE. So I made the decision to focus the recommendations on Kirigami as a platform. There’s still some content about QtWidgets, but it’s a Kirigami-focused document.
- Have flat navigation, so it’s easy to find everything. No deeply nested sub-pages and awkward categorization that makes you wonder why a page is in this category and not that one.
- Get the new content into good enough shape that people feel comfortable contributing. Hopefully people will start to submit tweaks, improvements, bug-fixes, and maintenance!
No, absolutely not! The HIG is intended to be a living document that evolves over time to better describe KDE’s design goals and software development paradigms.
Like any rewrite, there are bound to be rough edges and omissions compared to the old version. Maybe I missed a piece of useful information in the old HIG that had been buried somewhere but retained some value. Maybe there’s low-hanging fruit for improvement. Help out by contributing! It’s just some text with markdown styling; contributing to the HIG is waaaaaaay easier then contributing code.
In particular, there are some known omissions and limitations that you can help with:
- It needs more images. Multiple pages have embedded TODO comments where it would be nice to add a relevant image to illustrate a point.
- There’s nothing at all about visual style in general, simply delegating those decisions to the system’s active theme. To a certain extent this is intentional because we support visual theming, but it would also be good to add content about KDE’s default Breeze theme. I deliberately omitted this for now because a bunch of KDE’s designers are working on a fancy new style, and developers are working on a whole new theming engine to apply it. So the world around the HIG is in a state of flux. But if anyone wanted to add more about the current Breeze style anyway, that would be nice. Just know that it may be replaced once the new style is released.
- …With one exception: the entire section on Breeze icon design. This was kept from the old HIG content because it remains useful. Still, the presentation could use an overhaul to improve information density and collapse needless sub-pages into one parent page.
- The recommendation to use Kirigami is awkward for powerful apps that use features not currently available in Kirigami-based apps, such as dockable sidebars/panes, customizable toolbars, customizable keyboard shortcuts, and more. If you’re a developer, help add these features!
That’s great, it’s super duper appreciated! See these two links to learn how to contribute changes:
- https://develop.kde.org/hig/#contributing
- https://invent.kde.org/documentation/develop-kde-org/-/blob/master/README.md
If that’s too scary, we can help you get set up! Contact folks and we’ll see what we can do.
Still too scary? Then you can donate to KDE. Our budget is tiny, so your money genuinely does have an impact!
Release of KDE Stopmotion 0.8.7
Today marks the release of KDE Stopmotion 0.8.7!
Stopmotion is a Free Open Source application to create stop-motion animations. It helps you capture and edit the frames of your animation and export them as a single file.
Direct capture from webcams, MiniDV cameras, and DSLR cameras. It offers onion-skinning, import images from disk, and time lapse photography. Stopmotion supports multiple scenes, frame editing, basic sound track, animation playback at different frame rates, and GIMP integration for image. Movies can be exported to a file and to Cinelerra frame lists.
Technically, it is a C++ / Qt application with optional dependencies to camera capture libraries.
Changes in release 0.8.7This release comes with no new features, but improvements to the project itself.
Changes
- The project is now officially called to KDE Stopmotion. The former name Linux Stopmotion is no longer used.
- Support for qmake has been removed. Use CMake instead.
Features
- Port serialization to libarchive. libtar is abandoned. (thanks to Bastian Germann)
Bugfixes
- The .sto files miss the tar trailer. (#16, thanks to Bastian Germann for providing a fix)
Improvements
- Use pkg-config to find dependencies vorbisfile and xml2 (thanks to Barak Pearlmutter)
- Remove code that relies on deprecations in Qt 5; this is a preparation to move to Qt 6.
- Transition from Qt 5 to version 6. I am stuck with my port as QAudioDeviceInfo that was dropped in Qt 6. I need some help to port Stopmotion to the new way to handle audio with Qt 6 / Qt Mulimedia.
- We should integrate better to KDE's tech stack: Internationalization, using KDE libraries, update and reformat documentation.
If you are interested, give Stopmotion a try. Reach out to our mailing list stopmotion@kde.org or have a look into our project. Share your ideas or get involved!
Firefox profiles and Plasma launchers (X11)
I’m a heavy user of Firefox profiles. Apart from using different profiles for different activities, I also have a few extra profiles that all run in the Default activity.
This means that I need to have different icons shown in Plasma’s panel in order to be able to easily differentiate which profile a window belongs to.
Sure, I use the tasks applet which shows the window title instead of the icon-only one (I prefer usability to minimalism), but still, it isn’t enough as sometimes the active tab in a Firefox window might not have the most informative title.
Plasma seems to rely on the application name and the window class when choosing the icon it will show in the panel. Which means that, by default, all Firefox instances end up having the same icon.
Librewolf with a custom profile iconFortunately, Firefox allows you to specify the window class it should use through command line arguments.
firefox -P ProfileName --class WindowClassNameAnd, to connect a launcher to a specific window class, you just need to add the following line to the .desktop file:
StartupWMClass=WindowClassNameSo, in order to have a nicely supported Firefox profile, you can create a launcher with a desktop file similar to the following:
[Desktop entry] Exec=firefox -P SocialSites --class FirefoxSocialSites Icon=user-available-symbolic StartupWMClass=FirefoxSocialSitesIt also works with Firefox derivatives such as Librewolf (which can be seen in the screenshot above) and others.
You can support my work on Patreon, or you can get my book Functional Programming in C++ at Manning if you're into that sort of thing. -->A Selenium Primer - Part 1: An Introduction to Selenium
In this video I introduce Selenium AT-SPI for testing KDE applications. I present the KDE goals of sustainable software, accessibility, and automation in system testing, and how Selenium helps achieve all of them.
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).
A Selenium Primer - Part 4: Writing Selenium Tests
In this video I deep dive into writing tests with Selenium. I create a simple test for the KCalc calculator application and run it with Selenium AT-SPI. Similar steps can be followed to write GUI tests for any KDE 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).
A Selenium Primer - Part 3: Identifying Accessibility Issues
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).
A Selenium Primer - Part 2: Setting up Selenium
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).
Kate Fun Logo
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 Animated Version LicensingG2 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.
GPN22
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.
ⓒ Entropia e.V. KDE Itinerary Debugging other people’s tripsOccasionally 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.
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.
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 managementWe 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 managementHow 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 infrastructureWe 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 alertsOne 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.
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 :)
These past two weeks in KDE: massive stability work for Plasma 6.1
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 FeaturesPlasma’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 ImprovementsDolphin 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 FixesFixed 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:
- 5 Very high priority Plasma bugs (up from 3 two weeks ago). Current list of bugs
- 33 15-minute Plasma bugs (down from 36 two weeks ago). Current list of bugs
- 294 KDE bugs of all kinds fixed over the last two weeks. Full list of bugs
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 & SystematizationTurned 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 ElseThis 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 HelpThe 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!
Web Review, Week 2024-23
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 ModelsTags: 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
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.
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/
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
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/
Tags: tech, benchmarking, tools
Looks like an interesting benchmarking tool. To keep an eye on.
https://github.com/sosy-lab/benchexec
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
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
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/
Tags: tech, 3d, game, vulkan
Interesting dive into the experience of writing a small Vulkan engine (almost) from scratch.
https://edw.is/learning-vulkan/
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
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.
Bye for now!
Qt Creator 13.0.2 released
We are happy to announce the release of Qt Creator 13.0.2!
KDE Ships Frameworks 6.3.0
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.
- Remove explicit maintainer from metainfo. Commit.
- 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.
- 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.
- Don't show maintainers for frameworks. Commit.
- Don't show framework type in frameworks list. Commit.
- Require unit tests to pass on Windows. Commit.
- It compiles fine without qt6.7 deprecated methods. Commit.
- Add missing includes. Commit.
- Remove explicit maintainer from metainfo. Commit.
- It compiles fine without qt6.7 deprecated methods. Commit.
- Use ellipsis character instead of three dots in UI strings. Commit.
- 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.
- 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.
- Allow to bundle color schemes with applications inside resources. Commit.
- Remove explicit maintainer from metainfo. Commit.
- It compiles fine without qt6.7 deprecated methods. Commit.
- Remove explicit maintainer from metainfo. Commit.
- 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.
- 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.
- 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.
- 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.
- Handle kwin's wayland qpa as wayland platform. Commit.
- It compiles fine without qt6.7 deprecated methods. Commit.
- KeySequenceItem: Fix height management. Commit.
- Remove useless note from metainfo. Commit.
- Fix tier in metainfo. Commit.
- Remove explicit maintainer from metainfo. Commit.
- Remove explicit maintainer from metainfo. Commit.
- Remove explicit maintainer from metainfo. Commit.
- Remove explicit maintainer from metainfo. Commit.
- Improve metainfo.yaml. Commit.
- Deprecated KColorCollection. Commit.
- Remove custom definitions of pi. Commit.
- Proofreading. Commit.
- Remove explicit maintainer from metainfo. Commit.
- Latvia holiday grammar corrections. Commit.
- Remove explicit maintainer from metainfo. Commit.
- 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.
- Remove explicit maintainer from metainfo. Commit.
- Ensure dependencies are provided on Android. Commit.
- 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.
- 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.
- Revert "KSelectionProxyModelTest: Skip tests broken by upstream changes". Commit.
- KWidgetItemDelegatePoolPrivate: remove unused allocatedWidgets member. Commit.
- Remove explicit maintainer from metainfo. Commit.
- Use ellipsis character instead of three dots in UI strings. Commit.
- 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.
- Don't include quiet package in feature_summary. Commit.
- Notifybysnore: correct action buttons. Commit. Fixes bug #486911
- Remove explicit maintainer from metainfo. Commit.
- Remove explicit maintainer from metainfo. Commit.
- It compiles fine without qt6.7 deprecated methods. Commit.
- Remove explicit maintainer from metainfo. Commit.
- Only use KDirNotify if existing. Commit.
- Docs: KMimeTypeTrader no longer exists. Commit.
- Use QUrl::PreferLocalFile for URL emitted with Part::setWindowCaption. Commit.
- Fix tier information. Commit.
- Remove explicit maintainer from metainfo. Commit.
- Port to ecm_add_qml_module and declarative type registration. Commit.
- 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
- 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.
- Support for fractional scaling. Commit.
- Color also absolute path images. Commit. Fixes bug #485801
- Reapply "Port to declarative type registration". Commit.
- 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.
- Remove explicit maintainer from metainfo. Commit.
- Use ellipsis character instead of three dots in UI strings. Commit.
- Remove explicit maintainer from metainfo. Commit.
- 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.
- Fix secrets portal wallet access. Commit. Fixes bug #487348
- Remove explicit maintainer from metainfo. Commit.
- 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.
- Update to plasma window management v17. Commit.
- 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.
- 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.
- Remove explicit maintainer from metainfo. Commit.
- 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.
- Remove explicit maintainer from metainfo. Commit.
- Use ellipsis character instead of three dots in UI strings. Commit.
- Remove explicit maintainer from metainfo. Commit.
- 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.
- Remove explicit maintainer from metainfo. Commit.
Needlessly Public
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.
Kubuntu, KDE, Debian: I am still here, in loving memory of my brother.
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.
Personal:
Support for my grandson: https://www.gofundme.com/f/in-loving-memory-of-william-billy-dean-scalf
KDE e.V. is looking for a contractor to coordinate the KDE Goals process
KDE e.V., the non-profit organization supporting the KDE community, is looking for a proactive contractor to support and coordinate the KDE Goals process. The role involves providing project management, community engagement, event planning, and other needed services to help drive the success of KDE Goals. Please see the job ad for more details about this contracting opportunity.
We are looking forward to your application.
What should KDE focus on for the next 2 years? You can propose a goal!
Every 2 to 3 years KDE selects 3 goals that the whole community can focus on for the coming years. For the past 2 years we have focused on improving the accessibility of our applications, worked to make our software more sustainable and automated and improved a lot of processes to make developing software in KDE smoother. To learn more about these goals check out the KDE Goals page. We will wrap up these goals at Akademy in Würzburg later this year.
It is now time to figure out what the next goals should be. We are starting this today by opening the floor for proposals. This means you (yes you!) can campaign for something you and others want to work on over the next 2 years and rally the KDE community behind it. To give you some inspiration you can have a look at the complete list of goals we’ve had in previous years.
How does it work?You (and a small group of others) can submit a proposal by opening a ticket on this Phabricator board. Copy the template into a new ticket and explain your idea. The template gives you a few hints to help you create a meaningful proposal. This process is open until July 5th. (On July 5th we will start the refinement stage, where others can further help you improve the proposal.)
Some things to keep in mind- The process is explicitly open to proposals from people who are not yet KDE contributors.
- The process is explicitly open to everyone, not just developers.
- We expect the champions of the goal to be the champions, not the only ones working on the goal. At the same time they will need to put in significant work to rally people around their goal.
We are tweaking the process a bit this time. If you’re familiar with the process from previous years here are the most important changes:
- We are moving from an individual champion to a small team of champions. Each goal should have someone who can carry the vision of the goal forward, someone who can technically steer it and someone to promote it. Other setups are possible where it makes sense for the particular goal but a goal needs a small team. Don’t have a team yet? That’s ok. Submit a proposal and say what you need. We will try to help find others to join.
- We are focusing the champion role more on driving the goal forward through others and less by doing all the work themselves.
- We will work with the goal champions on fundraising for specific projects that support their goal.
- Starting today until July 5th: Propose goals and find team
- July 5th to August 15th: Refine proposals together with the community (identify issues, remove blockers, sharpen the proposal, …)
- August 15th to 31st: Voting on the proposed goals by active KDE contributors
- September 6/7th: Selected goals are announced at Akademy
If you still have questions you can ask them in various places:
- In the office hour on June 14th at 7PM Berlin time. You can find the time in your timezone here. The meeting will happen on BigBlueButton.
- The KDE Goals matrix channel.
- The KDE Community mailing list.
- Reaching out to me directly.
Ruqola 2.2.0
Ruqola 2.2.0 is a feature and bugfix release of the Rocket.chat app.
Improvements:
- Allow to increase/decrease font (CTRL++/CTRL+-)
- Add channel list style (Condensed/Medium/Extended)
- Add forward message
- Improve mentions support.
- Add support for deep linking Deep Linking.
- Implement block actions.
- Implement personal token authentication. Bug 481400
- Add Plasma Activities Support
- Add Report User Support
- Implement Channel Sound Notification.
- Implement New Room Sound Notification.
- Implement Sorted/Unsorted markdown list.
Some bug fixing:
- Fix dark mode support.
- Fix jitsi support.Fix translate message in direct channel.
- Don't show @here/@all as user.
- Reduce memory footprint.
- Use RESTAPI for logging.
- Allow to send multi files.
- Fix preview url.
URL: https://download.kde.org/stable/ruqola/
Source: ruqola-2.2.0.tar.xz
SHA256: 4091126316ab0cd2d4a131facd3cd8fc8c659f348103b852db8b6d1fd4f164e2
Signed by: E0A3EB202F8E57528E13E72FD7574483BB57B18D Jonathan Esk-Riddell jr@jriddell.org
https://jriddell.org/esk-riddell.gpg
First Beta for Krita 5.2.3 Released
We are releasing the first Beta of Krita 5.2.3. This release primarily brings a complete overhaul of our build system, making it so that our CI system can now build for all 4 platforms (a Continuous Integration system basically builds a program after every change, runs some tests and based on that helps us track down mistakes we made when changing Krita's code).
Beyond the rework of the build system, this release also has numerous fixes, particularly with regards to animated transform masks, jpeg-xl support, shortcut handling on Windows and painting assistants.
In addition to the core team, special thanks goes out to to Freya Lupen, Grum 999, Mathias Wein, Nabil Maghfur Usman, Alvin Wong, Deif Lou and Rasyuqa A. H. for various fixes, as well as the first time contributors in this release cycle (Each mentioned after their contribution).
- Fix docker ShowOnWelcomePage flag (Bug 476683)
- windows: Exclude meson in release package
- Fix integer division rounding when scaling image (Patch by David C. Page, Thanks!)
- Fix Comic Manager export with cropping TypeError
- WebP: properly export color profile on RGBA model (Bug 477219)
- WebP: properly assign profile when importing image with non-RGBA model (Bug 478307)
- Fix saving animated webp
- Added missing layer conversion options to layer docker rightclick menu (Patch by Ken Lo, thanks! MR 2039
- Fix Last Documents Docker TypeError
- Replace the Backers tab with a Sponsors tab
- Comic Project Management Tools: Fix crash in comic exporter due incorrect api usage. (Bug 478668) Also turn off metadata retrieval for now.
- Properly check color patch index for validity (Bug 480188)
- Fix build with libjxl 0.9.0 (Bug 478987, patch by Timo Gurr, thanks!)
- Included Krita's MLT plugin in our source tree, as well as several fixes to it.
- Possibly fix ODR violation in the transform tool strategies (Bug 480520)
- Fix framerate issue when adding audio to the image (Bug 481388)
- Fix artifacts when drawing on a paused animation (Bug 481244)
- Fix issues generating reference image in KisMergeLabeledLayersCommand (Bug 471896, Bug 472700)
- Simplify similar color selection tool and add spread option
- Fix artifacts when moving a layer under a blur adjustment layer (Bug 473853)
- Make sure that tool-related shortcuts have priority over canvas actions (Bug 474416)
- Refactor KisLodCapableLayerOffset into a reusable structure
- Fix current time loading from a .kra file with animation
- Clone scalar keyframes when creating a new one in the GUI
- Refactor transform masks not to discard keyframe channels on every change (Bug 475385)
- Fix artifacts when flattening animated transform mask (Bug 475334)
- Fix extra in-stroke undo step when using Transform and Move tools (Bug 444791)
- Fix rounding in animated transform masks with translation (Bug 456731)
- Fix canvas inputs breaking due to inconsistent key states (BUG: 451424)
- Make wave filter allowed in filter masks/layers (Bug 476033)
- Fix an offset when opening files with animated transform masks (Bug 476317)
- Fix transform mask offsets after running a transform tool on that (Bug 478966)
- Fix creation of keyframes before the first frame for scalar channels (Bug 478448)
- Support xsimd 12 (Bug 478986)
- Fix new scalar frames to use interpolated values (Bug 479664)
- Don't skip updates on colorize mask props change (Bug 475927)
- Fix restoring layer's properties after new-layer-from-visible action (Bug 478225)
- Fix transform masks being broken after duplication (Bug 475745)
- Fix a crash when trying to open multiple files with one D&D (Bug 480331)
- Fix cache being stuck when adding hold frames (Bug 481099)
- Make PerspectiveAssistant respect snapToAny parameter
- Fix logic in 2-Point Perspective Assistant
- Remove unnecessary locking code from several assistants
- Move a bunch of code repeated in derived classes to KisPaintingAssistant
- Fix wg selector popup flickering with shortcut
- Fix updating KoCanvasControllerWidget's canvas Y offset when resizing the canvas
- Fix esthetics of the Welcome Page, remove banner.
- Re-enable the workaround for plasma global menu (Bug 483170)
- Improvements to support for Haiku OS.
- Fix crash on KisMergeLabeledLayersCommand when using color labeled transform masks (Bug 480601)
- PNG: prevent multiple color conversions (Bug 475737)
- Fix crash when pasting font family in TextEditor (Bug 484066)
- Fix grids glitches when subdivision style is solid (Bug 484889)
- Add 1px padding to rects in KisPerspectiveTransformWorker to account for bilinear filtering (Bug 484677)
- Fix activation of the node on opening .kra document (Bug 480718)
- Various snapcraft fixes by Scarlet Moore
- Fix sequence of imagepipe brushes when used in the line tool (Bug 436419)
- tilt is no longer ignored in devices that support tilt (Bug 485709, patch by George Gianacopoulos, thanks!)
- Make Ogg render consistently check for Theora
- Fix issue with appbundle builder using libs.xml from arm64-v8a (Bug 485707)
- Don't reset redo when doing color picking (Bug 485910)
- Show and error when trying to import version 3 xcf files (Bug 485420)
- Remove a bogus warning about Intel's openGL driver
- Fix incorrect inclusion of "hard mix softer" blend mode in layer styles
- Fixed issue on S24 ultra regarding S-pen settings when HiDPI is turned off (Patch by Spencer Sawyer, thanks!).
- Revive code path in perspective ellipse and 2pp assistant draw routine
- Don't try to regenerate frames on an image that has no animation
- Fix data loss on reordering storyboards.
- Improving the quality of icons for Android (Patch by Jesse 205, thanks! Bug 463043)
- Enable SIP type stub file generation (Patch by Kate Corcoran, thanks!)
If you're using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the Krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.
Note that we are not making 32 bits Windows builds anymore.
- 64 bits Windows Installer: krita-5.2.3-beta1-setup.exe
- Portable 64 bits Windows: krita-5.2.3-beta1.zip
- Debug symbols. (Unpack in the Krita installation folder)
- 64 bits Linux: krita-5.2.3-beta1-x86_64.appimage
The separate gmic-qt AppImage is no longer needed.
(If, for some reason, Firefox thinks it needs to load this as text: to download, right-click on the link.)
macOSNote: if you use macOS Sierra or High Sierra, please check this video to learn how to enable starting developer-signed binaries, instead of just Apple Store binaries.
- macOS disk image: krita-5.2.3-beta1.dmg
We consider Krita on ChromeOS as ready for production. Krita on Android is still beta. Krita is not available for Android phones, only for tablets, because the user interface requires a large screen.
We are no longer building the 32 bits Intel CPU APK, as we suspect it was only installed by accident and none of our users actually used it. We are hoping for feedback on this matter.
Source code md5sumFor all downloads, visit https://download.kde.org/unstable/krita/5.2.3-beta1/ and click on Details to get the hashes.
KeyThe Linux AppImage and the source .tar.gz and .tar.xz tarballs are signed. You can retrieve the public key here. The signatures are here (filenames ending in .sig).