Language Selection

English French German Italian Portuguese Spanish

Kde Planet

Syndicate content Planet KDE
Planet KDE
Updated: 4 hours 14 min ago

Season of KDE 2020 and GSOC

Saturday 28th of March 2020 04:16:52 PM

I was introduced to a whole new world of Open Source and version control systems a few months back and I have come a long way from there. I made my first pull request in October, worked on my project in November, took part in Season of KDE 2020 in December, worked on my SoK project in January and now, I am happy to say that SoK is finally over!

I learned a lot during the coding period and would love to share my journey. 

My Season of KDE Journey – Improve the Timeline Clips Color Palette
Week 1: Building the Development Environment

The first thing that one has to do before beginning to contribute to an organization is to build the code of the application from the source. And if this is the first time a person is building an app then he/she should be ready to do a lot of googling and praying for the CMake to compile successfully.

Kdenlive works with the help of a lot of dependencies and libraries. For the CMake to compile properly the system should have all these libraries installed in it. 

First things first, I got the Kdenlive source code from the GitLab instance of KDE, It is always best to checkout from the master to a new branch to prevent committing incorrect changes and spoiling your whole branch. Then I created a build file and ran the CMake code. This returned a LOT of errors when the required libraries and dependencies were not found in my system. Most of the errors were solved when the following command was executed:

sudo apt-get build-dep kdenlive

This installed most of the required dependencies. However, during CMake, since the errors were still there, I checked for the version required for the particular dependency, googled it, and installed it.  This is what took a lot of my time as I went through what is termed as “dependency hell”.

Either the application used an older version of a particular installed dependency or my system had an older version of the required library. This site and this one were very helpful.

Finally, I changed my OS to KDE neon dev edition and all the errors got corrected.

The next step was to build and install the application using make and make install. After Kdenlive was successfully installed I could finally open the application.

After setting up the development environment, I started going through the source code to understand how different components of the timeline work.

Week 2: Working on Title Clips

During Week 2, I dived right into the source code to get an idea of how the application identifies whether a particular clip in the timeline is of a particular type. As suggested by my mentor Farid, I went through the code related to the timeline in the src/timeline2/view  folder. Recently, a change was committed in master related to the target button colors. My mentor advised me to go through that commit to get an idea of how the colors are handled in the source code. 

After much searching and googling, I figured out how to differentiate between different clip types while assigning colors to them.

Since there already was a difference between the audio and video clips, I tried to understand how the application realized whether a clip is audio or not.

On searching, I found that definition.h contains the Producer enumeration which lists all types of clips. Clips in the application are checked for their type by comparing them against this enumeration.

I added the function that would first check whether a clip in the timeline is of title type or not, then would assign the color that was decided by the community for the title clips.

Week 3: Hardcoding the colors is a big No-No

Nowadays every application has different themes according to the user’s convenience. Some like dark themes while some like light themes.

When one is working on adding a particular color to a component, one should consider how the color would appear in the other themes. This is where I had gone wrong the previous week. I had assigned a particular color to the title color that would remain the same irrespective of the current theme, i.e, I had hard-coded it. With the help of my mentor and the Kdenlive community, I realized my mistake and searched for different uses of QColor and KColorscheme classes that would rectify this. 

However, the color chosen for title clips was not a default Role in the KColorScheme and could be composed by mixing different default ones. Meanwhile, I worked on adding a function to check whether the clip is of image type image clip and then added the Neutral color of the ForegroundRole of KColorScheme class to the Image clip.

Neutral color added to Image clip


Week 4: Marker Comments

Comment markers are used in the timeline to add comments to the clip for a particular time. When the user first added a marker to a particular instant in the timeline, it wasn’t displayed making the user wonder if the feature works. He could make the comment markers display by going to the Kdenlive settings. However, this is time-consuming. So, I worked on making the markers display by default.

Since the codebase was still new to me, a lot of time was spent trying to figure out how the comments were handled by the timeline. I tried many ways to make it default however none of them seemed to work for me.

With the help of Kdenlive developers, I found out that kdenlivesetting.kcfg deals with assigning default values to any component in the application. I then solved this issue by making the default value true for displaying comment markers.

Week 5: Adding color to the rest of the Clip types

During this week, I finally understood how I could combine different default colors of ForegroundRole to form a new color as it is done for the color of the target button. Using this, I added color to the title clip by combining red (Negative foreground role) and blue (Link foreground role). I also added a function to identify Slideshow clips and then assigned the color, which is a combination of blue (Link Foreground Role) and orange( Neutral Foreground Role), to it.

Title clip after combining the default colors

Slideshow clip after combining colors of image[ neutral] and video [link] clips

Week 6: Review

In this final week, I pushed all my changes and requested the developers to review it. After a few minor changes, the changes were successfully merged!

During Week 2, I got the wonderful opportunity to meet the KDE developers of my country, India in the held in Delhi. I came to know about a lot of cool KDE and open-source related stuff in this conference.

I also gave a lightning talk about my Season of KDE 2020 project for Kdenlive. Since this was the first time I was attending any conference, giving a talk in one was overwhelming, but went quite well all things considered :p


The Road Ahead Proxy and Clip Effect visual confirmation

I have started work on adding proxy clip visual confirmation. The user can’t know if a clip has the clip effect or is a proxy clip as there is no thumbnail to show otherwise.

I have gone through the codebase to understand where and how the proxy clip and clip effect is handled and how I could add the ‘proxy’ and ‘clip effect’  thumbnails.

Google Summer of Code 2020

I plan to work on adding Basic Subtitling Support to Kdenlive as part of my Google Summer of Code project. At present, since the subtitle files are hardcoded over the videos, the customization of the displayed subtitle text is not viable. This project will deal with extending the functionality of the existing Subtitle filter thereby giving users more choices over subtitle customization.

Continue Contributing

I enjoyed contributing to the KDE community during the coding period of Season of KDE and would love to continue to do so as much as I can.

This month in KDE Web: March 2020

Saturday 28th of March 2020 04:00:00 PM

This month KDE web developers worked on updating more websites and some progress was made in a new identity provider and a lot of other exiting stuff and a lot of background work was also done.

Updated Websites

  • Planet KDE is an aggregator of all the individual blogs of KDE contributors. It is the place where you can find technical details about a change, general KDE news, and blog posts about the life of KDE contributors. The website was updated and now contains feeds in more languages. (Me: Carl Schwan, See repository).

Progress to a new identity service

KDE Identity was and still is a source of pain in the KDE infrastructure. It only supports OpenLDAP, doesn’t provide a great onbording experience and isn’t very flexible.

A new account management service is currently in creation and should be based on a fork of the successful Blender ID system. This new system will be based on OAuth2.

This month the homepage of the new identity service was updated to follow KDE branding (Me: Carl Schwan, see commit) and the settings are now using environment variables (Lays Rodrigues, see commit).

But the most significant work was rewriting and making it compatible with the new identity service. This is still in progress and a few features are missing but everything should be finished soon. (Me: Carl Schwan, See repository.). changes
  • The hardware page created last month was updated to include the Pinebook Pro (Niccolò Venerandi) and now includes hardware specifications (Me: Carl Schwan).

Library updates
  • An Aether theme was created for the Sphinx documention engine based on the Read the Docs theme. This isn’t used yet for any website but in the future, it will be used for and maybe others. Stay tuned! (Carson Black, see repository)

How you can help

We always need help with websites, fixing papercuts, upgrading old websites to the new Jekyll/Hugo infrastructure, making sure information on the websites are up-to-date, creating beautiful home page for your favorite project and a lot more.

You can join the web team through our Matrix channel , our IRC channel (#kde-www) or our Telegram channel.

This month in KDE Web: March 2020

Saturday 28th of March 2020 04:00:00 PM

This month KDE web developers worked on updating more websites and some progress was made in a new identity provider and a lot of other exiting stuff and a lot of background work was also done.

Updated Websites

  • Planet KDE is an aggregator of all the individual blogs of KDE contributors. It is the place where you can find technical details about a change, general KDE news, and blog posts about the life of KDE contributors. The website was updated and now contains feeds in more languages. (Me: Carl Schwan, See repository).

Progress to a new identity service

KDE Identity was and still is a source of pain in the KDE infrastructure. It only supports OpenLDAP, doesn’t provide a great onbording experience and isn’t very flexible.

A new account management service is currently in creation and should be based on a fork of the successful Blender ID system. This new system will be based on OAuth2.

This month the homepage of the new identity service was updated to follow KDE branding (Me: Carl Schwan, see commit) and the settings are now using environment variables (Lays Rodrigues, see commit).

But the most significant work was rewriting and making it compatible with the new identity service. This is still in progress and a few features are missing but everything should be finished soon. (Me: Carl Schwan, See repository.). changes
  • The hardware page created last month was updated to include the Pinebook Pro (Niccolò Venerandi) and now includes hardware specifications (Me: Carl Schwan).

Library updates
  • An Aether theme was created for the Sphinx documention engine based on the Read the Docs theme. This isn’t used yet for any website but in the future, it will be used for and maybe others. Stay tuned! (Carson Black, see repository)

How you can help

We always need help with websites, fixing papercuts, upgrading old websites to the new Jekyll/Hugo infrastructure, making sure information on the websites are up-to-date, creating beautiful home page for your favorite project and a lot more.

You can join the web team through our Matrix channel , our IRC channel (#kde-www) or our Telegram channel.

KDE in app stores

Saturday 28th of March 2020 11:00:00 AM

If you use KDE software, there is a good chance you’re on a Linux distribution and you download the software from your distribution’s repositories. But the fact is you can get KDE software from a number of sources on different platforms. As project coordinator for KDE e.V. helping with KDE Goals, I was tasked to look at app download statistics. Join me in my quest to understand how popular KDE apps are in various app stores.


Let’s start with one of the most popular operating systems in the world, Android.

Google Play

First we have the Play Store, the default way of downloading apps in the Google ecosystem. You can find all of the KDE published apps under a single developer account.

There are only seven apps published, but one of them is a very popular indeed: KDE Connect has over half a million downloads, and a respectable 4,6 rating with almost 15 thousand reviews. If we dig deeper when logged into the developer console, we can see it has over 200 thousand active users.

I think that last metric is very important: raw downloads stats are informative, sure - but you can achieve a high download count with a good marketing push even if the app is mediocre. On the other hand, active users are those that installed and decided to keep the app, as Google Play defines “active installs” as those that had the app installed and were online in the last 30 days.

Here are the stats for all available apps:

Name Active Installs KDE Connect 226 679 KStars 2 015 KTuberling 658 KAlgebra 572 Behaim Globe 511 Kirigami Gallery 165 Klimbgrades 92 F-Droid

The Google Play store is not the only way one can install apps. You can directly download .apk files and install them manually or you can use a 3rd party store like F-Droid. I’m not sure if there is way to link to all KDE apps available in F-Droid, but you can search for individual apps, like KDE Connect. There are no stats for downloads or active users on F-Droid.


I wouldn’t expect most Windows users to use an app store to get KDE apps. For many years the normal process when installing new software in Windows was to google the name, find a download link, get the installer and install the application manually. But Windows does come with an app store of its own now and, of course, KDE has apps available there as well. I couldn’t find a way to link to a single publisher, so the best I could do is a pre-made search link.

We have six published applications in this app store. The Windows store has a number of stats available for developers, but I’ll highlight the 30-day “acquisitions” which I believe is comparable to the statistic from Google Play.

Name Acquisitions Kate 32 067 Okular 23 811 Filelight 2 992 Kile 2 391 KStars 1 825 Elisa 945

We don’t have a single juggernaut this time, the numbers are comparable between the top 2 apps: Fun observation: KStars has a similar amount of users on both the Google Play Store and the Windows Store. Not so fun fact: Kate has 61 user reviews, Okular 108. That’s not much compared to the number of users. If you are using a KDE app, consider writing a review!

Note: The public listing on the store shows even less reviews, for example only three total reviews for Kate. I’m not sure if this is somehow filtered for me due to location or language.

As I mentioned, the Windows Store is not the primary way of getting KDE apps on Windows. Using the stats available in the Microsoft Partner Center, I can see that Krita alone had reported millions of installs. Other apps like Kdenlive, Kile, Kdevelop and Okular all have at least 200 thousand installs. I’m not sure how to interpret all of that data, but it shows the huge differences of popularity between download methods.


This distribution independent app store hosts 96 KDE apps. To get usage numbers I needed to go into each app manually, go to the metric tab and check the “Weekly active devices”.

If there is ever a need to revisit these numbers more often I would spend some time developing something to get the stats in an automated way: the huge amount of apps published and the need for manual accessing each app makes this task very time-consuming.

Anyway, here are the top 10 apps:

Name Installs Okular 34 862 Krita 33 874 Kdenlive 14 516 Kolourpaint 9 607 Ark 6 928 Ktorrent 6 210 Kate 3 483 Umbrello 3 253 Ktouch 3 186 KCalc 3 066 …   All other apps combined 48 668

Some observations:

  • Not visible in the above list is the huge amount games! Most of them have anywhere from 200 to 1000 active users. Perhaps they’re good candidates to include in the other app stores?
  • Elisa and Kile are both available in the Windows Store but not in the Snap Store. I think that’s a missed opportunity.
  • Some of the least popular packages are Kdevelop, Calligra, Filelight and Kontact. I think it shows that users of those apps either had them preinstalled on their systems or are predominantly looking for them elsewhere.

Can you beat me at Kmines?


This other Linux focused app store has 38 KDE apps available. Similarly to the Windows Store, instead of a publisher listing I can offer a search link.

This store needed the most amount of work from me. Compared to the other stores, there is no “developer account” I could login into. Instead, all of the stats are available in the open. I like this approach, but unfortunately the data provided is just raw download numbers that need some treatment to be useful. I used this python tool to help me with that.

The other issue is understanding the numbers. The other app stores all provide some sort of metric that shows the active users in a time frame, but here I only have downloads. This means that if I try to look at the number of downloads of an app in the last 30 days, but the app had 1 or more updates in that time, it would duplicate the number of users (once for the initial download and then again for each update downloaded).

To make some sense of all of this, I decided to look at the number of downloads since the last app update - assuming that active users keep apps up to date. This would more or less show the current usage. Again, I needed to do this work manually (check the last update date and ask for stats from then to now, for every app) and if this is not a one-off exercise a better way needs to be developed.

Fortunately for me, most of the apps were updated on March 5th so I could query for many of them at the same time. Since I gathered the stats on March 28th, it should be enough time for most users to download the update and thus show up as a active user. There are however some problems still: some apps show no update date at all (perhaps they were truly never updated) or had updates a long time ago (querying from that date would show huge cumulative download numbers). The other issue is that Krita was updated on March 25th, which could result in smaller reported number of downloads as users haven’t updated yet.

Based on all of these assumptions, here is my compiled list of top 10 apps that were updated on March 5th:

Name Downloads or updates between March 5-28 Kalzium 38 959 Kgeography 38 561 Knavalbattle 36 107 Kbounce 31 467 Kbruch 31 282 Kblocks 30 971 Kdenlive 30 843 kwordquiz 30 169 Ksudoku 30 133 Kgoldrunner 30 038

Now this is quite different from all other app stores. The app composition is different (3 educational apps, 6 games) and the download numbers are quite similar in the top 10. This means that either my method is flawed, or flathub users are very different compared to those of other app stores.

For completion, some other stats:

Name Downloads Gcompris March 5-28 22 363 Gcompris since last update 2019-12-01 67 961 Kdenlive March 5-28 30 843 Kdenlive since last update 2020-02-11 54 484 CONCLUSIONS

What did I learn after going through all of this data? While perhaps not the most popular way of acquiring KDE software, app stores still serve hundreds of thousands of users. This number grow a lot if more apps become published on all of the stores and the existing listings get some more love with reviews, better descriptions and screenshots.

Direct file downloads from repositories or mirrors dwarf the app store download numbers, but the stats from those are not collected for privacy reasons.

On the other hand, a successful app store listing is something we can show the world and say “look here, this is a popular KDE app, check it out and maybe check out the others”. If you’d like to assist with promoting KDE apps, join us in the matrix channel for the apps goal to help out!


Some apps have their own listings on app stores like Gcompris on the Play Store or Krita on Steam. I did not include those in my stats.

Vídeo de Plasma Bigscreen, KDE en tu TV

Friday 27th of March 2020 08:14:00 PM

Debería hablar de ciertos temas como el último podcast de KDE España, el próximo de mañana o un aniversario que no ha pasado desapercibido para algunos (muchas gracias Victorchk), pero no me apetece por diversos motivos. Hoy quiero compartir un vídeo de Plasma Bigscreen, el proyecto que fue presentado ayer por la Comunidad KDE y que tiene todos los números de convertirse en un bombazo.

Vídeo de Plasma Bigscreen

Lo cierto es que cuando las tecnologías libres se conjuntan pueden salir proyectos maravillosos. Es el caso de Plasma Bigscreen, el nuevo proyecto de la Comunidad KDE que fue presentado ayer en sociedad con un excelente artículo en el dot de KDE.News.

Para resumir, el proyecto tangible de Plasma Bigscreen (y digo tangible porque ya lo puedes tener en tu televisor) es la unión de varias tecnologías libres:

  • Las increíbles Raspberry Pi, un proyecto que proporciona el hardware necesario para que funcione el resto del Software. Con menos de 50 € puedes tener tu pequeño PC con el que trastear y conectar donde quieras: un monitor, una pequeña pantalla, un televisor moderno e, incluso, con un televisor con entrada RCA.
  • El proyecto MyCroft AI, un software que convierte tu pequeña Raspberry Pi en un asistente de personal controlado por tu voz.
  • El Software de la Comunidad, que con su concepción camaleónica y sus propiedades de escalibilidad, se puede adaptar a nuevos formatos de visualización y control.

El resultado es este Plasma Bigscreen que podemos ver en funcionamiento en este vídeo de poco más de 3 minutos donde se muestra su precioso aspecto visual (recordemos que nos encontramos ante una versión todavía beta del proyecto), su control vía MyCroft que nos permite buscar vídeos en youtube o música en SoundCloud, la posibilidad de instalación de aplicaciones o su nuevo navegador web Aurora o la posibilidad de jugar a juegos libres en una gran pantalla.


Más información: Aix’s Blog


New QML language features in Qt 5.15

Friday 27th of March 2020 01:58:08 PM

While big changes are on their way for Qt 6.0, QML got some new language features already in 5.15. Read on to to learn about required properties, inline components and nullish coalescing.

Krita Weeky #13 | 4.2.9 released

Friday 27th of March 2020 10:41:48 AM
So one of the toughest Krita releases is up today. Tough not in the sense there were a lot of regressions to solve but the mountain of build issues faced by the team.

It’s just a matter of selecting the right search terms

Friday 27th of March 2020 07:13:10 AM

Once more, I wanted to push a small change to a Git repository to which the owner gave me write access. This repo is currently the only one for me, for which I need to use https as transport protocol and therefore have to enter username and password for each and every push.

On the other hand, I keep all my valuable credentials in Pass: The Standard Unix Password Manager for a couple of years now. It stores them with strong GPG encryption on my disk, is nicely integrated into Firefox by a plugin and there is also a KDE plasma widget available, created by my fellow KDE developer Daniel Vrátil. So why can’t Git read (I was about to use pull here, but that might be confusing in the context of Git) the credentials from my password store? There must be a way!

Next, I started reading the documentation about git-credentials which seems to provide all that is needed. Just that pass was not on the list of helpers. Reading the specs, I expected it to be pretty easy to write a small wrapper that solves the issue. But: this sounds like a problem too obvious and to be solved already. So the search began.

Using all kinds of combinations of git-credentials, pass, password-store and some more I don’t remember, I always ended up on some general Git documentation, but no sign of what I was looking for. So maybe, it really does not exist (oh, I have not consulted the yellow pages) and I have to develop and provide it to the internet community myself.

Reading the specs more thoroughly – now that i need to understand the interface to such a wrapper – I came across the search pattern used by Git to find those credential helpers. I was tempted to name mine git-credential-pass since it is a helper for pass. But wait: one more trial using this name as pattern for the search engine of choice, et voilà: I found pass-git-helper, a nice python based script which does exactly what I looked for (and maybe a few more things).

It already exists for a couple of years, so I wondered if I can find it in my distro’s repo to save some time and get automatic updates. Bad news, it does not exist.

So it was a matter of git clone, manual installation and configuration to gain some more integration and automation.

% git clone % sudo python3 install # test drive % pass-git-helper get protocol=https ^D Unable to parse mapping file %

Ah, I needed that mapping file, it does not work without it. OK, let’s do it then.

% mkdir -p ~/.config/pass-git-helper % cat > ~/.config/pass-git-helper/git-pass-mapping.ini [*] Target=${host} ^D % pass-git-helper get protocol=https ^D password=git-password username=login: git-username %

Hmm, works, but the lead-in text login: for the username is not a good idea to be returned to Git. Problem: I have that in most of my pass records and the firefox plugin can cope with it pretty well. But that could be tweaked by an extension to the mapping.ini file based on my favorites: regular expressions.

% cat > ~/.config/pass-git-helper/git-pass-mapping.ini [DEFAULT] username_extractor=regex_search regex_username=^login: (.*)$ [*] target=${host} ^D % pass-git-helper get protocol=https ^D password=git-password username=git-username

Looks good to me. Now on to Git:

% git credential fill url= ^D # at this point, the normal 'enter username' dialog popped # up, which I cancelled error: unable to read askpass response from '/usr/lib/ssh/ssh-askpass' Username for '': ^C

Now it was just a matter to configure Git to use the new helper. This is done by setting the Git credential.helper option, which can be achieved with the following command executed in the top directory of the project:

git config credential.helper '!pass-git-helper $@' # test drive % git credential fill url= ^D protocol=https username=git-username password=git-password

Yeah! That’s it. Now I am prepared for the next git push to that repo.

The search engine btw, seems to have learned in the meantime: now when I enter my initial search arguments it presents pass-git-helper right away. Maybe other users benefit from this learning as well.

Testing for the Beta – help needed!

Thursday 26th of March 2020 09:05:14 PM

Kubuntu 20.04 Testing Week

The Kubuntu team is delighted to announce an ‘Ubuntu Testing Week’ from April 2nd to April 8th with other flavors in the Ubuntu family. April 2nd is the beta release of what will become Kubuntu 20.04 and during this week, there will be a freeze on changes to features, the user interface and documentation. Between April 2nd and final release on April 23rd, the Kubuntu team and community will focus on ISO testing, bug reporting, and fixing bugs. Please join the community by downloading the daily ISO image and trying it out, even beginning today.

QA tracker:

From this main page, click on the ‘Kubuntu Desktop amd64’ link to arrive at the testcases page. On the testcases page, you can download the ISO by clicking the ‘Link to the download information’ and report test results to the various test cases for Kubuntu. If you see other flavors needing testing on the main page, please test for them as well.

Chat live on IRC (#ubuntu-quality) or Telegram (UbuntuTesters: if you like, during this time of pandemic social distancing.

If you have no spare computer to use for testing, no problem! You can test without changing your system by running it in a VM (Virtual Machine) with software like Virtualbox, or running it in the live session from a USB or DVD, so you can also test if your hardware works correctly. We encourage those that are willing, to install it either in a VM or on physical hardware–requires at least 6GB of harddisk space–and use it continuously for a few days, as more bugs can be exposed and reported this way.

The easy way to report a bug is to open up Konsole by pressing alt+space and typing konsole or Menu > Konsole and then typing `ubuntu-bug packagename`, where packagename is the program or application where you experience the bug.

If you prefer working in the terminal, open the virtual console (terminal) by pressing control + alt + F2, 3, 4 etc. and typing `ubuntu-bug packagename`, where packagename is the program or application where you experience the bug. Control + Alt + F1 to return to your desktop. If a crash has landed you in the terminal, login with your usual user name and password, and report the bug as above.

Here is a nice youtube video showing the entire process, including one way to figure out what packagename is appropriate in GNOME:

Using ‘ubuntu-bug’ will automatically upload error logs and/or other files to Launchpad that developers need to fix the bug. By the way, the installer’s packagename is ubiquity. Experience tells us that is the most useful packagename to know for ISO testing when things go wrong with the installation. The live session software package is casper, should you encounter bugs affecting the live session itself, not programs. Other programs with bugs should be filed against their packages, for instance firefox, dolphin, vlc, etc. Only the bug *number* is needed when reporting the results of a test on the QA tracker.

Please test programs / applications that you regularly use, so you can identify bugs and regressions that should be reported. New ISO files are built every day; always test with the most up-to-date ISO. It is easier and faster to update an existing daily ISO with the command below (first right-click on the ISO’s folder in Dolphin and select ‘Open in Terminal’) or just open konsole or yakuake and `cd path-to-ISO-folder`. Zsync downloads only changes, so it’s very quick.
$ zsync

Plasma Bigscreen, la apuesta de KDE para conquistar los televisores

Thursday 26th of March 2020 07:37:44 PM

Al final se ha materializado y ha sido presentado al gran público Plasma Bigscreen, la apuesta de KDE para conquistar los televisores, esos aparatos que tenemos en casa , que en realidad son ordenadores con una gran pantalla y que tienen software privativo que no sabemos qué puede hacer.

Plasma Bigscreen, la apuesta de KDE para conquistar los televisores

La gran ventaja que tiene el Software Libre es que te da una seguridad de que tu privacidad está garantizada, cosa que no ocurre con otro tipo de Software. Muchos utilizamos en nuestro PC y en nuestro portátil sistemas GNU/Linux, que nos aportan confianza. Y suspiramos por tener smartphones y tabletas con GNU/Linux, pero poco nos preocupamos por una pieza que suele estar en nuestro salón, el televisor inteligente de 56 pulgadas.

Es por ello que la Comunidad KDE, cuyo lema es «Un mundo en el que todos tienen control sobre su vida digital y disfrutan de la libertad y la privacidad.» se ha fijado en este detalle y se ha puesto manos a la obra.

Fruto de este trabajo es el anuncio en la página de noticias de KDE (comúnmente conocido como dot) del proyecto Plasma Bigscreen,  la interfaz de la Comunidad KDE para televisores de gran pantalla.

En palabras de los desarrolladores:

«Plasma Bigscreen proporciona la interfaz de un ordenador monoplaca y utiliza el asistente de voz de la IA Mycroft para ofrecer una plataforma de TV inteligente. Plasma Bigscreen no sólo ofrecerá aplicaciones ricas en medios, sino también aplicaciones de escritorio tradicionales rediseñadas para adaptarse a la experiencia de Bigscreen.»

Toda una declaración de intenciones que se sustenta en sus grandes ventajas ya que Plasma Bigscreen:

  • Es Software Libre y Open Source.
  • Ofrece innovación ya que supone un reto de adaptación de las aplicaciones a una nueva forma de interaccionar con ellas.
  • Puede ser controlado por voz.
  • Es abierto y, por tanto, puede ser fácilmente ampliado con nuevas funcionalidades y aplicaciones.
  • Está soportada por la Comunidad KDE, garantía de calidad.

Plasma Bigscreen ya ha sido probado con una Raspberry Pi conectada a un TV por su entrada HDMI, lo cual significa que ya es una realidad ya que puede utilizarse en cualquier televisor actual. Y evidentemente, funciona con cualquier monitor, con lo que creo que pronto lo probaré en casa.

Más información: Plasma Bigscreen


Latte bug fix release 0.9.10

Thursday 26th of March 2020 12:00:00 PM

Latte Dock v0.9.10  has been released containing important fixes and improvements!

Go get  v0.9.10  from*

----- * archive has been signed with gpg key: 325E 97C3 2E60 1F5D 4EAD CF3A 5599 9050 A2D9 110E


The new code that ignores ALL plasma popups has a side effect to ignore also KRunner and Yakuake. For v0.9.x unfortunately I can not add any workaround, for v0.10~ users this is already fixed.

  • dodge all windows, work properly after the dock becomes hidden and not show inappropriately when any window touches the dock
  • fix mask calculations for NO COMPOSITING environments
  • fix blur for Latte panels when exiting edit mode
  • protect LastActiveWindow application data updating in multi-screen environments and dont assign faulty application name and icons to irrelevant last active windows
  • fix right click context menu for Group plasmoid. Take note that Group plasmoid can only be used in Single Layout mode and NOT in Multiple Layouts mode. It is scheduled to be fixed in next major stable version
  • fix Indicators positioning when a Task is bouncing or requires attention
  • x11: smart way to ignore all plasma popups
  • wayland: smart way to ignore all plasma popups but first Plasma needs to update its popup flags in order to work correctly
  • support Chromium/Chrome audio channels for Tasks previews and context menu


You can find Latte at Liberapay if you want to support,    

or you can split your donation between my active projects in kde store.

Krita 4.2.9 Released

Thursday 26th of March 2020 10:38:40 AM

Today we’re finally releasing Krita 4.2.9! It’s been one of the most complicated releases we’ve ever attempted. When we updated the version of Python that’s embedded in Krita, scripting broke on Windows. When Apple updated its notarization protocol, building broke on macOS. And then we updated to a newer version of some of the libraries we build Krita on, and that broke all kinds of things. And then we needed to figure out a new way of packaging Krita for the Windows Store, which unfortunately broke our nice icons…

Krita 4.2.9 however is really stable after all the testing it had during the beta period. And there are even some new features to enjoy!

  • Dmitry improved the brush outline: it no longer flickers when you hover over the canvas:
  • He also added “Airbrush” and “Airbrush Rate” to the Color Smudge brush, and a new Ratio setting, also for the Color Smudge brush, which allows making the shape of the brush flatter using the different sensors. Ramón Miranda has even made a video demonstrating these features:
  • New contributor Saurabh Kumar added a “Split Layer into Selection Mask” feature:

As for the bugfixes… There are a lot of them, and this list isn’t even completely complete!

  • Fix transparency checkers looked white on HDR display bug 406698
  • Several fixes to file dialogs for overwriting and jpg files bug 412651
  • Fix Grow Selection expanding in one direction bug 414647
  • Fix crash using onion skins on non-animated layers bug 414668
  • Increase the limit in Layer Offset to 100k bug 414625
  • Fix crash opening .kra with incorrect clone source (related to bug 414699
  • Prevent crash on addition of color to deleted palette with colorpicker bug 413548
  • Make Add subbrush off on changing multibrush tool’s type from Copy Translate bug 415651
  • Improve rendering of predefined default Rect dab
  • Set the default location for restored files to QStandardPaths::PicturesLocation bug 415810
  • Don’t crash if remoteArguments is called when there isn’t a mainwindow bug 415794
  • On Android, default to TouchGesture for Kinetic Scrolling
  • Delay initialization of brush paintop widget state bug 415033
  • Reenable breeze: with the latest release, the bug with comboboxes has been fixed
  • Show the hand cursor if there is no colorize mask yet bug 415935
  • Fix logic for enabling/disabling options in stroke selection dialog bug 415896
  • ORA export, write entire layers instead of cropping them
  • Fix endless recursion when assigning a profile bug 414818
  • Fix a crash when cancelling Transform Tool action bug 414672
  • Fix an obviously wrong assert in the gradients bug 414550
  • Fix 1px brush offset in line tool bug 407405
  • Fix Layer Filter Combobox with Breeze theme bug 406595
  • Fix comparison of double spin box
  • Fix PaletteDocker not showing palettes bug 414890
  • Fix undo of replacing vector selection bug 412808
  • Separate krita log dialog from system information
  • Resource bundle: turn assert into check bug 399008
  • Fix the python Canvas.setRotation method bug 416126
  • Store and restore the geometry of the svg editor window bug 416097
  • Fix number of asserts with continued transform bug 415625
  • Fix Touch Docker save button not working on new files bug 407905
  • Fix blur Filter inconsistencies bug 416241
  • Fix border artifacts in layer styles bug 414582
  • Use Qt::Popup for color selectors popup widgets bug 410959
  • Always show color popup below the cursor bug 394139
  • Remove the strength compatibility with older paintop presets bug 416335
  • Fixed unneeded error message in Render Animation. bug 412599
  • Fix canvas offset calculation bug 416352
  • Layers with alpha channel disabled correctly export as “svg:src-atop” for ORA
  • Add icon to Close button of “About Krita” dialog box
  • Fix memory leak in preset history docker
  • Warn that Krita needs to be restarted after enabling/disabling plugins bug 416575
  • Workaround Qt 5.14’s colormanagement preventing png files from being saved bug 416515
  • Fixes with last used filter command. bug 416706
  • Fix Increase/Decrease Brush Size and Switch To Previous Preset buttons
  • Fix Warp and Cage transform in master bug 416505
  • Fix crazy snapping when resizing shapes bug 414336
  • Fix hiccups when doing canvas actions bug 414576, 415773
  • Fix animation rendering problem on small images (< 100px in size) bug 415367
  • Fix display of vector shapes when transformed with transform tool bug 417016
  • Fix hangup when loading image with generator/file layers bug 415891
  • Fix slowdown associated with the quick hide function of Shift+click on layer visibility icons
  • Fix canvas border color issue
  • Fix issue when saving preferences
  • Hide SubWindow decoration on macOS
  • A number of fixes with L*A*B* and CMYK thanks to L.E Segovia’s Season of KDE work
  • Android: Make it possible to select opengles
  • Set setRedirectPolicy as per discussion on KDE mailing lists
  • Fix crash when loading asl with tdta OSType
  • Make “Save Incremental Version” update recently used files
  • Correct logic for determining whether there are multiple backups requested bug 417914
  • Fix incorrect common curve in very old presets bug 417748
  • Fix layout issue in the history docker
  • Fix strobbing of the brush outline because of subpixel precision bug 374551
  • Make local selection outline visible on layer converted to selection mask
  • Fix freeze on vector layers bug 412746
  • Fix artifacts on filter masks applied to adjustment layers bug 417673
  • Fix ratio option on lower precision brushes
  • Fix opening Appimages bug 418230
  • Set image as modified after a legacy action (fix Channels docker not updating in some cases) bug 417992
Download Windows

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


(If, for some reason, Firefox thinks it needs to load this as text: to download, right-click on the link.)


Note: the gmic-qt is not available on OSX.

Source code md5sum

For all downloads:


The Linux appimage and the source .tar.gz and .tar.xz tarballs are signed. You can retrieve the public key over https here: 0x58b9596c722ea3bd.asc. The signatures are here (filenames ending in .sig).

Support Krita

Krita is a free and open source project. Please consider supporting the project with donations or by buying training videos! With your support, we can keep the core team working on Krita full-time.

Plasma on TV: Presenting Plasma Bigscreen

Thursday 26th of March 2020 08:43:40 AM

Plasma Bigscreen main menu.

Plasma Bigscreen is KDE's user interface for big TV screens.

Plasma Bigscreen powers the interface on a Single Board Computer and uses the Mycroft AI voice assistant to provide a Smart TV platform. Plasma Bigscreen will deliver not only media-rich applications, but also traditional desktop applications redesigned to fit the Bigscreen experience.

Advantages of Plasma Bigscreen
  • Free (as in Freedom) and Open Source: One of the most important goals of this project is to hand control over to the people and the industry so they can build and power smart devices without the limits of other closed TV environments. Plasma Bigscreen is completely Free and Open Source and gives everyone the freedom to use, acquire, change and redistribute the software how they see fit. It also gives people the freedom to create, innovate and improve on top of the Plasma Bigscreen and share their work with the world.
  • Innovative: Plasma Bigscreen transforms the traditional plasma workspace experience into something that is controlled with a regular TV remote control. This is new territory for KDE interface designers and requires a new thinking of how to layout applications and how to make it easy for people to interact with Plasma from their couches.
  • Voice Control: Talking of interacting from the couch, voice control provides users with the ultimate comfort when it comes to TV viewing. But most big brands not only do not safeguard the privacy of their customers, but actively harvest their conversations even when they are not sending instructions to their TV sets. We use Mycroft's Open Source voice assistant to solve this problem.

    For the current beta img, the team connects to Mycroft's Home server, which by default uses Google's STT (Speech to text) which sends anonymized utterances to Google. This, of course, is not ideal, but being Open Source, you can switch out the back end and use whatever you want, even self-hosted systems like Mozilla Deepspeech. Or you can de-activate voice recognition altogether. Your choice.

    With Mycroft AI, the Bigscreen team intend to give users all the comfort of a smart voice controlled assistant with the advantages of the control over you privacy you can only achieve with Open Source software.

  • Easy to Expand: Mycroft's AI uses what are called "skills". Skills allow the assistant to learn about and perform different tasks. A weather skill, for example, lets Mycroft know about the weather and tell you what the day is going to be like; a cooking skill retrieves recipes and instructions and you can then ask Mycroft to help you make a delicious meal. There are already many skills in Mycroft's library and Mycroft AI's graphical framework for skills is built on top of Qt and Kirigami, two mature development frameworks. This allows third-party developers to use Python and QML to develop rich voice skills for the platform, which means features on KDE Bigscreen will multiply and provide even more functionalities to viewers.

    Simple settings make Bigscreen easy to tweak.

  • Community Supported: Plasma Bigscreen was created and is being maintained by KDE developers. KDE is one of the oldest, largest Free Software communities in existence and builds and maintains literally hundreds of projects, spanning from a full-featured desktop environments and development frameworks, to educational software and creativity apps. With the support of KDE, Plasma Bigscreen will develop quickly and grow to have as many features as users require.
Coming to a Screen Near You

The upcoming beta release for Plasma Bigscreen is already working on the Raspberry Pi 4. It's targeted to run on a TV screen, but will also work fine on a regular monitor.

The interface is largely designed to be easy to use with a remote control. There is experimental support for HDMI-CEC in the beta image, so anyone with a TV that supports HDMI-CEC can choose to use their TV remotes.

The YouTube app.

As one of the key features of Plasma Bigscreen is Mycroft's voice-controlled applications/skills, it's recommended to use a USB/Bluetooth remote with a microphone to try it out. Some recommended generic USB remotes are the WeChip G20 / W2 remote controls. It can also be used with a keyboard / mouse and any USB microphone.

For a more in-depth look at Plasma Bigscreen, check out Marco Marin's and Aditya Mehra's write ups on this new project.

Cosas que hacer con KDE estando encerrado en casa, próximo podcast de KDE España

Wednesday 25th of March 2020 04:50:29 PM

Me complace invitaros al próximo podcast en directo de KDE España que ha decidido titular de forma muy original y adecuada «Cosas que hacer con KDE estando encerrado en casa» y que se va a realizar el próximo 28 de marzo, a las 11:00, una forma de proponer ideas en estos tiempos de confinamiento.

Cosas que hacer con KDE estando encerrado en casa, próximo podcast de KDE España

Nos ha tocado vivir una pandemia, y la mejor forma de colaborar para que sea lo menos traumática para todos (teniendo en cuenta que lo más traumático es el dolor y la muerte) es quedarnos en casa.

Para algunos será motivo de aburrimiento y hastío (que os aseguro que no es mi caso) así que a los integrantes de KDE España se les ha ocurrido la idea de realizar un podcast titulado «Cosas que hacer con KDE estando encerrado en casa» en el que os daremos ideas para que se os pase el tiempo más rápido y de paso contribuyáis al desarrollo de Software Libre (si, los desarrolladores del Software Libre no son solo los programadores que hacen código).

Así que ya sabéis, estad atentos para escuchar en directo el próximo podcast de KDE España que emitiremos utilizando los servicios de Jitsi para reunir a los contertulios y los servicios de streaming de Youtube para poder transmitirlo en vivo.

¡Os esperamos el sábado 28 de marzo a las 11:00 CET!


Y no olvidéis que hoy tenéis otro podcast de altura con Yoyo Fernández, Paco Estrada, Juan Febles y Rubén Gómez a las 20:00 con el tema Linux y Teletrabajo.

Los podcast de KDE España

En un afán de acercarnos más a todos los simpatizantes de KDE hace un tiempo que empezamos a realizar podcast. En ellos varios miembros de la Comunidad KDE de España nos reunimos para hablar un poco de los diversos proyectos.

Hemos hablado de muchos temas como por ejemplo Akademy, KDE Connect, Plasma Mobile, Kirigami, KDE y el mundo empresarial y un largo etcétera de temas. Por supuesto, os animo a ayudarnos proponiendo temas en los comentarios de esta entrada, en el grupo de Telegram de Cañas y Bravas o en la sección especial en la web de bugs que hemos creado para la ocasión.

Podéis seguirnos en el canal de Youtube de KDE España o en Ivoox, donde estamos subiendo poco a poco los audios emitidos. Esperamos que os gusten.

Plasma Bigscreen – A Dive Into Mycroft Skills, Voice Applications & More

Wednesday 25th of March 2020 12:26:35 PM
A Plasma Bigscreen Beta Image For Raspberry Pi 4

In this blog post I would like take you through an introduction to Mycroft GUI Skills and Voice Applications technology on Plasma Bigscreen and showcase some of the interesting stuff I have been working on for the Plasma Bigscreen Project which are available on the beta image release for the Raspberry PI 4. This beta image show cases not only media-rich voice applications but also applications specialised to fit the Bigscreen experience all developed under an open process, more information on them in the sections below.

Plasma Bigscreen is the free open-source user interface experience for those big TV Screens, It consist of KDE Plasma technology powering the User Interface with Mycroft AI’s voice assistance technology packaged together on the image to provide a Smart TV platform and is based on KDE Neon.

The experience when sitting 10 feet away from your TV just isn’t complete without having the ease of access to control it and that’s exactly the space in which Mycroft AI the open-source voice assistant experience fits right in to provide you with that hands free easy interaction.

Discover Mycroft AI GUI Skills

Mycroft AI skills allow the assistant to learn and perform different tasks. A weather skill, for example, allows Mycroft to discover the weather and tell you what the weather on a day is going to be like; a cooking skill retrieves recipes and instructions and you can then ask Mycroft to help you make a delicious meal. There are already many voice skills available in the Mycroft skill repository that you can explore and more being quickly developed everyday.

Mycroft AI Date-Time Skill Mycroft AI Weather Skill

Mycroft AI’s graphical framework for skills is built on top of Qt and Kirigami, two mature development frameworks. This allows developers to use Python and QML to develop rich voice skills with graphical user interfaces for multiple platforms, Voice Applications featured on Plasma Bigscreen beta image are based on this combination of both voice and display technologies, where we expand Mycroft Skills with a GUI to also work as applications that can be controlled voice and physical key interaction.

A Look Into Voice Application

Voice can be a very powerful tool for interacting with applications, it can complement an application by reducing the number of actions required to execute a certain task by the user be it searching for a file or searching for music, simply asking an application for example to play a song can make things a lot simpler than opening an application, hitting the search tab / field, typing a song and hitting the play button.

Voice applications on the beta plasma bigscreen image are designed to be simple and powerful to use no matter what method is chosen to interact with them, let’s look at the Youtube Voice Application for instance.

The Youtube Voice Application is a GUI based skill for Mycroft AI, All of its logical functions are handled and called within its skill class, Adding a desktop entry and icon for the gui based skill is what partially turns the GUI skill into a Voice Application, the other bits include simply adding a landing page or the “homescreen” and registering it in the skill class using the gui event handler that is first presented to users when they execute the skill from the desktop entry, some more in-depth information on installation and this architecture can be read in the Voice Application Guidelines.

Simple Starting Point For Key Based Navigation in Mycroft Skills With A GUI Interface the “Homescreen”

The homescreen of a voice application can be considered the traditional equivalent of a home tab on a normal application, in the case of the Youtube Voice Application it consist of showing several categories of available videos, your recently watched history and search, It is presented to be navigable by simple arrow keys for selecting and browsing videos from the various video categories. The homescreen can be a simple page showcasing Mycroft Examples or as complex as the skill author requires the page to be as is the case above.

Youtube Voice App Homepage Youtube Voice App Search Page Simple Homepage With Skill Examples

The API documentation for developing Voice and GUI based skills and converting them to Voice Applications for Plasma Bigscreen is available on the following links below:

Aura Browser – Designed To Be Controlled By Just Your Remote Aura Browser

I would like to introduce you to the Aura Browser, It is a new browser based on QtWebEngine that I had the opportunity to work on for the Plasma Bigscreen beta image, It is completely designed to work with simple arrow key navigation that complements browsing the web with just a Remote Control without the requirement of a physical mouse. It features a virtual mouse controlled by arrow keys with auto scrolling, has support for tab based browsing, basic bookmarks and basic downloads and permission management.

This browser in its early stages but is available on the Plasma Bigscreen beta image release for the Raspberry Pi 4. The browser source can be found at:

Aura Browser Start Page Aura Browser – Website View With Virtual Mouse

Plasma Bigscreen

Wednesday 25th of March 2020 12:20:00 PM

Today I want to introduce a project I have been working on together (mostly in the background) with some colleagues of mine… Now with beta status reached, it’s time to more publicly talk about it: enter Plasma Bigscreen.

Smart TVs are becoming more and more complete computers, but unfortunately there the experience tends to be a tight walled garden between proprietary platform, services and privacy-infringing features. Features which are very cool, like voice control, but in order to not pose a threat to the user privacy should be on a free software stack and depending less on proprietary cloud platforms where possible.

Plasma BigScreen is a platform intended to use on smart TVs (trough a powerful enough small computing platform, such as the Raspberry Pi4, or any tiny computer if you need more power) with big remote-friendly UI controls, and Voice activation. What technology did we use for it? Plasma (of course!) and Mycroft.

Plasma Bigscreen main user interface

Plasma Bigscreen is an user interface for TVs providing a 10 foot UI for a smart TV experience (on TVs or any screen with an HDMI connection). It is a Plasma Shell, just like our beloved Plasma Desktop and Plasma Mobile.

It uses the familiar look and feel of Plasma but optimizes all the user interaction to be perfectly readable from the distance and controllable with ha simple basic remote control… from your couch.

Besides interaction with a remote control, it also supports a modern way of iteracting that is revolutionizing the UX on all kind of devices: voice interaction. Optionally, it can integrate seamlessy with Mycroft: an opensource project aimed to offer a completely free voice assistant.

Mycroft offers what are the so-called “skills”. Each skill, takes care of a particular voice interaction. there is an huge variety available, from the weather, do date/time and reminders, to online services clients such as soundcloud and Youtube, with comprehensive QML bindings to show a rich User Interface in a Plasma Environment.

We prepared a beta image for the Raspberry Pi4 for anyone to try, in which we pre-configured Plasma Bigscreen with Mycroft integration ready to go.

If you have a Raspberry Pi4, you can try this image immediately: you can find it here: just flash the file on a MicroSD and is ready to go on any Pi4.

Note that on that image, we point the device to the official Mycroft company’s “Mycroft Home” service, which internally uses the Google STT (Speech to text) which does use google but in a more anonymized fashion as this is not tied to your Google account (nor requires having one). Tough not ideal, it’s possible to configure the Mycroft core to use different services, even those you can self-host like Mozilla Deepspeech.

In here to emphasize voice controls, we prepared some skills (some preinstalled, some can come from the kde store) to fully show voice controls. In particular a Youtube client skill which is perfectly usable both from a remote control and voice only.

Youtube skill shipped in the image

As remote control, you can use the remote of your TV directly if it supports the CEC standard, or any of those remotes with an usb dongle which are “seen” as a keyboard with just few standard keys (some have also an integrated microphone, so giving voice commands is very easy).

In the next days, there will be more posts explaining the architecture and the technical choices we made, in the mean time, have a try and if you want to get in contact with us about the project, you can find directions here.

How do most KDE websites use the same theme?

Wednesday 25th of March 2020 11:50:00 AM
A unified theme? Why? Why not?

Nearly all KDE websites use a unified theme across the board. This is part of the consistency goal, chosen as a KDE goal at the last Akademy in Milano (Italy).

Using a unified theme has multiple advantages:

  • It strengthens KDE’s brand, since websites are more visible than applications or projects part of the KDE community. Websites with a unified look help visitors immediately identify an application or subproject as being part of a bigger organization.

  • It is easier to maintain only one theme and the tooling behind it than a theme for each project. We all wish Free and Open Source projects had unlimited budgets and manpower, but that is not realistic and maintaining a theme is not an easy task.

This doesn’t mean the KDE theme should be used for every KDE project, in fact, there are legitimate reasons not to. Sometimes an application under the KDE umbrella wants to create their own brand and does have the manpower and talent to design their own website. Krita is a good example here. The team has built a beautiful website that does not use the unified theme.

What theme does KDE use?

KDE is using the Aether theme. This is a theme designed and initially developed by Ken Vermette, the talented artist that is also behind most of the Plasma wallpapers and some interesting design concept like DWD.

This theme was originally based on one of the first Bootstrap 4 alpha version and later rebased on a stable Bootstrap 4 version. Using Bootstrap has its advantages and disadvantages.

The biggest advantage is that it has a large community and a lot of bootstrap themes exist for CMS and static site generators. It can be easily adapted to your specific needs without starting from scratch every time.

Another advantage is that Bootstrap is built using SASS and is designed to be extendable with tons of variables a developer can modify to globally change colors, layouts and a lot more. You can also specify the modules you want to use, and add your self-made components. For those interested in extending a Bootstrap theme, the official documentation is a great start. These capabilities were sadly not used when creating the Aether theme, but we are slowly moving to use more of the Bootstrap theming capabilities over time.

The problem with Boostrap is that, because it is so popular, in its default from it looks like a generic website without any personal identity. Changing only the colors won’t help to make your website more unique.

Building the websites

In KDE we use a lot of different web frameworks for our websites. Most of the applications websites are now using Jekyll or Hugo, but some are also using Wordpress, Drupal 7 and Drupal 8.

Jekyll has first-class support for creating a shared theme, so we created a Jekyll theme for KDE using the Aether theme that offers a lot of options. Here are two examples:

  • Should it display a Made By KDE logo? This is useful for application websites but shouldn’t appear on, for example, the KDE e.V. website.

  • Should it display a KDE logo or the application logo?

This allows for small customizations with only a few changes for each website without having to maintain different versions.

Some websites are using Hugo instead of Jekyll. The reason for this is that Hugo is faster when generating the webpages and has more advanced internationalization features included by default. The internationalization features are used for and the monthly application release announcements.

For my WIP replacement for the KDE Dot, I needed the performance of Hugo. With Jekyll, I gave up generating the website after 10 minutes, but with Hugo, it only took a few seconds to generate.

In the case of Content Management Systems, creating a theme is also well-supported but it isn’t as pleasant to do. I have a limited experience with Wordpress, but creating a theme was still possible and not too complicated. In the case of Drupal 7, creating a theme from scratch is almost impossible. It requires messing with a lot of PHP arrays and the security responsibility is on the side of the theme developer.

Deployment of the theme

To deploy the theme, I use Symfony Encore. Sympfony Encore is a webpack wrapper. I chose Symfony Encore because I’m very familiar with its PHP framework and I have been working with it since I was in high school (using Webpack alone would have been completely fine too).

Webpack is used to compile and optimize the SCSS and ECMAScript (aka JavaScript). After each commit to the master branch, a CI job compiles and deploys the compiled CSS and ECMAScript to a CDN host and the hosted CDN asset is then used by all the new KDE websites. This means that my changes are immediately propagated to all websites… or so I thought initially. In reality the CSS and JS files are cached for a long time and often visitors get an old version.

I’m solving this problem in two ways:

  • For dynamic websites: I also generate a versioned version of the assets and resolve the version in the backend. This is what I used in the MediaWiki plugin, for example.

  • For static websites: In this case, I can’t dynamically resolve the last version in the backend, so instead I add a GET parameter to the URL (e.g. main.css?v=10) and increase the number each time I fix a bug. This doesn’t happen often, so it is still easy to manage.

How you can help

We always need help with the websites, fixing papercuts, upgrading old websites to the new Jekyll/Hugo infrastructure, making sure information on the website is up-to-date, creating new beautiful home pages for your favorite projects and a lot more.

The Elisa maintainers are still looking for someone who wants to create a website and we created a junior job task for this. Maybe that someone could be you?

You can also join the web team through our Matrix channel, our IRC channel (#kde-www) or our Telegram channel.

welcome to heck: lessons learned from Ikona writing rust bindings to C++ the hard way

Wednesday 25th of March 2020 02:04:06 AM

rust is quite a neat language, isn't it? gigantic library ecosystem, memory safety, tons of developer-friendly tools in it. for Ikona, I decided to utilise this language, and instead of relying on binding generators that hide half the magic away from you, I wrote all bindings by hand.

rust –> C++ by hand: how?

obviously, rust and C++ are different programming languages and neither of them have language-level interop with each other. what they do both have is C. C—the lingua franca of the computing world. unfortunately, C is a very bad lingua franca. something as basic as passing arrays between programming languages becomes boilerplate hell fast. however, it is possible and once you set up a standardised method of passing arrays, it becomes far easier.

rust to C

so, in order to start going from rust to C++, you need to stop at C first. for Ikona, I put C API bindings in a separate crate in the same workspace. you have a few best friends when writing rust to C here: – #[no_mangle]: keeps rustc from mangling your symbols from pure C – unsafe: because C is ridiculously unsafe and Rust hates unsafety unless you tell it that you know what you're doing – extern "C": makes rust expose a C ABI that can be eaten by the C++ half – #[repr(C)]: tells rust to lay out the memory of a thing like C does – Box: pointer management – CString: char* management

memory management

Box and CString are your friends for memory management when talking to C. the general cycle looks like this:

pub unsafe extern "C" new_thing() -> *mut Type { Box::into_raw(thing) // for non-rustaceans, the lack of a semicolon means this is returned } pub unsafe extern "C" free_thing(ptr: *mut Type) { assert!(!ptr.is_null()); Box::from_raw(ptr); }

into_raw tells rust to let C have fun with the pointer for a while, so it won't free the memory. when C is done playing with the pointer, it returns it to Rust so it can from_raw the pointer to free the memory.


for Ikona, I didn't bother attempting to convert Rust structs into C structs, instead opting for opaque pointers, as they're a lot easier to deal with on the Rust side.

an average function for accessing a struct value in Ikona looks like this:

#[no_mangle] pub unsafe extern "C" fn ikona_theme_get_root_path(ptr: *const IconTheme) -> *mut c_char { assert!(!ptr.is_null()); // make sure we don't have a null pointer let theme = &*ptr; // grab a reference to the Rust value the pointer represents CString::new(theme.root_path.clone()).expect("Failed to create CString").into_raw() // return a char* from the field being accessed }

this is very similar to how calling methods on structs is bridged to C in Ikona.

#[no_mangle] pub unsafe extern "C" fn ikona_icon_extract_subicon_by_id( ptr: *mut Icon, id: *mut c_char, target_size: i32, ) -> *mut Icon { assert!(!ptr.is_null()); // gotta make sure our Icon isn't null assert!(!id.is_null()); // making sure our string isn't null let id_string = CStr::from_ptr(id).to_str().unwrap(); // convert the C string into a Rust string, and explicitly crash instead of having undefined behaviour if something goes wrong let icon = &*ptr; // grab a reference to the Rust object from the pointer // now let's call the method C wanted to call let proc = match icon.extract_subicon_by_id(id_string, target_size) { Ok(icon) => icon, Err(_) => return ptr::null_mut::<Icon>(), }; // make a new Box for the icon let boxed: Box<Icon> = Box::new(proc); // let C have fun with the pointer Box::into_raw(boxed) } enums

enums are very simple to bridge, given they aren't the fat enums Rust has. just declare them like this:

#[repr(C)] pub enum IkonaDirectoryType { Scalable, Threshold, Fixed, None }

and treat them as normal. no memory management shenanigans to be had here.

ABI? what about API?

C has header files, and we need to describe the C API for human usage.


since Ikona operates on opaque pointers, C just needs to be told that the type for a struct is a pointer.

typedef void* IkonaIcon; enums

enums are ridiculously easy.

#[repr(C)] pub enum IkonaDirectoryType { Scalable, Threshold, Fixed, None }


typedef enum { ScalableType, ThresholdType, FixedType, NoType, } IkonaDirectoryType;

not much to it, eh?


methods are the most boilerplate-y part of writing the header, but they're fairly easy. it's just keeping track of which rust thing corresponds to which C thing.

this declaration

pub unsafe extern "C" fn ikona_icon_new_from_path(in_path: *mut c_char) -> *mut Icon {


IkonaIcon ikona_icon_new_from_path(const char* in_path); C to C++

once a C API is done being written, you can consume it from C++. you can either write a wrapper class to hide the ugly C or consume it directly. here in the KDE world where the wild Qt run free, you can use smart pointers and simple conversion methods to wrangle with the C types.


the big advantage for Ikona here is the library ecosystem for Rust. librsvg and resvg are both Rust SVG projects that Ikona can utilise, and both are better in many ways compared to the simplistic SVG machinery available from Qt. heck, resvg starts to near browser-grade SVG handling with a huge array of things to do to SVGs as well as general compatibility. Ikona barely taps into the potential of the Rust world currently, but future updates will leverage the boilerplate laid in 1.0 in order to implement new features that take advantage of the vibrant array, high performance, and fast speed of available Rust libraries.

what I would have done differently

writing a bunch of rust to C boilerplate isn't fun, especially with arrays. since glib-rs is already in the dependency chain of Ikona, I should have utilized the GList instead of writing my own list implementation.

tags: #libre

Season of KDE, 2020

Wednesday 25th of March 2020 12:00:00 AM

Finally, I am going to write about my experience as a student of Season of KDE 2020. A winter learning new things, learning what matters is not just writing code but writing good code. I would like to thank GCompris and KDE for giving me such an opportunity to be a part of the community and to try to bring happiness to people and kids using it around the world.

I had to complete the following tasks during this period:

  1. Improve multiple datasets of clock game activity.
  2. Add multiple datasets to balance scales.
  3. Add multiple datasets to balance scale with kgs.
  4. Add multiple datasets to balance scales with ounce.

Since few weeks are still left for SoK to come to an end. Till now, I have completed the following tasks:

  1. Implemented new multiple datasets to clock game activity which got merged to the multiple_dataset branch.
  2. Added multiple datasets to balance scales activity which is under review by the mentors.
  3. Added multiple datasets to balance scales with kgs activity which is under review by the mentors.
Clockgame Activity:

I started my work on this activity. The goal of this activity is to teach a child how to see the clock. Initially, this activity contains dataset only with two different level selections. I have added the multiple dataset to this activity with 5 different level selections to better fit to the french school learning programs.

I have also added a OK button to check the answer. Finally, the datasets has been merged to multiple_dataset branch.

Balance scales activity:

This activity goal is to teach the child about the arithemetic calculation by balancing the scales of different weights. The balance scales activity has 3 sub activities as mentioned above:

  1. Adding multiple datasets to balance scales.
  2. Adding multiple datasets to balance scales with kgs.
  3. Adding multiple datasets to balance scales with ounce.

I have added multiple datasets to balance scales and balance scales with kgs which is under review by the mentors.

I am left with the following work which I would complete in the coming weeks.

  1. To add multiple datasets to balance scale with ounce.
  2. Test the activities on a different platforms.

I am thankful to my mentor Johnny Jazeix and Emmanuel Charruau for giving me this opportunity and helping me always during the SoK period. I have learned a lot of things during this period and have a great learning experience as of development coding. I am looking forward to add multiple datasets to other activities after the end of the SoK period.

Deepak Kumar !!!

Season of KDE Final Report, 2020

Wednesday 25th of March 2020 12:00:00 AM

SoK ended finally on 17th February 2020. I am happy to share that I have completed the project “Add multiple datasets to several activities” and passed the final evaluation!!!

I was left with some work to complete as:

  1. To implement multiple datasets to balance scale with ounce.
  2. Test the activities on a different platform.

As now I have implemented datasets to all of the activities as mentioned in my proposal.

As these activities teach the child arthmetic operations by balancing the scales using pounds or ounce. So, I have added the datasets with five different configurations.

What after SoK ???

The day I started contributing to this project I have faced a lot of difficulty in the beginning as this was one of my first open source to which I have contributed. But now I am familiar with all of the concepts, principles, and codebase of GCompris. I am looking forward to adding multiple datasets to other activities and add a new activity “Garbage Recycle” to GCompris.

Once again a big thanks to all of my mentors Johnny, Emmanuel, Timothee for all of their help and support. I would also like to thanks the KDE community for conducting such a great program every year.

Deepak Kumar !!!

More in Tux Machines

SolydXK 10.4 Distro Released, Based on Debian GNU/Linux 10.4 “Buster”

As its version number suggests, SolydXK 10.4 is based on Debian GNU/Linux 10.4, which was released in early May 2020 with more than 50 security updates and over 100 bug fixes. The SolydXK team has worked hard over the past several months to bring you SolydXK 10.4, which includes the latest Linux 4.19 kernel and up-to-date packages from the Debian Buster repositories. On top of that, the new release comes with some important under-the-hood changes. For example, the /usr directories have been merged and the /bin, /sbin and /lib directories have now become symbolic links to /usr/bin, /usr/sbin and /usr/lib. Read more

Android Leftovers

today's leftovers

  • Upcoming SAVVY-V Open Source RISC-V Cluster Board Supports 10GbE via Microsemi PolarFire 64-bit RISC-V SoC

    RISC-V based PolarFire SoC FPGA by Microsemi may be coming up in the third quarter of this year, but Ali Uzel has been sharing a few details about SAVVY-V advanced open-source RISC-V cluster board made by FOSOH-V (Flexible Open SOurce Hardware for RISC-V) community of developers. It’s powered by Microsemi Polarfire RISC-V SoC MPFS250T with four 64-bit RISC-V cores, a smaller RV64IMAC monitor core, and FPGA fabric that allows 10GbE via SFP+ cages, and exposes six USB Type-C ports. The solution is called a cluster board since up to six SAVVY-V boards can be stacked via a PC/104+ connector and interfaced via the USB-C ports.

  • Some PSAs for NUC owners

    I’ve written before, in Contemplating the Cute Brick, that I’m a big fan of Intel’s NUC line of small-form-factor computers. Over the last week I’ve been having some unpleasant learning experiences around them. I’m still a fan, but I’m shipping this post where the search engines can see it in support of future NUC owners in trouble. Two years ago I bought an NUC for my wife Cathy to replace her last tower-case PC – the NUC8i3BEH1. This model was semi-obsolete even then, but I didn’t want one of the newer i5 or i7 NUCs because I didn’t think it would fit my wife’s needs as well. What my wife does with her computer doesn’t tax it much. Web browsing, office work, a bit of gaming that does not extend to recent AAA titles demanding the latest whizzy graphics card. I thought her needs would be best served by a small, quiet, low-power-consumption machine that was cheap enough to be considered readily disposable at the end of its service life. The exact opposite of my Great Beast… The NUC was an experiment that made Cathy and me happy. She especially likes the fact that it’s small and light enough to be mounted on the back of her monitor, so it effectively takes up no desk space or floor area in her rather crowded office. I like the NUC’s industrial design and engineering – lots of nice little details like the four case screws being captive to the baseplate so you cannot lose them during disassembly. Also. Dammit, NUCs are pretty. I say dammit because I feel like this shouldn’t matter to me and am a bit embarrassed to discover that it does. I like the color and shape and feel of these devices. Someone did an amazing job of making them unobtrusively attractive. [...] When I asked if Simply NUC knew of a source for a fan that would fit my 8i3BEH1 – a reasonable question, I think, to ask a company that loudly claims to be a one-stop shop for all NUC needs – the reply email told me I’d have to do “personal research” on that. It turns out that if the useless drone who was Simply NUC “service” had cared about doing his actual job, he could have the read the fan’s model number off the image I had sent him into a search box and found multiple sources within seconds, because that’s what I then did. Of course this would have required caring that a customer was unhappy, which apparently they don’t do at Simply NUC. Third reason I know this: My request for a refund didn’t even get refused; it wasn’t even answered.

  • GNU Binutils 2.35 Preparing For Release

    Binutils 2.35 was branched this weekend as this important component to the open-source Linux ecosystem. Binutils 2.35 has been branched meaning feature development is over for this next version of this collection of GNU tools. GNU Binutils 2.356 drops x86 Native Client (NaCl) support with Google having deprecated it in favor of WebAssembly, new options added for the readelf tool, many bug fixes, and an assortment of other changes albeit mostly on the minor side.

  • Using CPU Subsets for Building Software

    NetBSD has a somewhat obscure tool named psrset that allows creating “sets” of cores and running tasks on one of those sets. Let’s try it: [...]

  • What a TLS self signed certificate is at a mechanical level

    To simplify a lot, a TLS certificate is a bundle of attributes wrapped around a public key. All TLS certificates are signed by someone; we call this the issuer. The issuer for a certificate is identified by their X.509 Subject Name, and also at least implicitly by the keypair used to sign the certificate (since only an issuer TLS certificate with the right public key can validate the signature).

  • Security Researchers Attacked Google’s Mysterious Fuchsia OS: Here’s What They Found

    A couple of things that Computer Business Review has widely covered are important context for the security probe. (These won’t be much surprise to Fuchsia’s followers of the past two years.)

    i.e. Fuschsia OS is based on a tiny custom kernel from Google called Zircon which has some elements written in C++, some in Rust. Device drivers run in what’s called “user mode” or “user land”, meaning they’re not given fully elevated privileges. This means they can be isolated better.

    In user land, everything that a driver does has to go via the kernel first before hitting the actually computer’s resources. As Quark Labs found, this is a tidy way of reducing attack surface. But with some sustained attention, its researchers managed to get what they wanted: “We are able to gain kernel code execution from a regular userland process.”

  • What have you been playing on Linux? Come and have a chat

    Ah Sunday, that special day that's a calm before the storm of another week and a time for a community chat here on GOL. Today, it's our birthday! If you didn't see the post earlier this week, GamingOnLinux as of today has hit the big 11 years old! Oh how time sure flies by. Onto the subject of gaming on Linux: honestly, the majority of my personal game time has been taken up by Into the Breach. It's so gorgeously streamlined, accessible, fun and it's also ridiculously complex at the same time. Tiny maps that require a huge amount of forward thinking, as you weigh up each movement decision against any possible downsides. It's like playing chess, only with big mecha fighting off aliens trying to take down buildings. [...] I've also been quite disappointed in Crayta on Stadia, as it so far hasn't lived up to even my smallest expectations for the game maker. It just seems so half-baked, with poor/stiff animations and a lack of any meaningful content to start with. I'll be checking back on it in a few months but for now it's just not fun.

Programming Leftovers (LLVM Clang, R, Perl and Python)

  • Arm Cortex-A77 Support Upstreamed Finally To LLVM Clang 11

    While the Arm Cortex-A77 was announced last year and already has been succeeded by the Cortex-A78 announcement, support for the A77 has finally been upstreamed to the LLVM Clang compiler. The Cortex-A77 support was added to the GCC compiler last year while seemingly as an oversight the A77 support wasn't added to LLVM/Clang until this week.

  • Dirk Eddelbuettel: Rcpp now used by 2000 CRAN packages–and one in eight!

    As of yesterday, Rcpp stands at exactly 2000 reverse-dependencies on CRAN. The graph on the left depicts the growth of Rcpp usage (as measured by Depends, Imports and LinkingTo, but excluding Suggests) over time. Rcpp was first released in November 2008. It probably cleared 50 packages around three years later in December 2011, 100 packages in January 2013, 200 packages in April 2014, and 300 packages in November 2014. It passed 400 packages in June 2015 (when I tweeted about it), 500 packages in late October 2015, 600 packages in March 2016, 700 packages last July 2016, 800 packages last October 2016, 900 packages early January 2017, 1000 packages in April 2017, 1250 packages in November 2017, 1500 packages in November 2018 and then 1750 packages last August. The chart extends to the very beginning via manually compiled data from CRANberries and checked with crandb. The next part uses manually saved entries. The core (and by far largest) part of the data set was generated semi-automatically via a short script appending updates to a small file-based backend. A list of packages using Rcpp is available too.

  • YouTube: The [Perl] Weekly Challenge - 067
  • The [Perl] Weekly Challenge #067

    This week both tasks had one thing in common i.e. pairing two or more list. In the past, I have taken the help from CPAN module Algorithm::Combinatorics for such tasks.

  • Weekly Python StackOverflow Report: (ccxxxiv) stackoverflow python report
  • Flask project setup: TDD, Docker, Postgres and more - Part 1

    There are tons of tutorials on Internet that tech you how to use a web framework and how to create Web applications, and many of these cover Flask, first of all the impressive Flask Mega-Tutorial by Miguel Grinberg (thanks Miguel!). Why another tutorial, then? Recently I started working on a small personal project and decided that it was a good chance to refresh my knowledge of the framework. For this reason I temporarily dropped the clean architecture I often recommend, and started from scratch following some tutorials. My development environment quickly became very messy, and after a while I realised I was very unsatisfied by the global setup. So, I decided to start from scratch again, this time writing down some requirements I want from my development setup. I also know very well how complicated the deploy of an application in production can be, so I want my setup to be "deploy-friendly" as much as possible. Having seen too many project suffer from legacy setups, and knowing that many times such issues can be avoided with a minimum amount of planning, I thought this might be interesting for other developers as well. I consider this setup by no means better than others, it simply addresses different concerns.