Skip to content

Wednesday, 6 August 2025

Qt Tools for Android Studio version 4.1 is out! It can be downloaded from the JetBrains marketplace

Tuesday, 5 August 2025

The 46th annual TeX Users Group conference (TUG2025) took place in Kerala during July 18–20, 2025. I’ve attended and presented at a few of the past TUG conferences; but this time it is different as I was to present a paper and help to organize the conference. This is a personal, incomplete, (and potentially hazy around the edges) reflection of my experience organizing the event, which had participants from many parts of the Europe, the US and India.

Preparations

The Indian TeX Users Group, lead by CVR, have conducted TUG conferences in 2002 and 2011. We, a group of about 18 volunteers, lead by him convened as soon as the conference plan was announced in September 2024, and started creating todo-lists, schedules and assigning responsible persons for each.

STMDocs campus has excellent conference facilities including large conference hall, audio/video systems, high-speed internet with fallback, redundant power supply etc. making it an ideal choice, as done in 2011. Yet, we prioritized the convenience of the speakers and delegates to avoid travel from and to the hotel in city — prior experience found it is best to locate the conference facility closer to the stay. We scouted for a few hotels with good conference facilities in Thiruvananthapuram city, and finalized the Hyatt Regency; even though we had to take greater responsibility and coordination as they had no prior experience organizing a conference with requirements similar to TUG. Travel and visit advisories were published on the conference web site as soon as details were available.

Projector, UPS, display connectors, microphones, WiFi access points and a lot of related hardware were procured. Conference materials such as t-shirt, mug, notepad, pen, tote bag etc. were arranged. Noted political cartoonist E.P. Unny graciously drew the beloved lion sketches for the conference.

Karl Berry, from the US, orchestrated mailing lists for coordination and communication. CVR, Shan and I assumed the responsibility of answering speaker & delegate emails. At the end of extended deadline for submitting presentations and prerecorded talks; Karl handed us over the archive of those to use with the audio/video system.

Audio/video and live streaming setup

I traveled to Thiruvananthapuram a week ahead of the conference to be present in person for the final preparations. One of the important tasks for me was the setup the audio/video and live streaming for the workshop and conference. The audio/video team and volunteers in charge did a commendable job of setting up all the hardware and connectivity on 16th evening and we tested presentation, video playing, projector, audio in/out, prompt, clicker, microphones and live streaming. There was no prompt at the hotel, so we split the screen-out to two monitors placed on both side of the podium — this was much appreciated by the speakers later. In addition to the A/V team’s hardware and (primary) laptop, two laptops (running Fedora 42) were used: a hefty one to run the presentation & backup OBS setup; another for video conferencing remote speakers’ Q&A session. The laptop used for presentation had 4K screen resolution. Thanks to Wayland (specifically, Kwin), the connected HDMI out can be independently configured for 1080p resolution; but it failed to drive the monitors split further for prompt. Changing the laptop built-in display resolution also to 1080p fixed the issue (may changing from 120 Hz refresh rate to 60 Hz might have helped, but we didn’t fiddle any further).

Also met with Erik Nijenhuis in front of the hotel, who was hand-rolling a cigarette (which turned out to be quite in demand during and after the conference), to receive a copy of the book ‘The Stroke’ by Gerrit Noordzij he kindly bought for me — many thanks!

Workshop

The ‘Tagging PDF for accessibility’ workshop was conducted on 17th July at STMDocs campus — the A/V systems & WiFi were setup and tested a couple of days prior. Delegates were picked up at the hotel in the morning and dropped off after the workshop. Registration of workshop attendees were done on the spot, and we collected speaker introductions to share with session chairs. Had interesting discussions with Frank Mittelbach and Boris Veytsman during lunch.

Reception & Registration

There was a reception at Hyatt on 17th evening, where almost everyone got registered, collected the conference material with program pre-print, t-shirt, mug, notepad & pen, a handwritten (by N. Bhattathiri) copy of Daiva Daśakam, and a copy of the LaTeX tutorial. All delegates introduced themselves — but I had to step out at the exact moment to get into a video call to prepare for live Q&A with Norman Gray from UK, who was presenting remotely on Saturday. There were two more remote speakers — Ross Moore from Australia and Martin J. Osborne from Canada — with whom I conducted the same exercise, despite at inconvenient times for them. Frank Mittelbach needed to use his own laptop for presentation; so we tested the A/V & streaming setup with that too. Doris Behrendt had a presentation with videos; its setup was also tested & arranged.

An ode to libre software & PipeWire

Tried to use a recent Macbook for the live video conference of remote speakers, but it failed miserably to detect the A/V splitter connected via USB to pick up the audio in and out. Resorting to my old laptop running Fedora 42; the devices were detected automagically and PipeWire (plus WirePlumber) made those instantly available for use.

With everything organized and tested for A/V & live streaming, I went back to get some sleep to wake early on the next day.

Day 1 — Friday

Woke up at 05:30, reached hotel by 07:00, and met with some attendees during breakfast. By 08:45, the live stream for day 1 started. Boris Veytsman, the outgoing vice-president of TUG opened TUG2025, handed over to the incoming vice-president and the session chair Erik Nijenhuis; who then introduced Rob Schrauwen to deliver the keynote titled ‘True but Irrelevant’ reflecting on the design of Elsevier XML DTD for archiving scientific articles. It was quite enlightening, especially when one of the designers of a system looks back at the strength, shortcomings, and impact of their design decisions; approached with humility and openness. Rob and I had a chat later, about the motto of validating documents and its parallel with IETF’s robustness principle.

You may see a second stream for day 1, this is entirely my fault as I accidentally stopped streaming during tea break; and started a new one. The group photo was taken after a few exercises in cat-herding.

All the talks on day 1 were very interesting: with many talks about tagging pdf project (that of Mittelbach, Fischer, & Moore); the state of CTAN by Braun — to which I had a suggestion for inactive package maintainer process to consider some Linux distributions’ procedures; Vrajarāja explained their use of XeTeX to typeset in multiple scripts; Hufflen’s experience in teaching LaTeX to students; Behrendt & Busse’s talk about use of LaTeX in CryptTool; and CVR’s talk about long running project of archiving Malayalam literary works in TEI XML format using TeX and friends. The session chairs, speakers and audience were all punctual and kept their allotted time in check; with many followup discussions happening during coffee break, which had ample time to feel the sessions not rushed.

Ross Moore’s talk was prerecorded. As the video played out, he joined via a video conference link. The audio in/out & video out (for projecting on screen and for live streaming) were connected to my laptop, and we could hear him through the audio system as well as the audience questions via microphone were relayed to him with no lag — this worked seamlessly (thanks to PipeWire). We had a small problem with pausing a video that locked up the computer running the presentation; but quickly recovered — after the conference, I diagnosed it to be a noveau driver issue (a GPU hang).

By the end of the day, Rahul & Abhilash were accustomed to driving the presentation and live streams, so I could hand over the rein and enjoy the talks. Decided to stay back at the hotel to avoid travel, and went to bed by 22:00 but sleep descended on this poor soul only by 04:30 or so; thanks to that cup of ristretto for breakfast!

Day 2 — Saturday

First talk on the second day was mine with CVR, about the development of an OpenType font with built-in syntax highlighting for TeX documents. The idea has been called ‘mad’ and ‘crazy’ (which both of us enjoyed); but we’re merely standing on the shoulders of crazy giants (see H. Lotvonen’s prior art if evidence needed.) 😁

Judging by the ensuing laughs and questions; it appears not everyone was asleep during my talk. Frank & Ulrike suggested not to colour the underscore glyph in math, instead properly colour LaTeX3 macro names (which can have underscore and colon in addition to letters) in the font.

The sessions on second day were also varied and interesting, in particular Novotný’s talk about static analysis of LaTeX3 macros; Vaishnavi’s fifteen-year long project of researching and encoding Tulu-Tigalari script in Unicode; bibliography processing talks separately by Gray and Osborne (both appeared on video conferencing for live Q&A which worked like a charm), etc.

I had interesting discussions with many participants during lunch and coffee breaks. Mentioned to Ben Davies from Overleaf that many résumés I get nowadays are done in LaTeX, even when the person has no knowledge of it — shows signs of TeX going mainstream, in some sense. Ben agreed that it would make sense to set the first/default project in Overleaf a résumé template. I did rehash my concern shared at TUG2023, about the no-error-stop mode in Overleaf leaves much to be desired, as often I encounter documents that do not compile — corroborated by Linas Stonys from VTeX.

In the evening, all of us walked (the monsoon rain was at respite) to the music and dance concert; both of which were fantastic cultural & audio-visual experience.

Day 3 — Sunday

The morning session of final day had a few talks: Rishi lamented about eroding typographic beauty in publishing (which Rob concurred with, Vrajarāja earlier pointed out as the reason for choosing TeX, …); Doris on LaTeX village in CCC — and about ‘tuwat’ (to take action); followed by the TeX Users Group annual general body meeting presided by Boris as the first session post lunch; then on his approach to solve editorial review process of documents in TeX; and a couple more talks: Rahul’s presentation about pdf tagging used our opentype font for syntax highlighting (yay!); and the lexer developed by Overleaf team was interesting. On Veeraraghavan’s presentation about challenges faced by publishers, I had a comment about the recurrent statement that “LaTeX is complex” — LaTeX is not complex, but the scientific content is complex, and LaTeX is still the best tool to capture and represent such complex information.

Calligraphy

For the final session, Narayana Bhattathiri gave us a calligraphy demonstration, in four scripts — Latin, Malayalam, Devanagari and Tamil; which was very well received judging by the applause. I was deputed to explain what he does; and also to translate for the Q&A session. He obliged the audience’s request of writing names: of themselves, or spouse or children, even a bär, or as Hàn Thế Thành wanted — Nhà khủng lồ (the house of dinosaurs, name for the family group); for the next half hour.

Nijenhuis was also giving away swags by Xerdi, and I made the difficult choice between a pen and a pendrive, opting for the latter.

The banquet followed; where in between enjoying delicious food I could find time to meet and speak with even more people and say good byes and ‘tot ziens’.

Later, I had some discussions with Frank about generating MathML using TeX.

Many thanks

A number of people during the conference shared their appreciation of how well the conference was organized, this was heartwarming. I would like to express thanks to many people involved, including the TeX Users Group, the sponsors (who made it fiscally possible to run the event and support many travels via bursary), STMDocs volunteers who handled many other responsibilities of organizing, the audio-video team (who were very thoughtful to place the headshot of speakers away from the presentation text), the unobtrusive hotel staff; and all the attendees, especially the speakers.

Thanks particularly to those who stayed at and/or visited the campus, for enjoying the spicy food, delicious fruits from the garden, and surviving the long techno-socio-eco-political discussions. Boris seems to have taken it to heart my request for a copy of the TeXbook signed by Don Knuth — I cannot express the joy & thanks in words!

The recorded videos were handed over to Norbert Preining, who graciously agreed to make the individual lectures available after processing. The total file size was ~720 GB; so I connected the external SSD to one of the servers and made it available to a virtual machine via USB-passthrough; then mounted and made it securely available for copying remotely.

Special note of thanks to CVR, and Karl Berry — who I suspect is actually a kubernetes cluster running hundreds of containers each doing a separate task (with apologies to a thousand gnomes), but there are reported sightings of him; so I sent personal thanks via people who have seen him in flesh — for leading and coordinating the conference organizing. Barbara Beeton and Karl copy-edited our article for the TUGboat conference proceedings, which is gratefully acknowledged. I had a lot of fun and a lot less stress participating in TUG2025 conference!

Tuesday, 5 August 2025. Today KDE releases a bugfix update to KDE Plasma 6, versioned 6.4.4.

Plasma 6.4 was released in June 2025 with many feature refinements and new modules to complete the desktop experience.

This release adds three weeks’ worth of new translations and fixes from KDE’s contributors. The bugfixes are typically small but important and include:

  • Kwin - Plugins/magnifier: actually set the initial zoom properly. Commit. Fixes bug #507248
  • Plasma - System Monitor Plugins/network: Do not announce data for processes that are not added yet. Commit.
  • Plasma - Force keep notifications in history if they were triggered in DnD. Commit. Fixes bug #504571
View full changelog

Monday, 4 August 2025

I write this in the wake of a personal attack against my work and a project that is near and dear to me. Instead of spreading vile rumors and hearsay, talk to me. I am not known to be ‘hard to talk to’ and am wide open for productive communication. I am disheartened and would like to share some thoughts of the importance of communication. Thanks for listening.

Open source development thrives on collaboration, shared knowledge, and mutual respect. Yet sometimes, the very passion that drives us to contribute can lead to misunderstandings and conflicts that harm both individuals and the projects we care about. As contributors, maintainers, and community members, we have a responsibility to foster environments where constructive dialogue flourishes.

The Foundation of Healthy Open Source Communities

At its core, open source is about people coming together to build something greater than what any individual could create alone. This collaborative spirit requires more than just technical skills—it demands emotional intelligence, empathy, and a commitment to treating one another with dignity and respect.

When disagreements arise—and they inevitably will—the manner in which we handle them defines the character of our community. Technical debates should focus on the merits of ideas, implementations, and approaches, not on personal attacks or character assassinations conducted behind closed doors.

The Importance of Direct Communication

One of the most damaging patterns in any community is when criticism travels through indirect channels while bypassing the person who could actually address the concerns. When we have legitimate technical disagreements or concerns about someone’s work, the constructive path forward is always direct, respectful communication.

Consider these approaches:

  • Address concerns directly: If you have technical objections to someone’s work, engage with them directly through appropriate channels
  • Focus on specifics: Critique implementations, documentation, or processes—not the person behind them
  • Assume good intentions: Most contributors are doing their best with the time and resources available to them
  • Offer solutions: Instead of just pointing out problems, suggest constructive alternatives

Supporting Contributors Through Challenges

Open source contributors often juggle their community involvement with work, family, and personal challenges. Many are volunteers giving their time freely, while others may be going through difficult periods in their lives—job searching, dealing with health issues, or facing other personal struggles.

During these times, our response as a community matters enormously. A word of encouragement can sustain someone through tough periods, while harsh criticism delivered thoughtlessly can drive away valuable contributors permanently.

Building Resilient Communities

Strong open source communities are built on several key principles:

Transparency in Communication: Discussions about technical decisions should happen in public forums where all stakeholders can participate and learn from the discourse.

Constructive Feedback Culture: Criticism should be specific, actionable, and delivered with the intent to improve rather than to tear down.

Recognition of Contribution: Every contribution, whether it’s code, documentation, bug reports, or community support, has value and deserves acknowledgment.

Conflict Resolution Processes: Clear, fair procedures for handling disputes help prevent minor disagreements from escalating into community-damaging conflicts.

The Long View

Many successful open source projects span decades, with contributors coming and going as their life circumstances change. The relationships we build and the culture we create today will determine whether these projects continue to attract and retain the diverse talent they need to thrive.

When we invest in treating each other well—even during disagreements—we’re investing in the long-term health of our projects and communities. We’re creating spaces where innovation can flourish because people feel safe to experiment, learn from mistakes, and grow together.

Moving Forward Constructively

If you find yourself in conflict with another community member, consider these steps:

  1. Take a breath: Strong emotions rarely lead to productive outcomes
  2. Seek to understand: What are the underlying concerns or motivations?
  3. Communicate directly: Reach out privately first, then publicly if necessary
  4. Focus on solutions: How can the situation be improved for everyone involved?
  5. Know when to step back: Sometimes the healthiest choice is to disengage from unproductive conflicts

A Call for Better

Open source has given us incredible tools, technologies, and opportunities. The least we can do in return is treat each other with the respect and kindness that makes these collaborative achievements possible.

Every contributor—whether they’re packaging software, writing documentation, fixing bugs, or supporting users—is helping to build something remarkable. Let’s make sure our communities are places where that work can continue to flourish, supported by constructive communication and mutual respect.

The next time you encounter work you disagree with, ask yourself: How can I make this better? How can I help this contributor grow? How can I model the kind of community interaction I want to see?

Our projects are only as strong as the communities that support them. Let’s build communities worthy of the amazing software we create together.

https://gofund.me/506c910c

Tellico 4.1.3 is available, with a few fixes.

Improvements

  • Updated SRU fetcher to allow POST requests (Bug 507265).
  • Updated SRU fetcher to recognize alternate Dublin Core schema.
  • Updated OpenLibrary source to fetch work author (Bug 504586).
  • Fixed a bug with reporting correct image location.

You click a link in your chat app, your browser with a hundred tabs comes to the front and opens that page. How hard can it be? Well, you probably know by now that Wayland, unlike X, doesn’t let one application force its idiot wishes on everyone else. In order for an application to bring its window to the front, it needs to make use of the XDG Activation protocol.

KWrite (text editor) window, window has no focus (colors are softened). Task bar with a couple of apps, KWrite icon has an orange background behind it, indicating KWrite is demanding attention
A KWrite window that failed to activate and instead is weeping bitterly for attention in the task bar

In essence, an application cannot take focus, it can only receive focus. In the example above, your chat app would request an XDG Activation token from the compositor. It then asks the system to open the given URL (typically launching the web browser) and sends along the token. The browser can then use this token to activate its window.

This token is just a magic string, it doesn’t matter how it gets from one application to another. Typically, a new application is launched with the XDG_ACTIVATION_TOKEN variable in its environment. When activating an existing one, an activation-token property is added to the platform_data dict sent via DBus. There’s also older protocols that weren’t designed with this in mind, such as Notifications, StatusNotifierItem (tray icons), or PolKit requests where we cannot change the existing method signatures. Here we instead added some way to set a token just before the actual call.

However, just because you have a token doesn’t mean you can raise your window! The compositor can invalidate your token at any time and reject your activation request. The idea is that the compositor gets enough information to decide whether the request is genuine or some application popping up a dialog in the middle of you typing something. A token request can include the surface that requests the activation, the input serial from the focus or mouse event that resulted in this request, and/or the application ID of the application that should be activated. While all of this is optional (and there can be valid reasons why you don’t have a particular piece of information at this time), the compositor is more likely to decline activation if the information is incomplete or doesn’t match what the requesting application provided.

A lot of places in Qt, KDE Frameworks, and other toolkits and applications have already been adjusted to this workflow and work seamlessly. For example, calling requestActivate on a QWindow will check if there is an XDG_ACTIVATION_TOKEN in the environment and use it, otherwise request one. Qt also does this automatically when the window opens to match the behavior of other platforms. Likewise, things like ApplicationLauncherJob and OpenUrlJob will automatically request a token before proceeding. On the other hand, KDBusService (for implementing single instance applications) automatically sets the corresponding environment variable when it received a token via DBus. Together this makes sure that most KDE applications just work out of the box.

You might be wondering: didn’t KWin-X11 have “focus stealing prevention”? It sure does. There’s a complicated set of heuristics based on _NET_WM_USER_TIME to judge whether the new window appeared as a result of explicit user interaction or is unsolicited. Remember how back in ye olde days, KWin’s focus stealing prevention would keep the Adobe Flash Player fullscreen window from showing ontop of the YouTube video you’re watching? Yeah, it’s not perfect. KWin can also only react on things that have already happened. For instance, when an application uses XSetInputFocus on a window from a different application, KWin will detect that and consider it a malicious request and restore previous focus but for a split second focus did change. If you want to know more, there’s a 200+ lines comment in activation.cpp in KWin’s git repo that explains it all. But then again the application could just do whatever it wants and bypass all of this.

“Window Behavior” configuration dialog, various window-related tabs and options, mouse cursor pointing at a combo box “Focus stealing prevention” whose current item is “Extreme”
Xtreme Focus Stealing Prevention™

Unfortunately, there’s still a few places that don’t do XDG Activation correctly. It didn’t matter much under X – in doubt we could just forceActiveWindow – but now we have to fix those scenarios properly! In order to test whether your application is well-behaved, use the latest git master branch of KWin and set “Focus Stealing Prevention” in Window Management settings to “Extreme”. This will make KWin activate a window if and only if it requests activation with a valid token.

Using this, over the past couple of days Xaver Hugl of KWin fame and I fixed a bunch of issues, including but not limited to:

  • Dolphin threw away its token before activating its main window when launching a new instance (activating an existing one worked fine)
  • KRunner, Kickoff, and other Plasmoid popups did not request activation at all
  • LayerShell-Qt now requests activation on show (to match Qt behavior)
  • LayerShell-Qt didn’t read the XDG_ACTIVATION_TOKEN from the environment when provided
  • Privileged clients, like Plasma and KGlobalAccel, were unable to request tokens in some situations
  • Modifier key presses no longer count towards focus stealing prevention: they’re often used as part of a global keyboard shortcut and don’t necessarily mean the user is interacting with the active window

Furthermore, the DBusRunner specification gained a SetActivationToken method which is called just before Run. Baloo (desktop search) runner now uses this to ensure opening files in an existing application window works. Likewise for the KClock runner bringing KClock to the front properly. I further improved the recent documents runner and places runner to send the file type to the OpenUrlJob so it doesn’t have to determine it again. This makes the job much quicker and avoids KRunner closing before the activation token is requested by the job. However, we have yet to find a proper solution for this in KRunner.

With all of this in place, we’ll likely switch on KWin’s focus stealing on Wayland at a low level and make it gradually stricter as applications are being fixed.

Intro

After adding the ability to drag and reposition the Selection Action Bar on the canvas last week, I spent this week improving that interaction. I tackled the issue where users could drag the toolbar completely off-screen, making it inaccessible. This week was all about keeping the toolbar within the canvas boundaries.

Side note: This week I also updated the UI to resemble the mockup concept provided from the community.

Obstacles to Implementation

During testing I noticed that without boundaries, the draggable toolbar could end up hidden and inaccessible especially after window or sidebar resizing. This would make it frustrating for users because they would have to find the missing toolbar or toggle the feature off and back on just to relocate it. I wanted to make the toolbar's positioning restricted to canvas boundaries to keep the toolbar within users' vision.

Find Canvas Boundaries

Looking into the code, I found that the canvasWidget had a property QRect rect() which holds the dimensions of the canvas. We can use these values as the boundaries.

Add Boundaries to Drag Event

With canvasBounds defined, we can limit the drag operation to stay within the canvas dimensions. Based on the current canvas dimensions and during a drag event, we update the horizontal and vertical limits of the toolbar position with the use of qBound which provides an upper and lower boundary for a value. So if the coordinates of the toolbar were to go past the boundaries, qBound would return the defined upper or lower boundary value. On top of canvas boundaries, it is important to include the dimensions of the toolbar and buffer room in the calculation to make sure the UI elements are accessible.

// updated drag event with canvas boundaries
QPoint newPos = mouseEvent->pos() - d->dragStartOffset;

 QRect canvasBounds = canvasWidget->rect();
 int actionBarWidth = 125;
 int actionBarHeight = 25;
 int bufferSpace = 5;
 newPos.setX(qBound(canvasBounds.left() + bufferSpace, newPos.x(), canvasBounds.right() - actionBarWidth - bufferSpace));
 newPos.setY(qBound(canvasBounds.top() + bufferSpace, newPos.y(), canvasBounds.bottom() - actionBarHeight - bufferSpace));

 d->dragRectPosition = newPos;
 canvasWidget->update();
 return true;

Conclusion

This week was focused on improving the user experience and accessibility of the Selection Action Bar. I learned about some great Qt tools, like the properties of QWidget and Qt helper functions like qBound to help solve my problem! In the coming final weeks, I'll continue adding action buttons based on the list provided by the community.

Contact

To anyone reading this, please feel free to reach out to me. I'm always open to suggestions and thoughts on how to improve as a developer and as a person.
Email: ross.erosales@gmail.com
Matrix: @rossr:matrix.org

Saturday, 2 August 2025

Since the last update two months ago KDE Itinerary got support for manually added train and bus trips, a more flexible alternative connection search, a new departure details view and a better location search, among many other improvements.

New Features

Manual trip entry

Being able to manually enter train or bus trips rather than selecting them from timetable data has been often requested and is now finally available.

Context (sub)menu for adding manual entries.
New menu for adding manual train, bus, ferry or flight connections.

For all modes of transportation there’s now two modes, manually entered data where you can freely change departure and arrival locations and times, and schedule-backed data for trips added from public transport searches where you can change the departure and arrival stops only based on what’s actually in the schedule.

The latter is now also available for ferry trips.

London ferry connection shown with the same level of detail Itinerary previously supported for trains and busses.
Intermediate stops for a ferry.

The the various add and import actions have also been consolidated in a single menu on the trip page. Importing backups remains available on the My Data page.

Context menu containing all add and import actions.
New combined add/import context menu.

The alternative connection search is no longer limited to just trains and busses either, it now can also be applied to ferry trips and flights. Likewise all modes of transportation in the result can be added that way, that is also ferries and flights.

Additionally, the alternative connection search now allows to select any transfer stop as the destination, unlike previously being limited to just the first or the last one.

Popup menu showing all transfer stops along a trip as possible destination.
Destination selector in alternative connection search.

New public transport departures view

There’s also an entirely new and much more detailed public transport departures view. You’ll find that behind the new context menu on locations in the details pages.

Context menu containing actions related to a train station.
New location context menu.

The departure list now automatically updates when looking at current departures. Also, you can select an individual entry to get a whole set of additional information where available:

  • Service notes and alerts.
  • Occupancy levels.
  • The full trip run in a schedule view and and as a map.
  • The exact departure location on an indoor station map.
Detailed information for a single train departure.
New departure details page.

Events

Earlier this month we had the first Transitous Hack Weekend covering many topics relevant for Itinerary as well, ranging from making Transitous long-term sustainable over improving the data coverage and quality to expanding the routing capabilities.

There’s two important upcoming events:

I'm going to Akademy 2025!

Infrastructure Work

Everything mentioned in this section also benefits KTrip.

Geocoding

Geocoding is the process that happens behind the location search for journey planning. That produced some confusing and undesired results in the past, and should noticeably improve with the 25.08 release.

  • MOTIS, Transitous and KPublicTransport gained support for geographic bias areas for geocoding queries. That’s used in the location search based on the selected country. With this you should now always have results from the right country at the top, while still not having a hard filter which can be inconvenient in border areas.

  • Improved automatic backend selection for geocoding. This should fix the issue that in some countries locations were only searched in a few small regions rather than the entire area. Italy and the US were affected by this for example.

  • The city, region and country a result is in are now display in more cases in a second line under the address or station name. This should further help to disambiguate results.

Online updates for public transport backend configurations

Access to public transport data still depends on over 70 operator services, besides Transitous. Many of those aren’t really meant for 3rd party use and thus have no proper change management, which means they can randomly change their URL, need a new custom certificate, need new or changed parameters or just disappear entirely.

Adapting to a lot of that is merely a matter of changing configuration files part of KPublicTransport, but so far it would take up to a month for those changes to reach users of release packages.

As this can severely impact the functionality we now have the infrastructure to update the KPublicTransport backend configuration files as well as supporting data such as the coverage information without waiting for the next software update.

This is meant to happen automatically eventually, while we are still testing this it’s available as a context action in the public transport backend configuration page.

Pickup/dropoff constraints

Another new feature in MOTIS and Transitous are pickup and dropoff constraints. That is, a way to describe that you cannot board or cannot alight from a vehicle at a given stop. While that isn’t all that common, it can be quite important to know.

KPublicTransport also gained support for this, besides MOTIS also for OpenTripPlanner and Hafas backends. In the UI you can see this in a few places then:

  • Changing the departure or arrival stop when editing only allows to select those stops that actually allow boaring/alighting respectively.
  • Stops that allow neither boarding nor alighting are shown as such in the journey overview. This sometimes occurs for border crossings or Switzerland advertising significant rail infrastructure.
Train trip with two dummy stops for borders that do not allow alighting/boarding.
Intermediate stops not allowing boarding or alighting.

Fixes & Improvements

Travel document extractor

  • Added or improved travel document extractors for Amadeus, Arriva, BlablaBus, booking.com, DB, Deutscher Alpenverein, DJH, DSB, Easyjet, Eurostar, Finnair, Flixbus, Globtour, Gopass, hostelworld, Leo Express, LeShuttle, MÁV, Opodo, Ouigo ES, Reenio, SNCB, SCNF, tickets.ua and Tito.
  • Improved matching and merging of bound and unbound train/bus trips.
  • Improved matching and merging of seat reservations with seats listed in different orders.

All of this has been made possible thanks to your travel document donations!

Public transport data

  • New or fixed backend configurations for KVB, South Tyrol, ZKS and the Varsinais-Suomen OpenTripPlanner instance.
  • Onboard API support for XiamenAir.
  • Fix parsing of bike carriage and wheelchair accessibility capabilities from OpenTripPlanner.
  • Fix parsing of flight numbers from Entur.
  • Support for more vehicle features from DB.
  • Correctly update country coverage list in the stop picker when enabling/disabling backends.
  • Filter out journey results with implausibly long detours. This gets rid of the “creative” connections between the major stations in Paris by backends that can’t do local transport routing there.
  • Fix parsing of operator names from EFA.

Train station maps

  • Support for more OSM tagging schemes for elevators, tram infrastructure and platform sections.
  • Improved matching of platform names when faced with language specific leading abbreviations.
  • Cancel ongoing tile downloads before starting a new map load.
  • Better recovery from OSM level range tagging mistakes.
  • Better recovery from failed tile downloads.

Itinerary app

  • Added several more export options: Wallet passes, program memberships and standalone passes can now also be exported, and single reservations can be exported as GPX file.
  • Reworked journey progress display, which is now active in all journey views and should be much more reliable especially in the timeline view.
  • Standalone Wallet passes can now also be updated explicitly when containing an online update URL.
  • Improved default zoom in the journey and trip map views.
  • Fixed display of addresses with unresolved ISO 3166-2 region codes.
  • Determine a correct trip end time in more cases.
  • Fixed price display when there’s no home country configured.
  • Also show notes/service alerts in the stop info dialog on the journey map.
  • Fixed handling of Wallet passes with a case-sensitive identifier.

How you can help

Feedback and travel document samples are very much welcome, as are all other forms of contributions. Feel free to join us in the KDE Itinerary Matrix channel.

See also the recent posts on how you can add public transport data to Transitous and do OSM indoor mapping.

Welcome to a new issue of This Week in Plasma!

Every week we cover the highlights of what’s happening in the world of KDE Plasma and its associated apps like Discover, System Monitor, and more.

This week something was merged for Plasma 6.5 that a lot of people have been wanting for a long time: automatic day/night theme switching! And that's not all; we’ve got more visual customizability on offer too, plus a bunch more UI improvements and bug fixes. Check it all out here:

Notable New Features

Plasma 6.5.0

You can now have Plasma automatically switch to a different Global Theme at night! (Vlad Zahorodnii, link)

System Settings Global Themes page showing settings to turn on day/night switching

You can now choose which Global Themes are shown on System Settings’ Quick Settings page, and turn on automatic day/night switching from there, too! (Vlad Zahorodnii, link)

System Settings Quick Settings page showing popup to allow selecting which Global Themes you want shown in the quick toggles

You can now choose to always see the light or dark variants of wallpapers that include both. Now there should be enough options for anyone: you can set dynamic wallpaper coloration to be based on the color scheme, based on the time of day, always light, or always dark. (David Redondo, link)

System Settings Wallpaper page showing the ability to register a preference for light or dark wallpapers

Notable UI Improvements

Plasma 6.4.4

If you’re a person who prefers to drag things to your panel itself rather than to a Task Manager widget, those panel icons are now removable via their context menus. (Niccolò Venerandi, link)

Plasma 6.5.0

On Wayland, files opened from KRunner in an already-running app now raise that app’s window as expected. (Kai Uwe Broulik, link)

On Wayland, the Orca screen reader now reads out changes to the Caps Lock state. (Nicolas Fella, link)

Moved System Settings’ Screen Edges pages into the Display & Monitor group, because it feels more natural to group it with screens than with the type of input device used to trigger its features. (Nate Graham, link)

If your system is set up for hibernation, you can now hibernate from the SDDM login screen. (Tobias Leupold, link)

Clicking “Connect” on a network in the Networks popup now closes any other open password fields for other networks, so there’s only one visible at a time. (Arnav Rawat, link)

Re-phrased the sorting/alignment options in Plasma’s desktop icon configuration window to make it clearer what they do. (Akseli Lahtinen, link)

Notable Bug Fixes

Plasma 6.4.4

Fixed a bug that could cause Plasma to freeze when spammed with many notifications containing images. (Paul Geerken, link)

Fixed a bug that could cause Plasma to crash while loading stuff. (Nicolas Fella, link)

Fixed a bug in Plasma’s desktop that prevented dragging-and-dropping things inside folders while the desktop was scrollable. (Akseli Lahtinen, link)

Fixed a bug that caused panel editing via drag-and-drop to break in hilarious/awful ways when using a right-to-left language like Arabic or Hebrew. (Niccolò Venerandi, link)

Fixed several bugs in Plasma’s desktop that would cause icons to shift around on their own due to changing the screen arrangement or having certain combinations of panel and desktop file alignment settings. (Akseli Lahtinen, link)

Fixed a bug in Discover that caused it to get confused about which version of a Flatpak app was considered unstable or outdated when the system has multiple Flatpak remotes set up. (Nicolas Fella, link)

Fixed two bugs involving renaming desktop files: one that made it impossible to rename symlinks to desktop files installed at the system level or generally without write permission, and another one that made rename jobs sometimes just kind of fail. (Akseli Lahtinen, link 1 and link 2)

Fixed a bug that prevented Plasma widget configuration windows from restoring their saved sizes as expected. (David Redondo, link)

Fixed a bug that caused you to have to leave System Settings’ Colors page and then go back to it after creating a copy of a color scheme, because it didn’t show up immediately. (Akseli Lahtinen, link)

Plasma 6.5.0

Fixed two cases where Plasma could crash in Activities-related functionality. (Daniel Hast, link 1 and link 2)

Fixed a bug in the free space checker that would cause it to inappropriately try to mount unmounted network shares defined in /etc/fstab, which could lead to hangs when there was no network connectivity. (Niccolò Venerandi, link)

Fixed a bug in System Settings’ Region & Language page that caused a visual glitch when using the system with a right-to-left language like Arabic or Hebrew. (Nate Graham, link)

Frameworks 6.17

Fixed a regression that made it impossible to drag files from Plasma’s desktop on one screen to another one. The fix for this also fixed some bugs in Dolphin, too. (Akseli Lahtinen, link 1 and link 2)

Qt 6.8.4

Fixed a Qt bug that caused KWin on X11 to sometimes consume excessive CPU resources when locking or turning off the screen. (Vlad Zahorodnii, link)

Other bug information of note:

Notable in Performance & Technical

Plasma 6.5.0

Fixed a bug that could cause the plasmawindowed developer tool to crash when viewing the System Tray widget. (Chris Xiong, link)

How You Can Help

KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.

You can help KDE by becoming an active community member and getting involved somehow. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine! You don’t have to be a programmer, either; many other opportunities exist!

You can also help us by making a donation! A monetary contribution of any size will help us cover operational costs, salaries, travel expenses for contributors, and in general just keep KDE bringing Free Software to the world.

To get a new Plasma feature or a bugfix mentioned here, feel free to push a commit to the relevant merge request on invent.kde.org.

Friday, 1 August 2025

Let’s go for my web review for the week 2025-31.


Europe’s Self Inflicted Cloud Crisis

Tags: tech, cloud, vendor-lockin, politics

A change in culture and political will is indeed necessary. The relationship between organisations and US cloud providers isn’t healthy.

https://berthub.eu/articles/posts/our-self-inflicted-cloud-crisis/


The Future is NOT Self-Hosted

Tags: tech, self-hosting, criticism

There is some truth to this. Self-hosting isn’t for everyone just for the skills and compromises it requires. We need more widely available solutions without the corporate overlords.

https://www.drewlyton.com/story/the-future-is-not-self-hosted/


A dive into open chat protocols

Tags: tech, foss, communication, xmpp, matrix

Very interesting stuff. This doesn’t give a very cheerful picture of the current state though. Can a XMPP revival be in the cards? That would be an interesting outcome.

https://wiki.alopex.li/ADiveIntoOpenChat


A month using XMPP (using Snikket) for every call and chat

Tags: tech, xmpp, messaging, foss, self-hosting

It’s nice to see there are turn key solutions for hosting your own XMPP server nowadays. And the community behind this one even improve on the mobile applications.

https://neilzone.co.uk/2023/08/a-month-using-xmpp-using-snikket-for-every-call-and-chat/


Ethersync

Tags: tech, tools, syncing, realtime, collaborative

Looks like a nice tool for real-time collaboration on files.

https://ethersync.github.io/ethersync/


I want to defend Wayland here…

Tags: tech, linux, graphics, wayland

That’s a good point too often overlooked by people complaining at Wayland. It indeed enable form factors and uses cases that we couldn’t address with X11.

https://ordinary.cafe/@technobaboo/114935252929285259


Loading credentials from Bitwarden with direnv

Tags: tech, secrets, shell, tools

This is a nice trick for keeping your secrets safe while having them handy when needed.

https://ergaster.org/posts/2025/07/28-direnv-bitwarden-integration/


The Bard and The Shell

Tags: tech, shell, learning, funny

Neat little introduction to use your shell properly.

https://journal.bsd.cafe/2025/07/28/the-bard-and-the-shell/


Heredocs Can Make Your Bash Scripts Self-Documenting

Tags: tech, shell, scripting, documentation

This is really a neat trick. We should have more such self-documenting scripts indeed.

https://holdtherobot.com/blog/heredocs-can-make-your-bash-scripts-self-documenting/


Using fortune to reinforce habits

Tags: tech, tools, command-line, learning, habits

This is indeed a nice way to setup some new habits on the command line.

https://www.judy.co.uk/blog/using-fortune-to-reinforce-habits/


Type safe handles in C++

Tags: tech, programming, design, type-systems, c++

This is still a valid approach. I regularly encounter cases where the type tag pattern would have been welcome.

https://www.ilikebigbits.com/2014_05_06_type_safe_handles.html


C++26 Reflections adventures & compile time UML

Tags: tech, c++, metaprogramming

This really unlocks interesting features in the C++ space.

https://www.reachablecode.com/2025/07/31/c26-reflections-adventures-compile-time-uml/


Perfecting anti-aliasing on signed distance functions

Tags: tech, shader, mathematics, graphics

Nice explanation on the options for anti-aliasing when rendering using SDFs

https://blog.pkh.me/p/44-perfecting-anti-aliasing-on-signed-distance-functions.html


Rewriting the heart of our sync engine

Tags: tech, architecture, syncing

Good insight into why Dropbox rewrote its sync engine for desktop clients.

https://dropbox.tech/infrastructure/rewriting-the-heart-of-our-sync-engine


Broccoli: Syncing faster by syncing less

Tags: tech, syncing, compression

A follow up on the Dropbox sync engine rewrite, or why they introduced brotli compression.

https://dropbox.tech/infrastructure/-broccoli–syncing-faster-by-syncing-less


The Big OOPs: Anatomy of a Thirty-five-year Mistake

Tags: tech, programming, architecture, object-oriented, type-systems, history

A talk from Casey Muratori who is pushing his ideas on software architecture. This one is very interesting on the long history detour it does. Shows well how we keep rediscovering stuff which sometimes go back to the early times of computer science.

https://www.youtube.com/watch?v=wo84LFzx5nI


Looking at TDD: An Academic Survey

Tags: tech, tests, tdd, research

A nice little survey of what the academia already had to say about TDD a few years ago. Clearly the outcome seems mostly positive.

https://medium.com/@jitterted/looking-at-tdd-an-academic-survey-956a80545713


YAGNI

Tags: tech, design, architecture, xp, agile

It’s likely the best explanation of the YAGNI acronym I know. Explains quite well when it applies or not.

https://martinfowler.com/bliki/Yagni.html


WIP Limit Panic Sheet – what to do when you feel tempted to break the work-in-progress (WIP) limit

Tags: tech, agile, project-management, kanban

Nice check list, there’s more to project life than churning out tickets.

https://thought-bubble.co.uk/blog/2013/11/11/wip-limit-panic-sheet-what-to-do-when-you-feel-tempted-to-break-the-limit/


Enterprise Agility??

Tags: tech, agile, business, criticism

Looks like another certification circus is about to begin…

https://ronjeffries.com/articles/-w025/y/y/


Your Daily Scrum is Killing Your Team

Tags: tech, agile, project-management, team

Don’t just blindly apply dailies. Make sure they really solve a problem in your team.

https://blog.jbrains.ca/permalink/your-daily-scrum-is-killing-your-team


It’s an Experiment

Tags: tech, agile, project-management, change, habits

You have to be willing to experiment and adjust in order to truly be agile. Otherwise you indeed just do dailies and call yourself agile.

https://toolshed.com/2015/05/its-an-experiment.html


Retromat - Inspiration & plans for (agile) retrospectives

Tags: tech, agile, retrospective, tools

Neat tools to keep retrospective fresh. If people settle too much in habits they quickly become dull.

https://retromat.org/


The 3 Motivational Forces of Developers

Tags: tech, programming, team, motivation, management

This is still a good framework to think about what motivate developers in a team. Not everyone is the same.

https://www.bennorthrop.com/Essays/2013/developer-motivation.php


Crappy People versus Crappy Systems

Tags: management, hr

An oldie but still a good one. Yes, the people matter but even good people won’t strive in a badly designed system.

https://bobsutton.typepad.com/my_weblog/2006/08/crappy_people_v.html


Let’s Kill You a Billion Times to Make You Immortal

Tags: physics

Quantum mechanics and the many world theory really are playing with your brain. Funnily enough I read an excellent novel recently based on this principle.

https://www.youtube.com/watch?v=7wK4peez9zE



Bye for now!