Skip to content

Wednesday, 4 September 2024

Whoops, it's already been months since I last blogged. I've been actively involved with Plasma and especially its power management service PowerDevil for over a year now. I'm still learning about how everything fits together.

Turns out though that a little bit of involvement imbues you with just enough knowledge and confidence to review other people's changes as well, so that they can get merged into the next release without sitting in limbo forever. Your favorite weekly blogger for example, Nate Graham, is a force of nature when it comes to responding to proposed changes and finding a way to get them accepted in one form or another. But it doesn't have to take many years of KDE development experience to provide helpful feedback.

Otfen we simply need another pair of eyes trying to understand the inner workings of a proposed feature or fix. If two people think hard about an issue and agree on a solution, chances are good that things are indeed changing for the better. Three or more, even better. I do take pride in my own code, but just as much in pushing excellent improvements like these past the finish line:

In turn, responsible developers will review your own changes so we can merge them with confidence. Xaver, Natalie and Nate invested time into getting my big feature merged for Plasma 6.2, which you've already read about:

Per-display Brightness Controls

Nate's screenshot is nice and hi-res, I'll just reuse it here

This was really just a follow-up project to the display support developments mentioned in the last blog post. I felt it had to be done, and it lined up nicely with what KWin's been up to recently.

So how hard could it be to add another slider to your applet? Turns out there are indeed a few challenges.

In KDE, we like to include new features early on and tweak them over time. As opposed to, say, the GNOME community, which tends to discuss them for a loooong time in an attempt to merge the perfect solution on the first try. Both approaches have advantages and drawbacks. Our main drawback is harder to change imperfect code, because it's easy to break functionality for users that already rely on them.

Every piece of code has a set of assumptions embedded into it. When those assumptions don't make sense for the next, improved, hopefully perfect solution (definitely perfect this time around!) then we have to find ways to change our thinking. The code is updated to reflect a more useful set of assumptions, ideally without breaking anyone's apps and desktop. This process is called "refactoring" in software development.

But let's be specific: What assumptions am I actually talking about?

There is one brightness slider for your only display

This one's obvious. You can use more than just one display at a time. However, our previous code only used to let you read one brightness value, and set one brightness value. For which screen? Well... how about the code just picks something arbitrarily. If you have a laptop with an internal screen, we use that one. If you have no internal screen, but your external monitor supports DDC/CI for brightness controls, we use that one instead.

What's that, you have multiple external monitors that all support DDC/CI? We'll set the same value for all of them! Even if the first one counts from 0 to 100 and the second one from 0 to 10.000! Surely that will work.

No it won't. We only got lucky that most monitors count from 0 to 100.

The solution here is to require all software to treat each display differently. We'll start watching for monitors being connected and disconnected. We tell all the related software about it. Instead of a single set-brightness and a single get-brightness operation, we have one of these per display. When the lower layers require this extra information, software higher up in the stack (for example, a brightness applet) is forced to make better choices about the user experience in each particular case. For example, presenting multiple brightness sliders in the UI.

A popup indicator shows the new brightness when it changes

So this raises new questions. With only one display, we can indicate any brightness change by showing you the new brightness on a percentage bar:

OSD indicator with percentage bar, but no display name

Now you press the "Increase Brightness" key on your keyboard, and multiple monitors are connected. This OSD popup shows up on... your active screen? But did the brightness only change for your active screen, or for all of them? Which monitor is this one popup representing?

Ideally, we'd show a different popup on each screen, with the name of the respective monitor:

OSD indicator with percentage bar plus display name. Early screenshot, the final version uses the same small icon as the original popup

That's a good idea! But Plasma's OSD component doesn't have a notion of different popups being shown at the same time on different monitors. It may even take further changes to ask KWin, Plasma's compositor component, about that. What we did for Plasma 6.2 was to provide Plasma's OSD component with all the information it needs to do this eventually. But we haven't implemented our favorite UI yet, instead we hit the 6.2 deadline and pack multiple percentages into a single popup:

OSD indicator with display names and percentages both as text

That's good enough for now, not the prettiest but always clear. If you only use or adjust one screen, you'll get the original fancy percentage bar you know and love.

The applet can do its own brightness adjustment calculations

You can increase or decrease brightness by scrolling on the icon of the "Brightness and Color" applet with your mouse wheel or touchpad. Sounds easy to implement: read the brightness for each display, add or subtract a certain percentage, set the brightness again for the same display.

Nope, not that easy.

For starters, we handle brightness key presses in the background service. You'd expect the "Increase Brightness" key to behave the same as scrolling up with your mouse wheel, right? So let's not implement the same thing in two different places. The applet has to say goodbye to its own calculations, and instead we add an interface to background service that the applet can use.

Then again, the background service never had to deal with high-resolution touchpad scrolling. It's so high-resolution that each individual scroll event might be smaller than the number of brightness steps on your screen. The applet contained code to add up all of these tiny changes so that many scroll events taken together will at least make your screen change by one step.

Now the service provides this functionality instead, but it adds up the tiny changes for each screen separately. Not only that, it allows you to keep scrolling even if one of your displays has already hit maximum brightness. When you scroll back afterwards, both displays don't just count down from 100% equally, but the original brightness difference between both screens is preserved. Scroll up and down to your heart's content without messing up your preferred setup.

Dimming will turn down the brightness, then restore the original value later

Simple! Yes? No. As you may guess, we now need to store the original brightness for each display separately so we can restore it later.

But that's not enough: What if you unplug your external screen while it's dimmed? And then you move your mouse pointer again, so the dimming goes away. Your monitor, however, was not there for getting its brightness restored to the original value. Next time you plug it in, it starts out with the dimmed lower brightness as a new baseline, Plasma will gladly dim even further next time.

Full disclosure, this was already an issue in past releases of Plasma and is still an issue. Supporting multiple monitors just makes it more visible. More work is needed to make this scenario bullet-proof as well. We'll have to see if a small and safe enough fix can still be made for Plasma 6.2, or if we'll have to wait until later to address this more comprehensively.

Anyway, these kind of assumptions are what eat up a good amount of development time, as opposed to just adding new functionality. Hopefully users will find the new brightness controls worthwhile.

So let's get to the good news

Your donations allowed KDE e.V. to approve a travel cost subsidy in order to meet other KDE contributors in person and scheme the next steps toward world domination. You know what's coming, I'm going to:

Akademy 2024: 7th to 12th September 2024 in Würzburg, Germany

Akademy is starting in just about two days from now! Thank you all for allowing events like this to happen, I'll try to make it count. And while not everyone can get to Germany in person, keep in mind that it's a hybrid conference and especially the weekend talks are always worth watching online. You can still sign up and join the live chat, or take a last-minute weekend trip to Würzburg if you're in the area, or just watch the videos shortly afterwards (I assume they'll go up on the PeerTube Akademy channel).

I'm particularly curious about the outcome of the KDE Goals vote for the upcoming two years, given that I co-drafted a goal proposal this time around. Whether or not it got elected, I haven't forgotten about my promise of working on mouse gesture support on Plasma/Wayland. Somewhat late due to the aforementioned display work taking longer. Other interesting things are starting to happen as well on my end. I'll have to be mindful not to stretch myself too thinly.

Thanks everyone for being kind. I'll be keeping an eye out for your bug reports when the Plasma 6.2 Beta gets released to adventurous testers in just over a week from today.

Discuss this post on KDE Discuss.

Tuesday, 3 September 2024

This is my last update about my GSoC project (Python bindings for KDE Frameworks).

These weeks have been quieter than usual because I’ve been on vacation, but there are still some new things to share.

I published a mini tutorial on how to generate Python bindings using the new CMake module.

People have started to test the Python bindings and some building issues have been reported (which is good, because that means people have interest in them). Unfortunately I’m going to have less time to contribute as I start university next week, but I’m sure you’ll see me!

Many thanks to Carl (my mentor) and everyone who reviewed my merge requests!

Calligra 4.0.1 🔗

Carl Schwan CarlSchwan 09:25 +00:00
RSS

Calligra 4.0.1 is out. This small releases mostly contains fixes for distributions issues and updated translations.

I fixed some compatibility issues for Flatpak which is since yesterday available on Flathub.

Flathub website showing Calligra
Flathub website showing Calligra

Yaakov Selkowitz fixed the installation of the Okular generators so now if Calligra is installed, you can read your office document in Okular correctly.

Antonio Rojas dropped the unused KPart dependency and reenabled the user documentations.

I removed the old space navigator plugin which didn’t build anymore and was only used to navigate an office document with some retro controllers.

Finally, I fixed a few issues in Stage, I found while dog footing it for my slides for my Akademy presentation.

The updated slides sidebar of Calligra Stage
The updated slides sidebar of Calligra Stage

Get It

Calligra 4.0 is now available on Flathub. It’s also now available on Arch, KDE Neon and OpenBSD and I am aware there is some work in progress for Fedora and Mageia. Thanks everyone for packaging Calligra!

Packager Section

You can find the package on download.kde.org and it has been signed with my GPG key.

Monday, 2 September 2024

Here's our bi-monthly update from KDE's personal information management applications team. This report covers progress made in July and August 2024.

Since the last report, 32 people have contributed over 1300 changes to the KDE PIM code base. We also released a new version of the KDE PIM Suite in August with the Gear release

Akademy

The KDE PIM team will be at Akademy from the 7th to the 12th of September in Würzburg (Germany). We will host again a PIM BoF on Monday from 14h to 16h.

Milestones

We have decided to plan and track our work in milestones. Milestones represent concrete goals with clear definitions of what we understand as done, and be achievable within a reasonable time frame. Each milestone is then split into smaller bite-sized tasks that can be worked on independently.

This helps us prioritize important work, make our progress more visible and, most importantly, make it easier for people to get excited about what we are working on. New contributors will also be able to pick a well-defined task and start contributing to PIM.

You can see the milestones on our Gitlab board. If anything there catches your eye and you would like to help, reach out to us on the #kontact:kde.org Matrix channel!

Retiring KJots and KNotes

We made some progress on this front and KNotes was not part of the 24.08 release. The repositories for KNotes and KJots are now archived and the remaining bits related to the Akonadi Note support were removed from KOrganizer, Calendar Support, KDE PIM Runtime, and Event Views.

Moving Protocol Implementations to KDE Frameworks

Volker continued to cleanup and optimize KMime in preparation for moving it to the KDE Frameworks. KMime is the library used to parse and write emails.

Itinerary

Our travel assistant app Itinerary got a new seat information display in the timeline, integration with the Träwelling check-in service, more use of Wikidata/Wikimedia online content and a pretty new website. See its own bi-monthly update for more details.

Kleopatra

Over the last two months the smart card views for the different types of supported smart cards got a facelift to make them look more unified and less crowded (T7018).

Kleopatra's new OpenPGP smart card view

Kleopatra now supports disabling OpenPGP certificates (T7216). This is sometimes useful to prevent accidentally using a certificate for encryption.

We improved the usability in

  • signing and encryption (T6485, T7183, T7236),
  • the list of certifications that now only shows the relevant ones (T7231),
  • the certificate group configuration (T6966),
  • changing the expiration of subkeys (T7198, T7215).

Akregator

Akregator is the RSS feed reader integrated into Kontact. Laurent reimplemented the filter bar to avoid multiple clicks and it is now similar to the one from Thunderbird.

Akregator new filter bar

Akregator now supports Plasma Activities so you can select which feeds are visible depending on the activity you are in. Similar functionalities are planned for KMail, KOrganizer and KAddressBook.

Akregator Activities settings dialog

Finally, Akregator now has a What's New dialog showing the changes from the last version.

Akregator Whats New dialog

KMail

KMail now uses less memory by only loading some widgets when needed.

MimeTreeParser/Merkuro

We have unified the verification message for signed messages between Kleopatra, KMail and Merkuro by moving the implementation to LibKleo.

Signed message showned in KMail and Merkuro

KAlarm

We replaced the libcanberra audio backend with VLC, since libcanberra is unmaintained and does not recognise recent audio formats. There is also the option for distributions to use MPV as audio backend.

Kdenlive 24.08 is out, and while summer is usually a quieter time for the team, this update comes packed with nifty new features, enhancements, and quality-of-life improvements, specially for Effects and Transitions. This version boosts performance in sequence playback and timeline preview rendering, improves handling of transcoding issues when importing large amounts of clips, adds VAAPI transcode profiles, and fixes GPU transcoding for Nvidia. On the packaging front, Whisper support has been improved for both Windows and macOS while also improving timing issues on all platforms.

Effects and Transitions

This release comes with many improvements to Effects and Transitions that were made possible thanks to your contributions to our fundraiser.

Easing Modes

In addition to the existing easing modes (linear, smooth, and constant), we've added several new options like: Cubic In/Out, Exponential In/Out, Circular In/Out, Elastic In/Out, and Bounce In/Out for transitions and effects.

Effect Groups

The new Effect Groups feature enables you to control and apply changes to all clips within a group or selection, making the effect editing process more flexible.

Transform Effect UX

This release brings  several enhancements to the Transform effect, improving both usability and functionality. The handles’ visuals have been refined by adding more control points for easier adjustments. Now, you can move the frame from anywhere inside it, with the handles automatically disappearing during the move for a cleaner view. Also holding Alt+Click lets you cycle through clips without needing to select them in the timeline. We’ve also added a grid to the monitor, allowing clips to snap into place while moving.

Curve Editor

This version introduces an initial prototype of the highly anticipated curve editor for keyframes. Please note that it is in a very alpha state and is not ready for production.

Other Highlights

This release includes over 130 commits. Here are a few highlights:

  • Fixed many Python related issues
  • Fixed Titles background issues
  • Added timestamps to undo commands
  • Fixed many crashes in various operations
  • Add Actions to quickly add Marker/Guides in a specific category
  • Run callback server for OAuth2 only if necessary.
  • Fixed issues with custom Clip Jobs
  • Fixed audio recording regressions

Saturday, 31 August 2024

Next week Akademy, KDE’s annual community conference, will take place in Würzburg, Germany. There are a few features that I actually began during various conferences throughout the years to address real-world problems. I decided to have look at some of them again that would be most useful for people travelling to Akademy from abroad or who will be giving a presentation there.

Plasma network popup showing a viewfinder with a QR code and instructions “Connect to a Wi-Fi network by scanning its QR code.”
Connect to a Wi-Fi network by scanning its QR code

Wifi QR Code Scanner

Two years ago at Akademy in Barcelona the venue Wifi details were printed onto our attendee badges as QR code. Already during the conference I started adding a scanner to the networks menu using our fantastic Prison Framework scanner feature. However, with Qt 6 at the horizon and its significant changes to Qt Multimedia I didn’t pursuit it further at the time. Then, whenever I attended another sprint or got to a hotel where they handed out Wifi QR codes, I was reminded that I still haven’t finished the thing.

Still, all prerequisites under the hood have long been merged. The first task was to move the MeCard parser (the format used for those QR codes) from the QRCA scanner app into a shared location. Since MeCard can even contain WPA-EAP configuration I wanted to have the logic for setting up NetworkManager accordingly shared, too. In preparation for adding a sub-page for the camera viewfinder I replaced the full-screen QR code generator with an integrated one.

A huge challenge was that we either need to add a new connection or update an existing one with new credentials. It took me forever to figure out why it wouldn’t update the Wifi passphrase on my network: I’m meanwhile using WPA3-SAE at home! The code for setting up NetworkManager from MeCard didn’t handle “T=SAE” and thus didn’t generate any credentials. Funnily enough, our MeCard generator did. Once that was sorted, the code worked as intended.

However, after a lot of back and forth I abandoned the idea of putting it in the Network applet directly. Using Qt Multimedia, potentially loading a bunch of backends and codecs is probably not something we want to have in the shell. Instead, I will look into adding a button to the Network settings module instead. In the meantime, you can always use QRCA to scan a code a Wifi code.

Location-aware time zone setting

Last year’s Akademy was located in Thessaloniki, Greece which is in a different time zone for many of its attendees. Our phones automatically adjust to that using the cellular network and we don’t even think about it. Frequently during the conference people were confused which talk will come next when their laptop and phone disagreed on the time. Therefore, I wrote a daemon that automatically adjusts the time zone based on your physical location.

“Date & Time” settings window, “Time Zone” tab, a check box “Select time zone automatically based on location” pointed at by the mouse cursor
Enable location-based time zone option in “Date & Time” settings

For privacy, this uses KDE’s own GeoIP endpoint and is opt-in. It is also disabled when connected to a VPN (the endpoint could be in an entirely different location after all) or a metered connection. We’re considering adding a checkbox to Plasma’s Welcome Center on its “Privacy” page to make the feature more discoverable for laptop users. However, there’s still a few quirks to be ironed out to ensure that our users don’t bring down the server hosting that service since by definition you cannot put that sort of thing behind a CDN.

I can’t wait to travel to Würzburg next week. Given the convenient location I am positive that a lot of people and “old-timers” that I haven’t seen around in a while will stop by to say hello. Come join us, attendance is free and it’s always great fun!

Akademy 2024, Sat 7 – Thur 12 Sep, Würzburg, Germany. Register today! akademy.kde.org

Next Saturday, this year’s Akademy starts in Würzburg, Germany. After a rather long absence – the last Akademy I attended in person was in Mechelen (2008) – I am very much looking forward to meet old friends and make new ones. Mainly due to my own summer vacation plans and conflicting family matters, I was not able to make it to the event in recent years. Now, as the venue is only just over 100 kilometers from my home and I have no other commitments, I’m traveling to

My plan is to arrive on Friday late afternoon and join the welcome event. The conference schedule is pretty loaded and I have only decided on a few talks I definitely want to visit. For more, I need to take another look at the schedule and also the list of planned BoFs on Monday and Tuesday.

Topics I am interested in are (not in a particular order)

  1. Getting KMyMoney to be properly build on the CI/CD for MacOS (both ARM and x86_64)
  2. Meet people in person I only know from the online world
  3. What is needed on the project configuration (Gitlab, metadata) side to move onto KF6

For 1. I hope to get some more background information out of the KDE’s CI and CD Infrastructure talk held by Ben, Hannah, Julius and Volker on Sunday and the CI/CD BoF on Tuesday.. For other topics I will see.

Looking forward to seeing many of you KDE fellows next week in Würzburg!

Friday, 30 August 2024

The first Kdenlive Café of the year will be on Tuesday, September 3rd at 7PM UTC (9PM CET).

Come chat with the team!

Join us at: https://meet.kde.org/b/far-twm-eb

San Miguel de La Palma Tech Lovers, the meetup group As you probably know, I am the organiser of the meetup group San Miguel de La Palma Tech Lovers, a attempt to bring together the local tech community, remote workers located in the island and digital nomads visiting it. These two last groups are coordinated … Continue reading La Palma Tech Summer 2024 meetup: summary

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


Telegram is neither “secure” nor “encrypted”

Tags: tech, telegram, security, privacy

Here a good reminder that the PR of Telegram is highly misleading. It’s not very secure, they don’t really care about your privacy.

https://rys.io/en/171.html


How Telegram’s Founder Pavel Durov Became a Culture War Martyr

Tags: tech, telegram, law

Yes, such an arrest is concerning. Now, lots of people are voicing the wrong concerns… this article actually does a good job explaining it.

https://www.404media.co/how-telegrams-founder-pavel-durov-became-a-culture-war-martyr/


Is the Open Source Bubble about to Burst?

Tags: tech, foss, values, licensing, fundraising

I’m not sure the “bubble” comparison properly applies. Still there are indeed signs of the Open Source movement getting in troubles. It’ll be all the more important to stick to the Free Software values.

https://tarakiyee.com/is-the-open-source-bubble-about-to-burst/


Elasticsearch is Open Source, Again

Tags: tech, foss, licensing

It’s about time… I wish they would have gone for the AGPL + proprietary double license scheme instead of their odd licenses the last time.

https://www.elastic.co/blog/elasticsearch-is-open-source-again


Top Programming Languages 2024 - IEEE Spectrum

Tags: tech, language

Interesting to see Typescript and Rust picking up pace slowly. Otherwise Python, Java, Javascript and C++ are still the big four overall. For jobs, C# and SQL are good to have in your tool belt.

https://spectrum.ieee.org/top-programming-languages-2024


What RSS Needs

Tags: tech, rss

Very good list of the challenges ahead for RSS as a popular protocol. It’d be great to see some of it being tackled.

https://www.mnot.net/blog/2024/08/25/feeds


OpenSSH Backdoors

Tags: tech, supply-chain, security, linux

Interesting comparison between old attempts at backdooring OpenSSH and the latest xz attempt. There are lessons to be learned from this. It makes a good case for starting to sandbox everything.

https://blog.isosceles.com/openssh-backdoors/


Bypassing airport security via SQL injection

Tags: tech, security, airline

Woops, this was clearly a very bad security issue allowing to completely bypass airport security screening in the US.

https://ian.sh/tsa


SQL Has Problems. We Can Fix Them: Pipe Syntax In SQL

Tags: tech, databases, sql

Looks like an interesting way to improve SQL. This feels like a nice extension, it’s much better than throwing out the baby with the bathwater.

https://research.google/pubs/sql-has-problems-we-can-fix-them-pipe-syntax-in-sql/


Python’s Preprocessor

Tags: tech, programming, python, metaprogramming

Interesting to see how far you can go preprocessing Python.

https://pydong.org/posts/PythonsPreprocessor/


Don’t use complex expressions in if conditions | Volodymyr Gubarkov

Tags: tech, programming, maintenance

Definitely a good advice, I see very complex expressions in if (or while BTW) conditions way too often. They tend to accumulate over time.

https://maximullaris.com/if_condition.html


Why Playwright is less flaky than Selenium

Tags: tech, web, frontend, tests, performance, reliability

Interesting reason which would explain the Selenium flakiness. It’s just harder to write tests with race conditions using Playwright.

https://justin.searls.co/links/2024-08-29-why-playwright-is-less-flaky-than-selenium/


Putting a meaningful dent in your error backlog

Tags: tech, monitoring, reliability, debugging

How to avoid drowning in errors when getting serious about monitoring. Finding class of errors and treating them one by one will definitely help.

https://blog.danslimmon.com/2024/08/15/putting-a-meaningful-dent-in-your-error-backlog/


There can’t be only one

Tags: tech, design, databases

A weird detour via baseball obscure rules to justify why we should pay attention to the “Highlander problem”. This should be kept in mind especially for designing databases.

https://www.b-list.org/weblog/2024/aug/27/highlander-problem/


Building with purpose

Tags: tech, business, architecture

Definitely something architects should do more. Understanding the business needs should be the input to the technical decisions. Otherwise you might just happily build the wrong thing.

https://cremich.cloud/building-with-purpose



Bye for now!