Skip to content

Welcome to Planet KDE

This is a feed aggregator that collects what the contributors to the KDE community are writing on their respective blogs, in different languages

Thursday, 1 June 2023

 

KStars v3.6.5 is released on 2023.06.01 for MacOS, Linux, and Windows. It's a bi-monthly bugfix release with a couple of exciting features.


Sky Map Rotation


Akarsh Simha added a new feature to allow the user to rotate the sky map. It also allows some standard settings like inverted view. Here are some the highlights:
  1. Rotate the sky-map freely: Shift + mouse drag on the sky map
  2. Pick pre-defined orientations: Zenith Up / Zenith Down / North Up / North Down depending on the coordinate system being used
  3. A magic mode for Dobsonians: The Erect Observer Correction feature, when selected along with Horizontal Coordinates / Zenith Down settings, will reproduce the orientation seen in the eyepiece of a Dobsonian. May need a one-time adjustment for your specific Dobsonian using the shift + drag feature.





Optimal Sub-Exposure Calculator


Joseph McGee made his first contributor to KStars with the Optimal Sub-Exposure Calculator. This is the first iteration of the calculator and only a handful of camera profiles is supported. There are different points of view within the astrophtography community on how optimal sub-exposure should be calculated and whether we should consider other factors such as processing time given the volume of data produced. Your feedback would be appreciated on this first iteration of the calculator.

Implementation of an optimal sub-exposure calculator based upon the work of, and presentation by, Dr Robin Glover. The calculator considers multiple inputs to determine a sub-exposure time which will provide minimal overall noise in the image:


  • A sky quality measurement (SQM) for light pollution
  • The optic focal length
  • A filter bandwidth
  • Camera read-noise (based upon gain/iso)
  • An optional adjustment to the allowable increase in noise from light pollution

As inputs are adjusted the calculator will refresh graphic presentation of potential exposure times of the range of gains, and update calculated outputs. The output values are separated into two sections: one for the sub-exposure, and another for image stacks of various integration times.

The sub-exposure outputs are:

  • the optimal sub-exposure time
  • the count of electrons produced from light-pollution
  • the shot noise, (noise from light pollution)
  • the total exposure noise, (the combined noise from light-pollution and camera read-noise)

The image stack information is presented in a table showing:

  • planned integration hours
  • the count of exposures to reach the planned integration hours
  • the actual stack (integration time) in seconds
  • the noise for the stack
  • a ration of stack time to noise, (as a indicator of quality)

An instance of the sub-exposure calculator can be started from a new 'clock' icon on the ekos capture screen. Multiple instances of the sub-exposure calculator can be started concurrently so that side-by-side comparisons can be made for variations in inputs.

Data for camera read-noise will be provided through individual xml files which will be user maintained and published in a repository. These camera data files persisted within a folder "exposure_calculator" under user/local/share/kstars. The calculator includes the capability to download camera files from a repository. Upon the initial start of the calculator at least one camera data file download will be mandatory before the calculator can be instantiated.

The intent is that camera data file names will be used to allow the calculator to select an appropriate camera data file based upon the device id of the active camera. (But some of the initial camera files were named using educated guesses, and will likely need to be re-named).


Rotator Dialog Improvements


Toni Schriber merged improvements and fixes for the Rotator Dialog. As shown in the illustrations the user interface is very simple and there is only one parameter to set: The Camera Position Angle. It is a very consistent term and easy to understand. The same Position Angle (PA) is also used in Alignment, Scheduler, and the Sky Map.


In the gauge this angle is presented in the same color as the FOV in the planetarium sky and in viewing direction. This way one can relate and understand this angle intuitively. The rotator angle is presented in gray and also in viewing direction. This angle is calculated from the Camera PA and the Cameras Offset Angle which is calibrated each time a [Capture & Solve] or a [Load & Slew] is brought into action. For further clarity the rotator angle and the camera offset is displayed again in a information window together with the current pier side.

The Rotator Settings can be accessed either in the Capture or Align modules.


Focus Linear 1 Pass Improvements


John Evans continued his phenomenal improvements to Ekos Focus module with L1P Phase 2 changes as detailed in the Linear Focus Phase 2 document. Here are the highlights:

  1. Optimized curve fitting . Should be faster and more accurate and includes outlier rejection.
  2. Currently HFR is the only fitting "measure" available. The following have been added: a) HFR Adj (adjusted HFR to compensate for star brightness vs background variation) b) FWHM c) Number stars (max at focus rather than a min) d) Fourier Power (alternative focus method not requiring star detection)
  3. Focus units can be displayed in pixels or arc-seconds.
  4. Critical Focus Zone - a calculator with 3 different algorithms has been added
  5. Focus Offset Utility to automatically build focus offsets.
  6. Take flats at same focus point as lights has been fixed.
  7. Focus Adviser. Still working on this but a tool to help with focus parameters (since there are now so many).
  8. SEP parameters suggestions for focus. Keen to get some feedback on this.
  9. Adaptive focus to adapt the focuser position between Autofocus runs, aiming to keep optimum focus for each sub-frame. Adaptations for Temperature and Altitude are supported.
  10. Adaptive focuser start . The starting position for an AF run can be filter and Adaptive Focus adjusted.
  11. Focus walks added to control how the inward sweep of the AF process performs.
  12. AF Overscan originally implemented in the Linear algorithm and then reused by Linear 1 Pass now extended to all focuser movements.

In addition to HFR, you can now use different measurements (FHWM, # of Stars, Fourier Power) that may work well with your setup and environment. Here are some focus runs with each of the new measurements types. You will notice that the solutions are very close to each other.

FWHM




# Of Stars



Fourier Power





Focus Aberration Inspector


Wolfgang Reissenberger introduced the mosaic view well known from PixInsight's AberrationInspector script that builds a mosaic from all image corners and center tiles such that they can be compared directly.

Supernovae are back


The last few releases was missing supernovae data since the online source that was providing the data decided to go offline. Thankfully, Philipp Auersperg-Castell communicated with the fine folks over the Transient Name Server (IAU Supernovae Working Group) to obtain daily supernovae updates and imported them to KStars. All Recent supernovae should be available now in KStars.







Wednesday, 31 May 2023

I was messing around with some code that implements a widget hierarchy today, and bumped into some interesting edge cases of virtual functions. Parameters with a default value behave in an unexpected way.

Here is a vastly simplified code snippet:

#include <fmt/core.h>
struct Base { virtual void Func(int v = 42) = 0; };
struct DerivedA : public Base {
  void Func(int v) override { fmt::print("A={}\n", v); }
};
struct DerivedB : public Base {
  void Func(int v = 8) override { fmt::print("B={}\n", v); }
};

There is a abstract base class (with a virtual function defined = 0) and two derived classes which override the virtual function in the base. Note that one of the derived classes forgets the default value of the parameter, and the other gives it a different value.

Note the use of the contextual keyword override. See item 12 in Scott Meyers Effective Modern C++. It makes the compiler complain in the function declaration that is decorated with it, is not actually an override. Examples of not-an-override come from typo’s, different return or parameter types, different constness .. there’s a bunch of ways to get it wrong, which is why the advice is to use override liberally.

Let’s call those virtual functions via a pointer-to-base and a pointer-to-derived in all four possible variations, shall we?

int main() {
  Base * ba = new DerivedA;
  Base * bb = new DerivedB;
  auto * da = new DerivedA;
  auto * db = new DerivedB;
  ba->Func();
  bb->Func();
  da->Func(3);
  db->Func();
}

You may ask: why does da->Func() need a parameter? Well, there is no default given in the declaration in the derived class. The default value provided in the base class is hidden.

If I leave the value 3 out, then clang suggests that I call Base::Func() instead. That compiles, and then fails to link because – and that’s the whole point – Base::Func() is pure virtual.

The output of the program is this:

A=42
B=42
A=3
B=8

When called through a pointer-to-base, the default value from the declaration in the base class is used. When called through a pointer-to-derived, the default value from the declaration in that derived class is used (or, if there is none, then you need to provide a value).

Takeaway

Now that I ran into this, I looked it up on cppreference, which says

The overriders of virtual functions do not acquire the default arguments from the base class declarations, and when the virtual function call is made, the default arguments are decided based on the static type of the object.

In the context of the codebase I’m working on today, this translates to

Do not provide default arguments in the declaration of abstract virtual functions.

Because you asked for it, here a surprise video by Ramon Miranda introducing gradient brushes:

 

The post Surprise New Video by Ramon: Gradient Brushes appeared first on Krita.

Tuesday, 30 May 2023

I can’t believe it’s already the end of May! This month turned out a little meatier than last month I think, but I still have a large backlog of merge requests and TODOs to go through.

Plasma #

Now when there isn’t enough space to display the QR code in the clipboard applet, there is a clearer message of what to do next.

Screenshot of the new message in action.
Screenshot of the new message in action.

On the topic of QR codes, the menu is now a menu of radio buttons and not checkboxes which didn’t make sense because it’s an exclusive option.

You can&rsquo;t have two different codes being displayed after all.
You can’t have two different codes being displayed after all.

There is now a separator above the “Close” action in the window menu!

It now matches other context menus with this action, e.g. the Task Manager
It now matches other context menus with this action, e.g. the Task Manager

I added a metadata extractor for Krita files, which means certain information about your Krita artwork can show up in Dolphin, Baloo and other programs that can take advantage of it! This includes helpful information such as canvas width, height and creation date.

A slightly outdated screenshot, but showing off some of the metadata it can extract
A slightly outdated screenshot, but showing off some of the metadata it can extract

Soon, the Language and Region settings will support the $LANGUAGE environment variable. This only affects users who did not configure the language explicitly from KDE, like those coming from another computing environment. We already supported loading your pre-existing language from $LANG. Included in that merge request is a fix that stops an erroneous warning message telling you that your language isn’t supported, even though it clearly is.

Plasma SDK #

For new users of the Plasma SDK, there is now a clearer and more helpful message when you start plasmoidviewer without an applet specified.

$ plasmoidviewer
An applet name or path must be specified, e.g. --applet org.kde.plasma.analogclock

I proposed making the icon name selectable, because I can’t stop myself from clicking on it!

Screenshot of selecting the icon name in Cuttlefish.
Screenshot of selecting the icon name in Cuttlefish.

Gamepad KCM #

Jeremy Whiting has been hard at work improving the backend code, and I finally took a shot at creating a proper art prototype of the controller that will be featured in the KCM.

Concept art of the controller, not finalized yet.
Concept art of the controller, not finalized yet.

This will be the base image for the different controller types, and it will change depending on what controller we detect. Neither of us are experts in Inkscape, so we plan for the this to be easily tweakable by actual designers who do not need to know the fine details of the KCM. This is possible because we’re also developing an Inkscape extension to automate exporting SVG files into QML templates that describe button, trigger positions and so on.

The concept is already working in the KCM, but it looks a little off right now and isn’t ready for showcasing yet :-)

Tokodon #

Many users (including myself) have been experiencing crashes because of the video support added in the last release. QtMultimedia - the library we used for video support - in Qt5 is frustratingly buggy, but has improved in Qt6. Unfortunately, we still have a few more months before KDE Gear applications like Tokodon can switch to Qt6 only and we need a solution for the crashes now. I started porting Tokodon’s video support to mpv which is also used in PlasmaTube!

Playing videos and GIFs should be less crashy, but with worse scrolling performance. However, I worked hard to make sure this only affects auto-play, so if you don’t that option enabled then you shouldn’t notice a difference. This change is almost ready and should appear in the next release, but it lacks testing on Android.

You can now change certain account preferences, but the selection is limited due to lack of a proper API. These are preferences that were supported before, but now you can change them from within Tokodon.

The preferences you can tweak in Tokodon
The preferences you can tweak in Tokodon

And a whole slew of smaller stuff, some which are appearing in the next bugfix release:

Tokodon on GNOME!
Tokodon on GNOME!

For the current and future contributors, I started working on better and more detailed documentation. The first two areas I covered was timeline models and the account classes!

In terms of starting even more future work, I started implementing QtKeychain support, and rewriting the current, and buggy, account saving mechanism with KConfig. This will hopefully land in the next release, and fix a whole slew of nagging security and account duplication bugs.

qqc2-desktop-style #

If you’ve been noticing that qqc2-desktop-style on Plasma 6 is spitting out some weird stuff in your logs:

Warning: file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33:13: Unable to assign [undefined] to bool (file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33, )
Warning: file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33:13: Unable to assign [undefined] to bool (file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33, )
Warning: file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33:13: Unable to assign [undefined] to bool (file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33, )
Warning: file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33:13: Unable to assign [undefined] to bool (file:///home/josh/kde6/usr/lib/qml/org/kde/desktop/private/MobileCursor.qml:33, )

I fixed that! It also needs these ECM changes to work. It turns out ECMQmlModule didn’t handle singleton types, and other nagging problems that qqc2-desktop-style needed. I’ve been dabbling in this module for the past month or so so it’s exciting to be able to help here.

Kiten #

I took some time to improve the codebase of our Japanese reference tool Kiten, because it seems to have not been very active the past few years. I think it was written before we used C++11. I found a bunch of places where 0 was used to set pointers to null!

I started replacing the old foreach macro, use auto to prevent duplicate types and other modern C++ gardening tasks.

Websites and Documentation #

The go.kde.org Matrix redirector update is now merged, which I started in February. This means NeoChat is now preferred right below Element Web (which is still pointed towards https://webchat.kde.org/). Thanks to Thiago Sueto, the Community Wiki has been updated already and I sent two merge requests to update kde.org and the footer.

The updated matrix.to redirector!
The updated matrix.to redirector!

To finish off more February work, I got around to working on the two big pieces of API documentation improvements for KDE Frameworks 6. If you don’t remember, I wanted to add import statements for components meant to be used in Qt Quick. Doxygen already gives us hints for C++ headers, so QML users shouldn’t be left in the dust. For example, how are you even supposed to use this component?

This is a real example. Not all components are like this, fortunately.
This is a real example. Not all components are like this, fortunately.

In order to accomplish this, subclasses of QQuickItem need to have their doc comments modified. The first library to get this treatment is plasma-framework, see the merge requests for PlasmaCore, PlasmaQuick and hiding ToolTipDialog.

For regular QML-based components, doxyqml (the tool to auto-generate QML documentation, because Doxygen lacks support for the language) needed to spit these out too. The merge request to add import statements is cleaned up, the tests fixed and ready for final review!

Ah! I had to import that module!
Ah! I had to import that module!

I also spent some time cleaning up the Community wiki, which just means I roam around and make sure links aren’t dead and the formatting looks nice. If you’re interested in some wiki improvement, join us in #kde-www and the Issue board!

Packaging #

I was recently researching how well Tokodon works out of the box on other desktop environments. It turns out 90% of issues with Kirigami applications can be solved by installing breeze-icons and qqc2-desktop-style! We might be enforcing this soon, so if you are in charge of packaging Kirigami applications, please make add them as weak or required dependencies! I will probably start filing packaging bugs soon.

In terms of KDE packaging issues in distributions, I opened up two this month:

Akademy 2023 #

I’m also attending Akademy this year in Thessaloniki! My passport was delivered this month, which is strangely hard to get in the USA (currently).

I finally got the passport today! Pretty happy that I no longer have to worry about this little book :bunhdgoogly:

Image 110391767845930597 from toot 110391772254719472 on mastodon.art

I booked my accommodations last week, so I’m excited to see everyone in-person in July! This is my first time traveling outside of the North American continent, and to Europe no less. I’ll be documenting my experience traveling and at Akademy, but I’m not sure what format it’ll be in yet.

Monday, 29 May 2023

Not a moment after I had walked out the door to catch a train to Berlin for the KDE e.V. board sprint (May 2023), there was a local power failure which took down my in-house IT. That wouldn’t be so bad, except it did not come back up. Cue gnashing of teeth from the people who stayed at home (but, really, should have been able to hack into the router to fix it).

What Went Wrong

  • The Pine H6 which provides DNS and DHCP to the house, did not come up. I’ve seen it before – a power droop leaves the eMMC discombobulated, and no amount of cajoling will get it back unless you pick the eMMC off the board and futz with it in a different machine.
  • The modem relies on the Pine H6 and does not provide fallback of its own (which would have allowed easy configuration of static IP and DNS, anyway).
  • My workstation, which I thought was configured with static IP, was set to DHCP instead, so it didn’t get an address at all.

Fixing fallback DNS and my workstation IP was simple.

Fixing the H6 was slightly more involved.

Why Was eMMC Involved At All

Originally the H6 also ran QuasselCore and some other services. These write to disk and are persistent. I had had bad experiences with write endurance of micro-SD cards. As in, they’re lousy in write-intensive scenarios and wear out quickly.

I figured eMMC such as used in the PineBook would be a better candidate for writable storage.

Since originally setting this up, I have stopped using QuasselCore. So the write-intensive and potentially large data-storage needs are gone. But the eMMC configuration lives on in my H6, which is disastrous when a power droop leaves it discombobulated.

Fixing The eMMC

On boot in FreeBSD I kept getting controller timeouts and device-read timeouts on the eMMC block device. The filesystem would not mount, and I would eventually get dropped down to single-user mode. Unfortunately, in single-user mode, you need to use the serial console to talk to the board (if I expect people at home to hack the router, maybe I should expect them to deal with serial ports too).

I am, frankly, not sure what I did right. I picked the eMMC off the H6, stuck it to an adapter which I had just received with the VisionFive V2, and dd‘ed the whole device to /dev/null. Since it did not throw any read errors or timeouts, I put it back on the H6 and wished for good luck.

Note to self: on the Pine H6, the EXP connector has pin 6 = GND, 7 = TX (goes to RX on the USB-to-serial), 8 = RX. Those are the easiest to count-out pins. Also, they’re bent on my board from all the connecting-and-disconnecting I do.

Making The eMMC Unnecessary

Originally I added the eMMC for write-intensive large data sets, but those have gone away on this machine. So what’s left? Maybe 64MB of data that gets written or updated – the DNS log, DHCP leases, maybe a cache. But none of that is very big, and none of it needs to be persistent across (rare!) reboots. All the writable data on the system lives in /var.

FreeBSD supports a variety of diskless operation modes, so I went looking what is possible there. Turns out /var on diskless systems can be treated specially, and that is just what I need.

In rc.conf there are dozens of system-configuration variables that you can set. It’s still old-school SysV initialization, and I like it like that. Here is what I added to /etc/rc.conf:

varmfs=YES
varsize=256M
varmfs_flags='-S -k /var.md/'

The configuration says to use a memory-disk for /var, that it should be 256MiB large (plenty, and still acceptable within the 3GiB memory size of the H6), without softupdates (a BSD UFS tweak) and using /var.md as “skeleton”. That means that the memory disk is populated from the contents of /var.md when it is created.

With this setup, I have writable storage that is not persistent and that does not wear our the SD card, with minimal impact on the rest of the system – and it is simple to switch back if necessary.

Sunday, 28 May 2023

Hello, Tech enthusiasts! I am beyond excited to introduce to you my first project on GitHub – a Bash-based Telegram Bot that allows you to monitor and control a remote computer!

The idea behind this bot is pretty simple, yet powerful – you can command your PC, retrieve important system information, perform updates and even control system processes directly from your Telegram app. I’ve designed this bot with KDE Neon in mind, but it can be adapted to other Linux-based systems.

Here’s a sneak peek into some of the key functionalities provided by the bot:

function getBattery {
local percentage=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep percentage | awk ‘{print $2}’)
echo “Battery level: $percentage”
}

function getCpuUsage {
local usage=$(top -bn1 | grep “Cpu(s)” | \
sed “s/.*, *([0-9.])% id.*/\1/” | \
awk ‘{print 100 – $1″%”}’)
echo “CPU Usage: $usage”
}

The bot responds to a set of predefined commands that range from simple system status checks like /battery, /status, /uptime, /memory, /disk, /cpu_usage to more complex functionalities such as /shutdown, /upgrade, /screenshot, and so on.

For the bot to run, it requires some prerequisites like curl, jq, bc among others. Some commands also require specific programs to be installed on your system.

The code is still in its initial version (0.1) and there might be some bugs on certain commands. But I am enthusiastic about making it better with every iteration. Future enhancements include multi-language support and other features based on user feedback.

I encourage you to give it a try, and would greatly appreciate your feedback. Feel free to report any issues, or suggest enhancements on the project’s GitHub page.

Here’s the link to the project on GitHub: telegram-remote-bash

Happy Coding!

After I accidentally screwed up my system Friday night, I ended up with no choice but to install all system updates from KDE neon “unstable” which now defaults to a Plasma 6 session. I certainly wasn’t planning on spending a few hours that evening fixing my setup. Alas, I am now taking “eating your own dog food” to the extreme and made my daily driver laptop run Plasma 6.

“About this System” dialog: KDE neon Unstable Edition.
KDE Plasma Version: 5.27.80
KDE Frameworks Version: 5.24.0
Qt Version: 6.5.0
There’s a few loose screws here and there.

Of course in the current phase of development it’s in a bit of a rough shape, a combination of packaging / co-installability woes, like some key components still stemming from a Plasma 5 build, and actual broken code suffering from changes in Qt, Frameworks, and Plasma itself. For instance, the Breeze SDDM theme already requires Qt 6 whereas SDDM is currently shipped as a Qt 5 build. The fallback theme it provides is quite broken, so it took me a while to log in again. On the other hand, Breeze temporarily isn’t provided for Qt 5 anymore, so those apps look hideous right now. Of course, this is all being worked on and will be resolved soon.

On the plus side, I now really have to fix everything that gets in the way of using this system productively. I already addressed a few issues Nate bugged me about at the Plasma Sprint in Augsburg earlier this month. For starters, my KRunner wasn’t working and aborted whenever I typed a query. I was completely oblivious to how reliant I have become on it until it stopped working. Luckily, it was just a stale KRunner plug-in I had been working on ages ago (one that lets me find emails in Thunderbird, sadly never finished due to massive performance problems in the relevant extension APIs). Once deactivated, KRunner was mostly usable again.

However, clicking results in KRunner doesn’t work, you have to use the keyboard to select them. While the items visually react on a mouse press, no action is triggered on release. It seems the ListItem inside steals the clicks from the surrounding MouseArea. The easiest solution is to shuffle the code and make the ListItem the root object, which also simplifies and speeds things up, but I’d really like to know what changed and where (is it Qt, Kirigami, Plasma Framework?) to break code that doesn’t appear to have changed much in years.

Another bug I just addressed was favicons not working in Plasma Browser Integration’s KRunner plug-ins (tabs runner and history runner), again a feature that I heavily rely on. Qt 6 introduced a qsizetype (something like size_t) which it now uses instead of int for properties, such as array size, image stride, etc. In some places this change was accidentally propagated to DBus signatures which subsequently broke an API contract.

Finally, the removal of the deprecated Qt.MidButton enum value (it’s now Qt.MiddleButton) broke middle clicking windows in the task bar to close them. Luckily, that was a straightforward change and at a glance I didn’t find any other references to the old name in Plasma repositories.

Over all, the system is quite usable and I encourage all brave developers to give it a try and help iron out all the bugs. Nevertheless, at the moment it’s pretty much just a Qt 6 port of Plasma 5, and I expect other things to break as we integrate more fundamental changes to the software architecture. For instance, the Plasmoid API is currently undergoing a major cleanup and Plasma Framework is being dismantled right now.

Going to Akademy, Thessaloniki, Greece

Saturday, 27 May 2023

Hey all, just a simple blog post this time, I just wanted to showcase the colorscheme I have made for KDE Plasma and various text editors and such.

AksDark Colorscheme for KDE Plasma

Download

I have been working on this colorscheme for many months now, slowly tweaking it and figuring out what are the best colors for me.

I think I’ve finally found what works for me the best.

About the name: I am bad at naming things and I just first felt like “Okay only I use this colorscheme so I just name it AksDark lol” and well seems some people like it a lot!

Why

Okay, yes, it’s silly to write about history of why I made a colorscheme besides “it looks cool” but hear me out, there’s an actual reason!

I have tried a lot of dark colorschemes, but they often share this one thing that does not work for me:

Low contrast.

My eyes are in weird place where too high contrast hurts, but too low contrast just doesn’t help readability at all and I get easily distracted. I think my ADHD adds to it as well!

I couldn’t for the life of me find a colorscheme that has vibrant colors but also not too dark background. Even Catpuccin, while good looking, has just too much pastel for me, and the purple background just bothers me in general.

I would love to rename AksDark to something else and have similar project for it like Catpuccin is! Email me or talk to me on Fediverse if interested :D

With pastel colors, the colors arent distinct enough and when I read things, I keep jumping from place to place, since it doesn’t “lock” my eyes. I do not know any science behind this.

I wanted something very neutral, but vibrant. These sound like they’re odds with each other, but I think they can be made work.

What

AksDark comes with dark-gray background, but all the elements are vibrant and high color. I tried to keep the luminosity of the color values very similar, so in black and white mode one can still look at the text and see what’s going on.

AksDark Colorscheme in black and white

As you can see the colors are pretty distinct in b/w mode, however it seems link and visited colors could use some tweaking. Of course one has to remember that different monitors can display them differently and so on.

The contrast is purposefully high, but not too high. The gray background ensures that eyes do not hurt when looking at the bright text, but it still is bright enough to lock my view and help me concentrate.

How

I just trial-and-error’d it. I tried even darker background color but that ended up getting my eyes tired. I tried less bright text etc. colors but that just made me distracted easily, avoiding the “eye-lock.”

What I got now is pretty much perfect for my needs.

The most helpful tool with this was definitely Themer.dev! One can easily make their own colorschemes with it. However, the biggest problem with it is that, for example, syntax highlighting will always look different between applications. So it will require a lot of manual tweaking in the end, which is what I spent most of my time doing.

Other apps

Since I really like this colorscheme, I made a Kate style for it too:

AksDark Colorscheme for Kate text editor

Download

And Konsole

AksDark Colorscheme for Konsole terminal emulator

Download

There’s colors for other apps like VSCode and Jetbrains IDE’s in my repository: https://codeberg.org/akselmo/aks_themes

However they may not be as up-to-date.

Outline plasma theme!

Last but not least, if you use the default Breeze window decoration with this colorscheme, this Plasma theme is also default Breeze, but with similar outlines. Having outlines on my Plasma theme helps me a lot (I dont get lost in sea of windows), so maybe someone else will find it useful too: AksDarkPlasma

Also remember that you can download all these themes and styles from the “Get more new stuff” menus in KDE Plasma!

That’s all, I hope you like the colorscheme and find it useful as well, if your eyes and/or brain are just as weird as mine!

About me

Hi! Im Vansh, a third-year CS undergraduate. Ive been looking to start contributing to FOSS projects for a while now, and decided to make use of GSoC as a foray into my open source journey. KDE Plasma on top of various Linux distributions has been my daily-driver of choice for nearly three years, which is why KDE especially appealed to me as a community that I'd love to be a part of. Let's get started :)

The project: Calendar invitations in Kalendar

One of the limitations of Kalendar in its current form is that without the option to send and receive invitations for events, Kalendar users must resort to other calendar clients to manage their meetings when dealing with events with multiple attendees. The goal of this project is to implement actions in Kalendar allowing users to share their free/busy information, view free/busy info of others, send invitations to others while creating or editing events, check attendees participation status and respond to incoming invitations.

Anyway, will catch you in the next post with some updates on the project!

Since the last update two month ago KDE Itinerary got an improved timeline view, new importing and editing capabilities and even more travel document extractors. We also started to explore ways to integrate with Matrix for coordination during group trips.

New Features

Timeline revamp

The most noticeable changes both in look and feel happened around the main timeline view, in particular the better looking card headers and the much improved scrolling performance.

KDE Itinerary's main timline page showing a train ticket, hotel reservation and weather forecast.
KDE Itinerary's new timeline view.

Many more details of the timeline were improved as well:

  • Transfers are now properly included in trip groups and don’t sometimes leak out after a group in case of delays.
  • Weather forecast elements are much more compact.
  • Cancelled elements no longer trigger conflict or missing connection warnings and no longer show progress indicators or interfere with transfers.

Besides the significant timeline scrolling performance improvement, we also integrated a few optimizations for the application startup, with loading more data on demand and by using more efficient storage formats.

Importing from URLs

Importing data by merely copy/pasting a URL to the corresponding event such as the KDE Akademy 2023 website has been mentioned last time already, but has meanwhile been expanded further.

This now also works for website referring to e.g. a hotel or restaurant which unlike an event misses information about when you are going to be there. In those cases we now bring up the corresponding editor pages pre-filled with all information already found on the website.

Like with events this is all based on machine-readable schema.org annotations in those sites and thus only works with sites having that.

KDE Itinerary's hotel reservation editor with the hotel address already filled in.
Hotel reservation editor pre-filled based on a pasted URL.

Additionally, importing from URLs now also works via the URL sharing feature on Android.

Even more editing

In order to support this Itinerary’s editing capabilities have been significantly expanded. This includes:

  • Bus seat reservations.
  • Shortening bus trips as it has already been possible for train trips.
  • Hotel checkin/checkout times.
  • Restaurant reservation times.
  • Event times and URLs.
  • Airport names, terminals and arrival times for flights.
KDE Itinerary's bus reservation editor allowing to shorten trips and add reserved seats.
Bus reservation editor.

Several platform-specific date/time editing issues have also been addressed, as well as the address editor flagging all postal codes as invalid in countries where we have no postal code format information.

Infrastructure Work

Matrix location sharing

In the background we have been experimenting with the foundation for new exciting features to support coordination on group trips, integration with Matrix.

This mainly includes exploring how general Matrix support can be made available to non-chat applications without duplicating essentially a full chat client, as well as more specifically how static and real-time location sharing over Matrix could work, ideally not just limited to a simple coordinate but including all the context we have in Itinerary.

NeoChat showing a map with a location shared from the corresponding event reservation in Itinerary.
NeoChat showing a location shared from Itinerary.

This is all still early and experimental and not integrated by default, but hopefully we have the basics working in time for some field testing during Akademy in Thessaloniki in a few weeks :)

I'm going to Akademy 2023!

Generic ERA FCB extractors

Quite some effort went into implementing ERA “Flexible Content Barcode” (FCB) ticket barcodes over the past year, at times when those only occurred rarely in the wild. ERA FCB barcodes are the “new” fully machine readable (but very complex) standard for interoperable European railway tickets. This effort starts to pay of nicely meanwhile, as more and more operators begin to use this format, most recently European Sleeper and some variants of the “Deutschlandticket”.

With the wider selection of samples we were now able to implement a generic extractor for ERA FCB tickets, which should produce decent results even with ticket variants we haven’t seen yet. With the preceding more human- than machine-readable ERA TLB format this was far less reliable.

The use of UIC station codes in ERA FCB tickets also resulted in 1000+ Wikidata changes to add or fix UIC codes in railway station data, in particular in regions that traditionally used different station codes, such as Germany.

Fixes & Improvements

Travel document extractor

  • New or improved extractors for Aegean Air, Air Asia, ATPI, B&B; Hotels, Best Western, České dráhy, Deutsche Bahn, European Sleeper, Eventbrite, FlixBus, Gepard Express, Grimaldi Lines, MÁV, ÖBB, Ouigo, Qatar Airways, SNCB, SNCF, Sunny Cars, Vueling, and Westbahn.
  • Support for several encoding variants of the Deutschlandticket, as well as for the ÖBB VorteilsCard.
  • Fixed merging of hotel reservations for different people with different checkout times.
  • Fixed extracting from emails with emails as attachment.
  • Improved generic name extraction to also recover spaces lost in boarding pass barcode encoding.

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

Public transport data

  • Improved coverage metadata for the Czech Republic.
  • Fixed a crash when cancelling location search queries.
  • Fixed location queries in Australia and the UK.
  • Support for FlixTrain, MÁV and SNCF Intercites onboard APIs.
  • Support for disruptions messages from the Deutsche Bahn onboard API.

Indoor map

  • Train station floor level data fixes in OSM for Lyon Part-Dieu, Mönchengladbach and Stuttgart, among others.
  • Fixed hit detection for icons using a physical sizes.
  • Support for the MapCSS text-position declarations as well as negative numeric tag values.
  • Improved rendering of different variants of linear barrier types (bollard lines, hedges, kerbs, etc).
  • Fix rendering of service roads in the light color style.
  • Handle additional ways of modelling platform sections in OSM.
  • Fixed rendering of ocean areas.
  • Improved rendering of certain combinations of floor and column elements found e.g. in Paris Gare de l’Est.

Itinerary app

  • Fixed display of binary PDF417 barcodes used e.g. by MÁV.
  • Added support for EAN13 barcodes needed e.g. by Grimaldi Lines ferry tickets.
  • Fixed a deadlock on updating currency conversion rates (bug 469562).
  • Fixed attaching documents on multi-traveler reservations losing data of other travelers (bug 469347).
  • Fixed imported PDFs losing their file name on Android (bug 468942).
  • Show the platform section for the current seat reservation or booked seating class on the train details page when available.
KDE Itinerary's train reservation details page showing the platform section the current seat reservation is in.
Train departure details showing the platform section based on the seat reservation.
  • Show disruption notes on the live status page when available, and hide information that is not supported on board of the current trip.
  • Added a toggleable auto-follow mode to the live status map.
  • Improved Apple Wallet boarding pass layout for overflowing labels.
  • Fixed vehicle layout content overlapping the page header on Android.
  • Improved the display of date-only check-in/check-out times for hotel reservations.

How you can help

Feedback and travel document samples are very much welcome, and there are plenty of other things that can be done without traveling as well. The KDE Itinerary workboard or the more specialized indoor map workboard show what’s on the todo list, and are a good place for collecting new ideas. For questions and suggestions, please feel free to join us in the KDE Itinerary channel on Matrix.