Language Selection

English French German Italian Portuguese Spanish

Kde Planet

Syndicate content Planet KDE
Planet KDE
Updated: 8 hours 48 min ago

20.08 releases schedule finalized

Thursday 11th of June 2020 05:53:00 PM
It is available at the usual place

Dependency freeze is in four weeks (July 9) and Feature Freeze a week after that, make sure you start finishing your stuff!

KDE's June 2020 Apps Update

Thursday 11th of June 2020 12:00:00 PM

It always a joy when the KDE family grows, that’s why this month we are especially happy to welcome backup manager Kup and a whole new packaging effort: Homebrew.

New releases Kup 0.8

Kup is a backup tool you use to keep your files safe.

It was previously developed outside of KDE, but this last month is has passed the Incubation process and joined our community, becoming officially a KDE project. The lead developer, Simon Persson, has celebrated with a new release.

Here are the changes you will find in the new version:

  • Changed how rsync type backups are stored when only one source folder is selected. This change tries to minimize risk of deleting files for a user who selects a non-empty folder as destination. Added migration code to detect and move your files on the first run, thus avoiding copying everything again and doubling the storage.
  • Added advanced option that lets you specify a file Kup will read exclude patterns from, for example, letting you tell Kup to never save *.bak files.
  • Changed default settings, hopefully making them better.
  • Reduced warnings about files not being included, as it was raising too many false alarms.
  • Kup no longer asks for a password to unlock encrypted external drives just for the sake of showing how much space is available.
  • Fixed not treating a backup saving as failed just because files went missing during the operation, both for rsync and bup.
  • Started running backup integrity checks and repairs in parallel based on the number of CPUs.
  • Added support for bup metadata version 3, which was added in bup version 0.30.
  • Lots of smaller fixes to user interface.

Kup can backup using rsync or do versioned backups with the Python tool Bup. Bup currently only works with Python 2 which means this option won’t be available on many distros, but a port to Python 3 is in the works.


To find out more about Kup, Average Linux User did a review and a video on Kup not long ago:

Krita on Android Tablets

Thanks to the hard work of Sharaf Zaman, Krita is now available in the Google Play Store for Android tablets and Chromebooks (but not for Android phones).

This beta, based on Krita 4.2.9, is the full desktop version of Krita, so it doesn’t have a special touch user interface. But it’s there, and you can play with it.

Unlike the Windows and Steam store, they don’t ask for money for Krita in the store, since it’s the only way people can install Krita on those devices. However, you can buy a supporter badge from within Krita to support development.

To install

  • Get Krita from Google Play
  • Alternatively, in the Play Store, switch to the “Early access” tab and search for org.krita. (See: Google’s official instructions on Early Access. Until we’ve got a reasonable number of downloads, you’ll have to scroll down a bit.)
  • You can also download the apk files yourself. Do NOT ask for help installing those files.
  • Those are all the official places. Please do not install Krita from other sources. We cannot guarantee their safety.


  • Supports Android tablets & Chromebooks. Android versions supported: Android 6 (Marshmallow) and up.
  • Currently not compatible with: Android phones.
  • If you have installed one of Sharaf’s builds or a build you’ve signed yourself, you need to uninstall that first, for all users!

Krita on Android Incoming

KIO Fuse made its first beta release this month.


Bugfix releases came out for

  • Collection manager Tellico with an updated filter dialog to allow matching against empty text.
  • Local network browser SMB4K fixed saving settings on close.
  • Coders IDE KDevelop made an update for the moved KDE repositories.
App Store

While in Linux we are gradually getting used to being able to install individual apps from an app store, the reverse is happening in the world of macOS and Windows. For these systems, package managers are being introduced for those who like one source to control everything on their systems.

The leading open source package repository for macOS is Homebrew, managed by a crack team of developers including former KDE dev Mike McQuaid.

This month the KDE Homebrew project, which has been running external to KDE for a while, moved into KDE to be a full part of our community.

You can add the KDE Homebrew repo for macOS and download KDE sources complied ready for you to run.

We caught up with lead dev Yurii Kolesnykov and asked him about the project.

Tell us about yourself, what’s your name, where do you come from, what’s your interest in KDE and mac, what do you do for a living?

My name is Yurii Kolesnykov, I’m from Ukraine. I have a passion for Free Software since I first heard about it, approximately in the end of high school. I think KDE is simply the best DE for Linux and Unix systems with many great apps. My interest in Mac comes from my main job, I develop iOS Mobile Software for living.

What Is Homebrew?

Homebrew is the most popular package manager for macOS, just like apt or yum. Since macOS is Unix and Apple provides good compiler and toolchain for it, people decided to create package managers for it, so you may install much free and open source software on Mac. Homebrew also has a subproject, called Homebrew Cask, which allows you to install many binary applications, i.e. proprietary or GUI ones. Because GUI apps are hard to integrate with the system if they are installed via Homebrew.

What KDE packages have you made for Homebrew?

I just ran grep on our tap, and I see that we have 110 packages in total, 67 of them are frameworks, and approximately 39 apps. We already have most popular apps, like Kate, Dolphin and KDevelop, because of users request.

As a Mac user what do you need to do to get apps installed?

At first, you need to follow Homebrew installation guide if you don’t have it yet, it’s available at Then you need to tap our repo with the following:

brew tap kde-mac/kde

Unfortunately a lot of KDE packages doesn’t work out-of-the-box, but we created a script that makes all the necessary hacks, so after tapping you need to run the following command:

"$(brew --repo kde-mac/kde)/tools/"

Do you know how popular Homebrew is as a way of getting apps for Mac?

Good question. Unfortunately we haven’t setup any analytics yet, I will add it to my TODO list. But given the fact that Homebrew is the most popular package manager for Mac and it requires users not to mix it with other similar projects to install software on same Mac, due to conflicts. So, yes, I think it’s quite popular.

How much work did you need to do to get KDE apps working in Homebrew?

During creation of current packages, we already addressed many common issues, so bringing new software is relatively easy. I promise to write a How to for this, users are already requested it many times.

Currently, packages need to be compiled locally, will you have pre-compiled packages available?

Homebrew allows you to install software via Bottles, i.e. pre-compiled binary packages. But the process of creating bottles is tightly integrated with Homebrew infrastructure, i.e. we need to run CI with tests on every package before it get bottled. So we decided to integrate as many packages as possible into the main brew repo to eliminate maintenance burden.

Is there much other desktop software available in Homebrew?

Yes. In general, if an app is popular and has a channel of distribution outside of Mac AppStore, then there is a very high chance that it’s already available to install via a Brew Cask.

How can KDE app authors help get their software into Homebrew?

Apple hardware is very expensive, so getting a Mac for every KDE dev will be not a good idea. So as for now, they are welcome to create a Feature Request in our repo. Then maintainers or users of Homebrew KDE report bugs if something isn’t working as intended. And we are trying to provide as much information as possible upon request of KDE devs. But as for now we have a lot of pending tickets for KDE apps with small, but very annoying bugs. I hope that we will be more integrated with KDE infrastructure, i.e. we may link bugs in our repo with upstream projects. We had already migrated to KDE Invent and I hope KDE Bugs will be migrated from Bugzilla to KDE Invent soon.

The other way to get your KDE apps built for Mac is with Craft. How does the Homebrew build apps compare to ones build with Craft?

I still think that Homebrew is more friendly to end users. Its install process is as easy as run one-liner. To add our repo and start installing apps from it, you need to run another two lines.

Thanks for your time Yurii. Releases 20.04.2

Some of our projects release on their own timescale and some get released en-masse. The 20.04.2 bundle of projects was released today and will be available through app stores and distros soon. See the 20.04.2 releases page for details.

Some of the fixes in today’s releases:

  • Writes are broken into multiple requests for SFTP servers that limit transfer size
  • Konsole updates the cursor position for input methods (such as IBus or Fcitx) and no longer crashes when closing via menu
  • KMail generates better HTML when adding a HTML signature to mails

20.04 release notesPackage download wiki page20.04.2 source info page20.04.2 full changelog

FreeBSD switches Code of Conduct

Wednesday 10th of June 2020 10:00:00 PM

The FreeBSD project is one of the oldest, longest-running, Open Source projects out there. The community is several hundred regular contributors and thousands of ancilliacy participants. The community, supported by the FreeBSD Foundation, runs a bunch of events each year and has a wide range of communications channels, from mailing lists to IRC to the FreeBSD forums.

Any community this size, spread out over so much of the world, needs to have a social contract: some basic rules on how to interact with each other, what’s acceptable, and what’s not. In the modern world, that means a Code of Conduct that spells out (at least) three things:

  • what behavior is acceptable, and what’s unacceptable,
  • what areas of activity are covered,
  • a complaint and resolution mechanism.

I’m not a student of CoC’s, but I know what I like.

The KDE CoC is one I don’t like all that much, actually: it’s generally-positive in outlook, but the scope is wishy-washy and the resolution mechanism not documented. The Akademy CoC is more clear that way.

The new FreeBSD CoC is based on LLVM’s CoC (draft) and .. I guess it’s ok.

The FreeBSD community has always worked to be a welcoming and respectful community, and we want to ensure that doesn’t change as we grow and evolve. To that end, we have a few ground rules that we ask people to adhere to:

There’s a reporting mechanism, at least (later on in the document).

The previous version of the FreeBSD CoC was based on the Geek Feminism CoC which put enforcement much of in-your-face. I liked that. Something else I miss in the new CoC is some explicit attention for trans- and non-binary rights: Geek Feminism puts that front-and-center as well. I must admit that when that CoC first showed up in my FreeBSD world I had to ask “what’s a deadname!?” And that was an education, and now I know.

So while I’m happy that the FreeBSD community (which I’m part of) continues to take Codes of Conduct seriously, I’m a bit apprehensive about the new wriggle-room. Time will tell, and we’ll have a new democratic round for the CoC in due course.

Nightmares and Bugs

Wednesday 10th of June 2020 10:54:53 AM

(Recommended music while reading this: Peggy Seeger singing “The Housewive’s Lament)

I’ve been having nightmares, well, really weird dreams for quite some time now. Things like finding myself trying to clear up the floor of a large DIY store just before the first opening day, and not managing it, no matter how many friends were helping. Trying to pack all my luggage when leaving a rented holiday home, and never being able to fit everything in. Trying to pack furniture and stuff into boxes before moving out because someone needs to replace the floor, and having to squash ancient china cups in a carton box, breaking them all in the process. If I manage to wake up, I’m exhausted and tired.

And I guess I’ve grokked why I keep having these dreams. And it’s not lockdown or Covid-19. It’s this:

When we held our last bug fundraiser in 2018, we decided to focus for a year on stability. we had about 300 bugs. And we’ve never even managed to come close to that number of bugs ever since! And yet, in the past year, we’ve closed more than a thousand issues.

Clearly, something is wrong here. This isn’t sustainable. We have managed to deflect a lot of reports that were actually cries for support to a new community website, and to r/krita. Our experiment with wasn’t successful, but krita-artists really works. We still do get a lot of worthless bug reports, but I think it could be a lot worse, now that we really have millions of users on four platforms.

But it’s still not sustainable. Every report needs to be read, often deciphered, triaged, investigated, fixed — and all those steps involve communication with the reporter. Even the most useless bug of reports can take an hour to resolve with the reporter.

11:32:47. Eep, incoming bug interrupt. Bug 422729 – No action (assignable shortcut) for Magnetic Selection Tool. 11:33:24: Check, yes, reporter is right. 11:34:32: Confirm. Check code. Notice that all .action files that define actions in the plugins/tools folder are wrong. 11:37:35: Add note to bug report. Fix all of them. 11:47:49: reporter asks a question that needs to be answered, but is not very relevant. 11:56:29: answer given, while I’m building Krita with my fix. 11:57:03: Tested fix, isn’t complete, more work needed. Oh, wait, tested the wrong build. Tested the right build, but the new action isn’t found. 12:00:00 Debug more. 12:25:45: fixed some more broken xml files, ready to make the commit. 12:27:41: Bug is fixed. 12:31:33: Fix is backported to krita/4.3 branch and an extra commit is added that in future will print a warning if the xml parser cannot read the .action files.

Back to this blog post… This was a fast fix: it took about an hour, and in between I also had to run downstairs to receive my new book on Jan van Eyck.

So, this bug report reported a small, but real issue and uncovered a deeper issue. Without the report we probably wouldn’t have noticed the issue. Krita is better because of the report, and the reporter is one of our “known-good” reporters: he has reported 16 bugs this year, one is still in Reported state because we couldn’t reproduce it, six are Confirmed, two are Assigned and seven are Resolved Fixed. Yu-Hsuan Lai has helped us make Krita materially better!

But… Even with me, Dmitry, Agata, Wolthera, Emmett, Eoin, Ivan, Mathias and more people fixing bugs all the time, we’re not getting the numbers down. The floor remains littered, the luggage unpacked and the china unboxed.

Of course we’re not the only ones in this situation: every project that takes bug reports from the general public faces this issue. Some people argue that any bug that has a workaround should be documented and closed; but workaround don’t make for a happy workflow. Others argue that every bug report that is older than two weeks, or a month should be closed because it’s clearly not a priority. But the issue reported is real, and will get reported over and again, with no way of chaining the reports together.

It’s also possible to treat reports like a funnel: first ask people to report on a user-support forum, like, and only when it seems to be a real bug create a bug report, and only when it’s triaged, put it in a queue. But the problem with that is that nobody’s queue is ever empty. That can be done by assigning the bug to one of us: currently we have 64 bugs in the Assigned state. that means, on average, ten bugs each person’s queue. That in turn probably means betwee a week and a month of tasks already in our queue… Which means we shouldn’t actually look at any newly reported bugs, before we funnel them into our queue. (Another option would be to create issues on for every bug we really want to work on, something we used to do with phabricator… But pretty quickly we drowned in those tasks as well.)

Which in turns means that either reporting bugs is useless or our todo queues are useless.

And that todo list doesn’t even include working on new features, refactoring old code so we decrease technical depth or working on regressions — that is, features we broke accidentally.

So, even though bug reports help make Krita better, the one  thing I’m sure of is that we shouldn’t do anything that will make it easier to report bugs. We have more than enough reports to keep us busy.

It would be nice, though, if we could make it easier to make good bug reports, for instance by automatically attaching our system information and usage logs to a bug report made with the Help->Report Bug functionality.

Theoretically, that can be done, bugzilla offers a complete REST interface. And I seem to remember that we had that in KDE, years ago, but that it broke because of an update of bugzilla. There’s a new version of bugzilla coming, apparently, and maybe it’ll be worthwhile to investigate that again, in the future.

Argh… I think the dreams will continue for a while.

Week 1 : GSoC Project Report

Tuesday 9th of June 2020 11:47:46 AM

This week corresponds to Week 3 in the planned timeline.

I created the MVC classes, namely, StoryboardModel, StoryboardDelegate and StoryboardView and implemented a bare bone GUI without much interactivity.

The StoryboardModel provides an interface to the delegate and view classes to handle the underlying data. The model consists of a list of StoryboardItem objects that correspond to individual storyboard items. Each StoryboardItem object consists of multiple StoryboardChild objects, which store data such as frame number, item name, duration and comment fields. This was set up in this way so as to get a tree based model where the index to a storyboard item is different from the individual data index. Now we can have an index for the storyboard item and also have an index for individual field in it, such as duration or comment field.

The StoryboardDelegate class paints items and handles edit events.

For the StoryboardView class I decided to use a QListView in the beginning, but due to it only handling the parent nodes of the model, I decided to subclass the QListView class. QListView is best suited for this purpose because it has certain functions, such as setFlow(…) and setWrap(…) that can make it very easy to get the results that we are aiming for. setFlow(…) can change the flow of the items from horizontal to vertical and vice-versa. So switching from Column mode to Row mode would be a one-liner. Also we can use setWrap(…) to switch to Grid mode.

The current state

This was deceptively time-taking and therefore I couldn’t work too much on making the UI interactive. This week I would get the CommentModel and StoryboardModel to interact so that comments added adds a comment field in each of StoryboardModel’s parent indices. I would implement the view and mode switching, which I think would be easy. Also I would work on making the UI interactive and getting it ready for some basic user testing.

Plasma 5.19 - Sleek and Polished

Tuesday 9th of June 2020 11:37:28 AM

Plasma 5.19 is out! If we gave alliterative names to Plasma releases, this one could be "Polished Plasma". The effort developers have put into squashing bugs and removing annoying papercuts has been immense.

Your browser does not support the video tag.
Plasma 5.19 video

In this release, we have prioritized making Plasma more consistent, correcting and unifying designs of widgets and desktop elements; worked on giving you more control over your desktop by adding configuration options to the System Settings; and improved usability, making Plasma and its components easier to use and an overall more pleasurable experience.

Read the full announcement to discover all the new features and improvements of Plasma 5.19

Lenovo ThinkPad X1 Yoga: impressions, bugs, workarounds, and thoughts about the future

Tuesday 9th of June 2020 04:35:03 AM

My new laptop arrived last week and I’ve been using it since then! Here are my impressions so far of the Lenovo ThinkPad X1 Yoga (gen 4), and how it compares to my old laptop, a 2016 HP Spectre x360:

Hardware side Case and ports

Top-notch quality. The laptop feels lightweight given its size, and it is very rigid. I had worried that the dark aluminum case would show fingerprints, but it’s not a problem. Port selection is generous: 2 USB-C+Thunderbolt+charging ports, 2 USB-A ports, an HDMI port, and a combo audio jack. Perfectly sufficient for my purposes, and better than the laptop it replaced! I do wish the USB-C ports were more snug, though. USB-C cables tend to wiggle around when plugged in. Also it would be nice if the lid could be opened with one hand, but that’s a very minor nitpick. Overall it is solidly better than my old laptop.


The Thinkpad X1 Yoga’s 4K screen is unbelievable. Color reproduction is excellent, there is no significant ghosting, and brightness goes high enough to use it outdoors without limitation. I turn the brightness down to 50% when using it indoors. It’s by far the best screen I’ve ever had the pleasure of using, and a huge upgrade over my old laptop!


The keyboard feel is perfect; typing on it is a dream! And its black keys contrast perfectly with the white backlighting to produce a good low-light typing experience too. However the layout of the keys presents a few annoyances that I’m having to get used to:

  • Left Fn and Ctrl keys are reversed compared to every other PC laptop keyboard. This can be changed in the BIOS, but then the labels don’t match the functionality, which is somehow even more confusing.
  • The PrintScreen key is located between the right Alt and Ctrl keys, and I find myself constantly pressing it when I mean to press the right Alt key, especially to hit Alt+Left to go back in Dolphin or Firefox. Seems like a weird place to put it.
  • The Home and End Keys are located up at the top of the keyboard, away from the arrow keys. I find myself wishing they were in a column at the right side of the keyboard as on my old laptop, where they were easier to press without changing the positioning of my right hand which often hovers around the arrows.
  • There are no dedicated media playback keys. This is not a major issue as I have mapped Alt+Ctrl left/right/space to those functions in Plasma’s shortcuts KCM. Still, I do miss the dedicated keys.
  • Toggling the keyboard backlight is done with Fn+Space, rather than a dedicated key. Also the multi-level brightness feature seems kind of superfluous. Simple on/off modes would be better IMO. Not really a big deal though.

Overall, compared to my old HP Spectre x360 laptop, I would say I prefer the typing feel and black key color of the Lenovo’s keyboard, but prefer the key layout of the HP’s keyboard.


The touchpad is perfect. It’s just the right size: not too big, and not too small. The glass-covered surface makes it a pleasure to use. With the Libinput driver, thumb and palm rejection are perfect, enabling my favorite way of using a touchpad: with my right thumb lazily resting at the bottom as if there were a physical button there. I click with the thumb and use the rest of my fingers to move the cursor or perform scrolling gestures. This is how I got used to using Mac touchpads back when I was an Apple user and the Lenovo’s hardware is good enough to replicate that. It’s not quite Mac quality, but I’d say the experience is 90% there. It’s really, really good, and a huge upgrade from my old laptop whose trackpad was a bit worse in almost every way.


The speakers sounded great in Windows during my initial test so I know that the hardware is quite capable. However, on Linux the sound is not so good, and more work is needed on the driver side. So at the moment, the speakers are a disappointment and a regression compared to my old laptop, but hopefully improved audio drivers will make them better in the future.


The camera is horrible, which is an unwelcome surprise for this very expensive computer. Its resolution is a very low 720p, and there is noticeable lag/latency, which makes video conferencing annoying for other people as my mouth does not match my words. This is a significant regression compared to my old laptop, which had a 1080p camera with no appreciable lag. I didn’t test the camera in Windows before installing openSUSE Tumbleweed, so I don’t know if the lag is a hardware limitation or a driver bug.

Software side

On the software side, things have not been as good.

Installing openSUSE Tumbleweed was not too big of a hassle, given that I’ve done this a number of times before. I had to disable secure boot, which entailed a trip to the BIOS and bricking Windows. After installation, a number of local workarounds were required to make things function, in particular the audio, which still does not seem to be working properly. Just check out the relevant Arch Wiki pages! That’s a lot of stuff that you need to fix manually. After the OS was installed, I started to run into other issues:

Speakers and sound

Initially, the speakers were not detected at all. The relevant Arch Wiki page was very helpful here: installing the sof-firmware package fixed that, but then the audio quality was horrible. Compiling PulseAudio from source to get version 14 (which is not released yet) made it better, but still not as good as it was on Windows. I have filed a bug on PulseAudio as it seems like more work is needed:

Also, there are pointless devices corresponding to the three HDMI/DisplayPort audio outputs, which should not be shown unless they’re actually in use. This affects both the Plasma audio applet as well as the Pavucontrol app:

It’s not totally clear to me whose fault this is, so I filed a bug on PulseAudio and also one on plasma-pa. We may be able to improve the display in Plasma at least, and I’m working on a merge request.

Power management

Battery life is poor. This laptop has a 51 watt-hour battery (up from 42 Wh on my previous laptop), but draws between 8 and 10 watts at idle. When actually using the machine, I’m only getting about 4 hours of battery life! Reviewers said that it got at least 7 hours in Windows, so this is pretty terrible. powertop reports that the display backlight uses 10 watts of power at full brightness, 5 watts when at its lowest level, and 4 watts when turned off entirely! And the bottom of the case is always warm, so perhaps the CPU is also not idling enough. So I suspect that there are some performance and power management bugs somewhere, as this level of power consumption does not seem expected, even with the 4K screen. On the plus side, at least the laptop charges very quickly with the included 65W charger. I have not filed any bugs on this particular set of issues yet as I’m not suite sure where to start.


Out of the box, the touchscreen did not work properly on X11 with Plasma, KDE apps, and other Qt apps–but it did work with GNOME and Electron apps! After filing a bug report on Qt, I discovered that switching to the libinput driver fixes the issue! To do this, you can uninstall the xf86-input-wacom package (which will also remove the Wacom page in System Settings, which may be undesirable if you’re using it) or alternatively you can apply the following patch to /usr/share/X11/xorg.conf.d/70-wacom.conf:

diff -rubd /usr/share/X11/xorg.conf.d/70-wacom.conf.orig /usr/share/X11/xorg.conf.d/70-wacom.conf --- /usr/share/X11/xorg.conf.d/70-wacom.conf.orig 2020-06-08 08:08:01.576986784 -0600 +++ /usr/share/X11/xorg.conf.d/70-wacom.conf 2020-06-08 08:07:04.624218429 -0600 @@ -19,7 +19,7 @@ MatchUSBID "056a:*" MatchDevicePath "/dev/input/event*" MatchIsTouchscreen "true" - Driver "wacom" + Driver "libinput" EndSection Section "InputClass" @@ -43,7 +43,7 @@ MatchProduct "Wacom|WACOM|PTK-540WL|ISD-V4" MatchDevicePath "/dev/input/event*" MatchIsTouchscreen "true" - Driver "wacom" + Driver "libinput" EndSection Section "InputClass"

Ubuntu has already made a similar change to their packaging and I filed a bug report for openSUSE as well:

Next up, touch scrolling did not work in Firefox. I already knew how to fix this, and I’ll teach you too:

  1. Add MOZ_USE_XINPUT2=1 to the /etc/environment file. This turns on touchscreen scrolling and enables pixel-by-pixel touchpad scrolling.
  2. Doing the above triggers a nasty bug that breaks scrolling when a notification appears, but you can work around that as follows: Open System Settings > Window Management > Window Behavior > Uncheck “Click raises active window”.

Obviously we should just fix the KWin bug that makes this workaround necessary. We eventually will!

After this, touch input works well, especially for GTK apps. We have a lot of work to do to make our own KDE apps work as well with a touchscreen as GTK apps do on average.

Broken Flatpak apps

I briefly encountered an issue where none of my Flatpak apps would launch:

$ flatpak run com.discordapp.Discord Gtk-Message: 07:05:34.667: Failed to load module "unity-gtk-module" Gtk-Message: 07:05:34.667: Failed to load module "canberra-gtk-module" No protocol specified (Discord:4): Gtk-WARNING **: 07:05:34.667: cannot open display: :99.0 [fake-sandbox: zypak-sandbox] No data could be read (host died?) [fake-sandbox: zypak-sandbox] Quitting Zygote...

This utterly bizarre issue turned out to have been caused by me setting the computer’s hostname incorrectly, using sudo hostname <new hostname> instead of sudo hostnamectl set-hostname <new hostname> which triggers an SDDM bug which is fixed by the following open pull request: Hopefully the SDDM bug will be fixed soon, and in any event I should just add a GUI method of setting the computer’s hostname which I’ve been meaning to do for a while. See

Scaling issues in Plasma

On X11, Plasma did not auto-detect that I was using a 4K screen, so I had to manually change the scale in the KScreen KCM. Then I had to manually sync that to SDDM in the SDDM KCM to make the login screen not look tiny. It would be nice if the appropriate scale factor would be autodetected, at least for 4k screens. I have filed Happily, this already works out of the box on Wayland! So go Wayland.

In addition, once I did set a 200% scale factor, all the icons in Plasma looked tiny, making everything hideous. This is, and I worked around it by setting PLASMA_USE_QT_SCALING=1 in the environment, which fixes the issue and makes Plasma look fantastic at 200% scaling. However it also makes the minimize animation zoom into the wrong location. Boooo! As before, all this stuff works out-of-the-box on Wayland. Hmm…

Once I had the scale properly set, I noticed that various UI elements were not automatically scaled:

The first three actually work fine on Wayland! So I’m getting the sense that I should just bite the bullet and use Wayland, since the high DPI behavior is much better.

Next, I incrased the scale to 250% to make everything a bit bigger, and then various icons that are supposed to be monochrome became colorful. This is a minor issue, but I’ve submitted a patch to fix it:

Anyway, other than these issues, scaling works great. We’re pretty close, I think.

Conclusion and the future

I wish I could say that it’s been a pleasant, trouble-free experience and that I’m loving my new computer. In truth, getting the ThinkPad X1 Yoga to function well enough to comfortably write this post took several frustrating days of poring over documentation, filing bug reports, tweaking config files, and altering kernel parameters. On top of that, it’s still not quite there yet and is worse than my old laptop in several ways despite costing twice as much money. The high DPI scaling issues are our fault in KDE, and we need to do better, but that’s just the tip of the iceberg. The problems run throughout the entire software stack. Simply put, this is not acceptable in 2020. We need to up our game of partnering with hardware makers to ship FOSS operating systems by default. Everything I’m going through with this computer is the kind of problem that should be caught by paid Linux QA teams so that it can be fixed before the hardware is released to customers.

I continue to believe that we will get nowhere until more hardware comes with a Linux-based OS pre-installed. People shouldn’t have to deal with this kind of nonsense! My wife has been happily using KDE Neon on her laptop for two years, but I had to do the initial installation. Normal people want their computers to just work, not endlessly fiddle around with settings to make things functional that should have been so out of the box in the first place.

Part of me wishes I had instead gone with the SlimBook Pro X 15 or the System76 Lemur Pro, which were strong contenders in my search. The SlimBook laptop can even be pre-installed with Plasma-bearing operating systems like KDE Neon and Kubuntu, and I’m sure the System76 folks would have done likewise had I asked nicely enough. Everything would have worked perfectly out of the box, because SlimBook and System76 have QA teams paid to do what I’ve been doing myself for the ThinkPad X1 Yoga. Alas those laptops didn’t have some of what I was looking for in the hardware department (principally touchscreens and higher quality speakers), but perhaps I was underestimating the importance of integration into a cohesive product. It certainly stands in stark relief right now.

I’m sure things will get better over time. Kernel fixes will accumulate, and the bug reports I’ve filed will start to get fixed. I may even fix some of them myself. But this state of affairs is simply not acceptable if we ever want to grow our audience beyond the ranks of tech nerds. No normal person spends over than a thousand dollars on a laptop for real productive purposes that will have to become an extended science experiment before it works properly. We need more hardware sold with our software pre-installed, period. That’s the next frontier, and I strongly believe that we need to make it our end goal for everything we do.

First alpha release of my project: looking for feedback!

Tuesday 9th of June 2020 01:30:00 AM

I’m glad to announce the first alpha of my GSoC 2020 project. For anyone not in the loop, I’m working on integrating Disney’s SeExpr expression language as a new type of Fill Layer.

You’ll find my work in the Fill Layer... menu, a new type of generator called SeExpr:

The widgets you see are entirely Disney’s, you can manipulate the generator both through the editor as well as the controls above it.

The alphas are uploaded here:

Integrity hashes:

5e0c0e2a3046e003c1b331d5baec772174d9497568640b47d78bd7d98374d804 krita-4.3.1-alpha-833fedf-x86_64.appimage d82258fd4262a9cb86ed057be4ca7c6fd737adc57a0d0210f3af2c9b172d0730

Please, feel free to give your feedback, in this Krita Artists thread or in its Phabricator task.

Remember, I’m still looking for example scripts we can ship later!

Looking forward to your comments!



Racism is bad - a Barcelona centered reflection

Monday 8th of June 2020 10:31:00 PM
I hope most of people reading this will not find "Racism is bad" to be controversial.

The problem is even if most (i'd hope to say all) of us think racism is bad, some of us are still consciously or unconsciously racist.

I am not going to speak about the Black Lives Matters movement, because it's mostly USA centered (which is kind of far for me) and there's much better people to listen than me, so go and listen to them.

In this case I'm going to speak about the Romani/Roma/gypsies in Barcelona (and from what i can see in this Pew Research article, most of Europe).

Institutionalized hate against them is so deep that definition 2 of 6 in the Catalan dictionary for the Romani word (gitano) is "those that act egoistically and try deceive others" and definition 5 of 8 in the Spanish dictionary is "those that with wits and lies try to cheat someone in a particular matter"

Here it is "common" to hear people say "don't be a gitano" meaning to say "don't cheat/play me" and nobody bats an eye when hearing that phrase.

It's a fact that this "community" tends to live in ghettos and has a higher percent crime ratio. I've heard people that probably think themselves as non racist say "that's just the lifestyle they like".

SARCASM: Sure, people love living in unsafe neighbourhoods and crappy houses and risking going to jail just to be able to eat.

The thing is when 50% of the population has an unfavourable view of you just because of who your parents are, or your surname is, it's hard to get a [nice] job, a place to live outside the ghetto, etc.

So please, in addition to saying that you're not a racist (which is a good first step), try to actually not be racist too.

First Milestone

Monday 8th of June 2020 06:30:00 PM
Part 4 -

Hello Everyone,

The first week has been completed with an amazing start for me. I have completed my first milestone i.e sudoku activity. You can see implemented datasets in the below image.

For this activity, Testing was a more time-consuming task rather than implementation. I have solved countless sudoku’s while adding datasets in this :). Surprisingly this activity didn’t bring up any unexpected behavior or bug (yeah that happens rarely) and it’s now in the “user testing” stage before getting merged.

This time in GSoC, I am working on my separate branch and it feels good to work on your own branch, now I have to think a bit more before writing my commit messages :).

Stay safe and healthy.

Running kwin wayland on Nvidia

Monday 8th of June 2020 09:24:37 AM

Note: If you are visiting from the future please refer to the wiki here which will be more up-to-date than this blog post.

I recently switched to running wayland fulltime on all my machines, including my Nvidia box. It was good that I did as it seems Qt regressed, fortunately I was able to fix it just in time for the final Qt LTS.

I've also updated the wiki with the steps needed to run nvidia wayland whilst I had the information fresh.

Steps Pre-requisites

You need a very up-to-date Qt. Make sure you have >= Qt5.15.0 or 4bd13402f0293e85b8dfdf92254e250ac28094c7 cherry-picked.

Mode setting

Check our driver is running in modesettings mode

cat /sys/module/nvidia_drm/parameters/modeset

It should print "Y"

If not, modify your kernel command line and add the line nvidia-drm.modeset=1. Search for "kernel parameters" in your distribution's documentation. Though is typically a good guide for any distro.

Tell kwin to run with EGLStreams.

You should set the environment variable "KWIN_DRM_USE_EGL_STREAMS=1"

The easiest place is to add a file /etc/profile.d/ with the line

Verify this is working with the command line tool env after rebooting.


Select "Plasma (wayland)" from your login manager
Enjoy your beautiful super-fast accelerated wayland desktop!

That's a lot of steps!

Obviously this number of manual steps is unnacceptable and I hope to reduce this over the next Plasma cycle.

With the user telemetry we get from Plasma users, we know a sizable amount of X11 users run the proprietory nvidia wayland driver. Ultimately user experience comes first above all else, so it is important.

Clearing up some facts on Nvidia and wayland

I read a lot of misinformation that on the wayland nvidia situation on the social medias. I'll try and clarfify some bits.

  • You cannot say "Nvidia doesn't support wayland". This doesn't make any sense. There's no relevant part of wayland for it to support or not support.

  • You can say "Nvidia doesn't support GBM" . A system for passing buffers (window contents) between places. Despite the name "Generic" Buffer Manager, GBM is very closely tied to Mesa. Mesa is the base of effectively all the open source Linux drivers.

  • You cannot say "Nvidia doesn't follow /the/ standard". There are a few. EGLStreams actually is a fully defined open standard defined in Khronos, which is as much of a core extension as possible. It's used by multiple vendors, albeit mostly horrible Mali chips

  • You can say it would be better if there was just one magic implementation that compositors and toolkits had to support. Maybe Vulkan (or more specifically WSI) will fix it

Cantor new features

Monday 8th of June 2020 09:21:00 AM
Hello everyone,

this is the first post about the progress in my GSoC project and I want to present three new features in Cantor implemented recently.

The first feature is about new additional actions for Command Entries which can be applied worksheet-wide:

The second feature is simple, but quite usefull. It's about having the possibility to exclude certaint entries from the execution. This is usefull for example, if you want to test performance of the code with different realization of certain part of it - you simply activate/deactivate quickly worksheet entries and process the worksheet again.

The third feature is a new type of Entries - Horizontal Line Entry. As the name says, this is a cusstomizable horizontal line that helps to structure and to visualy separate different parts of worksheet.
And this is an example how such a line looks in a real document.

In the next post I plan to show a zoom widget and some new tooltips examples.

CMake & Meson & CompCert

Sunday 7th of June 2020 02:13:00 PM

I tried to compile the Picolibc that uses the Meson build system with CompCert.

The CompCert install I tried uses the GNU/GCC toolchain for preprocessing and linking. That makes the compiler relatively compatible to a GCC, beside that not all command line options are supported.

I was used to CMake projects and there it is normally enough to just set CC=ccomp and you are ready and set (at least if you use the GNU/GCC toolchain). As long as you don’t use special flags in your project, that will just work.

The Picolibc was the first Meson based project I encountered.

There setting CC to ccomp just leads to ERROR: Unknown compiler(s): [['ccomp']]

I did assume that the project won’t compile & link without adjustments, as CompCert doesn’t support the full range of command line options like GCC as mentioned above nor the full GNU extensions for C. But that it directly ends at the compiler initialization in the build system itself was astonishing.

I searched a bit in the internet and it seems, if I really want to get this working, I actually need to patch Meson itself :/ (see how to add a new compiler here)

At least I found no other solution, actually, I found no real solution for the above error message at all and the code looks like you need to manually add compilers anyways.

Given I want to spend work on getting the C library to compile and not fix a build system, it seems easier to go with the newlib that uses the old autotools, at least for them the compile starts at all with my CC environment variable and you get to places of interest to fix.

This means for my use case, with a non-standard compiler, I can not see how Meson is an improvement over other existing stuff like CMake or even autotools. But perhaps this area will improve in the future.

Weekly Report 1

Sunday 7th of June 2020 12:00:00 AM
GSoC Week 1 - Qt3D based backend for KStars

The coding period for GSoC officially started on 1st of June. My project aims at adding a 3D based backend to KStars which currently utilizes QPainter to render the realtime night sky in 2D.

What’s done this week
  • Extension of the original KStars Skymap to show a Qt3D scene.

  • A horizon which displays a clear sky where skyobjects are supposed to be rendered.

  • Addition of textures and few skyobjects(Sun and Moon).

  • Connection of the scene with KStars backend to get the positions of respective skyobjects.

The Challenges
  • Integration issues with the original SkyPainter API written to support multiple backends.

  • Qt3D’s scenegraph based rendering on KStars which displays and updates data frame-by-frame.

  • Environment Light support to color the horizon based on Sun/Moon position.

  • Position Synchronization base on the projection mode used.

What remains

My priorities for the next week include.

  • Instance rendering for millions of stars displayed by KStars.

  • Dig deep into projection modes and shader coding based on the pre-existing Projector class in KStars.

  • Transformation updates based on signals instead of frame by frame.


The Code

Google Summer of Code 2020 - Week 1

Saturday 6th of June 2020 09:35:00 PM

This week, I started working on the Rocs graph layout capabilities. The Fruchtermani-Reingold [1] algorithm seems to be the most common option for drawing graphs automatically when no extra information about the graph is known. In fact, the Boost library implementation of this algorithm is currently being used by Rocs. However, the Fruchtermani-Reingold algorithm has some parameters that can change its results deeply. In order to better understand the algorithm and how different parameterizations lead to different results, I wrote my own C++ implementation directly in the Rocs’ libgraphtheory. This allowed me to generate debug information during the execution of the algorithm.

Unfortunately, tuning the parameters directly into the implementation is time consuming. Automatic parameter tuning solutions can not be applied in a trivial way, because the quality of the result obtained for a given parameterization is quite subjective. Therefore, I decided to make my manual tuning and evaluation process more efficient by creating a user interface that will allow me to choose parameter values and apply the algorithm to the current graph. Because I am new to Qt and the way to do this is to implement a Rocs’ plugin, it is not done yet. Creating such interface was already in my plans, but I expected to do it later.

I also studied more about graph layout algorithms. In particular, the Davidson-Harel algorithm [2] seems to be an interesting option for Rocs. It consists of two building blocks. The first is a cost function that assigns a value to each graph based on aesthetic criteria, such as the number of pairs of edges that intersect and how well the vertices are spread. The second is a Simulated Annealing optimization algorithm implementation aimed to minimize the mentioned cost function. Although the algorithm is slower than Fruchtermani-Reingold, the results seems to be quite nice. The application of this algorithm may be reserved to small graphs in order to avoid very long computation times. The exact upper bound on the size of the graph is still to be determined experimentally. However, I believe this is going to be fast enough for graphs with a few tens of vertices, which are important use cases in education and in some research areas.

For a survey about graph layout algorithms, see [3]. Although some recent results were published after [3], the most classical algorithms are well covered.

[1] Fruchtermani and E. Reingold. Graph drawing by force-directed placement. Softw. – Pract. Exp., 21(11):1129–1164, 1991

[2] R. Davidson and D. Harel. Drawing graphs nicely using simulated annealing.ACM Transactions on Graphics, 15(4):301–331, 1996.

[3] Stephen. (2012). Spring Embedders and Force Directed Graph Drawing Algorithms.

This week in KDE: Okular, Konsole, Plasma, and Wayland

Saturday 6th of June 2020 05:01:40 AM

It’s early in the Plasma 5.20 development cycle and some very nice new features landed this week! Various KDE apps–in particular Okular and Konsole–also got new features. It’s a feature-palooza!

Yes, yes, I know what some of you are thinking: “Why are you writing new features while there’s still so much buggy stuff?” In this case, one of the answers is that new features can often solve bugs. For example the Okular work you’ll read about below resulted in a dozen bug reports getting closed! Sometimes you really can have your cake and eat it, too.

Should I stay or should I go to Akademy?

Friday 5th of June 2020 10:00:00 PM

I have submitted two talks proposals to Akademy. Earlier Albert called for more proposals, so let me repeat his reminder: send your talks proposals early to reduce panic in the programme committee. Anyone can join! And all things KDE and Qt related are good, as well as interesting stuff on the edge of the KDE community.

As a bonus, you don’t have to travel, expose yourself to exciting new food, curious beer, strange accents and smells and things that go “klunk” in the hostel in the middle of the night and new wonderful people and old friends and ..

.. I’m not selling that well, am I? I’ll certainly miss the offline part of Akademy, like Valorie’s infectious laugh (poor choice of words, there) and reading bedtime stories to Kevin, but the content and sense of community will be there.

So be part, and send in your tale of KDE community activity.

Adding EteSync address books to Kontact - GSoC 2020 with KDE and EteSync [Part 3]

Friday 5th of June 2020 06:10:00 PM

Hey everyone!

Last week, I wrote a post about adding EteSync address books to Kontact. I’m happy to report that you can now fetch your EteSync address books and contacts in Kontact. If you want to test it out, skip to ”Testing the resource” section below. You can read on for updates on the project:

Adding a new EteSync account to KAddressBook Adding a new EteSync address book

I have created a new EteSync resource subdirectory, and added it to the project build system. I’ve also added the logo for the resource, which shows up while adding a new address book to Kontact.

Fetching your EteSync contacts

Once the new resource is added, the app should ideally open a configuration dialog for you to provide your username, password, EteSync server url and encryption password. Unfortunately, I haven’t implemented that yet. I plan to implement it soon so that users can easily test out the resource.

Currently, the credentials are hardcoded, and will be used to fetch all your address books and contacts. These will then show up in KAddressBook.

EteSync address books and contacts visible in KAddressBook Testing the resource

As the resource configuration dialog hasn’t been implemented yet, you would need to put in your EteSync credentials in the configure() function in etesync/etesyncresource.cpp to test it out.

All the code for this project is at this repo. To test the resource, you can:

  • Clone the repo
  • Enter your EteSync credentials in etesync/etesyncresource.cpp
  • Build the project using make or kdesrc-build
  • Restart Akonadi (akonadictl restart)
  • Open KAddressBook and add a new EteSync address book

I plan to implement the configuration dialog ASAP. Also, the fetching itself needs more work as it should be done asynchronously using jobs.

Feedback is always welcome!

Hope to have more updates for you soon :)

Reordering the People Sidebar in DigiKam

Friday 5th of June 2020 02:53:07 PM

The People Sidebar is an important aspect of Face Management in DigiKam. It displays the names of all people in the database, and provides a variety of context menu functionality. Currently, the Face Tags (Names) in the Sidebar are sorted alphabetically (either ascending or descending). This causes inconvenience to the user, particularly when confirming the results of a Facial Recognition.

Here’s how one would have to perform the operation currently :


The user has to search around for the tags that have new results, and the only indicator that a tag has new results is the small new counter, beside each tag.

To solve this I made two changes:

  • Tags with New Faces now appear in bold, to enhance their visibility.
  • Tags with New Faces get pinned to the top of the list. As the user confirms/rejects the suggestions, the new faces decrease and the tag moves back down to get alphabetically sorted.
All new tags are now pinned at the top in Bold (Link)

QStringView Diaries: Zero-Allocation String Splitting

Friday 5th of June 2020 09:00:17 AM

After four months of intensive development work, I am happy to announce that the first QStringTokenizer commits have landed in what will eventually become Qt 6.0. The docs should show up, soon.

While the version in Qt will be Qt 6-only, KDAB will release this tool for Qt 5 as part of its KDToolBox productivity suite. Yes, that means the code doesn’t require C++17 and works perfectly fine in pure C++11.

This is a good time to recapitulate what QStringTokenizer is all about.

QStringTokenizer: The Zero-Allocation String Splitter

Three years ago, when QStringView was first merged for Qt 5.10, I already wrote that we wouldn’t want to have a method like QString::split() on QStringView. QStringView is all about zero memory allocations, and split() returns an owning container of parts, say QVector, allocating memory.

So how do you return the result of string splitting, if not in a container? You take a cue from C++20’s std::ranges and implement a Lazy Sequence. A Lazy Sequence is like a container, except that it’s elements aren’t stored in memory, but calculated on the fly. That, in C++20 coroutine terms, is called a Generator.

So, QStringTokenizer is a Generator of tokens, and, apart from its inputs, holds only constant memory.

Here’s the example from 2017, now in executable form:

const QString s = ~~~; for (QStringView line : QStringTokenizer{s, u'\n'}) use(line);

Except, we beefed it up some:

const std::u16string s = ~~~; for (QStringView line : QStringTokenizer{s, u'\n'}) use(line);

Oh, and this also works now:

const QLatin1String s = ~~~; for (QLatin1String line : QStringTokenizer{s, u'\n'}) use(line); QStringTokenizer: The Universal String Splitter

When I initially conceived QStringTokenizer in 2017, I thought it would just work on QStringView and that’d be it. But the last example clearly shows that it also supports splitting QLatin1String. How is that possible?

This is where C++17 comes in, on which Qt 6.0 will depend. C++17 brought us Class Template Argument Deduction (CTAD):

std::mutex m; std::unique_lock lock(m); // not "std::unique_lock<std::mutex> lock(m);"

And that’s what we used in the examples above. In reality, QStringTokenizer is a template, but the template arguments are deduced for you.

So, this is how QStringTokenizer splits QStrings as well as QLatin1Strings: in the first case, it’s QStringTokenizer<QStringView, QChar>, in the second, QStringTokenizer<QLatin1String, QChar>. But be warned: you should never, ever, explicitly specify the template arguments yourself, as you will likely get it wrong, because they’re subtle and non-intuitive. Just let the compiler do its job. Or, if you can’t rely on C++17, yet, you can use the factory function qTokenize():

const QLatin1String s = ~~~; for (QLatin1String line : qTokenize(s, u'\n')) use(line); QStringTokenizer: The Safe String Splitter

One thing I definitely wanted to avoid is dangling references a la QStringBuilder:

auto expr = QString::number(42) % " is the answer"; // decltype(expr) is QStringBuilder<~~~, ~~~> QString s = expr; // oops, accessing the temporary return value of QString::number(), since deleted

The following must work:

for (QStringView line : QStringTokenizer{widget->text(), u'\n'}) use(line);

But since the ranged for loop there is equivalent to

{ auto&& __range = QStringTokenizer{widget->text(), u'\n'}; auto __b = __range.begin(); // I know, this is not the full truth auto __e = __range.end(); // it's what happens for QStringTokenizer, though! for ( ; __b != __e; ++__b) { QStringView line = *__b; use(line); } }

if QStringTokenizer simply operated on QStringView or QLatin1String, the following would happen: The __range variable keeps the QStringTokenizer object alive throughout the for loop (ok!), but the temporary returned from widget->text() would have been destroyed in line 3, even before we enter the for loop (oops).

This is not desirable, but what can we do against it? The solution is as simple as it is complex: detect temporaries and store them inside the tokenizer.

Yes, you heard that right: if you pass a temporary (“rvalue”) owning container to QStringTokenizer, the object will contain a copy (moved from the argument if possible) to extend the string’s lifetime to that of the QStringTokenizer itself.


Now that we have developed the technique, we very strongly expect it to be used in Qt 6.0 for QStringBuilder, too.

By Qt 6.0, we expect QStringTokenizer to also handle the then-available QUtf8StringView as haystack and needle, as well as QRegularExpression and std::boyer_moore_searcher and std::boyer_moore_horspool_searcher as needles. We might also re-implement it as a C++20 coroutine on compilers that support them, depending on how much more performance we’ll get out of it.


QStringTokenizer splits strings, with zero memory allocations, universally, and safely. Get it for free right now from KDToolBox, and you can future-proof your code with an eye towards Qt 6.

About KDAB

If you like this blog and want to read similar articles, consider subscribing via our RSS feed.

Subscribe to KDAB TV for similar informative short video content.

KDAB provides market leading software consulting and development services and training in Qt, C++ and 3D/OpenGL. Contact us.

The post QStringView Diaries: Zero-Allocation String Splitting appeared first on KDAB.

More in Tux Machines

Linux Devices and Open Hardware

  • Mini-PC and SBC build on Whiskey Lake

    Supermicro’s 3.5-inch “X11SWN-H-WOHS” SBC and “SYS-E100-9W-H” mini-PC based it feature an 8th Gen UE-series CPU, HDMI and DP, 4x USB 3.1 Gen2, 2x GbE, and 3x M.2. Supermicro has launched a fanless, 8th Gen Whiskey Lake SBC and mini-PC. The SYS-E100-9W-H mini-PC (or SuperServer E100-9W-H), which was reported on by Fanless Tech, is certified only to run Windows 10, but the 3.5-inch X11SWN-H-WOHS SBC supports Ubuntu. Applications include industrial automation, retail, smart medical expert systems, kiosks, interactive info systems, and digital signage.

  • Exor nanoSOM nS02 System-on-Module Features the 800MHz version of STM32MP1 Processor

    Exor provides a Linux RT board support package (BSP) or Android BSP for the module which also fully supports the company’s X Platform including Exor Embedded Open HMI software, Corvina Cloud IIoT platform, and IEC61131 CODESYS or Exor xPLC runtime.

  • Onyx Boox Poke2 Color eReader Launched for $299

    Manga and comics fans, rejoice! After years of getting black & white eReaders, the first commercial color eReaders are coming to market starting with Onyx Boox Poke2 Color eReader sold for $299 (but sadly sold out at the time of writing). The eReader comes with a 6-inch, 1448 x 1072 E-Ink display that supports up to 4096 colors, and runs Android 9.0 on an octa-core processor coupled with 2GB RAM and 32GB storage.

  • xDrill Smart Power Drill Supports Intelligent Speed/Torque, Laser Measuring, Digital Leveling (Crowdfunding)

    Many home appliances now have smart functions, and in my cases, I fail to see the added value, and I’m not sure why I’d want/need a connected refrigerator with a touchscreen display. So when I first saw somebody make a “smart” power drill with a small touchscreen display I laughed. But after having a closer look, Robbox xDrill smart power drill could actually be a very useful device saving you time and helping work better.

  • Raspberry Pi calls out your custom workout routine
  • Odyssey Blue: A powerful x86 and Arduino machine that supports Windows 10 and Linux

    It has been a few months since we reported on the Odyssey, a single-board computer (SBC) designed by Seeedstudio. Unlike many SBCs, the Odyssey, or ODYSSEY-X86J4105800 to give it its full name, supported the x86 instruction set. While the Odyssey can run Windows 10, it is also compatible with the Arduino ecosystem. Now, Seeedstudio has expanded on the design of the Odyssey with the Odyssey Blue.

  • Bring two analog meters out of retirement to display temperature and humidity

    Tom of Build Comics created a unique analog weather station that shows temperature and humidity on a pair of recycled gauges. An Arduino Nano reads the levels using a DHT22 sensor and outputs them in the proper format for each display. Both units have a new printed paper backing to indicate conditions, along with a trimmer pot for calibration. To set the build off nicely, the Nano and other electronics are housed inside a beautiful custom wooden box, to which the antique meters are also affixed.

Programming Leftovers

  • Engineer Your Own Electronics With PCB Design Software

    A lot of self-styled geeks out there tend to like to customize their own programs, devices, and electronics. And for the true purists, that can mean building from the ground up (you know, like Superman actor Henry Cavill building a gaming PC to the delight of the entire internet). Building electronics from the ground up can mean a lot of different things: acquiring parts, sometimes from strange sources; a bit of elbow grease on the mechanical side of things; and today, even taking advantage of the 3D printing revolution that’s finally enabling people to manufacture customized objects in their home. Beyond all of these things though, engineering your own devices can also mean designing the underlying electronics — beginning with printed circuit boards, also known as PCBs. [...] On the other hand, there are also plenty of just-for-fun options to consider. For example, consider our past buyer’s guide to the best Linux laptop, in which we noted that you can always further customize your hardware. With knowledge of PCB design, that ability to customize even a great computer or computer setup is further enhanced. You might, for instance, learn how to craft PCBs and devices amounting to your own mouse, gaming keyboard, or homemade speakers — all of which can make your hardware more uniquely your own. All in all, PCB design is a very handy skill to have in 2020. It’s not typically necessary, in that there’s usually a device or some light customization that can give you whatever you want or need out of your electronics. But for “geeks” and tech enthusiasts, knowledge of PCB design adds another layer to the potential to customize hardware.

  • Programming pioneer Fran Allen dies aged 88 after a career of immense contributions to compilers

    Frances Allen, one of the leading computer scientists of her generation and a pioneer of women in tech, died last Tuesday, her 88th birthday. Allen is best known for her work on compiler organisation and optimisation algorithms. Together with renowned computer scientist John Cocke, she published a series of landmark papers in the late '60s and '70s that helped to lay the groundwork for modern programming. In recognition of her efforts, in 2006 Allen became the first woman to be awarded the AM Turing Award, often called the Nobel Prize of computing.

  • Excellent Free Tutorials to Learn ECMAScript

    ECMAScript is an object‑oriented programming language for performing computations and manipulating computational objects within a host environment. The language was originally designed as a scripting language, but is now often used as a general purpose programming language. ECMAScript is best known as the language embedded in web browsers but has also been widely adopted for server and embedded applications.

  • Alexander Larsson: Compatibility in a sandboxed world

    Compatibility has always been a complex problems in the Linux world. With the advent of containers/sandboxing it has become even more complicated. Containers help solve compatibility problems, but there are still remaining issues. Especially on the Linux desktop where things are highly interconnected. In fact, containers even create some problems that we didn’t use to have. Today I’ll take a look at the issues in more details and give some ideas on how to best think of compatibility in this post-container world, focusing on desktop use with technologies like flatpak and snap. [...] Another type of compatibility is that of communication protocols. Two programs that talk to each other using a networking API (which could be on two different machines, or locally on the same machine) need to use a protocol to understand each other. Changes to this protocol need to be carefully considered to ensure they are compatible. In the remote case this is pretty obvious, as it is very hard to control what software two different machines use. However, even for local communication between processes care has to be taken. For example, a local service could be using a protocol that has several implementations and they all need to stay compatible. Sometimes local services are split into a service and a library and the compatibility guarantees are defined by the library rather than the service. Then we can achieve some level of compatibility by ensuring the library and the service are updated in lock-step. For example a distribution could ship them in the same package.

  • GXml-0.20 Released

    GXml is an Object Oriented implementation of DOM version 4, using GObject classes and written in Vala. Has a fast and robust serialization implementation from GObject to XML and back, with a high degree of control. After serialization, provides a set of collections where you can get access to child nodes, using lists or hash tables. New 0.20 release is the first step toward 1.0. It provides cleaner API and removes old unmaintained implementations. GXml is the base of other projects depending on DOM4, like GSVG an engine to read SVG documents based on its specificacion 1.0. GXml uses a method to set properties and fill declared containers for child nodes, accessing GObject internals directly, making it fast. A libxml-2.0 engine is used to read sequentially each node, but is prepared to implement new ones in the future.

  • Let Mom Help You With Object-Oriented Programming

    Mom is a shortcut for creating Moo classes (and roles). It allows you to define a Moo class with the brevity of Class::Tiny. (In fact, Mom is even briefer.) A simple example: Mom allows you to use Moo features beyond simply declaring Class::Tiny-like attributes though. You can choose whether attributes are read-only, read-write, or read-write-private, whether they're required or optional, specify type constraints, defaults, etc.

  • Perl Weekly Challenge 73: Min Sliding Window and Smallest Neighbor

    These are some answers to the Week 73 of the Perl Weekly Challenge organized by Mohammad S. Anwar. Spoiler Alert: This weekly challenge deadline is due in a few days from now (on Aug. 16, 2020). This blog post offers some solutions to this challenge, please don’t read on if you intend to complete the challenge on your own.

  • [rakulang] 2020.32 Survey, Please

    The TPF Marketing Committee wants to learn more about how you perceive “The Perl Foundation” itself, and asks you to fill in this survey (/r/rakulang, /r/perl comments). Thank you!

Hardware With Linux Support: NUVIA and AMD Wraith Prism

  • Performance Delivered a New Way

    The server CPU has evolved at an incredible pace over the last two decades. Gone are the days of discrete CPUs, northbridges, southbridges, memory controllers, other external I/O and security chips. In today’s modern data center, the SoC (System On A Chip) does it all. It is the central point of coordination for virtually all workloads and the main hub where all the fixed-function accelerators connect, such as AI accelerators, GPUs, network interface controllers, storage devices, etc.

  • NUVIA Published New Details On Their Phoenix CPU, Talks Up Big Performance/Perf-Per-Watt

    Since leaving stealth last year and hiring some prominent Linux/open-source veterans to complement their ARM processor design experts, we have been quite eager to hear more about this latest start-up aiming to deliver compelling ARM server products. Today they shared some early details on their initial "Phoenix" processor that is coming within their "Orion" SoC. The first-generation Phoenix CPU is said to have a "complete overhaul" of the CPU pipeline and is a custom core based on the ARM architecture. They believe that Phoenix+Orion will be able to take on Intel/AMD x86_64 CPUs not only in raw performance but also in performance-per-Watt.

  • Take control of your AMD Wraith Prism RGB on Linux with Wraith Master

    Where the official vendor doesn't bother with supporting Linux properly, once again the community steps in to provide. If you want to tweak your AMD Wraith Prism lighting on Linux, check out Wraith Master. It's a similar project to CM-RGB that we previously highlighted. With the Wraith Master project, they provide a "feature-complete" UI and command-line app for controlling the fancy LED system on AMD's Wraith Prism cooler with eventual plans to support more.

The Massive Privacy Loopholes in School Laptops

It’s back to school time and with so many school districts participating in distance learning, many if not most are relying on computers and technology more than ever before. Wealthier school districts are providing their students with laptops or tablets, but not all schools can afford to provide each student with a computer which means that this summer parents are scrambling to find a device for their child to use for school. Geoffery Fowler wrote a guide in the Washington Post recently to aid parents in sourcing a computer or tablet for school. Given how rough kids can be with their things, many people are unlikely to give their child an expensive, premium laptop. The guide mostly focuses on incredibly low-cost, almost-disposable computers, so you won’t find a computer in the list that has what I consider a critical feature for privacy in the age of video conferencing: hardware kill switches. Often a guide like this would center on Chromebooks as Google has invested a lot of resources to get low-cost Chromebooks into schools yet I found Mr. Fowler’s guide particularly interesting because of his opinion on Chromebooks in education... Read more Also: Enabling Dark Mode on a Chromebook (Do not try this at home)