December 08, 2019

Si en el episodio anterior del podcast de Juan Febles nos hablaba de Arduino, en el programa #91 se congratula con contar con la presencia de Luis del Valle la persona responsable de que tanto está haciendo por difundir las bondades cognitivas y prácticas de aprender programación.

Luis del Valle en el capítulo 91 de Podcast Linux

Una de mis asignaturas eternamente pendientes en este mundo es la de aprender a programar. He hecho mis pinitos con lenguaje marcado (HTML y CSS) y con Python, y evidentemente he tenido que aprender sobre la marcha el lenguaje C de Arduino, pero nunca he realizado un curso formal sobre ningún lenguaje de programación de forma oficial.

Luis del Valle en el capítulo 91 de Podcast LinuxEs por ello que siempre viene bien tener páginas de referencia como la de Luis del Valle, profesor de programación de electrónica, podcaster y el responsable del blog, que nos proporcionan un curso gratuito durante el primer mes para aprender el funcionamiento básico de Arduino… si te convence y adquieres el curso completo tiene un precio de 167€, lo cual tampoco es demasiado dado todo lo que ofrece: Arduino desde cero + Soporte + Actualizaciones + curso ESP8266. Recordemos que Software Libre no significa gratis… se puede pagar de muchas maneras y una es de forma económica.

No, no me llevo comisión por patrocinarlo, pero es que Luis del Valle fue el protagonista de episodio 91 de Podcast Linux que me pareció superinteresante y que fue presentado así:

«Bienvenido a otra entrega, la número 91, de Podcast Linux. Un saludo muy fuerte de quien te habla, Juan Febles. Hoy está con nosotros Luis del Valle, apasionado del mundo de Arduino y del Movimiento Maker, está detrás del blog, del podcast La tecnología para Todos y del Campus de Programarfacil.»

Como siempre os dejo el audio aquí abajo para que lo podás disfrutar

Aprovecho para animaros a seguir Podcast Linux en algunos de los canales de comunicación que tiene:

Podcast Linnux forma parte de la red  de podcasting Avpodcast y esta alojado en, su  proveedor de confianza con instalaciones en España.

My work does not involve that much coding any more. I probably spend more time doing email, attending meetings, and preparing presentations than anything else these days. Still, my fingers itch if I don’t get to write some code now and then.

This has resulted in small apps such as Mattemonster, where I pushed myself to get it into a presentable state so that I could publish it to Google Play. Any one with kids starting with maths should try the app – my son loves it!

It also results in me doing the Advent of Code for a third time in a row. It is a nice exercise in problem solving, basic data structures, and algorithms – something that I have way too few excuses to exercise with. I’m still frustrated with day 15 from last year. I also remember day 16 fondly.

This year I considered doing the AoC in Rust, to learn. But I ended up with Python to save time instead.

Something cool this way comes… easy Emoji input! Speaking personally, lack of easy Emoji input on Plasma has been irritation for years. But no longer! Plasma now has a built-in Emoji chooser similar to the ones on other competing operating systems. Ours is invoked with the Meta+period keyboard shortcut.

Here it is:

Let’s give a big hand to to Aleix Pol Gonzalez for implementing this! It’ll be available in Plasma 5.18, and in the meantime we’re going to continue to improve its polish, integration, and discoverability.

More New Features

Bugfixes & Performance Improvements

User Interface Improvements

How You Can Help

Ar you good at web design? KDE has approximately five hundred million (okay, slight exaggeration) websites in need of visual refreshing and technical improvement! Our web team is desperately overworked and in need of help–yours, perhaps. 🙂 Each individual person who joins in will be making a humongous difference! If this sounds like your cup of tea, check out

More generally, have a look at and find out more ways to help be part of a project that really matters. Each contributor makes a huge difference in KDE; you are not a number or a cog in a machine! You don’t have to already be a programmer, either. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

Finally, consider making a tax-deductible donation to the KDE e.V. foundation.

December 07, 2019

In the previous post, I mentioned the KF6 Workboard. I also promised that I would make a specific post once the workboard would be properly organized. I didn’t write it right away, so this post is now long overdue. :-)

If you clicked on the link above, you might be a bit scared by the massive board you’re seeing. Yes, this is a massive endeavor even if a bit less overwhelming than the kdelibs to KDE Frameworks transition (but just a bit really). Anyway, if you’re scared: I’m here to help.

Let’s break down the different columns available on the board. I will go left to right and explain their use. This should give a good idea of how it’s all supposed to work.

  • The Metatasks column is a way to give a different view on the work to be done. Its content is a bit special. Indeed, the other columns contain what we could call “regular tasks”, they are not all of the same size but they are mostly actionable on their own. In the Metatasks column we collect what are more like full fledged longer term projects which need to be broken down. Their children are tasks which sit in the other columns. See it kind of as an index to get to tasks grouped by topics, most people will read the content of items in this column but it’s less likely they’ll have a strong urge to fiddle with it.

  • The Needs Input column contains items which still need further discussion in order to proceed. Once the discussion phase is over, those items will either spawn further child tasks and end up in Metatasks or move in one of the other columns.

  • The Waiting on Qt Changes column contains tasks which are waiting for something to happen upstream in Qt in order to proceed. They can also be seen as a token for something to monitor in Qt or a reminder for us to be more involved in a particular Qt task.

  • The Waiting on KF6 Branching column contains all the tasks which need to be postponed until we actually branch KF6. This also means that a lot of work is happening right now (or is up for grabs) which will benefit directly KDE Frameworks 5!

  • The Waiting on Other Tasks column contains all the tasks which are blocked by another task somewhere on the board (the information of which task is then available in a comment or using the depend on relationship). It’s a good way to track those to verify things aren’t getting out of hand being blocked, it’s also a cheap way to do dependency management sort of.

  • The Backlog column is where you can find a way to directly impact the project. This contains all the tasks which are up for grabs. We also try to keep is somewhat sorted so that easier and smaller tasks are at the top while harder and bigger tasks are at the bottom. So if you’re a seasoned KDE contributor, please look at the bottom of the pile in priority! If you’re new or trying to get in KDE Frameworks to do your bit: feel free to pick tasks at the top of the pile.

  • The In Progress column is self explanatory… it contains all the tasks currently worked on by someone.

  • The Done column is again self explanatory. Anything completed should be moved there, but there’s a caveat! When done with a task, please move it to the Done column but don’t close it! This will be helpful because of the next (and last) column.

  • The Announced column contains all the tasks which have been done and announced in one of our report blog posts. This way it should make producing those blogs easier. Indeed when the time of writing such a blog post comes, we use the content of the Done column as input and then move the tasks on the Announced column. This will likely be done by yours truly.

So now, you know how we organize our tasks. You even know where to look in the backlog column depending on your profile. Time to let you all explore the pile of work ahead of us. Don’t hesitate to get in touch if you got questions.

In conclusion, let me say there is work for everyone. Tasks range from little easy tasks to full fledged projects. I will regularly post progress announcements, if you want fame and glory: just pick a task from the backlog column of the KF6 Workboard and complete it!

Parece que se ha abierto al veda a los iconos estilo Neon para Plasma. Hace un tiempo comenté el tema Oie Icons, el Epsilon IconsPunk Theme los cuales destacaban por su simpleza y  su semejanza al típico cartel luminoso de neon, hoy toca hablar de Abyss Icon Superpack, un tema  de coloros monocromáticos pero de estilo luminoso, al estilo de las luces de neon.

Abyss Icon Superpack, otro tema de iconos Neon

Cambiar el tema de iconos de un escritorio es una de las formas de personalización casi más completa que puedes realizar sobre tu PC,ya que cambia totalmente el aspecto del mismo a la hora de interaccionar con tus aplicaciones, documentos y servicios.

Para el escritorio Plasma de la Comunidad KDE hay cientos de temas disponibles, y en el blog le hemos dedicado muchos artículos a ir presentando algunos de ellos, pero siempre aparece alguno nuevo o remozado que hace que siempre le volvamos a dedicar una nueva entrada.

De esta forma me complace presentar el tema de iconos  Abyss Icon Superpack otro trabajo de rtl88 nos ofrece un pack de iconos estilo luces de neon, con colores planos pero luminosos, simples y divertidos, que hará las delicias de los usuarios minimalistas y que combina a la perfección con temas oscuros.

 Abyss Icon Superpack, otro tema de iconos Neon

Y como siempre digo, si os gusta el pack de iconos Abyss Icon Superpack podéis “pagarlo” de muchas formas en la nueva página de KDE Store, que estoy seguro que el desarrollador lo agradecerá: puntúale positivamente, hazle un comentario en la página o realiza una donación. Ayudar al desarrollo del Software Libre también se hace simplemente dando las gracias, ayuda mucho más de lo que os podéis imaginar, recordad la campaña I love Free Software Day 2017 de la Free Software Foundation donde se nos recordaba esta forma tan sencilla de colaborar con el gran proyecto del Software Libre y que en el blog dedicamos un artículo.

Más información: KDE Store

December 06, 2019

Seguimos presentando algunos juegos de la división más lúdica de KDE (KDEGames). Ya han pasado por este humilde blog un buen número de juegos de la división KDEGames como KbounceKMahjonggKmines,  KBreakoutKTuberling , Granatier, KSudoku, KGoldrunner, Kolor Lines (o Klines), KBlocks, Bovo, Kapman o Kubrick. Hoy ha llegado el turno a Knights, el juego de ajerdrez de la Comunidad KDE y uno de los pasatiempos más antigüos y famosos del mundo, que incluso es considerado un deportes en según que ámbitos.

KNights, el juego de ajedrez de la Comunidad KDE

Parece que la lista de juegos soportados por la Comunidad KDE es bastante amplia. Esta semana os presento otro juego, ya que pronto empezarán las vacaciones de Navidad y se suele tener algo más de tiempo de libre.

En esta ocasión se trata de KNights, una versión del clásico entre clásicos Ajedrez, un juego de mesa cuyos orígenes se remontan al siglo VI, aunque hay historiadores apuntan a que deberíamos irnos tres siglos atrás para ver su nacimiento.

KNights, el juego de ajedrez de la Comunidad KDE

Esta versión de la Comunidad KDE nos presenta las siguientes características:

  • Juego local entre dos jugadores al mismo ordenador.
  • Juego contra cualquier programa de ordenador que acepte el protocolo XBoard.
  • Jugar al Free Internet Chess Server (FICS).
  • Mirar dos ordenadores jugar entre ellos.
  • Permite la comprobación de movimientos legales.
  • Marcadores para posibles movimientos, último movimiento del adversario y jugadas de jaque.
  • Bordes del tablero y notaciones de lugar
  • Control completo del tiempo, con relojes al estilo del Plasma.
  • Varios temas, con la posibilidad de bajar de nuevos desde el propio programa.
  • Animación de los movimientos (configurable).
  • Opciones para hacer y deshacer movimientos.
  • Interfaz gráfica para hacer y recibir ofrecimientos de jugadores remotos.
  • Admite el protocolo UCI (usado por lo Stockfish, lo Chessbase, y otros)
  • Admite los ficheros «Portable game notation» (PGN) para guardar y cargar.
  • Uso del Jovie, el programa de texto a voz del KDE, para pronunciar los movimientos del adversario.
  • Permite controlar lo programa vía una interfaz del D-Buzo.

Como vemos, nos encontramos con un buen programa de Ajedrez electrónico que creo que puede kn


Más información: KDE Games

Cómo instalar KNights

Al ser un juego de la rama de KDE la  instalación de KNights es sumamente sencilla. Básicamente debemos abrir una sesión de la consola y escribir:

En KDE Neon, Kubuntu y Linux Mint: $sudo apt install knights

En openSUSE: $sudo zypper install knights

En Mageia (gracias a Hurr) tenéis 3 opciones:

$ dnf in knights

$ dnf install knights

$ urpmi knights

[… comenta y añadimos cómo se instala en tu distribución favorita]

Plasma Pass, a Plasma applet for the Pass password manager version 1.1.0 is out.

There’s only one bugfix, but an important one - the applet now no longer freezes during filtering, so searching for your passwords is faster and more comfortable. The new release also contains new and updated translations.



SHA-256: a9789142c1b487f41e245bde9179d7857972c521df906e58176e0b0c0c3cdc39
SHA-1:   427e6bae205c29bd26db6e3590c3e9d75accc537


0ABDFA55A4E6BEA99A83EA974D69557AECB13683 Daniel Vrátil <>

Feel free to report any issues or feature requests to KDE Bugzilla.

The Plasma Mobile team is happy to present the blogpost with updates from week 9 and 10.



Calindori, the calendar application, now offers a flat event view which allows to show all events in single card list view. The events are sorted by start date.

Calindori showing flat event view


Kaidan, the Jabber/XMPP client, has had multiple changes merged, including a branch from pasnox to overhaul multimedia messages. This new change allows to:

  • Send voice and video messages from within the application.
  • Take photos from within the application.
  • Share your location in chat messages.
  • Play videos and sounds directly in the chats.

Kaidan also gained the capability to search through messages.


Jonah Brüchert merged several improvements in Spacebar, the application used to send SMS messages.

Spacebar was updated in postmarketOS by Bhushan Shah so that SMS now works correctly on supported devices.

Plasma Phonebook

Nicolas Fella committed a change to sort the contacts list and add section delegates. It now also shows the fallback avatar if a contact doesn’t have a picture.

Plasma Phonebook section delegates

Plasma Settings

Aleix Pol committed a change to save settings before closing a page as well as a change to call ::load on the configuration module. These two changes fix the translations KCM on mobile.

Translated discover application on PlaMo

Want to be part of it?

Next time your name could be here! To find out the right task for you, from promotion to core system development, check out Find your way in Plasma Mobile. We are also always happy to welcome new contributors on our public channels. See you there!

December 05, 2019

We had a release last week and boy, I would just skip talking about bugs for this one. But we currently have 429 open bugs, 14 more from what I reported last week.

December 04, 2019

At the Linux App Summit I gave an unconference talk titles Hey guys, this conference is for everyone. The “hey guys” part refers to excluding people from a talk or making them feel uncomfortable – you can do this unintentionally, and the take-away of the talk was that you, (yes, you) can be better.

I illustrated this mostly with conversational distance, a favorite topic of mine that I can demonstrate easily on stage. There’s a lot of diversity in how far people stand away from strangers, while explaining something they care about.

The talk wasn’t recorded, but I’ve put the slides up.

Another side of diversity can be dealt with by statistics. Since I’m a mathematician, I have a big jar of peanuts and raisins in the kitchen. Late at night I head down to the kitchen and grab ten items from the jar. Darn, all of them are raisins. What are the odds!?

Well, a lot depends on whether there are any peanuts in the jar at all; what percentage is peanuts; whether I’m actually picking things randomly or not.

There’s a convenient tool that Katarina Behrens pointed me to, which can help figure this out. Even if there’s only a tiny fraction of peanuts in the jar, there’s an appreciable chance of getting one (e.g. change the percentage on that page to 5% and you’ll see).

While that site can be used to illustrate topics around small percentages of peanuts, if you look at the text it has more application to conference speakers. Hold up almost any conference speaker list against a reasonable estimate of a quality that speaker list might have, and you can sort-of-tell if the pipeline leading to that speaker list is selecting fairly.

Check out the speakers at QtWS 2019, where 22 of the 72 speakers are shown wearing glasses. Igor is wearing sunglasses. About half of all people wear glasses (er .. the statistics I can easily find are for the United States of America, other sources suggest around 40%), so plug that in to the diversity calculator and see what you get.

.. very unlikely that the speaker selection pipeline is unbiased about glasses.

I urge you to read the accompanying text on the conference diversity page; I have intentionally picked “innocuous” characteristics here, but that’s not what it’s really about.

We can be better.

I’m voting for Owen Thompson and the SNP at the UK election on December 12th.  Normally for an election I would look through the manifestos and compare them along with consideration of the candidates and the party leaders to decide.  But this election is a single issue election.  It was called because the flawed 2016 referendum on EU membership did not ask what people wanted, it asked what they didn’t want (EU citizenship) but because there was no question asking what people did want instead it led to three years of parliament being stuck.  The SNP policy is for a double proposal to have a referendum on the UK’s EU membership against the Withdrawal Deal as currently negotiated, and then to have a referendum on Scottish independence.  This offers me the best chance to keep my EU citizenship and the freedoms it brings, while offering a good chance to get rid of a corrupt and pointless layer of government.

As I’ve said before all the political parties let us down in 2016 by not effectively campaigning for EU membership and letting the racists and populists win over. They continue to let us down here on those measures.  Not one party proposes to ban political advertising online as done with TV despite the well documented populism that gives.  Not one seems to have a commitment to reform the rules of election and referendum campaigns to stop the illegal behaviour that Johnson’s Vote Leave campaign used in 2016.  And I’ve never heard anyone point out that asking a referendum question which only says what you don’t want and not what you do want instead is a pointless question.

But here’s a quick look at the manifestos anyway.

SNP Good stuff about refendums, no nuclear bombs and critique of why Westminster if broken.   The usual  vague stuff about ending austerity without defining it and promises for the NHS with no explanation of why that public service deserves them more than every other public service.  Various good ideas for things to be devolved like broadcasting or employment law.  They do want to fix the voting franchise for UK elections to include non-UK EU citizens and people from age 16.  They seem to think the UK government will allow an independence referendum while also de-legitimising the idea that there is no need for anyone to allow Scotland to have a referendum, this is a dangerous stance to take as well as incorrect, no other country considers that it has to ask its neighbour for permission for independence. Climate emergency comes in a bit later in the manifesto than I’d like to see but I suppose there’s not much the SNP can do at the UK level since the right layer of government for this is the EU and Scottish layers.  Complying with international law to allow the return of residents of Diego Garcia is pleasingly in there but not on Catalonia.  I’ve done door knocking with their candidate Owen Thompson this election who is an experienced politican from local and UK layers and I’m happy to support him.

Labour doesn’t get round to the Brexit question until page 80.  The central issue of the election which defines if I will have freedoms and a functional economy in a year’s time and they can’t be arsed to highlight their policy on it.  When they do they say they’ll negotiate a hard Brexit (outside the customs union; outside the single market) and then have a referendum on it.  This sounds faffy and dislikeable.  The leaflet from their candidate said she would campaign to remain and reform but with no suggestion of what they reform would be and there’s nothing about it in this manifesto so I think she’s lying on that point.  They support weapons of mass destruction despite the party membership in Scotland voting against them and UK and Scottish leaders campaigning against them, which shows what a mess this organisation is.  Lots of interesting stuff about renationalising public services which I think is a strong part of the cause for the party leadership wanting to leave the EU, EU law will mean having to pay full rate for renationalising these industries while outwith the EU they can pay below market rate, but on the whole I’m against cheating the rules of a functional economy, after all this is my pension scheme they’d be cheating.  No mention of complying with international law about Diego Garcia or Catalonia.  Fixing the voting franchise is in there.  Climate emergency is pleasingly put as a headline item.

The Lib Dems have clear constitutional positions which is fine but being against referendum on them is hypocritical.  They compare Scottish independence to Brexit, which is nonsense. Climate emergency doesn’t come until half way through.  No mention of Diego Garcia or Catalonia.   No mention of nuclear bombs.  Nothing devolved to Scotland.  Pleasingly they do want to fix the undemocratic where we get a prime minister without a vote of parliament or people and they do want to fix the shutting down of parliament.  Otherwise largely underwhelming.

The Conservative party is now a radicalised dangerous nationalistic vehicle which support shutting down parliament, corruption of referendums, limiting the voting franchise, blocking the release of reports on foreign interference in voting and ignoring international law.  Everyone should vote to stop them from getting power.  They will start the Brexit process with the Withdrawal Agreement but still with only a minimal plan for how to implement Brexit, but their lie that this will “get Brexit done” rather than the truth that it is only the start of the process seems to be ignored by the media.  Their hard Brexit will put up new borders, shut off supply chains, limit the economy and take away my freedoms.    The headline item of course is to stop a referendum on independence which is as hypocritical as it comes.      Climate emergency doesn’t seem to feature.  There is scary protectionist British nationalism like “When we leave the EU, we will be able to encourage the public sector to ‘Buy British’” which goes against basic economics and shows how far they have fallen from their Margaret Thatcher free-market politices, which as simplitic and damaging as they were, at least were consistent.  This party is run by people who ran illegal campaigns in 2016, take power without a vote, ignore international and national law and shut down parliament, they are not democratically accountable, they need to be stopped.

The Greens aren’t standing in my constituency and don’t have a manifesto and because of the voting system won’t get any result except maybe help the SNP lose where they should win so despite being a party member I can’t advocate voting for them.  They make the point that the climate emergency is more important than Brexit, but alas the EU is the right layer of government to take the lead on it so EU membership is vital to helping prevent or limit it and the votes this election need to be directed towards that.

So hopefully an SNP win in Scotland (like they have in every election for the last decade) will help them support a Labour government in England to have a referendum (with rules fixed to make it a valid and fair one) on EU membership vs Johnson’s hard brexit proposal and then a referendum on Scottish independence.  But it probably won’t be that simple.

December 02, 2019

From the 21st to 24st of Novemember, a bunch of KDE people gathered in Berlin graciously hosted by the MBition offices to discuss about the next big iteration of the KDE frameworks.

Work on Qt6 started, and it will be a big refactor that makes the api quite better, solve some architectural problems in some Qt5 areas (one of my personal favorites is the new QGuiAction class coming out of the split of QAction in a QWidget-less implementation). In order to have that, it needs to be binary incompatible with Qt5 tough.

As it will be incompatible, we need to adapt our software and our frameworks.. a lot of work ahead, but big opportunities as well, so… It’s time for KF6, where we can do the same thing: polish our API and solve some problems we couldn’t do in KF5 in a binary compatible way.

We worked in groups, assisted remotely by David Faure and looked at the frameworks we were less happy and need more a refactor.. The first obvious candidate are those tier 3.

Our fancy Kanban board

The Tier system in frameworks means that frameworks of tier 1 don’t depend from other things than Qt modules and base system libraries. Tier 2 frameworks can also depend from tier 1 frameworks, and tier 3 from tier 2.

In reality there are some tier 3 frameworks which “real” tier would be 5 or 6 as may depend from multiple other tier 3 frameworks. Those of course are the first that need to be looked at. Ideally we should manage to lower the tier of frameworks as much as possible and at least having tier 3 ones that are actually tier 3, and not 4 or 5.

Some typical examples are KIO, KDeclarative, KXmlGui, and Plasma-framework.

For the KDeclarative case, the reason is that its genesis was quite peculiar. When in late KDE4 – early KF5 was starting to be apparent that the focus of the future in GUI programming in Qt was probably going to shift towards QML, we chosen at first to put the bindings to QML of the frameworks we needed in a single umbrella repository, ending up with a git repo full of many tiny QML plugins that depended from one framework or another… ending up with a framework that depended from just about all the others. It will be split out and every useful QML binding will go into the proper framework: as QML is now a super central part of Qt, frameworks need to play well with it to be an important citizen of the Qt ecosystem.

Plasma framework

Now talking about a part that is really near to my hearth: Plasma-framework. It’s a pretty high tier because it depends from KXmlGui and KDeclarative. As we seen, both of those dependencies will be not too hard to remove (famous last words :).

My plan is to have the main plasma library splitted in 3 smaller frameworks, each one tier2 maximum:

  • libplasma: the part that manages load and save of your desktop layout, all that is related of loading a plasmoid and the api that palsmoids will use to interact with the Plasma workspace
  • theming: Plasma uses svg-based themes with significant optimizations like disk-caching of the rendered bits, which support stylesheets for dynamic colors based on your system ones: this should be a framework in itself, usable by any app: probably tier 2
  • dataengines: that’s a technology not much used anymore and is kinda being phased out. Should exist standalone as a “porting aid”

With this, hopefully Plasma will be even leaner, further improving startup time and memory usage, while on the same time applications gains a framework for doing light weight and feature rich svg based graphics theming.

KDevelop 5.4.5 released

We today provide a bugfix and localization update release with version 5.4.5. This release introduces no new features and as such is a safe and recommended update for everyone currently using a previous version of KDevelop 5.4.

You can find the updated Linux AppImage as well as the source code archives on our download page.



  • Add missing forward declaration (qt5.14). (commit)
  • Fix compilation error with gcc 7.4.1, ambiguous overload. (commit. code review D25639)
  • Remove bad assert. (commit)
  • Remove duplicate fuzzy character "/". (commit)
  • Fix reformat for selected code. (commit)
  • Qthelp: Unbreak support for zipped/tarred QCH files from KNS. (commit)
  • Qthelp: adapt KNewStuff config to move from to (commit. fixes bug #377183)


No user-relevant changes.


  • Update phpfunctions.php to phpdoc revision 348276. (commit)
kossebau Mon, 2019/12/02 - 15:56

We are pleased to announce the relase of Calligra Plan 3.2.1. Tarball can be found here: The following bugs have been fixed: * Bug 414164 - View specific dockers not shown in Settings->Dockers * Bug 414162 - Crash during … Continue reading

Last Thursday I visited Tech Day by Init and had the opportunity to talk about a topic close to my heart. I decided to do a talk about Open Source Anti-Patterns (you can find the slides over at Kuro Studio).

It is always fun visiting TDBI (it is my third year speaking). The audience is very well read up on the topics and the questions are always good. Also, I got a high five from a guy for my speech during the beer event ;-)

Hello yet again! For those who are not acquainted with this series, I am in an endeavor to analyze keyboard shortcuts in most major DEs so that we, the KDE community, can decide on the best defaults for KDE Plasma. Last time I analyzed XFCE and before that, GNOME.

This time we will also check on a non-keyboard-driven environment, MATE. I personally quite like MATE, mostly for two things: MATE Tweak’s ability to change panel layouts, and the Software Boutique, which looks as fashionable as its name.


For testing MATE, I installed full ubuntu-mate-desktop on my work machine and used virtual machines containing Debian, Ubuntu MATE and Manjaro.

This time, one of the candidates for the virtual machine was chosen based on a project currently being held at the public university I graduated in, namely the University of São Paulo, in São Paulo, Brazil. I chose Debian MATE in honor to the plans to migrate the computers at the computer section of FFLCH to Linux, the humanities school. Pragmatically speaking, Debian is also a good choice for usually keeping defaults as is for each desktop environment.

For sources, I simply used MATE’s keyboard shortcuts application and its corresponding manual.

Navigating from home and sailing till the end

One way MATE made my life easier is that no distribution seems to change the defaults significantly, similarly to GNOME. Thus, I was able to refer to MATE keyboard shortcuts instead of each distro tested.

I used Debian as the base for this analysis because, while there were no significant differences between distributions, Debian kept most keyboard shortcuts active, whereas Ubuntu MATE and Manjaro MATE chose to hide most of them.

Having been concerned with the MATE implementation of the menu keyboard shortcut considering XFCE had some issues and both are GTK-based desktop environments, this was the first thing I verified. No, the menu is not affected by Meta-related keybindings, which is nice.

However, in what concerns the Meta key, MATE barely uses it. The accessibility keyboard shortcuts use it and follow the simple rule previously seen in XFCE, namely that of first-letter, so Meta+Alt+M, S and K correspond to Magnifier, Screen reader and on-screen Keyboard, so while maybe a concern for the visually impaired, it is at least consistent.

The only other use of Meta lies within snapping keyboard shortcuts, namely Meta+Ctrl+Right/Left/Home/End/PgUp/PgDown. Right and Left naturally refer to Right and Left snapping, but the other choices are more interesting.

Given that Up and Down snapping seem to be disregarded (they do not follow the convention shown with right and left, as they use Ctrl+Alt instead of Ctrl+Meta, in addition to conflicting with other keybindings), the only remaining snapping possibilities are the corners of the screen.

Given that Home assumes the upper left position in the typical 4-key set of traditional keyboard, it snaps the selected window to the upper left corner. The same logic is applied to End, PgUp and PgDown, which are bottom left, upper right and bottom right, respectively. I will name the Home/End/PgUp/PgDown keyset as Home-End for easy reference.

Funnily enough, those were not enabled by default in any system tested. Such keyboard shortcuts come with (keypad) written immediately after the keyboard shortcut description, and this (keypad) disappears when you set the keyboard shortcuts manually.

Similar to snapping capabilities, an interesting feature is the ability to move windows to all typical snapping directions, while also not effectively snapping windows. That is, the window is not resized so as to fit a perfectly-sized chunk of the screen, but it does move to that specific corner. The correspondent keyboard shortcuts are Ctrl+Alt+arrow keys or Home-End.

Note how, as previously mentioned, snapping Up and Down use Ctrl+Alt+Up/Down, which conflicts with Ctrl+Alt+Up/Down for moving Up/Down.

Immediately afterwards in the MATE keyboard shortcuts application, 8 keybindings noticeably have no keybindings assigned: namely moving windows to top, bottom, left and right monitors, and moving windows to the first four workspaces.

This was a curious choice. The first bothers me similarly to XFCE and Plasma since no keyboard shortcut is set by default for switching between left and right monitor, an essential feature when dealing with multi-monitor setups. Moving windows in a vertical axis is something more elaborate which requires extra gear and assembly to do, so it’s rare, thus it makes sense to not have Up and Down by default.

The latter can be thought either as making sense or not. It theoretically would not make sense because the following four keyboard shortcuts move windows between workspaces in a 2D environment, that is, two axes of workspace movement, vertical and horizontal. Thus, moving windows to the first four workspaces seem, at least initially, necessary for consistency.

However, it does make sense after seeing the keys chosen for the keyboard shortcut, that is, the Ctrl+Alt+Shift+arrow keys. This is a 4-keys keycombo, although it could be argued to function as three, since a fourth finger to press Ctrl or Shift is optional. By analogy, MATE would have to use Ctrl+Alt+Shift+numbers or F# in order to be consistent with the remaining keyboard shortcuts.

I’d rather avoid three keystrokes or more for a keyboard shortcut, but my impression so far is that once keybindings are assigned to snapping, screen movement, workspace movement, and moving windows between screens, the last one in the hierarchy, moving windows between workspaces, ultimately end up using a 3- or 4-keys keycombo.

I thought I had sailed afar, but it’s the same sight

Aside from navigation and the fact Meta is barely used, there were several similarities between MATE, XFCE and GNOME.

Similarly to XFCE, MATE uses the XF86 keys extensively. However, unlike XFCE, the only keyboard shortcut it sets for actual application opening is the terminal, Ctrl+Alt+T. The lockscreen is evoked with our typical Ctrl+Alt+L, and Ctrl+Alt+Delete serves to shutdown.

Also similarly to XFCE, as well as Plasma, Alt+F1 opens the menu, Alt+F2 opens the Run Application dialog box. Alt+F3 is not set up, however.

Alt+F5 is Restore, Alt+Esc switches between windows immediately and Alt+F6 switches between windows of a same application, clearly a GNOME influence. As previously stated in my GNOME analysis, ‘ and F6 have no semantics associated with them, and so MATE inherits this specific GNOME issue here.

Alt+’ for moving between windows of a same application also seems to be a GNOME influence.

Alt+F7, F8, F9 and F10 are Move, Resize, Minimize and Maximize Toggle. All of them are neatly grouped. I really like how Minimize and Maximize have this specific order and are set immediately before F11, the traditional key for Fullscreen. Move and Resize are also actions that fill the gaps nicely. Sadly, F5 restore is too far from the other similar titlebar actions set in F8-F10, but this is compensated by F10’s maximize being a toggle. In theory, this invalidates the usefulness of F5, which could be an issue in terms of keyboard shortcut organization.

It should be noted that F12, while not having anything assigned to it, can be set to open Tilda, a drop-down terminal much similar to Yakuake.

Alt+’ for moving between windows of a same application also seems to be a GNOME influence.


That is it, essentially. MATE is not a keyboard-driven environment, but the devs clearly thought of making it consistent.

It sacrifices several things for this consistency, however: barely any use of Meta, which reduces its keyboard shortcut repertoire, leading to a 4-keys keycombo; barely any application shortcuts, with the exception of the terminal; accessibility keybindings that require reading instead of physical placement or layout of keys in the keyboard; loss in semantics for the choice of modifiers; and all defaults (since several keyboard shortcuts are unset by default).

The last point effectively proves MATE was not striving for a keyboard driven-environment, but they did include relatively sane defaults for those who wish to use it this way. MATE has been, by far, the most consistent out of the three DEs, but also rather limited due to its sacrifices.

Its defaults work well within its context and it comparatively has less issues than GNOME or XFCE, but I do not think it is a keyboard shortcut model Plasma should strive for, despite its fitting 2D environment. I do not think such sacrifices fit the vision I have for Plasma.

MATE however is a great example of minimalism applied to a 2D environment, which itself is rather complex to implement. Some things could be improved, such as reconsidering the semantics of the modifier keys, removing unset (keypad) from certain particularly sane keyboard shortcuts that the devs think are the most sensible for an out-of-the-box keyboard-driven experience, and including a more friendly multi-monitor set of keybindings by default.

December 01, 2019

We are pleased to announce the release of GCompris version 0.97.

This new version contains 2 new activities:

  • A programming maze: to learn the basics of programming with a few instructions
  • Baby tangram: to learn the basics of tangram (this activity corresponds to the lowest levels of previous tangram activity)

And a lot of new features:

  • new sub-categories to organize activities
  • new background music feature and audio tracks
  • new volume settings for audio effects
  • new speed setting in several activities (gletters, algebra, readingh, note_names)
  • new feature in chess activities to display captured pieces
  • new option to go to next level manually in drawletters and drawnumbers
  • new voices for en_US
  • new images for colors activity
  • new images for advanced_colors activity
  • new images for target activity
  • improve settings layout
  • improve share activity layout
  • improve categorisation activity layout
  • resource files are now stored in KDE server (
  • add a tutorial to even/odd numbers
  • add intro to piano_composition
  • add malayalam dataset to gletters
  • add breton dataset to wordsgame
  • fix voices not playing in geography
  • fix sounds not playing in mining
  • fix portrait mode in binary_bulb
  • fix high cpu load in menu
  • fix hint image size in photo_hunter
  • fix layout in color_mix
  • and lots of other small fixes…

You can find packages of this new version for GNU/Linux, Windows and MacOS on the download page. This update will also be available soon in the Android Play store and the Windows store. For Raspberry Pi, we’ll provide an installer soon. The updated version for iOS is still not available. Note that the MacOS package is not yet notarized, we will look at doing this during next year.

On the voices side, we added a new voice “try again” which is used in several activities instead of “check answer”. You can check on this page if this voice is available in your language: (in the “Misc” section). You can help us by providing a nice recording of your voice for all the missing entries in your native language.

On the translation side, we have 20 languages fully supported: Basque, Brazilian Portuguese, Breton, British English, Catalan, Chinese Traditional, Dutch, French, Galician, Greek, Italian, Macedonian, Malayalam, Polish, Portuguese, Romanian, Slovak, Spanish, Swedish, Ukrainian.

We also have 15 languages partially supported: Belarusian (65%), Catalan (Valencian 95%), Chinese Simplified (66%), Estonian (93%), Finnish (86%), German (96%), Hindi (73%), Hungarian (95%), Indonesian (95%), Irish Gaelic (78%), Norwegian Nynorsk (93%), Russian (76%), Scottish Gaelic (67%), Slovenian (54%), Turkish (95%).

Usually we only ship translations that are at least 80% complete. However several translations dropped way below 80% (especially Slovenian, Belarusian and Scottish Gaelic ; but also Hindi, Russian and Irish Gaelic). We decided to keep those exceptionally for this release, and hope to see former or new translators complete those translations. If we get updates or new translations, we will make a release update.

So if your language is in the partially supported list, or is not yet supported at all, and you want to help, please contact us and we will give you instructions to get started translating.

Another way to help is to write some posts in your community about GCompris, and don’t hesitate to give us feedbacks.


  • For the Malayalam language, we noticed some issues with the default font “Andika-R”. We recommend Malayalam users to select the font Noto-Sans-Malayalam or RaghuMalaylamSans from the application menu (if it is not available in the list you need to install this font on your system to be able to select it).

Thank you all,
Timothée & Johnny

The Skrooge Team announces the release 2.21.0 version of its popular Personal Finances Manager based on KDE Frameworks


  • Correction bug 411958: Import CSV fails if account is empty
  • Correction bug 409166: skrooge appdata.xml missing release 2.20.0
  • Correction bug 409703: No guide or tooltip for + icon in Categories form, and inconsistent
  • Correction bug 409165: skrooge appdata.xml gets warnings from validation-strict on flathub
  • Correction bug 412494: Skrooge flatpak silently fails to import anything from Amex QFX
  • Correction bug 412831: Filter for custom properties have to be prefixed with v_operation_display_all
  • Correction bug D22508: Get rid of obsolete methods
  • Correction bug D24327: Build flatpak with latest libofx 0.9.15
  • Correction bug: Import CSV with comma when headers are forced (no automatic detection)
  • Correction bug: blank spaces at units "Internet code" (see:
  • Correction: Import CSV file with footer line
  • Correction: Dashboard readability improvement (see:
  • Feature D22484: Support using category, account, payee  or unit properties in reports
  • Feature: New source of unite: (see:

Get it, Try it, Love it...

Grab Skrooge from your distro's packaging system. If it is not yet included in repositories, go get it from our website, and bug your favorite distro for inclusion.

Now, you can try the appimage or the flatpak too !

Get Involved

To enhance Skrooge, we need you ! There are many ways you can help us:

  • Submit bug reports
  • Discuss on the KDE forum
  • Contact us, give us your ideas, explain us where we can improve...
  • Can you design good interfaces ? Can you code ? Have webmaster skills ? Are you a billionaire looking for a worthy investment ? We will be very pleased in welcoming you in the skrooge team, contact us !

Last weekend, I had the opportunity to join the planning sprint for KDE Frameworks 6 in Berlin. KF6 will be the next major version release of the KDE Frameworks (a set of add-on libraries to make your life much easier when developing libraries on top of Qt), which will be based on Qt6. There are several blogs out in the wild about the goals for this release. Mainly, we aim for the following:

  • Getting a better separation between logic and platform UI + backend, which will help much on non-Linux systems as Android, MacOS, and Windows.
  • Cleaning up dependencies and making it easier to use the existing Tier 3 frameworks. Note that the Framework libraries are organized in Tiers, which define a layer based dependency tree. Tier 1 libraries may only depend on Qt; Tier 2 libraries may depend on Qt and Tier 1 libraries; and Tier 3 libraries may depend on Qt, Tier 1 and Tier 2 libraries — you see the problem with Tier 3 😉

For details about the framework splittings and cleanups I want to point to the excellent blog posts by David, Christoph 1 / 2 / 3, Kevin, Kai Uwe, Volker, and Nico. However, in this post I want to focus on one of my pet projects in the KF6 cleanup:

Software Package Data Exchange (SPDX)

With KF6, I want to see SPDX license identifiers being introduced into KDE frameworks in order to ease the framework re-use in other projects. This follows the same approach e.g. the Linux Kernel took over the last years.

The problem that the SPDX markers address is the following: When publishing source code under an open source license, each source code file shall explicitly state the license it is released with. The usual way this is done is that a developer copies a license header text from the KDE licensing policies wiki, from another source file, or from somewhere else from the internet and puts it at the top of their newly created source code file. Thus the result is that today we have many slightly different license headers all over our frameworks source files (even if they only differ in formatting). Yet, these small differences make it very hard to introduce automatic checks for the source code licenses in terms of static analysis. This problem becomes even more urgent when one wants to check that a library, which consists of several source files with different licenses, does only contain compatible licenses.

The SPDX headers solve this problem by introducing a standardized language that annotates every source code file with license information in the SPDX syntax. This syntax is rich enough to express all of our existing license information and it can also cover more complicated cases like e.g. dual-licensed source files. For example, an “LGPL 2.1 or any later version” license header of a source file looks as:

// SPDX-License-Identifier: LGPL-2.1-or-later

The full list of all existing SPDX markers are available in the SPDX license registry.

The first step now is to define how to handle the GPL and LGPL license headers with specific KDE mentioning, as their is no direct equivalent in the SPDX registry. This is a question we are about to discuss with OSI. After deciding that we have to discuss in the KDE community if SPDX is the way to go (gladly, there was no objection yet to my mail to the community list) and to adapt our KDE licensing policy. And the final big step then will be to get the tooling ready for checking all existing licenses headers and to replace them (after review) with SPDX markers.

PS: Many thanks to MBition for the great planning location for the KF6 sprint in the MBition offices and to the KDE e.V. for the travel support!


I’ve got big news today. Something major landed: full support for the GTK_FRAME_EXTENTS_ protocol, which hugely improves the user experience for running GTK apps that use client-side decoration headerbars! This includes GNOME apps and an increasing number of 3rd-party GTK apps too. In particular, these apps now display window shadows and have proper resize areas without needing to use a thick border. Here’s how Gedit now looks:

It’s almost native-looking! And it fits right in with the rest of your apps.

I’d like to extend a big thanks for Vlad Zahorodnii who has been working hard on this for months! The feature lands in the upcoming Plasma 5.18 LTS.

But wait, there’s more…

More New Features

Bugfixes & Performance Improvements

User Interface Improvements

How You Can Help

Do you love KDE’s apps? Would you like to help develop for them? I knew you would. 🙂 It’s really fun, and you can have a major impact. Many of KDE’s apps are quite beginner-friendly; among them are Dolphin, Elisa, and Spectacle. See the full list here! These apps’ maintainers as well as KDE’s experienced developers are happy to help and mentor newcomers who want to contribute. For more information on how to get help and who to ask, see

More generally, have a look at and find out more ways to help be part of a project that really matters. Each contributor makes a huge difference in KDE; you are not a number or a cog in a machine! You don’t have to already be a programmer, either. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

Finally, consider making a tax-deductible donation to the KDE e.V. foundation.

November 30, 2019

Last week I arrived on a rainy Thursday evening in Berlin to attend the KDE Frameworks Kickoff sprint. The next three days were spent with discussions and ideas about the future of the libraries that are the base of most of the software of the KDE Community.

After arriving at MBition GmbH on Friday we started with reviewing the policies that were in place the last few years for KDE Frameworks 5. This includes for example the release model or on which Qt version to depend. After lunch David Edmundson and Eike Hein gave talks about the KDE community in general and about the advantages using KDE Frameworks libraries can bring to the employees at MBition. In the afternoon that the discussion switched from the past to the future and our goals and design principles that we have in mind for KDE Frameworks 6. Later we already outlined problems with specific frameworks and how our goals will impact them.

After a needed dose of sleep Saturday started right where Friday left off. We split in small groups to investigate how our design goals (further simplification of dependencies, seperation of UI and logic and seperation of framework and implementation) would influence each library and what has to be done to achieve those goals. To this end each group discussed a single library at a time and after eight libraries in total the results were presented to the whole group. For this we started with the Tier 3 Frameworks which have the most complicated dependencies (Tier 1 Frameworks only depend on Qt).

On Sunday morning only two Tier 3 libraries were left, KXmlGui and KIO. It took the whole group (including David Faure who attended the sprint remotely via a video call) the entire morning to also sort these out. I had to leave after lunch but others continued to work turning their attention to Tier 2 Frameworks to also clean those up.

The result of these three very productive but exhausting days is this massive workboard. Thanks to everyone who attended this sprint and made it so that we could get this much done. Many tasks can already be done now and don’t have to wait for Qt 6 or KF 6 branching. If you are intrested in helping out, just pick one from the workboard! If you need help or have some comments just ask on IRC/webchat or directly on phabricator. If you want to learn more about the sprint look at Christoph’s blog who wrote a quick recap each day. More summaries can be found at Kevin’s, Kai Uwe’s, Volker’s and and Nicolas’ blogs. Special thanks to MBition who kindly hosted us and KDE e.V. for travel support and accommodation!

Time for another bi-monthy status update around KDE Itinerary! Since the last report plenty of things have happened again, ranging from multi-ticket support to integration with the Plasma Browser Integration plug-in, most of which you’ll find in the upcoming 19.12 release.

New Features

The biggest new feature this time is clearly the integration into the Plasma Browser Integration plug-in for Firefox and Chromium. That has been in the works since the Nürnberg sprint, and required a number of changes throughout the infrastructure and in the browser plug-in.

Plasma Browser Integration pop-up showing details of an event mentioned on the current website. Plasma Browser Integration offering to add an event to KDE Itinerary.

More work is still needed on this so that KDE Itinerary can also consume “timeless” elements properly, such as hotel or restaurant information without an associated booking. For that we need Kirigami date/time controls first though.

Another new feature is support for multi-ticket reservations. That’s for cases where a single traveler has multiple relevant tickets for a single journey section, such as a separate seat reservation or a first class upgrade next to a regular train ticket. Those cannot be merged, and the UI needs to be able to alternatively show both tickets. This is done by leveraging existing infrastructure for multi-traveler reservations. In the course of this, we also added support for decoding RCT2 upgrade tickets.

KDE Itinerary offering to select between the main and upgrade ticket of a train trip. Multi-ticket selector in KDE Itinerary.

The built-in weather forecast in the KDE Itinerary app can now also indicate expected high wind speeds, thanks to the Breeze icon theme gaining support for that in its weather icon set.

KDE Itinerary timeline showing a weather forecast with windy weather. Weather forecast in KDE Itinerary indicating windy weather.

Infrastructure Work

As usual a lot of things happened behind the scenes as well:

  • The custom extractor API as well as the generic extractors became more flexible and powerful, there’s a separate post covering most of this. Since then we also added access to UIC 918.3 vendor blocks for the custom extractor API, and content-based extractor selection.

  • KPublicTransport received API to explicitly control which backend services to query, and the UI for this has been integrated into KDE Itinerary’s settings page. There’s also a dedicated post about this.

KDE Itinerary showing a configuration page to select which public transport services to use. Detailed public transport information service selection in KDE Itinerary.
  • The generic PDF extractor now also considers the creation and modification time in the PDF meta-data as context information, which allows us to get the date right in more cases for PDF boarding passes (which in their barcode annoyingly only contain the day, not the date).

  • The train station database of the extractor engine now also supports Indian Railways station codes, and contains all stations with such a code from Wikidata. Together with the content-based extractor selection this should pave the way for supporting Indian Railways SMS tickets.

Fixes & Improvements

Besides these larger changes, there are of course also plenty of small improvements worth noting:

  • The KMail plug-in got a UI revamp. It now no longer looks like what was initially just supposed to be debug output, and its actions are now regular buttons rather than hidden in the not obvious to spot context menu.
KItinerary KMail plug-in with new UI visuals. New KMail plug-in UI.
  • Timezones on Android so far were usually displayed as GMT offsets only. This is due to QTimeZone being limited to use older Android API for this. We now call newer Android API for this ourselves if available (API level >= 24), to get closer to the human readable timezone names we have on Linux.

  • Custom extractors for IndiGo, Flixbus, Lufthansa, RegioJet and ÖBB were added or improved, and the generic extractor for annotations in Microdata format can now handle nested objects correctly.

  • Calendar entries for restaurant reservations without an end time no longer span the entire day.

  • The trip group naming heuristic was improved to also consider the longest gap between location changes as the possible destination of a trip.

  • The KMail itinerary plug-in can now also show train classes, and can correctly display multiple ticket tokens now.

  • The KDE Itinerary app now shows inline feedback when importing data.

KDE Itinerary showing an inline notification about two successfully imported reservations. KDE Itinerary providing feedback about imported reservations.

KPublicTransport, the framework that provides us with real-time transport data, also got a number of noteworthy improvements:

  • Backend services can now be configured with a static timezone. That’s used for backends that ignore timezones entirely due to being regionally restricted to just one anyway.

  • Backends can now indicate if they are able to query arrival times at a station, so the framework can avoid querying those on such requests.

  • The parser for responses from EFA backends now also supports an alternate compact response format that some services use.

  • The Hafas parser now resolves master location references, which should improve location query result quality a bit. Product selection in journey queries for Hafas-based backends was also fixed, which resulted in missing tram lines in certain locations.

  • A number of new backend services were added, covering Luxembourg as well as various regions in Austria, Germany and the US.


All the development happening is of course of limited use if this isn’t distributed to our users. So I’d also like to highlight a few things supporting that:

  • As the KItinerary extractor engine depends on inofficial Poppler API, we need to regularly adapt that code to new Poppler releases. Besides doing that up to the upcoming 0.83 release of Poppler we hopefully also made the supporting infrastructure for this a bit more scalable and future proof, reducing the future maintenance effort there.

  • For deployment scenarios far away from our usual environments, such as old server systems, we have added the infrastructure to do full static builds of the command line extractor tool. That’s not necessarily a good alternative to proper distribution packages, but those aren’t easily available on say a Debian 9 server.


This work continues to rely on donated data samples, thanks to everyone who has helped with this so far! And a special thank to the donator of the large set of multi-ticket samples that were essential in some of the above, there’s still much more work to be done based on that :)

If you want to help in other ways than donating test samples too, see our Phabricator workboard for what’s on the todo list, for coordinating work and for collecting ideas. For questions and suggestions, please feel free to join us on the KDE PIM mailing list or in the #kontact channel on Matrix or Freenode.

The digiKam Team built the Google Photo, Google Drive or another Webservices uploader as a open source app. This SERVICE is provided by the digiKam Team at no cost and is intended for use as is. This page is used to inform website visitors regarding our policies with the collection, use, and disclosure of Personal Information if anyone decided to use our Service. If you choose to use our Service, then you agree to the collection and use of information in relation with this policy.

November 29, 2019

When using PIMPL, we sometimes want to move implementation of slots into the private class as well. In order for Qt to be able to invoke those slots that formally exist only in the private class (which usually is not a QObject), we use the Q_PRIVATE_SLOT macro in the main class. It allows Qt to invoke the slot method, even though it exists in the private class.

Let’s have a short example:

/// mybutton.h

class MyButtonPrivate;
class MyButton : public QPushButton {
    explicit MyButton(QWidget *parent);
    ~MyButton() noexcept override;

    std::unique_ptr<MyButtonPrivate> const d_ptr;

    Q_PRIVATE_SLOT(d_func(), void onClicked(bool));

/// mybutton.cpp

class MyButtonPrivate
    void onClicked(bool clicked) {
        qDebug() << "Clicked!";

MyButton::MyButton(QWidget *parent)
    : QPushButton(parent)
    , d_ptr(std::make_unique<MyButtonPrivate>())
    // Connecting to slot on "this" (MyButton*), although "onClicked" is defined in MyButtonPrivate
    connect(this, SIGNAL(clicked(bool)),
            this, SLOT(onClicked(bool)));

MyButton::~MyButton() noexcept = default;

Q_PRIVATE_SLOT does not create any new method in the MyButton class. The way Q_PRIVATE_SLOT works is that it just instructs moc to generate a metacall that looks like obj->d_func()->onClicked(val) instead of obj->onClicked(val), like it does for normal slots or invokables.

This approach has one big disadvantage: it means that Q_PRIVATE_SLOTs can only be invoked through the old QObject::connect() syntax.

So far I’ve been using a simple workaround to get all the compile-time checks that I would get with the new connect syntax normally:

connect(this, &MyButton::clicked,
        this, [this](bool clicked) { d_func()->onClicked(clicked); });

Here we use a lambda to forward the call to the actual PIMPL’ed slot. This is somewhat better than the old connect syntax but IMO it has two major drawbacks:

It’s hard to read - it’s difficult to immediatelly decipher what method the call is actually being forwarded to.

It’s tedious to write - it’s a lot of boilerplate code to be written and if there are too many arguments it becomes quite ugly. C++14 generic lambdas improve the situation a bit since we can use auto instead of spelling out the argument types, but I don’t think it makes the code necessarily better to read:

connect(this, &MyObject::mySignal,
        this, [this](const auto &foo, auto bar, auto *baz) {
            d_func()->mySlot(foo, bar, baz);

It got me thinking if there might be some way to auto-generate the forwarding lambda and be able to just use the pointer-to-function here somehow.

In the end I came up with this tiny template function, which takes the d-pointer and the pointer to the PIMPL’ed slot and returns a generic lambda which gets passed into QObject::connect and which forwards arguments to the real slot method.

template<typename DPtr, typename Slot>
auto priv_slot(DPtr &&dptr, Slot &&slot)
    return [&dptr, &slot](auto && ... args)
        (dptr->*slot)(std::forward<decltype(args)>(args) ...);

The result has all the benefits of the new QObject::connect() syntax without the ugliness of the “forwarding lambda”:

connect(this, &MyObject::mySignal,
        this, priv_slot(d_func(), &MyObjectPrivate::onSignal));

Last week I took a train to Berlin for the KDE Frameworks 6 kickoff sprint. A lot has been said about it by my fellow attendees already, so I won’t go into detail much.

Work on Qt 6 has begun and with Qt 6 a version 6 of the KDE Frameworks is due. This will gives us the opportunity to clean up and redesign some of our API.

Main goal for the sprint was to discuss the major design principles for KF6. I personally focussed on two aspects. First, we want to better separate logic from the user interface to allow different UI implementations for desktop and mobile uses. Futhermore, we want to reduce the amount of dependencies our libraries have. While we are doing fine for a lot of frameworks some have very ugly dependency structures. Probably our worst offender here is KIO, the framework that powers Dolphin and many more KDE applications.

This is the current dependency tree of KIO:

With some changes we discussed applied it could look like this:

Please note that all of this is highly tentative and might not always work out the way we imagine. While we can do some of these changes in the Frameworks 5 lifetime already most of it needs breaking API, so it will only be available in KF6.

This work will hopefully make KDE Frameworks more appealing for users outside of KDE. If you are developing Qt-based software and would like to know more about how KDE Frameworks can help you please contact us at #kde-devel on freenode or

By Caio Jordão Carvalho

After a one-year hiatus, KDE Student Programs is very happy to announce Season of KDE 2020!

Focused on offering an opportunity to anyone (not just enrolled students) contributing to the KDE community, this is a program that is comparable to the well-known Google Summer of Code, with some special differences. A key difference is that SoK projects are not limited to code-focused work, but any that benefit our community. For instance, projects can be about documentation, reports, translation, system administration, web and other types of work as well as code. Each contributor will work with a mentor and within a team that will also help the contributor.


This year we have decreased the duration of the projects. Previously, all projects were 80 days long. However, during SoK 2018 we included the option of 40-day projects. This new option was widely adopted by participants during 2018 and, so we decided to keep only this alternative.


  • From the 9th of December 2019 to the 3rd of January 2020: Participant and Mentor Application period
  • 6th of January 2020: Projects announced
  • 8th of January 2020, 00:00 UTC: SoK work period begins
  • 17th of February 2020, 23:59 UTC: End of work
  • 21st of February 2020: Results announced
  • 28th of February 2020: Certificates issued
  • Beginning of Q3 2020: Merchandise and Swag sent out by courier

Getting Started

Prospective participants should get in touch with us before the application period begins to discuss possible projects. You can connect with us on Matrix, in the #kde-soc room on IRC, in KDE-SoC on Telegram, or through our mailing list. Besides talking to the SoK team, contact the application maintainer and team with whom you want to work.

If you’re looking for project ideas, you can find some on our KDE Season of Code 2020 Ideas Page. Mentors please add ideas, so that we have a central repository of project ideas for Season of KDE 2020 and even GSoC 2020. Applicants will work with the teams to develop a proposal, and the SoK admin team will help too.

Help us spread the word! Tell your friends, blog, tweet, and share on Facebook using the #2020SeasonKDE hashtag.

Participants and mentors can apply here once applications open.

LaKademy 2019 Group Photo

Hi, people! Here I am again telling about how I love this community and like to be part of every activity we organize. Almost two weeks ago we had a new edition of LaKademy, the Latin American KDE Summit, which we’ve been organizing in Brazil since 2012. This edition was held in Salvador, Bahia, for the second time (the 2015 edition was there too).

During the four days we worked there, I dedicate my time to improve LaKademy website. I’ve created a page for this event in 2017 but it needed some adjustments, like a more modern and responsive template. Since some projects in KDE community are adopting a unified template that uses Jekyll, I’ve decided to change LaKademy website to this template too. So I spent my time there first trying to make Jekyll run on my computer (we had some issues with the network from the University the event happened, so it took me almost a day to figure out why some things on my computer were not working 🙂 ) and then trying to learn how Jekyll works 😀

This is how the website looks right now:

It is just a static webpage made in HTML/CSS with some information about each edition. We think this page as just a repository to show information about every edition. For news and updates we always use KDE Brasil webpage or

And this is how the new webpage is looking right now. I am still working on it and it still has a lot of work to do to finish it. But now I will have to do this during my free time, since I couldn’t finish it during the event.

This was once again a very nice event to work with things and people that I like, in a city that I love. We had some new contributors attending to it and we could think of some strategies to make this community stronger during our traditional promo meeting. We’ve created a KDE Brazil Promo group at Telegram to coordinate our promo activities here in Brazil and we hope we can get better at it and reach as much people possible 😀

I would like to thank KDE e.V. to support this event every year and Caio and Icaro for having organized it in Salvador. I’m looking forward to attend to LaKademy 2020! 🙂

Editing, moving and customizing widgets in Plasma Desktop improved a lot in 5.17, and then in 5.18 it will get a brand new edit mode, to be really efficient editing your desktop layout (and have less visual noise by default).

This week another new feature landed in the edit mode for 5.18: it’s possible to set some plasmoids without background and a nice drop shadow, for an extra clean and modern look for your desktop.

In addition, a plasmoid can specify this backgroundless shadowed mode as its new default, like the digital clock now does (when is on the deskop)

Applet developers will have to opt in this feature: doesn’t always make sense everywhere and some may still be buggy. Some default plasmoids, especially in kdeplasma-addons have been set to support it.

If you are writing a plasmoid and want to support this background removal, in the main QML item of your plasmoid you can do:

Item {
    id: root   
    Plasmoid.backgroundHints: PlasmaCore.Types.DefaultBackground
                             | PlasmaCore.Types.ConfigurableBackground

Or, if you want to default toi the new background-less, automatic shadow:

Item {
    id: root   
    Plasmoid.backgroundHints: PlasmaCore.Types.ShadowBackground
                             | PlasmaCore.Types.ConfigurableBackground

Of course the NoBackground option is still there if a shadow isn’t what the graphic style of the plasmoid needs.

A notice that needs to be kept in mind, is that for color inversion to work automatically, one should never do:

    color: theme.textColor

But rather

    color: PlasmaCore.ColorScope.textColor

Which is a good way to get ready for Qt6 anyways, as context properties are going to be removed in the next Qt major release.

I’ve finally come to a point where I have a project that is useful, and at a good enough quality (anyone with graphics skills who wants to help?) to be shared with the broader world: Mattemonster. What I’m trying to say is that I just went through the process of publishing a Godot app to the Google Play store.

There is already good documentation for how you export a Godot app for Android, and detailed guides how to publish to Google Play. This blog is not a step by step tutorial, but instead mentioning some of the things I learned or noticed.

First of all, when setting up the Android tooling, you usually have an android-tools package for your distro. This way, you don’t have to install Android Studio provided by Google.

The configuration settings that you use to export your app goes into the export_presets.cfg file. Once you put the details for your release key in, you should avoid storing this file in a public git, as it contains sensitive data. But even before then, it contains paths that are local to your machine, so I would recommend not storing it in a public git anyway, as it makes merging with others painful.

Finally, when building your apk file, a funny detail is that the switch to control if it is a debug or release build is found in the actual Save As… dialog, and not in the export settings. This was initially confusing to me, as I was looking in the wrong place.

The next step is Google Play. Here one creates all the accounts and listings as explained in the article linked to in the beginning of this blog. What is a bit unclear is that some settings are only available once an initial apk has been uploaded (e.g. Content rating).

Another of these dependencies that confused me is that even the closed alpha testing requires the app to have been published at least once. This means that you have to publish version 1.0 first, then you can use the alpha channel to push out updates quickly to your testers. As it takes up to a week (or longer…) to get the initial publishing through the system, this is a bit frustrating, as you really have to wait around for a few days before you can continue.

When you create an update, you need to remember to step the version code of the apk. This has to be done manually when configuring the export in Godot.

It is also worth mentioning that I did not opt-in to let google manage and protect my signing key. This means that I get warnings for not supporting bundles each time I try to publish, but these warnings can be ignored.

Next steps for me is to to publish to f-droid, and to provide some translations to be able to target more markets (right now the app is in Swedish, so I limited distribution to Sweden).

We are happy to announce the release of Qt Creator 4.11 RC!

Older blog entries