Skip to content

Thursday, 17 September 2026

Happy to announce a new version of Kirigami Addons, as well as the first version of my new app: Imprint.

Kirigami Addons is a collection of many useful modules for your QML and Kirigami applications, and Imprint is a new PDF editor.

Let’s start with the more user facing of the two.

Imprint 1.0

Imprint is a very basic PDF editor. Right now it allows you to merge multiple PDFs together; re-order, remove or delete pages; and add or remove password protection.

Grid of pages

There are also ways to modify a single PDF page, by for example cropping it.

Crop

Or adding basic annotation:

Annotation support

Additionally, all actions made in Imprint are based on commands which are undoable.

On the technical side, I use both Poppler and QPDF. Poppler is used for rendering the PDF, and QPDF is used for editing the raw PDF. The annotations for the editor use the new QtCanvasPainter module from Qt, which is great as it allows moving most of the code to C++.

For now, this really provides the foundation of a powerful PDF editor and in the future I hope to be able to come near feature parity with proprietary apps like iLovePDF. I expect as always to release another version soon with a lot of bugfixes :)

Kirigami Addons 1.14.0

As always when working on a new application, this is the occasion to improve Kirigami Addons even more :)

FormCard

The FormCard modules received a new component FormDelegateCollapsible contributed by Robert French. As the name indicates, it allows you to make a section of a FormCard collapsible.

 

Another improvement is that any FormCard delegate can now be injected into a FormGridContainer.

FormCard.FormGridContainer {
 FormCard.FormButtonDelegate {
 text: "Open"
 description: "Open a document"
 }

 FormCard.FormSwitchDelegate {
 text: "Enable sync"
 }
}

 

Since KAboutData was extended with more data that application developers can provide, the AboutPage component was also extended in terms of the data we display to the user.

We now support Mastodon and Matrix links, and when clicking on the application name, we display the changelog.

 

This module also received numerous performance improvements based on the results of qmlprofiler and I did some internal refactoring to take advantage of newer Qt/QML APIs (e.g. LayoutItemProxy).

Actions

The actions modules of Kirigami Addons also received numerous updates to cover the cases of a document editor like Imprint. The biggest change is that there is now a QML API in addition to the existing C++ API; that there is a way to define and render menus; and a way to add context to an action, so that a group of actions is enabled or not depending on a state (e.g. document open, document modified, one page selected, multiple pages selected).

Packager section

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

For Imprint, it is for now a personal project not part of KDE, and you can find a tarball (checksum: 1b44d0f138ac175dc13cb00cef5740336f006b2a4dd4737266938278408bd34f) on this website and it is also signed (checksum: 70073cb71f970e94a5d3c7dd4dba6dc5c17a0d19b331a1556e739dc91f748994).

Akademy 2026

I am also going to be at Akademy, but this time only for the weekend as I am afterward taking the sleeper train on Sunday evening to get back to Berlin in the morning for the Nextcloud Community Conference.

 

As part of the on-going development of Qt Bridges, and beyond the two Beta versions already released, we've continued to add new features to the C# bridge, and we're now announcing the release of a new Beta version 0.4.0. The highlight of this release is the possibility to develop C# + QML applications without the need for a C++ compiler. This means that C# developers can now take full advantage of Qt’s UI framework capabilities while keeping their familiar development workflow. Other features that we've added in this release include support for macOS and Windows on ARM.

The big KDE Plasma 6.7 release ushered in the summer. Now, as summer draws to a close, a new 6.8 release is cooking, due to arrive in about a month's time. Most of the development is done at this point, and we have a few changes to report for our classic Oxygen theme that you...... Continue Reading →

Wednesday, 16 September 2026

The past couple of weeks moved on to the other half of the editor work- the kded dialogs that pops up on NetworkManager's behalf - the secret prompt, the SIM PIN dialog, the mobile broadband wizard.

Why this needs doing

The Connection Editor isn't the only place libs/editor gets used. kded's network management module runs as NetworkManager's secret agent: whenever NetworkManager needs a password, a PIN, or a fresh mobile broadband connection, it asks the agent, and the agent has been popping up a QDialog ever since. PasswordDialog asks for Wi-Fi/PPP/VPN secrets, PinDialog unlocks a SIM, MobileConnectionWizard walks through adding a GSM/CDMA connection when you plug in a modem or pair a Bluetooth phone for DUN. All three are widgets, and the VPN half of PasswordDialog reuses the same VpnUiPlugin-returning-a-QWidget mechanism the editor already moved off of.

The straightforward half

The new module is kdedqml, structured the same way editorqml was: a small set of QObjects and a PromptWindow that hosts whichever QML file they back.

kdedqml/
├── passwordprompt.cpp / .h    secrets for a plain setting or a VPN
├── pinprompt.cpp / .h         SIM PIN/PUK unlock
├── mobilewizard.cpp / .h      GSM/CDMA connection wizard
├── promptwindow.cpp / .h      hosts one QML file + one backing QObject
└── qml/
    ├── PasswordPrompt.qml
    ├── PinPrompt.qml
    └── MobileWizard.qml

PromptWindow is the one new idea here, and it's deliberately dumb - give it a QUrl and a QObject, and it loads the QML file into a QQmlApplicationEngine, exposes the object as a context property named prompt, and shows the window. Every one of the three prompts is just "construct the backing object, hand it to a PromptWindow":

m_promptWindow->show(QUrl(QStringLiteral("qrc:/plasma-nm/kdedqml/qml/PasswordPrompt.qml")), m_dialog);

PasswordPrompt itself does the boring 90% of the work first: it duplicates what PasswordDialog already did for plain secrets (Wi-Fi retry messages, WEP/WPA key validation via NetworkManagerQt rather than a regex, the same rule as last time) and, for VPNs, reuses the AuthSetting classes the editor already has:

if (shortName == QLatin1String("ssh")) {
    m_vpnAuth = createAuth<SshAuthSetting>(hints, this, vpnSetting, m_vpnSecrets);
} else if (shortName == QLatin1String("sstp")) {
    m_vpnAuth = createAuth<SstpAuthSetting>(hints, this, vpnSetting, m_vpnSecrets);
} ...

createAuth constructs the setting and calls loadSecrets(), just pointed at secrets instead of full config. Ten VPN types wired up this way, and PasswordPrompt.qml picks the matching Auth.qml from the editor with a Loader switching on service type, exactly like the editor's own VPN page switches on it.

The half that is actually interesting

OpenConnect doesn't fit that shape at all, because it was never really a settings-and-secrets dialog. The widget version, OpenconnectAuthWidget, runs a whole login session: it drives libopenconnect on a worker thread, and the C library calls back into Qt synchronously to ask for a login form, validate a server certificate, or open a browser for single sign-on - and it expects an answer before it returns, because it's still in the middle of openconnect_obtain_cookie().

The trick the widget uses, and the one I had to keep, is that the callback doesn't wait on the GUI thread's answer via a blocking Qt connection. It emits a signal, then blocks itself on a QWaitCondition:

int OpenconnectAuthWorkerThread::validatePeerCert(void *cert, const char *reason)
{
    ...
    bool accepted = false;
    m_mutex->lock();
    Q_EMIT validatePeerCert(qFingerprint, qCertinfo, qReason, &accepted);
    m_waitForUserInput->wait(m_mutex);
    m_mutex->unlock();
    ...
}

The worker thread is asleep inside wait(), so the bool *accepted pointer it handed across threads stays valid for however long the GUI takes to answer - which for a modal QDialog::exec() was instant, but for a QML dialog the answer only comes back later, from a separate button click. So OpenconnectAuth (the new QML-facing class) splits every one of these callbacks into two halves: the slot that receives the signal just records the state and returns immediately, and a separate Q_INVOKABLE - acceptCertificate(), submitForm() - does the actual wakeAll() once the user has answered:

void OpenconnectAuth::acceptCertificate(bool accept)
{
    *m_certAcceptedPtr = accept;
    ...
    m_mutex.lock();
    m_workerWaiting.wakeAll();
    m_mutex.unlock();
}

Everything else - the dynamic login form built from oc_auth_form, the "changing the group re-submits" behaviour, the SSO web login - is the same worker thread, copied unchanged, talking to a QML WebEngineView instead of a QWebEngineView widget. The two share the same underlying Qt WebEngine types (QWebEngineLoadingInfo, QWebEngineCookieStore, QWebEngineWebAuthUxRequest), so the bridge is mostly mechanical - a WebEngineView.onWebAuthUxRequested handler calling straight into the existing OpenconnectWebAuth helper from the editor's SSO work.

Wiring it together

secretagent.cpp picks between PasswordDialog and PasswordPrompt with a type alias behind HAVE_KDEDQML, so the rest of the file barely changes:

#ifdef HAVE_KDEDQML
using SecretsPrompt = PasswordPrompt;
#else
using SecretsPrompt = PasswordDialog;
#endif

The one real change is that closing a prompt used to be m_dialog->deleteLater() scattered across cancel, reject, and kill paths; those all go through one closePrompt() now, which also closes the shared PromptWindow if there is one. bluetoothmonitor.cpp and modemmonitor.cpp get the same treatment for the mobile wizard and the PIN dialog - and the PIN one loses something along the way: it no longer calls QDialog::exec(), so unlocking a SIM doesn't block kded on a nested event loop anymore.

OpenConnect gets one more property on top of that, selfDriven, because the worker thread accepts the dialog itself once it has a cookie - there's no Ok button to press, only Cancel:

standardButtons: prompt.selfDriven ? QQC2.DialogButtonBox.Cancel : QQC2.DialogButtonBox.Ok | QQC2.DialogButtonBox.Cancel

Same BUILD_EDITORQML flag as before, just gating one more directory now.

What is left

The mobile broadband wizard, PIN prompt, and OpenConnect are all wired up now. What's left is test coverage for the new kdedqml classes, and the actual port to Plasma Mobile, since PromptWindow and the three prompts were built with a phone-sized layout in mind but haven't been run on one yet.

HAVE_KDEDQML and HAVE_OPENCONNECT both mean the widget path is still there, on purpose - nothing gets to come out until the QML path has actually been exercised end to end, tests included. And this was only the kded side; the applet's Handler::showConnectionEditor() still opens the widget ConnectionEditorDialog directly for WPA-Enterprise networks it can't join with a password alone, which is the other loose thread from last time and still isn't pulled.

Thanks, see you soon.

Tuesday, 15 September 2026

I'm Going to Akademy

It’s been 7 years since I last posted such a banner, and just today I remembered how I was always excited about this kind of posts, so here we go. I’ve also been to Akademy in W√ºrzburg 2 years ago, but didn’t post the banner for some reason (silly me!).

I haven’t really contributed to KDE for quite a while, but Akademy is always worth attending, even just to meet old friends again and make some new ones. Plus this year is KDE’s 30th birthday. KDE has been such a huge part of my life, so I am not going to miss such an anniversary.

Can’t wait to see you all in Graz soon!

Today we're releasing Krita 5.3.4 and 6.0.4, containing many bugfixes and improvements across the board. It also finally brings video exports to Android, which means you can now render animations and timelapses from the recorder. Apart from that, Arkady Flury has been improving Krita's icons at a steady rate. Thanks! Also of note: the GIMP XCF file import plugin has been removed. The plugin relied on a third party library that is no longer maintained and had many security issues.

Changelog

  • Don't allow to record images that are too big (2^29spixels)
  • Fix recorder export when some frames are missing
  • Disable long-press on canvas widgets (Bug 525361)
  • Fix layer thumbnails scaling when using display scaling
  • Fix openening large exr files
  • Fix writable resource path validator (Bug 521186)
  • Fix channel flags when converting the image's color space
  • Fix a rare crash when creating a new image on Windows (happens when the user holds a key while creating the image)
  • Fix a crash when a python plugin specifies an invalid action path
  • Fix resetting native touch gestures on configuration change
  • Fix issues with adding resource bundles and resources on Android
  • Fix a crash when "First Frame" shortcut is used when a file with a linked audio track is open. (Bug 524212)
  • Fix the recorder interrupting using tools (Bug 488472)
  • Fix potentional crashes with some fonts (Bug 523857)
  • Do not warn the user about active global selections masks when exporting a file
  • The comic manager plugin received several fixes for memory leaks and improved epub export
  • Support to render animations and export timelapses on Android.
  • Additional bundles in the Android supporter subscription: the latest SK3 pencil bundle, as well as the earlier SK1 and SK2 bundles.

⚠️ Warning

We consider Krita 5.3.4 suitable for productive work; 6.0.4 is, because of the many changes from Qt5 to Qt6 more experimental.

Download 5.3.4

Windows

If you're using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the Krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.

ⓘ Note

We are no longer making 32-bit Windows builds.

Linux

Note: starting with recent releases, the minimum supported distro versions may change. On Wayland, Krita is only tested against KDE Plasma's KWin. Other compositors may not be fully compatible.

⚠️ Warning

Starting with recent AppImage runtime updates, some AppImageLauncher versions may be incompatible. See AppImage runtime docs for troubleshooting.

MacOS

⚠️ Warning

With Krita 5.3.4 release minimum supported MacOS version has increased from 10.14 (Mojave) to 10.15 (Catalina)

Android

Krita on Android is still beta; tablets only.

Source code

Source code is the same as 6.0.4. See the 6.0.4 section.

md5sum

For all downloads, visit https://download.kde.org/stable/krita/5.3.4/ and click on "Details" to get the hashes.

Key

The Linux AppImage and the source tarballs are signed. You can retrieve the public key here. The signatures are here (filenames ending in .sig).

Download 6.0.4

Windows

If you're using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the Krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.

ⓘ Note

We are no longer making 32-bit Windows builds.

Linux

Note: starting with recent releases, the minimum supported distro versions may change.

⚠️ Warning

Starting with recent AppImage runtime updates, some AppImageLauncher versions may be incompatible. See AppImage runtime docs for troubleshooting.

MacOS

Note: minimum supported MacOS may change between releases.

Android

Krita 6.0.4 is not yet functional on Android, so we are not making APK's available for sideloading.

Source code

md5sum

For all downloads, visit https://download.kde.org/stable/krita/6.0.4/ and click on "Details" to get the hashes.

Key

The Linux AppImage and the source tarballs are signed. You can retrieve the public key here. The signatures are here (filenames ending in .sig).

Monday, 14 September 2026

KDE e.V., the non-profit organisation supporting the KDE community, is looking to hire a Software Infrastructure and Continuous Delivery Engineer to help improve our infrastructure that the KDE community relies on. Please see the call for proposals for more details about this contract opportunity. We are looking forward to your application.

The full call for proposals has more details.

Saturday, 12 September 2026

Welcome to a new issue of This Week in Plasma!

This week we released a beta of Plasma 6.8, and it’s ready for testing. Before branching, the team landed a lot of great improvements to make sure it’s an awesome release. Check it out:

Notable new features

Plasma 6.8

The Kup backup system has moved to Plasma! That means it will get regular releases, and we’re encouraging OS developers to start including it. It really works very well for off-device backups.

Notification about needing a new backup

Notable UI improvements

Plasma 6.6.7

Discover once again shows Snap versions of apps in the source selector menu rather than as separate apps. (Gabriel Kuznik, KDE Bugzilla #519204)

Plasma 6.8

The clipboard’s settings for how to handle copied image data and “MIME actions” are now a lot more comprehensible. (Tomáš Hnyk, KDE Bugzilla #348932, KDE Bugzilla #502274, and KDE Bugzilla #473882)

New New
Old Old

Changing the volume really quickly no longer causes irritating-sounding popping noises in the volume level preview sounds. (Jeremy Senkiw, plasma-pa MR #424)

On the lock and login screens, clicking the “Show On-Screen Keyboard” button (renamed from “Virtual Keyboard”) now always shows the keyboard as you would expect, irrespective of its typical visibility settings. (Kristen McWilliam and Nate Graham, KDE Bugzilla #467209 and plasma-workspace MR #7044)

The Input Method widget has been somewhat similarly overhauled. Now it’s primarily used to switch between on-screen keyboard visibility modes, but also lets you manually show the keyboard while an XWayland-using app is focused, because these apps don’t have support for making the keyboard appear automatically. (Kristen McWilliam, plasma-workspace MR #6876)

The Kickoff Application Launcher widget is now always big enough by default to fully accommodate all items in its sidebar, rather than sometimes being scrollable — occasionally by even just a few pixels, which was fairly silly. (Christoph Wolk, KDE Bugzilla #515175)

Notifications’ speed graphs now have better axis label padding. (Méven Car, plasma-workspace issue #151)

Job progress notification with better left axis label padding

Spectacle no longer shows a weird and misleading message about successfully copying the image to the clipboard after you use the “Share…” feature to share the image elsewhere. (Tobias Fella, spectacle MR #586)

Improved the keyboard navigation behavior of the Digital Clock widget’s calendar view. (Christoph Wolk, plasma-workspace MR #6900)

On System Settings’ Quick Settings page, the list of frequently-used pages is never just empty; now it shows a default set until you’ve used the app enough so that it knows what pages you frequently use. (Tobias Fella, KDE Bugzilla #522711)

Changed the percentages shown on the Power & Battery widget to use fixed-width “tabular numerals”, so other UI elements don’t slightly jump around as the numbers change when using some fonts. (Christoph Wolk, powerdevil MR #674)

If you have multiple panels with System Tray widgets on them, clicking the “Show Notifications” button on the “You missed some notifications” notification now only opens the notification history widget on the first/main panel. (Ameen Al-Asady, plasma-workspace MR #7028)

In the Clipboard widget’s history view, the inline buttons for the selected item now only appear when it’s hovered or when any of the buttons have keyboard focus. This makes it possible to make the buttons disappear so you can read all of the selected item’s text. (Christoph Wolk, KDE Bugzilla #520130)

Reduced a bit of awkwardness in the way you rename audio devices. (Tomáš Hnyk, KDE Bugzilla #508211)

Notable bug fixes

Plasma 6.6.7

Fixed a really weird bug in the Kickoff Application Launcher that could make phantom representations of apps in one category appear in other categories after you scrolled around there for a bit and then switched to the other category. (Christoph Wolk, KDE Bugzilla #515229)

Plasma 6.7.6

Fixed a weird bug that prevented moving focus from the password field of a network shown in the Networks widget back up to the widget’s search field. (Christoph Wolk, KDE Bugzilla #525321)

Plasma 6.8

Plasma no longer crashes if you query the wallpaper using D-Bus while the wallpaper settings dialog was open, and then switching wallpaper plugins. (Alperen Yildiz, KDE Bugzilla #525207)

Copying text in LibreOffice apps now adds it to the persistent history every single time, rather than only every other time. (Tomáš Hnyk, KDE Bugzilla #519510)

Middle-click-pasting text that was selected in a non-Qt-based app into a Qt-based app now works every time, rather than every other time. (Tomáš Hnyk, KDE Bugzilla #506325)

Fixed an issue that could make some tool settings in Spectacle’s full-screen annotation UI appear off-screen. (Mirko Laruina, KDE Bugzilla #524499)

Fixed an issue that could leave the wallpaper previews in the Activity Switcher sidebar all black, instead of showing the wallpaper. (Nicolas Fella, KDE Bugzilla #378693)

An invalid XWayland configuration file inside /etc/xdg/Xwayland-session.d/ no longer prevents KWin from launching XWayland at all. (Ilya Katsnelson, kwin MR #9894)

Entering and exiting full-screen mode no longer makes Task Manager tasks’ “I’m playing audio right now” indicators disappear or get stuck in a partially transparent state. (Christoph Wolk, KDE Bugzilla #522471)

Frameworks 6.31

Fixed a bug that made the “Frames and Outlines Contrast” theme setting not take effect in certain apps where it was expected to work. (Akseli Lahtinen, KDE Bugzilla #525364)

Manually setting your home folder to “Indexed” on System Settings’s Search page no longer creates an un-removable clone of that entry. (Nicolas Fella, KDE Bugzilla #487212)

Qt 6.11.1

Fixed a serious QML issue that could make QML-based UIs break with nonsensical property errors. (Fabian Kosmale, Qt bug #149607 and Qt bug #146886)

Notable in performance & technical

Plasma 6.8

KWin has gained support for the commit_timing Wayland protocol. (Xaver Hugl, KDE Bugzilla #513283)

Remote desktop connections now benefit from even lower latency. (David Edmundson, krdp MR #237)

Gear 26.12

System Settings’ KDE Wallet page has been ported to QML. (Nicolas Fella, kwalletmanager MR #78)

How you can help

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

Would you like to help put together this weekly report? Introduce yourself in the Matrix room and join the team!

Beyond that, you can help KDE by directly getting involved 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.

You can also help out by making a donation! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.

To get a new Plasma feature or a bug fix mentioned here

Push a commit to the relevant merge request on invent.kde.org.

Friday, 11 September 2026

Let’s go for my web review for the week 2026-37.


Making Social Media Social

Tags: tech, fediverse, social-media, community

Interesting approach. When friction to subscription is a good way to really build community.

https://tante.cc/2026/09/10/making-social-media-social/


Automattic CEO Matt Mullenweg Put on ‘Leave of Absence’

Tags: tech, blog, wordpress, business

Looks like the drama continues. I wonder where this will land.

https://www.404media.co/wordpress-automattic-ceo-matt-mullenweg-put-on-leave-of-absence/


Doomscrolling ourselves to death

Tags: tech, book, reading, tv, social-media, attention-economy, politics, history

The argument presented is maybe a bit too mechanical for my taste. That said there’s indeed something to be said about the decline in literacy and its consequences on our societies.

https://www.edwest.co.uk/p/doomscrolling-ourselves-to-death


Tristan Buckmaster’s statement on the Navier-Stokes resolution

Tags: tech, ai, machine-learning, gpt, mathematics, ethics, science

Shows some insights into the kerfuffle around the Navier-Stokes recent resolution. The behavior of OpenAI in this affair is ludicrous. In my opinion this is showing research malpractice… Why care about the scientific method when you have a shot at good PR?

https://cims.nyu.edu/~tristanb/statement.pdf


The function of LLM-based math “proofs”

Tags: tech, ai, machine-learning, gpt, mathematics, research, science

Is it badly conducted research for PR purpose? Who would have expected anything different? I wish we’d fund real science instead…

https://tante.cc/2026/09/07/the-function-of-llm-based-math-proofs/


Soft-deprecating re.match()

Tags: tech, api, python

Interesting way to deal with deprecation in Python. Indeed sometimes it doesn’t hurt to keep the not so ideal old name… but you want to push user code to know they miss an opportunity in readability by using the old name.

https://hugovk.dev/blog/2026/soft-deprecating-re.match/


A quick overview of atomics in C

Tags: tech, c, multithreading, atomics

Still need to understand atomics and memory barrier? This is a neat primer.

https://lemire.me/blog/2026/09/09/a-quick-overview-of-atomics-in-c/


Visualizing Rust’s Vtables: How dyn Trait Works In Memory

Tags: tech, c++, rust, memory, type-systems

Interesting exploration of how static and dynamic dispatchs work behind the scene in Rust. The chosen tradeoffs are different than in C++ and that’s something to keep in mind.

https://sofiabelen.github.io/projects/visualizing-rusts-vtables-how-dyn-trait-works-in-memory/


My HTML Boilerplate

Tags: tech, web, html

There’s a lot of important metadata in HTML pages nowadays… and there could be more than proposed here.

https://vale.rocks/posts/html-boilerplate


There’s No Limit to How Bad Code Can Get

Tags: tech, software, engineering, quality

Good point. The metaphors we use have obviously some limits. In the case of the “sinking ship” when used for software it doesn’t quite work as there’s no bottom…

https://zachkehs.com/blog/theres_no_limit_to_how_bad_code_can_get/


On Quality: What It Is and Why Products Get Worse

Tags: production, quality, craftsmanship

Very nice read about quality in general and why it’s really hard to define. It also explores how it can degrade over time in existing products.

https://www.worseonpurpose.com/p/on-quality


Degeneracy is a Symptom

Tags: history, economics, politics

Or why it’s stupid to judge people on their non virtuous behavior while at the same time fostering the structures which ensure that virtue does not pay. So indeed, some people read the odds properly and act accordingly…

https://henryfudgeofficial.substack.com/p/degeneracy-is-a-symptom


The Last Person to Know the Dictator Is Screwed Is the Dictator

Tags: history, politics

Build a good enough echo chamber and you won’t know you’re toast before it’s too late.

https://thegrimhistorian.substack.com/p/the-last-person-to-know-the-dictator


When Death Was a Relief

Tags: history

Such a wonderful species we are… not. Things can get really nasty when someone starts exploiting beliefs and gains some sort of power. And then, the blame game begins. Unfortunately it regularly happens.

https://m.youtube.com/watch?v=205swuI0JlY



Bye for now!

So... Koko needed a new icon.

Koko is KDE's image viewer, sharing its name with the rather famous gorilla, and yes, putting a gorilla in the icon would have made perfect sense... but we all love cats, and so did KOKO, so here we are 😀

And while making this ridiculously cute thing I kept thinking about something that has been bothering me more and more. Hopefully the cuteness of the cat will alleviate the ranty nature of what follows 🙂

Why is so much of what we design today so f...... boring?

We have incredible displays, GPUs doing absurd things, animation engines, shaders, QML, tools I could only dream about 20 years ago... and somehow so much of what we make with all of that looks like the same five rectangles arranged in slightly different ways.

Clean. and forgettable, austere but not in a brutalist way, its.... just booooring .

I've spent quite a bit of time recently bringing bits of old Oxygen back to life, and I know there is a temptation to read that as nostalgia, as if my answer is “look, things were better when we had shiny icons!”

It isn't.

I don't want the future to look like 2008.

In fact I think this sudden fascination with old interfaces, skeuomorphism, Winamp skins, old games, old icons and all the rest is a symptom of something else. People are looking backwards because they miss design having a personality. They miss opening something and actually having a reaction to it.

And now we have AI.

And f'ing..... makes the whole thing even more urgent to me. AI is spectacularly good at producing things that look like things that already exist. And if our design ambition was already reduced to producing safe, familiar, derivative variations of whatever everyone else is doing or that we have done... congratulations, they have automated it,.... and and I can't feel much more from such things... other than plain sadness.

So I don't want us to go backwards. I want us to go somewhere.

Make something NEW!!!

Make something strange. Make something excessive. Make something beautiful, ugly, funny, annoying, charming, stupid, brilliant, probably all of those at once. Make something somebody will hate enough to write a 14 rant bolg post about.

Just please make us feel something.

see you soon in aKademy for more ranting and maybe a beer or 2

Also played with this for the plasma-studio app. I think i can do better

OOOOO and OBVIUSLY if you want our sort of Crazy JOIN us in Oxygen, or KDE or anything

just go do stuf NEW stuf!!!!!!