Skip to content

Sunday, 23 March 2025

In today's technological era, everything progresses rapidly, and developing and launching code and products at that pace requires support to ensure code quality while enhancing developer efficiency and productivity. This is where coding assistants come in, helping developers write clean code and accelerate delivery. They assist with debugging, autocompletion, and all necessary tasks to build and ship products more quickly without compromising quality. With the advent of AI, we now have even more advanced coding assistants that serve as valuable companions for developers, shaping the future of AI-driven coding.

What is Refact AI?

Refact AI is an open-source AI-powered coding assistant that integrates seamlessly into your development environment. It leverages state-of-the-art machine learning models like GPT-4o, Claude 3.5 Sonnet, and others to provide intelligent code suggestions, refactoring capabilities, and in-depth analysis. Unlike traditional tools, Refact AI adapts to your unique coding style and project context, making it a personalized companion for developers.

Key Features

  • Smart Code Suggestions: Enjoy autocomplete and smart recommendations for accelerated development.

  • Code Refactoring: Enhance code clarity, efficiency, and maintainability through automated refactoring.

  • Bug Detection & Fixes: Identify errors early to prevent them from escalating.

  • Multi-Language Support: Functions smoothly with a variety of programming languages.

  • Seamless Integration: Integrates effortlessly with prominent IDEs such as VS Code and JetBrains.

With Refact AI, you dont just write code, you write better code.

How Does Refact AI Empower Developers?

🚀 Boost Productivity

Refact AI helps you write code faster without compromising quality. It understands your coding patterns and suggests optimal solutions, reducing the time spent on debugging and restructuring.

🔍 Improve Code Quality

Messy code leads to technical debt. With its refactoring and error-detection capabilities, Refact AI ensures your codebase remains clean, readable, and efficient.

🛡 Ensures Security

Refact AI prioritizes data security by allowing users to self-host the tool or configure privacy settings to control data sharing. This flexibility effectively addresses concerns regarding intellectual property protection.

Getting started with Refact AI is simple:

  1. Download the plugin for popular IDEs like JetBrains or Visual Studio Code.

  2. Explore its free version for personal use or sign up for a 2-week enterprise trial.

  3. Join the vibrant community on Discord to share feedback and learn from other users.

Conclusion

Whether you want to increase productivity, efficiency, or write clean code, Refact AI is your go-to solution. Make sure to explore its features, unlock the full potential of your development process, and make Refact AI your best coding buddy. Refact AI is committed to building an AI-powered future of programming and is genuinely redefining what it means to have an AI-powered coding assistant.

Saturday, 22 March 2025

Here are some more notes on getting KDE Plasma 6 on FreeBSD up and running on a Framework 13 AMD laptop. This follows up on previous notes about getting the hardware together and installing FreeBSD.

First off, I think it’s hard to express how high the DPI is on the screen in this laptop. I have been using 27” 2560x1440 monitors for a couple of years, which I feel is fine for regular desktoppy-office-coding work. I’m not a monitor junkie by a long shot. I can’t even fit a screenshot from the laptop, on my desktop monitor at 100% scaling.

KDE Plasma 6 desktop showing KInfoCenter with FreeBSD details and Discover. Original size 2880x1920, scaled down to 25% in each direction.
KDE Plasma 6 desktop showing KInfoCenter with FreeBSD details and Discover. Original size 2880x1920, scaled down to 25% in each direction.

Getting to KDE Plasma 6 on FreeBSD

I’m sure I have written it down before, but here’s the quick steps to a working KDE Plasma 6 on FreeBSD:

  • pkg install kde sddm
  • sysrc dbus_enable=YES sddm_enable=YES
  • Add suitable values (e.g. 65536) for net.local.stream.recvspace and net.local.stream.sendspace in the file /etc/sysctl.conf

Step 1 there is “get the software” and step 2 is “enable the software”. I can get behind that choice, since FreeBSD doesn’t come with the assumption that installing KDE means you want a graphical login. Step 3 is kind of regrettable. There’s no convenient tool for this, but without those tweaks, Akonadi (and hence KMail) are crap on FreeBSD.

Reboot or service sddm start, and you get the well-known SDDM greeter. On this machine, make sure to pick KDE Plasma X11, because Wayland doesn’t work.

My Own List of First-Run Customizations

  • Focus follows mouse (in KDE System Settings, under Window Behavior, Focus; searching for Focus finds it)
  • Put the control key where it belongs, to be to the left of the letter A (in KDE System Settings, under Keyboard, then click the weirdly-named and -placed Key Bindings button, enable Configure keyboard options, then search for Swap Ctrl and Caps Lock)

The X11-keyboard-options code seems to have been (or become) broken, at the very least on FreeBSD, so here’s a little script to do it by hand; you do need to pkg install setxkbmap for this:

#! /bin/sh
setxkbmap us
setxkbmap -option ctrl:swapcaps

Customizations for this Laptop

  • Set global scale to 175% (in KDE System Settings, under Display Configuration, value of Global Scale; changing this value requires log-out and log-in again to make it take effect, and doesn’t seem to influence KWin decorations or cursor size – but this is X11, which is basically abandoned upstream)

Things that are Cool

  • KDE Discover detects updates. I have no idea how it decided that I have 16 things installed (devel/apr and editors/kate are listed, but not KDE Plasma itself) to display in the list of installed applications, but they did need updates today.

Things to Investigate and Fix

On the KDE side:

  • Plasma 6 Wayland (on this specific GPU model) is the big-ticket item.
  • Keyboard options, for instance all the options related to what-does-caps-lock-do. (This already applies to Plasma 5 on FreeBSD)
  • Konsole starts in / rather than in my home directory. (This also)
  • KDE Discover’s Home page just displays a “no internet” warning.
  • After first logout, KWin lost whatever keybinding it had. I have managed to get alt-tab to switch windows again, but not found where alt-F4 binds to Close Window.

On the FreeBSD or hardware side:

  • Figure out how to make F-keys default, rather than the media controls (so I don’t have to hold the Fn key to, say, reload a web-page with F5).
  • Figure out how to make the media keys work at all (e.g. brightness, which is on the F7 and F8 keys).
  • Figure out WiFi, since a laptop with a bright red ethernet cable sticking out the side is less portable than I might like.

I made a change to the KURLNavBar according to old mockup, since we hoped it would be easier to use.

This was a bad idea and made many people angry, at least on Reddit.

Seems to be a recurring theme with my visual changes, though this time wasn't nearly as bad as that was.

Anyway, I wanted to go over the process around it. Maybe someone else than me can learn something from this.

So, what happened

When implementing this mockup, I was expecting this was something people had been waiting for. It looked good to me, and since we've been wanting to freshen up Dolphin a bit, it felt like a good way to start. (This change wasn't to Dolphin, but our framework, so any apps that would use this navbar would get the changes.)

Another reasoning for changes was that there has been many many instances where people didn't even know this field could be clicked! They didn't know these items are buttons, for example on touch devices. That's where the background idea came from. And then make the folders look like clickable items, so people know that, well, they're not there just to look pretty.

The work started well enough, though I spent tons of time refactoring and trying to understand the old codebase. On top of that, we wanted to make sure it was as close to perfect as possible.

So I added a background first, which was relatively easy, then started modifying the buttons.

I wanted to use chevron > style separators between the folders, but there was no easy way to create a button with this shape. Sure, we could do it well for Breeze but any other Qt theme might render it weird and wrong, and that will just cause people report more bugs. So I settled with regular separators. It was a compromise, but I admit it was a rather bad one in the end.

I worked so much on this part, trying to figure out a good way to make the new buttons work, following the mockup as close as possible, and I couldn't see the usability issues. This was because I was so entrenched in the work I couldn't practically "see the forest for the trees."

I had tons of good feedback, from visual designers and the like. I wanted to follow everyones advice, but had to make compromises at some places.

Eventually I got somewhere where we all just liked it enough to push it out to the world.

And yeah, the whole process took ~1 month. You would think this is a simple change, but it never is that simple.

The feedback

I was expecting some pushback, as it always happens with visual changes, but I didn't expect it to be this.. energetic?

Sadly, most of the feedback was "it ugly" which gives me nothing actionable to work on!

Saying "it looks bad" doesn't help me work on it. It doesn't help me fix anything. I think that frustrated me the most: I wanted to help to fix the situation, but this kind of feedback just makes me wonder endlessly how to fix it.

Then I saw some actually actionable feedback:

  • The arrows showed the hierarchy better than the separators
    • I actually agreed with this afterwards, but I couldn't get the chevron thing working as mentioned above
    • I opted for separators because I wanted to keep the button look.
  • Some thought they were tabs and kept misclicking them instead of tabs
    • This was very good feedback and made me rethink the situation

I am glad I saw those two things in the sea of "it ugly." It helped me to restructure the whole thing in my mind and start fixing.

So yeah I do read your feedback. :P

Out with the new, in with the new but old

Here's the new iteration: KUrlNavigatorButton: Use arrow as separators

I saw the value in the old navbar with the arrows, so I brought them back. I wanted to keep the icons, because I liked the visual flair they added, but they also added clutter. If I could have had the chevron style buttons as shown in the mockups, I would have likely kept the icons.

Instead of reworking the old code, I decided to refactor it to best of my abilities: There was some things we didn't need anymore, and some things were a bit buggy due to miscalculations, so I changed things around and got them into good place.

I wanted to remove some items I thought people wouldn't use, but in fact I was told quickly that these are very good things to have, so I kept them around. And this is also the kind of feedback I like to see!

We're creating custom button components here, so we couldn't utilize more "standard" buttons. That's why there was a lot of math and tinkering with padding involved. I did try to utilize the QStyle methods here though so that it would look okay on any theme, not just Breeze. There will likely be cases where it won't look perfect in custom themes, but utilizing QStyle allows us to at least try.

After the refactoring, it got easier to work on this and I started to wrap it up with rapid pace. Instead of a month, it took me around a week.

It's not merged yet, but hopefully will be soon. I've been daily driving this iteration on my system and haven't had issues so far.

So what's the big deal?

Yeah, so, why the big deal? Why write a blogpost about this?

I didn't expect this change affect so much to my psyche, so I wanted to talk about this. Maybe some other FOSS devs can relate. I think it's something we should discuss more often, than just the raw results.

I like to think I am good at taking feedback. But after working on something for a month, then having to throw it all away even I was told it was ok.. It hurt! It was a lot of time spent on a thing that I hoped would make people happy.

I care about the stuff I do. A lot. So yeah, I'm gonna feel hurt when my work is disliked. And that's okay. Anyone who tells me otherwise can pound sand. Rejecting emotions like these just gets you in worse state over time. I speak from experience here.

It's easy to say "just ignore the negative feedback" but I literally can't. I am so into working on these things, I love working on KDE applications.. So it does hurt when something that has become such an extension of my own creativity and passion gets disliked... Even when I haven't directly worked on it!

Sure, this all is my problem to work on and I don't expect anyone to treat me with silk gloves and pat my head. Just wanted to explain it, that's all. Maybe someone can relate to this and doesn't feel so alone with the problem. I had the same thing when my games got insulted, where I was even more emotionally attached to the things, because I had made them myself completely.

Sadly, I kept dwelling on it a bit longer than I wished.. But working on the new version was a great outlet. I noticed old problems, fixed them and the new version is better in many ways.

I've noticed that I am not annoyed/upset about negative feedback itself, but how it's conveyed. Negative feedback will always be demotivating and bothersome, but when the negative feedback is written politely and has actually actionable items, it can be rather motivating as well. The "it ugly" feedback has stronger demotivating feedback, because it's not actionable.

I think the key takeaway from all of this is that mockups can get stale! If people like some older mockup, then you change to it suddenly, people may get very frustrated about it: They either forgot the old mockup, had never seen it, or they ended up disliking it in actual use.

So it's good idea to freshen the mockup before iterating on it: Ask the visual designers about it one more time, maybe share it with the users and ask their opinion on it. Sure you can't gauge everyone's opinion on it, but at least it shouldn't be that sudden to everyone.

This whole ordeal has been very tiring, but that's my own fault for not really allowing myself to take a break from it. I get hyperfixated easily, but again, that's my own problem.

So yeah, slight burnout by all of this. I'm sure I'll be fine, especially after this is merged so it can stop living rent free in my head.

I'm not blaming anyone for anything. Not even myself. Things happened and we all need to chill.

Hopes for future

There will be many many other times where I or someone else will get it wrong the first time.

So, share your feedback, but don't immediatelly go for the nuclear option of removing it all. With FOSS stuff, we don't have these huge QA teams that go yay/nay for something.. But everyone is welcome to join help in that regard!

Help us help you with actionable, polite feedback.

And thank you so much for everyone who has done so!

Now I'm going to try to just let go of this all. It's weekend anyway and I got bunch of games waiting to be played.

Thanks for reading as always!

Professional update

I had joined MBRDI in June 2021, after almost 4 years, I decided to part ways with MBRDI this January 2025 and decided to pursue new adventure, more on that when time comes, but for now I am keeping it under wraps. I hope you can respect that! 🙂

However this is not the only professional update I want to talk about, I want to talk about another exciting opportunity,

NGI0 Core grant

I am very happy to announce that I will be working on improving Plasma Mobile (and in general, Linux Mobile) power management through funding support from the NGI0 Core Fund, a fund established by NLnet with financial support from the European Commission’s Next Generation Internet program. You can find very thin details on this page. Though this is not the only project that is being funded through NGI0 Core fund, There are total 56 projects being sponsored as part of October call.

Thursday, 20 March 2025

Kaidan 0.12.0 looks and behaves better than ever before! Chats can now quickly be pinned and moved. In addition, the list of group chat participants to mention them is placed above the cursor if enough space is available. With this release, OMEMO can be used right after migrating an account and migrated contacts are correctly verified.

Have a look at the changelog for more details.

Changelog

Features:

  • Use square selection to crop avatars (fazevedo)
  • Use background with rounded corners for chat list items (melvo)
  • Remove colored availability indicator from chat list item (melvo)
  • Display group chat participant picker above text cursor in large windows (melvo)
  • Do not allow to enter/send messages without visible characters (melvo)
  • Remove leading/trailing whitespace from exchanged messages (melvo)
  • Ignore received messages without displayable content if they cannot be otherwise processed (melvo)
  • Allow to show/hide buttons to pin/move chat list items (melvo)

Bugfixes:

  • Fix style for Flatpak (melvo)
  • Fix displaying video thumbnails and opening files for Flatpak (melvo)
  • Fix message reaction details not opening a second time (melvo)
  • Fix opening contact addition view on receiving XMPP URIs (melvo)
  • Fix format of text following emojis (melvo)
  • Fix eliding last message text for chat list item (melvo)
  • Fix unit tests (mlaurent, fazevedo, melvo)
  • Fix storing downloaded files with unique names (melvo)
  • Fix overlay to change/open avatars shown before hovered in account/contact details (melvo)
  • Fix verification of moved contacts (fazevedo)
  • Fix setting up end-to-end encryption (OMEMO 2) after account migration (melvo)

Notes:

  • Kaidan requires KWindowSystem and KDSingleApplication now (mlaurent)
  • Kaidan requires KDE Frameworks 6.11 now
  • Kaidan requires KQuickImageEditor 0.5 now
  • Kaidan requires QXmpp 1.10.3 now

Download

Or install Kaidan for your distribution:

Packaging status

Monday, 17 March 2025

My home contains multiple FreeBSD machines – laptops, desktops, single-board-computers – which can benefit from sharing storage. In particular, I really only need one copy of the FreeBSD source tree (plus some work-trees for different branches) and one copy of the ports tree and distfiles. This blog post is my notes on setting that up.

These notes are for my home infrastructure, where I trust the machines that are plugged into the wired network, simply because I can see the switch from my desk and know where all the wires go. I’m not taking notes for security.

All of these notes build on the FreeBSD Handbook chapters on ZFS and Network Servers.

Server Side NFS Setup

Configure the server for NFS with sysrc rpcbind_enable=YES nfs_server_enable=YES mountd_enable=YES and then start NFS services service nfsd start . This enables NFS services also after a reboot. To turn them off again, use sysrc and swap NO for YES.

Client Side NFS Setup

Enable NFS client with sysrc nfs_client_enable=YES and then start NFS services with service nfsclient start . This enables NFS services also after a reboot. To turn them off again, use sysrc and swap NO for YES.

Per-Filesystem Setup

For each filesystem that needs to be shared, go through these steps. It is easiest to do this with one filesystem per mountpoint (mountpoint on the client side, so possibly /usr/ports, /usr/src and /usr/obj which want three filesystems on the server side’ however, this does not work well with git work-trees).

Filling the filesystems that need sharing is outside of the scope of these notes, but

  • The ports tree lives in git and can be anonymously cloned. There is a nice guide (PDF) as well.
  • The source tree contains the whole operating system, lives in git and can be anonymously cloned.

Server Side

  • Create a ZFS filesystem, say zdata/export/ports. It doesn’t really matter where it is mounted.
  • Turn on NFS sharing on this ZFS filesystem (this step might be redundant), zfs set sharenfs=on zdata/export/ports .
  • Set options for NFS sharing with no attention to security at all, zfs set sharenfs="-network=192.168.56.0/24 -maproot=root" zdata/export/ports .
  • Don’t bother with /etc/exports, since we’re using ZFS. Turn on sharing for the filesystem with zfs share zdata/export/ports .

Client Side

Just mount the remote filesystem (read-only here) with mount -o ro 192.168.56.1:zdata/export/ports /usr/ports .

When troubleshooting (permission denied), check the IP address of the client is in the network specified by the NFS share on the server.

Mounting a subdirectory of an export isn’t possible. In that case, mount the exported filesystem somewhere temporary (e.g. /mnt/export) and then use mount -t nullfs -o ro /mnt/export/subdir /some/path .

System Updates Over NFS

For me the main reason to set this up is that I can git clone src, build the FreeBSD operating system once, and then share the build results across multiple machines by mounting /usr/src and /usr/obj from the machine that did the build. It saves considerable compile time, even if the resulting installation over the network is a lot slower than from a local md(8) to an NVMe drive.

One minor gotcha is that make installkernel complains a lot about read-only filesystems. But that’s only a complaint, and everything installs normally.

Subsequent mergemaster is normal and make installworld complains in the same way.

Optimization in Akonadi, configurable holiday region in Merkuro and progress on Krita Qt6 port

Welcome to a new issue of "This Week in KDE Apps"! Every week we cover as much as possible of what's happening in the world of KDE apps.

Last week we released the beta for KDE Gear 25.04 and focused on polishing the coming release.

Creative Apps

Krita Digital Painting, Creative Freedom

The developer teams continued to improve the Qt6 port of Krita. Dmitry fixed the HDR support on Windows (Dmitry Kazakov, link). Freya fixed an OpenGL crash on macOS (Freya Lupen, link).

Personal Information Management Apps

Akonadi Background service for KDE PIM apps

Carl Schwan reduced the memory usage of various Akonadi resources by around 75% each. The optimized resources, which take advantage of this new API, are the following: Birthday, VCard files and directories, Ical, Mbox, Open-Xchange, cardDAV and calDAV. There is already significant progress done in that direction also for the IMAP and POP3 resources. The technical background behind this is that these resources running as independent processes are now using non-visual QCoreApplication instead of the more powerful QApplication, which is more appropriate resource wise for background services. This is part of the Don't depend on QtWidgets in lower parts of the stack milestones. (Carl Schwan, 25.08.0. Link 1, link 2, link 3, link 4, link 5, link 6, link 7, link 8, link 9, link 10, link 11, ...)

Daniel made a change to ensure that operations in Akonadi that operate on a large number of items are processed as multiple smaller batches which the SQL engine can then handle (Daniel Vratil, 25.08.0. Link).

Merkuro Calendar Manage your tasks and events with speed and ease

Tobias ported Merkuro Calendar to the new QML declaration which slightly improves the performance but more importantly enables us to take advantage of the QML tooling (Tobias Fella, 25.04.0. Link).

Carl made the region used to display holidays configurable. You can also select more than one region now (Carl Schwan, 25.04.0. Link)

Kleopatra Certificate manager and cryptography app

Tobias moved the notepad feature to a separate window, which means it's now possible to have multiple notepads open at the same time (Tobias Fella, 25.08.0. Link).

Tobias also ensured the GPG password prompt (pinentry) in Kleopatra is properly parented to the correct parent window on Wayland (Tobias Fella, 25.04.0. Link). Other apps using GPG were also fixed.

KOrganizer KOrganizer is a calendar and scheduling application

Allen made a series of small improvements and bugfixes to Korganizer. He improved the configure view menu action description (link), added more information to the delete folder dialog (link), and added a search option to consider the current view filters. (Link).

Social Apps

NeoChat Chat on Matrix

James improved the thread support. Now it is possible to open a context menu for the individual thread messages (James Graham, 25.08.0. Link).

Kaidan Modern chat app for every device

Melvin fixed downloading files (Melvin Keskin, link 1 and link 2).

Graphics and Multimedia Apps

Amarok Rediscover your music

Tuomas fixed some database and encoding issues. (Tuomas Nurmi, link)

digiKam Photo Management Program

The digiKam team released version 8.6.0. of the powerful photo classifying and editing tool. Among many other things, digiKam now comes with a smarter face management tool, an improved auto-tagging system that identifies elements in your images, fully automatic red-eye removal, and a new image quality feature that classifies images according to their aesthetic quality. The digiKam developers also fixed 140 bugs.

You can read more about this release on digiKam's website.

System Apps

Kate Advanced text editor

Javier Guerra added text search to the build output. (Javier Guerra, 25.08.0. Link)

Leo Ruggeri made the reset history menu button only visible when relevant. (Leo Ruggeri, 25.08.0. Link)

Educational Apps

GCompris Educational game for children

Bruno Anselme added a 6th level to the Guess 24 game. (Bruno Anselme, Link)

Utilities

KTrip Public transport navigator

Volker improved the history of past searches in KTrip by reusing some code from Itinerary. The biggest improvements are that the list is now de-duplicated, and the model supports more features not yet exposed to the UI. (Volker Kruase, 25.08.0. Link)

Other

Luigi removed Qt5 support in Minuet and Step.

…And Everything Else

This blog only covers the tip of the iceberg! If you’re hungry for more, check out Nate's blog about Plasma and be sure not to miss his This Week in Plasma series, where every Saturday he covers all the work being put into KDE's Plasma desktop environment.

For a complete overview of what's going on, visit KDE's Planet, where you can find all KDE news unfiltered directly from our contributors.

Get Involved

The KDE organization has become important in the world, and your time and contributions have helped us get there. As we grow, we're going to need your support for KDE to become sustainable.

You can help KDE by becoming an active community member and getting involved. 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. There are many things you can do: you can help hunt and confirm bugs, even maybe solve them; contribute designs for wallpapers, web pages, icons and app interfaces; translate messages and menu items into your own language; promote KDE in your local community; and a ton more things.

You can also help us by donating. Any monetary contribution, however small, will help us cover operational costs, salaries, travel expenses for contributors and in general just keep KDE bringing Free Software to the world.

To get your application mentioned here, please ping us in invent or in Matrix.

Welcome to the February 2025 development and community update.

Development Report

Text Tool Rework Update

Wolthera has written a new post about recent Text Tool updates which will be coming in Krita 5.3.

A Glyph Palette has been added to Text Tool Options, which allows selecting glyph alternates as well as showing a font character map (MR!2080). The Text Properties Docker now shows CSS Font Variants glyph properties (MR!2325) and OpenType features property (MR!2343).

Qt6 Port Progress

Krita now has Qt6 CI builds for Linux, Windows (MR!2328), and macOS (MR!2334). Android has yet to be built, as the platform has more complications and fewer developers working on it.

Most of Krita's custom Qt patches have now been ported by Dmitry, and ANGLE and HDR support are revived on Windows (deps commit).

Community Report

February 2025 Monthly Art Challenge Results

For the "Fabulous Flora" theme, 27 forum members submitted 34 original artworks. And the winner is… Hollyhocks by @Elixiah

Hollyhocks by @Elixiah

The March Art Challenge is Open Now

For the March Art Challenge, @Elixiah has chosen "Virtual Plein Air Painting" using MapCrunch or Google Maps street view, as the theme. The optional challenge is doing paired entries; one urban, one rural. See the full brief for more details, and see the sights without stepping outside your door.

Best of Krita-Artists - January/February 2025

Nine images were submitted to the Best of Krita-Artists Nominations thread, which was open from January 14th to February 11th. When the poll closed on February 14th, these five wonderful works made their way onto the Krita-Artists featured artwork banner:

Luca - To the Sea by @deerblue

Luca - To the Sea by @deerblue

Long Head Guy by @Celes

Long Head Guy by @Celes

Bird by @SkyJack

Bird by @SkyJack

Recent illustration I did for a card game by @JoaoGGarin

Recent illustration I did for a card game by @JoaoGGarin

Study of a Fox by @Hagetisse

Study of a Fox by @Hagetisse

Ways to Help Krita

Krita is Free and Open Source Software developed by an international team of sponsored developers and volunteer contributors.

Visit Krita's funding page to see how user donations keep development going, and explore a one-time or monthly contribution. Or check out more ways to Get Involved, from testing, coding, translating, and documentation writing, to just sharing your artwork made with Krita.

Other Notable Changes

Other notable changes in Krita's development builds from Feb. 12 - Mar. 17, 2025, that were not covered by the Development Report.

Stable branch (5.2.10-prealpha):

  • Resources: Correctly load UTF-8 .pat pattern names. (bug report) (Change, by Nicholas LaPointe)

Unstable branch (5.3.0-prealpha):

Bug fixes:

  • Animation: Fix crash on closing secondary animated document during playback. (bug report) (Change, by Emmet O'Neill)
  • General: Fix menubar disappearing after toggling system global menubar feature. (Change, by Carl Schwan)

Features:

  • Freehand Brush Tool: Add Brush Smoothing options to adjust the smoothing based on brushstroke speed. (Change, by killy |0veufOrever)
  • Preferences: Add a global pen tilt direction offset in Tablet settings. This can be used to make tilt brushes work similarly for left- and right-handed users, or behave better without tilt support. (Change, by Maciej Jesionowski)
  • Scripting: Add Canvas.setPreferredCenter() and Canvas.pan() for panning the canvas. (Change, by Dov Grobgeld)
  • Python Plugins: Add Mutator plugin. This consists of an action to randomly modify brush preset settings such as color and size, and a docker to customize these mutations. (Change, by Emmet O'Neill)
  • G'MIC: Update to 3.5.3. (Change, by Ivan Yossi)

Nightly Builds

Pre-release versions of Krita are built every day for testing new changes.

Get the latest bugfixes in Stable "Krita Plus" (5.2.10-prealpha): Linux - Windows - macOS (unsigned) - Android arm64-v8a - Android arm32-v7a - Android x86_64

Or test out the latest Experimental features in "Krita Next" (5.3.0-prealpha). Feedback and bug reports are appreciated!: Linux - Windows - macOS (unsigned) - Android arm64-v8a - Android arm32-v7a - Android x86_64

Sunday, 16 March 2025

I just got myself a brand new car: an ID.Buzz with seven seats so that I can fit the whole family at once. I’m very happy with the car this far, but since it has connectivity, I want to see if I can integrate it into HomeAssistant.

To do this, I wanted to use the CarConnectivity project by Till Steinbach. It is a Python package that comes in a few parts. The main project, a Volkswagen connector, an MQTT bridge and a HomeAssistant MQTT discovery helper.

Having played with the software for a bit (and reported a bug that Till fixed asap – I’m impressed!) I decided to setup the whole thing on my little RaspberryPi that runs a few little services I use around the house.

Preparing this, I setup a new user and installed the software in a Python virtual environment:

sudo adduser carconnectivity
sudo su carconnectivity
cd
mkdir carconnectivity
cd carconnectivity/
python -m venv venv
source venv/bin/activate
pip install carconnectivity-connector-volkswagen==0.5a1 carconnectivity-plugin-mqtt carconnectivity-plugin-mqtt_homeassistant
vim carconnectivity.json

Using the vim command, I created the CarConnectivity configuration file. Update usernames, passwords and IPs to your needs. I will experiment with the interval parameter, as I don’t want to discharge the 12v battery by querying the car too much.

{
        "carConnectivity": {
                "log_level": "error",
                "connectors": [
                        {
                                "type": "volkswagen",
                                "config": {
                                        "interval": 1800,
                                        "username": "hello@example.com",
                                        "password": "secret"
                                }
                        }
                ],
                "plugins": [
                        {
                                "type": "mqtt",
                                "config": {
                                        "broker": "my-mqtt.local",
                                        "username": "user",
                                        "password": "secret"
                                }
                        },
                        {
                                "type": "mqtt_homeassistant",
                                "config": {}
                        }
                ]
        }
}

Having configured the service (and having run it manually to fix my mistakes) I created the carconnectivity.service systemd service shown below (in /etc/systemd/system):

[Unit]
Description=Car Connectivity to MQTT
After=network-online.target

[Service]
Type=simple
User=carconnectivity
Group=carconnectivity
WorkingDirectory=/home/carconnectivity/carconnectivity/
Environment="LC_ALL=sv_SE"
ExecStart=/home/carconnectivity/carconnectivity/venv/bin/carconnectivity-mqtt /home/carconnectivity/carconnectivity/carconnectivity.json

[Install]
WantedBy=multi-user.target

And then I started and enabled the service.

sudo systemctl start carconnectivity
sudo systemctl enable carconnectivity

Finally, I had a look at the status and made sure that everything looks ok.

sudo systemctl status carconnectivity

And, viola, the car shows up as a device in Home Assistant. Magic!

Friendly country, Friendly people, Reunions, New Experience, a bit of hustle and that’s LIFE!

So, this was my 4th conference and 3rd international trip! A lot of new experiences and new friends, but let’s talk about FOSSASIA Summit 2025 first.

FOSSASIA Summit 2025

This is the first conference where I was having a lot of different tasks, lightning talk, representing Ubuntu booth and KDE booth. So, a lot of different perspectives will be here. Sometimes I’ll be writing from KDE’s pov, sometimes Ubuntu’s and sometimes my own.