Skip to content

Monday, 31 July 2023

The month of July is already wrapped up, I can’t believe it! I went to Akademy this year, and it was really great! Between Akademy and the imminent gear release, I didn’t get much work done this month - but oh well.

I also closed the majority of my old MRs, which either aren’t needed anymore or not applicable. Whats left is features that are still on the backburner (like tablet dial support, Kirigami context menus, etc) that I want to finish.

Tokodon

The next release of Tokodon (23.08) is approaching next month, so I’m focusing on small improvements again. A round of bugfixes for accounts, the fullscreen image viewer not closing, improving the conversation page, removing papercuts for statuses, and making the profile page even better landed early this month.

I have a touchscreen laptop now, and I’ve been able to improve the touch experience for interaction buttons. Expect more touch-related improvements in the future, as before I only had a PinePhone and an Android device to test with. Carl did a lot of profiling work, and I specifically updated the blurhash implementation which makes it oh-so slightly faster to generate. This and the other performance improvements makes scrolling the timeline much smoother.

A big feature I’ve personally been waiting for has now landed, an emoji picker for the status composer! I took this from NeoChat (of course) and slightly modified it for our needs. This is something that could use some improvement in the future, but I’m glad we have this now.

The new emoji picker!

Another smaller but great feature is that account mentions now open inside of Tokodon (like hashtags do already) without kicking you back to a web browser.

PlasmaTube

This is something I’ve wanted for a while now, watch indicators now work for logged in Invidious accounts! These are synced to your Invidious account, so they show up on the website and other 3rd party clients. Partial watches are not yet supported, but I do have an idea of how they could work. Eventually, I want to expose a way to mark videos as “unwatched”.

The new watch indicators.

I also added pagination for the subscription feed but the merge request is currently awaiting review.

NeoChat

Three small changes to NeoChat this month, I fixed the emoji popup shadows and added a more obvious upload button for avatars. And finally gave NeoChat the prettier notifications, like I did for Tokodon last month.

If applicable, the user’s avatar is now rounded and the room they messaged in is also displayed.

Gamepad KCM

The Gamepad KCM is being prepared to enter KDE Review soon! See the current repository and it already runs in Plasma 6. Jeremy Whiting and I have been working to get the KCM in a nicer state, see my merge request overhauling the C++ backend (I still need to finish it…)

The current Gamepad KCM. It’s definitely getting there on a general scale, but lacks the final polish.

While the KCM isn’t perfect yet, I’m hoping to get it in a “good enough” state to attract more help. If you are interested in fixing the design, code, or drawing controller SVGs we welcome your help!

Akademy

Since I arrived late to Akademy, I only attended BoFs and didn’t have the chance to view the talks. I plan on detailing more of my trip in a future post, but I haven’t had the energy to write.

The empty university.

I went to Carl Schawn’s Plasma Mobile BoF, and the “Contributor On-ramping” BoF held by Joseph De Veaugh-Geiss. It was good, but I arrived late and wasn’t able to catch much of it. I also went to the Plasma 6 BoF afterwards, but most of the time was spent talking about the release date schedule. One of my favorite BoFs was probably Joseph’s Wiki BoF. There was a surprising number of people and it was very productive. We decided on a lot of things: getting on the same page about techbase/userbase (and the problems with keeping them around), removing the wiki theme, and more. You have probably noticed some of the changes even now!

On Thursday, I attended Carl’s Accessibility BoF. I learned how to use Accerciser, and I noticed some accessibility issues in Tokodon which are fixed now! I also spent some time on Thursday improving the Matrix page, which I’m very happy with. I also hooked up with Volker Krause to help Tokodon on Android along, which is now fixed. (Thanks so much!) We also discovered an error in the Android build documentation, as it turns out the docker registry version of the images is no longer maintained. That caused a bunch of issues since NDK paths changed since the old Docker image was updated, which Volker fixed.

It was nice meeting everyone at Akademy, I wish I came sooner because I didn’t have the chance to talk to some people. See you next month!

Sunday, 30 July 2023

A neat trick to debug the keyboard navigation in your QML application is to put the following code snippet in your main.qml:

Kirigami.ApplicationWindow {
 ...

 title: activeFocusItem + " " + (activeFocusItem ? activeFocusItem.Accessible.name : "")

 ...
}

Afterward, then you open your application, you will see the following in your title bar:

Title bar containing the following text: “PrivateActionToolButton Sort - Merkuro Calendar”
Title bar containing the following text: “PrivateActionToolButton Sort - Merkuro Calendar”

“PrivateActionToolButton_QMLTYPE_XX(0x00000000)” is the type and address of the actively focused item and “Sort” is the accessible name of this item.

If you tab around your application, you will be able to identify multiple issues quickly:

Missing Accessible.name

You might notice that some elements only display their type and address but accessible name. It is an issue because this means the screen reader user won’t have any clues about what the button does.

If this is the case, ensure that your control has a text property set even if the control itself overrides the contentItem or is an icon only button. If you can’t use the text property, try to set the Accessible.Name property instead.

HTML code in your text

If you see some HTML code appear in your toolbar, it is an issue. Screen readers will be confused by the random XML tags in your text, so make sure to remove them from the Accessible.Name. A simple fix which works in some simple cases is to do the following to clean up your text:

QQC2.Label {
 text: "Hello <b>World</b>"
 Accessible.name: text.replace(/<\/?b>/g, '')
}

Not clear Accessible.Name

By default, your Accessible.name of your controls is bound to their text, which is a good default but you shouldn’t hesitate to add some mode details in your Accessible.Name.

One example, I had in Merkuro (formally known as Kalendar) was in the month view. There each day had as text the month number. In this case, it’s better to expose the whole date to the accessibility API, because without, context a number is not that useful.

Focused but not visible

Some items are focused but are not visible on the screen. This often happens when using a PathView/ListView with only one item visible at the time, since the previous and next item are still loaded. If this is the case, ensure that activeFocusOnTab is set to false, when the item is not visible.

Focused but no visual indicator

Some items are focused but they don’t have a focus indicator. This is an issue since the user won’t able to know which item is currently focused and then pressing space they might trigger a random action.

There is an helpful property in QQC2.Control named visualFocus which should be true when the user uses keyboard navigation to focus on a specific item. So make sure to add for example, a special border when QQC2.Control.visualFocus is true to your custom controls.

// MyButton.qml
QQC2.Button {
 id: root

 background: Rectangle {
 border {
 width: root.visualFocus ? 1 : 0
 color: Kirigami.Theme.highlightColor
 }
 }
}

The type information can gives you a valuable information to find which item is currently selected and has the broken focus.

Focus loop

In some cases, when pressing tab multiple times, you will end up in a focus loop with no way to escape it. This might be caused by broken usage of the KeyNavigation.tab property, dynamic reparenting of elements and other creative ways to break the tab navigation. In case, please fix it!

Unfocusable elements

Make sure all your interactable elements in your application are focusable by default. You can enable or disable this behavior, with the activeFocusOnTab property of Ìtem.

Friday, 28 July 2023

The OpenUK Awards are open for nominations for 2023.

Awards timetable

  • Nominations open 28th July 2023
  • Nominations close midnight UK 19th September 2023 (this will not be extended)
  • Shortlist of up to 3 nominees per category announced 18th October 2023
  • Winners Announced 20th November 2023: Black Tie Awards Ceremony and dinner at House of Lords sponsored by Lord Vaizey, 6-10.30pm, tickets limited 

Self nominations are very welcome. If you know fit into the categories or have a project or company which does or know anyone else who does then fill in the form and say why it’s deserved. You might get fame and glory or at the least a dinner in the house of lords.

Let’s go for my web review for the week 2023-30… You remember I “took a break”? Well, I did kind of. I confess I checked things from time to time. And that’s how we end up with a month worth of content.

Let’s have the July Mega-Compilation this week! I also inserted a couple of very old articles I had on the side (I’ll try to do this a bit more often). Since it’s really big, I added sections this time to group things a bit better. Hopefully this will make things easier to navigate.


Web Environment Integrity Special

Google’s nightmare “Web Integrity API” wants a DRM gatekeeper for the web | Ars Technica

Tags: tech, google, surveillance, browser

Let’s hope this doesn’t get any sort of adoption… that said seeing the amount of people using mostly Chrome and Google services, they can pretty much do as they wish.

https://arstechnica.com/gadgets/2023/07/googles-web-integrity-api-sounds-like-drm-for-the-web/


Google vs. the Open Web

Tags: tech, google, surveillance, browser

More details and analysis about the events unfolding around the Google “Web Environment Integrity” proposal. This still doesn’t bode well. Whatever they claim it seems clear it’s about getting rid of ad-blockers.

https://interpeer.io/blog/2023/07/google-vs-the-open-web/


Google Web Environment Integrity is the new Microsoft Trusted Computing

Tags: tech, google, surveillance, browser, microsoft, trust

I was indeed thinking this looks awfully similar to some things we’ve seen in the past… It needs to be fought as well.

https://www.neelc.org/posts/google-webauth-palladium/


Social Media and Politics

After riots in France, Macron partially blames video games on violence : NPR

Tags: tech, gaming, politics

Repeat after me: “there is no link between video games and violent crimes”.

https://www.npr.org/2023/07/07/1186316124/france-riots-macron-video-games


Four companies must stop using Google Analytics | IMY

Tags: tech, law, gdpr, google, surveillance

This is a welcome consequence of the CJUE ruling. Be warned, think twice before reaching for Google Analytics.

https://www.imy.se/en/news/companies-must-stop-using-google-analytics/


Tags: tech, ai, gpt, law, copyright

It’ll be interesting to see where this complaint goes.

https://www.theverge.com/2023/7/9/23788741/sarah-silverman-openai-meta-chatgpt-llama-copyright-infringement-chatbots-artificial-intelligence-ai


The Death of Infosec Twitter | Cyentia Institute

Tags: tech, security, social-media, twitter, fediverse

Looks like infosec people jumped out of the Twitter debacle. Good for them and welcome on the fediverse (looks like most of them moved there).

https://www.cyentia.com/the-death-of-infosec-twitter/


Tech Industry News

AMD CPU Use Among Linux Gamers Approaching 70% Marketshare - Phoronix

Tags: tech, cpu, amd, linux, foss, gaming

Looks like AMD’s strategy is paying off in the Linux world.

https://www.phoronix.com/news/AMD-CPU-Linux-Gaming-67p


SUSE Preserves Choice in Enterprise Linux by Forking RHEL with a $10+ Million Investment | SUSE

Tags: tech, linux

Looks like SUSE is attempting to take the high road after the RHEL debacle. We’ll see where this goes.

https://www.suse.com/news/SUSE-Preserves-Choice-in-Enterprise-Linux/


Infrastructure and Self-Hosting

Toot toot! Mastodon-powered Blog Comments

Tags: tech, blog, fediverse, self-hosting

It’s definitely tempting me to switch my blog comments to the fediverse as well.

https://cassidyjames.com/blog/fediverse-blog-comments-mastodon/


How I run my servers

Tags: tech, complexity, self-hosting

Hosting applications can be cheap and simple. You need to cater to complexity and mind your dependencies.

https://blog.wesleyac.com/posts/how-i-run-my-servers


Databases and Message Queues

Zero-downtime schema migrations in Postgres using Reshape – Fabian Lindfors

Tags: tech, databases, postgresql

Interesting proof of concept. I wonder how far this will go. There is definitely a need in any case.

https://fabianlindfors.se/blog/schema-migrations-in-postgres-using-reshape/


Create an advanced search engine with PostgreSQL

Tags: tech, postgresql, search

Yet another article on how you can do search straight in PostgreSQL. This one goes a bit further in how to put the pieces together though.

https://xata.io/blog/postgres-full-text-search-engine


Introducing pg_embedding extension for vector search in Postgres and LangChain - Neon

Tags: tech, vector, postgresql, databases

Looks like an interesting extension for Postgres to do vector similarity searches inside the database.

https://neon.tech/blog/pg-embedding-extension-for-vector-search


Comparing Queuing Strategies in Distributed Systems

Tags: tech, distributed, queuing

Neat way to see how several queuing strategies behave. Picking the right one for your system is important.

https://fsck.ai/labs/queuing


Home | BlazingMQ Documentation

Tags: tech, messaging

There’s a new player in the message queue space. This one looks interesting.

https://bloomberg.github.io/blazingmq/


Tools

DocuSeal | Open Source Document Signing

Tags: tech, foss, legal

Looks like an interesting Free Software alternative for digital documents signing.

https://www.docuseal.co/


Vim Commands: A Beginner Guide with Examples

Tags: tech, editor, vim

This is a good resource to learn Vim or if you want to get better at it.

https://thevaluable.dev/vim-commands-beginner/


GUI and Design

Be Open to Black: A Digital Design Tip

Tags: tech, design, ux

Black has been getting too much of a bad reputation in the last few years. This article makes a good job arguing for a more balanced view.

https://toast.al/posts/visuallayout/2023-07-06_be-open-to-black


WebGPU: the cross-platform graphics API of tomorrow - Chrome Developers

Tags: tech, 3d, graphics, webgpu, c++

It looks more and more like WebGPU will be the cross-platform graphics API we’ve been waiting for. Vulkan didn’t end up in this position but WebGPU seems to get there.

https://developer.chrome.com/en/blog/webgpu-cross-platform/


The single most important factor that differentiates front-end frame­works

Tags: tech, web, frontend, framework, architecture

I think this is the right way to look at the problem space. The analysis provides the right pros and cons to look at when picking a frontend framework.

https://themer.dev/blog/the-single-most-important-factor-that-differentiates-front-end-frameworks


Interoperability and Protocols

Unicode is harder than you think · mcilloni’s blog

Tags: tech, encodings, unicode

An excellent explanation of the Unicode standard, complete with a bit of history. This is a good resource.

https://mcilloni.ovh/2023/07/23/unicode-is-hard/


Advice for Operating a Public-Facing API

Tags: tech, http, api

Interesting list of advises. Most of it makes sense, I’m less convinced about avoiding the headers for the authentication mechanism though.

https://jcs.org/2023/07/12/api


HTTP has become the default, universal communication protocol

Tags: tech, protocols, http

It’s unclear what really drove the adoption this far. Still, it’s clearly the default option in many cases.

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


DisplayPort: A Better Video Interface | Hackaday

Tags: tech, video, protocols

Interesting dive into the DisplayPort protocol and its advantages, looking forward to the next article in this series.

https://hackaday.com/2023/07/11/displayport-a-better-video-interface/


Programming

The Advantages Of A Polyglot Programmer | by Jan Kammerath | Jul, 2023 | Medium

Tags: tech, programming, language, expertise

I mostly agree with this. I’d just complete it a bit: it’s probably a good idea to have at least one language where you went really deep in (emphasis on at least). A kind of strategy to aim at “T shaped skills” (or better “paint drip shaped skills”).

https://medium.com/@jankammerath/the-advantages-of-a-polyglot-programmer-a2af29c7cb50


Before you try to do something, make sure you can do nothing - The Old New Thing

Tags: tech, programming

Wise words. This is overall a good approach to add new components and behaviors to a system.

https://devblogs.microsoft.com/oldnewthing/20230725-00/?p=108482


The Gentle Art of Patch Review – Sage Sharp

Tags: tech, foss, community, codereview

I’m not necessarily convinced this is as much a silver bullet as it is presented here. Still there are benefits to such a structured approach for reviews in community projects.

https://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/


Software engineers hate code.

Tags: tech, complexity, maintenance

A bit sarcastic, but makes its point efficiently. It’s important to realize that more code to maintain is definitely not what we need.

https://www.dancowell.com/software-engineers-hate-code/


Quadratic C.I. Cost Growth - by Utsav Shah

Tags: tech, ci, cost

This often overlooked indeed… and to make it worse it can be hard to optimize.

https://www.softwareatscale.dev/p/quadratic-ci-cost-growth


Ten Years of “Go: The Good, the Bad, and the Meh”

Tags: tech, programming, go, type-systems

Interesting update. Looks like Go is making progress at its own pace and tries to stay small.

https://blog.carlmjohnson.net/post/2023/ten-years-of-go-good-bad-meh/


Intro | Putting the “You” in CPU

Tags: tech, hardware, cpu, kernel, system

Can’t say I learned much but that was a very neat refresher. It’s very well done, so if you never dabbled in the basics of how the hardware or the kernel work I strongly recommend reading it.

https://cpu.land/


zeux.io - Efficient jagged arrays

Tags: tech, data-oriented, programming, performance, optimization

Interesting optimization on this somewhat common data structure.

https://zeux.io/2023/06/30/efficient-jagged-arrays/


Nanosecond timestamp collisions are common

Tags: tech, multithreading

This apparently needs to be reminded from time to time. So here it is: don’t expect those timestamps to be unique, even on a single machine.

https://www.evanjones.ca/nanosecond-collisions.html


Tests

What is a Unit Test? (The Answer Might Surprise You)

Tags: tech, tests

This is about behavior and not structure indeed. Put the focus at the right place otherwise your tests will quickly become expensive to update.

https://tanzu.vmware.com/content/blog/what-is-a-unit-test-the-answer-might-surprise-you


Most Tests Should Be Generated | Concerning Quality

Tags: tech, tests

In praise of property based testing. This definitely completes well the tests you write by hand.

https://concerningquality.com/generated-tests/


Snapshot Testing

Tags: tech, tests

Where does this style of tests shine? A few elements to consider.

https://tidyfirst.substack.com/p/snapshot-testing


Test Against Reality

Tags: tech, tests

Calls a bit too much everything mocks while the term test double would have done the job. Still it stresses fairly well the importance of being as close to reality as possible and the tradeoffs we have to make.

https://borretti.me/article/test-against-reality


pytest fixtures are magic!

Tags: tech, python, tests

A little article which serves as a good introduction to the pytest fixtures. They are indeed very useful I think.

https://www.revsys.com/tidbits/pytest-fixtures-are-magic/


Organization, Management and Soft Skills

The hottest new perk in tech is freedom

Tags: tech, hiring, remote-working, business

Remote work is clearly the best way for smaller companies to compete to attract talent. This greatly increases the size of the pool of potential hires.

https://www.vox.com/technology/2023/6/20/23762655/tech-perk-remote-work-freedom-airbnb-yelp


The Most Powerful Law in Software

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

Nice little article about Conway’s Law. Shows nicely all the ramifications it has.

https://registerspill.thorstenball.com/p/the-most-powerful-law-in-software


The Ladder of Leadership and facilitating change

Tags: management, autonomy

Too often managers loose track of the level of autonomy achieved by the people around them. It’s important to gauge this properly though. Too much or too little guidance and prodding can lead to frustration.

https://jchyip.medium.com/the-ladder-of-leadership-and-facilitating-change-8d2a705795f9


Alignment > Autonomy — Build Right Side

Tags: management, autonomy, vision

Good explanations about why autonomy without alignment is problematic. There are tips I should mull over in there, this can probably lead to some improvements at some places I’ve seen.

https://buildrightside.com/autonomy-alignment


Paint Drip People

Tags: management, knowledge

Interesting alternative to the “T-shaped skills” metaphor.

https://tidyfirst.substack.com/p/paint-drip-people


Excellence is a habit, but so is failure

Tags: habits

Habits indeed cut both ways…

https://awesomekling.github.io/Excellence-is-a-habit-but-so-is-failure/


Emotions: A Code Book - by Kent Beck

Tags: emotions, life

Clearly the book referenced here picked my interest, I guess I’ll try to read it. The cheat sheet proposed here is interesting, not completely sure how I’d act on it in practice though.

https://tidyfirst.substack.com/p/emotions-a-code-book


Learning and Writing

Nobody cares about your blog.

Tags: tech, blog, writing

All the good reasons to have a blog. This is why I keep maintaining mine.

https://www.alexmolas.com/2023/07/15/nobody-cares-about-your-blog.html


How to Learn Better in the Digital Age

Tags: tech, note-taking, information, knowledge, learning

Very nice article. We must not loose from sight that actual learning requires some sort of effort. Even better when it’s coupled to using your hands (definitely why I still take notes written by hands for some things).

https://giansegato.com/essays/edutainment-is-not-learning


The “Three Things” Exercise for getting things out of talks

Tags: memory, learning, presentation

This is an interesting idea, I think I’ll try it to see how it impacts my memory.

https://math.stanford.edu/~vakil/threethings.html



Hope you enjoyed it, if you made it this far… congrats!

Bye for now!

Wednesday, 26 July 2023

My first in-person Akademy: Thessaloniki 2023

This year, I was finally able to participate in-person at Akademy. Apart from meeting some familiar faces from the Plasma Spring in May this year, I also met lots of new people.

When waiting for the plane in Frankfurt, a group of KDE people formed. Meaning, we had a get-together even before the Akademy had started ;). On the plane to Thessaloniki, I made a merge requests to fix a Kickoff crash due to a KRunner change. Once that was done, everything was in place for the talks!

On Saturday, I talked once again with Nico and also Volker about KF6. This included topics like the remaining challenges, the estimated timeline for KF6 and some practical porting advice. I also gave a talk about KRunner. This was the conference talk of mine that I gave alone, meaning I was a bit nervous 😅. The title was “KRunner: Past, Present, and Future” and it focused on porting, new features and future plans for KF6. Thanks to everyone who was listening to the talk, both in person and online! Some things like the multithreading refactoring are worth their own blog post, which I will do in the next weeks.

The talks from other community members were also quite interesting. Sometimes it was hard to decide to which talk to go :). Multiple talks and BoFs were about energy efficiency and doing measurements. This perfectly aligned with me doing benchmarking of KRunner and the KCoreAddons plugin infrastructure.

hotel view The view of the city from the hotel balcony was also quite nice

Our KF6 and Qt6 porting BoFs were also quite productive. On Tuesday, we had our traditional KF6 weekly. Having this in person was definitely a nice refreshment! Apart from some general questions about documentation and KF6 Phabricator tasks, we discussed the release schedule. The main takeaway is that we want to improve the release automation and have created a small team to handle the KDE Frameworks releases. This includes Harald Sitter, Nicolas Fella, David Edmundson and me. Feel free to join the weeklies in our Big Blue Button room https://meet.kde.org/b/ada-mi8-aem at 17:00 CEST each Tuesday.

Since we had so many talented KDE people in one place, I decided to have a KRunner BoF on Tuesday morning. Subject of discussion was for example the sorting of KRunner, how to better organize the categories and the revival of the so-called “single runner mode”. This mode allows you to query only one specific plugin, instead of all available ones. This was previously only available from the D-Bus interface, but I have added a command line option to KRunner. To better visualize this special mode being in use, a tool-button was added as an indicator. This can also be used to go back to querying all runners. Kai will implement clickable categories that allow you to enable this mode without any command line options being necessary!

Finally, I would like to thank everyone who made this awesome experience possible! I am already looking forward to the next Akademy and the next sprints.

Tuesday, 25 July 2023

La Palma Tech Tagoror es un evento de networking organizado por el grupo meetup San Miguel de La Palma Tech Lovers y enfocado en el intercambio de conocimientos sobre tecnología entre dos grupos objetivo: El objetivo del evento es doble. Por un lado, reunir físicamente a ambos grupos objetivo para que conozcan actividades y pasiones … Continue reading Evento (meetup): La Palma Tech Tagoror

Quick reminder, that you can include a Mastodon or Matrix link to your AppStream file and that the link will then be displayed in your application page at apps.kde.org.

<custom>
 <value key="KDE::matrix">#merkuro:kde.org</value>
 <value key="KDE::mastodon">https://kde.social/@merkuro</value>
</custom>

Details on apps.kde.org showing the link to the mastodon account and matrix channel
Details on apps.kde.org showing the link to the mastodon account and matrix channel

Monday, 24 July 2023

Akademy 2023 🔗

Carl Schwan CarlSchwan 18:00 +00:00
RSS

Last week, I went to Akademy, the yearly KDE conference, in Thessaloniki. This is now my third in-person Akademy and fifth Akademy in total. As always, this is the occasion to meet old and new friends, learn about what others are hacking on and enjoy good food.

Friday

I arrived Friday afternoon, taking my flight from Nuremberg with a few others. Getting out of the airport, we could immediately feel the heat. After leaving our stuff at the hotel, we went to join the rest of the KDE folks at the welcome event in a frindly and cozy bar.

Saturday

On Saturday, I talked about the current state of the Accessibility (a.k.a KDE For All) goal. In short, we are making progress on that and fixing bugs everywhere in the stack, but we desperately need more community involvement as the task is big. Hopefully, the Selemiun AT-SPI bridge can be helpful, as it makes it possible to write integration tests using the accessibility API which require some accessibility support in your application to work. (Slides)

Me in a pannel with Joseph and Nate
Me in a pannel with Joseph and Nate

I also presented the Fundraising WG report. We had two successful fundraising campaigns this year: Kdenlive and the end of the year campaign. (Slides)

My highlight for the day was the KDE Embedded talk from Andreas. The talk explained the progress in getting the whole KDE software packaged as Yocto layers, which already allows us to build images for RISC-V and ARM devices with Plasma BigScreen. There is definitively a lot of potential there to get KDE technologies in a wide varieties of devices. A recent example is KWin being integrated inside Mercedes cars’ infotainment system, resulting in various upstream improvements. (Slides)

Sunday

On Sunday, I had a talk with Tobias Fella about Matrix and Mastodon and how we can integrate these protocols inside our applications in various ways. First, by providing clients for these protocols: NeoChat (Matrix) and Tokodon (Mastodon), but also with less oblivious ways like using Mastodon as a comment system on your blog or by using Matrix to share your KDE Itinerary live data end-to-end encrypted with your friend without requiring a centralized server. (Slides)

My highlight for Sunday was the Selenium GUI Testing talk from Harald, which is closely related to my Accessibility goal and Automatisation goal from Nate. (Slides)

The lightning talks were also excellent. Kai showed off his integration of AlphaCloud inside Plasma to get his solar pannel stats. (Slides)

KInfoCenter module showing both live and historic photovoltaic information

Jean-Baptiste Kempf (from VLC) presented his cross-platform remote control software stack in Rust, which promises very low latency.

Fabian Kosmale from the Qt Company Group presented the qmllint tool, which should really helps improve the quality of our software and reduces the risk to accidentally create regressions in our QML applications. I’m looking forward to using it on my applications and to building custom plugins for it. (Slides)

Finally, Nate presented the new Plasma Welcome wizard, which is great! (Slides)

Bofs

The rest of the week, we had “Birds of a Feather” (or BoF) which were particularly productive. I (co-)hosted multiple BoFs this year: Plasma Mobile, NeoChat, KDE PIM and Accessibility, but I also enjoyed a few other BoFs: the fundraising BoF where Victoria gave us a lot of advice on how to do fundraising for non-profit and the KDE e.V. board office hour or the Selemiun BoFs from Harald and a few others.

Myself hacking on my computer during a bof
Myself hacking on my computer during a bof

Day trip

We went to Mount Olympus, Dion, and a beach for our day trip. As a ancient Greece nerd, I enjoyed it! Here are some photos from the trip:

Dion archelogical park
Dion archelogical park

Dion Museum of archelogie
Dion Museum of archelogie

Mount Olympus
Mount Olympus

Beach beer
Beach beer

Trainings

We also had training at Akademy. I participated to the one from Nuno (thanks, KDAB for offering it) about Qt Design Studio, a very powerful QML visual editor and with a bridge to Figma. Unfortunately, I couldn’t attempt this training fully because it conflicted with a BoF I was hosting, but the bit I saw there was very interesting. It would be great if we could integrate Kirigami components inside this tool.

Nuno presenting his training
Nuno presenting his training

My conference badge On Friday Akademy 2023 came to a close. This was the second time I attended the conference physically after the online editions of 2020 and 2021 and I want to give short retrospective this blog post.

Talks

Akademy started with two days full of talks on Saturday and Sunday and I have to say sometimes it was hard to choose between the two parallel tracks. Overall it provided a nice mixture between what happens in the community, learning how people solved problems and learning from them (for example Ingo fixing accessibility in Kleopatra) and insight into new technologies (I had never heard of Slint before). Apart from the two standout keynotes about Kdenlive and the Libre Space Foundation I want to highlight Joseph’s talk about Internal Communication at KDE which it turns out also projects outwards for example to new potential contributors. The talk itself was well structured and presented and had engaged with the audience nicely as well.

This year I did not submit a talk myself but stood in for Albert for an update about what’s happening in the KDE Free Qt Foundation and in the KDE e.V. KDE Free Qt Working Group during the KDE e.V. Working Group reports. since he had a talk at the same time in the other room.

I also tried something new and held a panel in the “KDE Wayland Fireside chat” together with Aleix, David Edmundson, Vlad and Xaver which was intended to be an opportunity to interact for people with their favourite KDE Wayland developers. I think it turned out nicely with very good online participation - probably half of the question came from chat! The size of the physically audience was maybe less than what I would expected beforehand but we had very strong opposition with the lighting talks happening at the same time in room 1 while we were the last session in room 2. Speaking of them, I am looking very much forward to watch the recording of them and all the other talks that I missed because I was in another room.

BoFs and all the other things

After the talks come the BoFs, where people meet, discuss, plan, roadmap and workshop together. My personal self-selected schedule consisted among other things of a whole lot of KF6, Plasma 6 and to round it out more KF6. We discussed what is left to do, challenges left, and even potential roadmaps to release. Here the strong presence of people from the Qt Group proved valuable as they could help with some challenges we are facing and were interested in some problems we faced along the way. We even discovered that we share common interest into improving some areas of Qt.

Thursday was dominated by Wayland discussions. It started with a discussion on input methods and virtual keyboards where we recapped what’s happening upstream, how this fits to our needs and vision of Plasma. Afterwards we discussed some challenges of Qt on Wayland with regards to its QInputDevice API. This session showed again how useful it is to have Qt and KDE people in the same room as the discussion switched quickly from outlining missing features to making gestures and scrolling work nicely in Qt and for application developers in a Wayland world using existing infrastructure.

But Akademy is not only the things that are on the official schedule. It’s meeting familiar and new faces at the welcome and social events. It’s going on to the day trip together. It’s having a spontaneous Itinerary almost BoF in hacking room. It’s going to and having dinner together after an exhausting day. And of course it’s sometimes also just hanging out and chilling with cool people. So thanks to the KDE e.V, the Akademy team and all the volunteers who made this awesome event possible.

Akademy, KDE’s annual conference, recently took place in Thessaloniki, Greece. Lots of people were super excited about the prospect of getting GUI Testing off the ground based on the Selenium tech I built last year. Since KDE produces cross-platform applications an obvious question arose though…

What about Windows?

It’s surprisingly easy! Indeed the most time consuming part is probably getting your hands on a Windows Development Virtual Machine. Once you have a Windows installation we need to only spin up our toolchain and off we go. Here’s a handy command list:

\# Download and install WinAppDriver: https://github.com/microsoft/WinAppDriver/releases

winget install openjs.nodejs
winget install python.python.3.11

npm install --location=global appium
# restart terminal to apply PATH change
set-executionpolicy -scope currentuser remotesigned # allow script execution
appium driver install --source=npm appium-windows-driver

pip install appium-python-client
appium # start server, needs firewall exception on first start

Before we go further into the nitty gritty of testing on Windows I suggest you read the earlier blog post Selenium + AT-SPI = GUI Testing, since a lot of the concepts are the same regardless of platform.

First let us get our ducks in a row.

What Accerciser is to Linux is inspect.exe to Windows, namely an inspector tool for applications. You can find it in your Windows SDK folder %ProgramFiles(x86)%\Windows Kits\10\bin\10.0.22000.0\x64\inspect.exe or there abouts. Opening it greets you with this beauty:

Ignoring the verbosity for a moment we’ll note that it contains similar information to Accerciser on Linux, albeit in a more flat overview. Most importantly what is called the AutomationId is constructed from QObject objectNames, similar to the Accessible IDs on Linux. This is insofar interesting as it means we have a couple of avenues for cross-platform element locating - specifically we could match elements by their name (e.g. the text of a Label or Button), or more uniquely by their objectName-based ID (applicable to all QObjects).

For the purposes of this post we’ll do some trivial testing on Filelight and try to make it work for both Linux and Windows by using the element names. Relying on objectNames is more reliable but unfortunately requires some retrofitting in the source code. To avoid having to build Filelight on Windows we’ll work with what we have got: names. Let’s write our test. Don’t forget to install Filelight first :)

First thing, as always, is our setup boilerplate

#!/usr/bin/env python3

# SPDX-License-Identifier: MIT
# SPDX-FileCopyrightText: 2023 Harald Sitter <sitter@kde.org>

import unittest
import sys
from appium import webdriver
from appium.options.windows import WindowsOptions
from appium.options.common import AppiumOptions
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected\_conditions as EC

class SimpleFilelightTests(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        options = WindowsOptions()
        options.app('KDEe.V.Filelight\_7vt06qxq7ptv8!KDEe.V.Filelight')
        self.driver = webdriver.Remote(
            command\_executor='http://127.0.0.1:4723',
            options=options)

    @classmethod
    def tearDownClass(self):
        self.driver.quit()

if \_\_name\_\_ == '\_\_main\_\_':
    unittest.main()

The only really interesting bit here is how we specify the application on Windows. Since Filelight is a store application we can start it by the Application User Model ID (AUMID) instead of a path; this is pretty much the same as starting by-desktop-file-id on Linux.

Now then. With the boilerplate out of the way we can write an incredibly simple test that simply switches pages a bit: If we click on ‘Scan Home Folder’ it should take us to the scan page and clicking there on ‘Go to Overview’ should take us back to the overview page.

    def test\_scan(self):
        self.driver.find\_element(by=AppiumBy.NAME, value="Scan Home Folder").click()
        overview = WebDriverWait(self.driver, 120).until(
            EC.element\_to\_be\_clickable((AppiumBy.NAME, "Go to Overview"))
        )
        overview.click()
        WebDriverWait(self.driver, 4).until(
            EC.element\_to\_be\_clickable((AppiumBy.NAME, "Scan Home Folder"))
        )

Cool. We now can test Filelight on Windows. Next we should try to make this test also work for Linux. Thankfully we only need to switch out our app name for a desktop file id.

    def setUpClass(self):
        if sys.platform == 'nt':
            options = WindowsOptions()
            options.app = 'KDEe.V.Filelight\_7vt06qxq7ptv8!KDEe.V.Filelight'
        else:
            options = AppiumOptions()
            options.set\_capability('app', 'org.kde.filelight.desktop')

Putting it all together we get our final test which runs on both Linux and Windows.

\# Windows
# start appium in a terminal
python .\\test.py

# Linux selenium-webdriver-at-spi-run ./test.py


The complete test code:

#!/usr/bin/env python3

SPDX-License-Identifier: MIT

SPDX-FileCopyrightText: 2023 Harald Sitter sitter@kde.org

import unittest import sys from appium import webdriver from appium.options.windows import WindowsOptions from appium.options.common import AppiumOptions from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC

class SimpleCalculatorTests(unittest.TestCase):

@classmethod
def setUpClass(self):
    if sys.platform == 'nt':
        options = WindowsOptions()
        options.app = 'KDEe.V.Filelight\_7vt06qxq7ptv8!KDEe.V.Filelight'
    else:
        options = AppiumOptions()
        options.set\_capability('app', 'org.kde.filelight.desktop')

    self.driver = webdriver.Remote(
        command\_executor='http://127.0.0.1:4723',
        options=options)

@classmethod
def tearDownClass(self):
    self.driver.quit()

def test\_scan(self):
    self.driver.find\_element(by=AppiumBy.NAME, value="Scan Home Folder").click()
    overview = WebDriverWait(self.driver, 120).until(
        EC.element\_to\_be\_clickable((AppiumBy.NAME, "Go to Overview"))
    )
    overview.click()
    WebDriverWait(self.driver, 4).until(
        EC.element\_to\_be\_clickable((AppiumBy.NAME, "Scan Home Folder"))
    )

if __name__ == ‘__main__’: unittest.main()


Discuss this blog post on [KDE Discuss](https://discuss.kde.org/t/writing-selenium-appium-tests-on-windows/3145).