<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet href="/html-rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Planet KDE | English</title><link>https://planet.kde.org/</link><description>Planet KDE | English</description><image><link>https://planet.kde.org/</link><title>Planet KDE</title><url>https://planet.kde.org/img/planet.png</url><height>48</height><width>48</width></image><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>2026-08-12T11:46:26+00:00</lastBuildDate><atom:link href="https://planet.kde.org/index.xml" rel="self" type="application/rss+xml"/><item><title>Weeks 9 &amp; 10: Multi-Select and Mobile Selection Mode</title><link>https://roshani-gsoc.bearblog.dev/weeks-9-10-multi-select-and-mobile-selection-mode/</link><pubDate>Wed, 12 Aug 2026 11:46:26 +0000</pubDate><guid isPermaLink="true">https://roshani-gsoc.bearblog.dev/weeks-9-10-multi-select-and-mobile-selection-mode/</guid><description>&lt;p&gt;Over the last two weeks, I worked on adding multi-select support for deleting multiple entries at once. It sounded like a straightforward feature at first, but it ended up leading me down an interesting debugging involving an asynchronous race condition.&lt;/p&gt;
&lt;h2 id=multi-select-with-codectrlclickcode-and-codeshiftclickcode-a-hrefhttpsinventkdeorgutilitieskeepsecret-merge_requests4444a&gt;Multi-Select with &lt;code&gt;Ctrl+Click&lt;/code&gt; and &lt;code&gt;Shift+Click&lt;/code&gt; (&lt;a target="_blank" href='https://invent.kde.org/utilities/keepsecret/-/merge_requests/44'&gt;!44&lt;/a&gt;)&lt;/h2&gt;&lt;p&gt;&lt;code&gt;KeepSecret&lt;/code&gt; now supports the standard multi-selection behavior users expect from desktop applications. You can &lt;code&gt;Ctrl+click&lt;/code&gt; to select or deselect individual entries, and &lt;code&gt;Shift+click&lt;/code&gt; to select a range of entries. I also updated the right-click behavior so that if you right-click on an unselected entry, it becomes the current selection first.&lt;/p&gt;
&lt;p&gt;Another improvement was simplifying the delete logic. Previously, deleting a single entry and deleting multiple entries followed different code paths. Now both actions share the same implementation, making the code cleaner and easier to maintain.&lt;/p&gt;
&lt;p&gt;While working on this feature, I also fixed a few small UI issues. The entry details panel would sometimes open unexpectedly after a right-click, occasionally close when it shouldn't, or remain visible even after the selected wallet had been deleted. These edge cases are now handled correctly.&lt;/p&gt;
&lt;h2 id=the-race-condition&gt;The Race Condition&lt;/h2&gt;&lt;p&gt;Deleting multiple entries at once would sometimes fail with a confusing &lt;code&gt;libsecret-CRITICAL&lt;/code&gt; error and a “Could not retrieve the secret value” message. The problem was inconsistent—it could happen with the first item or with one of the later items.&lt;/p&gt;
&lt;p&gt;I first checked a few possible causes, like stale proxy-model indices and timing issues between deletion and model updates. Eventually, I found the real problem.&lt;/p&gt;
&lt;p&gt;When an item was loaded, it also started an &lt;strong&gt;asynchronous&lt;/strong&gt; request to fetch its secret. But the delete operation could run before that request finished. If the item was deleted first, the callback would later try to access an item that no longer existed.&lt;/p&gt;
&lt;p&gt;Since we don't need the actual secret value when deleting an entry, I changed the loading process to skip that unnecessary request. This removed the race condition instead of trying to work around the timing issue.&lt;/p&gt;
&lt;h2 id=mobile-friendly-selection-mode-a-hrefhttpsinventkdeorgutilitieskeepsecret-merge_requests4646a&gt;Mobile-Friendly Selection Mode (&lt;a target="_blank" href='https://invent.kde.org/utilities/keepsecret/-/merge_requests/46'&gt;!46&lt;/a&gt;)&lt;/h2&gt;&lt;p&gt;I added a touch-friendly version of the desktop multi-select feature. Long-pressing an entry enters selection mode, where checkboxes appear and tapping entries toggles their selection. It reuses the existing selection logic, so the Delete Selected Secrets action works without any changes.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href='https://invent.kde.org/ngraham'&gt;Nate Graham&lt;/a&gt; also suggested that this pattern could eventually be useful as a reusable component for other mobile apps. &lt;a target="_blank" href='https://invent.kde.org/mart'&gt;Marco Martin&lt;/a&gt; is testing the long-press behavior on a touch device next, since it currently also gets triggered by clicking and holding with a mouse.&lt;/p&gt;</description><author>Roshani Kumari</author></item><item><title>Keep your community afloat with the right defense tokens</title><link>https://pointieststick.com/2026/08/11/keep-your-community-afloat-with-the-right-defense-tokens/</link><pubDate>Tue, 11 Aug 2026 21:46:41 +0000</pubDate><guid isPermaLink="true">http://pointieststick.com/?p=30091</guid><description>&lt;p class="wp-block-paragraph"&gt;My favorite tabletop game of all time is &lt;em&gt;&lt;a target="_blank" href="https://starwars-armada.fandom.com/wiki/Star_Wars:_Armada_Wiki"&gt;Star Wars: Armada&lt;/a&gt;&lt;/em&gt;, a Star Wars themed ship combat wargame.&lt;/p&gt;
&lt;figure class="wp-block-image size-full is-style-default"&gt;&lt;img data-attachment-id="30141" data-permalink="https://pointieststick.com/2026/08/11/keep-your-community-afloat-with-the-right-defense-tokens/armada/" data-orig-file="https://pointieststick.com/wp-content/uploads/2026/08/armada.jpg" data-orig-size="1500,844" data-comments-opened="1" data-image-meta="&amp;#123;&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}" data-image-title="armada" data-image-description="" data-image-caption="" data-large-file="https://pointieststick.com/wp-content/uploads/2026/08/armada.jpg?w=1024" src="https://pointieststick.com/wp-content/uploads/2026/08/armada.jpg" alt="" class="wp-image-30141" /&gt;&lt;/figure&gt;
&lt;p class="wp-block-paragraph"&gt;Armada has many deep and tactically interesting features, but one of my favorites is the unique suite of &lt;em&gt;defense tokens&lt;/em&gt; available to each spaceship to protect itself against attacks, from among the following six options:&lt;/p&gt;
&lt;ul class="wp-block-list"&gt;
&lt;li&gt;&lt;strong&gt;Scatter&lt;/strong&gt; &amp;#8211; the attack is completely canceled. &lt;em&gt;&amp;#8220;I wasn&amp;#8217;t where you were shooting&amp;#8221;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evade&lt;/strong&gt; &amp;#8211; cancel an attack die at long range, or re-roll one at short and medium range. &lt;em&gt;&amp;#8220;I dodged your attack, so it missed or became a glancing blow&amp;#8221;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brace&lt;/strong&gt; &amp;#8211; halve the damage. &lt;em&gt;&amp;#8220;Ouch, you hit me! But it wasn&amp;#8217;t as bad as it could have been&amp;#8221;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redirect&lt;/strong&gt; &amp;#8211; move some damage to an adjacent hull zone. &lt;em&gt;&amp;#8220;You hit me, but not where I was weakest&amp;#8221;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contain&lt;/strong&gt; &amp;#8211; downgrade a critical hit to normal damage &amp;#8211; &lt;em&gt;&amp;#8220;My damage control efforts turned the potential catastrophe into just a normal crisis&amp;#8221;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Salvo&lt;/strong&gt; &amp;#8211; return fire. &lt;em&gt;&amp;#8220;You hit me, but I hit back&amp;#8221;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="wp-block-paragraph"&gt;There&amp;#8217;s &lt;a target="_blank" href="https://www.tabletopbattles.com/star-wars-armada-naval-academy-warship-survival"&gt;way more information here&lt;/a&gt; for people whose military nerd curiosity has been piqued.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Anyway, this is well and good for games about spaceships, but what&amp;#8217;s the relevance? Let&amp;#8217;s imagine that we humans have these defense tokens, too. And today I&amp;#8217;d like to talk about how they relate not to physical attacks, but interpersonal ones.&lt;/p&gt;
&lt;hr class="wp-block-separator has-alpha-channel-opacity" /&gt;
&lt;h2 class="wp-block-heading"&gt;You negligent fool! You nit-picking jerk!&lt;/h2&gt;
&lt;p class="wp-block-paragraph"&gt;Someone has blindsided you with unexpected criticism! The monkey brain sees this as an attack:&lt;/p&gt;
&lt;figure class="wp-block-image size-full"&gt;&lt;img data-attachment-id="30108" data-permalink="https://pointieststick.com/2026/08/11/keep-your-community-afloat-with-the-right-defense-tokens/image-91/" data-orig-file="https://pointieststick.com/wp-content/uploads/2026/08/image.png" data-orig-size="1920,1080" data-comments-opened="1" data-image-meta="&amp;#123;&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://pointieststick.com/wp-content/uploads/2026/08/image.png?w=1024" src="https://pointieststick.com/wp-content/uploads/2026/08/image.png" alt="" class="wp-image-30108" /&gt;&lt;/figure&gt;
&lt;p class="has-text-align-right has-light-gray-color has-text-color has-link-color wp-elements-d71c94ca8c0b329b322ce57c7a14132d wp-block-paragraph" style="font-size:9px"&gt;Imperial Star Destroyer by topcat at Wallpapers.com — &lt;a target="_blank" href="https://wallpapers.com/wallpapers/imperial-star-destroyer-hus8fir1xr6vldsn.html"&gt;https://wallpapers.com/wallpapers/imperial-star-destroyer-hus8fir1xr6vldsn.html&lt;/a&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Red alert! Shields up! All hands to battle stations! Your blood pressure rises. You see red and gear up for a fight:&lt;/p&gt;
&lt;figure class="wp-block-image size-full"&gt;&lt;img data-attachment-id="30137" data-permalink="https://pointieststick.com/2026/08/11/keep-your-community-afloat-with-the-right-defense-tokens/red-bull/" data-orig-file="https://pointieststick.com/wp-content/uploads/2026/08/red-bull.png" data-orig-size="1004,747" data-comments-opened="1" data-image-meta="&amp;#123;&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}" data-image-title="red-bull" data-image-description="" data-image-caption="" data-large-file="https://pointieststick.com/wp-content/uploads/2026/08/red-bull.png?w=1004" src="https://pointieststick.com/wp-content/uploads/2026/08/red-bull.png" alt="" class="wp-image-30137" /&gt;&lt;/figure&gt;
&lt;p class="has-text-align-right has-light-gray-color has-text-color has-link-color wp-elements-2f9a72451521423c48073883d062f064 wp-block-paragraph" style="font-size:9px"&gt;&lt;a target="_blank" href="https://freepngimg.com/png/28553-bull-image"&gt;Bull Image from FreePNGimg.com&lt;/a&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;And what&amp;#8217;s the most satisfying defense token to use? &lt;em&gt;Salvo&lt;/em&gt;, for sure. Hit back:&lt;/p&gt;
&lt;blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"&gt;
&lt;p class="wp-block-paragraph"&gt;Oh yeah, that&amp;#8217;s pretty rich coming from you given how you messed up that other thing last week!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="wp-block-paragraph"&gt;The angry email. The &amp;#8220;call-out&amp;#8221; social media post. The sharp reply on chat. The hyper-critical blog post. They feel good, right?&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;But &lt;em&gt;Salvo&lt;/em&gt; doesn&amp;#8217;t actually avoid any damage. in Armada, if you &lt;em&gt;Salvo&lt;/em&gt; every attack, your ship explodes, with the only other effect being that the attacking ship gets hurt too — usually a lot less.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;From the perspective of minimizing interpersonal friction in a group setting, &lt;em&gt;Salvo&lt;/em&gt; is the worst defense token. It didn&amp;#8217;t end the conflict created by this unexpected criticism; in fact, now the conflict is bigger and louder, because the criticizer has also gotten hurt. Other people may leap to their defense, or yours, and pretty soon the battle lines are established. What started as a community soon feels like a war zone.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;em&gt;Redirect&lt;/em&gt; isn&amp;#8217;t great, either; in a community context it&amp;#8217;s basically blame-shifting, which similarly doesn&amp;#8217;t prevent any damage; it just moves it around, and the community still suffers.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Neither is is not what we want for our community if the goal is to remain friendly and welcoming!&lt;/p&gt;
&lt;h2 class="wp-block-heading"&gt;Prevent and reduce damage&lt;/h2&gt;
&lt;p class="wp-block-paragraph"&gt;If we want to keep our &lt;s&gt;ship flying&lt;/s&gt; community alive, we need to prefer the defense tokens that prevent or reduce damage:&lt;/p&gt;
&lt;ul class="wp-block-list"&gt;
&lt;li&gt;&lt;strong&gt;Scatter:&lt;/strong&gt; prevent conflicts in the first place by meeting expectations, being mindful of other people&amp;#8217;s feelings, and maintaining your relationships.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evade:&lt;/strong&gt; notice impending conflicts and help make them fizzle out early. Be humble.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brace:&lt;/strong&gt; mend fences and fix problems so the conflicts that do erupt shrink over time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contain:&lt;/strong&gt; keep conflicts localized to the participants, and prevent them from spiraling out of control. Don&amp;#8217;t let drama spill out into the larger team or the whole organization — or heaven forbid into the media! Accept valid criticism and let others have the last word.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="wp-block-paragraph"&gt;These social defense tokens are harder and less satisfying to use than &lt;em&gt;Salvo&lt;/em&gt; and &lt;em&gt;Redirect&lt;/em&gt;. But over the long term, they do a much better job.&lt;/p&gt;
&lt;h2 class="wp-block-heading"&gt;Which brings us to KDE&lt;/h2&gt;
&lt;p class="wp-block-paragraph"&gt;Today I think KDE is known as a pretty friendly place. And when I look around, I see a lot of examples of people ­— consciously or unconsciously — using defense tokens in their interpersonal relationships that reduce harm rather than moving it around or sending it back.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;It&amp;#8217;s not perfect, of course. We all mess up sometimes. And a culture like this takes years to develop. But I think the strong social bonds between contributors inside KDE are self-evident, and represent a significant part of the organization&amp;#8217;s success today.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;So I want to congratulate KDE and encourage us all to keep it up! I know times are tough and a lot of things in the world feel like they&amp;#8217;re exploding, or getting ready to. Things suck more than they should, and there&amp;#8217;s always more we can do to improve it. But as long as we maintain our relationships with one another, it becomes a lubricant that makes all those things so much more possible to survive or achieve.&lt;/p&gt;</description><author>Nate Graham</author></item><item><title>KEcoLab Sprint 26</title><link>https://chucklesdroid.xyz/posts/kecolabsprint26/kecolabsprint26/</link><pubDate>Tue, 11 Aug 2026 18:20:00 +0000</pubDate><guid isPermaLink="true">https://chucklesdroid.xyz/posts/kecolabsprint26/kecolabsprint26/</guid><description>&lt;p&gt;I participated in the KEcoLab sprint held from May 27th to May 28th at the KDAB office in Berlin. It was my first time being at a KEcoLab sprint, I have mostly been an online participant before this so it was nice to meetup with both Karan and Joseph and work together in person. I also got to meet Carl Schwan and Volker Kraus.&lt;/p&gt;
&lt;h2 id="day-0"&gt;Day 0&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;I arrived a day early by an overnight train around 7 am. I couldn&amp;rsquo;t check in to the hostel before 3pm so decided to explore the city instead.&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;I explored the area around Alexandrplatz and got some nice photos, more of that will be covered in my next blog about Berlin.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;I met up with Karan and was able to check in a bit early. We had Vietnamese Pho for lunch.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Later at evening me and Karan met with Joseph and he showed us around. We visited Tempelhofer Feld and Joseph also treated us to a nice Turkish dinner.&lt;/p&gt;
&lt;h2 id="day-1"&gt;Day 1&lt;/h2&gt;
&lt;p&gt;We met at the KDAB office at 10am to start the sprint. We started the day by fixing the RDP connection. Recently we have been unable to maintain a reliable RDP connection with the remote lab, we required someone to be present in the lab to help us establish access. We restarted the SUT (System Under Test) and tried to establish a connection again when we found out we were prompted by a dialog box to allow remote connection. This isn&amp;rsquo;t an ideal situation for a remote lab because this permission is reset on reboot. We found that the solution to the exact issue we were facing was already solved by Harald Sitter through &lt;a target="_blank" href="https://invent.kde.org/plasma/xdg-desktop-portal-kde/-/merge_requests/326" target="_blank" rel="noopener noreffer "&gt;this patch&lt;/a&gt; to XDG desktop portal. We ran the commands in the patch and tested it few more times to confirm it was working reliably.&lt;/p&gt;
&lt;p&gt;Next we started working on setting up the 2nd SUT which was generously donated by Cornelius to KDE.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Unfortunately the PC refused to post. As soon as it was turned on it would produce 6 loud beeps. The pc we had access to was a &lt;em&gt;Fujisu Esprimo p510 85+&lt;/em&gt; with 4gb of ram and an Intel core i5 using &lt;em&gt;AMI Aptio 4.6&lt;/em&gt; Bios.&lt;/p&gt;
&lt;p&gt;We tried to debug the issues by removing the ram sticks one after another but the beep was still audible and the frequency remained constant. We tried multiple different cables as well to rule out a faulty display cable. Point to note, the CPU fan during this time would be at full throttle and the usb ports were also not getting power.&lt;/p&gt;
&lt;p&gt;We also tried replacement ram sticks that folks at KDAB had but it didnt solve the issue. Replacing the CMOS battery also didn&amp;rsquo;t help.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;As last ditch effort, we removed the CPU fan and tried to boot the system (the system was immediately switched off once the beeps started so roughly 2s uptime) to see if the beeps would still be persistent but it was still present although we did find the reason why the fan was running at full throttle, the thermal paste was completely dry.&lt;/p&gt;
&lt;p&gt;Going by the &lt;a target="_blank" href="https://www.congatec.com/fileadmin/user_upload/Documents/Others/AMI_Aptio_4.x_Status_Codes_PUB_01.pdf" target="_blank" rel="noopener noreffer "&gt;manufacturer&amp;rsquo;s documentation&lt;/a&gt;, 6 beeps presents itself as &amp;ldquo;Flash update is failed&amp;rdquo;, searching online didn&amp;rsquo;t give us a viable solution and since the usb ports were not working reflashing the bios was also out of question.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;We ended the day by shifting our focus towards generating a new &lt;em&gt;Okular Measurement Report&lt;/em&gt; for the Blue Angel Certification. We were also interested in seeing how much energy consumption would have changed since the first report. Our Season of KDE 26 mentee &lt;a target="_blank" href="https://hrishikeshgohain.netlify.app/" target="_blank" rel="noopener noreffer "&gt;Hrishikesh Gohain&lt;/a&gt; had worked towards this. There were few changes we needed to make to run the pipeline successfully. We tested them locally first on our laptops and once it passed successfully, we ran the script overnight and that was our last task of Day 1. Following was the &lt;a target="_blank" href="https://invent.kde.org/sdk/kecolab/-/commit/95d9be67518596f6c8dadefd8f51c4919602573d" target="_blank" rel="noopener noreffer "&gt;pipeline&lt;/a&gt; that was run.&lt;/p&gt;
&lt;p&gt;
At the end of the day, we visited c-base, berlin. It was a nice experience and we were also lucky to visit the members only spaces and got a whole tour of the place by one of the members. Aferwards we all went to a nice Azerbaijanish place.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Later me and Karan spent the rest of the night exploring Berlin on a lime scooter. Suffice to say, Berlin at night is quite a beaut!&lt;/p&gt;
&lt;h2 id="day-2"&gt;Day 2&lt;/h2&gt;
&lt;p&gt;We started the day by checking the report generated by the pipeline we ran last day. We had unfortunately run into the following error.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Error in performanceData$HDDRead + performanceData$HDDWritten : non-numeric argument to binary operator&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We then looked into running the setup locally on our laptops to debug the issue. We found out that when stopping the pipeline before completion, it results in the intermediate data being overwritten instead of the files being deleted on a fresh run which resulted in data corruption and hence the error. We fixed that with &lt;a target="_blank" href="https://invent.kde.org/sdk/kecolab/-/work_items/64" target="_blank" rel="noopener noreffer "&gt;64&lt;/a&gt;, &lt;a target="_blank" href="https://invent.kde.org/sdk/kecolab/-/work_items/18" target="_blank" rel="noopener noreffer "&gt;18&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/sdk/kecolab/-/work_items/16" target="_blank" rel="noopener noreffer "&gt;16&lt;/a&gt; patches and ran the pipeline again.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Next we focused on brainstorming ideas about the workflow to measure the Plasma Desktop Environment. We were initially thinking about using the second PC for measuring it due to security reasons but since we were unable to set up the 2nd server we had to shift our plans. We also got some nice inputs regarding this from Volker. Following points were discussed&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No root access to user files for test user.&lt;/li&gt;
&lt;li&gt;In a standard usage scenario, PC would run for approx. 8 hours -&amp;gt; this was used to determine the baseline, standard usage scenario and idle modes for the plasma testing.&lt;/li&gt;
&lt;li&gt;Testing different snapshots of Plasma against regressions in new releases -&amp;gt; maybe even KDE Linux can be a good candidate.&lt;/li&gt;
&lt;li&gt;How to run the daemon from the pipeline without root permissions.&lt;/li&gt;
&lt;li&gt;Password stored as gitlab secret and given permission to owners (or maybe don&amp;rsquo;t require a password).&lt;/li&gt;
&lt;li&gt;Switching to a newer set of hardware long term.&lt;/li&gt;
&lt;li&gt;Testing plasma on older hardware and modern hardware -&amp;gt; for ex. video playback.&lt;/li&gt;
&lt;li&gt;Cleanup of the existing hardware -&amp;gt; for ex. monitor is not needed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Afterwards we reviewed the open issues, submitting patches for the active bugs and closed those that had already been resolved.&lt;/p&gt;
&lt;p&gt;We then went through the report generated by the pipeline and unfortunately found out that the readings were too inaccurate and had way too much divergence in measurement values as compared to the initial report generated for Blue Angel certification. (We are allowed at max 10% increase for Blue Angel Certification).&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;We found out that there were several &lt;code&gt;startAction&lt;/code&gt; and &lt;code&gt;stopAction&lt;/code&gt; pairs missing from the script which was causing irregular measurement readings. These actions are used to generate the csv files and the R script is particularly sensitive to these labels which explains why the readings were so wildly inaccurate. So we ran the script again and checked it afterwards the sprint. There were still some issues encountered later on but they were resolved by Joseph and we got a new report for the Blue Angel Certification.&lt;/p&gt;
&lt;p&gt;We were also joined by Koleesch who traveled from Postdam for the evening session of the KEcoLab sprint.&lt;/p&gt;
&lt;p&gt;While we still had the following day to explore Berlin, it was our last night in the city. Karan and I spent it with Carl Schwan at Tempelhofer Feld before taking one final late night walk through the streets.&lt;/p&gt;
&lt;h2 id="day-nn-and-final-thoughts"&gt;Day n/n and Final Thoughts&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;I had a late night train back to Marburg so me and Karan first spent the day exploring the German Musuem of Technology, it was very big and had so many artifacts describing the history of Berlin and Germany throughout the years. We were&amp;rsquo;nt able to visit the entire musuem since Karan had an early flight back to Geneva but we were able to go through the Railway and Aviation section. Regardless to say I was mesmerized. Later on I also visited Berliner Mauer and the area surrounding it.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;I enjoyed my time in Berlin and huge thanks to KDE e.V for making it possible by sponsoring my travel and stay, and to KDAB and Volker for providing the office space for our sprint.&lt;/p&gt;</description><author>Aakarsh MJ</author></item><item><title>Adding voice chat for Mankala</title><link>https://sayandeep.bearblog.dev/adding-voice-chat-for-mankala/</link><pubDate>Tue, 11 Aug 2026 15:13:04 +0000</pubDate><guid isPermaLink="true">https://sayandeep.bearblog.dev/adding-voice-chat-for-mankala/</guid><description>&lt;h3 id=hi-everyone-this-week-we-added-voice-chat-for-mankala&gt;Hi everyone! This week we added voice chat for Mankala.&lt;/h3&gt;&lt;p&gt;For Mankala, our goal was to elevate the player experience by adding real-time voice chat. We have already added text chat using XMPP, and to make this experience better, voice chat is a much better option to add.&lt;/p&gt;
&lt;p&gt;Mankala relies on the XMPP protocol for matchmaking and text chat using the opponent and player XMPP IDs, respectively. I took KDE’s own chat application in reference: Kaidan, to implement Jingle (XEP-0167)—the XMPP extension for media sessions and connect it using an audio processing pipeline. After that, I designed the UI for this voice call to connect, accept, and decline calls with sync in UI and XMPP.&lt;/p&gt;
&lt;h3 id=how-voice-is-being-implemented&gt;How voice is being implemented&lt;/h3&gt;&lt;p&gt;I used the &lt;code&gt;QXmpp&lt;/code&gt; library to handle the Jingle signaling and designed a C++ class, &lt;code&gt;VoiceCallManager&lt;/code&gt;, which controls all the call sessions. This manager listens for incoming Jingle requests and establishes the peer-to-peer connection.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;// VoiceCallManager.cpp
void VoiceCallManager::initializeManager() &amp;#123;
auto* callManager = m_client-&amp;gt;findExtension&amp;lt;QXmppCallManager&amp;gt;();
// Listen for incoming XMPP Jingle calls
connect(callManager, &amp;amp;QXmppCallManager::callReceived,
this, [this](QXmppCall* call) &amp;#123;
m_activeCall = call;
m_remoteJid = call-&amp;gt;jid();
m_isCallActive = true;
// Notify the QML frontend that a call has started
emit callStateChanged();
emit remoteInfoChanged();
// Accept the call and set up QtMultimedia audio routing
call-&amp;gt;accept();
setupAudioPipeline();
});
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p align="center"&gt;
&lt;video width="700" style="border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);" controls&gt;
&lt;source src="https://raw.githubusercontent.com/redhatsam09/redhatsam09.github.io/main/Screencast%20from%202026-08-11%2020-19-08.webm" type="video/webm"&gt;
Your browser does not support the video tag.
&lt;/video&gt;
&lt;/p&gt;
&lt;h3 id=challenges-faced&gt;Challenges faced&lt;/h3&gt;&lt;p&gt;It was hard to have Game Window and Jingle work together. To handle this, I exposed the call state—such as &lt;code&gt;isCallActive&lt;/code&gt; and &lt;code&gt;remoteJid&lt;/code&gt; so that the UI can connect these signals easily, making the call interactive in the layout.&lt;/p&gt;
&lt;h3 id=here-is-how-the-qml-dynamically-reacts-to-the-c-properties&gt;Here is how the QML dynamically reacts to the C++ properties:&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;// GameWindowLandscape.qml
ColumnLayout &amp;#123;
anchors. fill: parent
// 1. The Standard Text Chat UI
Item &amp;#123;
id: textChatView
Layout.fillWidth: true
Layout.fillHeight: true
// Hide text chat when a voice call is active!
visible: !voiceManager.isCallActive
/* ... text chat UI components ... */
}
// 2. The Active Voice Call UI
ColumnLayout &amp;#123;
id: activeCallView
Layout.fillWidth: true
Layout.fillHeight: true
visible: voiceManager.isCallActive
Kirigami.Icon &amp;#123;
source: &amp;quot;im-jabber&amp;quot;
width: 96; height: 96
}
Text &amp;#123;
text: voiceManager.remoteName
font.pixelSize: 24
font. bold: true
}
Button &amp;#123;
text: &amp;quot;End Call&amp;quot;
icon.name: &amp;quot;call-stop&amp;quot;
onClicked: voiceManager.endCall()
}
}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;By binding QML components to the &lt;code&gt;VoiceCallManager&lt;/code&gt; signals, the UI updates instantly based on the state of the call. After this we have successfully implemented voice and text chat for Mankala.&lt;/p&gt;
&lt;p&gt;Thanks for reading :)&lt;/p&gt;</description><author>Sayandeep Dutta</author></item><item><title>Skrooge 26.8.0 released</title><link>https://skrooge.org/news/2026-08-10-skrooge_26.8.0_released/</link><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://skrooge.org/news/2026-08-10-skrooge_26.8.0_released/</guid><description>The &lt;a target="_blank" href="https://skrooge.org"&gt;Skrooge&lt;/a&gt; Team announces the release 26.8.0 version of its popular Personal Finances Manager based on &lt;a target="_blank" href="https://kde.org"&gt;KDE Frameworks&lt;/a&gt;.
&lt;h3 id="changelog"&gt;Changelog&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Correction bug 518796: skrooge-boursorama.py stop to work for some values&lt;/li&gt;
&lt;li&gt;Correction bug 520749: Skrooge can't load skg file after org.kde.Platform update&lt;/li&gt;
&lt;li&gt;Correction: Sources' keys not displayed in settings&lt;/li&gt;
&lt;li&gt;Feature: Keep focus on selection when the current filter is changed&lt;/li&gt;
&lt;li&gt;Feature: New option to choose to currency format (currency or numerical)&lt;/li&gt;
&lt;li&gt;Feature: Better management of deprecated source of download of currencies&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="we-need-your-feedback"&gt;We need your feedback&lt;/h3&gt;
&lt;p&gt;AI support is now available in Skrooge, and this first version is just the start. I’d love to hear about your experience: what works well, what could be better, and any use cases you want to see.
Please send your feedback by email.&lt;/p&gt;</description><author>Stéphane MANKOWSKI</author></item><item><title>KStars 3.8.4 Released</title><link>http://knro.blogspot.com/2026/08/kstars-384-released.html</link><pubDate>Sun, 09 Aug 2026 12:44:03 +0000</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-719809040809975458.post-2908275669261545254</guid><description>&lt;p&gt;KStars v3.8.4 is released on 2026.08.09 for &lt;a target="_blank" href="https://edu.kde.org/kstars/#download"&gt;Windows, Linux, and MacOS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For Linux users, it's highly recommended to use the official &lt;a target="_blank" href="https://flathub.org/apps/org.kde.kstars"&gt;KStars Flatpak&lt;/a&gt; hosted at Flathub.&lt;/p&gt;
&lt;p&gt;This release brings major improvements including the &lt;b&gt;World's First AI powered Guider&lt;/b&gt;! Furthermore, KStars now ships with an &lt;b&gt;MCP server&lt;/b&gt; which enables connection to any LLM for full control. In this release a limited subset of skills have been introduced, and we hope to make the MCP server feature complete by the next release. Additionally, we improved rotator calibration, guide camera streaming support, and scheduler performance with large job lists. We've also fixed dozens of stability issues and added comprehensive tilt correction for mosaic masks. Here are some highlights.&lt;/p&gt;
&lt;h2&gt;AI Guiding Assistant&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Pavan Kumar&lt;/b&gt; is our brilliant Google Summer of Code student who spent the summer developing an AI assisted guider. He delivered the &lt;b&gt;AI Guiding Assistant for Ekos&lt;/b&gt;, a mount specific predictive guiding architecture that trains custom models for worm gear, harmonic drive, and direct drive mounts. The wizard walks you through system identification protocols, exports training data, and loads trained models for feed forward correction.&lt;/p&gt;
&lt;div class="separator" style="clear: both;"&gt;&lt;a target="_blank" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghjg_9QusVxVIAi45OkkyhXcj1gv5M0zqnzmmJl8OpH2XbDxeeYsLmbP91KYI8BdG-lgAbgcrkj8YJ7SpnibjH6IDQFTyka3OvCmfDLuBD0EzX3Fv_vcAGSHpzlN8T07k4IkHpyMvhGz_OblILUXxz8lyscAmaiJiVjJR_lyY5AinqPk0Jqy8YLPYOIxo/s1676/ai-guider.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" width="320" data-original-height="831" data-original-width="1676" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghjg_9QusVxVIAi45OkkyhXcj1gv5M0zqnzmmJl8OpH2XbDxeeYsLmbP91KYI8BdG-lgAbgcrkj8YJ7SpnibjH6IDQFTyka3OvCmfDLuBD0EzX3Fv_vcAGSHpzlN8T07k4IkHpyMvhGz_OblILUXxz8lyscAmaiJiVjJR_lyY5AinqPk0Jqy8YLPYOIxo/s320/ai-guider.png"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The assistant adds a &lt;i&gt;&lt;a target="_blank" href="https://invent.kde.org/education/kstars/-/blob/master/kstars/ekos/guide/offlinetrainer/AI_ARCHITECTURE.md?ref_type=heads"&gt;feed forward predictive layer&lt;/a&gt;&lt;/i&gt; on top of Ekos's existing proportional guiding controller. A one time characterization wizard runs a system identification pass on your mount, and the resulting data trains a small model specific to your mount class (worm gear, harmonic drive, or direct drive). During guiding, a confidence gated controller blends the AI's predicted corrections with the classic proportional fallback, so the system defers to the proven controller whenever its own confidence is low. It runs entirely on device with no cloud dependency and no GPU requirement, does not need retraining every session, and deliberately does not attempt to predict stochastic noise sources like atmospheric seeing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI Guide protocol separated from the wizard UI for better modularity&lt;/li&gt;
&lt;li&gt;Fixed filter models and reworked the system identification protocol and trainer&lt;/li&gt;
&lt;li&gt;Wizard navigation fixed when closing and reopening; export now only includes the latest session logs&lt;/li&gt;
&lt;li&gt;Added button to read offline training instructions directly from the wizard&lt;/li&gt;
&lt;li&gt;Oscillator improvements for better stability during training&lt;/li&gt;
&lt;li&gt;Fixed the fingerprint builder to correctly validate model compatibility across sessions&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="alert alert-warning"&gt;The AI Assisted Guider is still in experimental stage. Help us by &lt;a target="_blank" href="https://indilib.org/forum/development/15990-testing-experimental-ai-guider.html#107743"&gt;sharing your feedback&lt;/a&gt; and exporting logs to us to analyze.&lt;/p&gt;
&lt;h2&gt;Guide&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Andreas R.&lt;/b&gt; landed a run of guiding fixes this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed streaming guide mode calibration failures on fast and harmonic mounts. The pulse guard is no longer armed during calibration, preventing "Lost track of the guide star" aborts that starved the AI Guider's system identification run&lt;/li&gt;
&lt;li&gt;Fixed dark guiding (GPG and AI feed forward) in streaming mode by distinguishing between frame prediction pulses from real correction pulses, so the measurement loop no longer starves at the 0.5 s dark interval&lt;/li&gt;
&lt;li&gt;Fixed the AI feed forward block reading declination from FITS headers. OBJCTDEC is a sexagesimal string, but the code was calling &lt;code&gt;toDouble()&lt;/code&gt;, so declination silently stayed 0.0 on every frame. Now reads altitude, declination, and pier side directly from the mount object instead of headers&lt;/li&gt;
&lt;li&gt;Added per optical train persistence for Predictive Guiding (GPG) period length, so users switching between worm gear and harmonic drive mounts on the same machine no longer clobber each other's tuned period values&lt;/li&gt;
&lt;li&gt;Fixed the GPG circular buffer losing insertion order after 8192 samples. The read offset (start) was never advanced when the buffer filled, corrupting the chronological sequence and breaking the Gaussian Process training after roughly 68 to 82 minutes of continuous guiding at short exposures&lt;/li&gt;
&lt;li&gt;Fixed guide camera binning not restored from optical train settings on Ekos startup with real hardware. The combo box was empty when &lt;code&gt;setAllSettings()&lt;/code&gt; ran, so the saved binning was silently dropped. Also fixed a false "not supported" detection that compared against the driver's current binning instead of its maximum&lt;/li&gt;
&lt;li&gt;Added an "Assume DEC orthogonal to RA" calibration option, which bypasses independent DEC angle measurement when periodic error or backlash causes erratic DEC calibration datapoints, deriving the guide angle solely from the RA axis with DEC forced to a 90 degree offset&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Rotator&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed rotator auto reverse detection and added direction parity correction. The wrong direction detector never fired because the PA error tracker was unconditionally cleared before the confirming solve could check it. Now detects reversed rotation, trials the parity flag, recalibrates the offset immediately, and persists the correction only once a retry confirms it worked&lt;/li&gt;
&lt;li&gt;Renamed internal flag to &lt;code&gt;m_RotatorParityRetried&lt;/code&gt; to avoid confusion with the rotator's own driver level reverse functionality&lt;/li&gt;
&lt;li&gt;Exposed the learned parity as a "Rotator direction reversed" checkbox in Align settings (below Flip Policy), so it can also be set manually without touching the driver's ROTATOR_REVERSE switch&lt;/li&gt;
&lt;li&gt;Clear previousPAError when rotator times out or fails, preventing false positive auto reverse triggers&lt;/li&gt;
&lt;li&gt;Fixed false positive rotator wrong direction detection by resetting &lt;code&gt;m_PreviousPAError&lt;/code&gt; at key state transitions (successful rotation, mount slew, PA error decrease)&lt;/li&gt;
&lt;li&gt;Rotator motion commands are now only sent when necessary, reducing unnecessary chatter&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Camera &amp;amp; Capture&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Added simple option for camera warmup instead of requiring users to create a task action for it, so camera sensors can now pre warm before a session starts&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Andreas R.&lt;/b&gt; fixed the filter combo not reflecting the selected job in the Sequence Editor. In standalone mode, filter name lookup always returned -1 because &lt;code&gt;filterLabels()&lt;/code&gt; returned an empty list without an INDI connection. Now resolves by name against the combo box contents&lt;/li&gt;
&lt;li&gt;Auto default remote directory based on frame type in the capture module: %h/Videos for Video frame type, %h/Pictures otherwise, whenever the field is empty or still holds a previously auto generated %h path&lt;/li&gt;
&lt;li&gt;Fixed an issue where video frame type selections didn't properly disable preview and loop, and set remote directory to a sane value so INDI can successfully write the video file&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Scheduler &amp;amp; Observatory Automation&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Andreas R.&lt;/b&gt; contributed two fixes here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added a wall clock timeout to the guiding stage (reusing the existing CaptureOperationsTimeout setting, default 300s) to prevent infinite retry loops when PHD2 fails to find a guide star, preventing wasted nights on a single target&lt;/li&gt;
&lt;li&gt;Cached .esq file content to eliminate O(N) disk I/O per evaluation cycle. With 80 jobs on a Raspberry Pi, the greedy scheduler was spending 9 to 10 minutes of pure overhead re reading and parsing XML files from the SD card per cycle. The cache is keyed by file path and modification time; XML is still re parsed per call but disk I/O is eliminated&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Hy Murveit&lt;/b&gt; sped up loading large .esl files by not repeatedly calling &lt;code&gt;currentPositionChanged&lt;/code&gt;. A 100 job file now loads in a second or two instead of 40 seconds.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Wolfgang Reissenberger&lt;/b&gt; made two scheduler improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replaced stderr output with debug log output in the scheduler for cleaner diagnostics&lt;/li&gt;
&lt;li&gt;Changed doubled sequence validation to only emit a warning instead of blocking, allowing setups with multiple cameras to use the same sequence on different targets&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Alignment &amp;amp; Mount Modeler&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Christian Kemper&lt;/b&gt; fixed two solver related issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed solver algorithm selection based on available hints, so constrained plate solves now run faster than blind solves on multi core machines. The &lt;code&gt;patchMultiAlgorithm()&lt;/code&gt; logic now selects MULTI_DEPTHS when a position hint is present and the scale window is narrow enough, MULTI_SCALES otherwise. The 1 Default align profile is now created with sensible bounds so fresh installs benefit immediately&lt;/li&gt;
&lt;li&gt;Fixed scale bounds being double widened. &lt;code&gt;Align::startSolving()&lt;/code&gt; and &lt;code&gt;PolarAlignmentAssistant::startSolver()&lt;/code&gt; were applying their own 0.8x/1.2x margin on top of the same widening in &lt;code&gt;SolverUtils::prepareSolver()&lt;/code&gt;, producing a net [low × 0.64, high × 1.44] window instead of the intended [low × 0.8, high × 1.2]&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Fixed several Sentry and user reported crashes on camera timeout and restart drivers; Focus, Align, and Capture now have consistent timeout behavior&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Salman Naheed&lt;/b&gt; added mount model commands for programmatic access&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Andreas R.&lt;/b&gt; fixed filter not being reset to Sequence Job filter post meridian flip if the filter was different in Align&lt;/li&gt;
&lt;li&gt;Process JSON alignment data from INDI mounts for improved integration&lt;/li&gt;
&lt;li&gt;When running plate solving manually, reset target position angle and previous PA error, since otherwise they remain forever until successful or another load and slew is called&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;FITS Viewer &amp;amp; File Handling&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed unwarranted 180 degree rotation when pier side differs from the FITS file used for Load and Slew&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Andreas R.&lt;/b&gt; fixed the Statistics panel showing full image stats when ROI is active. When a new image loaded while the selection rectangle was active, the panel reverted to full image statistics and users had to "jiggle" the box to refresh. Now checks whether the selection rect is shown and recalculates the ROI buffer from the new image data automatically&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Christian Kemper&lt;/b&gt; fixed a CFITSIO_LIBRARIES typo that was dropping cfitsio from the link line. The variable name was missing the trailing S, silently overwriting the library and causing undefined references at link time for targets that depend only on Qt::Core and cfitsio&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Focus&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;b&gt;Tilt Correction Advisory to the Aberration Inspector&lt;/b&gt;, which computes and displays suggested tilt plate adjustments after autofocus with a mosaic mask. Supports 3 point plates (ETA, Octopi, manual 3 screw) and 4 point plates (TouTek style corner screws). Includes a rear view diagram with color coded points, mode toggle (Relative or Push only), thread presets (M2.5 to M6, Wanderer ETA, Custom), camera rotation dial, and an "Apply to ETA" button that sends corrections directly to Wanderer ETA M54 via INDI&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="separator" style="clear: both;"&gt;&lt;a target="_blank" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLyBiJ7GTwxW0CbeEFnmz-pQd1aiEE4KcKRe43LJnc9WWLtQwEN9_AdDirmXfime4ysB78k_mQm0o3pkPqYBwpvSj8q3WrYS9hetM1riDuEpJgdbLBGIIcemZ6JLmumLpW0lgt61QLirkgx1TJ9yNQy2UJkChKbnhG4et5OylpHui84oZyHPX59b6IFNw/s2387/title-inspector.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" width="320" data-original-height="1279" data-original-width="2387" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLyBiJ7GTwxW0CbeEFnmz-pQd1aiEE4KcKRe43LJnc9WWLtQwEN9_AdDirmXfime4ysB78k_mQm0o3pkPqYBwpvSj8q3WrYS9hetM1riDuEpJgdbLBGIIcemZ6JLmumLpW0lgt61QLirkgx1TJ9yNQy2UJkChKbnhG4et5OylpHui84oZyHPX59b6IFNw/s320/title-inspector.png"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Thomas Nemer&lt;/b&gt; fixed two focus related bugs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed &lt;code&gt;Focus::autoFocusLinear&lt;/code&gt; and &lt;code&gt;scanStartPos&lt;/code&gt; passing measure as weight. Two callsites passed &lt;code&gt;getLastMeasure()&lt;/code&gt; into a weight slot instead of &lt;code&gt;getLastWeight()&lt;/code&gt;, corrupting the V curve fit and the weights exposed via Focus Advisor&lt;/li&gt;
&lt;li&gt;Fixed &lt;code&gt;Focus::focusOut&lt;/code&gt; ignoring caller supplied step count. A duplicate assignment was unconditionally overwriting any explicit value, so &lt;code&gt;focusOut(100)&lt;/code&gt; always moved by the UI default&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;MCP Server (Remote Control)&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Thomas Nemer&lt;/b&gt; established the &lt;a target="_blank" href="https://kstars-docs.kde.org/en/user_manual/ekos-mcp.html"&gt;MCP server&lt;/a&gt; foundation, an in process MCP server inside Ekos that lets external clients drive KStars over JSON RPC 2.0 over HTTP, with bearer token auth and an optional read only token. It includes transport, tool registry, server orchestrator, settings UI, and comprehensive unit tests. His additional work this release includes:&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="r1yZmvjBye4" width="320" height="266" src="https://www.youtube.com/embed/r1yZmvjBye4"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;MCP mount control tool family (12 tools: coords, goto, goto_target, sync, park/unpark, abort, set_tracking, set_track_mode, set_slew_rate, get_slew_rates, set_meridian_flip)&lt;/li&gt;
&lt;li&gt;MCP catalog search tool, which resolves fuzzy or user supplied names ("M42", "andromeda", "polaris") into canonical KStars names for use with mount_goto_target&lt;/li&gt;
&lt;li&gt;Focuser tool family (status, move_absolute, move_relative, abort_move) with a shared device lookup helper&lt;/li&gt;
&lt;li&gt;Image access tool family (image_last_info, image_last_thumbnail) with per camera frame cache&lt;/li&gt;
&lt;li&gt;"Available tools" panel in MCP settings, so operators can see which tools are exposed, what each does, and enable or disable individual tools or entire families via checkboxes&lt;/li&gt;
&lt;li&gt;Unit tests isolated from the real token keychain, so the test suite no longer clobbers the developer's stored MCP credentials&lt;/li&gt;
&lt;li&gt;Silenced Wmissing field initializers warnings in tool registrations&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Stability &amp;amp; Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Ilia Belov&lt;/b&gt; fixed a crash when a stale EkosLive dialog response arrives after the dialog was dismissed. &lt;code&gt;KSMessageBox&lt;/code&gt; is a reused singleton, and buttons of a dismissed dialog stayed as its children; a remote response sent after dismissal clicked a stale button and crashed KStars with SIGSEGV&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Andreas R.&lt;/b&gt; fixed missing i18n and null check crashes in BuildFilterOffsets: button labels, tooltips, and status text were untranslatable, and several methods accessed &lt;code&gt;m_BFOModel.item()&lt;/code&gt; without null checks&lt;/li&gt;
&lt;li&gt;Fixed a crash when building offsets by using showDialog properly&lt;/li&gt;
&lt;li&gt;Made Build Filter Offsets accessible programmatically and via EkosLive&lt;/li&gt;
&lt;li&gt;Set proper unique object names for both Filter Manager and Build Filter Offsets&lt;/li&gt;
&lt;li&gt;Fixed an issue where combo boxes in global config were not getting saved; only write the combo's index when it is populated and has a valid selection&lt;/li&gt;
&lt;li&gt;Fixed -1 corrupting persisted combo settings before device connects. Several combos (guide/CCD binning) are only populated once a device connects, so &lt;code&gt;currentIndex()&lt;/code&gt; returned -1 and overwrote the saved option&lt;/li&gt;
&lt;li&gt;Suppress pulses from reaching the mount when disabled&lt;/li&gt;
&lt;li&gt;Mark state as aborted if user explicitly cancels the dialog&lt;/li&gt;
&lt;li&gt;Shut the profile down instead of indefinitely waiting when &lt;code&gt;checkINDITimeout&lt;/code&gt; fires&lt;/li&gt;
&lt;li&gt;Correctly wait for remote drivers and add contribution of all sequence files&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Build &amp;amp; Infrastructure&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Attempt to make Flatpak arm64 builds use only 4 cores to work around OOM errors&lt;/li&gt;
&lt;li&gt;Limit Eigen to 4 CPU cores so it can build on the arm64 Flatpak CI runner&lt;/li&gt;
&lt;li&gt;Do not build testing, demos, docs, or Fortran in Eigen&lt;/li&gt;
&lt;li&gt;KStars now compiles with OpenCV 5&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Scarlett Moore&lt;/b&gt; added cmake root path env for Snapcraft&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Other Improvements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Extended filter offsets maximum range to 1 million per user request&lt;/li&gt;
&lt;li&gt;Added a script to generate indidrivers.xml&lt;/li&gt;
&lt;li&gt;Fixed wizard state transition when stopped&lt;/li&gt;
&lt;li&gt;Offset is now updated after each solve, with more logging to diagnose future issues&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Guilherme Marçal Silva&lt;/b&gt; updated the kstars.notifyrc file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Christian Kemper&lt;/b&gt; made three additional fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added KSPaths bundle Resources/kstars/ search on macOS, so data files are now found directly in the app bundle&lt;/li&gt;
&lt;li&gt;Corrected DST rule for countries that abolished daylight saving in citydb&lt;/li&gt;
&lt;li&gt;Normalized the country column in citydb to ISO 3166 1 alpha 2 codes&lt;/li&gt;
&lt;li&gt;Replaced the binary citydb.sqlite with a source built TSV format; the database is now generated at build time&lt;/li&gt;
&lt;/ul&gt;</description><author>Jasem Mutlaq</author></item><item><title>About time…</title><link>https://nuno-icons.com/2026/08/08/about-time/</link><pubDate>Sat, 08 Aug 2026 18:34:37 +0000</pubDate><guid isPermaLink="true">https://nuno-icons.com/?p=304</guid><description>&lt;div pagelayer-id="aqg2293" class="p-aqg2293 pagelayer-post_props"&gt;
&lt;/div&gt;
&lt;div pagelayer-id="enb7538" class="p-enb7538 pagelayer-row pagelayer-row-stretch-auto pagelayer-height-default"&gt;
&lt;div class="pagelayer-row-holder pagelayer-row pagelayer-auto pagelayer-width-auto"&gt;
&lt;div pagelayer-id="2rp9708" class="p-2rp9708 pagelayer-col"&gt;
&lt;div class="pagelayer-col-holder"&gt;
&lt;p class="wp-block-paragraph"&gt;Another missing Oxygen icon, this time KTimer.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;The idea was simple enough… its a timer, lets make a digital watch. And having grown up in the 80's my brain obviously went directly to those old Casio watches we all had, wanted, lost, or somehow managed to keep alive for 20 years &lt;img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt;&lt;/p&gt;
&lt;div class="wp-block-group"&gt;&lt;div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained"&gt;
&lt;figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex"&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img fetchpriority="high" decoding="async" width="1002" height="957" data-id="317" src="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file.jpg" alt="" class="wp-image-317" srcset="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file.jpg 1002w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-300x287.jpg 300w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-768x734.jpg 768w" sizes="(max-width: 1002px) 100vw, 1002px" /&gt;&lt;/figure&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="1024" height="838" data-id="314" src="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-1-1024x838.jpg" alt="" class="wp-image-314" srcset="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-1-1024x838.jpg 1024w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-1-300x245.jpg 300w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-1-768x628.jpg 768w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-1.jpg 1122w" sizes="(max-width: 1024px) 100vw, 1024px" /&gt;&lt;/figure&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="1024" height="829" data-id="313" src="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-2-1024x829.jpg" alt="" class="wp-image-313" srcset="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-2-1024x829.jpg 1024w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-2-300x243.jpg 300w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-2-768x621.jpg 768w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-2.jpg 1263w" sizes="(max-width: 1024px) 100vw, 1024px" /&gt;&lt;/figure&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img loading="lazy" decoding="async" width="956" height="923" data-id="312" src="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-3.jpg" alt="" class="wp-image-312" srcset="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-3.jpg 956w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-3-300x290.jpg 300w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-3-768x741.jpg 768w" sizes="auto, (max-width: 956px) 100vw, 956px" /&gt;&lt;/figure&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img loading="lazy" decoding="async" width="956" height="923" data-id="316" src="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-4.jpg" alt="" class="wp-image-316" srcset="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-4.jpg 956w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-4-300x290.jpg 300w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-4-768x741.jpg 768w" sizes="auto, (max-width: 956px) 100vw, 956px" /&gt;&lt;/figure&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img loading="lazy" decoding="async" width="1024" height="1015" data-id="315" src="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-5-1024x1015.jpg" alt="" class="wp-image-315" srcset="https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-5-1024x1015.jpg 1024w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-5-300x297.jpg 300w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-5-150x150.jpg 150w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-5-768x761.jpg 768w, https://nuno-icons.com/wp-content/uploads/2026/08/pasted-file-5.jpg 1081w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/figure&gt;
&lt;figure class="wp-block-image size-full"&gt;&lt;img loading="lazy" decoding="async" width="1024" height="1024" data-id="326" src="https://nuno-icons.com/wp-content/uploads/2026/08/ktimer.png" alt="" class="wp-image-326" srcset="https://nuno-icons.com/wp-content/uploads/2026/08/ktimer.png 1024w, https://nuno-icons.com/wp-content/uploads/2026/08/ktimer-300x300.png 300w, https://nuno-icons.com/wp-content/uploads/2026/08/ktimer-150x150.png 150w, https://nuno-icons.com/wp-content/uploads/2026/08/ktimer-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/figure&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p class="wp-block-paragraph"&gt;So I started with a very basic shape, mostly trying to get the proportions right, and from there it slowly became more and more of a actual object. The side buttons appeared, the LCD got some depth, the case became more angular, and I spent a frankly unreasonable amount of time trying to make the brushed steel look like brushed steel.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Then came the fun part… all the little useless details.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;The light and alarm symbols, the not days of the week but rather running timers &lt;img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt; , the branding and of course the very prestigious "kool desktop environment 2026" written across the top. Absolutely essential information at 64 pixels &lt;img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;The last bit was adding the gear/play element so it reads as KTimer and not simply as the KASIO &lt;img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt; watch I apparently wanted when I was 12.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;And thats pretty much how these things happen… start with a rectangle, add a few details, remove some, add way too many again, move things around for far too long and eventually decide its an icon.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;A k &lt;strong&gt;Time&lt;/strong&gt; well spent… probably. &lt;img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Progress on the icon side is coming along nicely. &lt;br&gt;BTW me and Filip are gona do a presentations together in aKdemy about Oxygen, if you are planing on attending (you should), you know were to find us &lt;img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt;&lt;br&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div pagelayer-id="z1q7174" class="p-z1q7174 pagelayer-row pagelayer-row-stretch-auto pagelayer-height-default"&gt;
&lt;div class="pagelayer-row-holder pagelayer-row pagelayer-auto pagelayer-width-auto"&gt;
&lt;div pagelayer-id="nrk8457" class="p-nrk8457 pagelayer-col"&gt;
&lt;div class="pagelayer-col-holder"&gt;
&lt;div class="wp-block-comments"&gt;&lt;h2 id="comments" class="wp-block-comments-title"&gt;3 respostas a &amp;#8220;About time…&amp;#8221;&lt;/h2&gt;
&lt;ol class="wp-block-comment-template"&gt;&lt;li id="comment-257" class="comment odd alt thread-even depth-1"&gt;
&lt;div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex"&gt;
&lt;div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:40px"&gt;&lt;div class="wp-block-avatar"&gt;&lt;img alt='Avatar de Nathan' src='https://secure.gravatar.com/avatar/af411aa11905fc42f22048dceccba2f3a570fdf9b81d1f287d37ff6304e64cbe?s=40&amp;#038;d=mm&amp;#038;r=g' srcset='https://secure.gravatar.com/avatar/af411aa11905fc42f22048dceccba2f3a570fdf9b81d1f287d37ff6304e64cbe?s=80&amp;#038;d=mm&amp;#038;r=g 2x' class='avatar avatar-40 photo wp-block-avatar__image' height='40' width='40' style="border-radius:20px;"/&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"&gt;&lt;div class="wp-block-comment-author-name has-small-font-size"&gt;&lt;a rel="external nofollow ugc" target="_blank" href="https://nathanupchurch.com" target="_self" &gt;Nathan&lt;/a&gt;&lt;/div&gt;
&lt;div class="wp-block-group is-layout-flex wp-block-group-is-layout-flex" style="margin-top:0px;margin-bottom:0px"&gt;&lt;div class="wp-block-comment-date has-small-font-size"&gt;&lt;time datetime="2026-08-10T21:43:19+00:00"&gt;&lt;a target="_blank" href="https://nuno-icons.com/2026/08/08/about-time/#comment-257"&gt;Agosto 10, 2026&lt;/a&gt;&lt;/time&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="wp-block-comment-content"&gt;&lt;p&gt;I love it. Great work!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="wp-block-comment-reply-link has-small-font-size"&gt;&lt;a rel="nofollow" class="comment-reply-link" target="_blank" href="https://nuno-icons.com/2026/08/08/about-time/?replytocom=257#respond" data-commentid="257" data-postid="304" data-belowelement="comment-257" data-respondelement="respond" data-replyto="Responder a Nathan" aria-label="Responder a Nathan"&gt;Responder&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;&lt;li id="comment-258" class="comment even thread-odd thread-alt depth-1"&gt;
&lt;div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex"&gt;
&lt;div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:40px"&gt;&lt;div class="wp-block-avatar"&gt;&lt;img alt='Avatar de Mr. Sir' src='https://secure.gravatar.com/avatar/9315c61011e1f2528a85d33790683ec1828720b535dfd0e4d5ff53fbfe645c50?s=40&amp;#038;d=mm&amp;#038;r=g' srcset='https://secure.gravatar.com/avatar/9315c61011e1f2528a85d33790683ec1828720b535dfd0e4d5ff53fbfe645c50?s=80&amp;#038;d=mm&amp;#038;r=g 2x' class='avatar avatar-40 photo wp-block-avatar__image' height='40' width='40' style="border-radius:20px;"/&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"&gt;&lt;div class="wp-block-comment-author-name has-small-font-size"&gt;Mr. Sir&lt;/div&gt;
&lt;div class="wp-block-group is-layout-flex wp-block-group-is-layout-flex" style="margin-top:0px;margin-bottom:0px"&gt;&lt;div class="wp-block-comment-date has-small-font-size"&gt;&lt;time datetime="2026-08-11T04:53:15+00:00"&gt;&lt;a target="_blank" href="https://nuno-icons.com/2026/08/08/about-time/#comment-258"&gt;Agosto 11, 2026&lt;/a&gt;&lt;/time&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="wp-block-comment-content"&gt;&lt;p&gt;so detailed. youre like the michelangelo of skeuomorphism&lt;/p&gt;
&lt;/div&gt;
&lt;div class="wp-block-comment-reply-link has-small-font-size"&gt;&lt;a rel="nofollow" class="comment-reply-link" target="_blank" href="https://nuno-icons.com/2026/08/08/about-time/?replytocom=258#respond" data-commentid="258" data-postid="304" data-belowelement="comment-258" data-respondelement="respond" data-replyto="Responder a Mr. Sir" aria-label="Responder a Mr. Sir"&gt;Responder&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol&gt;&lt;li id="comment-259" class="comment byuser comment-author-nunokdab-com bypostauthor odd alt depth-2"&gt;
&lt;div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex"&gt;
&lt;div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:40px"&gt;&lt;div class="wp-block-avatar"&gt;&lt;img alt='Avatar de nuno pinheiro' src='https://secure.gravatar.com/avatar/0d7a646af69b758652a25d8dc81ab9f5e5dd735938c2a26c58b0227e93439075?s=40&amp;#038;d=mm&amp;#038;r=g' srcset='https://secure.gravatar.com/avatar/0d7a646af69b758652a25d8dc81ab9f5e5dd735938c2a26c58b0227e93439075?s=80&amp;#038;d=mm&amp;#038;r=g 2x' class='avatar avatar-40 photo wp-block-avatar__image' height='40' width='40' style="border-radius:20px;"/&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"&gt;&lt;div class="wp-block-comment-author-name has-small-font-size"&gt;&lt;a rel="external nofollow ugc" target="_blank" href="https://nuno-icons.com" target="_self" &gt;nuno pinheiro&lt;/a&gt;&lt;/div&gt;
&lt;div class="wp-block-group is-layout-flex wp-block-group-is-layout-flex" style="margin-top:0px;margin-bottom:0px"&gt;&lt;div class="wp-block-comment-date has-small-font-size"&gt;&lt;time datetime="2026-08-11T05:38:16+00:00"&gt;&lt;a target="_blank" href="https://nuno-icons.com/2026/08/08/about-time/#comment-259"&gt;Agosto 11, 2026&lt;/a&gt;&lt;/time&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="wp-block-comment-content"&gt;&lt;p&gt;Thanks, I really don&amp;#8217;t care much about labels, my goal is more, are they fun and make you feal something? Do they describe the function? Do they look as smart as the app? Do they look like we care about the user experience???&lt;/p&gt;
&lt;/div&gt;
&lt;div class="wp-block-comment-reply-link has-small-font-size"&gt;&lt;a rel="nofollow" class="comment-reply-link" target="_blank" href="https://nuno-icons.com/2026/08/08/about-time/?replytocom=259#respond" data-commentid="259" data-postid="304" data-belowelement="comment-259" data-respondelement="respond" data-replyto="Responder a nuno pinheiro" aria-label="Responder a nuno pinheiro"&gt;Responder&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;div id="respond" class="comment-respond wp-block-post-comments-form"&gt;
&lt;h3 id="reply-title" class="comment-reply-title"&gt;Deixe um comentário &lt;small&gt;&lt;a rel="nofollow" id="cancel-comment-reply-link" href="//nuno-icons.com/feed/#respond" style="display:none;"&gt;Cancelar resposta&lt;/a&gt;&lt;/small&gt;&lt;/h3&gt;&lt;form action="https://nuno-icons.com/wp-comments-post.php" method="post" id="commentform" class="comment-form"&gt;&lt;p class="comment-notes"&gt;&lt;span id="email-notes"&gt;O seu endereço de email não será publicado.&lt;/span&gt; &lt;span class="required-field-message"&gt;Campos obrigatórios marcados com &lt;span class="required"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="comment-form-comment"&gt;&lt;label for="comment"&gt;Comentário &lt;span class="required"&gt;*&lt;/span&gt;&lt;/label&gt; &lt;textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required&gt;&lt;/textarea&gt;&lt;/p&gt;&lt;p class="comment-form-author"&gt;&lt;label for="author"&gt;Nome &lt;span class="required"&gt;*&lt;/span&gt;&lt;/label&gt; &lt;input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /&gt;&lt;/p&gt;
&lt;p class="comment-form-email"&gt;&lt;label for="email"&gt;Email &lt;span class="required"&gt;*&lt;/span&gt;&lt;/label&gt; &lt;input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /&gt;&lt;/p&gt;
&lt;p class="comment-form-url"&gt;&lt;label for="url"&gt;Site&lt;/label&gt; &lt;input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /&gt;&lt;/p&gt;
&lt;p class="comment-form-cookies-consent"&gt;&lt;input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /&gt; &lt;label for="wp-comment-cookies-consent"&gt;Guardar o meu nome, email e site neste navegador para a próxima vez que eu comentar.&lt;/label&gt;&lt;/p&gt;
&lt;p class="form-submit"&gt;&lt;input name="submit" type="submit" id="submit" class="submit" value="Publicar comentário" /&gt; &lt;input type='hidden' name='comment_post_ID' value='304' id='comment_post_ID' /&gt;
&lt;input type='hidden' name='comment_parent' id='comment_parent' value='0' /&gt;
&lt;/p&gt;&lt;p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"&gt;&lt;label&gt;&amp;#916;&lt;textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"&gt;&lt;/textarea&gt;&lt;/label&gt;&lt;input type="hidden" id="ak_js_4" name="ak_js" value="133"/&gt;&lt;i&gt;A script element has been removed to ensure Planet works properly. Please find it in the original post.&lt;/i&gt;
&lt;/p&gt;&lt;/form&gt; &lt;/div&gt;&lt;!-- #respond --&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;</description><author>Nuno Pinheiro</author></item><item><title>Reworking KSSHAskPass</title><link>https://blog.broulik.de/2026/08/reworking-ksshaskpass/</link><pubDate>Sat, 08 Aug 2026 06:53:04 +0000</pubDate><guid isPermaLink="true">https://blog.broulik.de/?p=2962</guid><description>&lt;p class="wp-block-paragraph"&gt;KDE has a little utility called &lt;em&gt;&lt;a target="_blank" href="https://invent.kde.org/plasma/ksshaskpass" data-type="link" data-id="https://invent.kde.org/plasma/ksshaskpass" target="_blank" rel="noreferrer noopener"&gt;ksshaskpass&lt;/a&gt;&lt;/em&gt; that is invoked by SSH to prompt the user for credentials. It can then store them in KDE Wallet so you don’t have to type them again next time. The other day I had to set up an elaborate SSH configuration with jump hosts and what not and found that it actually couldn’t handle some of the prompts I encountered along the way.&lt;/p&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;a target="_blank" href="https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161528.png"&gt;&lt;img fetchpriority="high" decoding="async" width="1024" height="636" src="https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161528-1024x636.png" alt="“SSH Credentials” prompt asking for “user@localhost’s password”" class="wp-image-2976" srcset="https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161528-1024x636.png 1024w, https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161528-300x186.png 300w, https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161528-768x477.png 768w, https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161528.png 1057w" sizes="(max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;figcaption class="wp-element-caption"&gt;A regular password prompt, nothing too fancy.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;span id="more-2962"&gt;&lt;/span&gt;
&lt;p class="wp-block-paragraph"&gt;The way an “SSH ask pass” program works is relatively simple: You point the &lt;em&gt;SSH_ASKPASS&lt;/em&gt; environment variable to it and whenever SSH needs credentials, it runs that program, passing the prompt (e.g. “user@host’s password:”) as command-line argument. The program brings up a dialog and/or reads the corresponding password from a database and prints it to &lt;em&gt;stdout&lt;/em&gt;. SSH then uses it to authenticate.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Unfortunately, the prompt is just a string, we don’t get any metadata for it. The only additional information we might get is the &lt;em&gt;SSH_ASKPASS_PROMPT&lt;/em&gt; variable set to “confirm” (bring up a confirmation dialog with no input field) or “none” (just show a dialog while it’s waiting for you to press a button on your FIDO dongle). Anything else is just an opaque string.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;In order to provide a good user experience we want to know what kind of input it is expecting and what the context of it is: is it asking for a user name (show input) or a password (show bullets)? What is the user and host name so we can store it in KDE Wallet properly? Should we allow storing those credentials in the first place? Maybe it is asking us to confirm the authenticity of the host we’re trying to connect to, and so on.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Before touching any of the existing regular expressions, I split the relevant code into a separate library so I could write unit tests for it. This ensures that I don’t break one use case by fixing or adding another. It’s quite easy to accidentally write a regular expression that’s too greedy.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;The first issue was the lack of support for the password prompt coming from PAM. Normally, SSH will ask for the password like “user@host’s password:” but a connection might instead require server-side authentication where the prompt is coming from the server directly, most likely from PAM, which then looks like “(user@host) Password:”. When I failed to reproduce the issue on my laptop running the latest git master build, I noticed that someone had recently added this specific use case. My tests actually uncovered a regression in this change (didn’t I just say it’s easy to mess up a regular expression?) which I fixed. That reinforced my decision to write some unit tests first. :-)&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Next, I noticed a few minor differences between the SSH versions used in Kubuntu 24.04 and 26.04, things like a period here, a colon there, so I added them as well. It now also supports the prompts issued by ssh-keygen, such as “Enter passphrase (empty for no passphrase):”.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;The biggest usability problem, however, was that when you chose to remember the password but you had a typo or it just changed in the meantime, you were effectively locked out. SSH would ask for the password and &lt;em&gt;ksshaskpass&lt;/em&gt; dutifully replied with the wrong answer. The only way to get around this was to open &lt;a target="_blank" href="https://apps.kde.org/keepsecret/" data-type="link" data-id="https://apps.kde.org/keepsecret/" target="_blank" rel="noreferrer noopener"&gt;KeepSecret&lt;/a&gt; (the successor to KWalletManager) and delete the corresponding entry. Yikes!&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;As I said before, there’s no metadata, we don’t know whether it’s a first time prompt or asking again after a failure. I therefore made &lt;em&gt;ksshaskpass&lt;/em&gt; remember the last prompt string and PID of the parent (likely SSH) process. When the same process asked for the same thing again, we now consider it failed, and bring up the dialog. If you have a better idea or I might have missed something, please tell me! It now also lets you remove stored credentials by unchecking the “Remember” check box. It also no longer shows that checkbox when we failed to identify the prompt string – the checkbox never worked in this case, so it was pointless to show it.&lt;/p&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;a target="_blank" href="https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161625-1.png"&gt;&lt;img decoding="async" width="1024" height="781" src="https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161625-1-1024x781.png" alt="“SSH Credentials” prompt asking for “Username for https://invent.kde.org”, the user name “konqi.konqueror” is filled in, “Remember” check box is unchecked" class="wp-image-2978" srcset="https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161625-1-1024x781.png 1024w, https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161625-1-300x229.png 300w, https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161625-1-768x586.png 768w, https://blog.broulik.de/wp-content/uploads/2026/08/Bildschirmfoto_20260807_161625-1.png 1053w" sizes="(max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;figcaption class="wp-element-caption"&gt;Type a user name and actually see it!&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p class="wp-block-paragraph"&gt;I then went through Bugzilla and was able to resolve a good chunk of the reports in there. The most high profile one was the fact that it used a password dialog when asking for a user name, i.e. the user name was not shown. The reason it used that dialog is to offer the “Remember” checkbox. However, hiding a user name is not very nice, is it? The common password dialog we use isn’t really designed to ask just for a user name without a password, so I instead implemented a custom dialog mimicking the look of the regular dialog.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;As often, it’s the little things, so I hope you will enjoy a better SSH experience in Plasma very soon. A few of the bug fixes I mentioned above have already been released as part of Plasma 6.7 with the larger changes expected to land in Plasma 6.8.&lt;/p&gt;</description><author>Kai Uwe Broulik</author></item><item><title>Week 9 &amp; 10: Speed Ramp Implementation, MR Opened</title><link>https://yashbavadiya.bearblog.dev/week-9-10-speed-ramp-implementation-mr-opened/</link><pubDate>Sat, 08 Aug 2026 00:57:52 +0000</pubDate><guid isPermaLink="true">https://yashbavadiya.bearblog.dev/week-9-10-speed-ramp-implementation-mr-opened/</guid><description>&lt;p&gt;This is a weekly update from my Google Summer of Code 2026 project with KDE, improving effect widgets in Kdenlive, a free and open source video editor. Combining two weeks here since the last post covered a lot of ground already.&lt;/p&gt;
&lt;h2 id=from-research-to-implementation&gt;From research to implementation&lt;/h2&gt;&lt;p&gt;Following up from the last post, moved from investigating Speed Ramp to actually building it. The plan confirmed with Jean-Baptiste: reuse Kdenlive's existing keyframe type system rather than free bezier handles, and use &lt;code&gt;KeyframeCurveEditor&lt;/code&gt;'s per-pixel MLT sampling pattern as the reference for drawing the curve inside &lt;code&gt;RemapView&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=implementation&gt;Implementation&lt;/h2&gt;&lt;p&gt;Four commits, each built clean before the next:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added per-keyframe type storage (&lt;code&gt;m_keyframeTypes&lt;/code&gt;), keyed by output position alongside the existing keyframe map. Absent key means linear, so existing projects load unchanged with no migration step&lt;/li&gt;
&lt;li&gt;Switched serialization and parsing to MLT's own animation API (&lt;code&gt;anim_set&lt;/code&gt; with a keyframe type, then &lt;code&gt;serialize_cut&lt;/code&gt;), instead of hand-formatted strings, so the type suffix always lands on the correct keyframe&lt;/li&gt;
&lt;li&gt;Added the curve band itself: sampled per pixel from the parsed &lt;code&gt;time_map&lt;/code&gt; animation and drawn between the existing input and output rulers. What's drawn is exactly what MLT will play back, not an approximation&lt;/li&gt;
&lt;li&gt;Added a Type selector in the remap dialog, starting with a curated list (Linear, Smooth, Cubic In, Cubic Out)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Type&lt;/p&gt;
&lt;p&gt;&lt;img src="https://raw.githubusercontent.com/xevrion/gsoc-blog-images/main/speedramp-linear.png" alt="Type selector showing Linear" /&gt;&lt;/p&gt;
&lt;p&gt;Type&lt;/p&gt;
&lt;p&gt;&lt;img src="https://raw.githubusercontent.com/xevrion/gsoc-blog-images/main/speedramp-cubic-in.png" alt="Type selector showing Cubic In" /&gt;&lt;/p&gt;
&lt;p&gt;Keyframe types follow their keyframes through drags, clip resizes, and deletion, and are captured in undo/redo alongside keyframe positions.&lt;/p&gt;
&lt;h2 id=the-curated-list-and-why&gt;The curated list, and why&lt;/h2&gt;&lt;p&gt;The full MLT keyframe type list also includes Bounce, Elastic, Exponential, and Circular, all of which overshoot outside the 0..1 range. On a time map, an overshoot means source time briefly runs backward, so the clip plays in reverse for a few frames at the keyframe boundary. That could be a real effect some people want, or a confusing artifact for everyone else. Left it out of the curated list for now and flagged it as an open question in the MR rather than deciding alone.&lt;/p&gt;
&lt;h2 id=manually-verified&gt;Manually verified&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Existing projects with time remapping load with all keyframes linear, playback unchanged&lt;/li&gt;
&lt;li&gt;Setting a keyframe to Smooth, Cubic In, or Cubic Out changes the curve shape and is audible/visible in playback&lt;/li&gt;
&lt;li&gt;Undo/redo through type changes restores both type and curve correctly, no desync&lt;/li&gt;
&lt;li&gt;Types survive keyframe drags, clip resizes, and neighbor deletion&lt;/li&gt;
&lt;li&gt;Save/reload preserves types; linear-only projects round-trip without gaining type properties&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=mr-opened&gt;MR opened&lt;/h2&gt;&lt;p&gt;Opened &lt;a target="_blank" href='https://invent.kde.org/multimedia/kdenlive/-/merge_requests/928'&gt;MR !928&lt;/a&gt;, referencing &lt;a target="_blank" href='https://invent.kde.org/multimedia/kdenlive/-/work_items/2188'&gt;#2188&lt;/a&gt; and &lt;a target="_blank" href='https://invent.kde.org/multimedia/kdenlive/-/work_items/1454'&gt;#1454&lt;/a&gt;. Pipeline is running. No unit tests added this round since &lt;code&gt;RemapView&lt;/code&gt; holds state directly in the widget, not reachable from the existing test harness without splitting the storage out first, noted this directly in the MR rather than skipping silently.&lt;/p&gt;
&lt;h2 id=whats-next&gt;What's next&lt;/h2&gt;&lt;p&gt;Waiting on Jean-Baptiste's review, specifically his call on the curated type list question.&lt;/p&gt;</description><author>Yash Bavadiya</author></item><item><title>This Week in Plasma: UI Improvements Galore</title><link>https://blogs.kde.org/2026/08/08/this-week-in-plasma-ui-improvements-galore/</link><pubDate>Sat, 08 Aug 2026 00:00:01 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/08/this-week-in-plasma-ui-improvements-galore/</guid><description>&lt;!-- Example wording for a change, MR version. (Developer Name, [repo-name MR #xxx](https://invent.kde.org/plasma/repo-name/-/merge_requests/xxx)) --&gt;
&lt;!-- Example wording for a change, Bugzilla version. (Developer Name, [KDE Bugzilla #xxx](https://bugs.kde.org/show_bug.cgi?id=xxx)) --&gt;
&lt;!-- ![](thumbnail.png) --&gt;
&lt;!--
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
--&gt;
&lt;!--
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="%25!s%28%3cnil%3e%29something.mp4" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
--&gt;
&lt;p&gt;Welcome to a new issue of &lt;em&gt;This Week in Plasma!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This week we merged a number of features and UI changes that focus on user-friendliness — in addition to a nice crop of bug-fixes and performance improvements:&lt;/p&gt;
&lt;h2 id="notable-new-features"&gt;Notable new features&lt;/h2&gt;
&lt;!-- Can find some with https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Feature&amp;first_page_size=20 --&gt;
&lt;h3 id="plasma-68"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;If you try to print using a printer that’s unavailable, Plasma now helpfully notifies you of this instead of just doing nothing. (Mike Noe, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=362143"&gt;KDE Bugzilla #362143&lt;/a&gt;)&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Notification about the printer that just received a print job being unavailable" src="https://blogs.kde.org/2026/08/08/this-week-in-plasma-ui-improvements-galore/printer-unavailable-notification.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;h2 id="notable-ui-improvements"&gt;Notable UI improvements&lt;/h2&gt;
&lt;!-- Can find some with https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Enhancement&amp;first_page_size=20 --&gt;
&lt;h3 id="plasma-68-1"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;Task Manager thumbnails now feature nicer padding around the labels near the top. (Michal Malinowski, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3916"&gt;plasma-desktop MR #3916&lt;/a&gt;)&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Task Manager tooltip with better padding around the text" src="https://blogs.kde.org/2026/08/08/this-week-in-plasma-ui-improvements-galore/task-manager-tooltip-better-padding.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;p&gt;When creating a new user account, the restrictions around which characters are allowed for the username of the new account are now clearly indicated via warning messages if you try to use invalid ones. (Mradul Pal, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=521545"&gt;KDE Bugzilla #521545&lt;/a&gt;)&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Warning about character restrictions when typing the new user’s username" src="https://blogs.kde.org/2026/08/08/this-week-in-plasma-ui-improvements-galore/warning-about-character-restrictions.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;h3 id="kup-0110"&gt;Kup 0.11.0&lt;/h3&gt;
&lt;p&gt;Kup now offers an improved set of default exclusions, with a simplified way of toggling them on or off. This should result in much less data being backed up that doesn’t actually need to be backed up — like cache files, state files, Btrfs snapshots, and more. (Bharadwaj Raju, &lt;a target="_blank" href="https://invent.kde.org/system/kup/-/merge_requests/52"&gt;kup MR #52&lt;/a&gt;)&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="User-friendly list of comprehensibly-phrased exclusions for Kup-based backups" src="https://blogs.kde.org/2026/08/08/this-week-in-plasma-ui-improvements-galore/user-friendly-kup-exclusions.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;center&gt;This settings page is still a bit old and crusty. A visual refresh is also planned, JFYI!&lt;/center&gt;
&lt;h2 id="notable-bug-fixes"&gt;Notable bug fixes&lt;/h2&gt;
&lt;!--
Can find some with:
- HI and VHI bugs fixed: https://tinyurl.com/bdepnh4v
- All bugs fixed: https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Bugfix&amp;first_page_size=20
--&gt;
&lt;h3 id="plasma-667"&gt;Plasma 6.6.7&lt;/h3&gt;
&lt;p&gt;If the &lt;code&gt;xdg-desktop-portal-kde&lt;/code&gt; process crashes while it’s being used to allow an app to control the pointer and keyboard, control now instantly returns to you rather than getting stuck until the system is restarted. (Marcus Renheim, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523515"&gt;KDE Bugzilla #523515&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Using a panel’s “Floating Applets” feature no longer breaks the ability to drag files onto Task Manager representations of grouped tasks. (Antonio Rojas, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=510643"&gt;KDE Bugzilla #510643&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The Task Manager widget no longer lays out items incorrectly when you rearrange them while the widget is using right-to-left mode. (Christoph Wolk, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=504898"&gt;KDE Bugzilla #504898&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The “Identify Displays” feature no longer shows weird hexadecimal numbers in the labels for some screens. (David Wild and Marco Martin, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523181"&gt;KDE Bugzilla #523181&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9655"&gt;kwin MR #9655&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-674"&gt;Plasma 6.7.4&lt;/h3&gt;
&lt;p&gt;Fixed a UI glitch in the Disk Quota widget. (Nicolas Fella, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523618"&gt;KDE Bugzilla #523618&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-675"&gt;Plasma 6.7.5&lt;/h3&gt;
&lt;p&gt;Syncing your settings to Plasma Login Manager now includes the &lt;code&gt;~/.config/plasma-localerc&lt;/code&gt; file, which makes the login screen respect your preferred language and time settings. (Nate Graham, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=516964"&gt;KDE Bugzilla #516964&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed or implemented support for the “highlight changed settings” feature for multiple System Settings pages. (Tobias Ozór, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9675"&gt;kwin MR #9675&lt;/a&gt;, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=521974"&gt;KDE Bugzilla #521974&lt;/a&gt;, &lt;a target="_blank" href="https://invent.kde.org/plasma/powerdevil/-/merge_requests/660"&gt;powerdevil MR #660&lt;/a&gt;, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=521978"&gt;KDE Bugzilla #521978&lt;/a&gt;, and &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=469914"&gt;KDE Bugzilla #469914&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;System Settings’ Spell Checking page no longer erroneously prompts you to save unsaved changes when you navigate away from it without having made any changes. (Antti Savolainen, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=521712"&gt;KDE Bugzilla #521712&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The “OS Version” sensor in System Monitor widgets now works more reliably to handle KDE Linux and other non-traditional operating systems. (David Redondo, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523727"&gt;KDE Bugzilla #523727&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-68-2"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;Fixed a bug in Plasma’s built-in remote desktop server that could present certain clients with a black screen instead of the expected content. (Shouvik Kar, &lt;a target="_blank" href="https://invent.kde.org/plasma/krdp/-/merge_requests/222"&gt;krdp MR #222&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Switching between virtual desktops no longer makes the Window List Widget show the wrong window. (Marco Martin, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523409"&gt;KDE Bugzilla #523409&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Applet::Index()&lt;/code&gt; property in Plasma scripting now actually returns the correct index. (Marco Martin, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523675"&gt;KDE Bugzilla #523675&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="notable-in-performance--technical"&gt;Notable in performance &amp;amp; technical&lt;/h2&gt;
&lt;h3 id="plasma-68-3"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;Plasma’s built-in remote desktop server now exhibits less latency and better performance when using less-than-ideal network connections. (Shouvik Kar, &lt;a target="_blank" href="https://invent.kde.org/plasma/krdp/-/merge_requests/190"&gt;krdp MR #190&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Plasma now loads the clipboard pop-up on demand rather than at launch, which saves some memory. (Nicolas Fella, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6899"&gt;plasma-workspace MR #6899&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="how-you-can-help"&gt;How you can help&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Would you like to help put together this weekly report? Introduce yourself in &lt;a target="_blank" href="https://matrix.to/#/%23this-week-kde-apps:kde.org"&gt;the Matrix room&lt;/a&gt; and &lt;a target="_blank" href="https://community.kde.org/Promotion/This_week_in_KDE"&gt;join the team&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Beyond that, you can help KDE by directly &lt;a target="_blank" href="https://community.kde.org/Get_Involved"&gt;getting involved&lt;/a&gt; in any other projects. Donating time is actually more impactful than donating money. 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.&lt;/p&gt;
&lt;p&gt;You can also help out by &lt;a target="_blank" href="https://kde.org/donate"&gt;making a donation&lt;/a&gt;! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.&lt;/p&gt;
&lt;h2 id="to-get-a-new-plasma-feature-or-a-bug-fix-mentioned-here"&gt;To get a new Plasma feature or a bug fix mentioned here&lt;/h2&gt;
&lt;p&gt;Push a commit to &lt;a target="_blank" href="https://invent.kde.org/websites/blogs-kde-org/-/merge_requests/?label_name%5B%5D=This%20Week%20in%20Plasma"&gt;the relevant merge request on invent.kde.org&lt;/a&gt;.&lt;/p&gt;</description><author>Nate Graham</author></item><item><title>KDE Goals - Last Call For Submissions</title><link>https://blogs.kde.org/2026/08/07/kde-goals-last-call-for-submissions/</link><pubDate>Fri, 07 Aug 2026 13:17:00 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/07/kde-goals-last-call-for-submissions/</guid><description>&lt;figure&gt;
&lt;img class="img-fluid" alt="Last Call" src="https://blogs.kde.org/2026/08/07/kde-goals-last-call-for-submissions/last-call-img.png"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;h2 id="last-chance-to-submit-your-kde-goals-proposal"&gt;Last chance to submit your KDE Goals proposal&lt;/h2&gt;
&lt;p&gt;The call for submissions for the next KDE Goals cycle closes tomorrow, August 8.&lt;/p&gt;
&lt;p&gt;As of the time of writing we've received nineteen proposals, covering a variety of topics like enterprise, gaming, personal well-being, documentation, accessibility, semantic desktops, color management, design, user experience, mobile and more.&lt;/p&gt;
&lt;p&gt;Current proposals (by order of submission):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/2"&gt;Better documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/3"&gt;Design System for Plasma 1st-Party Styling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/4"&gt;Accessibility in KDE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/5"&gt;KDE for Enterprise and Deployments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/6"&gt;Give more love to little-loved but important KDE apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/8"&gt;KDE Linux — Pillar of KDE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/9"&gt;Sandbox all the things!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/12"&gt;Improve UX of customization and theming process with 3rd-party content&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/13"&gt;KDE Kares&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/14"&gt;Improve GUI configuration UX by expanding system settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/15"&gt;Gaming as a first-class workload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/17"&gt;Plasma: From Window Management to Workflow Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/18"&gt;Improve color management and HDR support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/19"&gt;Make Plasma smart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/20"&gt;Advanced configuration features hidden from GUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/21"&gt;Scripting and effect capabilities: Need for review in Get New Stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/22"&gt;Seamless Input Accessibility (Onscreen Keyboard, Emoji &amp;amp; Clipboard)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/23"&gt;Language/toolkit-agnostic development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/work_items/24"&gt;Prepare Plasma Mobile for Daily Drivability&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="join-in"&gt;Join in&lt;/h2&gt;
&lt;p&gt;If any of the proposals above spark your interest, then by all means join the effort as a co-champion or contributor. And if you don't feel inspired by any, then there is still time to submit your own and champion a new KDE Goal.&lt;/p&gt;
&lt;p&gt;Remember that you do not have to be a developer to participate. Read the &lt;a target="_blank" href="https://community.kde.org/Goals/Goals_Process"&gt;selection process&lt;/a&gt; carefully before you send your proposal. If you have any doubts, join our &lt;a target="_blank" href="https://matrix.to/#/%23goals:kde.org"&gt;Matrix room&lt;/a&gt; or create a topic at the &lt;a target="_blank" href="https://discuss.kde.org/c/community/5"&gt;KDE forum&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="whats-next"&gt;What's Next?&lt;/h3&gt;
&lt;p&gt;Once the submission period is over, we'll move into the &lt;strong&gt;refinement phase&lt;/strong&gt;, where champions and the community work together to polish their proposals and finalize them so they're elligible for voting.&lt;/p&gt;
&lt;h3 id="timeline"&gt;Timeline:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Call for submissions - June 19 to August 8&lt;/li&gt;
&lt;li&gt;Refinement of proposals - August 9 to August 27&lt;/li&gt;
&lt;li&gt;Voting period - August 28 to September 11&lt;/li&gt;
&lt;li&gt;Tallying &amp;amp; preparation - September 12 to September 18&lt;/li&gt;
&lt;li&gt;Announcement at &lt;a target="_blank" href="https://akademy.kde.org/2026/"&gt;Akademy&lt;/a&gt; - September 19&lt;/li&gt;
&lt;/ul&gt;</description><author>Farid Abdelnour</author></item><item><title>Web Review, Week 2026-32</title><link>https://ervin.ipsquad.net/blog/2026/08/07/web-review-week-2026-32/</link><pubDate>Fri, 07 Aug 2026 12:22:09 +0000</pubDate><guid isPermaLink="true">https://ervin.ipsquad.net/blog/2026/08/07/web-review-week-2026-32/</guid><description>&lt;p&gt;Alright, this will be the last review of the Summer. I&amp;rsquo;ll take a break until September as I really need to unplug for a bit. The next edition will be at the end of the first week of September. See you then!&lt;/p&gt;
&lt;p&gt;But first&amp;hellip; let&amp;rsquo;s go for my web review for the week 2026-32.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="kill-the-cookie-banner"&gt;Kill the Cookie Banner!&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, gdpr, web, europe, law&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This campaign is definitely worth a try. Hammering people with cookie banners exhibiting dark patterns isn&amp;rsquo;t exactly a good way to seek people consent.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://killthecookiebanner.eu/"&gt;https://killthecookiebanner.eu/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="stop-sending-me-your-errors"&gt;Stop Sending Me Your Errors&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, email&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Yes please! The amount of email system which get it wrong nowaday is really kind of sad.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://kramkow.ski/article/2026/08/05/stop_sending_me_your_errors.html"&gt;https://kramkow.ski/article/2026/08/05/stop_sending_me_your_errors.html&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="offensive-internet-posture"&gt;Offensive Internet Posture&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, internet, security, self-hosting&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Indeed, so many things to do to deter bottom feeders. Lots of good funny ideas in there.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://bruceediger.com/posts/offensive-machine/"&gt;https://bruceediger.com/posts/offensive-machine/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="atom-is-better-than-rss-in-ways-that-matter"&gt;Atom is better than RSS, in ways that matter&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, atom, rss, blog&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Indeed Atom is a better standard than RSS for feeds.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://chrismorgan.info/atom%3Erss"&gt;https://chrismorgan.info/atom%3Erss&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="the-distinct-in-your-count"&gt;The DISTINCT in your COUNT&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, databases, postgresql, performance, optimisation&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Careful how you use DISTINCT or ORDER BY on very large tables. You might want to reevaluate (after checking if there&amp;rsquo;s a problem of course).&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://boringsql.com/posts/distinct-in-your-count/"&gt;https://boringsql.com/posts/distinct-in-your-count/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="c26-embed"&gt;C++26: #embed&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, c++&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Another nice addition to the standard for dealing with embedded assets.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://www.sandordargo.com/blog/2026/08/05/cpp26-embed"&gt;https://www.sandordargo.com/blog/2026/08/05/cpp26-embed&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="crubit-crust-bidirectional-interop-tool"&gt;Crubit: C++/Rust Bidirectional Interop Tool&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, c++, rust, interoperability, bindings&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Interesting tool. Maybe more chances for C++ and Rust hybrids?&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://crubit.rs/"&gt;https://crubit.rs/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="rust-langrust-is-adopting-an-llm-policy"&gt;rust-lang/rust is adopting an LLM policy&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, ai, machine-learning, copilot, foss, codereview, rust&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Interesting policy. I think it strikes a good balance.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blog.rust-lang.org/inside-rust/2026/08/05/rust-langrust-is-adopting-an-llm-policy/"&gt;https://blog.rust-lang.org/inside-rust/2026/08/05/rust-langrust-is-adopting-an-llm-policy/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="a-guide-to-watchdog-timers-for-embedded-systems"&gt;A Guide to Watchdog Timers for Embedded Systems&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, embedded, reliability&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Long and nice guide about watchdogs in an embedded context.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://interrupt.memfault.com/blog/firmware-watchdog-best-practices"&gt;https://interrupt.memfault.com/blog/firmware-watchdog-best-practices&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="elevators"&gt;Elevators&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, algorithm, simulation, complexity&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Nice little post with simulations about the algorithms behind elevators. It&amp;rsquo;s quickly more complex than it sounds.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://john.fun/elevators"&gt;https://john.fun/elevators&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="the-wheels-we-keep-reinventing"&gt;The Wheels We Keep Reinventing&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, architecture, complexity, supply-chain, vendor-lockin&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There is truth here that our profession reinvents the wheel way to often. Some problem are solved, they don&amp;rsquo;t need reinventing. Be careful on your dependencies though, this is where lies the tradeoff.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blainsmith.com/articles/reinventing-the-wheel/"&gt;https://blainsmith.com/articles/reinventing-the-wheel/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="the-development-pipeline-is-a-production-system"&gt;The development pipeline is a production system&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, developer-experience, production&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And indeed that makes it as important as the final product.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://sundry.jerryorr.com/2026/07/31/development-pipeline-is-a-production-system"&gt;https://sundry.jerryorr.com/2026/07/31/development-pipeline-is-a-production-system&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="committing-to-creativity"&gt;Committing to creativity&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: creativity, motivation&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Interesting take. It&amp;rsquo;s indeed mostly about committing to something on the long term and doing the grunt work which begets creativity. It&amp;rsquo;s not just motivation between grit teeth or waiting to be blessed by a muse. Those won&amp;rsquo;t get you as far in your craft.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://herman.bearblog.dev/creativity/"&gt;https://herman.bearblog.dev/creativity/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;hr&gt;
&lt;p&gt;Bye for now!&lt;/p&gt;</description><author>Kevin Ottens</author></item><item><title>What's new with SAML support in Nextcloud</title><link>https://carlschwan.eu/2026/08/07/whats-new-with-saml-support-in-nextcloud/</link><pubDate>Fri, 07 Aug 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://carlschwan.eu/2026/08/07/whats-new-with-saml-support-in-nextcloud/</guid><description>&lt;p&gt;Several months ago, as part of my internal move to the &amp;ldquo;IdP&amp;rdquo; team at Nextcloud,
I started to co-maintain the user_saml application. This application allows
Nextcloud users to implement single sign on with the SAML and Kerberos
protocol. This protocol is based on XML and is mostly used in combination with
Active Directory Federation Services (AD FS), Microsoft Entra ID, Authentik, Okta,
Google Workspace and more.&lt;/p&gt;
&lt;h2 id="new-admin-settings"&gt;New Admin Settings&lt;/h2&gt;
&lt;p&gt;The most visible change for administrators is the new admin interface to configure
SAML. I completely rewrote it from a mix of PHP templates and jQuery to Vue3.
This allows the interface to make use of all the @nextcloud/vue UI components
and improve the user experience for admins who want to set up SAML on their
instance. The user interface is now also more similar to the OIDC integration.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;a target="_blank" href="https://carlschwan.eu/2026/08/07/whats-new-with-saml-support-in-nextcloud/settings-global.png" data-size="968x659"&gt;
&lt;img src="https://carlschwan.eu/2026/08/07/whats-new-with-saml-support-in-nextcloud/settings-global.png" width="968" height="659" loading="lazy"
alt="&amp;nbsp;"&gt;
&lt;/a&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;a target="_blank" href="https://carlschwan.eu/2026/08/07/whats-new-with-saml-support-in-nextcloud/settings.png" data-size="933x966"&gt;
&lt;img src="https://carlschwan.eu/2026/08/07/whats-new-with-saml-support-in-nextcloud/settings.png" width="933" height="966" loading="lazy"
alt="&amp;nbsp;"&gt;
&lt;/a&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id="nextcloud-login-form"&gt;Nextcloud Login Form&lt;/h2&gt;
&lt;p&gt;The SAML app provides its own login page and previously didn&amp;rsquo;t integrate at all
with the default one from Nextcloud. We had an interface &lt;code&gt;IAlternativeLogin&lt;/code&gt; to
expose one alternative login provider but it had to be static, this allowed,
for example, the registration application to expose one Registration
button, but wasn&amp;rsquo;t enough for applications exposing a variable number of login
providers like the user_saml and user_oidc do.&lt;/p&gt;
&lt;p&gt;Since Nextcloud 34, I added a new interface &lt;code&gt;IAlternativeLoginProvider&lt;/code&gt; which
applications can implement to expose zero or more &lt;code&gt;IAlternativeLogin&lt;/code&gt;
objects. The SAML and OIDC applications were both ported to use this interface.&lt;/p&gt;
&lt;p&gt;For the SAML application, switching to the default login form is still behind a
config flag which can be turned on in the admin settings, but this might change
in the future.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;a target="_blank" href="https://carlschwan.eu/2026/08/07/whats-new-with-saml-support-in-nextcloud/login.png" data-size="1010x629"&gt;
&lt;img src="https://carlschwan.eu/2026/08/07/whats-new-with-saml-support-in-nextcloud/login.png" width="1010" height="629" loading="lazy"
alt="Login form with ‘Authentik’ button"&gt;
&lt;/a&gt;
&lt;figcaption&gt;Login form with ‘Authentik’ button&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id="flexible-user-matching-between-ldap-and-saml"&gt;Flexible User Matching between LDAP and SAML&lt;/h2&gt;
&lt;p&gt;SAML is often used in combination with LDAP. This is because SAML is a pure
authentication protocol, whose main feature is to log a user in, but
it doesn&amp;rsquo;t provide something very essential: user provisioning. This is where
LDAP takes over and from the LDAP server we are able to get a list of users
with their attributes as well as their group membership.&lt;/p&gt;
&lt;p&gt;The only requirement is that the unique identifier used by the LDAP backend and
the SAML backend are the same. This can be a UUID, a username, an email address,
or any other field that the admin configured, but we recommend it to be the
UUID as this value doesn&amp;rsquo;t change over time. With this identifier, Nextcloud is
then able to identify that a specific user from LDAP is the same as one from
SAML.&lt;/p&gt;
&lt;p&gt;With Nextcloud 34, we now have a flexible user matching, meaning the SAML
backend is able to try to query another field from the LDAP backend when
matching the SAML user with an LDAP user (for example an old email address)
making migration easier.&lt;/p&gt;
&lt;h2 id="php-code-modernization-and-cleanup"&gt;PHP Code Modernization and Cleanup&lt;/h2&gt;
&lt;p&gt;Since SAML is a security critical application, we have to ensure the code
quality of it stays high. For this we use various tools.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The static analyser &lt;strong&gt;psalm&lt;/strong&gt;. This tool has various strictness levels and
we are now using level 2. Additionally now the unit tests are also scanned
and type hinting was added in various places both in the app itself but also
in the public interface from OCP/server that the app uses.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The refactoring tool &lt;strong&gt;rector&lt;/strong&gt;. This tool is used for refactoring PHP codebase
to newer PHP constructs allowing us to make use of new syntax sugar and functions
available in newer versions of PHP.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, annotations in phpdoc comments were converted to proper PHP attributes
and most deprecated usages of the Nextcloud internals were replaced with modern
alternatives.&lt;/p&gt;
&lt;h2 id="integration-testing"&gt;Integration Testing&lt;/h2&gt;
&lt;p&gt;Integration tests are an important part of making sure that the application works
correctly. Previously, we only tested the usage of this application with the
SAML protocol, and after ending up with a regression with the usage of the
Kerberos protocol, I added tests to also check the combination of Kerberos
authentication with an SMB/Samba.&lt;/p&gt;
&lt;h2 id="performance-improvements"&gt;Performance Improvements&lt;/h2&gt;
&lt;p&gt;Aside from cleanups, the user backend and group backend now implement several
optional interfaces that allow Nextcloud to query the user
and group data more efficiently by using batch processing of users or limiting the size of the
SQL queries.&lt;/p&gt;
&lt;p&gt;The new interfaces we implement are &lt;code&gt;IBatchMethodsBackend&lt;/code&gt;,
&lt;code&gt;ILimitAwareCountUsersBackend&lt;/code&gt; and &lt;code&gt;ISearchableGroupBackend&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Additionally, display names of groups are cached when querying groups (which
avoids doing n+1 queries in many places).&lt;/p&gt;
&lt;p&gt;In total and with some other changes in the Team folder (groupfolders) app to
make use of these new APIs, this managed to reduce the amount of queries done
by 70% for some API requests.&lt;/p&gt;
&lt;h2 id="developer-experience-improvements"&gt;Developer Experience Improvements&lt;/h2&gt;
&lt;p&gt;And finally to make it more convenient to work on this app, Maxence and I
worked on improving the Nextcloud developer docker setup, to automatically
configure a SAML provider and Nextcloud by only typing one command:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker compose up nextcloud authentik
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This saves a lot of time as I use a lot of ephemeral instances of Nextcloud and tear
them down when switching between stable versions.&lt;/p&gt;
&lt;p&gt;And this also works with a Global Scale Setup:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker compose up portal proxy lookup authentik gs1 gs2 gs3 database-mysql
&lt;/code&gt;&lt;/pre&gt;</description><author>Carl Schwan</author></item><item><title>This Quarter in KDE Digital Sovereignty: Q2 2026</title><link>https://blogs.kde.org/2026/08/06/this-quarter-in-kde-digital-sovereignty-q2-2026/</link><pubDate>Thu, 06 Aug 2026 16:00:01 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/06/this-quarter-in-kde-digital-sovereignty-q2-2026/</guid><description>&lt;!-- ![](thumbnail.png) --&gt;
&lt;!--
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
--&gt;
&lt;!--
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="%25!s%28%3cnil%3e%29something.mp4" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
--&gt;
&lt;p&gt;Welcome to the inaugural edition of &lt;em&gt;This Quarter in KDE Digital Sovereignty!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This blog series will cover the work done throughout KDE’s software stack that’s funded by &lt;a target="_blank" href="https://www.sovereign.tech/tech/kde"&gt;the investment KDE received earlier this year from Germany’s Sovereign Tech Agency&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Commissioned work on a variety of projects has been done by KDE contributors working for &lt;a target="_blank" href="https://ev.kde.org"&gt;KDE e.V.&lt;/a&gt; itself, as well as the &lt;a target="_blank" href="https://techpaladinsoftware.com"&gt;Techpaladin Software&lt;/a&gt; and &lt;a target="_blank" href="https://haute-couture.enioka.com/en/"&gt;enioka Haute Couture&lt;/a&gt; companies.&lt;/p&gt;
&lt;p&gt;This post will cover the work done in the second quarter of 2026. Let’s get into it!&lt;/p&gt;
&lt;h2 id="quality-assurance-and-testing"&gt;Quality assurance and testing&lt;/h2&gt;
&lt;p&gt;The bulk of the work consisted of getting KDE’s house in order when it comes to automated testing — ensuring things that are working stay working, and providing early warnings about incompatibilities from updated dependencies.&lt;/p&gt;
&lt;p&gt;The Sovereign Tech Agency’s investment in KDE included substantial funding for this work across KDE Plasma, KDE Linux, and KDE PIM, providing a strong technical foundation for all of the future funded work.&lt;/p&gt;
&lt;p&gt;On the PIM side, we set up a &lt;a target="_blank" href="https://invent.kde.org/pim/pim-technical-roadmap/-/boards/11527?milestone_title=Quality%20and%20Large%20Organisation%20Improvements&amp;amp;label_name[]=epic%3Ae2e-resource-testing"&gt;dedicated test suite and an extensive set of newly-created tests&lt;/a&gt; for both &lt;a target="_blank" href="https://invent.kde.org/pim/pim-technical-roadmap/-/work_items/76"&gt;IMAP&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/pim/pim-technical-roadmap/-/work_items/77"&gt;CalDAV/CardDAV&lt;/a&gt; resources. You can read more about it &lt;a target="_blank" href="https://ervin.ipsquad.net/blog/2026/07/21/kde-for-entreprise-needs-a-strong-pim-infrastructure/"&gt;on Kevin Ottens’ blog&lt;/a&gt;. In any case, it helped uncover some issues which were promptly fixed (most notably &lt;a target="_blank" href="https://invent.kde.org/pim/kdepim-runtime/-/merge_requests/320"&gt;recurrence exceptions are properly handled now&lt;/a&gt;), and identify &lt;a target="_blank" href="https://invent.kde.org/pim/kdepim-runtime/-/merge_requests/338"&gt;dead code which has been cleaned up&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A similar process unfolded on the KDE Linux side, with a dedicated testing server managing &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/662"&gt;a new openQA-based system&lt;/a&gt; that runs integration tests for many high-level cases relevant to Plasma in general and KDE Linux specifically. You can read more about it in &lt;a target="_blank" href="https://blogs.kde.org/2026/07/13/openqa-testing-in-kde-linux"&gt;this blog post by Thomas Duckworth&lt;/a&gt;. And it has also already borne fruit, including &lt;a target="_blank" href="https://invent.kde.org/frameworks/kwallet/-/merge_requests/157#note_1564783"&gt;detecting an accidental regression in KWallet&lt;/a&gt; and protecting users from a KWin crash caused by &lt;a target="_blank" href="https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/merge_requests/18"&gt;a brief regression in Arch Linux’s gcc tooling&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="imap4-revision-2"&gt;IMAP4 revision 2&lt;/h2&gt;
&lt;p&gt;Beyond the QA, work also proceeded on the PIM side for the topic of &lt;a target="_blank" href="https://invent.kde.org/pim/pim-technical-roadmap/-/boards/11527?milestone_title=Quality%20and%20Large%20Organisation%20Improvements&amp;amp;label_name[]=epic%3Aimap4rev2"&gt;improving support through the KDE PIM suite for IMAP4 revision 2&lt;/a&gt;. This led us to add support for more IMAP4 extensions in our stack like &lt;a target="_blank" href="https://invent.kde.org/pim/kimap/-/merge_requests/70"&gt;BINARY&lt;/a&gt;, &lt;a target="_blank" href="https://invent.kde.org/pim/kimap/-/merge_requests/72"&gt;LIST-EXTENDED&lt;/a&gt;, or &lt;a target="_blank" href="https://invent.kde.org/pim/kimap/-/merge_requests/73"&gt;LIST-STATUS&lt;/a&gt;. We also completed support for &lt;a target="_blank" href="https://invent.kde.org/pim/kdepim-runtime/-/merge_requests/326"&gt;CONDSTORE and QRESYNC&lt;/a&gt;. Altogether, it allowed us to speed up IMAP resource syncing while using less network bandwidth — sometimes in a fairly drastic way, lowering the sync of a given mailbox to a single server round trip in the best cases!&lt;/p&gt;
&lt;p&gt;We had more good news on this front too. It turned out to be less work than expected, as our IMAP implementation is in a fairly good shape! It will free some time to go further on the QA and testing side.&lt;/p&gt;
&lt;h2 id="automatic-account-configuration"&gt;Automatic account configuration&lt;/h2&gt;
&lt;p&gt;Additional PIM topics included initial work to build a system for &lt;a target="_blank" href="https://invent.kde.org/pim/pim-technical-roadmap/-/boards/11527?milestone_title=Quality%20and%20Large%20Organisation%20Improvements&amp;amp;label_name[]=epic%3Aaccount-autoconfig"&gt;automatically discovering and setting up resources&lt;/a&gt; based on nothing more than an email address and password. We already have partial support for this kind of magic in KMail, but it doesn’t go beyond configuring email; that will change soon!&lt;/p&gt;
&lt;p&gt;For this work, we’re preparing a new library which will implement the relevant draft RFC. The &lt;a target="_blank" href="https://invent.kde.org/arnaudchirat/accountautoconfig/-/merge_requests/3"&gt;API is mostly in place&lt;/a&gt;, although &lt;a target="_blank" href="https://invent.kde.org/arnaudchirat/accountautoconfig/-/merge_requests/7"&gt;we keep improving it&lt;/a&gt;. We’re now at the stage where we can plug this new implementation into KMail, and later on integrate the whole feature set via System Settings’ Online Accounts page. It will be nice when you just give an email and password there, to automatically see all your PIM apps automatically configured: mail, calendar, and identity.&lt;/p&gt;
&lt;h2 id="webdav-push-notifications"&gt;WebDAV push notifications&lt;/h2&gt;
&lt;p&gt;The latest work started on the PIM side is about &lt;a target="_blank" href="https://invent.kde.org/pim/pim-technical-roadmap/-/boards/11527?milestone_title=Quality%20and%20Large%20Organisation%20Improvements&amp;amp;label_name[]=epic%3Awebdav-push-notifications"&gt;supporting push notifications for DAV calendars&lt;/a&gt;. This is based on a &lt;a target="_blank" href="https://github.com/bitfireAT/webdav-push/"&gt;draft specification&lt;/a&gt; proposed by the DAVx⁵ folks. We’re currently mostly in the design phase, even though &lt;a target="_blank" href="https://invent.kde.org/frameworks/kdav/-/merge_requests/93"&gt;some&lt;/a&gt; &lt;a target="_blank" href="https://invent.kde.org/frameworks/kdav/-/merge_requests/94"&gt;adjustments&lt;/a&gt; to KDAV are already being made.&lt;/p&gt;
&lt;p&gt;Ultimately this should lead to more targeted syncing when something changes on the server, reducing the network bandwidth requirements. It will also make your calendars sync with the server almost immediately instead of waiting for the next poll interval.&lt;/p&gt;
&lt;h2 id="network-share-handling"&gt;Network share handling&lt;/h2&gt;
&lt;p&gt;On the Plasma side, work also began to overhaul &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/668"&gt;the way network shares are handled throughout KDE&lt;/a&gt;. So far the work has concentrated on beefing up KDE’s FUSE-based network share mounting in a variety of ways.&lt;/p&gt;
&lt;p&gt;Perhaps the most notable way being explored is to create the FUSE mount in response to a request to access a file on a network location even if the user has not already accessed it from Dolphin. &lt;a target="_blank" href="https://invent.kde.org/system/kio-fuse/-/merge_requests/90"&gt;This work is in progress&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Work is also in progress to &lt;a target="_blank" href="https://invent.kde.org/system/kio-fuse/-/merge_requests/86"&gt;mount these FUSE mounts at a standardized and predictable path&lt;/a&gt;, and to &lt;a target="_blank" href="https://invent.kde.org/system/kio-fuse/-/merge_requests/89"&gt;surface them in the standard Places panel&lt;/a&gt; for ease of access.&lt;/p&gt;
&lt;h2 id="data-integrity"&gt;Data integrity&lt;/h2&gt;
&lt;p&gt;To &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/666"&gt;improve data integrity&lt;/a&gt; throughout KDE, we created a new &lt;a target="_blank" href="https://invent.kde.org/system/kio-snapshot"&gt;service for interfacing with Btrfs snapshots&lt;/a&gt;. This will form the backbone of various user interfaces integrated throughout KDE software (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/merge_requests/1347"&gt;starting with Dolphin&lt;/a&gt;) to offer users the possibility to restore earlier versions of their files from snapshots, and use those snapshots for traditional backup systems.&lt;/p&gt;
&lt;p&gt;In addition, we put some work into improving KDE’s Kup backup system, in the form of UI improvements for &lt;a target="_blank" href="https://invent.kde.org/system/kup/-/merge_requests/52"&gt;determining what gets included in backups&lt;/a&gt;, and &lt;a target="_blank" href="https://invent.kde.org/system/kup/-/merge_requests/53"&gt;modernizing the user interface of its Plasma widget&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="configuration-management"&gt;Configuration management&lt;/h2&gt;
&lt;p&gt;Work began on an overhaul of KDE’s configuration management infrastructure in the form of &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/728"&gt;porting software to use the more modern KConfigXT system&lt;/a&gt;. This system uses a declarative syntax with defined schemas, allowing KDE software’s available configuration options and default settings to be knowable without having to read the source code.&lt;/p&gt;
&lt;p&gt;This effort will eventually open up the possibility of writing a management app similar to GNOME’s DConf Editor tool that can offer administrators the ability to graphically visualize and change configuration options.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="looking-forward"&gt;Looking forward&lt;/h2&gt;
&lt;p&gt;So it was a busy quarter of shoring up some of the foundations in KDE to lay the groundwork for future efforts. We’re very grateful for the Sovereign Tech Agency’s investment in KDE that made this possible! Once the QA efforts wind down, we’ll be in a great position to start working on the more user-facing elements of the investment.&lt;/p&gt;</description><author>Nate Graham</author></item><item><title>Week 8 + Week 9: Reviews and subsetting form fields</title><link>https://ojasmaheshwari.github.io/b/2026/week-8-week-9-reviews-and-subsetting-form-fields</link><pubDate>Thu, 06 Aug 2026 11:51:52 +0000</pubDate><guid isPermaLink="true">https://ojasmaheshwari.github.io/b/2026/week-8-week-9-reviews-and-subsetting-form-fields</guid><description>&lt;p&gt;Hi!&lt;/p&gt;
&lt;p&gt;Past 2 weeks of my GSoC work about font subsetting in Poppler involved a lot of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Acting on code reviews on my MR https://gitlab.freedesktop.org/poppler/poppler/-/merge_requests/2220&lt;/li&gt;
&lt;li&gt;Solving a lot of bugs. A lot of bugs took me 4-5 hours to troubleshoot and solve. I conquered my fear of GDB a little bit by doing this. I feel slightly better at the art of debugging now.&lt;/li&gt;
&lt;li&gt;Working on subsetting for form fields. I have it working for single font texts but not multi-font text because our support for multi-font text in form fields is complicated and it's proving difficult to test right now.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also made the discovery that I need to also do the following (maybe in the GSoC period or maybe outside):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rewriting the CID-to-GID map in a font so that we don't have to retain glyphs anymore while subsetting. Retaining glyphs can prove to be slightly expensive for some fonts, such as Droid Sans. One can only unlock font subsetting's full potential when they don't have to retain the glyph IDs anymore.&lt;/li&gt;
&lt;li&gt;Subsetting the width array in the font.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deciding to keep the blog short this time :)&lt;/p&gt;
&lt;p&gt;Thanks, Bye!&lt;/p&gt;</description><author>Ojas Maheshwari</author></item><item><title>Union: Summer 2026 Update</title><link>https://quantumproductions.info/articles/2026-08/union-summer-2026-update</link><pubDate>Wed, 05 Aug 2026 10:22:16 +0000</pubDate><guid isPermaLink="true">11 at https://quantumproductions.info</guid><description>&lt;span&gt;Union: Summer 2026 Update&lt;/span&gt;
&lt;div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;A lot has been happening with Union recently, so it is time for another update. As a reminder, Union is a project to build a new style engine for applications that tries to unify all the different ways Qt and KDE applications can be styled.&lt;/p&gt;
&lt;h2&gt;Union in Plasma 6.7&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure role="group" class="align-right caption"&gt;
&lt;div class="media media--type-image media--view-mode-preview"&gt;
&lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
&lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
&lt;div class="field__item"&gt;
&lt;a target="_blank" href="https://quantumproductions.info/sites/default/files/2026-08/Screenshot_20260804_144025.png" aria-label="&amp;#123;&amp;quot;alt&amp;quot;:&amp;quot;A screenshot of Plasma System Settings' Application Style page showing the Union application style selected.&amp;quot;}" role="button" title="A screenshot of Plasma System Settings' Application Style page showing the Union application style selected." data-colorbox-gallery="taxonomy-vmppHnGe7k0" class="colorbox" aria-controls="colorbox-pd6dmvxZa3o" data-cbox-img-attrs="&amp;#123;&amp;quot;alt&amp;quot;:&amp;quot;A screenshot of Plasma System Settings' Application Style page showing the Union application style selected.&amp;quot;}"&gt;&lt;img id="colorbox-pd6dmvxZa3o" src="https://quantumproductions.info/sites/default/files/styles/large/public/2026-08/Screenshot_20260804_144025.png?itok=zEs_LePt" width="480" height="387" alt="A screenshot of Plasma System Settings' Application Style page showing the Union application style selected." loading="lazy"&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption&gt;Union in System Settings&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;As mentioned in the [spring update], Union had its first release as part of the Plasma 6.7 release. Before release we had some back and forth as the intent was to use it as default for QtQuick applications, but that turned out to not be feasible. Instead, we came up with a solution where we use a proxy style as the widget style, which allows Union to be selected from System Settings. For widgets, we forward the styling to the Breeze style still, but when you select the Union style, QtQuick applications will (after restarting the application) use Union for their styling.&lt;sup id="fnref_1"&gt;&lt;a class="footnote-ref" href="#fn_1" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;This allows anyone with Plasma 6.7 to opt-in and test how well Union works with their favorite applications, with an easy way to go back should things not work correctly. We already received several bug reports of things not working quite correctly, most of which have been resolved. If you have not yet checked how well Union works for you, give it a try!&lt;/p&gt;
&lt;h2&gt;Styles and Style Selection&lt;/h2&gt;
&lt;p&gt;The above solution for selecting Union is mostly intended as an easy way to test Union with Plasma 6.7. It is not meant to be a long-term solution. Instead, we want applications to use Union by default, with a page in System Settings that allows selecting which Union style to use. Initially, that page and the current Application Style will live side-by-side in some form. Once there are a lot more Union styles, we can look at dropping the current Application Style page or moving it somewhere less prominent.&lt;/p&gt;
&lt;p&gt;Creating a style selection page required some extra work to make sure that we are able to correctly identify styles and associate metadata with those styles. This work has recently completed, resulting in a fairly big overhaul of the core style loading of Union. Unfortunately, this does mean any styles that have been created so far will need conversion to the new format. The advantage is that now the style determines what input format is needed for the style, which leads to reduced code, increased robustness and easier backward compatibility in the future.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure role="group" class="align-left caption"&gt;
&lt;div class="media media--type-image media--view-mode-preview"&gt;
&lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
&lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
&lt;div class="field__item"&gt;
&lt;a target="_blank" href="https://quantumproductions.info/sites/default/files/2026-08/Screenshot_20260804_163820.png" aria-label="&amp;#123;&amp;quot;alt&amp;quot;:&amp;quot;A screenshot of Plasma System Settings showing the in-development Union style selection page.&amp;quot;}" role="button" title="A screenshot of Plasma System Settings showing the in-development Union style selection page." data-colorbox-gallery="taxonomy-vmppHnGe7k0" class="colorbox" aria-controls="colorbox-zf4TscTxSnQ" data-cbox-img-attrs="&amp;#123;&amp;quot;alt&amp;quot;:&amp;quot;A screenshot of Plasma System Settings showing the in-development Union style selection page.&amp;quot;}"&gt;&lt;img id="colorbox-zf4TscTxSnQ" src="https://quantumproductions.info/sites/default/files/styles/large/public/2026-08/Screenshot_20260804_163820.png?itok=yMri6IUK" width="480" height="387" alt="A screenshot of Plasma System Settings showing the in-development Union style selection page." loading="lazy"&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption&gt;A screenshot of the in-development style selection page for Union.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;With Union now having a proper definition of what constitutes a "style", it became fairly straightforward to build a System Settings page to allow selecting the active style. The first version is mostly a copy of the current "Application Style" page, but this will evolve over time as that design is not ideal for what Union is capable of. In addition to the System Settings page, there is also a command-line tool to make it easier to work with Union's styles.&lt;/p&gt;
&lt;h2&gt;Widgets&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure role="group" class="align-center caption"&gt;
&lt;div class="media media--type-image media--view-mode-preview"&gt;
&lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
&lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
&lt;div class="field__item"&gt;
&lt;a target="_blank" href="https://quantumproductions.info/sites/default/files/2026-08/image%281%29.png" aria-label="&amp;#123;&amp;quot;alt&amp;quot;:&amp;quot;A screenshot of the Oxygen Demo application showcasing progress on the Qt Widgets style.&amp;quot;}" role="button" title="A screenshot of the Oxygen Demo application showcasing progress on the Qt Widgets style." data-colorbox-gallery="taxonomy-vmppHnGe7k0" class="colorbox" aria-controls="colorbox-PX6MbfDPE_c" data-cbox-img-attrs="&amp;#123;&amp;quot;alt&amp;quot;:&amp;quot;A screenshot of the Oxygen Demo application showcasing progress on the Qt Widgets style.&amp;quot;}"&gt;&lt;img id="colorbox-PX6MbfDPE_c" src="https://quantumproductions.info/sites/default/files/styles/large/public/2026-08/image%281%29.png?itok=Cjpnxd78" width="480" height="446" alt="A screenshot of the Oxygen Demo application showcasing progress on the Qt Widgets style." loading="lazy"&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption&gt;The Oxygen Demo application running using the in-progress Qt Widgets support of Union.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Over in Qt Widgets land, Akseli Lahtinen has been chipping away at building a proper Qt Widgets style for Union. This is slow going, as there is little documentation on how to actually work with the QStyle API and it is also showing its age.&lt;/p&gt;
&lt;p&gt;Still, progress is being made. At this point, the Union widgets style is no longer a proxy style, with everything being rendered by Union itself. Things are starting to look similar to both the Qt Quick side and to the Breeze QStyle. We are unsure if the work will be finished by the time Plasma 6.8 is released, but we are certainly trying to get it there.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure role="group" class="align-right caption"&gt;
&lt;div class="media media--type-image media--view-mode-preview"&gt;
&lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
&lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
&lt;div class="field__item"&gt;
&lt;a target="_blank" href="https://quantumproductions.info/sites/default/files/2026-08/image%282%29.png" aria-label="&amp;#123;&amp;quot;alt&amp;quot;:&amp;quot;A screenshot of Dolphin runnin with the in-development Union widgets style.&amp;quot;}" role="button" title="A screenshot of Dolphin runnin with the in-development Union widgets style." data-colorbox-gallery="taxonomy-vmppHnGe7k0" class="colorbox" aria-controls="colorbox-t7W7X_rFE1E" data-cbox-img-attrs="&amp;#123;&amp;quot;alt&amp;quot;:&amp;quot;A screenshot of Dolphin runnin with the in-development Union widgets style.&amp;quot;}"&gt;&lt;img id="colorbox-t7W7X_rFE1E" src="https://quantumproductions.info/sites/default/files/styles/large/public/2026-08/image%282%29.png?itok=iLSQOA8n" width="474" height="480" alt="A screenshot of Dolphin runnin with the in-development Union widgets style." loading="lazy"&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption&gt;A very much work in progress screenshot of Dolphin running with the Union Qt Widgets style.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;p&gt;There have been several discussions with regards to what capabilities Union needs to have to make it possible to support other styles. This includes discussions around porting Oxygen over to Union to increase the compatibility of Oxygen with Qt Quick applications. There is also ongoing work to build the new Ocean style using Union.&lt;/p&gt;
&lt;p&gt;Hopefully with Plasma 6.8 we can move things from being in a tech preview state to become a core part of KDE's experience. But there is still a lot of work ahead of us. If you would like to help get things done, take a look at the &lt;a target="_blank" href="https://invent.kde.org/plasma/union"&gt;Union repository&lt;/a&gt; or come talk to us over on &lt;a target="_blank" href="https://matrix.to/#/#union:kde.org"&gt;Matrix&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Discuss this post at &lt;a target="_blank" href="https://discuss.kde.org/t/union-summer-2026-update/49154"&gt;KDE Discuss&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;hr&gt;&lt;ol&gt;&lt;li class="footnote" id="fn_1" role="doc-endnote"&gt;&lt;p&gt;Assuming the application does not hardcode the style to use as several KDE applications did.&amp;nbsp;&lt;a class="footnote-backref" href="#fnref_1" role="doc-backlink"&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;
&lt;span&gt;&lt;span&gt;ahiemstra&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2026-08-05T12:22:16+02:00" title="Wednesday, August 5, 2026 - 12:22"&gt;Wed, 08/05/2026 - 12:22&lt;/time&gt;
&lt;/span&gt;</description><author>Arjen Hiemstra</author></item><item><title>Akademy 2027 Call for Hosts</title><link>https://akademy.kde.org/news/2026-08_akademy-2027-call-for-hosts/</link><pubDate>Wed, 05 Aug 2026 07:00:00 +0000</pubDate><guid isPermaLink="true">https://akademy.kde.org/news/2026-08_akademy-2027-call-for-hosts/</guid><description>&lt;p&gt;Want to make a meaningful contribution to KDE beyond coding? Help us organise &lt;strong&gt;Akademy 2027&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Every year, Akademy brings together KDE contributors, users, partners, and the wider Free Software community to collaborate, learn, and innovate. Now it's your chance to help shape the next Akademy by hosting it in your city.&lt;/p&gt;
&lt;p&gt;We are looking for proposals to host Akademy 2027 during June, July, August, September, or October. &lt;a target="_blank" href="https://ev.kde.org/akademy/CallforHosts_2027.pdf"&gt;Download the Call for Hosts guide&lt;/a&gt; and submit a proposal to host Akademy in your city to &lt;a href="mailto:akademy-proposals@kde.org"&gt;akademy-proposals@kde.org&lt;/a&gt; by October 1, 2026.&lt;/p&gt;
&lt;p&gt;Have questions? We'd love to help! Whether you need advice, guidance, or support while preparing your proposal or organising the event, the Akademy team is here for you every step of the way.&lt;/p&gt;
&lt;p&gt;Let's work together to make Akademy 2027 an unforgettable event!&lt;/p&gt;</description><author>Akademy</author></item><item><title>KDE Plasma 6.7.4, Bugfix Release for August</title><link>https://kde.org/announcements/plasma/6/6.7.4/</link><pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://kde.org/announcements/plasma/6/6.7.4/</guid><description>&lt;p&gt;Today KDE releases a bugfix update to KDE Plasma 6, versioned 6.7.4.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://kde.org/announcements/plasma/6/6.7.0/"&gt;Plasma 6.7&lt;/a&gt; was released in June 2026 with many feature refinements and new modules to complete the desktop experience.&lt;/p&gt;
&lt;p&gt;This release adds three weeks’ worth of new translations and fixes from KDE’s contributors. The bugfixes are typically small but important and include:&lt;/p&gt;
&lt;a target="_blank" href="https://kde.org/announcements/changelogs/plasma/6/6.7.3-6.7.4"&gt;View full changelog&lt;/a&gt;</description><author>KDE Community</author></item><item><title>Wayland pain points – kgamma</title><link>http://blog.davidedmundson.co.uk/blog/wayland-and-kgamma/</link><pubDate>Mon, 03 Aug 2026 09:00:32 +0000</pubDate><guid isPermaLink="true">https://blog.davidedmundson.co.uk/?p=609</guid><description>&lt;p&gt;In the feedback about dropping X11 support, one very surprisingly common comment is from users saying they &amp;quot;need&amp;quot; kgamma, a simple tool that allows the user to adjust the gamma, red, blue and green that gets drawn to the screen operating directly on the X server.&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://blog.davidedmundson.co.uk/wp-content/uploads/2026/07/kgamma_comments-1024x683.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;On our Wayland session we have colour management that blows simple gamma adjustment out of the water, so on the face of it it seems weird that this would come up. However at the same time, I get it. ICC profiles are very confusing and it's not the same as a few basic sliders that anyone can understand.&lt;/p&gt;
&lt;p&gt;We want people to have the best transition to Wayland we can offer and this is a relatively easy fix.&lt;/p&gt;
&lt;h1&gt;The new tool&lt;/h1&gt;
&lt;p&gt;I have made a simple tool that edits the relevant part of an ICC profile - VCGTs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;VCGT (Video Card Gamma Table): An optional, private tag inside an ICC file that stores 1D grayscale/gamma curves loaded directly into your graphics card's hardware Look-Up Table (LUT).&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's a lot of fancy terms, but the key point is it's a tiny subset of the thing Kwin already supports. We can add a UI around those few values and not need to add a second code path in kwin or kscreen.&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://blog.davidedmundson.co.uk/wp-content/uploads/2026/07/screenshot2.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The UX is deliberately similar to the old UI.&lt;br /&gt;
Obviously it needs a round of polish (volunteers welcome!), but it's functional.&lt;/p&gt;
&lt;h1&gt;Why this is even better than on X11&lt;/h1&gt;
&lt;p&gt;Unlike KGamma on X11, this new tool:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Supports multiple monitors with independent values&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Works with night colour rather than fighting over the same settings, Kwin will blend the two sets on top of each other&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gets applied by Kwin on startup so the first frame is perfect, rather than glitching during loading&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;What next&lt;/h1&gt;
&lt;p&gt;Whilst changing your red/green settings wtih sliders might be something a few users do, and we got a few comments it remains a niche case.&lt;br /&gt;
My intention is to post it as a standalone application on Flathub and not as part of Plasma. I think that strikes the right balance of providing support without holding ourselves back longterm.&lt;/p&gt;
&lt;h1&gt;Getting it&lt;/h1&gt;
&lt;p&gt;The new tool is available at: &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://invent.kde.org/davidedmundson/kgamma2"&gt;https://invent.kde.org/davidedmundson/kgamma2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Usual CMake + build instructions apply.&lt;/p&gt;
&lt;p&gt;Feel free to make pull requests and let me know if it helps solve your issue!&lt;/p&gt;</description><author>David Edmundson</author></item><item><title>This month in KDE Linux</title><link>https://pointieststick.com/2026/08/02/this-month-in-kde-linux-2/</link><pubDate>Mon, 03 Aug 2026 04:21:38 +0000</pubDate><guid isPermaLink="true">http://pointieststick.com/?p=30074</guid><description>&lt;p class="wp-block-paragraph"&gt;… is now hosted on KDE infrastructure, instead of this blog! Check out &lt;a target="_blank" href="https://blogs.kde.org/2026/08/03/this-month-in-kde-linux-july-2026/"&gt;the July 2026 post&lt;/a&gt;, or &lt;a target="_blank" href="https://blogs.kde.org/categories/this-month-in-kde-linux/"&gt;the entire series here&lt;/a&gt;.&lt;/p&gt;</description><author>Nate Graham</author></item><item><title>This Month in KDE Linux: July 2026</title><link>https://blogs.kde.org/2026/08/03/this-month-in-kde-linux-july-2026/</link><pubDate>Mon, 03 Aug 2026 00:00:01 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/03/this-month-in-kde-linux-july-2026/</guid><description>&lt;!-- Example wording for a change, MR version. (Developer Name, [repo-name MR #xxx](https://invent.kde.org/plasma/repo-name/-/merge_requests/xxx)) --&gt;
&lt;!-- Example wording for a change, Bugzilla version. (Developer Name, [KDE Bugzilla #xxx](https://bugs.kde.org/show_bug.cgi?id=xxx)) --&gt;
&lt;!-- ![](thumbnail.png) --&gt;
&lt;!--
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
--&gt;
&lt;!--
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="%25!s%28%3cnil%3e%29something.mp4" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
--&gt;
&lt;p&gt;Welcome to the inaugural edition of &lt;em&gt;This Month in KDE Linux&lt;/em&gt; hosted on &lt;a target="_blank" href="https://blogs.kde.org"&gt;blogs.kde.org&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Previously, these posts lived on &lt;a target="_blank" href="https://pointieststick.com/category/kde-linux/"&gt;Nate Graham’s personal blog&lt;/a&gt;. But KDE Linux is growing up and becoming a more important part of KDE, larger than its individual contributors! So it’s time to move the public communication to KDE infrastructure, and that’s where you’ll be able to read these posts going forward.&lt;/p&gt;
&lt;p&gt;Without further ado, here’s how KDE Linux evolved in July:&lt;/p&gt;
&lt;h2 id="qa--testing"&gt;QA &amp;amp; testing&lt;/h2&gt;
&lt;p&gt;This month, Thomas Duckworth and Bhushan Shah integrated the next-gen QA system they’ve been building!&lt;/p&gt;
&lt;p&gt;It’s now testing tons of conditions to make sure KDE Linux continues to work as expected, and it also acts as a full-stack integration test suite. To illustrate the utility of such a thing, it’s already identified and protected users from two significant issues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a target="_blank" href="https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/merge_requests/18"&gt;A login-breaking KWin crash caused by a regression in &lt;code&gt;gcc&lt;/code&gt; from Arch Linux&lt;/a&gt; (already fixed).&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/frameworks/kwallet/-/merge_requests/157#note_1564783"&gt;A regression in automatically unlocking your wallet at login&lt;/a&gt; (also already fixed).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These tricky problems could only have been caught by the kind of full-stack integration test suite that KDE Linux has now.&lt;/p&gt;
&lt;p&gt;If you’re interested in the details, &lt;a target="_blank" href="https://blogs.kde.org/2026/07/13/openqa-testing-in-kde-linux/"&gt;Thomas Duckworth’s blog post on how the system works&lt;/a&gt; is worth a read. Thanks very much to Thomas and Bhushan for building this lovely system!&lt;/p&gt;
&lt;h2 id="security"&gt;Security&lt;/h2&gt;
&lt;p&gt;Hadi Chokr &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/561"&gt;implemented some kernel-hardening tweaks&lt;/a&gt; we learned about from the &lt;a target="_blank" href="https://secureblue.dev/features"&gt;SecureBlue&lt;/a&gt; project that were relevant to KDE Linux and wouldn’t noticeably burden users.&lt;/p&gt;
&lt;h2 id="efficiency--performance"&gt;Efficiency &amp;amp; performance&lt;/h2&gt;
&lt;p&gt;Nate Graham &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/577"&gt;removed the kernel modules for various hardware watchdogs&lt;/a&gt; that aren’t relevant for desktop use, which slightly reduces CPU usage and improves boot times.&lt;/p&gt;
&lt;p&gt;Thomas Duckworth &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/578"&gt;switched the CUPS printing system to use socket activation&lt;/a&gt;, which allows its services to only run when needed.&lt;/p&gt;
&lt;h2 id="software-support-package-downloader--support-for-java-and-dos-apps"&gt;Software support package downloader + support for Java and DOS apps&lt;/h2&gt;
&lt;p&gt;Hadi Chokr &lt;a target="_blank" href="https://invent.kde.org/kde-linux/package-compatibility-helper/-/merge_requests/2"&gt;implemented a major improvement to the “Package Compatibility Helper” tool&lt;/a&gt; that now allows it to — with the user’s consent — download software from Flathub to handle files that the user tries to open, but that nothing on the system can currently open.&lt;/p&gt;
&lt;p&gt;Hadi then &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/447"&gt;made this work for Java apps&lt;/a&gt;; the first time you try to launch one, the tool will ask you if you want to download a Java Runtime Environment (JRE). If you approve, it will do so and then launch the app using the JRE:&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="https://blogs.kde.org/2026/08/03/this-month-in-kde-linux-july-2026/java-support.webm" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;p&gt;After that, Hadi &lt;a target="_blank" href="https://invent.kde.org/kde-linux/package-compatibility-helper/-/merge_requests/3"&gt;implemented support for DOS apps&lt;/a&gt;; trying to launch one will offer up DOSBox. Now you can have that authentic 1993 Doom experience:&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="https://blogs.kde.org/2026/08/03/this-month-in-kde-linux-july-2026/doom-dos.mp4" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;p&gt;This system can be extended to support even more things in the future! And it’s been written in a generic enough way that it would be useful for any other image-based OS using Flatpak, as well.&lt;/p&gt;
&lt;h2 id="bugs-fixed"&gt;Bugs fixed&lt;/h2&gt;
&lt;p&gt;Philip Grant fixed the mechanism that ensures that &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/553"&gt;existing KDE Linux systems have the same Flatpaks installed as are pre-loaded on new systems&lt;/a&gt;, as it had various bugs that prevented it from working properly.&lt;/p&gt;
&lt;p&gt;David Fundament &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/568"&gt;fixed the script that disables USB auto-suspend for input devices&lt;/a&gt; so that it works with devices lacking a product name.&lt;/p&gt;
&lt;p&gt;WenChao Zhang &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/579"&gt;restored the &lt;code&gt;esp4&lt;/code&gt; and &lt;code&gt;esp6&lt;/code&gt; kernel modules&lt;/a&gt; that had been removed to mitigate the “DirtyFrag” vulnerability. The vulnerability has been fixed now, and missing those modules had broken IPsec VPNs, so they’re back now.&lt;/p&gt;
&lt;p&gt;Hadi Chokr &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/725"&gt;made WWAN modems work out of the box&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="documentation"&gt;Documentation&lt;/h2&gt;
&lt;p&gt;Thomas Duckworth documented how to &lt;a target="_blank" href="https://linux.kde.org/docs/openqa/"&gt;use and extend the new QA system&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nate Graham documented how to make the Fcitx 5 input method (for CJKV input) &lt;a target="_blank" href="https://linux.kde.org/docs/cjkv-input/#fixing-compatibility-issues"&gt;work with apps still using the XWayland compatibility layer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hadi Chokr documented &lt;a target="_blank" href="https://linux.kde.org/docs/dual-boot"&gt;how to set up bootloader menus&lt;/a&gt; so you can choose between booting KDE Linux or another OS on the same computer. However, setting up such a system is left as a manual exercise for the reader, as currently the KDE Linux installer does not yet formally support complex disk setups. This will come later.&lt;/p&gt;
&lt;h2 id="grab-bag"&gt;Grab bag&lt;/h2&gt;
&lt;p&gt;Prajna Sariputra &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/566"&gt;pre-installed &lt;code&gt;vulkan-virtio&lt;/code&gt;&lt;/a&gt;, improving performance in VMs whose graphics drivers support Vulkan.&lt;/p&gt;
&lt;p&gt;Thomas Duckworth made the &lt;code&gt;set-up-systemd-extension&lt;/code&gt; and &lt;code&gt;toggle-developer-mode&lt;/code&gt; tools &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/574"&gt;only prompt for authentication once&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nate Graham &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/706"&gt;removed the “Push Services” library and System Settings page&lt;/a&gt;, because it’s not mature enough for shipping yet.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-you-can-help"&gt;How you can help&lt;/h2&gt;
&lt;p&gt;KDE Linux is making steady progress towards its &lt;a target="_blank" href="https://invent.kde.org/groups/kde-linux/-/milestones/2#tab-issues"&gt;Beta milestone&lt;/a&gt;, and is now 83% of the way there.&lt;/p&gt;
&lt;p&gt;There’s lots to do! If you’re a fan of the project, please help out; there are many ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User support:&lt;/strong&gt; &lt;a target="_blank" href="https://discuss.kde.org/tag/kde-linux/450"&gt;help support people on discuss.kde.org using KDE Linux&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issue reporting:&lt;/strong&gt; &lt;a target="_blank" href="https://linux.kde.org/docs/install"&gt;install KDE Linux&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/issues"&gt;report issues&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; improve &lt;a target="_blank" href="https://linux.kde.org/docs"&gt;the docs&lt;/a&gt; by submitting &lt;a target="_blank" href="https://invent.kde.org/websites/linux-kde-org/-/merge_requests/"&gt;merge requests&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flatpak:&lt;/strong&gt; fix &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/issues/71"&gt;packaging or code issues in Flatpak-packaged apps&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OS development:&lt;/strong&gt; help &lt;a target="_blank" href="https://linux.kde.org/docs/kde-linux-dev"&gt;build KDE Linux&lt;/a&gt;! There’s &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/?sort=created_date&amp;amp;state=opened&amp;amp;milestone_title=Beta&amp;amp;first_page_size=100"&gt;plenty to do&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><author>Nate Graham</author></item><item><title>Implementing Rich Text in Drawy</title><link>https://abdelhadiwael.hashnode.dev/implementing-rich-text-in-drawy</link><pubDate>Sun, 02 Aug 2026 13:56:17 +0000</pubDate><guid isPermaLink="true">https://abdelhadiwael.hashnode.dev/implementing-rich-text-in-drawy</guid><description>&lt;p&gt;for the past few months i have been working on implementing rich text in &lt;a target="_blank" href="https://apps.kde.org/drawy/"&gt;drawy&lt;/a&gt; as part of &lt;a target="_blank" href="https://summerofcode.withgoogle.com/"&gt;google summer of code&lt;/a&gt; 2026.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Overview on the old implementation:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The old text logic depended on a manual implementation, almost everything was built from scratch using a string. Placing the cursor, caret movement, selection operations, line and word boundary detection, editing operations were all implemented from scratch.&lt;/p&gt;
&lt;p&gt;I found implementing all of this impressive, but while it worked for plain text editing, this code was hard to maintain / extend, and it would have been nearly impossible to add the features that were added.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phase 1: Refactoring&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Goal: Rewrite without breaking anything&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I replaced the string with &lt;code&gt;QTextDocument&lt;/code&gt; , all the things that were written manually before was gone and now editing operations are handled by &lt;code&gt;QTextCursor&lt;/code&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;How it was done&lt;/th&gt;
&lt;th&gt;How it is done now&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Placing cursor&lt;/td&gt;
&lt;td&gt;Binary search over the line, measuring substring widths with &lt;code&gt;QFontMetrics&lt;/code&gt; to find which character the click landed on.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;documentLayout()-&amp;gt;hitTest()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Caret movement&lt;/td&gt;
&lt;td&gt;Manual index calculation increment/decrement; up/down walked to the previous/next &lt;code&gt;\n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cursor.movePosition(Left/Right/Up/Down/WordLeft/WordRight)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Selection&lt;/td&gt;
&lt;td&gt;Two indices, with selection rectangles rebuilt line-by-line using &lt;code&gt;QFontMetrics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;QTextCursor&lt;/code&gt; anchor/position, drawn via &lt;code&gt;QAbstractTextDocumentLayout::Selection&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Word/line boundary detection&lt;/td&gt;
&lt;td&gt;Manual scan for separator characters or &lt;code&gt;\n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cursor.select(WordUnderCursor / LineUnderCursor)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Phase 2: Rich Text&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. adding IME support&lt;/strong&gt;&lt;br /&gt;An Input Method Editor (IME) is how the OS handles input for languages that can't be typed with a single key press per character without it user can't type with Arabic, Japanese, Chinese, dead keys, etc The OS sends this as a &lt;code&gt;QInputMethodEvent&lt;/code&gt;, which Drawy previously didn't handle. IME now works correctly here is demonstration of how it works with CJK input:&lt;/p&gt;
&lt;p&gt;&lt;a class="embed-card" target="_blank" href="https://youtu.be/2W2R9udyKKU?si=BLwUmLpcg_E9XE9T"&gt;https://youtu.be/2W2R9udyKKU?si=BLwUmLpcg_E9XE9T&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Properties:&lt;/strong&gt;&lt;br /&gt;user now have much more control over properties i added support for choosing font family, font style, text alignment, list format.&lt;/p&gt;
&lt;p&gt;per range formatting is also now implemented meaning user can set different colors, size, font, style to different parts of the text.&lt;/p&gt;
&lt;img src="https://cdn.hashnode.com/uploads/covers/69f4e64bec32cba9e54ba50b/80341821-1500-4ead-bf33-85c9c36c011d.png" alt="" style="display:block;margin:0 auto" /&gt;
&lt;img src="https://cdn.hashnode.com/uploads/covers/69f4e64bec32cba9e54ba50b/57accbeb-599f-406a-8ff6-665790e550d3.png" alt="" style="display:block;margin:0 auto" /&gt;
&lt;p&gt;&lt;strong&gt;3. Word Wrapping:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When the text box is resized, text now wraps to fit within its bounds.&lt;/p&gt;
&lt;p&gt;&lt;a class="embed-card" target="_blank" href="https://www.youtube.com/watch?v=AqGJd5Bf6sw"&gt;https://www.youtube.com/watch?v=AqGJd5Bf6sw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. undo / redo:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;text history is managed by two stacks: drawy global stack, and &lt;code&gt;QTextDocument&lt;/code&gt;'s internal one. Only one is active at a time. While the user is editing text, the global stack is disabled and &lt;code&gt;QTextDocument&lt;/code&gt;'s internal stack takes over, handling text edits and property changes, etc. Once the user exits edit mode, the internal stack is disabled again, any changes go through Drawy's global stack instead, stored as HTML.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Spell checking&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In my proposal, I didn't plan much time for spell checking, I thought that I'd just wire Sonnet in and be done with it. I later found out that Sonnet's ready-made integrations are built for &lt;code&gt;QTextEdit&lt;/code&gt; and QML, so I had to write my own spell-checking pipeline instead.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Each block (paragraph) is passed to &lt;code&gt;Sonnet::gusser&lt;/code&gt; to guess its language and determine which dictionary to use.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Text is split into words using &lt;code&gt;QTextBoundaryFinder&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Sonnet::Speller&lt;/code&gt; checks whether each word is misspelled.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Misspelled words are highlighted using &lt;code&gt;QSyntaxHighlighter&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;added new menu to settings using &lt;code&gt;Sonnet::ConfigWidget&lt;/code&gt; to allow customizing spell checking:&lt;/p&gt;
&lt;img src="https://cdn.hashnode.com/uploads/covers/69f4e64bec32cba9e54ba50b/f6e5cb9f-07f3-439a-b3ad-f04a5beb74f0.png" alt="" style="display:block;margin:0 auto" /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note: Everything mentioned in this blog is on the&lt;/em&gt; &lt;a target="_blank" href="https://invent.kde.org/graphics/drawy/-/tree/gsoc2026?ref_type=heads"&gt;&lt;code&gt;gsoc2026&lt;/code&gt;&lt;/a&gt; &lt;em&gt;branch currently and will be merged once GSoC is completed.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Gratitude:&lt;/strong&gt;&lt;br /&gt;I am very grateful to my mentor Laurent Montel for his time and effort guiding me throughout this project.&lt;/p&gt;</description><author>Abdelhadi Wael</author></item><item><title>June/July in KDE Itinerary</title><link>https://www.volkerkrause.eu/2026/08/01/kde-itinerary-june-july-2026.html</link><pubDate>Sat, 01 Aug 2026 06:15:00 +0000</pubDate><guid isPermaLink="true">https://www.volkerkrause.eu/2026/08/01/kde-itinerary-june-july-2026</guid><description>&lt;p&gt;Time for another bi-monthly update on what happened around &lt;a target="_blank" href="https://apps.kde.org/itinerary"&gt;Itinerary&lt;/a&gt;!
Since the &lt;a href="//www.volkerkrause.eu/2026/05/30/kde-itinerary-april-may-2026.html"&gt;previous report&lt;/a&gt;
there’s a new combined journey view, support for ride sharing services and new Apple Wallet pass formats,
among many other things.&lt;/p&gt;
&lt;h3 id="new-features"&gt;New Features&lt;/h3&gt;
&lt;h4 id="new-combined-journey-view"&gt;New combined journey view&lt;/h4&gt;
&lt;p&gt;With more and more journeys being backed by online realtime and schedule data, access to the
journey details (intermediate stops, journey map view, etc) via nested actions has become increasingly
cumbersome. Therefore Jonah redesigned the details pages for all transport entries (trains, buses, ferries, flights)
to have a new bottom toolbar to easily access that information.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="https://www.volkerkrause.eu/assets/posts/236/kde-itinerary-journey-details-tabs.png" alt="Screenshot of Itinerary showing intermediate stops of a train trip." loading="lazy" /&gt;
&lt;figcaption&gt;New tabbed journey details view.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The journey details view now also allows to query public transport departures at any intermediate stop,
which is useful e.g. when doing manual rerouting in case of more complex disruptions.&lt;/p&gt;
&lt;h4 id="ride-sharing"&gt;Ride sharing&lt;/h4&gt;
&lt;p&gt;After &lt;a target="_blank" href="https://transitous.org"&gt;Transitous&lt;/a&gt; got &lt;a href="//www.volkerkrause.eu/2026/02/28/osm-hack-weekend-karlsruhe-february-2026.html"&gt;support for ride sharing&lt;/a&gt;
earlier this year, this has now also reached out client applications. Both Itinerary and &lt;a target="_blank" href="https://apps.kde.org/ktrip"&gt;KTrip&lt;/a&gt;
have a mode filter for this now, and Itinerary can add ride sharing trips to the timeline.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="https://www.volkerkrause.eu/assets/posts/236/kde-itinerary-mode-of-transportation-filter.png" alt="Screenshot of Itinerary's mode of transport filter options for journey searches, with the newly added option for ride sharing services." loading="lazy" /&gt;
&lt;figcaption&gt;Mode of transportation filter options.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h4 id="new-apple-wallet-pass-formats"&gt;New Apple Wallet pass formats&lt;/h4&gt;
&lt;p&gt;Itinerary can now display a new variant of the Apple Wallet pass format,
so-called “poster event tickets”. Conceptually those are similar to the existing event tickets but
have very different layout and content, which wouldn’t render at all so far.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="https://www.volkerkrause.eu/assets/posts/236/kde-itinerary-pkpass-poster-event-ticket.jpg" alt="Screenshot of Itinerary rendering an Apple Wallet poster event ticket test pass." loading="lazy" /&gt;
&lt;figcaption&gt;Test pass with the so-called poster event ticket layout.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The background blur effect and some of the font sizes are still off, but at least the relevant
content is now displayed correctly.&lt;/p&gt;
&lt;p&gt;There’s also a few format additions affecting all pass types that are now supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Four additional barcode types (EAN13, Code 39, Codabar and ITF).&lt;/li&gt;
&lt;li&gt;Multi-row auxiliary fields.&lt;/li&gt;
&lt;li&gt;RGBA color values.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A few gaps in the existing format support were also fixed while at it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Correctly displaying date-only and time-only fields.&lt;/li&gt;
&lt;li&gt;Finding image assets only existing in a higher pixel ratio variant.&lt;/li&gt;
&lt;li&gt;Fixed organization and description fields not being translated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Besides the visual representation Apple Wallet passes can in newer versions also contain
machine-readable semantic information about their content, something
that is now used in the travel document extractor as well.&lt;/p&gt;
&lt;h3 id="infrastructure-work"&gt;Infrastructure Work&lt;/h3&gt;
&lt;h4 id="booking-links-in-transitous"&gt;Booking links in Transitous&lt;/h4&gt;
&lt;p&gt;Thanks to Jonah’s work, &lt;a target="_blank" href="https://motis-project.org"&gt;MOTIS&lt;/a&gt;, the routing engine behind &lt;a target="_blank" href="https://transitous.org"&gt;Transitous&lt;/a&gt;
got support for the &lt;a target="_blank" href="https://gtfs.org"&gt;GTFS&lt;/a&gt; Transit Ticketing Extension. This makes booking links available for more operators,
which are then shown by Itinerary or KTrip.&lt;/p&gt;
&lt;h4 id="android-and-linux-platform-integration"&gt;Android and Linux platform integration&lt;/h4&gt;
&lt;p&gt;There has been generic work on platform integration for all of KDE’s (mobile) apps,
which of course also benefits Itinerary.&lt;/p&gt;
&lt;p&gt;For Android there’s a &lt;a href="//www.volkerkrause.eu/2026/06/13/kde-android-news-june-2026.html"&gt;dedicated blog post&lt;/a&gt;.
Since then locale-aware comparisons have been fixed in Qt (for 6.13), and Itinerary
got built-in crash reporting that is already helping during development. Some
&lt;a target="_blank" href="https://codereview.qt-project.org/c/qt/qtdeclarative/+/743681"&gt;necessary changes&lt;/a&gt;
to finally fix not being able to open files from cloud shares is still stuck in review though.&lt;/p&gt;
&lt;p&gt;For Linux the focus has been on permission checks and GPS access in a Flatpak sandbox
(&lt;a href="//www.volkerkrause.eu/2026/06/27/kde-xdg-portal-location-api.html"&gt;blog post&lt;/a&gt;).
The foundation for the Qt permission API to support the Flatpak persmission system has been integrated meanwhile, for Qt 6.13.&lt;/p&gt;
&lt;h4 id="indoor-osm-standardization"&gt;Indoor OSM standardization&lt;/h4&gt;
&lt;p&gt;There also have been efforts on evolving and standardizing modelling and mapping
of indoor spaces in &lt;a target="_blank" href="https://openstreetmap.org"&gt;OpenStreetMap&lt;/a&gt;. While that is of course done
with the entire OSM ecosystem in mind, it also benefits Itinerary, Transitous and
&lt;a href="//www.volkerkrause.eu/2024/07/06/kde-kongress-venue-maps.html"&gt;Kongress&lt;/a&gt;.
There it helps with improving routing through buildings and with visualizing building interiors.&lt;/p&gt;
&lt;h4 id="gbfs-v3-support-continued"&gt;GBFS v3 support continued&lt;/h4&gt;
&lt;p&gt;The &lt;a href="//www.volkerkrause.eu/2026/05/30/kde-itinerary-april-may-2026.html"&gt;previous report&lt;/a&gt;
had mentioned work on improving the support for &lt;a target="_blank" href="https://gbfs.org"&gt;GBFS&lt;/a&gt; v3 sharing vehicle data.
This continued and now also has some more visibile results:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The GBFS feed database has been updated to contain about 1.500 feeds from all over the world,
and can now be online updated independent of the application itself.&lt;/li&gt;
&lt;li&gt;Rider capacity for vehicles is shown when available (mainly relevant for cars).&lt;/li&gt;
&lt;li&gt;Opening hours of rental vehicle stations or rental vehicle networks can now be displayed.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img src="https://www.volkerkrause.eu/assets/posts/236/kde-itinerary-rental-vehicle-service-opening-hours.png" alt="Screenshot of Itinerary's station map showing the opening hours of a bike rental station." loading="lazy" /&gt;
&lt;figcaption&gt;Opening hours of a rental service.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="events"&gt;Events&lt;/h3&gt;
&lt;p&gt;A few members of the Transitous community will be at &lt;a target="_blank" href="https://2026.stateofthemap.org/"&gt;State of the Map 2026&lt;/a&gt; in Paris end of August,
and I’ll be &lt;a target="_blank" href="https://2026.stateofthemap.org/sessions/3WLKJ9/"&gt;speaking about Transitous&lt;/a&gt; there.&lt;/p&gt;
&lt;figure&gt;&lt;a target="_blank" href="https://2026.stateofthemap.org/"&gt;
&lt;img src="//www.volkerkrause.eu/assets/posts/235/osm-sotm-2026-logo.svg" alt="State of the Map 2026 logo" loading="lazy" width="256" height="256" /&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;In September there’s &lt;a target="_blank" href="https://akademy.kde.org/2026"&gt;KDE Akademy 2026&lt;/a&gt; in Graz, which is probably one of the
largest gatherings of the Itinerary community. I’ll be &lt;a target="_blank" href="https://conf.kde.org/event/11/contributions/319/"&gt;presenting how continuous delivery helps Itinerary with QA&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;a target="_blank" href="https://akademy.kde.org/2026"&gt;
&lt;img src="//www.volkerkrause.eu/assets/posts/236/akademy2026-banner-600x110.png" alt="I'm going to KDE Akademy 2026 banner" loading="lazy" width="600" height="100" /&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;Beginning of October we have the second &lt;a target="_blank" href="https://open-transport.org"&gt;Open Transport Community Conference&lt;/a&gt; in Bern, both the Transitous and the
Itinerary community will be present there. A few tickets are still available.&lt;/p&gt;
&lt;h3 id="fixes--improvements"&gt;Fixes &amp;amp; Improvements&lt;/h3&gt;
&lt;h4 id="travel-document-extractor"&gt;Travel document extractor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New or improved extractors for 12go, Accor, BDŽ, Collegeboard, Doodle, DRK, Flixbus, HVV, IRCTC, KTMB, PKP, Polferries, Sportio, SRT, Ticketspot and VR.&lt;/li&gt;
&lt;li&gt;Fixed extracting return descriptions from standard UIC FCB NRT ticket barcodes (bug 520826).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This has been made possible thanks to your travel document donations!&lt;/p&gt;
&lt;h4 id="public-transport-data"&gt;Public transport data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Allow location searches without explicitly selecting a country.&lt;/li&gt;
&lt;li&gt;Improved aggregation and sorting of stop search results.&lt;/li&gt;
&lt;li&gt;Added support for Amtrak onboard API.&lt;/li&gt;
&lt;li&gt;Added support for resolving locations from coordinates and booking URLs for LTG Link.&lt;/li&gt;
&lt;li&gt;Fixed sorting of countries on the backend configuration page.&lt;/li&gt;
&lt;li&gt;Fixed DB booking URLs for connections where they don’t actually sell tickets.&lt;/li&gt;
&lt;li&gt;Fixed displaying text on light line colors with light color schemes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of this also directly benefits &lt;a target="_blank" href="https://apps.kde.org/ktrip"&gt;KTrip&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="itinerary-app"&gt;Itinerary app&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Allow to add transfers between multi-day events.&lt;/li&gt;
&lt;li&gt;Fixed activating booking links on details pages.&lt;/li&gt;
&lt;li&gt;Fixed too narrow global drawer.&lt;/li&gt;
&lt;li&gt;Fixed timer overflow on timeline updates for trips too far in the future.&lt;/li&gt;
&lt;li&gt;Fixed notification configuration when running in a Flatpak sandbox.&lt;/li&gt;
&lt;li&gt;The time picker on Linux now has a button to easily select “now”.&lt;/li&gt;
&lt;li&gt;Fixed France accidentally not being considered part of the EU roaming area.&lt;/li&gt;
&lt;li&gt;Show all reserved seat numbers on the vehicle layout page.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="how-you-can-help"&gt;How you can help&lt;/h3&gt;
&lt;p&gt;Feedback and travel document samples are very much welcome, as are all other forms of contributions.
Feel free to join us in the &lt;a target="_blank" href="https://matrix.to/#/#itinerary:kde.org"&gt;KDE Itinerary Matrix channel&lt;/a&gt;.&lt;/p&gt;</description><author>Volker Krause</author></item><item><title>This Week in Plasma: Emoji Resizing</title><link>https://blogs.kde.org/2026/08/01/this-week-in-plasma-emoji-resizing/</link><pubDate>Sat, 01 Aug 2026 00:00:01 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/01/this-week-in-plasma-emoji-resizing/</guid><description>&lt;!-- Example wording for a change, MR version. (Developer Name, [repo-name MR #xxx](https://invent.kde.org/plasma/repo-name/-/merge_requests/xxx)) --&gt;
&lt;!-- Example wording for a change, Bugzilla version. (Developer Name, [KDE Bugzilla #xxx](https://bugs.kde.org/show_bug.cgi?id=xxx)) --&gt;
&lt;!-- ![](thumbnail.png) --&gt;
&lt;!--
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
--&gt;
&lt;!--
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="%25!s%28%3cnil%3e%29something.mp4" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
--&gt;
&lt;p&gt;Welcome to a new issue of &lt;em&gt;This Week in Plasma!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;…but before we start, here’s a quick reminder that we’ve entered the last week to submit your proposal for the next &lt;a target="_blank" href="https://blogs.kde.org/2026/06/20/kde-goals-call-for-submissions/"&gt;KDE Goals cycle&lt;/a&gt;! If you’re not ready to champion a goal, you can still get involved by joining one of the &lt;a target="_blank" href="https://invent.kde.org/teams/goals/goal-setting/2026/-/boards"&gt;existing proposals&lt;/a&gt; as a contributor or supporter.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And now, without further ado…&lt;/p&gt;
&lt;p&gt;In addition to the headliner feature and expected UI improvements and bug fixes, this week features some promising technical and performance improvements. Have a look:&lt;/p&gt;
&lt;h2 id="notable-new-features"&gt;Notable new features&lt;/h2&gt;
&lt;!-- Can find some with https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Feature&amp;first_page_size=20 --&gt;
&lt;h3 id="plasma-68"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;You can now make the emojis in the Emoji Selector window bigger or smaller. (Jason Uithol, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3878"&gt;plasma-desktop MR #3878&lt;/a&gt;)&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="https://blogs.kde.org/2026/08/01/this-week-in-plasma-emoji-resizing/resizing-emojis.webm" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;p&gt;On System Settings’ Display Configuration page, you can now move screens pixel-by-pixel using the arrow keys while in layout editing mode. (Antti Savolainen, &lt;a target="_blank" href="https://invent.kde.org/plasma/kscreen/-/merge_requests/476"&gt;kscreen MR #476&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="notable-ui-improvements"&gt;Notable UI improvements&lt;/h2&gt;
&lt;!-- Can find some with https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Enhancement&amp;first_page_size=20 --&gt;
&lt;h3 id="plasma-674"&gt;Plasma 6.7.4&lt;/h3&gt;
&lt;p&gt;The Emoji Selector window is now always tall enough to accommodate its sidebar without scrolling. (Christoph Wolk, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523090"&gt;KDE Bugzilla #523090&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Spectacle now detects QR codes in screenshots that you take in such a manner that the main UI is never shown; if you click “Annotate” from the notification about it, the QR code will be detected there. (Kai Uwe Broulik, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=521097"&gt;KDE Bugzilla #521097&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-68-1"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;In Spectacle’s settings window, image quality controls are now only available for image types whose quality level is adjustable. (Zhora Zmeykin, &lt;a target="_blank" href="https://invent.kde.org/plasma/spectacle/-/merge_requests/568"&gt;spectacle MR #568&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Clarified the instructions on System Settings’s Remote Desktop page a little bit. (Nate Graham, &lt;a target="_blank" href="https://invent.kde.org/plasma/krdp/-/merge_requests/224"&gt;krdp MR #224&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/plasma/krdp/-/merge_requests/225"&gt;krdp MR #225&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="kup-0110"&gt;Kup 0.11.0&lt;/h3&gt;
&lt;p&gt;Modernized the UI for the Kup backup system’s System Tray widget, so now it matches other Plasma widgets that can similarly show multiple items, each with their own actions. (Bharadwaj Raju and Tomáš Hnyk, &lt;a target="_blank" href="https://invent.kde.org/system/kup/-/merge_requests/53"&gt;kup MR #53&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/system/kup/-/merge_requests/54"&gt;kup MR #54&lt;/a&gt;)&lt;/p&gt;
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;div class="swiper-slide swiper-slide-active"&gt;
&lt;img src="https://blogs.kde.org/2026/08/01/this-week-in-plasma-emoji-resizing/kup-applet-after.webp" alt="New" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;New&lt;/span&gt;
&lt;/div&gt;
&lt;div class="swiper-slide"&gt;
&lt;img src="https://blogs.kde.org/2026/08/01/this-week-in-plasma-emoji-resizing/kup-applet-before.webp" alt="Old" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;Old&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;h2 id="notable-bug-fixes"&gt;Notable bug fixes&lt;/h2&gt;
&lt;!--
Can find some with:
- HI and VHI bugs fixed: https://tinyurl.com/bdepnh4v
- All bugs fixed: https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Bugfix&amp;first_page_size=20
--&gt;
&lt;h3 id="plasma-667"&gt;Plasma 6.6.7&lt;/h3&gt;
&lt;p&gt;Fixed a case where the &lt;code&gt;ksystemstats&lt;/code&gt; background service could crash seemingly randomly. (Méven Car, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523562"&gt;KDE Bugzilla #523562&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed a recent regression that made blank document icons appear in the notification history view. (Kai Uwe Broulik, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=522846"&gt;KDE Bugzilla #522846&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed a bug that could make extremely long words in Plasma tooltips overflow rather than wrapping. (Nate Graham, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523614"&gt;KDE Bugzilla #523614&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed a bug that made third-party widgets fail to inhibit power management more than once. (Vincent de Robert, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523605"&gt;KDE Bugzilla #523605&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-674-1"&gt;Plasma 6.7.4&lt;/h3&gt;
&lt;p&gt;Fixed a visual glitch where the highlight area for expanded list items in various System Tray widgets would sometimes be too small to fit its contents. (Bharadwaj Raju, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=506295"&gt;KDE Bugzilla #506295&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-68-2"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;Fixed an issue that could sometimes corrupt very large screenshots taken in Spectacle when they were pasted elsewhere. (Cezar Craciunoiu, &lt;a target="_blank" href="https://invent.kde.org/plasma/spectacle/-/merge_requests/566"&gt;spectacle MR #566&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="frameworks-629"&gt;Frameworks 6.29&lt;/h3&gt;
&lt;p&gt;Opening various windows and dialogs using Kirigami components no longer makes the content scroll into view for no particularly good reason. (Manuel Alcaraz Zambrano, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=515811"&gt;KDE Bugzilla #515811&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="ddcutil-228"&gt;ddcutil 2.2.8&lt;/h3&gt;
&lt;p&gt;Fixed multiple issues that could make the &lt;code&gt;powerdevil&lt;/code&gt; background process freeze or crash. (Sanford Rockowitz, &lt;a target="_blank" href="https://github.com/rockowitz/ddcutil/issues/581"&gt;ddcutil issue #581&lt;/a&gt; and &lt;a target="_blank" href="https://github.com/rockowitz/ddcutil/issues/587"&gt;ddcutil issue #587&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="notable-in-performance--technical"&gt;Notable in performance &amp;amp; technical&lt;/h2&gt;
&lt;h3 id="plasma-68-3"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;Significantly improved performance with external GPUs. Read more about this &lt;a target="_blank" href="https://zamundaaa.github.io/wayland/2026/07/31/fixing-multi-gpu.html"&gt;on Xaver’s blog&lt;/a&gt;! (Xaver Hugl, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/7101"&gt;kwin MR #7101&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;You can now change the size (and effective resolution) of virtual screens created for screencasting, rather than them being fixed to a resolution of 1920 × 1080 pixels. (David Edmundson, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=512620"&gt;KDE Bugzilla #512620&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Panel floating-ness can now be changed using Plasma desktop scripting. (Ramil Nurmanov, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=521549"&gt;KDE Bugzilla #521549&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;KWin now recognizes the “Pick up phone” and “Hang up phone” keys on some keyboards, allowing them to be used in keyboard shortcuts to trigger actions. (Méven Car, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/7892"&gt;kwin MR #7892&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="frameworks-629-1"&gt;Frameworks 6.29&lt;/h3&gt;
&lt;p&gt;Fixed a performance issue that could make Plasma freeze when it sent a notification with a lot of emojis in it. (Devin Lin, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=508070"&gt;KDE Bugzilla #508070&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="how-you-can-help"&gt;How you can help&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Would you like to help put together this weekly report? Introduce yourself in &lt;a target="_blank" href="https://matrix.to/#/%23this-week-kde-apps:kde.org"&gt;the Matrix room&lt;/a&gt; and &lt;a target="_blank" href="https://community.kde.org/Promotion/This_week_in_KDE"&gt;join the team&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Beyond that, you can help KDE by directly &lt;a target="_blank" href="https://community.kde.org/Get_Involved"&gt;getting involved&lt;/a&gt; in any other projects. Donating time is actually more impactful than donating money. 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.&lt;/p&gt;
&lt;p&gt;You can also help out by &lt;a target="_blank" href="https://kde.org/donate"&gt;making a donation&lt;/a&gt;! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.&lt;/p&gt;
&lt;h2 id="to-get-a-new-plasma-feature-or-a-bug-fix-mentioned-here"&gt;To get a new Plasma feature or a bug fix mentioned here&lt;/h2&gt;
&lt;p&gt;Push a commit to &lt;a target="_blank" href="https://invent.kde.org/websites/blogs-kde-org/-/merge_requests/?label_name%5B%5D=This%20Week%20in%20Plasma"&gt;the relevant merge request on invent.kde.org&lt;/a&gt;.&lt;/p&gt;</description><author>Nate Graham</author></item><item><title>Web Review, Week 2026-31</title><link>https://ervin.ipsquad.net/blog/2026/07/31/web-review-week-2026-31/</link><pubDate>Fri, 31 Jul 2026 16:17:16 +0000</pubDate><guid isPermaLink="true">https://ervin.ipsquad.net/blog/2026/07/31/web-review-week-2026-31/</guid><description>&lt;p&gt;Let&amp;rsquo;s go for my web review for the week 2026-31.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="sovereignty-is-a-substrate"&gt;Sovereignty is a substrate&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, hardware, supply-chain, complexity&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Interesting piece which shows very well the complexity of the hardware supply chain. The parts which matter the most are largely ignored by everyone.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://negroniventurestudios.com/2026/07/28/sovereignty-is-a-substrate/"&gt;https://negroniventurestudios.com/2026/07/28/sovereignty-is-a-substrate/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="do-llms-know-how-to-make-software-no"&gt;Do LLMs know how to make software? (No.)&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, ai, machine-learning, gpt, copilot&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Funny, I was using that exact same term recently: &amp;ldquo;brute-force driven development&amp;rdquo;. It describes fairly well how the harnesses work.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://mir.aculo.us/do-llms-know-how-to-make-software-no/"&gt;https://mir.aculo.us/do-llms-know-how-to-make-software-no/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="getting-access-to-the-tmp-of-a-systemd-service-with-privatetmpyes"&gt;Getting access to the /tmp of a systemd service with PrivateTmp=yes&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, systemd&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t forget, it&amp;rsquo;s all namespaces!&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://utcc.utoronto.ca/~cks/space/blog/linux/SystemdPrivateTmpWhere"&gt;https://utcc.utoronto.ca/~cks/space/blog/linux/SystemdPrivateTmpWhere&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="the-hamburger-database-design-pattern"&gt;The Hamburger Database Design Pattern&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, databases, design, pattern&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Interesting pattern for managing materialized views over a long time.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://pagedout.institute/download/PagedOut_009.pdf#%5B%7B%22num%22:100,%22gen%22:0%7D,%7B%22name%22:%22XYZ%22%7D,null,null,null%5D"&gt;https://pagedout.institute/download/PagedOut_009.pdf#[&amp;#123;&amp;ldquo;num&amp;rdquo;:100,&amp;ldquo;gen&amp;rdquo;:0},&amp;#123;&amp;ldquo;name&amp;rdquo;:&amp;ldquo;XYZ&amp;rdquo;},null,null,null]&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="memory-level-parallelism-amd-is-the-king"&gt;Memory-level parallelism: AMD is the king&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, cpu, amd, performance&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;They&amp;rsquo;re definitely handling this part right, they seem well ahead everyone else.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://lemire.me/blog/2026/07/25/memory-level-parallelism-amd-is-the-king/"&gt;https://lemire.me/blog/2026/07/25/memory-level-parallelism-amd-is-the-king/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="c26-reducing-undefined-behaviour"&gt;C++26: Reducing undefined behaviour&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, c++, standard, safety, reliability&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;More signs of C++26 being an important new standard for reliability and safety.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://www.sandordargo.com/blog/2026/07/29/cpp26-reduces-undefined-behaviour"&gt;https://www.sandordargo.com/blog/2026/07/29/cpp26-reduces-undefined-behaviour&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="c-float-to-int-conversion-can-be-undefined-behavior"&gt;C++ float-to-int conversion can be undefined behavior&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, c++, safety&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is a bigger trap than it sounds. It is very easy to fall into it.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://kttnr.net/blog/cpp-float-to-int-conversion-undefined-behavior/"&gt;https://kttnr.net/blog/cpp-float-to-int-conversion-undefined-behavior/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="learn-webgpu-for-c-documentation"&gt;Learn WebGPU for C++ documentation&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, web, webgpu, graphics&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Curious about WebGPU? This looks like it&amp;rsquo;ll become a very good resource for that.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://eliemichel.github.io/LearnWebGPU/"&gt;https://eliemichel.github.io/LearnWebGPU/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="the-website-specification"&gt;The Website Specification&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, web, standard&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is very comprehensive! It is also overwhelming&amp;hellip; So many things to think about when making a website nowadays.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://specification.website/"&gt;https://specification.website/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="what-even-are-microservices"&gt;What even are microservices?&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, architecture, microservices&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Since I still hear about &amp;ldquo;microservices&amp;rdquo; more often than I&amp;rsquo;d like to. Here is another piece which points the trade-offs and that really there&amp;rsquo;s no one size fits all.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://var0.xyz/posts/what-even-are-microservices.html"&gt;https://var0.xyz/posts/what-even-are-microservices.html&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="code-review-responses-add-context-when-it-counts"&gt;Code Review Responses: Add Context When It Counts&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, codereview&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There are indeed cases where it&amp;rsquo;s important to provide more context on the code which changed following up a comment by the reviewer.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://testing.googleblog.com/2026/05/code-review-responses-add-context-when.html?m=1"&gt;https://testing.googleblog.com/2026/05/code-review-responses-add-context-when.html?m=1&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="how-i-find-problems-to-solve-as-a-staff-engineer"&gt;How I Find Problems to Solve as a Staff Engineer&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, engineering, leadership, problem-solving&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Good approach, you indeed need to immerse yourself in the context and see the recurring patterns. That&amp;rsquo;s the best way to figure out impactful solutions to recurring issues.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://lalitm.com/post/find-problems-staff-engineer/"&gt;https://lalitm.com/post/find-problems-staff-engineer/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="your-harddrive-is-probably-full"&gt;Your harddrive is probably full&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, storage, resources, procrastination&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Interesting take, it&amp;rsquo;s more than just about hard drives being full. Indeed, there are many things on which we tend to procrastinate. But on the other hand&amp;hellip; so many budgets to track otherwise!&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://www.marginalia.nu/log/a_139_hdd/"&gt;https://www.marginalia.nu/log/a_139_hdd/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="the-crossover-project"&gt;The Crossover Project&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, software, engineering, agile, craftsmanship&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Very interesting series I previously missed. It explores if software engineering is really engineering, and the differences with other engineering fields. Quite a few nice lessons to draw from it.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://www.hillelwayne.com/tags/crossover-project/"&gt;https://www.hillelwayne.com/tags/crossover-project/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h4 id="kaizen-board-a-reply-on-every-sheet"&gt;Kaizen Board: A Reply on Every Sheet&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Tags: tech, quality, kaizen, japan&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Wondering how that works when it runs properly? Here is an example of a Kaizen board in a japanese factory.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://www.leanblog.org/2026/07/kaizen-board-manager-comments/"&gt;https://www.leanblog.org/2026/07/kaizen-board-manager-comments/&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;hr&gt;
&lt;p&gt;Bye for now!&lt;/p&gt;</description><author>Kevin Ottens</author></item></channel></rss>