Skip to content

Wednesday, 6 September 2023

Introducing the RiveQtQuickPlugin – Powerful Animations For Your QtQuick Applications

Rive is a popular tool for vector animations. While the editor itself is a closed source commercial product, there are FOSS implementations for the player runtime. basysKom has developed a QtQuick integration based on the rive-cpp library. This article introduces the project and its current state.

Continue reading Introducing the RiveQtQuickPlugin – Powerful Animations For Your QtQuick Applications at basysKom GmbH.

Monday, 4 September 2023

The other week the question came up how one can debug an application crash when the Windows Store crash tracking system is unable to produce a usable stack trace. Seemed a good enough opportunity to share some wisdom :)

Generally speaking in order to get a stack trace you first need a minidump. minidumps are kind of like core dumps on POSIX systems, well, except, mini. Acquiring that is should be your first goal.

There are a million ways to get a dump, I’ll highlight two of the easiest that I know of.

Partner Center Dumps

Ideally the Microsoft Partner Center will have a dump for you. You can find it usually where the stack trace is as well. To get access to KDE’s applications you need to be a KDE developer and file a sysadmin request. Once you have access you have to head from the Dashboard to Insights then navigate in the left hand pane to Health there use the drop-down to select the application you want to look at. This should give you every bit of information about the application health your heart could desire. You’ll probably also want to switch from viewing the last 72 hours to the last month, unless the application is particularly faulty of course.

Now all you need to do is click on the crash you want to look at, and not get too annoyed over the unknown crashes you can’t do anything about 😡.

At this point you should be able to find a stack trace link and an additional download link. Sometimes the download link is not there, I have no idea why but I’m sure it’s documented somewhere. The download link is what we are after, it contains the minidump along with some other metadata.

User-Mode Dumps

Now, sometimes the partner center is not able to help us for whatever reason. Maybe the download link is missing, maybe it just doesn’t show the crash we are after, maybe the dump on the partner center is useless. Who knows. In that case we need some help from the user. Thankfully it’s not too painful. They need to enable collection of user-mode dumps by creating the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps, which then causes the Windows Error Reporting to throw a minidump into %LOCALAPPDATA%\CrashDumps. The user then needs to reproduce the crash and obtain the dmp file from the aforementioned location.

Debug Symbols

Once you have obtained a minidump it’s time to find us some debug symbols. The sad truth here is that I can’t really help with that. Depending on how your application was built you’ll be able to get PDBs somehow hopefully. They will either float around as PDBs somewhere or at the very least will be available inside the .appxupload or .appxsym zip files. As a general best practice for KDE software I would advise that when you do a binary release to the Windows Store you also release the x86_64-dbg.7z file to download.kde.org so we can get the relevant PDBs when needed.

Tracing

Alright, I hope you had luck with finding your debug symbols, because now it’s time to do some tracing! Whee. You’ll need Microsoft Visual Studio. Any edition will do. File->Open->File... the minidump and you should be greeted by a nice overview of metadata about the crash.

First we’ll want to setup our debug symbols. For that you first want to place your PDBs somewhere in convenient in your file system. I’m lazy and usually just slap them on the Desktop. In Visual Studio you should find the option Set symbol paths in the right hand list of actions. The option opens the settings window on the correct page. Simply hit the ➕ and type out the path where you extracted the PDBs.

Once the symbol paths are set up you can hit Debug with Mixed and off the tracer goes. Slowly, because it needs to download a million symbols. But eventually you’ll arrive at your stack trace.

(nevermind my crazy setup, I was doing some wonky multi threaded debugging earlier and don’t know how to restore the UI 😅)

Hope this helps some!

Saturday, 2 September 2023

New Falkon version 23.08.0 is being released as part of KDE Gear.

Notable changes

Zoom indicator to the AddressBar

When the zoom level on the page is different than the default, show current zoom level in the address bar.

Address bar with zoom label
Address bar with zoom label

Expand address bar suggestion popup to the window width

It is possible to widen the address bar suggestion popup to the window width. This option is disabled by default, but it can be useful on smaller screens.

Expanded address bar suggestion popup
Expanded address bar suggestion popup

Permanent certificate exceptions

Certificate exceptions can now be stored indefinitely. There is also a GUI to see and manage the current exceptions which is located at [Preferences > Other > Certificate Exception Manager]

Contributed by Javier Llorente.

Certificate exception Manager
Certificate exception manager

Changelog

  • A bit faster restoring of session with a lot of tabs
  • Add support for custom URI schemes (BUG: 434099)
  • Add CMake option “BUILD_PYTHON_SUPPORT” to enable/disable Python support
  • Add zoom indicator to the addressbar (BUG: 399001)
  • Add an option to expand addresbBar suggestion popup to the window width
  • Implement a GUI for managing ignored SSL hosts (by Javier Llorente)
  • Add KDE branding bookmarks and speeddial entries (By Javier Llorente)
  • Implement download integration with Plasma (By Javier Llorente)

Download: ffalkon-23.08.0.tar.xz (sig signed with EBC3FC294452C6D8)

Thursday, 31 August 2023

Updates

Hardware

Case & Dimensions

First impressions start with the outside look and while I was concerned about that the silver colour would get on my nerves – it is OK really.

What is not just OK, but abso-bloody-lutely amazing is the custom engraving on the laptop lid Slimbook did for me. It is a Conant Gasket fractal and I have to thank María Hornos at Slimbook for both patience and perseverance in making this engraving a reality.

Slimbook Pro X 14 lid with a custom engraving, showing the Conant gasket and the Slimbook logo.

Size comparison of the closed laptops.

Slimbook Pro X 14 (14" display):

  • length: 320 mm
  • width: 212 mm
  • min. height: 18 mm
  • max. height: 20 mm

Lenovo ThinkPad X230 (13" display):

  • length: 305
  • width: 209 mm (233 mm, including the battery bulge)
  • min. height: 24 mm
  • max. height: 36 mm

Dell Latitude E7470 (14" display):

  • length: 335 mm
  • width: 233 mm
  • min. height: 20 mm
  • max. height: 22 mm

True to its name the case is very slim and in fact slimmer than both my old laptops. When it comes to the length and width it fits just between the two.

The fan intake is quite big and at the bottom side, with the outtake being at the back between the hinges. On low load, it is (quasi-)silent, during some serious load it is still much more quiet than either of my two old laptops and their old fans.

Input: Keyboard, Touchpad & Camera

To be frank, my very first impression of the keyboard and touchpad were that I felt a bit disappointed. These are not keys that I am typically used to and I tend to prefer harder keypresses. I also never had a touchpad with no buttons.

But it did not take long for me to get used to both and I can say they are both growing on me.

Amongst other things I wrote this blog post on the Slimbook and I must say after just one day I might even prefer this keyboard over the one on my work Dell Latitude E7470 (unsure yet about the ThinkPad keyboards).

It may be relevant to meniton that my daily driver is a Keyboard.io Model 01 with Matias Quiet Click modern Alps-mount key switches with a strong tactility and dampened on the down- and up-tick. When it comes to laptops, so far I was pretty pleased with ThinkPad’s keyboards (the older the better). On the other hand, Apple’s chiclet1 keyboards feel very wrong to me – I really tried, because at some point it looked like I will need to use a macBook at work, but I just cannot get used to them.

While a low-profile laptop keyboard will likely never2 has a typing-feel as satisfying as a mechanical keyboard, I did not think I would enjoy typing keyboard as much as I do. For some reason – and this surprised me quite a bit – the weird tiny Up and Down navigation keys work fine for me too.

One feature the ThinkPad keyboard has that sets it apart is its liquid drainage. I will miss that peace of mind when it comes to spillage.

With the button-less touchpad it took me a bit longer to get into the groove, but I can now say I am a convert of multi-finger gestures.

For me, I think the touchpad is of a good size – just big enough to be comfortable for gestures, but not as big to have my palms meddle with it while I type.

I also really like how the touchpad has a small led indicator in the corner to show when you turn it off.

The camera is not great though. Not the worst, but I would have expected more in 2023, even if just for video conferencing. The IR camera is a cool addition though.

(I did not try the microphone. I usually use a headset when I need to anyway.)

Output: Screen & Speakers

The screen impressed me quite a bit – the picture is much sharper and the colours prettier than I thought they would be.

I find the speakers to be OK. Nothing earth-shattering, but they can be loud enough and the sound quality is not bad. Honestly, I have had much worse before.

Ports & Misc

The one thing that is a bit underwhelming is the power supply. The cable feels a bit flimsy, but at least it is quite small.

The other thing that I miss from my ThinkPad is an always-on USB port, so I can e.g. charge my phone on the go, even if my laptop is asleep.

On the topic of USB ports, I do not understand why there is a USB-2.0 port – that one could have been safely replaced by a second USB-C.

I love the RJ45 jaws though :] – the laptop is too slim for an ethernet port, so it expands with a hinge that looks like a jaw.

Oddly enough, the Asus external DVD-RW drive requires 2 × USB-A to work – I suspect due to the power consumption. Perhaps USB-C might have been a better choice. The glossy case is not really to my taste and the drive is a tiny bit loud, but it seems to work fine.

The mini-dock makes a much better impression than on the pictures and while so far I only tried it as an USB hub, it works as expected. I even tried to plug in both USB-A plugs from the DVD and it went fine.

I find it a bit annoying that there is no LED on the outside, so with a closed lid I cannot tell if the laptop is on, off or sleeping. But I did notice that – no idea if that is by design or a fluke – the LED can be seen from the back through the air vents. So that works for me.

Software

Initially I planned to only take a quick look at the hardware, but as luck would have it Slimbook was kind enough to ship the computer with Ubuntu 22.04 LTS plus their own tools.

That gave me an opportunity to kick the proverbial tires a bit more seriously and also a chance to try out GNOME and Wayland.

Ubuntu

It should not come as a surprise, this is not my first time with Ubuntu(-based distros), but things have obviously changed since I last ran KUbuntu.

In the two days I have used the laptop so far, the system had two updates and both went well.

What I am a bit confused with though is that nowadays there are several graphical package managers installed: GDebi, Ubuntu Software, Software, and Software Updater are all separate applications. To complicate things further some packages come via Snap, others via Flathub and (seemingly only) a handful from actual APT.

During the two days I did manage to cause one crash (Doom (2016)) and one freeze.

Slimbook tools

Using the IR camera’s face-recognition to login using Slimbook Face is pretty cool and practical if you use your laptop in open most of the time. It is especially handy when you are installing things and it instead of having to break away from whatever you are doing and type in a password (on time), the little red square at the top just flashes twice instead.

That said, most of the time my laptop’s lid is closed and I use an external monitor and keyboard, so on a day-to-day basis this is of limited use to me.

About Slimbook AMD Controller and Slimbook Battery, I suspect it is just a handy UI for standard Linux settings, in which case I will be happy to set the settings directly. Then again, it is sometimes handy to have things in one place in a UI.

GNOME

I have been using KDE (Plasma) since 1.x, with occasional visits to other DE and WM. So this was a perfect opportunity to try out GNOME after many many year. And it was running on Wayland as well!

The first impression was that everything looks very sharp and pretty. I cannot say if this was because of AMD Vega, Wayland, the screen or what, but it was quite an improvement even over the Dell Latitude.

What I really like though is how the Super/Meta/Win key opens up a very useful overview – I hope the upcoming overview on Plasma will be similar, but include Activities too!

The three-finger gestures are also something I got used to really quickly and I would love to see in Plasma!

What bothers me quite a bit though is that the “this application is taking a long time” pops up way too quickly and often – I see several a day.

From the PIM side, Geary is just too simple for my use. I do somehow like the simplicity of the Calendar app though. I am not sure yet how it would work in the long term, but it worked well.

In a nutshell I can see the appeal – it does have a certain elegant simplicity to it –, but there were several occasions where it was not doing what I want it to and I could not figure out how to make it.

That said, if I was forced to use it, I would be OK with it. I still much prefer KDE Plasma (perhaps even i3 / SwayWM).

Gaming

If I already have a Vega 8 graphic card, I tried a few games both from Steam and GOG and it started as a mixed experience, but after I messed with Proton a bit, I am now (reasonably) impressed – for a mobile graphics card it performs pretty well. Then again, I have not had a dedicated graphics card in decades, so take that with a grain of salt.

It started off a bit depressing since I could not get Doom (2016), Redout: Enhanced Edition, and Divinity: Original Sin 2 to run on Steam – Doom actually crashed the desktop session. Everspace on GOG also did not start at all.

On GOG, Fort Triumph installs and runs, but not as well as I would hope.

On the other hand, the following work like a charm and survive pretty high settings and full HD:

  • BallisticNG (max. settings)
  • Epistory (very high settings)
  • Pychonauts (very high settings)
  • Return to Monkey Island (max. settings)
  • Secrets of Rætikon (max. settings)
  • Unvanquished (max. settings, ran as part of the phoronix-test-suite)
  • Ziggurat (high settings)

I suspect I either have something wrongly set up with Proton or the issue is connected with (Proton on) Wayland.

Yes, it was a Proton issue. With the help of ProtonDB and some internet searching, after tweaking some Proton settings in Steam I got the following to run fine:

  • Redout: Enhanced Edition (high, but not epic settings)
  • Valkyria Chronicles (max. settings)
  • Wasteland 2 (performance not great)

For Doom (2016) I needed to edit its config file to force it to use Vulkan (instead of OpenGL) to stop crashing Wayland. It still performs like crap, but it runs, so that is progress.

As for Everspace, the trick was to run EverspaceWithSystemLibraries.sh instead and then it ran fine even on high settings.

Divinity 2 remains a mystery, why I cannot get it to run. But at this stage, it is the only game I have not managed to get running eventually. So that is a huge improvement.

As launchers I tried Lutris and GameHub too and had a better experience with Lutris. Some games simply did not want to install on GameHub, but on Lutris there was no problem.

BTW, when did PC games become so massive? … 40 GB per game, seriously?!?

Benchmarks

I ran some benchmarks with phoronix-test-suite (not that I can tell much from them) and uploaded them to OpenBenchmarking.org, if you are into that stuff.

Miscellaneous

I was surprised how good LibreOffice runs and looks – I know! I never thought I would say that!

As for Thunderbird, I have do admit it has improved a lot since I last used it, but I still much prefer Kontact/KMail. What surprised me too is that it does not allow for special characters in the From: field.

I have mixed feelings about Marker. In principle I like the concept and also how clean it is, but something felt off, especially with the font size and the settings, so in the end I wrote this blog post in the standard GNOME Text Editor.

I have similarly mixed feelings about Apostrophe. It is very similar to KDE’s GhostWriter, but for GNOME. But you cannot change the editor font and its syntax highlighting is very limited. It may be due to Wayland and new hardware, but it perhaps feels a bit cleaner, but is also (too) limited in features.

Next time

Next step: start of installation.

I hope to write blog posts while I am doing the installation and set-up. So far the idea is that I would have smaller posts for each of the bigger steps (instead of one giant HowTo).

As such the next blog post should be about a simple install of EndeavourOS on a LUKS-encrypted Btrfs.

My plan is to first create a simple Btrfs and turn it into a RAID-1 Btrfs later on with btrfs balance start -dconvert=raid1 -mconvert=raid1. Fingers crossed!

… but spanners may meet cogs at weird angles, let us see.

hook out → day two with Slimbook, so far so good


  1. Some of their old Alps keyboards are a piece of legend though. 

  2. If we ignore the more crazy machines like the MNT Reform and the Balthazar BPCD which cram full mechanical keys into that. 

Tuesday, 29 August 2023

As promissed the last time, here is my crazy idea …

Updates

  • added Baloo fix for Btrfs, which is now scheduled for KF 5.111

Operating system / distribution

This time round, I will go for EndeavourOS.

Cue “I use Arch, BTW” jokes ;)

Why would I want to do this to myself?

Good question!

Honestly, because I fell it is time I had some fun with my system again (and GNU HURD is not ready yet1) and get my hands a bit dirtier. If it turns out it will take me too much time and effort, I will find something else.

I have used Manjaro for the past few years, and used Gentoo for a decade, so I feel like an(other) Arch(-based) distro is well within my reach. I chose EndeavourOS over vanilla Arch, because I do not want to do it entirely from scratch2 and EndeavourOS has a great forum and community.

With a rolling release distro like Arch though one can inadvertently update oneself into trouble. But this is where my biggest complication comes in …

File system

… that is right, the file system – The most common way to mess up your computer, seconded only by a typo in rm -rf3!

I am not a file system expert

If you have not noticed yet, I am not an expert in the field and I only half-grasp some of the concepts … on a good day! Please read up yourself if you want to venture down this rabbit hole.

Things may be wrong in this blog – if you spot something that you know is false, please let me know and I will correct it.

That said, I spent way too much time reading dozens of articles and forum threads on different file systems and set-ups while waiting for my new laptop to arrive, so I will try to explain my decision and enhance it with the most relevant links.

Btrfs

The obvious solution to the problem is, of course, making snapshots of the system. And Btrfs is one of the file systems that does this really well. It takes up minimal extra space and you can switch between them on the fly.

I dipped my toes into Btrfs and tried to use snapshots as backup before, but reverted back to Ext4, because I did not really understand it all and as such I also did not fully implement it. Which is commonly well known as “not a smart way of doing things”.

This time I am not going to use snapshots for (quasi-)backup purposes, because I am quite happy with my current backup system, but intend to leverage their superpowers for reverting back to a snapshot on the fly.

The idea therefore is that the system would automatically make a snapshot of the / subvolume on every update.4 So if anything goes wrong, I could simply boot into the snapshot before the mistake happened and wait for an update that works.

I also wanted to have a COW file system because it is said data on it is safer … and cows are cool (got to remind you how very little I know about these things! ;))

Another major reason is that Btrfs is capable of self-healing from bit rot and other disk degradation, but more on that down below.

There are some caveats with Btrfs though:

  • support for RAID-5/6 is still not stable – but I did not want to use those anyway;
  • there is an ongoing issue that on Btrfs Baloo reindexes everything after every reboot – but there is a patch out there already which fixes it, it has just not been merged into the upstream yetit was merged and will be part KDE Frameworks 5.111 release; some distros are already applying it though;
  • making snapshots (too often) can degrade SSD faster – so a smart subvolume plan is in order to decide what to snapshot and what not.

Why not …?

I did consider others file systems too, of course.

The following links I found pretty useful:

Ext4

Tried, tested, stable, apparently still(?) the fastest file system on SSD – that is the venerable Ext4 alright.

Why not then? Two reasons really:

  • it is not as exciting, and while I messed up a Btrfs set-up before, I messed up a LVM + Ext4 set-up before as well, so ¯\_(ツ)_/¯;
  • I really want to make use of snapshots to be able to roll back messed up updates and bad decisions.

ZFS

I never built up the courage to set up ZFS and from what I understand you need a lot more than two drives to make proper use of its features. And the Slimbook has “only” two M.2 slots.

It also sounds like it would be much more work to set it up on Linux (licensing questions5 aside).

XFS

I have close to no knowledge of XFS apart from that it quietly became a default in Fedora, instead of Btrfs. So my decision against it is based solely on the fact that I have some prior experience with Btrfs and that Btrfs is more commonly used.

It also seems that XFS is also more susceptible to bit rot and it is much harder to restore lost data from it.

Bcachefs

Wow! Bcachefs just sounds like the future! Like the best parts of ZFS and Btrfs and XFS, but made cleaner and better and more modern and … and … YEAH!!

(I apologise, this is very much way over my head.)

As for why not Bcachefs, it is not yet included in the Linux kernel – and if it the kernel devs do not consider it to be ready, I would rather not risk running it as a primary (encrypted, to boot!) file system on my primary machine.

Definitely a file system I will keep an eye on to potentially use it a few years from now!

Reiser5

Now that is a name you probably did not hear in over a decade!

Separating the artist from their art, ReiserFS was/is a great file system, especially for a lot of (very) small files that change often.

I remember using ReiserFS 3 for Portage files on Gentoo (on HDD) and it was a huge boost in performance!

From what I can tell neither Reiser4 nor Reiser5 where merged into the Linux kernel yet. And honestly, I am a bit concerned that with not many people talking about it, it would be difficult for me to find any help, when I inevitably mess something up.

LUKS

Since I cannot recall when was the last time I used a laptop that did not have a full-disk encryption, LUKS is happening, period.

I realise that this does not prevent from several attacks, but it does prevent from certain attacks, which I am OK with.

I am playing with the idea of having the /boot/ partition6 (or the decryption key) on a small USB stick, but that may be a complication I will postpone for another time.

There are some caveats though …

  • depending on the attack vector you are concerned about, LUKS on SSD may not be as secure as LUKS on HDD simply due to SSD erasing data less frequently to avoid degradation of the drive – check §5.19 of LUKS FAQ – should be fine for the most common use risk of a randomly stolen laptop though;
  • furthermore, using TRIM on an encrypted SSD can make it near impossible to restore;
  • currently LUKS2 – which is much improved over LUKS1 – does not run on GRUB – at least not out of the box. Systemd-boot does though, but it looks even uglier than LILO and I have not figured out yet how hard is it to set up to boot from snapshots. Will need to think about this a bit more, but am leaning towards either the Argon2- and LUKS2- patched GRUB or just using LUKS1 until GRUB catches on and then upgrade my disks to LUKS2.

RAID

To levarage the magic of Btrfs (or ZFS) to self-heal the file system if sectors on the drive corrupt, you can set two or more physical drives into RAID-1 (or RAID-10).

This is exacty what I intend to do – put two similar SSD, but different brands/models into a Btrfs RAID-1. Also if one of the drives fails completely, I can7 simply remove the faulty drive and re-add it to the RAID array.

Here it is important to note that block-based RAID does not help here, it needs to be a file-system-based RAID for the file system to be able to self-heal.

Again, caveats …

  • apparently if you put Btrfs into RAID you cannot use Swapfiles for your swap, but need to create a separate swap partition(s) – I will probably just create a swap partition on each SSD and add both to the swap pool.

Defaults are fine

I spent way too much time reading up on mount options to optimise SSD, TRIM, etc. There are so many pros and many cons, and above all there are massive caveats.

Watch out for outdated info!

In the past decade things have improved immensely when it comes to SSD technology, its support in Linux and Btrfs.

With that, also the defaults have adapted to reflect these changes.

If you are looking into overriding the defaults, make sure you are not reading outdated articles!

As an example of the above issue, I was reading up TRIM optimisations and the caveats of different combinations of file systems, RAID, encryption, etc. … until several articles in, I found a message on Linux RAID mailing list that stated that modern (i.e. from 2012!) SSD not only do not necessarily require TRIM any more, but forcing TRIM on them could actually have the opposite effect and degrade the SSD faster.

If you want to dive into SSD optimisations, I found the following resources the most useful (mind the warning above!):

Reading through that list and a few other things, what I learnt – in very broad strokes – is that a async TRIM is by default enabled on Btrfs if the kernel recognises the drive to be SSD, but if LUKS / dm-crypt is used it will override that default to not TRIM. Then there is also a list of specific SSD models coded into the Linux kernel, where the kernel itself will disable features that those drives cannot safely handle. And I am sure this is just the tip of the iceberg.

Ultimately … the defaults are sane and safe, whatever they end up being :) So change them only if you really know what you are doing.

Tmpfs

Tmpfs is this magic thing that mounts a section of your RAM as a block device, primarily with the intention of storing your ephemeral temporary files (typically /tmp/, but often /run/, /var/run/, and /var/lock/ too) into RAM instead of the SSD or HDD.

This great for performance, since RAM is much faster even than SSD, so storing caches there makes sense. It is especially great for use with SSD because using Tmpfs can greatly reduce the writing and deleting of data from the drive.

A further trick I recently found out about is to put the browser cache, or even the whole browser profile, into Tmpfs. Similarly this both preserves the SSD a bit and also apparently greatly improves browser performance. With 32 GB of RAM, I think I can afford testing this out :)

There are several approaches to this, and I have not made my mind up yet, which one I will adopt:

Oh, and you can totally also compile directly on Tmpfs, but you really need enough RAM for that.

Backups

Of course, just RAID for hardware failure (especially encrypted) is not enough of a guarantee that no data will be lost, so I fully intend to continue using Borg backups.

What will likely change though is that I will migrate from (my fork of) Demure’s script to Borgmatic8.

Wayland

At least initially, I will try how Wayland works.

I am cautiously optimistic, but also half-expect to move back to X11 for a few more months, if some things are still broken.

I hope I am wrong though and can see Wayland + Plasma improve in time.9

Next time

Yesterday I received my Slimbook Pro X 14.

Unexpectedly, it did have a working OS already installed, so I started playing around with it a bit. So the next blog post will be about first impressions of both the laptop and a distro and DE that I rarely interact with.

hook out → laptop arrived! excitement levels through the roof!!!


  1. Ha! I am full of crap jokes today! 

  2. I have done Gentoo from Stage 1 back on Gentoo 1.2 or 1.4, and warmly recommend it to anyone who wants to learn about how Linux works and has time for it. I do not have the time for such adventures nowadays. 

  3. I just made that up. But it is true that I am still sitting on my second-to-last crazy file system experiment – a LVM RAID-1 set-up with a single surviving HDD – and I still need to muster up the courage to try and rescue the photos from it. 

  4. There are also Linux distributions that do this at a more granular level as an integral part of their package manager – NixOS and Guix come to mind here. 

  5. I know SFLC said it is OK and I agree it is a sensible interpretation of GPL-2.0’s text. Whether that is a consequence the drafters of GPL-2.0 intended, is a separate question. 

  6. As a side note, when I was still on Gentoo and regularly compiled my own kernel, I used to keep /boot/ on a separate partition that was Ext2 and was not in /etc/fstab. So I had to remember to mount it every time I upgraded or modified the kernel. IIRC the point back then was because 1) booting from Ext4 was a problem in early GRUB, 2) you need /boot/ only when you actually boot and when you update your kernel, and as such 3) you do not need a journal for /boot/. I suspect there is no need for /boot/ to be treated that way anymore. Happy to be told otherwise! 

  7. I hope so, I am still a bit scared after the LVM RAID fiasco. 

  8. Even Demure himself said that might be a good idea. 

  9. I have a pang of nostalgia for those days where with every update on Linux you saw a major improvement. One update, you could hear music and sound effect at the same time; the next a modem would start working; monitors would get auto-detected; then USB got much faster … It was truly a time of wonder (but also of broken installs, expensive hardware and frustration). 

One design characteristic of our QtWidgets is that they contain a lot of frames and frames inside other frames. This worked well with Oxygen style and its skeuomorphism shadow, less so with Breeze.

I first thought this was inheriten with QtWidgets and couldn’t be fixed without much effort. But fortunately, after looking a bit into Qt source codes and in particular in the internals of QDockAreaLayout, I discovered that the engine to draw and style the built-in components of QtWidgets: QStyle has a QStyle::PE_IndicatorDockWidgetResizeHandle primitive which allows drawing separators between detachable docks and similarly there is QStyle::CE_Splitter to paint the separator between elements inside a QSplitter. This is huge because this means instead of drawing frames, we can render separator and then get rid of most of our frames in our apps.

This is how Qt Linguist tool looks like with this change.

Linguist with instead of using frames for each dock, use separators
Linguist with instead of using frames for each dock, use separators

Unfortunately, there are still some places where we do want to draw frames, so we can’t remove them all. I added a heuristic that tries to determine when to draw one based on the spacing and margins of the parent layout. A heuristic is never perfect, but an app can additionally force the style to display a frame or vice versa force the style not to display it.

For more complex apps (read with more custom components), this change require a bit of tweaking but with a handful of one-liner in Kate, I got this modern look.

Kate without frames
Kate without frames

This is not perfect yet and this will require a bit more tweaking around the tab bar, but is already a big departure from the current style.

Similar, this is how Dolphin and Ark, look with these changes:

Dolphin with a frameless split view
Dolphin with a frameless split view

Ark with 3 panes, one on the top left with a the archive content, one on the right with the name of the archive and one on the bottom left with the archive comment
Ark with 3 panes, one on the top left with a the archive content, one on the right with the name of the archive and one on the bottom left with the archive comment

If you like this change, don’t hesitate to put a 👍 on the pending MR, and if you are a developer, please test your app with this change and look at how I adapted a few apps already. I tried the change with some big apps like Krita and Kdevelop and it looks good, but the more testing, the better it is.

MauiKit: A Toolkit for Multi Adaptable User Interfaces.

Today, we bring you a report on a brand-new release of the Maui Project.

We are excited to announce the latest release of MauiKit version 3.0.1, our comprehensive user interface toolkit specifically designed for convergent interfaces, the complying frameworks and in-house developed set of convergent applications.

Built on the foundations of Qt Quick Controls, QML, and the power and stability of C++, MauiKit empowers developers to create adaptable and seamless user interfaces across a range of devices, and with this release, we also mark the active beginning of the migration to a new major version – the upcoming MauiKit 4 release – which has been kick started by already started porting Maui Shell to MauiKit4.

 

Join us on this journey as we unveil the potential of MauiKit3 for building convergent interfaces and discover the possibilities offered by the enhanced Maui App stack.

 

Community

To follow the Maui Project’s development or to just say hi, you can join us on Telegram: https://t.me/mauiproject.

We are present on Twitter and Mastodon:

Thanks to the KDE contributors who have helped translate the Maui Apps and Frameworks!

Downloads

You can get the stable release packages [APKs, AppImage, TARs] directly from the KDE downloads server at https://download.kde.org/stable/maui/

And if you are feeling a bit curious about the Maui DE, you can download a new Manjaro-based image for **testing** the project’s state as a snapshot of MauiKit3.

https://master.dl.sourceforge.net/project/nulogicos/maui-shell/ISO/manjaro-maui-shell-23.0.0-minimal-230731-linux515.iso?viasf=1

Note: Please be aware that this is an ISO image from a third party.

What’s new?

With this update, we have focused on setting the groundwork for the ongoing migration to the Qt6 stack – this meant refactoring and tweaking the code base to be able to have the MauiKit Frameworks working with Qt5 and Qt6.

Keeping compatibility with Qt5 during the migration, will help us to maintain the stability of all Maui Apps and keep on working on them with minor changes; while the effort shifts into shaping the new major version of MauiKit -based on Qt6. This is where a bunch of new changes has been – and will bee – introduced, for example by renaming the MauiKit target names to keep the version compatibility. MauiKit based on Qt5 is now named MauiKit3 and the upcoming version will be MauiKit4, which should be ready for early 2024.

At the moment of this release, most of all the MauiKit Frameworks are already fully ported to Qt6 and working as expected. This migration will probably introduce API changes and more refactoring- resulting in renaming and cleaning up bits of code everywhere- which will be a great opportunity to finally introduce to the users some fine and proper documentation, and hopefully draw more attention to third-party developers already interested in the project.

As part of the documentation effort, now MauiKit4 has a demo application, where you can live-test all the convergent UI components from the Core module; the MauiDemo4 application is bundled when building the new MauiKit4.

For those interested in trying out MauiKit4, the feature branch of the porting to Qt6, has already been merged into the master, and all needed to build MauiKit4 is to set the flag:

 -DBUILD_WITH_QT6=ON

So, to make it concise: this cycle of development was focused on porting MauiKit Frameworks to Qt6, which resulted in MauiKit4, while keeping backward compatibility. Why? This way we can focus on developing Maui Shell and all its components with MauiKit4 while the stacks of Maui Apps stays stable with MauiKit3 during the whole process. Upcoming releases will now only introduce changes to the Maui Apps and MauiKit4 – MauiKit3 is now frozen.

As part of this new release, Maui Shell has been fully ported to Qt6 and MauiKit4, but more information about it later. With the migration plan to MauiKit4, the sub-project organization namespaces will be renamed to follow a more coherent structure and hierarchy :

The MauiKit framework will now follow this scheme:

maui.kit.controls
maui.kit.terminal
maui.kit.filebrowsing
maui.kit.imagetools
maui.kit.calendar
maui.kit.documents
maui.kit.accounts

And the Maui Shell’s component shceme :

maui.cask.controls
maui.cask.mpris

The Settings modules:

maui.settings.controls

The system core components:

maui.core.power
maui.core.sound
maui.core.network

MauiKit3 Frameworks

At the core of the Maui Project lies its foundational framework, MauiKit Controls, which provides a comprehensive set of template controls for creating user interfaces. In this latest release, alongside with porting to Qt6, we have made small improvements to MauiKit Controls, focusing on enhancing its consistent user experience, and tweaking minor details.

As part of the migration process, all of the frameworks have been bumped to use the same version scheme: 3.0.1 for MauiKit3; and starting in 2024 the version will be bumped to 4.0.0 for MauiKit4.

Controls & Style – [3.0.1]

  • Now makes use of the QQC2 Dialog component, instead of a custom Popup.
  • Separate Dialog from Popup, and introduce the variations template components: InfoDialog, InputDialog, and PopupPage.
  • Styled the SplitViewItem with floating style in desktop mode.
  • Ported to Qt6.
  • Clean up the style for Qt6, removing references to Controls imports.
  • Reused private ToolBarSection controls for the TabBar control.
  • Fixes to the ApplicationWindow borders with CSD.
  • Fixes issues with the ComboBox style and its Popup child.

 

A script element has been removed to ensure Planet works properly. Please find it in the original post.

 

FileBrowser, TextEditor, ImageTools, and Accounts – [3.0.1]

MauiKit FileBrowsing, has been fully ported to Qt6 and can be built using the same method as mentioned before with MauiKit4. The other frameworks are only partially ported and should be fully working with Qt6 by November 2023.

A few issues with the TextArea were also resolved.

Documents,  Calendar & Terminal– [3.0.1]

Updated to the latest MauiKit Controls changes. MauiKit Calendar has been updated to the latest changes in the Akonadi Frameworks.

MauiMan

Now has been ported to Qt6 and maintains compatibility with Qt5. Target names follow the same scheme as MauiKit, MauiMan3 for MauiKit3 and Qt5, and MauiMan for Mauikit4 and Qt6.

The binary follows the same convention: MauiManServer3 and MauiManServer4, both of which would work.

Maui Apps

The Maui Apps cover a wide range of essential functionalities, including a file browser, music player, text editor, image viewer, notes taker, video player, web browser, and calendar. In this latest release, our focus has been on updating them to use the new MauiKit target names and its newly introduced changes, for keep on developing on them for the next cycle..

It’s worth noting that some of these Maui Apps are also available on Android, making them accessible across multiple platforms. Furthermore, these apps are designed to work flawlessly on Linux phones, tablets, and desktop computers, ensuring a consistent and seamless user experience regardless of the device being used.

The next cycle will be focused on updating and fixing issues on the Maui Apps themselves.

 

 

Maui Shell & Maui Settings

Maui Shell has now been ported fully to Qt6! This means that Qt5 is not longer supported and now it depends on MauiKit4. The idea is to keep on developing MauiKit4 along with Maui Shell, while Maui Apps remain stable with MauiKit3.

The general plan is to have a stable release of Maui Shell by the time MauiKit4 comes out, around the first quarter of 2014.

This cycle of development took us to also port all the sub projects related to Maui Shell…

Some of the good things that Qt6 has to offer to Maui Shell will include a newly added support for custom shell extensions and protocols, this will allows us to have support for XWayland, which was a pending item in the realease-blocking issues:

When you are building a platform based on Qt, Wayland comes with some additional powerful tools: When both clients and server are running on the same framework, you can extend Wayland with your own protocols. This is a way to further customize how an application is integrated in the system. Qt Wayland and Qt Wayland Compositor are designed with this in mind, so adding extensions is both easy and convenient.

You can find out more information about whats new with Qt Wayland Compositor at: https://www.qt.io/blog/shell-extensions-in-qt-wayland-6.3

And few more link for more information, for me and you all:

https://trello.com/b/xGgezYwK/qt-wayland

https://doc-snapshots.qt.io/qt6-6.6/qtwaylandcompositor-shellextensions.html

https://www.qt.io/blog/2018/12/14/whats-new-wayland-platform-plugin-qt-5-12

https://doc-snapshots.qt.io/qt6-dev/qtwaylandcompositor-custom-shell-example.html

 

Cask

  • Fix bugs on dragging around CSD surfaces.
  • Now uses the new MauiMan InputDevices keymap properties.
  • Now uses the new QPA Theme and set the right env var to make use of it.
  • Other Qt applications now look better with the new Maui QPA Theme.
  • Tweaked the padding of the Chrome title bars.

 

A script element has been removed to ensure Planet works properly. Please find it in the original post.

 

A script element has been removed to ensure Planet works properly. Please find it in the original post.

Maui Settings

Fully ported to Qt6 and has now started using the Maui Core modules for the audio control panel, and network. The QPA Theme integration has also been ported.

A script element has been removed to ensure Planet works properly. Please find it in the original post.

 

Maui Core & Maui Wallpapers & CaskLib

Fully ported to Qt6.

That’s it for now.

To follow the Maui Project’s development or say hi, you can join us on Telegram: https://t.me/mauiproject.

We are present on Twitter and Mastodon:

New release schedule

 

The post Maui Release Briefing # 3 appeared first on MauiKit — #UIFramework.

Sunday, 27 August 2023

Updates

As I have tooted2 recently, I am currently waiting for a new laptop to arrive.

While my old ThinkPad X230 is still working, after over a decade it is starting to act up and especially causing a lot of issues on online conferences. So a new computer was due.1

This is super exciting for me because I tend to use my hardware until it is really worn out, so it happens very rarely and then with much thought.

I plan to turn this into a series of (hopefully) short(ish) blog posts.

Today’s blog post will be mostly about my thought process when deciding which laptop to buy.

The next post will be about my crazy – at least that is how I see them – plans with the laptop. I may need to revise them as I go and things break, which I hope is half the fun of this series :).

As this was a long time coming, I took the time to decide what the new machine would be.

Slimbook Pro X 14 = my choice

Enough whining, what did I ultimately decide for?

After much consideration, I ordered a Slimbook Pro X 14.

My reasons for that were as follows:

  • the case seems very sturdy (I usually shy away from silver-coloured computers and peripherals, so that was a compromise)
  • matte screen
  • good keyboard
  • decent selection of I/O ports
  • great Linux support
  • amazing power-to-performance ratio with the AMD Ryzen 7 5700U & Vega 8
  • 14" is IMHO the best laptop size
  • possibility of a custom keyboard layout5
  • the 3-year warranty that allows me to open up my machine6 is pretty nice
  • anyone I know who had one, was singing praises of it
  • still has proper “oldskool” S3 sleep state
  • (bonus: custom engraved lid)

Newer Slimbooks

At least as of April 2024, newer Slimbook’s laptops do not have S34 support in their BIOS anymore, and use the more recent S0ix3.

That could be a deal-breaker for many. It certainly would be for me. I have a employer-issued Dell Precision laptop, with S0ix “insomniac mode” and I cannot rely on it when I travel.

That is very unfortunate and I hope they fix this problem in the foreseeable future.

Why not …?

Of course, there were some other brands that I was looking into.

Let us look at them at a descending order of weirdness.

Balthazar BPCD

I am extremely excited about Balthazar happening at all and hope it succeeds!

Balthazar is a FOSS and OSHW portable computer “for all children age 9-99”, so the goal is to be robust for kids, but also super-flexible for hackers.

In fact, I like the project so much, I will simply quote its landing page:

One laptop for the new internet.

Secure, fast, inexpensive, open, robust, upgradeable, and sustainable. All of that.

BPCD - Balthazar Personal Computing Device is a 13.3" upgradable and expandable laptop that is based on a few concepts inspired by EOMA68, but powered by RISC-V processor(s) open architecture or FPGA boards running emulation as a Computing Module Standard boards and other Systems on a Module that run on Linux OS or all of those running together with added co-processing power such as FPGA Lattice Diamond - ULX3S.

It contains all the hardware and continuously developing software and firmware features preventing data-theft and any unwanted 3rd party intrusion into the system by default. It should run default low-level security layer software based on LUKS, Libreswan and is also envisaged to be GNUnet ready. Its keyboard should be also inter-swappable with known x2xx ThinkPad keyboard replacement via developed adapter and a frame.

While being versatile and robust it also follows CERN OSHL, GNU-GPL, FOSS, ISA and even CC guidelines.

Harv, one of the brains behind Balthazar, was involved with OLPC, as well as Lego Mindstorms, which are both quite some credentials. And he is not the only smart head behind the project!

If this at least tickled your fancy, I urge you to check out their website and monthly development update.

The main reason I did not decide for Balthazar is because it is not out yet. But also, while I am quite optimistic about RISC-V, I would ideally pair it together with a beefier desktop or server, which I currently do not have.

MNT Reform

In a similar fashion, the MNT Reform – another OSHW, FOSS DIY mobile computer – is (almost) just as crazy.

As opposed to BPCD, it is already being sold and is available in both 12.5" and 7" variants.

The main reason I did not buy it, is similarly as with Balthazar, while I may at some point really want to have a RISC-V machine, I am not too comfortable to take that jump yet.

That said, while MNT offers three different CPUs, none is a RISC-V, and all of them are quite weak compared to AMD Ryzen. The price is also a bit premium, but you do get what looks a very robust, modular and hackable machine. On the other hand, it does look a bit clunky.

But if you are looking for something robust, hackable right now, this is one I would definitely take into consideration.

Framework

Framework sounds really cool as a modular laptop – and, admittedly as an owner7 of a Fairphone 3+ (with the /e/OS ROM on it), I was looking forward to that too!

But I decided against it because of practical reasons.

At first glance it is super cool that you can change the expansion cards for your I/O ports, but as the 13" Framework only has four expansion card slots, in practice this would mean that you would either:

  1. carry around with you a bag of extra expansion cards and then exchange them every time you need something – in which case you might just get a USB-C mini dock instead; or more realistically
  2. just select the ones you most often need and keep them in there: for example 1 × USB-C (PD, needed also for charging!), 1 × USB-A, 1 × HDMI, and 1 × Ethernet port.

Compare this to Slimbook ProX 14 which instead comes with 1 × USB-C 3.1 (PD), 2 × USB-A 3.1, 1 × USB-A 2.0, 1 × HDMI, 1 × audio jack and a separate charging barrel port. While I would have preferred another USB-C instead of the 2.0 USB, this is still much better than the Framework.

Now, if I try to see how Framework would fit into my day-to-day use, I would have my laptop connected to external power (power barrel or USB-C PD), monitor (HDMI), keyboard (USB), mouse (USB, but I already use a small hub for that + the OpenPGP card), headphones (audio jack or USB). And this, if I continue using the USB hub already, already uses up all Framework’s ports. If I also wanted/needed to use Ethernet, I would be out of ports.

So, for me, the Framework laptop simply has too few ports. If you have a different use case, there is definitely a certain coolness factor to it.

Also, I find 13" to be on the (just too) small size, and 16" to be absolutely too big for my taste.

(A further concern I have, is that this is by far not the first modular mobile computer project I have seen. So I am a bit concerned about how long the support will last. Still a cool concept and I hope it survives and becomes more useful.)

Purism Librem

Purism also makes a 14" Librem laptop.

As opposed to the vast majority of the Linux laptops out there it is not original made by Clevo.

It is a really good contender, especially if their emphasis on security and software freedom is appealing to you.

Their laptops come with Coreboot BIOS and avoid using hardware components that require binary blobs and proprietary drivers. Further, they are one of the few laptop manufacturers that have hardware kill switches for the camera/microphone and WiFi/Bluetooth.

That does reflect in the price though.

The reason I did not choose Purism8 was that I wanted power-efficient AMD processor (+ graphic card). The 14" form factor is appealing though.

Regarding security, I do not feel at risk enough to need to rely on hardware switches (would love having them though!), but try to make sure the software I run is not suspicious and tempered with.

When it comes to software freedom, I think the Slimbook may be just shy of Purism’s achievements, but does a pretty good job keeping the blobs out. Currently Slimbook does not use Coreboot (anymore) and they state stability and performance concerns.

Hyperbook, Laptop with Linux, System76, Tuxedo etc.

Nowadays it is much easier to find a laptop manufacturer that not has hardware that works with Linux, but pre-installs and supports it too.

To just name a few companies off the top of my head, there are also Hyperbook, Laptop with Linux, System76 and Tuxedo Computers. I am sure there are many more, of course.

And all of the above mentioned are also Clevo laptops (see section below for details).

The reason I chose Slimbook over the others is that I really wanted a power-efficient AMD processor (+ graphic card), as well as a 14" screen. And Slimbook was the only one that offered this combination.

In addition to that, I know Slimbook donates some money to KDE, which is my preferred desktop environment.

While I did not look very deep into these, I assume they are also great options.

ThinkPad

Ignoring my employer-issued Dell Latitude, I have used ThinkPads as my main machines for over two decades now. And the only laptop I had before that was an Acer, which thought me a lot9 (and made me save up for my first ThinkPad). And before that it was hand-built desktops all the way.

So it may come as a surprise that as a long-term ThinkPad fan, I decided against it this time.

For starters, ThinkPad’s keyboards, while extremely revered, have through several revisions become less and less good. They are not bad, but in the past decade I had to replace my keyboard twice; and I hear the newer models are even worse.

Also when it comes to just typing feel, I already did not like the degradation in quality that happened between my (old-)old T400s and my (old) X230. The (old-)old keyboard actually felt really well and after two decades still works. And if memory serves me right, the T400s already had a worse keyboard than its predecessors.

But also from a bigger picture, the build quality in general has become much worse through time and the modern Lenovo high-end X and T series laptops are but a shadow of the sturdy legendary IBM ThinkPads of yore – even the R61 (and the R series was the budget option)!

The straw that finally broke the camel’s back for me was when I had to replace the battery and when I chose a (quality) generic brand one, the BIOS rejected it and I had to hack ThinkPad’s embedded controller firmware for it to work. ThinkPads used to be hackers’ best friends, but more in more it seems like they hackers are using them despite their features, not because of them.

Keyboard

Ha! Yes, that was a concern, as you can imagine from someone who grew used to ThinkPads and uses a Keyboard.io Model 01 for their daily driver. Also in general, I think the keyboard, mousepad and screen are often brushed aside when people buy their laptops – but it is a critical piece as it is the default way how you interact with the machine!

Honestly, the keyboard was one of the reasons I decided for Slimbook instead of some other brand.

I did have the chance to touch the Slimbook Pro X 14 recently at FOSS North, thanks to a fellow geek who had it and was showing it off a bit at dinner. And from what I remember, it was good. Not the best, but far far from the worst I have used so far.

When the machine arrives, I will report how its keyboard compares to my private ThinkPad X230’s (as well as some older models’) and my work Dell Latitude’s.

Memory and storage

I did opt for 32 GB of RAM and a 1 TB Goodram SSD10 . In addition to that I have ordered separate 1 TB SSD of a different brand. The Slimbook Pro X sports two M.2 slots.

More on the reasons for both decisions at a later blog post – I need to keep you on your toes at least a little bit ;)

Other peripherals

While I was at it, I did order some extra bits and bobs, but nothing majorly important:

  • Asus external DVD-RW USB drive
  • USB-C mini dock/hub (2 × USB-C (incl. PD), 2 × USB-A 3.0, 1 × HDMI, 1 × Ethernet RJ-45)

If I manage to test it out, I plan to blog about it. If I do not, just assume they work as intended.

Clevo?

The more observant of you will notice that the Slimbook laptops are actually originally made by Clevo, and only the final assembly, testing etc. is done by Slimbook.

I have heard people scoff at Clevo laptops before, mainly because they are seen as some cheap generic brand that you would find in Aldi/Hofer. On the other hand Alienware and Gigabyte laptops are also made by Clevo.

Most importantly though, from what I heard and saw myself so far, I was quite impressed.

Ending a blog post gone (too) long

Originally this was supposed to be both 1) a short blog post, and 2) include how I plan to set-up my new laptop.

But as you can see, it has become neither – and so the next blog post will be about my (crazy) installation/set-up plans.

I will stop at this point and hope my next blog post will be much shorter – for your sake and mine :)

hook out → suuuuupeeeer exciiiiteeeeed tiny monkeeeeey @(^_^)@


  1. The old ThinkPad X230 will most likely be re-cycled as my mum’s (first) laptop, if I can get its WiFi fixed to be more reliable again. 

  2. Yes I have a Mastodon account that I actually use. 

  3. S0ix Global ACPI state, also known as modern standby, low power S0 idle, or as I like to call it “insomniac mode”

  4. S3 Global ACPI state, also known as sleep, suspend to RAM, or standby

  5. I am currently using Neo2 and planning to create my own ergonomic layot

  6. Slimbook does ask you to notify them that you are opening the box and what you did, so they can log that in their service book. 

  7. Writing this just reminded me how actually owning something is increasingly rare in the modern world … 

  8. Actually I forgot about them, and added this after the fact. Still, I would have the same consideration. 

  9. As you can probably imagine, you learn more from mistakes and problems than you do from smooth operation. That laptop was a whole bag of issues. 

  10. Despite its tacky name, I have so far never had an issue with any of Goodram’s products. 

Saturday, 26 August 2023

In this blog post I will be summarizing my experience and learnings during the amazing 12 week of the Google Summer of Code with KDE.

So this week GSoC finally comes to an end; it almost feels like yesterday when my project proposal finally got selected. I still remember how happy I was to receive the opportunity to work on projects which will be used by thousands of people. I would like to thank my mentor Carl Schwan for being so patient throughout this journey. A special thanks also goes to Joshua Goins for providing detailed reviews to my Merge Requests and assisting me in resolving several of my bugs.

I have been advocating for KDE and its products in my social circle for a long time now (probably annoying everyone at this point 😆). It feels unreal that during the past 12 weeks I was able to contribute 6k+ lines of code to KDE’s Tokodon. This is my largest contribution to KDE so far and I feel delightful for it.

My project “Adding moderation tools to Tokodon” met almost all of ts goals, and I will be working on fixing minor bugs and writing unit tests post GSoC to improve it even further. If you are a mastodon moderator be sure to try Tokodon’s moderation tools for managing your instance.

I thank Google and KDE community for giving me this incredible opportunity. After spending these 12 weeks working on Tokodon’s codebase, I feel a lot more comfortable with large code bases, debugging code and feel like a much better programmer 💪.

Post GSoC, I plan to contribute more to KDE and other interesting open source projects. I will also try helping upcoming KDE contributors. Other than contributing to KDE, I plan on learning GoLang and work on writing a compiler along with my CS course.

You can read my previous blog-posts here

Wednesday, 23 August 2023

I’m posting this a little bit earlier this month, because I’ll be busy until next week and won’t have a chance to finish anything. I have a lot of new features to show, and important documentation work to showcase!

Plasma

More KCMs have their footer actions moved to the header, such as Application Style:

So long, footer actions!

Kirigami

The Kirigami Add-ons AboutPage should be nicer to use for non-KDE projects, and stops them from opening up the QML file itself in your default text editor when you click on certain links.

Components in AboutPage now have support for viewing their licenses and webpage!

Now you can read GPL to your heart’s content!

Kirigami’s FlexColumn now respects the spacing parameter, allowing applications that use it to use Kirigami units.

MobileForm/FormCard’s SpinBox and TextField delegates now use the disabled color when needed in it’s labels.

MobileForm/FormCard’s separator now hides when navigating it via keyboard.

Kirigami Add-ons is now REUSE compliant.

Tokodon

I added support for focal points in media attachments! This means that media won’t be centered carelessly, but will be cropped to the author’s wishes. This feature will appear in 23.12.

This artwork is now focused as it should be!

You can set the focal points in Tokodon as well! I really needed this feature because I post art on Mastodon, and had to use Mastodon Web because that was the only place I could set focal points.

I added a new floating button on the timeline to scroll back to the beginning. This feature will appear in 23.12.

The new scroll back button.

Now you can now share to the Fediverse via Tokodon! Right now it only supports URLs, but this can be expanded in the future. This feature will appear in 23.12.

When it comes to media in posts, it should be much easier to add them. Now you can drop or paste them into the composer! This feature will appear in 23.12.

Account and hashtag links in profile descriptions should now open inside of Tokodon. This feature will appear in 23.12.

Do you use Pleroma or Akkoma? If you found the experience a bit lacking in Tokodon, it should now be a whole lot better. The language selector should no longer disappear, and the correct maximum character count is fetched. The local visibility option and custom poll limits are supported now too! Everything but the local visibility option will appear in 23.08.

There’s now an option to disable Tokodon asking for the admin scope when logging in. This is useful for admins who don’t feel safe with giving Tokodon permissions, or if your server (like Pixelfed) does not correctly handle it when logging in. This will appear in 23.12.

The new moderation toggle, visible on the login page.

For the cherry on top, the post margins should now look much, much better. This will show up in 23.12.

Bug Squashing

Sometimes I wonder if it’s worth describing each bug I fix, but I think it’s important to make it known that we’re fixing our old features too. Most of these apply to 23.08 as well:

Work In Progress

Here’s a list of features I’m working on, but are not quite finished yet. The first is Cross-account actions! This means you can interact with a post from another account, without the hassle of searching for it again and losing your place on the timeline.

Ever wanted to still receive notifications, even though Tokodon is closed? Say hello to Push Notifications! (powered by KUnifiedPush. There’s also going to be more granular notification settings, and the ability to turn off all notifications for an account.

It’s not really interesting to see a notification, so say hello to Tokodon in the Push Notifications KCM!

You can check out the work-in-progress MR here but it’s still a little finicky to set up.

NeoChat

When you paste an image that contains a URL and a bitmap, NeoChat won’t still put the URL in the textbox as well.

The space drawer context menu should behave and look a little bit nicer now, with icons!

The space context menu.

The avatar used in notifications should be more resilient, including transparent and weirdly shaped avatars.

The attachment chooser dialog should now be functional again, the one that asks if you want to “Paste from Clipboard” or “Choose Local File”.

The room and user completion menu should no longer show invalid entries, such as rooms that have no canonical aliases (so you couldn’t link them anyway!)

The “Explore Rooms” page now looks nicer, and also functions better. It should be clearer when it’s still loading or there’s actually no rooms.

The nicer looking Explore Rooms page.

Image attachments are now resized, improving memory usage and smoothing. In my testing, a 4K image (that didn’t have a thumbnail) now takes up ~30 MB less memory.

More about images, NeoChat will soon have support for sending blurhashes, which improves the loading experience for clients that support it. Blurhash generation should be faster as well.

And of course, logging out shouldn’t crash NeoChat anymore.

Dr. Konqi

I made the save report dialog a little clearer, and it now defaults to your home folder.

When on a mobile device, the buttons on the main page are now laid out vertically.

Dr. Konqi when it’s vertically constrained.

Discover

Fixed a bug in the Flatpak backend where Discover could crash… when trying to log an error.

Documentation

There’s an obvious documentation problem in many KDE repositories: they have no README! This month, I took some time to write out a basic template (with the help of Thiago, thanks!) and pushed them to some projects that desperately needed one.

If you haven’t heard me soapbox about this before, READMEs are small but vital lifeline for a project. To some people (including myself), if a project doesn’t have a detailed README it feels more “dead” even if the commit history is active. Some repositories are closely related (e.g. Breeze and Breeze Icons) but have no visible link between them on Invent - and let’s be honest, it’s search functionality sucks. To make matters more complex, some of our projects may be viewed elsewhere, like from the official GitHub mirror!

Here’s some important points I try to include a README:

  1. What is the purpose of this project?
  2. If this is a end-user facing application, what does it look like? (Note: not everyone knows what a “Gwenview” is but might be able to recognize it from a product screenshot.)
  3. If this is a complex, multi-layered and multi-component library - what is the folder called “autotests” or “kcms”? What does it contain? For some projects, this information shouldbe separated into a CONTRIBUTING document if it’s too long.
  4. If I want to contribute, how do I do it? And link to the community.kde.org if you can, instead of trying to maintain manual instructions. There can be exceptions.

For new developers, it’s important to strike down these blockers because it may not be totally obvious to some people what a “Plasma Framework” is. Or that you’re not actually supposed to open a GitHub PR or a GitLab issue. It’s a document you really only need to write once, update sometimes and it passively helps everyone.

And here’s the KDE projects I got to so far:

I encourage anyone reading this to look at the README for the projects you maintain (or even contribute to), and see if there’s room for any improvement!

Somewhat related, some repositories were missing Bugzilla links on Invent and someone told me how to fix them:

Thanks to everyone who helped review and push these along!

Outside of KDE

For Akkoma users, I contributed limited support for the Mastodon Preferences API! This is useful for Tokodon and other clients.

I fixed a qmlformat bug that added an extra space after target bindings. I hinted at what else we need to work on before qmlformat can be adopted in KDE here.