November 14, 2018

We promised Digital Atelier would be available in the Krita Shop after the succesful finish of the Fundraiser. A bit later than expected, we’ve updated the shop with the Digital Atelier brush preset bundle and tutorial download:

There are fifty great brush presents, more than thirty brush tips, twenty paper textures and almost twohours of in-depth video tutorial, working you through the process of creating new brush presets.

Digital Atelier sells for 39,95 euros, ex VAT.

And we’ve also created a new USB-card, with the newest stable version of Krita for all OSes. Includes Comics with Krita, Muses, Secrets of Krita and Animate with Krita tutorial packs.

It’s in the credit-card format again, which makes it easy to carry Krita with you wherever you go! Besides, this format lets us use the new Krita 4 splash screen by Tyson Tan.

The usb-card is available in two versions: as-is, for €29,95 and (manually) updated to the latest version of Krita for €34,95.

KDevelop 5.3 released

A little less than a year after the release of KDevelop 5.2 and a little more than 20 years after KDevelop's first official release, we are happy to announce the availability of KDevelop 5.3 today. Below is a summary of the significant changes.

We plan to do a 5.3.1 stabilization release soon, should any major issues show up.


With 5.1, KDevelop got a new menu entry Analyzer which features a set of actions to work with analyzer-like plugins. For 5.2 the runtime analyzer Heaptrack and the static analyzer cppcheck have been added. During the last 5.3 development phase, we added another analyzer plugin which now is shipped to you out of the box:


Clazy is a clang analyzer plugin specialized on Qt-using code, and can now also be run from within KDevelop by default, showing issues inline.

Screenshot of KDevelop with dialog for project-specific Clazy settings, with clazy running in the background

The KDevelop plugin for Clang-Tidy support had been developed and released independently until after the feature freeze of KDevelop 5.3. It will be released as part of KDevelop starting with version 5.4.

Internal changes

With all the Analyzers integration available, KDevelop's own codebase has been subject for their application as well. Lots of code has been optimized and, where indicated by the analyzers, stabilized. At the same time modernization to the new standards of C++ and Qt5 has been continued with the analyzers aid, so it can be seen only in the copyright headers KDevelop was founded in 1998 .

Improved C++ support

A lot of work was done on stabilizing and improving our clang-based C++ language support. Notable fixes include:

  • Clang: include tooltips: fix range check. (commit. code review D14865)
  • Allow overriding the path to the builtin clang compiler headers. (commit. See bug #393779)
  • Always use the clang builtin headers for the libclang version we use. (commit. fixes bug #387005. code review D12331)
  • Group completion requests and only handle the last one. (commit. code review D12298)
  • Fix Template (Class/Function) Signatures in Clang Code Completion. (commit. fixes bug #368544. fixes bug #377397. code review D10277)
  • Workaround: find declarations for constructor argument hints. (commit. code review D9745)
  • Clang: Improve argument hint code completion. (commit. code review D9725)

Improved PHP language support

Thanks to Heinz Wiesinger we've got many improvements for the PHP language support.

  • Much improved support for PHP Namespaces
  • Added support for Generators and Generator delegation
  • Updated and expanded the integrated documentation of PHP internals
  • Added support for PHP 7's context sensitive lexer
  • Install the parser as a library so it can be used by other projects (currently, umbrello can use it) (Ralf Habacker)
  • Improved type detection of object properties
  • Added support for the object typehint
  • Better support for ClassNameReferences (instanceof)
  • Expression syntax support improvements, particularly around 'print'
  • Allow optional function parameters before non-optional ones (Matthijs Tijink)
  • Added support for magic constants __DIR__ and __TRAIT__

Improved Python language support

The developers have been concentrating on fixing bugs, which already have been added into the 5.2 series.

There are a couple of improved features in 5.3:

Support for other platforms

KDevelop is written with portability in mind, and relies on Qt for solving the big part there, so next to the original "unixoid" platforms like Linux distributions and the BSD derivatives, other platforms with Qt coverage are in good reach as well, if people do the final pushing. So far Microsoft Windows has been another supported platform, and there is some experimental, but maintainer-seeking support for macOS. Some porters of Haiku, the BeOS inspired Open Source operating system, have done porting as well, building on the work done for other Qt-based software. For KDevelop 5.3 the small patch still needed has been applied to KDevelop now, so the Haiku ports recipe for KDevelop no longer needs it.

KDevelop is already in the HaikuDepot, currently still at version 5.2.2. It will be updated to 5.3.0 once the release has happened.

KDevelop 5.3 Beta on Haiku

Note to packagers

The Clazy support as mentioned above has a recommended optional runtime dependency, clazy, more specifically the clazy-standalone binary. Currently clazy is only packaged and made available to their users by a few distributions, e.g. Arch Linux, openSUSE Tumbleweed or OpenMandriva,

If your distribution has not yet looked into packaging clazy, please consider to do so. Next to enabling the Clazy support feature in KDevelop, it allows developers to easily fix and optimize their Qt-based software, resulting in a less buggy and more performant software again for you.

You can find more information in the the release announcement of the currently latest clazy release, 1.4.

Get it

Together with the source code, we again provide a prebuilt one-file-executable for 64-bit Linux (AppImage), as well as binary installers for 32- and 64-bit Microsoft Windows. You can find them on our download page.

The 5.3.0 source code and signatures can be downloaded from here.

Should you find any issues in KDevelop 5.3, please let us know in the bug tracker.

kossebau Wed, 2018/11/14 - 10:00

November 13, 2018

De nuevo toca entrada dedicada el diseño. Os presento Electric Funeral, unos iconos muy originales que proporcionarán un toque único a vuestro sistema. Como es habitual, estamos ante una de las formas de personalización más completa ya que cambia totalmente el aspecto del mismo a la hora de interaccionar con tus aplicaciones, documentos y servicios.

Electric funeral, llena tu escritorio de tumbas

La originalidad es la seña de identidad del tema de iconos que os presento hoy.

Se trata de Electric funeral, una creación de Ju1464 con el que tu explorador de archivos Dolphin se convertirá en un bonito camposanto ya que los iconos se van a convertir en tumbas con aspecto pixelart en la que solo falta que aparezca Sir Arthur de Ghost’n’Goblins.

Electric funeral, llena tu escritorio de tumbas

Eso si, una tumbas con lápidas coloridas y con iconografía inspirada en los clásicos del Heavy Metal: calaveras, guitarras eléctricas, rayos, ataúdes, cruces invertidas y manos con los dedos alzados, entre otras muchas como


De esta forma nos encontramos con iconos para todo nuestro sistema, es decir, para carpetas, aplicaciones y mimetypes.

Todo ello lleva a proporcionar un aspecto colorido, original y muy personal, que como mínimo no dejará a nadie indiferente.

Y como siempre digo, si os gusta el pack de iconos 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

Elisa (product page, release announcements blog) is a music player designer for excellent integration into the KDE Plasma desktop (but of course it runs everywhere, including some non-Free platforms). I had used it a few times, but had not gotten around to packaging it. So today I threw together a FreeBSD port of Elisa, and you’ll be able to install it from official packages whenever the package cluster gets around to it.

Screenshot of pkg info for ElisaI say “threw together” because it took me only a half hour (most of that was just building it a half-dozen times in different ways). The Elisa code itself is very straightforward and nice. It doesn’t even spit out a single warning with Clang 6 on FreeBSD. That’s an indicator (for me, anyway) of good code. So if you want more music on FreeBSD, it’s there! (And the multimedia controls work from the SDDM lock screen, too)

November 12, 2018

Last month French publisher D-Booker released the 2nd edition of Timothée Giet’s book “Dessin et peinture numérique avec Krita”.

The first edition was written for Krita 2.9.11, almost three years ago. A lot of things have changed since then! So Timothée has completely updated this new edition for Krita version 4.1. There are also a number of  notes about the new features in Krita 4.

And more-over, D-Booker worked again on updating and improving the French translation of Krita! Thanks again to D-Booker edition for their contribution.

You can order this book directly from the publisher’s website. There is both a digital edition (pdf or epub) as well as a paper edition.

El pasado mes de octubre Plasma y el equipo de KDE Neon visitó instituciones públicas educativas de Cataluña con el objetivo de encontrar maneras en las que colaborar y ofrecer, juntos, soluciones mejores.  

Plasma y el equipo de KDE Neon visitó instituciones públicas educativas de Cataluña

Educación y software libre van de la mano. Si bien en muchas escuelas no llega a ser la realidad.
Uno de los escollos que se comentan cuando se habla con comunidades educativas y Software Libre es su falta de comunicación. Es por ello que KDE decidió reunirse con distintos actores del sector educativo catalán para ver en qué espacios se podría colaborar para crear productos que funcionen mejor tanto para profesores como estudiantes.
KDE ha estado trabajando durante tiempo tanto en aplicaciones educativas como en mejorar el sistema para ordenadores con recursos limitados. Eso son factores que son importantes en cualquier escuela y que se podrán adaptar fácilmente.Plasma y el equipo de KDE Neon visitó instituciones públicas educativas de Cataluña
Es por tanto otro paso hacia una nueva ola de adopción de estos productos de KDE, ya que si son suficientes para un despliegue pueden serlo para cualquier otro. 
De esta forma, y en un intento de llegar más allá, Plasma y el equipo de KDE Neon tuvo el primer día una reunión con Pablo Vigo, uno de los responsables del proyecto Linkat, la distribución GNU/Linux especialmente diseñada para las escuelas catalanas. En ella se planteó el uso de Plasma como entorno de trabajo ahora que el consumo de recursos de este escritorio está tan optimizado y, por tanto, su uso recomendado para este tipo de equipos.
Por otra parte, también se realizó un encuentro con el Departamento de Educación en la que se discutió temas de la necesidades respecto a la accesibilidad en Linkat y como KDE puede ayudar a ello. Se destacó el sistema de control por voz de Mycroft y la aplicación KDE Connect, que integra los teléfonos móviles y escritorios.
El segundo día de esta visita se inició con la Escola del Treball, el centro de enseñanza técnica más grande de Cataluña. En este centro están buscando como reducir los costes al problema de tener unos miles de ordenadores disponibles en sus instalaciones.
Una solución son los clientes ligeros montados a base de clientes ligeros, pero estos requieren un servidor que los soporte y cree unas 3000 máquinas virtuales que son necesarias. Se habló del funcionamiento de Plasma en estos clientes ligeros y de como se podría crear imágenes linux optimizadas para el despliegue usando Plasma.
Por la tarde, visitó al desarrollador Angel Docampo que habló sobre su trabajo para el Ayuntamiento de Barcelona, el cual está interesado en integrar Software Libre en sus ordenadores. En la actualidad se está probando el uso de Kubuntu en ellos y se está realizando pruebas en un pequeño grupo de 30 empleados. La opinión de éstos es positiva, según Angel.
En resumen, una serie de visitas de lo más productivas que presagian una mayor interacción entre la Comunidad KDE y el el entorno educativo y administrativo de Cataluña.
Más información:

Could you tell us something about yourself?

I’m Brigette, but I go mainly go by my online handle of HoldXtoRevive. I’m from the UK and mostly known as a fanartist.

Do you paint professionally, as a hobby artist, or both?

I have had a few commissions but outside that I would call myself a hobbyist. I would love to work professionally at some point.

What genre(s) do you work in?

I do semi-realistic sci-fi art. I most recently I have been drawing character portraits inspired from the Art Nouveau style, the majority of it has been fanart of a few different Sci-fi games.

Whose work inspires you most — who are your role models as an artist?

It’s hard to list them all really. Top of the list would be my other half, RedSkittlez, who is an amazing concept and character artist, also my friends Blazbaros, SilverBones and many more that would cause this to go on for too long.

Outside of my friends I would say Charles Walton, Pete Mohrbacher and Valentina Remenar to name a few.

How and when did you get to try digital painting for the first time?

About 4 years ago I downloaded GIMP as I wanted to get back into art after not drawing for about 15 years. I got a simple drawing tablet soon after and things just progressed from there.

What makes you choose digital over traditional painting?

The flexibility and practicality of it. Whilst I would love to try traditional acquiring, maintaining and storing supplies is not easy for me.

How did you find out about Krita?

My partner was looking at alternatives to photoshop and came across it via a youtube video. He recommended me to try it out.

What was your first impression?

How clean the UI is and how all of the tools where easy to find, and the fun I had messing with the brushes.

What do you love about Krita?

The fact it was really easy to get to grips with, yet I can tell there is more I can get from it. Also the autosave.

What do you think needs improvement in Krita? Is there anything that really annoys you?

I would like a brightness/contrast slider alongside the curve for ease of use. It would also be nice if the adjustment windows would not close when the autosave kicks in.

What sets Krita apart from the other tools that you use?

I have not used many programs before I can across Krita. But the thing that jumped out at me was the ease of use and it had everything I wanted in an art program, I know that if I want to try animation I do not need to go and find another program.

If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

That is hard to say, but in a pinch I would say the one titled “Saladin’s White Wolf”. I was really happy how the background came out, it was also the one to be picked out and promoted by Bungie on their twitter.

What techniques and brushes did you use in it?

For the most part I use a multiply layer over flats for shading. My main brushes are just the basic tip (gaussian), basic wet soft and the soft smudge brush.

Where can people see more of your work?

Over on my DeviantArt page:
And my twitter:

Anything else you’d like to share?

I’m bad with words but I want to show appreciation to the Krita crew for making this wonderful program and to everyone who has supported and encouraged me.

November 11, 2018

Getting started – clang-tidy AST Matchers

Over the last few weeks I published some blogs on the Visual C++ blog about Clang AST Matchers. The series can be found here:

I am not aware of any similar series existing which covers creation of clang-tidy checks, and use of clang-query to inspect the Clang AST and assist in the construction of AST Matcher expressions. I hope the series is useful to anyone attempting to write clang-tidy checks. Several people have reported to me that they have previously tried and failed to create clang-tidy extensions, due to various issues, including lack of information tying it all together.

Other issues with clang-tidy include the fact that it relies on the “mental model” a compiler has of C++ source code, which might differ from the “mental model” of regular C++ developers. The compiler needs to have a very exact representation of the code, and needs to have a consistent design for the class hierarchy representing each standard-required feature. This leads to many classes and class hierarchies, and a difficulty in discovering what is relevant to a particular problem to be solved.

I noted several problems in those blog posts, namely:

  • clang-query does not show AST dumps and diagnostics at the same time<
  • Code completion does not work with clang-query on Windows
  • AST Matchers which are appropriate to use in contexts are difficult to discover
  • There is no tooling available to assist in discovery of source locations of AST nodes

Last week at code::dive in Wroclaw, I demonstrated tooling solutions to all of these problems. I look forward to video of that talk (and videos from the rest of the conference!) becoming available.

Meanwhile, I’ll publish some blog posts here showing the same new features in clang-query and clang-tidy.

clang-query in Compiler Explorer

Recent work by the Compiler Explorer maintainers adds the possibility to use source code tooling with the website. The compiler explorer contains new entries in a menu to enable a clang-tidy pane.

clang-tidy in Compiler Explorer

clang-tidy in Compiler Explorer

I demonstrated use of compiler explorer to use the clang-query tool at the code::dive conference, building upon the recent work by the compiler explorer developers. This feature will get upstream in time, but can be used with my own AWS instance for now. This is suitable for exploration of the effect that changing source code has on match results, and orthogonally, the effect that changing the AST Matcher has on the match results. It is also accessible via

It is important to remember that Compiler Explorer is running clang-query in script mode, so it can process multiple let and match calls for example. The new command set print-matcher true helps distinguish the output from the matcher which causes the output. The help command is also available with listing of the new features.

The issue of clang-query not printing both diagnostic information and AST information at the same time means that users of the tool need to alternate between writing

set output diag


set output dump

to access the different content. Recently, I committed a change to make it possible to enable both output and diag output from clang-query at the same time. New commands follow the same structure as the set output command:

enable output dump
disable output dump

The set output <feature> command remains as an “exclusive” setting to enable only one output feature and disable all others.

Dumping possible AST Matchers

This command design also enables the possibility of extending the features which clang-query can output. Up to now, developers of clang-tidy extensions had to inspect the AST corresponding to their source code using clang-query and then use that understanding of the AST to create an AST Matcher expression.

That mapping to and from the AST “mental model” is not necessary. New features I am in the process of upstreaming to clang-query enable the output of AST Matchers which may be used with existing bound AST nodes. The command

enable output matcher

causes clang-query to print out all matcher expressions which can be combined with the bound node. This cuts out the requirement to dump the AST in such cases.

Inspecting the AST is still useful as a technique to discover possible AST Matchers and how they correspond to source code. For example if the functionDecl() matcher is already known and understood, it can be dumped to see that function calls are represented by the CallExpr in the Clang AST. Using the callExpr() AST Matcher and dumping possible matchers to use with it leads to the discovery that callee(functionDecl()) can be used to determine particulars of the function being called. Such discoveries are not possible by only reading AST output of clang-query.

Dumping possible Source Locations

The other important discovery space in creation of clang-tidy extensions is that of Source Locations and Source Ranges. Developers creating extensions must currently rely on the documentation of the Clang AST to discover available source locations which might be relevant. Usually though, developers have the opposite problem. They have source code, and they want to know how to access a source location from the AST node which corresponds semantically to that line and column in the source.

It is important to make use a semantically relevant source location in order to make reliable tools which refactor at scale and without human intervention. For example, a cursory inspection of the locations available from a FunctionDecl AST node might lead to the belief that the return type is available at the getBeginLoc() of the node.

However, this is immediately challenged by the C++11 trailing return type feature, where the actual return type is located at the end. For a semanticallly correct location, you must currently use


It should be possible to use getReturnTypeSourceRange(), but a bug in clang prevents that as it does not appreciate the trailing return types feature.

Once again, my new output feature of clang-query presents a solution to this discovery problem. The command

enable output srcloc

causes clang-query to output the source locations by accessor and caret corresponding to the source code for each of the bound nodes. By inspecting that output, developers of clang-tidy extensions can discover the correct expression (usually via the clang::TypeLoc heirarchy) corresponding to the source code location they are interested in refactoring.

Next Steps

I have made many more modifications to clang-query which I am in the process of upstreaming. My Compiler explorer instance is listed as the ‘clang-query-future’ tool, while the clang-query-trunk tool runs the current trunk version of clang-query. Both can be enabled for side-by-side comparison of the future clang-query with the exising one.

You have probably read a lot about Akademy 2018 recently, and how great it was.
For me it was a great experience too and this year I met a lot of KDE people, both old and new. This is always nice.
I arrived on Thursday so I had one day to set everything up and had a little bit of time to get to know the city.
On Friday evening I enjoyed the "Welcoming evening", but I was very surprised when Volker told me that I would be on stage the next day, talking about privacy.
He told me that someone should have informed me several days before. The scheduled speaker, Sebastian, couldn't make it to Akademy.

That was really a pity. If I had known earlier, I would have prepared a proper presentation, as I think I have a lot to say on the topic. I care a lot about good encryption support in KDE PIM and I have also been busy with Tails, a distribution strongly focused on privacy and anonymity.

So the next day I rambled a bit about encrypting mail headers (also known as Memory Hole), but it wasn't a great talk. It was also very stressful, as we started with a lot of delay: Setting up the audio took much longer than expected so all talks started late. As I was in such a hurry. I forgot a lot of what I wanted to say and failed to draft a greater picture for the privacy goal.

To compensate, let me say it here. Privacy starts with encrypting everything, starting with the content of the connection. This is mostly done via TLS. Here KDE is lacking some bits, as we cannot display the encryption methods, so we are sometimes forced to downgrade to old and insecure encryption methods without user visual feedback. But at least we support TLS everywhere! Unfortunately metadata is often enough to track where people are. To hide this information, we need TOR/VPN support within the applications. For most applications you can use the TOR network by running

torsocks <cmd>

but this is not really user-friendly.
It also has the disadvantage that you can't see if DNS requests are transmitted via the TOR tunnel. And then there's deamons, which you don't normally run from the command line. Furthermore, e.g. GnuPG has an option to enable TOR support and does not like to run using torsocks.

We need more control over the used TLS certificates and a way to display the TLS parameters, like accepted ciphers, protocol versions etc. Because at the moment KDE just asks you about unknown certificates, but you can't view/ control the other important details of a TLS connection to harden your system. Sure a default user can't decide whether something is good or not and a user may need to access some rotten company side. But we can provide a rating like ssllabs to show that the TLS connection is not good.

Another topic is to have a good support for TOR/VPN for applications and KDE in total in a user friendly way. And be sure that everything within these applications really uses the tunnel. I think at usecases like: I want TOR for everything except this application. After we have good solutions for those, we can focus on all the different applications. I haven't a good overview what each application should do in regards to the Privacy goal additionally.
As I'm busy within KDE PIM I see some things there:

  • Encrypting headers of mails to give less metadata to surveillance T742.
  • Make it possible to search in encrypted mails. Until now, the encrypted data are a binary blob to the search. The search is important to find mails again and is often a reason, why users do not use encrypted messages. T8447.
  • Protect Akregator webviewer against ad trackers T7528.
  • Add GnuPG TOFU (Trust On First Use) trust model support for KMail. With TOFU you will get more security without exchanging the gpg fingerprints. To make it clear, exchanging fingerprints gives more security than is achieved with TOFU, but it is exhausting. Only a small number of users exchange fingerprints. So many users will profit from having extra security by the TOFU security model being supported by KMail.

To move forward in reaching the privacy goal, I volunteered to organize a Sprint together with Louise Galathea. It will hopefully take place next Spring.

But back to the Akademy - two days of many talks which was pretty overwhelming, in a good way. I really enjoyed the mix of non technical talks and technical talks. My highlight was a talk about Kontact from Markus Feilner. It is interessting to see how users master issues around Kontact and what solutions they find. The talk would have benefited from Markus talking to KDE PIM before, as some of his suggestions weren't correct. But it was nice to see that there are happy users who love all bells and whistles from Kontact. The days after the talk I encountered another user who gave Kontact a try after years, because of that talk.

The BOF session started on Monday. I started the Mondey joining the Promo BoF to get some insights into how Promo works and how KDE PIM can have better promotion to attract new contributors. Together we created a rough plan to focus first on the new website and then create several blog posts to promote KDE PIM. Internaly we started to create several junior jobs and are discussing who can mentor new people when they come along. This is still ongoing and hopefully new people will join the new spirit of KDE PIM and aren't overwhelmed by the big amount of repositories.

After the AGM I joined the Distros BoF and was impressed by how many Distros have a KDE focus. We started to talk about issues regarding KDE and downstream. Especially if distros are time based, they need a lot of manpower to validate if bugs have already been fixed upstream, or if it is a downstream bug. The fast release cycle of different KDE bundels (Plasma, Frameworks & Applications) makes it even more difficult to follow. Maybe this BoF helps the distros to talk more about their issues in the mailinglist directly and solutions can be found for common issues.

The next day I attend KConfig BOF and talked about issues reagarding config migration and how to store config. Also a very common issue is that you need to get updates of config values in your application. KDE PIM has some examples of bad decisions reagarding config handeling, as you can configure a lot of stuff and everything is seperated into several files. But the seperation is not well formed from the beginning - an issue that's grown with the years. It is also written down as task to do cleanups and make the configs easier to consume. Because a clearer seperation also helps users who want to move their KDE PIM from one computer to another.

In the afternoon, the KDE PIM BoF took place, where we followed up on what has been going on since the last Akademy and what new things we want to do. We discussed a lot of how we can improve the onbording for KDE PIM.
As we want to make it easier for other applications to use PIM related data, we have a long standing goal to move single parts of KDE PIM to Frameworks. For the next KDE Application 18.12 we want to push syndication into Frameworks release. If we would have more manpower, we would move those things faster to Frameworks. If you are interested, or currently using some parts of KDE PIM within your application, it is a good idea to help us getting things cleaned up and moved to Frameworks. A bigger audience can consume PIM data more easily.

In the evening I joined the LGBT & Quuer Dinner and it was nice to cook together and chat.

The next days I mostly sat down and tried to get some smaller things fixed, like the issue with the suspend icon within the logout Applet. It is very good to sit next to Kai-Uwe so he could see and propose workarounds directly. Finally he found the hard coded color in the theme and the issue is solved in the next release.

Since there were many open discussions I did not managed to write a line of code within these days - I was busy talking. Additionally I wanted to see the newest KDE PIM within Debian, so this also took some time.

On Friday I took a train back to Germany. As Volker is always interested about live data from delays for improving KItinerary, he wished me some delays. And I had a lot of delay - I arrived in Berlin 12h later than expected. I had to sleep in Dresden, as the last train from Prag leaves at 18:07 towards Berlin. And since I missed that one, I had to take a local train to Dresden and there was no train anymore to Berlin. And it wasn't really late - just midnight. I never thought about that Dresden is that badly connected to rest of Germany...
But it was nice as I stayed at a friends place, who I wouldn't have met otherwise. From the improving KItinerary it was not a success, as I only got one update from Deutsche Bahn at 23:25 - telling me that the train from Leipzig to Berlin would use another track. The more useful information, that I never would reach that train would be more useful.

Normalmente los domingos son días de relax donde podemos “perder” un poco de nuestro tiempo en temas ociosos como los videojuegos. Es por ello que es un buen día para presentaros Jugando en Linux, el blog para jugones linuxeros porque no debemos ser productivos todo el tiempo.

Jugando en Linux, el blog para jugones linuxeros

Hace mucho tiempo yo era editor de, eran tiempos en los que podía compaginar este blog con otros dos (el otro era Gaceta Digital), ambos ahora están abandonados. Ya se sabe que la bloggeresfera no pasa por su mejor momento.

No obstante, que LinuxJuegos no funcione no significa que no tengamos alternativas para que los jugones (o jugones fustrados como es mi caso) estemos informados de lo que se cuece en el mundo de los videojouegos linuxeros.

Jugando en Linux, el blog para jugones linuxerosDe esta forma me complace presentaros Jugando en Linux, el blog para jugones linuxeros que lleva un tiempo funcionando y que va creciendo tanto en contenido como en calidad.

Así que si visitáis su espacio os podéis encontrar análisis de juegos tanto libres como privativos, recopilación de noticias en su sección apt-get update, artículos de opinión, sección de hardware orientado al gamer linuxero, entrevistas, sección de ofertas y mucho más.

Y como buen blog comunitario que se precie, tiene su foro, está abierto a colaboraciones y tiene su canal en directo en Twich, en el que algunos de los miembros muestran su pericia en videojuegos de vez en cuando.

Además, tienen presencia en muchas redes sociales, con lo que no tienes excusa para no seguir sus día a día. Así los puedes encontrar en:

No está nada mal, ¿verdad?

En resumen, si eres te gusta el mundo de los videojuegos y los sistemas libres, no puedes perderte Jugando en Linux.

Week 44 in Usability & Productivity is coming right up! This week was a bit lighter in terms of the number of bullet points, but we got some really great new features, and there’s a lot of cool stuff in progress that I hope to be able to blog about next week! In the meantime, take a look at this week’s progress:

New Features


UI Polish & Improvement

Next week, your name could be in this list! Not sure how? Just ask! I’ve helped mentor a number of new contributors recently and I’d love to help you, too! You can also check out, and find out how you can help be a part of something that really matters. You don’t have to already be a programmer. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

If my efforts to perform, guide, and document this work seem useful and you’d like to see more of them, then consider becoming a patron on Patreon, LiberaPay, or PayPal. Also consider making a donation to the KDE e.V. foundation.

November 10, 2018

C++ comparison operators are usually fairly straightforward to implement. Writing them by hand can however be quite error prone if there are many member variables to consider. Missing a single one of them will still compile and mostly work fine, apart from some hard to debug corner cases, such as misbehaving or crashing algorithms and containers, or data loss. Can we do better?


In KItinerary we have a number of classes representing types. Those are fairly straightforward value types with a number of properties, to be consumed both statically (by C++ code) and dynamically (by QML, Grantlee and JSON-LD de/serialization).

As implementing getters, setters, Q_PROPERTY statements, member variables, etc for about a hundred or so properties by hand would result in an unreasonable amount of boilerplate code, this is all done by a macro (example).

So far so good, but now we’d like to add comparison operators for those types. Specifically we needed operator== for optimizing away some memory allocations in case of non-changing write operations (similar to the common pattern of not emitting change signals in setter methods on non-changes). But the thoughts below are of course also applicable to any other comparison function, not just equality.


Ideally we’d find an alternatives to writing the comparison functions by hand that would either be impossible to break or would at least not fail silently (e.g. by producing compiler errors).


One idea would be to implement the comparison functions entirely generically by leveraging the property iteration support in QMetaObject. That is we iterate over all properties with the STORED flag and compare their values. This gets the job done, but has two drawbacks:

  • Comparison happens via QVariant, which means we have to register comparison operators for all types with the meta type system. That might actually be nice to have anyway, but it is limited to less-than and equal.
  • All property values are passed through QVariant, which in some situations can have a relevant performance impact, in particular when using types that are too large for inline storage inside QVariant (causing allocations).

More preprocessor magic

Another idea could be to use more elaborate preprocessor constructs that allow for iteration over all properties. The Boost.Preprocessor library has the building blocks for this. From experience in an old pre-C++11 project attempting to catch SQL errors at compile time this works but doesn’t really lead to a nice syntax nor easily maintainable code.

A clever overloading trick from Verdigris

The solution I ended up using is inspired by Woboq’s Verdigris. The basic idea is that each property macro generates a part of the comparison function only, the comparison for its property and a call to the comparison function for the previous property. The chaining is done by overloading on a template type that essentially describes a numerical value by inheritance. A little constexpr helper functions allows us to determine the index of a property at compile time. Olivier describes this in more detail in his blog post about Verdigris implementation details.

The resulting code for KItinerary can be found here. It’s worth noting that while this might look inefficient due to the many function calls, this is all inline code in a single translation unit, so in an optimized build this ends up essentially as the hand-written comparison function would look like.

Language support?

Would it make sense to have C++ support something like bool operator==(const T&) const = default, that is let the compiler generate the implementation for us, as it can for a number of other member functions? Proposals for such a language extension exist.

There’s a bigger conceptual problem though, that one runs immediately into once the comparison operator is implemented: the semantics of comparing things. Here are a few examples:

  • Floating point numbers: how close together is “equal” depends on what those numbers represent, in my case of geo coordinates anything within a few meters is certainly more than enough. And there is the little detail that NAN does not compare equal to itself, which isn’t what KItinerary needed either, as NAN is its indicator for “value not set”.
  • QString: here the default equal comparison doesn’t distinguish between null and empty strings. That’s probably very often what you’d expect, unless you put special semantics on that distinction, such as in the NAN case above.
  • Date/time values: two QDateTime instances compare equal if they refer to the same point in time, not if they represent exactly the same information (e.g. time specified with an UTC offset vs a full IANA timezone). For KItinerary timezones are a very crucial information, so the default semantic doesn’t cut it there.

An all-or-nothing approach for compiler-generated comparison operator implementations means it’s not a viable option in case one needs more control over the semantics. That of course does not mean it is useless, but it does mean the alternative implementation techniques remain valid either way.

November 09, 2018

Make sure you commit anything you want to end up in the 18.12 release to them

We're already past the dependency freeze.

The Freeze and Beta is this Thursday 15 of November.

More interesting dates
November 29: KDE Applications 18.12 RC (18.11.90) Tagging and Release
December 6: KDE Applications 18.12 Tagging
December 13: KDE Applications 18.12 Release


Photo of a KDE Slimbook and a pint

Slimbook and a pint of Cider

The weekend of 3 and 4 November Dave and I went to staff the KDE booth at Freenode#live, in Bristol. I had never been in that corner of England before, It turns out to have hills, and a river, and tides. Often an event brings me to a city, and then out, without seeing much of it. This time I traveled in early and left late the day after the event so I had some time to wander around, and it was quite worthwhile.

Turns out there is quite a lot of cider available, and the barman gave me an extensive education on the history of cider and a bit on apple cultivation when I asked about it. Sitting down with a Slimbook and a pint can be quite productive; I got some Calamares fixes done before the conference.

Photo of table with KDE logos

Our stand, before visitors arrived

We (as in the KDE community) have invested into getting booth materials ready for this kind of events, so we quickly had Konqui peeking at visitors and Plasma running on a range of devices (no Power9 this week, though). Dave had 3D-printed a KDE logo we stuck to the top of the monitor, and had a pile of leaflets and stickers (KDE, neon, Krita, GCompris, and some Wiki To Learn) to hand out.

Next to our stand was MineTest, with a demo and they sat hacking at the code of the game for most of the weekend. On the other side, Freenode themselves were handing our stickers and other goodies.

Photo of Dave talking with people

The hallway track

A conference booth isn’t just about giving away goodies, though, and we spent the weekend, 9-to-5, talking with people about the KDE community and its software products. Plasma could be seen — and played with — on the machines we had at hand, and we did some small application demo’s. As usual, people told us they used i3 — and our response as usual is that Free Software on the desktop is better than non-free software. Some people had last used KDE in 2010 or so, so we could show how the different parts now operate independently and more flexibly — and how Plasma is now pretty darn lightweight.

Here in the photo is Dave extolling the virtues of something. (I’ve edited the photo to make some people in the background un-recognizable by pasting Dave’s eyeball over their faces — I forgot to ask permission to post)

Photo of stage with presentation

Conference track

.. and a conference isn’t just about the booths and vendor stands, either. It’s about the talks. Here’s one I sat in on about business models and how licensing affects the available models (in particular with reference to recent license changes in some projects). The KDE community is interesting because it’s not one-community-one-company like a lot that I see. We have a collection of small and medium companies building on, and building with, the KDE community’s software products. I think that’s healthy and generally happy. No licensing gotcha’s for us when using Qt under the LGPL version 2.1 and KDE’s Frameworks also under the LGPL.

Two talks I would like to single out are Leslie Hawthorn and VM Brasseur, (those are YouTube links). Neither are technical talks, but social talks, about what we (as Free Software contributors) do and why, and social issues we all face — and how to bring Software Freedom to more people.

A concept I didn’t know existed was platform shaming. See above: there’s lots of ways to use Free Software from the KDE community, in combination with i3, or on Windows, and on Free Software operating systems. Those are all OK.

Photo of Dave with laptop

Bugfixing Dave

I’d like to thank Dave for being a great booth- room- and dinner-mate, and Christel and the Freenode#live crew for a wonderful well-organized weekend. Not to mention the speakers and attendees who made it a happy and instructive time.

Kdenlive 18.08.3 is out with updated build scripts as well as some compilation fixes. All work is focused on the refactoring branch so nothing major in this release. On the other hand in the Windows front some major breakthroughs were made like the fix of the play/pause lag as well as the ability to build Kdenlive directly from Windows. The next milestone is to kill the running process on exit making Kdenlive almost as stable as the Linux version.

In other news, we are organizing a bug squash day on the first days of December. If you are interested in participating this is a great opportunity since we have prepared a list of low hanging bugs to fix. See you!




  • Fix finding MLT data in build-time specified path. Commit.
  • Fix play/pause on Windows. Commit.
  • Try catching application initialization crashes. Commit.
  • Fix MinGW build script misses. Commit.
  • Backport some Shotcut GLwidget updates. Commit.
  • Fix MinGW build. Commit.
  • Install doc files. Commit.
  • Build scripts for Linux & Windows. Commit.
  • Backport packaging scripts. Commit.
  • Fix MinGW build. Commit.
  • Backport fix for incorrect bin rename. Commit. See bug #368206

Have you ever wanted to test if your application works on ARM, but don’t want to make an image and launch a real device, or wanted to test an architecture you don’t even have hardware for? I have been following a set of instructions I have gathered from various online sources, and have been teaching others how to do the same, but I want to collect it all here and publish it here for you to follow as well. While writing this I will be following the instructions myself for an architecture I haven’t done this for before.

The secret is of course QEMU, but to make testing easier I will set it up so that QEMU doesn’t simulate an entire system, but runs foreign applications as if they were native inside my existing X11 desktop. This is possible through the qemu-user binaries, which can run statically linked executables or dynamically linked ones if you are in a properly set up chroot.

Setting up chroot

So how do you get this properly set up chroot? There are various ways depending on the Linux distro. I personally use Debian, and the instructions here will be almost identical to what is done on Ubuntu. If you use Suse or RedHat, I know you can find official guidelines on setting up a chroot for qemu.

First, get the dependencies (as root or sudo) :
apt-get install binfmt-support qemu qemu-user-static debootstrap

Most of these are just the tools needed, and binfmt-support is configuration glue what will make Linux launch ELF executables with non-native architectures using qemu, which is another piece of the magic puzzle.

For my example I am testing while writing this, I will be targeting the IBM mainframe architecture S/390x and will also need the cross-building tools for that as well. I can get all of those on Debian by just pulling in the right cross-building g++ (as root or sudo) :
apt-get install g++-s390x-linux-gnu

S/390x is interesting for me because Debian dropped official support for big endian PPC64, so I need a new way of testing that Qt works on 64bit big-endian platforms.

Now go to where you want your sysroots installed, and run debootstrap. Debootstrap is the Debian tool for downloading and installing a Debian image into a sub-directory
(as root or sudo) :
debootstrap stable --arch s390x stable debian-s390x

Next prepare it for being a chroot system (as root or sudo) :
mount --rbind /dev debian-s390x/dev/
mount --rbind /sys debian-s390x/sys/
mount --rbind /proc debian-s390x/proc/

Enter the chroot (as root or sudo) :
chroot debian-s390x

If you run ‘uname -a’ here you will now get something like:
Linux hostname 4.x.x-x-amd64 #1 SMP Debian 4.x.x-x (2018-x-x) s390x GNU/Linux

In other words, a native AMD64 kernel with x390x userland! Every command you execute here will be using s390x binaries in the chroot, but using the native kernel for system calls. If you launch an X11 app, it will be using the X11-server running natively on your machine already.

Prepare chroot to be a sysroot

To build Qt, we also need all the Qt dependencies inside the chroot. In Debian we can do that using ‘apt-get build-dep’.

Edit debian-s390x/etc/apt/sources.list and add a deb-src line, such as:
deb-src stable main

Install the Qt dependencies (inside chroot as root):
apt-get update
apt-get build-dep qtbase-opensource-src

Finally, for the setup we need to make sure it works a sysroot for cross-building by replacing absolute links to system libraries with relative ones that work both inside and outside the chroot (inside chroot as root):
apt-get install symlinks
cd /usr/lib/
symlink -rc .

Building Qt

We can now build Qt for this sysroot. If you want to test you own applications, you could also install an official prebuilt Qt version from Debian, and build against that.

Configuring Qt for cross-building to a platform like that looks like this on Debian, and only needs a few changes to work on other platforms:
$QTSRC/configure -prefix /opt/qt-s390x -release -force-debug-info \
-system-freetype -fontconfig -no-opengl \
-device linux-generic-g++ -sysroot /sysroots/debian-s390x \
-device-option CROSS_COMPILE=/usr/bin/s390x-linux-gnu-

You can remove the -no-opengl argument if you want to test OpenGL using the mesa software implementation, but otherwise I don’t recommend using OpenGL inside the chroot.

If everything is setup correctly you don’t need to specify ‘-system-freetype -fontconfig’. It is just there to catch failures in pkg-config, so we don’t end up building a Qt version that requires manually bundling fonts.

In general cross-compiling with Qt always looks similar to the above, but note that if you are cross-building to ARM32, it looks a little bit different:
$QTSRC/configure -prefix /opt/qt-armhf -release -force-debug-info \
-system-freetype -fontconfig -no-opengl \
-device linux-arm-generic-g++ -sysroot /sysroots/debian-armhf \
-device-option DISTRO_OPTS=hard-float \
-device-option COMPILER_FLAGS='-march=armv7-a -mfpu=neon' \
-device-option CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf-

Notice that ARM32 has a specific device name (linux-arm-generic-g++ instead of linux-generic-g++) and needs to have a floating-point mode set. Additionally, for older embedded architectures, it is generally a good idea to specify COMPILER_FLAGS to select a specific architecture. You need to pass compiler flags as a device-option, because the normal way of specifying QMAKE_CFLAGS and QMAKE_CXXFLAGS after configure options sets the host compiler flags, not the target compiler flags. If you need more complicated options, you should make your own qmake device target. You can always base it of linux-generic-g++ for good defaults.

With Qt configured like this, you can build it as usual and run make install to have the libraries installed into the /opt directory under the chroot.

Issue encountered; as I built qtbase, I hit a linking error:
qt5/qtbase/src/corelib/global/qrandom.cpp:143: error: undefined reference to 'getentropy'

The problem turns out to be that my cross-building tools have libc6 2.27 while the sysroot has libc6 2.24. The best thing to do would be using the same libc version on both sides. However, as they are fully compatible, except for newer features in one, I chose to just disable this feature in Qt. I accomplished this by calling the configure command again, this time with -no-feature-getentropy added.

With this change, everything I tried building built and installed without further issues.

Run a Qt application

To get some examples to test, go to the folder of the example in the build tree and run ‘make install’. For instance, my standard example for widgets:
cd qtbase/examples/widgets/richtext/textedit
make install

Then (inside chroot as root, assuming you have created a testuser):
su - testuser
export DISPLAY=:0
/opt/qt-s390x/examples/widgets/richtext/textedit/textedit -platform xcb

And it just works…
The -platform xcb argument is needed because the default for embedded builds is using the eglfs QPA. I am assuming you are developing on X11 and want the jaw-dropping experience of having a foreign architecture Qt application just launch like a normal Qt app.

In this setup, the applications running in QEMU will be much faster than under a full system emulation, because the kernel and the X11 server are still the native ones, and thus running at normal speed. However, for X11 it means sometimes having a few oddities, as there can be client-server mismatch in endianness. While it is supposed to be supported, it is such an edge case that it often has issues. This is the reason why QT_XCB_NO_MITSHM=1 is set. Otherwise, we would hit an issue with passing file descriptors between client and server, which is likely a bug in libxcb. If we were testing a little-endian architecture like arm64 or riscv instead, the environment variable would not be needed.

So that is it, quite a few steps, but most only done once. And as I wrote this, I followed the same instructions for a rather uncommon and not officially supported platform, and only hit two issues with easy work-arounds.

The post Testing Qt on Emulated Architectures Using QEMU User Mode appeared first on Qt Blog.

November 08, 2018

(Post in french, english version below)

Le mois dernier est sorti la seconde édition de mon livre “Dessin et peinture numérique avec Krita”. Je viens juste de recevoir quelques copies, le moment est donc parfait pour en parler rapidement sur mon blog.

J’avais écrit la première édition pour la version 2.9.11 de Krita, il y a bientôt trois ans. Beaucoup de choses ont changées depuis, j’ai donc mis à jour cette seconde édition pour la version 4.1.1, et ajouté quelques notes supplémentaires concernant de nouvelles fonctions.

Aussi, mon éditeur a de nouveau travaillé sur la mise à jour et l’amélioration de la traduction Française de Krita. Merci encore aux éditions D-Booker pour leur contribution ��

Vous pouvez commander ce livre directement sur le site de l’éditeur, au format papier ou numérique.



Last month was released the 2nd edition of my book “Dessin et peinture numérique avec Krita”. I just received a few copies, so now is time to write a little about it.

I wrote the first edition for Krita 2.9.11, almost three years ago. A lot of things have changed, so I updated this second edition for Krita version 4.1.1, and added a few notes about some new features.

Also, my publisher worked again on updating and improving the french translation of Krita. Thanks again to D-Booker edition for their contribution ��

You can order this book directly from the publisher website, printed or digital edition.

November 07, 2018

Jings no wonder people find computer programming scary when the most easily accessible lanugage, JavaScript, is also the most messy one.

Occationally people would mention to me that the categories on Planet KDE didn’t work and eventually I looked into it and it mostly worked but also sometimes maybe it didn’t.  Turns out we were checking for no cookies being set and if not we’d set some defaults for the categories.  But sometimes the CDN would set a cookie first and ours would not get set at all. This was hard to recreate as it didn’t happen when working locally of course.  And then our JavaScript had at least three different ways to run the initial-setup code but there’s no easy way to just read a cookie, madness I tell you.  Anyway it should be fixed now and set categories by default but only if it hasn’t set some before so you may still have to manually choose which you read.

In the Configure Feed menu at the top you can select to read blogs in different languages.  By default it shows only blogs in English, as well as Dot News, Project News and any User blogs who have asked to be added (only two are listed in our config).  You can also show blogs in Chinese (also only 2 listed), Italian (none listed), Polish (one), Portugese (two), Spanish (four but kdeblog by Jose is especially prolific) or French (none).  Work to be done includes working out how to make this apply to the RSS feed.

Facebooktwittergoogle_pluslinkedinby feather

We are pleased to announce that the 3rd bugfix release of Plasma 5.14, 5.14.3, is now available in our backports PPA for Cosmic 18.10.

The full changelog for 5.14.3 can be found here.

Already released in the PPA is an update to KDE Frameworks 5.51.

To upgrade:

Add the following repository to your software sources list:


or if it is already added, the updates should become available via your preferred update method.

The PPA can be added manually in the Konsole terminal with the command:

sudo add-apt-repository ppa:kubuntu-ppa/backports

and packages then updated with

sudo apt update
sudo apt full-upgrade



Please note that more bugfix releases are scheduled by KDE for Plasma 5.14, so while we feel these backports will be beneficial to enthusiastic adopters, users wanting to use a Plasma release with more stabilisation/bugfixes ‘baked in’ may find it advisable to stay with Plasma 5.13.5 as included in the original 18.10 Cosmic release.

Should any issues occur, please provide feedback on our mailing list [1], IRC [2], and/or file a bug against our PPA packages [3].

1. Kubuntu-devel mailing list:
2. Kubuntu IRC channels: #kubuntu & #kubuntu-devel on
3. Kubuntu ppa bugs:

November 06, 2018

Some years ago I added an embedded Twitter feed to the side of Planet KDE.  This replaced the earlier feed manually curated feeds from and twitter which people added but had since died out (in the case of and been blocked (in the case of Twitter).  That embedded Twitter feed used the #KDE tag and while there was the odd off topic or abusive post for the most part it was an interesting way to browse what the people of the internet were saying about us.  However Twitter shut that off a few months ago which you could well argue is what happens with closed proprietary services.

We do now have a Mastodon account but my limited knowledge and web searching on the subject doesn’t give a way to embed a hashtag feed and the critical mass doesn’t seem to be there yet, and maybe it never will due to the federated-with-permissions model just creating more silos.

So now I’ve added a manually curated Twitter feed back to Planet KDE with KDE people and projects.  This may not give us an insight into what the wider internet community is thinking but it might be an easy way to engage more about KDE people and projects as a community.  Or it might not, I haven’t decided yet and I’m happy to take feedback on whether it should stay.

In the mean time ping me to be added to the list or subscribe a bug on to request you or someone you know or or your project be added (or removed).  Also volunteers wanted to help curate the feed, ping me to help out.

Facebooktwittergoogle_pluslinkedinby feather

Welcome to Part 4 of my Blog series about Sharing Files to and from mobile Qt Apps.

Part 1  was about sharing Files or Content from your Qt App with native Android or iOS Apps,
Part 2 explained how to share Files with your Qt App from other native Android Apps,
Part 3 covered sharing Files with your Qt App from other native iOS Apps.
Part 4 implements FileProvider to share Files from your Qt App with native Android  Apps.



FileProvider Content URIs

Starting with Android 7 (SDK 24) you cannot use File URIs anymore to share Files to other Android Apps – you must use a FileProvider to share Files using a Content URI.

To avoid this you could use Target SDK 23 as I did for the first parts of this blog.

But starting November 1, 2018 Google requires for updates to Apps or new Apps on Google Play to target Android 8 (Oreo, API level 26) or higher, so there’s no way to share Files on Android without using a FileProvider.

Here’s the workflow to update your sharing App from File URI to FileProvider with Content URI.

 Android Manifest

As a first step we have to add some info to AndroidManifest.xml :

<application ...>
<provider android:name=""
android:grantUriPermissions="true" android:exported="false">
<meta-data android:name=""

The Provider needs the Libraries. To include them, please add to your build.gradle file:






This will only work if you have installed the Android Support Repository.

In your QtCreator Preferences → Devices → Android, you get easy access to Android SDK Manager. Please check that under Extras the Android Support Repository is installed:


In your Android Manifest you see a reference to resources @xml/filepaths. You have to add a new File filepaths.xml under android/res/xml:


The content of filepaths.xml:

<paths xmlns:android="">
<files-path name="my_shared_files" path="share_example_x_files/" />

This is the mapping to the folder where Android will find your File to be shared. This Folder is inside your AppData Location. Remember: in blog part 1 we used a shared documents location to provide Files to other apps. Now for Android we don’t use a shared location but a path inside our AppData location. Starting the app I always check if the folder exists:


#if defined (Q_OS_IOS)
QString docLocationRoot = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).value(0);
#if defined(Q_OS_ANDROID)
QString docLocationRoot = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).value(0);
mDocumentsWorkPath = docLocationRoot.append("/share_example_x_files");
if (!QDir(mDocumentsWorkPath).exists()) {
// create the QDir


Last important part in Android Manifest specifies an Authority:


This name must be unique – so it’s a good idea to use your package name and append .fileprovider.

 QShareUtils Java Code

As a last step you must do some small changes in

Import FileProvider and ShareCompat from



Reference the Authority as defined in AndroidManifest:

private static String AUTHORITY="org.ekkescorner.examples.sharex.fileprovider";

You must also create your Intents in a different way:

// the old way: Intent sendIntent = new Intent();

Intent sendIntent = ShareCompat.IntentBuilder.from(QtNative.activity()).getIntent();

You’re done ��

As a positive side effect, it’s now much safer to share Files because they are inside your App Sandbox located and not in public shared Folder.


Here‘s a short Overview about the Android FileProvider implementation:



Some issues from Sharing Files to other Android Apps

Android: Sharing to Google Fotos App

If you try to edit an Image in Google Fotos App using the FileProvider, the Fotos App appears in the list of available Apps, but then reports that the File cannot be edited. Viewing works as before.

Only current workaround is to use another Foto Editing App.


Thanks again to Thomas K. Fischer @taskfabric for his valuable input on this topic.

Have Fun

In the first part of this blog series, I told you that I needed sharing between Apps on Android and iOS for a DropBox – like customer App. This App is running very well since some months as inHouse App at customer site, so it’s not publicly available. But my example App is Open Source and now it‘s a good time to download current Version from Github, build and run the Sharing Example App.

This was the last part of this blog series, but stay tuned for some other blogs about „Qt mobile Apps in the Enterprise“ and „QML Camera on Android and iOS“.

The post Sharing Files on Android or iOS from or with your Qt App – Part 4 appeared first on Qt Blog.

This year’s North American stop on the Qt World Summit world tour was in Boston, held during the Red Sox’s World Series win. Most of us were glad to be flying home before celebration parades closed the streets! The Qt community has reason to celebrate too, as there’s an unprecedented level of adoption and support for our favorite UX framework. If you didn’t get a chance to attend, you missed the best Qt conference on this continent. We had a whole host of KDABians onsite, running training sessions and delivering great talks alongside all the other excellent content. For those of you who missed it, don’t worry – there’s another opportunity coming up! The next stop on Qt’s European tour will be with Qt World Summit Berlin December 5-6. Be sure to sign up for one of the training sessions now before they’re sold out.

Meanwhile, let me give you a taste of what the Boston Qt World Summit had to offer.

Strong Community

One thing was clear: after 23 years, Qt is still going strong. The Qt Company and the greater Qt community have contributed 29,000 commits and fixed 5000 bugs between Qt 5.6.3 and the current head branch. Very kindly and much appreciated, Lars Knoll, CTO of the Qt Company, recognized KDAB as the largest and longest external contributor to the ever-growing Qt codebase in his opening keynote. All of this effort – and most of the things discussed in this blog – come to fruition in Qt 5.12 LTS, with an expected release date at the end of November.

Qt is Everywhere

Training day @ QtWS18

Training day @ QtWS18

Another observation is that Qt is everywhere. Lars shared that it has now been downloaded five million times, a huge increase from three and a half million just two years ago. The more than 400 attendees at Qt World Summit Boston came from over 30 industries, representing academia, automotive, bioscience, defense, design, geo imaging, industrial automation, energy and utilities, and plenty more. All the training sessions and the talks were well attended, most to full capacity with eager attendees standing at the back.


Cross-platform Qt

Is there a reason for this upsurge in Qt interest? Multi-platform is now a critical strategy for nearly every product today. Since Qt provides comprehensive support for mobiles, desktops, and embedded, it has become a top choice for broad cross-platform UX development. It’s not enough to release a cool, innovative product – if it doesn’t link to your desktop or provide a mobile-compatible connection, it often can’t get off the ground.

Qt for Microcontrollers

Qt for Microcontrollers

While there weren’t too many new platforms announced that Qt doesn’t already run on, there was invigorated discussion and demoing at the low end of the embedded spectrum. Qt on Microcontrollers is a new initiative, trimming Qt down to run on smaller MMU-less chips like the Arm Cortext-M7. While still needing some optimization and trimming to get to the smallest configurations, Qt on Microcontrollers currently takes 3-10MB of RAM and 6-13MB of ROM/Flash, making it an attractive option to create one code base that can address a range of products regardless of form factor.

Broad Offering

Another reason behind Qt’s increasing prominence is the breadth of the Qt offering. From 3D through design to web, there are many new improvements and components that make Qt a safe choice for teams that need to continually expand their product’s capabilities. While there have been a host of new additions to the Qt portfolio, here are a few of the more notable ones.

Qt 3D Studio

In a programmer’s worldview, design is often a nice-to-have, yet not a must-have. I guarantee that perspective will change for anyone who had the good fortune of attending Beyond the UX Tipping Point, the keynote from Jared Spool, the so-called Maker of Awesome from Center Centre.

Kuesa preview

Kuesa preview

If you weren’t able to attend the conference, I recommend you watch Jared’s video. Once you do, you’ll be glad that the Qt Company just released Qt Design Studio to help build great interfaces. KDABian Mike Krus also gave a tantalizing preview of Kuesa, a new KDAB tool architected to marry the worlds of design and development. We’ve got some info on our Kuesa webpage (and a screenshot here) – keep an eye out for more to come soon.

Qt for Python

As an aficionado of the language, I’ve always found Python seriously missing UX support – there are solutions but none that are ideal. With the release of Qt for Python however, Python finally has a capable, regularly maintained UI tool with a huge community. This includes integration into the Qt Creator IDE; it will now go from a technical preview to officially supported in Qt 5.12 and beyond. I predict that this will soon make Qt the UI framework of choice for Python – happy news for the many folks who prefer C++ be neatly tucked under the covers.


There are some clear benefits to running code within a browser recognized by cloud companies – lightweight (and often no) installation required, access everywhere to centralized, managed, and backed-up data stores, along with immediate and hassle-free updates. Those same benefits have now come to Qt with the support of WebAssembly. This lets you compile your Qt application (and with C++ too, not just QML/Qt Quick, mind you) into a WebAssembly compatible package to be deployed on a web server. This technology is now in tech preview, but it’s an active project that will be able to expand the reach of Qt into the cloud realm.

Building Bridges

Frances and Ann #color4cancerMaybe all this flurry of Qt activity is also because it provides a common platform that can build a bridge between disparate disciplines like art, technology, and research. An example of this is nanoQuill, a collaboration between KDAB, the Qt Company, a biotech company: Quantitative Imaging Systems (Qi), and Oregon Health & Science University that crowd-sources electron microscope images of cancer cells for people to artfully color, thus #color4cancer.

Based on Qi’s vision of merging programming and computer graphics with microscopy, nanoQuill built an application to use machine learning on these human colored images to discern cell micro structures, which in turn helps us understand how tumour cells develop resistance to escape cancer-targeting drugs.

Final #color4cancer cell

Final #color4cancer cell

Currently, nanoQuill allows anyone to #color4cancer and post their artwork via their website gallery, a coloring book, nanoQuill: The Coloring Book of Life published in December of 2017, and will soon be in a form of an app. We had a large nanoQuill poster in our booth that people colored throughout the event, allowing Qt World Summit attendees to truthfully say they were not only learning about the latest Qt developments, they were helping fight cancer with art.

CNC Craftspeople

Shaper Origin in action

Shaper Origin in action

Another great merger of art and technology was seen at our KDAB customer showcase from a company called Shaper Tools. If you think you saw a table full of dominos at the edge of our booth, we weren’t passing the time playing – those “dominos” were actually optical registration tapes that allowed Shaper’s hand-held CNC machine to perfectly cut complex shapes. Look at some of the amazing projects that woodworkers have created using the Shaper Origin, and you’ll see that advanced technology doesn’t have to replace master craftsmanship – it can enable it.


Whether you attended Qt World Summit 2018 to learn about the details of C++ and Qt or the industry trends in medical, automotive, and IoT, there was lots in Boston for everyone. If you care to share in the comments, we’d love to hear what your favourite session was and the best thing you learned.

The post Qt World Summit 2018 Boston appeared first on KDAB.

November 05, 2018

Chrys took up the role of coordinator, fixer and new master of KDE accessibility, which I think is just fantastic. We have been working on what he decided to be most important, mostly chrys fixing issues to make things work with Plasma and screen readers. After getting Orca to read desktop icons he spent quite some time to improve the various start menus.

With so much fresh energy around I started poking at KWin, which was a bit scary, to be honest. It was fun to read code I hadn’t looked at before. In the end, after I spent a while working on a huge work-around, it turned out that we could enable the task switcher to work with relatively little code added. The main issue was that KWin does really not want to give focus to the task switcher. My first attempt was to write sub-classes of QAccessibleInterface for everything in KWin. That started to work, but during some debugging I realized that KWin was actually creating the regular representations for its UI, it was just not properly announcing them to Orca. Thus I threw away my almost complete prototype. At least I verified that it’s possible to create an entire Qt UI for screen readers only, disconnected from the actual UI. Thanks to QAccessible::installFactory it is nowadays pretty easy to instantiate custom representations (subclasses of QAccessibleInterface). Once that was done, I started over and made the task switcher think it’s an active window without letting X11 or Wayland know. That way we get the right dbus messages sent to Orca, when alt-tabbing through the windows. Thanks David, Martin, Roman and Vlad for your input :)

More work is needed on Plasma when it comes to keyboard usability – getting the focus onto the panel and the various notification areas. I’m sure some great ideas are already being worked on, but I can see this easily as a blocker going forward. Configuring the network, checking the battery status and other tasks are really important after all.

I wrote the basics for Kate to work with screen readers in 2014 and it seems like there are some improvements needed when working with Orca, luckily we got some help from Joanie (who maintains Orca) to figure out what goes wrong when navigating by lines. Now it’s just to verify the findings and get the issues sorted out.

If you have a bit of time and want to help, we need someone with good English skills to help clean up the wiki. Good written instructions are really helpful when getting blind users to try Plasma for the first time. We’d also be happy if more people joined in testing and improving things. Join the KDE Accessibility mailing list to join the fun.

Welcome a new kid on the block from Latte land... !

Window Buttons Applet presents its first release to the public. I always wanted to be able to make my top panel to behave as a window titlebar whenever it is needed. To achieve this some special applets are needed and of course specific behavior from the top panel.

- Application name and icon
         (you can find some in the kde store)
- Global menu
         (official plasma applet is perfect for this)
- Window Buttons
         (it was missing so now you can welcome it)

Top Panel Behavior:
- Drag active window by dragging the empty space of the panel
         (Latte Git version supports this by default)
- Double-click on the empty space of the panel it maximizes/restore the active window
         (Latte Git version supports this by default)

slide in/out animation

  • Current mode, in order to automatically update button appearance according to plasma current window decoration
  • Choose the decoration theme you would like to use for the buttons
  • Support Minimize/Maximize/Close/OnAllDesktops buttons
  • Support icon-based Aurorae themes such as .svg and .svgz
  • Identify system's available decorations automatically
  • Option to show buttons only when there is an active-maximized window in the current screen
  • Slide out/in animation for showing/hiding buttons
  • Reorder buttons according to user preference
  • Various appearance settings in order to adjust margins. This way you can also change the button size
  • Automatically discover Aurorae theme settings in order to make buttons look identical to window buttons
  • Support new Latte coloring mechanism from Latte git version
  • a beautiful and easy to use settings window

settings window

Project Page

November 04, 2018

Today we released version 1.10 of the KDE Connect Android app. Therefore it’s time again to share what we’ve been working on.

Targeting Android Oreo

As of this month app updates uploaded to Google Play need to target Android 8. This has several implications. Targeting Oreo comes with an updated Support Library, which forces us to drop support for Android 4.0 and below. According to our Google Play data this will affect approximately 400 users. We are very sorry about that, but these users won’t receive further updates. Furthermore, Android Oreo introduced some restrictions in regard to apps running in the background. In the future in order to be able to run in the background KDE Connect needs to show a persistent notification. The good news is that you can hide the notification. The (slightly) bad news is that we cannot do it by default. To hide the notification you need to long-press it and switch it off. Other notifications from KDE Connect are unaffected by this.

1.10 Changes

These are the main changes of version 1.10. Not mentioned are countless small improvements and under-the-hood changes.

Mouse input now works with the same speed independent from the phones pixel density.

The media controller now allows stopping playback.

Run command supports triggering commands using kdeconnect:// URLs. Useful for integration with NFC tags and 3rd-party apps.

The notification filter allows quickly (de-)selecting all apps.

Several settings scatterd across the UI have been bundled into a single settings screen.

A lot of work has gone into how we handle SMS on the Android side in preparation for something huge. Stay tuned ��

Other changes

The desktop side has improved as well since my last post.

The windows build of KDE Connect gained support for keyboard input.

The plasmoid gained a couple of additions. In my last update I mentioned that it is possible to run commands from there. It is now also possible to lauch the command setup from there. Furthermore it is now possible to select files to share them from there.

The Linux Mobile App gained many visual improvements and features. It now supports sharing files and controlling the system volume.

If you are using Itinerary you can send booking information from the PC directly to the phone via KDE Connect.

It is now possible to send files directly from Pantheon Files (and other Elementary apps) and Thunar via KDE Connect.

Again, there are countless other improvements that I did not explicitly mention.

A big thanks to all people who contributed to this!


The KMyMoney development team is proud to present version 5.0.2 of its open source Personal Finance Manager.

Although several members of the development team had been using version 5.0.1 in production for some time, a number of bugs and regressions slipped through testing, mainly in areas and features not used by them.

These have been reported by many of you and the development team worked hard to fix them in the meantime. The result of this effort is the new KMyMoney 5.0.2 release.

Despite even more extensive testing than usual, we understand that some bugs may have slipped past our best efforts. If you find one of them, please forgive us, and be sure to report it, either to the mailing list or on

From here, we will continue to fix reported bugs, and working to add many requested additions and enhancements, as well as further improving performance.


Many thanks go out to KDE’s sysadmin team. Ben in particular supported us with numerous hours to get daily builds onto the KDE CI system. This even includes MS-Windows installers. Please feel free to visit our overview page of the CI builds at

Thanks also to those users who provided valuable support by sending in test files saved by earlier versions as far back as KMyMoney 4.6.6. Using these files we were able to fix some upgrade problems.

The details

Here is the list of the bugs which have been fixed:

  • 283784 when using the ‘amount entry widget’ in the ledger view, it hangs off the screen
  • 340244 Update the documentation screenshots
  • 340902 Saving anonymous file loses relation between investment accounts and brokerage accounts
  • 343878 investment account does not have key value pair for lastImportedTransactionDate
  • 344409 User is asked to create a new category in splits table if change is aborted
  • 368190 “Update Stock and Currency Prices” doesn’t work when base currency is South Korean Won(KRW)
  • 385180 investactivities.cpp: 8 * Redundant condition
  • 390750 Entering fees in Investment account (ie broker fee) doesn’t appear with transaction
  • 391251 Double free or corruption when creating a new asset account.
  • 392110 Missing 2 .h files in /usr/include/kmymoney
  • 392372 5.0.1 is shown as 5.0.0 in splash screen and about dialog
  • 392407 Home page Net Worth Forecast Not correct
  • 392477 Cannot create new investment
  • 392519 Reports Configure dialog uses a “Find” button instead of an “Apply” button.
  • 392603 OFX – Mapping Account – Last Update Change causing Update Account greying – Online Settings disappears
  • 392735 Crash on viewing or trying to add data into any account
  • 393168 [Patch] Fix working week in 5.x/master
  • 393752 Budgeted vs. Actual report: Budgeted values broken if ticks selected to Bi-Monthly, Quarterly or Yearly
  • 394384 MySQL connection error with dbname “KMyMoney”
  • 394394 problems adding securities to investment accounts
  • 395025 csv writer generates invalid file in case field delimiter is used in any field
  • 395040 CSV Export of Investment Accounts does not issue transactions on non-English kmymoney installations
  • 395100 Last selected view
  • 395291 KMyMoney gitt head master, crash on opening any account
  • 395459 Ledger Input: Category Field
  • 395985 QIF Export manually typing file path adds .qif after every character
  • 396174 Cannot create new investment
  • 396405 Last digit of date field is obscured by “details column” in ledger view
  • 396759 CSV: ordering of buttons when finishing wizard
  • 396886 Online Banking Behavior Change Since 4.8
  • 396987 Payee “Suggest a category” does not work
  • 397020 Opening dates in “all dates” plot
  • 397021 Net worth does not appear
  • 397023 Default color of imported transaction in the ledger
  • 397025 Kmymoney version in help menu, splash screen and apt are different
  • 397436 Net worth forecast graph in new file shows formatting problem
  • 397457 double clicking in ledger activates edit, but does not select transaction clicked on
  • 397675 cannot connect to kmysql database because of prepended slash
  • 97824 Limit in number of securities
  • 398168 écran d’accueil
  • 398394 Account information report crashes
  • 398409 KMyMoney does not prompt for password when connecting to database
  • 399244 KMyMoney does not work properly when changing from one file to another
  • 399309 “show balance chart” does not show 3 months forecast in the future anymore
  • 399378 Unable to Update Prices
  • 399673 importer file selector does not show QIF files and does not remember last import directory

Here are some of the new improvements found in this release:

  • 396797 Online web source “KMyMoney Currency” does not support price pairs without decimal
  • Speedup loading of home page
  • KDE binary factory builds for MS-Windows installer
  • Add color coding of pos/neg amounts for ‘posted value’ column
  • Fix online credit transfer creation
  • Some features have been moved to plugins so that they can be turned off if unused
  • Provide correct version information for all shared object files
  • Improved handling of “Save as…” logic
  • Allow to add a timezone offset for OFX import on account basis
  • Moved GPG key handling to XML plugin
  • Accounts can now take a URL for direct access of the online banking web-site
  • Support more than one online banking provider during update
  • Added option to keep linebreaks in memo of AqBanking transaction imports
  • Remove reference to online balance when unmapping account
  • Added feature to make DB password visible during input

For a full list of the changes please check out the changelog. We highly recommend upgrading to 5.0.2.

The KMyMoney Development Team

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


  • Correction bug 398683: Periodic crashes on dashboard
  • Correction bug 397611: [ERR-5]: Format de date non pris en charge importation boobank
  • Correction bug 399480: Grammar mistake in .po file / - s missing in simple
  • Correction bug 399482: Wrong plural form in .po-File
  • Correction bug 399483: Spelling mistake in .po file "Transfert" should be "Transfer"
  • Correction bug 399672: Modifying multiple selected operations into transfers creates empty category and tracker if not identical
  • Correction: Ofx import must import FEE as debit
  • Correction: Document migration fails if format is "d.MM.yy 'г" (see:
  • Correction: Inconsistency in "Incomes vs Expenditures" on sub operations with trackers
  • Correction: Build on windows
  • Correction: Use CPU instead CPU for QML (needed for printing)
  • Correction: Set background color on print to avoid print preview with black background on dark theme
  • Feature: Selection above, below or parent when delete an object
  • Performances: Solve performance issue due to new feature : More tooltips on "Operations" table

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 too !

If you want to help me to industrialise the windows version, you can get it from here:

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 !

Get ready for the flood, because have loads of amazing stuff for you in this week’s Usability & Productivity update! There are a ton of pictures today, so hold onto your hats and be glad you don’t have to access the internet over a 56k modem (unless you do have to access the internet with a 56k modem, in which case, my condolences):

New Features


UI Polish & Improvement

Next week, your name could be in this list! Not sure how? Just ask! I’ve helped mentor a number of new contributors recently and I’d love to help you, too! You can also check out, and find out how you can help be a part of something that really matters. You don’t have to already be a programmer. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

If my efforts to perform, guide, and document this work seem useful and you’d like to see more of them, then consider becoming a patron on Patreon, LiberaPay, or PayPal. Also consider making a donation to the KDE e.V. foundation.

November 03, 2018

We continue adding support for more data formats that can be imported into LabPlot. As part of the upcoming release we add the support for JSON file and for ngspice raw file format which we want to introduce in this short blog post.

After the selection of a JSON file in the “Import File” dialog, its content is shown in a tree view in a manner that many user will be familiar with from other JSON viewers. The relevant parts in a such a JSON file that one usually wants to visualize are arrays and objects. Once the root element that needs to be imported is selected, LabPlot automatically recognizes its type and the type of its children and generates a two dimensional preview of the data to be imported. This works the same for arrays

JSON array
Preview of JSON array

as well as for JSON objects

JSON object
Preview of JSON object

After such a local file was imported, the plotting of data can be done as usual. The part that is of more practical interest, namely the import of data from online web services like stock prices, weather data, data monitoring services, etc., still needs to be implemented. Such services usually exchange the data in JSON format and the features described above can be considered as the preparational steps also in this direction. This is something for the near future.

In the previous release we made the support for live data available. To demonstrate this feature we used an example based on the results of calculations done in Gnucap – an open-source circuit simulator. The Gnucap simulation was controlled by a small PyQt GUI and the results where written out to an ASCII file which was then consumed by LabPlot (import of live data and its visualization). To further support this community, we decided to add the support for native raw format of ngspiceanother open-source application for circuit analysis. We read both flavors of it – binary and ASCII. When opening such a file, LabPlot auto-detects the ngspice raw format and selects the proper import filter.

To demonstrate this, we use a simple circuit consisting of a junction gate field-effect transistor and of two variable voltages – gate-source and drain-source:


The behavior of such a transistor is usually studied with the help of its “characteristic curves” – the transfer characteristic showing the current as the function of the gain-source voltage and the output characteristic showing the current as the function of the drain-source voltage. This time the calculation is done with ngspice and we read the produced raw files with the new import filter:

Transistor Characteristic Curves

To generate the second plot where a family of Id curves is calculated for different values of Vgs, we had to implement a new feature in LabPlot to allow to only connect points that are monotonically increasing. Since all the curves in this family are put into the same data set, without this options the end points of the lines would have been connected with the origin which is not what the user wants to see for this specific data set.

The idea for this example and the technical input around ngspice was contributed by Orestes Mas from the Technical University of Catalonia.

November 02, 2018

By a strange coincidence the news broke this morning that RHEL is deprecating KDE. The real surprise here is that RHEL supported KDE all.  Back in the 90s they were entirely against KDE and put lots of effort into our friendly rivals Gnome.  It made some sense since at the time Qt was under a not-quite-free licence and there’s no reason why a company would want to support another company’s lock in as well as shipping incompatible licences.  By the time Qt become fully free they were firmly behind Gnome.  Meanwhile Rex and a team of hard working volunteers packaged it anyway and gained many users.  When Red Hat was turned into the all open Fedora and the closed RHEL, Fedora was able to embrace KDE as it should but at some point the Fedora Next initiative again put KDE software in second place. Meanwhile RHEL did use Plasma 4 and hired a number of developers to help us in our time of need which was fabulous but all except one have left some time ago and nobody expected it to continue for long.

So the deprecation is not really new or news and being picked up by the news is poor timing for Red Hat, it’s unclear if they want some distraction from the IBM news or just The Register playing around.  The community has always been much better at supporting out software for their users, maybe now the community run EPEL archive can include modern Plasma 5 instead of being stuck on the much poorer previous release.

Plasma 5 is now lightweight and feature full.  We get new users and people rediscovering us every day who report it as the most usable and pleasant way to run their day.  From my recent trip in Barcelona I can see how a range of different users from university to schools to government consider Plasma 5 the best way to support a large user base.  We now ship on high end devices such as the KDE Slimbook down to the low spec value device of Pinebook.  Our software leads the field in many areas such as video editor Kdenlive, or painting app Krita or educational suite GCompris.  Our range of projects is wider than ever before with textbook project WikiToLearn allowing new ways to learn and we ship our own software through KDE Windows, Flatpak builds and KDE neon with Debs, Snaps and Docker images.

It is a pity that RHEL users won’t be there to enjoy it by default. But, then again, they never really were. KDE is collaborative, open, privacy aware and with a vast scope of interesting projects after 22 years we continue to push the boundaries of what is possible and fun.

Facebooktwittergoogle_pluslinkedinby feather

Older blog entries

Planet KDE is made from the blogs of KDE's contributors. The opinions it contains are those of the contributor. This site is powered by Rawdog and Rawdog RSS. Feed readers can read Planet KDE with RSS, FOAF or OPML.