February 18, 2019

Cutelyst a Qt/C++ Web Framework just got a new version. This time bringing back proper async support.

Perl Catalyst Framework was conceived as a sync/blocking framework, due that the Mojolicious framework was created, NodeJS and a few other web frameworks have pushed the async programming to the web. Performance wise being async doesn’t mean you get faster response times, rather the opposite, the need to unroll stack and make extra calls makes a CPU bound application slower.

But depending on the problem to solve it allows you to serve more users at the same time, using the same CPU cores. A typical modern application might receive a request from a Phone App then do a REST API call to an external API which might take 2ms or 200ms for the reply. While waiting for the response, typical sync/blocking applications can’t process more requests, or have to spawn more threads increasing RAM consumption and leveraging concurrency to the OS scheduler. On an Async web application, you can process another request while you wait for the previous request, thus possibly making the first request reply to be sent back to the user at a later time than if there was a dedicated process just waiting for his reply.

So, both ways have pros and cons and IMHO I’d like to support them both. When I started Cutelyst I thought that if I ever need async I could have a local QEventLoop to wait for the reply and would be able to deal with async requests, not recently I found out that supporting QEventLoop was causing stack overflow due it being used in pipelined scenarios, after that I removed it’s usage and performance improved in PlainText tests of TechEmpower, so I advised against using it and marked Cutelyst as not async.

Recently I got the need to call a few APIs from a REST API I did with Cutelyst, QNeworkAccessManager is an async only API, so either I create a thread for it to mimic sync behavior or allow Cutelyst to be used in async mode, of course I did the latter. The Context class has now detachAsync() and attachAsync() methods.

When you c->detachAsync(), you tell the engine to not send the headers and body immediately to the client, this will also break the action chain, meaning an end() method won’t be called, then when you get your async reply you call c->attachAsync().

Once c->attachAsync() is called the action chain is resumed so the end() method that possibly would render the HTML can perform it’s job.

It’s important to always be child ( QObject->setParent(…) ) of the Context pointer as if the client closes the connection it might be deleted.

This release was not only made of async:

  • A helper UserAgent singleton was added so that you have a thread_local QNetworkAccessManager with static methods to do more common REST tasks like sending a QJsonObject (yes, eventually I find time to write a patch for QNAM)
  • A new Sql::Transaction class gives you a scoped SQL transaction, preventing the mistake of not rolling back when you leave the scope in case of an error.
  • A few Headers helpers like ETag and If-Match comparison
  • Sebastian Held added support for dealing with Front-End Proxy Headers
  • Improved Stats precision using QElapsedTimer::nsecsElapsed()

And finally Cutelyst is not “half modern” CMake anymore, if that can even exist. The include directories of the exported Targets are now properly exported, so that you can remove:

include_directories(
    ${Cutelyst2Qt5_INCLUDE_DIR}
)

Have fun https://github.com/cutelyst/cutelyst/archive/v2.7.0.tar.gz

Me estoy poniendo al día con algunos audios que tengo pendiente en mi larga lista de episodios de podcast. Es por ello que hoy me complace compartir con vosotros el especial Pinebook con KDE Neon emitido por Podcast Linux, uno de los grandes podcast del mundo del GNU/Linux conducido por Juan Febles.

Especial Pinebook con KDE Neon en Podcast Linux

“Muy buenas amante de GNU/Linux y el Software Libre.
Bienvenido a un nuevo episodio, el número 66, de Podcast Linux. Un saludo muy fuerte y cariñoso de quien te habla, Juan Febles.
Hoy te dejo un especial sobre Pinebook, el netbook ARM de bajo coste y Open Source de Pine64.”

De esta forma el gran Juan Febles presenta el podcast número 66 de Podcast Linux, un episodio dedicado a un dispositivo de gama baja del cual ya he hablado en el blog y que tiene un futuro muy prometedor ya que es una puerta de entrada, y espero que no sea la única, del mundo GNU/Linux a teléfonos móviles y tabletas.

Especial Pinebook con KDE Neon en Podcast LinuxA lo largo del episodio, Juan nos comenta las bondades y los defectos de un dispositivo diferente, diseñado para cacharrear pero que, en mi humilde opinión, también tiene su hueco en ámbitos donde lamentablemente no hay mucho presupuesto como el educativo o para tareas muy concretas, donde en ocasiones se utilizan equipos sobredimensionados.

Para quienes quieran tener una idea de qué es un Pinebook, estamos ante un portátil económico (estamos hablando de unos 100$) basado en ARM sobre el cual hacer funcionar la “no-distribución” KDE NEON.

Las especificaciones técnicas son las siguientes:

  • Procesador quad-core 64-bit ARM CPU clocked at 1.2 GHz
  • 2 GB of RAM
  • 16 GB de almacenaje eMMC
  • Pantalla de 14″ TN LCD y resolución  1366×768.

Como siempre, un episodio muy recomendable que no os podéis perder si queréis estar al día de la imprescindible relación entre hardware y software para que el Software Libre llegue al gran público.

Más información: #66 Especial Pinebook

 

Could you tell us something about yourself?

Hi! I’m a European Krita user.

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

I’m kind of in-between. I finished art school not too long ago, and I’m hoping to find a job or commissions so I could keep painting and actually earn money from it. I also do 3D and programming, but I’d love to keep doing all three without having to abandon any.

What genre(s) do you work in?

I like to try out different things, but for my main style, I’d say… illustrative? One thing’s for sure, though: my favorite theme is animals.

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

I don’t really have one artist that I look up to, but more like a series of temporary stylistic crushes. Right now I’d say oddsbod, the video game Transistor by supergiant games, illustrator and video games 3D artist Heather Penn  I also read a lot of webcomics, and I admire the style of paranatural, vainglorious, inhibit (that are all three really expressive and energetic), stand still stay silent (beautiful), and barbarous (a bit of both).

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

That was more than ten years ago. I was something like ten, maybe twelve at most. A friend of mine had a photographer father, so I went to their house and could try his drawing tablet, and it was really cool; some time later my parents got me one (one of those small A6 ones), and my brother downloaded Gimp, probably for a birthday (he was -still is- really into open source).

What makes you choose digital over traditional painting?

At first it was the novelty, and the ease with which you could have really vivid colours; then, it was the lack of waste when you drew something you didn’t like and the immateriality of what you spent to draw: no heavy expensive paper wasted, no limited supply of colours – I never finished a gouache tube or a pastel stick, but I could see the point where there would be no more. No so with digital art. And now I’m just more used to it.

I haven’t left traditional forever though, I still go to the zoo to draw in a sketchbook, and every so often I include painted textures to my digital stuff. I’d like to experiment more with traditional techniques at some point.

How did you find out about Krita?

I didn’t actually need another drawing software, so I wasn’t looking, but then my brother told me “look at that awesome new (open source) drawing software, they actually ask their artists what they want/need”. I didn’t change right away (switching softwares is always a bit of an investment), but I did eventually try it out and I loved the brushes and I stayed. I remember it was the year of the sheep, probably around February (Chinese New Year), so the first drawing I ever made in Krita was a sheep head with one of the sketch brushes.

What was your first impression?

I loved the brushes. I didn’t use the sketch ones so much, though they definitely were a fun introduction to Krita, but I fell in love with the soft kind of blur of the wet ones. There actually was the same thing in TVPaint (an animation software), which I used in my animation school, but I felt like krita had more options painting-wise.

What do you love about Krita?

The brush engines, definitely. They have incredible diversity. Also I learnt how the assistant tool worked a few weeks ago (it was one of those  things you know exist but never got around to actually check), and it looks really cool (it can be used for drawing perspective, geometric patterns in your image, and more). And the animation system is nice, and way better than photoshop’s (which I deeply hate). It still needs some tweaks to actually be efficient in short films (most of all a way to colour that would be semi-automated over the timeline instead of by frame) but I’ve read somewhere it’s on the todo list. And I recently started doing repeating patterns, and the wrap-around mode is very useful, as instead of offsetting and copying the image every time you’re finished with one step you can just… draw… without worrying about seams.

The way people are always there to help, on reddit, the Ask Krita website, or the IRC channel (even developers!).

Also the fact that since it’s open source, if I want to I can just add the functionalities I need, and then if it’s a good addition it’ll get added to the software and made available to everybody.

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

Like I said, the animation system needs improvement. The bases are solid, but since it’s still very young, it has room to grow.

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

Well, I do use it as my main art program, so I use no other (2D) programs to compare it to.

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

This one [tern.jpg]. I did it as a birthday gift to someone I was missing, so I’m emotionally attached to it. I also like the format and the feeling of
space it gives.

What techniques and brushes did you use in it?

I used a round wet brush (it gives better gradients than the gradient tool if you’re going for a painted look and have large surfaces to fill), and the
shape tool as an eraser. For the mountains, and the sea, I drew them on separate layers, locked the alpha, and used wide brush sweeps over the opaque parts.

You’re a Krita contributor; how did you get into that?

Short version: stuff needed doing (to be used in my workflow), I was able to do it, and nobody else was currently doing it.

Long version: Something like one year ago, I was doing a pixel art animation in krita, and I needed to export an animation into a spritesheet for a game. At first I did it manually, then pretty quickly when I grew bored of it I looked on the internet and found a plugin that did it for gimp. So I exported all my images, imported them into gimp and exported them again, through this plugin, as a spritesheet. It was pretty unwieldy, plus the plugin only exported as a single line so I had to actually change the code every time I wanted to change the options, and every time I changed the animation I had to do it all over again. But I knew there was to be the python plugin interface for krita, so I waited.

Then a few weeks back I actually had some time, so I checked nobody had done it in the meantime and I made the export to spritesheet python plugin. Then there was one part of it that was actually already included in krita, but lacked a small option to be completely functional, so I built krita and changed it.

And now that I worked on this very small change of krita’s source code, I actually feel confident enough to imagine doing bigger contributions.

Where can people see more of your work?

I have stuff all over the place.

For a bit of everything I do, finished and sorted, go there: https://tarnoem.blogspot.com/
For finished art, sorted, go there: https://www.artstation.com/nolanfa
For art (including sketches and WIPS) posted on a semi-regular schedule: http://nolanfa.tumblr.com/
For (digital) art you can buy, and also games: https://fal.itch.io/
For tumblr-is-dying-and-instagram-is-more-fashionable-those-days: https://www.instagram.com/nolanfa_/

February 17, 2019

Dice el refrán “Más vale tarde que nunca” así que me permito compartir con todos vosotros el episodio de Compilando Podcast 40 Resumen 2018 y expectativas para 2019, cuyo título es perfectamente explícito. Un buen podcast para recordar la existencia de este gran podcast y animaros a escucharlo y a promocionarlo.

Compilando Podcast 40 Resumen 2018 y expectativas para 2019

Compilando Podcast 40 Resumen 2018 y expectativas para 2019“Para el primer episodio de 2019 hemos querido reunir muchas de las voces autorizadas en el panorama FLOSS de lengua española para que nos cuenten lo más destacado, según sus diversas opiniones, del año 2018 que cerramos y sus expectativas, ilusiones y deseos para el recién estrenado 2019.”

Así es como el gran Paco Estrada empieza la emisión del episodio 40 de Compilando Podcast, que evidentemente os recomiendo escuchar por dos razones: la primera es que es siempre interesante tener una revisión de lo acaecido durante un año solar; y la otras es por la variedad de voces que hay en el mundo GNU/Linux, entre las que yo mismo me encuentro.

La lista completa de los participantes son los siguientes: Jose “Tanhausser”, Jorge Lama, Arantxa Serantes, Barabara Román, José Manuel Sendín, Juan Febles, Jose Pomeyrol, Antonio Larrosa, Ernesto Acosta (Elav), Javier Obregón, Carlos Rodríguez, Lorenzo Carbonell (“atareao”), Diego Accorinti, Maribel García Arenas, Marcos Costales, Yoyo Fernández, Samuel Iglesias, Sergio “Tarteka”, Baltasar Ortega (un servidor), Philippe Lardy, Paul Brown, Ángel “UGeek”, Juanjo Salvador, Alejandro López, José GDF y Pedro “Mosquetero Web”.

Desde KDE Blog, agradezco a todo el mundo su participación, ya que aunque no es demasiado trabajo si implica una responsabilidad y varias grabaciones de prueba (o al menos en mi caso)

Más información: Compilando Linux #40 Resumen 2018 y expectativas para 2019

¿Qué es Compilando Podcast?

Dentro del mundo de los audios de Software Libre, que los hay muchos y de calidad, destaca uno por la profesionalidad de la voz que lo lleva, el gran Paco Estrada, y por el mimo con el que está hecho. No es por nada que ganó el Open Awards’18 al mejor medio, un reconocimiento al trabajo realizado por la promoción .

A modo de resumen, Compilando Podcast es un proyecto personal de su locutor Paco Estrada que aúna sus pasiones y que además, nos ofrece una voz prodigiosa y una dicción perfecta.

Más información: Compilando Podcast

 

 

 

Week 58 for KDE’s Usability & Productivity initiative is here! Hot on the heels of last week’s update, we’ve got lots of nice goodies to share:

New Features

Bugfixes & Performance Improvements

User Interface Improvements

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 https://community.kde.org/Get_Involved, 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 you find KDE software useful, consider making a donation to the KDE e.V. foundation.

February 16, 2019

https://phabricator.kde.org/source/latte-dock/


A few months ago while I was scratching Latte Dock limits an idea came and haunted my thoughts. How Latte could give the colors freedom for panels and windows that an Android phone already provides? Questions like this arose and solutions appeared suddenly in many different places, but an important and concrete dream prevail in the end.


“Lets have panels and docks that understand their environment and adjust their colors and settings accordingly”


- youtube presentation -


How far would we like this dream to go, what are the limits?

An initial effort was landed at v0.8 through the Dynamic Background options but of course it was very limited. Step by step with patience the following goals appeared after version 0.8

Panels that:
  • can understand the underlying background independent of screen
  • color themselves according to the underlying background in order to provide the best contrast when they are transparent
  • can understand busy backgrounds (elementary style) in order to provide enough contrast
  • solidify themselves at some circumstances
  • understand when a window is touching them and paint themselves based on that window colors
  • can choose to be light or dark but at the same time to be based on the current plasma theme
  • provide an easy and elegant way to support the above features

Someone could ask, What nice features to have in my system but how long do you think it will be needed to provide them? one, two years?  who knows maybe never…

Well the thing is that this article does not describe the future but rather the PRESENT… All the above are currently supported from Latte git version. With their limits of course that arose from the current technology but nonetheless they are here…



What is needed in my system?




Appearance
(advanced settings)
How can I enable these features in Latte git version?


After you install above requirements you can find these features at Latte Appearance settings. Latte Advanced settings has been reorganized and improved in order to provide you with a full screen height window at the edge of the screen. The new settings moto is:


“easy to find, simple to understand”


the settings work has not ended yet so more improvements will be presented in the future.












How can Latte understand which is the underlying background?


Latte tracks the plasma config files and discovers for each screen what is the current background used. It can understand only background image files or single colors. For each one it produces a brightness value for each different edge and at the same time if the background in that edge is busy. That means that a bottom dock can be light and a top panel can be dark in order for both to be presented correctly to the user. The same of course applies to different screens because screens can have backgrounds with different brightness.

In case you are using a gif animator or video playing for your background and the brightness is not identified correctly you could try the following. Make a representing screenshot from the mentioned video and assign that image as a background. You can afterwards reenable your background video because Latte will use that screenshot to identify the different brightness values for the edges.




Can a plasma theme choose to be dark or light dynamically?

Materia dark theme
in Latte Reversed Colors mode
Well the answer is by default it can not. Each plasma theme can be either light or dark and that is an important decision from its designer. Latte did not want to break the designer style so in order to solve this is trying the following.

Latte understands if a plasma theme is dark or light and independent of that it creates a reversed color palette. For example the background color will become the text color and the text color will become the background color. This way the colors used do not look too different.

At the same time in order for Latte to paint correctly a reversed colored background the plasma theme panel roundness needs to be known (how rounded are the panels in the corners). Latte already provides a file that describes the panels roundness for the most known plasma themes but if the theme does not exist in the file or the user just wants to bypass it he can adjust the plasma roundness in pixels through the Latte Preferences window.




How Latte can know what is the color scheme for each window?

The earlier mentioned KWin script sends through dbus the color schemes for windows that do not use the default applied color scheme. When these messages reach Latte are filed and thus Latte whenever needs to, can provide a proper color palette to be consumed by panels and applets.





What are the limits?


The new coloring mechanism needs to be supported from applets in order to be painted correctly at all cases. Currently there are four applets supporting it, Latte taskmanager, Window Title, Window AppMenu and Window Buttons . For the rest the user must choose whether the colorize effect should be applied or not. For example the plasma analog clock that is not monochromatic it should not be painted at all cases. The new option to disable the painting can be found at applet tooltip in edit mode.


left: analog clock with no painting / center: analog clock with painting / right: tooltip to disable painting



Epilogue

That is all for now, I hope you enjoy these new features, personally I love them...




Donations

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


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

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


Go get  v0.8.6   from, download.kde.orgor  store.kde.org*

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

Fixes:
  • fix previews that broke after kde frameworks 5.55 update
  • fix shortcuts behavior from plasma applets when using "Multiple" layouts

Donations:

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


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

After addressing Android support in KF5Notifications another fairly generic task that so far required Android specific code is next: opening files. Due to the security isolation of apps and the way the native “file dialog” works on Android this is quite different from other platforms, which makes application code a bit ugly. This can be fixed in Qt though.

Qt 5.12 and before

On most platforms, allowing the user to open a file in an application works like this:

  • Request the native file dialog via the corresponding widget or QML API, both of which go through the same internal platform integration plugin in Qt.
  • Retrieve a file path from the file dialog.
  • Open that path with QFile.

On Android so far we had to do the following:

  • Request the native “file dialog” (it’s essentially the file brower app) via an Intent.
  • Retrieve a content: URL from that Intent.
  • Use the Java ContentResolver API to open a file descriptor for that content: URL.
  • Pass that file descriptor to C++ and read it via QFile.

While the Intent details could be hidden behind the native file dialog abstraction in Qt, the problem then is still that the returned URL isn’t pointing to a local file that subsequent code might expect. There’s a good reason why Android does it that way though, as this allows applications to only access files that the user explicitly selected, without the need of full file system access permissions.

Qt 5.13 and beyond

A way to address this is a QAbstractFileEngine implementation to add support for content: URLs to QFile. This is the same approach taken already for e.g. asset: URLs. It’s actually not particularly complicated as all we need to do is obtain a file descriptor for a content: URL, and then hand over to the existing regualr file system backend, which implements everything else we need already.

KDE Itinerary is already using this approach as a testing ground, and this week this also landed upstream in Qt, to be included in the 5.13 release.

At the same time Nicolas added support for native file dialogs on Android, as well as content URL support in QML. With all that combined opening a file should (almost) work with identical code on all platforms.

One small caveat remains, the fact that you have to deal with URLs correctly throughout your file handling code. If you at some point convert to a local file path, this is going to break when encountering a content: URL.

El pasado martes 12 de febrero fue lanzado Plasma 5.15, el cual venía cargado de mejoras centradas en la usabilidad y la productividad. Es hora de ir repasando las novedades en las herramientas de Plasma 5.15 para ir sacando al máximo provecho a nuestro escritorio.

Novedades en las herramientas de Plasma 5.15

Aunque ya lo hemos comentado el día del lanzamiento y en el gran vídeo de elav, creo que es necesario detenerse en repasar todas los novedades reportadas por los desarrolladores. Quisiera destacar  que seguramente no serán en realidad todas las que se hayan realizado ya que si lo pensáis esto significa un trabajo extra que en ocasiones no se efectúa.

Así que, en el apartado de novedades en las herramientas de Plasma 5.15 nos encontramos con las siguientes novedades:

  • Los dispositivos Bluetooth ahora muestran el estado de la batería en el útil de energía. Hay que tener en cuenta que esta funcionalidad es muy novedosa y requiere las últimas versiones de los paquetes upower y bluez, algo que algunas distribuciones no tendrán todavía.

  • Ahora se pueden descargar e instalar conectores de fondo de pantalla nuevos directamente desde la barra de configuración del fondo de pantalla. Esto facilita mucho la personalización para todos los usuarios.

Novedades en las herramientas de Plasma 5.15

  • Los nombres de ficheros en los iconos del escritorio ahora tienen suficiente espacio horizontal para que se puedan leer aunque los iconos sean pequeños, y son más fáciles de leer cuando el fondo de pantalla es de colores claros.

  • El usuarios discapacitados visualmente ahora pueden leer los iconos del escritorio gracias a la implementación de lectura de pantalla añadida recientemente para los iconos del escritorio.
  • La herramienta Notas ahora tiene un tema «Transparente con texto claro».
  • Ahora es posible configurar si el desplazamiento sobre el plasmoide Paginador de escritorio virtual «da la vuelta» al llegar al final de la lista de escritorios virtuales.
  • Se ha mejorado el relleno y la apariencia de los mensajes de notificaciones emergentes.
  • El KRunner ha recibido varias mejoras de usabilidad. Ahora gestiona mucho mejor los duplicados, ya no muestra marcadores duplicados de Firefox o entradas duplicadas cuando el mismo archivo está disponible en varias categorías. Adicionalmente, la disposición del útil autónomo de búsqueda ahora coincide con la apariencia del KRunner.

  • El notificador de dispositivos ahora es mucho más inteligente. Si está configurado por mostrar todos los discos en lugar de sólo los extraíbles, reconocerá si intenta desmontar la partición raíz y evitará que se haga.

Y hasta aquí las novedades en las herramientas de Plasma 5.15 que hacen que sea un entorno de trabajo vivo y dinámico que sigue mejorando con el objetivo de ser cada día más usable y productivo.

February 15, 2019

If there is one thing you can learn from creative writing school, it is that you have to give your characters at least three good reasons before they should consider doing anything.

KDE Promo contributors recently completed drafting and editing a document that lays out the long-term goals for the Promo workgroup. This has proven a complex and tedious task, but we were compelled because we had those three good reasons:

  1. Having long-term goals laid out in front of us gives a clear direction in which to work.
  2. Concrete goals also help us differentiate between what is important and what is secondary; between what we can do with the resources we have, and what we may have to put on hold or even forget about completely.
  3. Goals help clarify to others why we do what we do. When our peers understand what we intend to achieve, it saves time because we don’t have to lay out every step of every process every single time to justify your actions.

But… what does “Long Term” mean to you?

After several back-and-forths on Phabricator, we ended up defining “long term” as “5 years”. We have also associated concrete numbers with each goal, things like “Promo intends to help increase the number of desktop end users by 2% over the next 5 years“, to provide specific baseline for each overarching action. This will help us assess the degree of success for each goal…

…or adjust our expectations to reality the next time we have to write something similar. Many of the numbers in the goals are dictated solely by what we currently feel is right. Since many of the goals have never been attempted, we can only speculate as to what they will take. Many of the baselines will probably have to change over time as we get more data that helps us make more realistic predictions.

How are you going to do it?

When you read through the list, you will see a pattern emerge: there is a lot of going to events, hoping to talk to head-honchos, sending emails into the void, getting in touch with people we have never met; lots of knocking on doors not knowing if we will have them slammed back in our faces.

Achieving goals through these means may sound like taking very long shots, but we do have a massive community on our side. For one, there’s the fact that, despite some exaggerated reports to the contrary, KDE is a force to be considered. I would not say that claiming you come on behalf of KDE will open every door, but it has helped us in the past, even when cold-calling, and it will continue to help us in the future.

Then there is the the friend-of-a-friend resource: in a community as large and with members in such far-flung places, from Korea to Kentucky, and from Norway to Nigeria, we want to be able to use members of our community as ambassadors to our cause. Thanks to our community, there will always be somebody who knows someone who can get us into meetings with the people we need to talk to.

And who are these people? Well, they are those who can help us reach ever larger audiences, while at the same time consolidating and helping us grow our community. We are talking about journalists, “influencers” (yes, I hate that word too), bloggers, vloggers, podcasters and so on. We also want to talk to businesses that may benefit from developing with our tools and frameworks.

The idea is to gradually expand our area of influence among users and companies beyond those that are already convinced of KDE’s virtues, even beyond those that are diehard Free software advocates and users. We want to reach more mainstream users, users and developers that may not even have heard of KDE.

This is where you can help: if you know a “celebrity”, influencer, or talented writer, a Youtuber, blogger, or good podcaster – introduce us! We want as much coverage as we can decently get, and content creators are often looking for topics they can talk about. We may be able to provide them with some juicy stories and get the word out to people we otherwise wouldn’t be able to reach. The same goes for journalists in mainstream or specialised publications, politicians, and decisions-makers in companies big, medium or small.

It may seem like the number of things we can do (tweeting, going to events, putting out press releases and blog posts, contacting journalists, talking to managers) is limited and very unexciting. This is true: there are no clever shortcuts or breakthrough techniques you can apply here. However, the fun is in the twists and turns you apply to these things.

You may have noticed we always try to a post an attractive picture with everything we send on to social media or publish on the Dot. We make meme jokes, jump on trending bandwagons, and often ask members from other workgroups and projects to let us look at what they want to submit to social media so we can give it a whirl. We believe you can always write and engineer a message in a way it can entice more people.

This sounds terribly conceited. How do you know you are right about this?

TL;DR: We don’t.

It is always hard to prove anything we do has a positive effect on KDE’s popularity and adoption. It stands to reason it be so, but there is no hard way to say for sure. The only thing we can do is look at the numbers over time and try to discover a correlation between actions and effects.

We monitor most social media platforms, regularly taking data from LinkedIn, Twitter, Mastodon, Facebook and so on. We also monitor Debian’s popcons (popularity contests) every week and store all the data in a folder on share.kde.org.

This is where you can help: a lot of the data collection and processing is done by hand. There are services that could help us, but very often they are proprietary, tie us to their online storage services, and/or don’t cover all the bases, leaving out things like Mastodon, PeerTube or Diaspora.

We are also aware of how inadequate the sources we mine are. We really don’t have a good way of knowing, for example, how many times KDE software gets installed in distributions, so it is nearly impossible to figure out how many silent users are out there.

Point us to solutions and tell us about sources we can mine. This helps us get a better idea of how things are going for us on a global scale. It will also contribute to figuring out if what we are doing is helping or not.

We also need to know where we stand within our own community. Because of this, we are creating a survey that will help us understand better who our peers are. While the survey may confirm things we already suspect, it will also tell us about the big absences.

A good way to grow a community is by looking further afield, into audiences different from what we already have. As different people respond to different things, knowing who we are missing can help us shape activities to attract them.

This is where you can help: please answer our surveys! All information is anonymised and you obviously can ignore questions that you don’t want to answer. But even incomplete information will help us learn what sort of people we click with, and put us on the road to answering the question of why some people just don’t get bitten by the KDE bu–… er… dragon.

Notwithstanding, market research is far from a hard science, and it is frustrating not being able to confirm without a shadow of a doubt that we are doing a good job.

That must be annoying…

Talking of annoying, it is important to remember that most things in business fall through. Most meetings lead to nothing, most agreements end up producing nothing useful, most promises are broken. This is not because businesspeople are unreliable. The problem is priorities shift, other more urgent or more auspicious things pop up, and businesspeople are obliged to implement a better strategy for their companies if the opportunity arises, even if it means ditching an agreement with certain Free software communities.

But even a 90% failure rate is nothing to be disillusioned about. Quite the contrary: if you give up after a couple of let-downs, you are guaranteed not to succeed ever. Promo casts its nets wide and latches onto as many plausible-sounding agreements it can. We try to follow through until it is either clear it is going nowhere, it is not going to work in our favour, or it is no longer our business and we need to pass it on to someone who can sign on the dotted line — Promo does not have a say in the conditions of final agreements.

In fact, Promo has very little say in anything. If you read through the list of goals and how we intend to carry them out, it should be clear that Promo doesn’t dictate or even want to dictate what the rest of the community should do. We won’t even tell you to re-design your project’s website to make it more attractive and useful to your visitors. We will probably tell you that you _should_ re-design your site, and even help you do it, but we won’t tell you you have to.

We work with the things we have. We try to tell the rest of the world how KDE and our projects are attractive. We try and improve our hand by advising on wording in announcements, layouts on web pages, and communication at events. In short, we aspire to be the community’s PR firm.

This where you can help… Or, more precisely: we can help you. Come and visit us in our IRC channel, Telegram group or mailing list, and we can start working together to improve your online presence, get your project into the media, and grow your userbase.

We are already working consistently with Krita, Kdenlive, Atelier, Kontact, Plasma, Plasma Mobile and many others. As it is difficult to keep track of all the projects within KDE and the people behind them (this community is big), we often need you to come and tell us.

The point is, we are here for you… even if we don’t know who you are yet!

So the best way to get a handle on Promo is to read through the goals. And if things are still not clear or you need more details, come and talk to us. We at KDE Promo are a welcoming lot!

February 14, 2019

No, this is not a tutorial, unfortunately. The main reason being that, while I strive to do my best, I don't consider myself to be an excellent member of the Free Software community, let alone be able to teach others about it. But this morning I got an email from the FSF about a campaign for St. Valentine's day, which reminded me of something I've been planning to do since a long time ago, but never got to it.

Love

I want to publicly send huge thanks to Robin Mills from the Exiv2 project, and not only because I've been fruitfully using his work in three (!) projects of mine (PhotoTeleport, Mappero Geotagger and Imaginario), but also, and especially, for being an extremely pleasant interlocutor. On the web, yes. Whereas most people tend to be more thorny and touchy in their interactions over the internet, Robin has always been friendly and coversational, trying to form a bond with some complete foreigner who just happened to report a bug on Exiv2.

Just adding some bits of information about one's personal events (such as travels) can make an enormous difference on how one's attitude is perceived. Mentioning that you visited the place that is familiar to the bug reporter almost makes one forget of being sitting in front of a computer on the internet, because your mind flies to that place. Considering that even on this personal blog of mine I'm kind of reticent about speaking of my private life, I cannot help appreciating the friendly attitude that Robin reserves for people writing on a bug tracker.

You are a wonderful netizen, Robin. A happy Valentine Day to you and your family. Thank you.

I was last week in Berlin at the Plasma Mobile sprint, graciously hosted by Endocode, almost exactly 9 years after the first Plasma Mobile sprint in which we first started to explore Plasma and other software by KDE on mobile phones, which at the time were just starting to become powerful enough to run a full Linux stack (Hi N900!)

Now the project got a wide breath of fresh air: the thing that impressed me the most was how many new faces came at the sprint and are now part of the project.

Compared to 9 years ago, we have a way saner and more robust ecosystem to play on. Instead of a single (and quite underpowered) phone, which was the N900, now we can hack on a wide variety of phones, thanks to ARM being slightly less painful to work with compared to back then (even tough still a long way to go to be considered an open hackable system from nay point of view) Some devices are starting to get upstream mainline kernel support, and for those (unfortunately, most) who don’t there is the Halium project to the rescue, which provides an abstraction layer between the Android kernel and the “proper Linux” userland, making possible to use its graphjics drivers to drive a Wayland session, access audio and connectivity and so on.

We have a Neon version which supports a reference device (the old Nexus-5x) which can be easily adapted to other devices, and PostmarketOS, which is a distribution which supports many different phones and several user interfaces, Plasma Mobile being one of the official ones. At the sprint there were also some people from the PostmarketOS project: one of the things i love most of open source is when different projects collaborate so closely.

We had also some new toys to play with: people from Purism were also present, bringing development kits for their upcoming Librem5 phone, which will support mainline kernel and no need for closed Android drivers. Even tough a lot of work is stil lto do, Plasma Mobile already boots on the device.

Plasma Mobile running on a Librem 5 devkit.

As for Plasma Mobile software in itself, we did many bugfixes on the main shell/homescreen to have a better first impact, and a significant improvement came in KWin about high DPI scaling when running on an Halium system.

Also, many improvoements were done in the Kirigami framework, which is the main toolkit recommended to be used to build applications for Plasma Mobile: as developers of several applications that use Kirigami were present there, we could do very fast feedback and debug sessions.

Google+ does rather killoff the notion I had of Google as a highly efficient company who always produce top quality work.  Even using the takeout website to download the content from Google+ I found a number of obvious bugs and poor features.  But I did get my photos in the end so for old times sakes here’s a random selection.

1a8a0n0gqj2mq
A marketing campaign that failed to take off

1bsc2o3kyhjlu.JPG
Sprints in Munich thanks to the city council’s KDE deployment were always fun.

1bogmkij7mzb6
Launching KDE neon with some pics of my office and local castle.

1bsmv13wngar6
One day I took a trip with Nim to Wales and woke up in somewhere suspiciously like the Shire from Lord of the Rings

1chq4qpaex94y.jpeg
KDE neon means business

1dde2jg4rwl2q
Time to go surfing. This ended up as a music video.

That’s about it.  Cheereo Google+, I’ve removed you from www.kde.org, one social media platform too many for this small world.

Facebooktwitterlinkedinby feather

Intro

Last Monday and Tuesday a few brave souls from both the Qt Company and KDAB gathered together in the KDAB Berlin office premises to work on the CMake build system for building Qt. There was Mikhail, Liang, Tobias, Kai, Simon (QtCompany) as well as Jean-Michaël, Albert, Volker and me (KDAB) sitting together in a tight room, focusing solely on the CMake port of Qt.

Excerpt of the top-level CMakeLists.txt in qtbase.git

All work done so far is out in public and can be checked out on Qt Gerrit.

About the CMake port

To put this a bit more into context, the Qt Project believes that building Qt with CMake is our best bet in Qt6 times and thus a group of people have started to build a CMake build system prototype. KDAB has a track record of helping out with the CMake support in Qt. For instance most of the “Modern CMake”-style support in Qt5 has been implemented by Stephen Kelly. As of today, we’re even largely responsible for maintaining the CMake support of Qt5. Since quite a few of our customers are actually heavily invested in CMake themselves, we’d also like to make sure Qt stays easy to use with it in future. Thus we’re continuing to invest in Qt’s CMake support and would like to help out with the early Qt6 build system exploration happening right now.

The central page where we’re currently collecting the progress made as well as the future roadmap is here: https://wiki.qt.io/CMake_Port

On that page you’ll also learn which branch to check out from Gerrit in order to start playing around with the current state of the Qt/CMake build. Please make sure to have the prerequisites for building the branch (i.e. a current CMake build!).

Workshop Summary

As Simon mentioned in his workshop summary, sent to the qt-development mailing list, we were able to make good progress on multiple fronts the last few days. Let me just outline his notes part of that mail, with some additional comments of my own:

Quoting Simon

  • We were able to fix the artifacts of “make install” in qtbase to allow for building an external module (qtsvg) and sample apps. The plan for allowing people to develop apps that work with Qt 5 and Qt 6 is quite simple API wise:
    1. In your application use either find_package(Qt5) or find_package(Qt6)
    2. Always use Qt::Core, Qt::Gui, etc. for linkage
    3. We want to add the “plain” Qt::Core, Qt::Gui, targets also to Qt5’s CMake support
  • The script to converting .pro files to CMakeLists.txt is becoming really good. The goal is to convert all scopes and (source) file names correctly. Right now the repo contains incremental conversions with hand-edits.
  • We’re working on installing the latest CMake (as required) in the provisioning setup, so that we can get a building CI as soon as possible.
  • We were able to verify that cross-compilation works well. The main challenge is ensuring that third-party libraries that used to be copied in src/3rdparty are either installed in the sysroot or can be found outside.
  • We discussed and experimented with different ways of making static builds robust. So static builds themselves work already, but what we’re looking into in particular is an automatic way of propagating Qt internal dependencies (such as double-conversion) correctly, to the build process of the application, that is not fragile.
  • We added a lot more plugins and platform support libraries to the build process and did many improvements to the finding of external libraries.

More than that

  • Additionally we’ve succeeded in generating CMake config files compatible with the current config files generated by the Qt/QMake build
    • For instance, we’ve been able to successfully compile KDAB’s GammaRay (which has a rather complex beast of a CMake build system) against the Qt/CMake build of qtbase
  • We were able to compile QMake using CMake in order to retain the support of using QMake to compile Qt projects for existing users of Qt/QMake

Outlook on the future

  • We’ll investigate ensuring a smooth Qt build process on macOS and Windows platforms for developers
  • We’ll add the CMake build system to other Qt modules (thinking of qtsvg (rather simple), qtdeclarative (rather complex))
  • We’ll add a super build which takes care of building multiple Qt modules in one go (cf. a top-level build off from qt5.git)
  • Test more cross-compilation configurations
  • Make sure static builds of Qt are not a pain to deal with for external users (like it is right now)
  • Make sure to continuously test the Qt/CMake build using basic CI build support.
  • QMake will likely still be around in future Qt6 times, as there’s still a lot of users out there. The difference will just be that QMake itself is built using CMake inside qtbase.git; and QMake’s module .pri files will get generated by CMake instead.
    • Obviously exactly the other way around to what it is right now in Qt5/QMake, where QMake generates the CMake config files for CMake!

If you have comments or if you want to help out, please ideally post feedback on the Qt Project infrastructure. Send a mail to the qt-development mailing list or comment on the wiki page dedicated for the CMake port. Or just join us in the IRC channel #qt-cmake on Freenode!

The post Qt on CMake Workshop Summary – Feb 2019 appeared first on KDAB.

@totte wrote:

Also available in French, Italian, Simplified Chinese, and Traditional Chinese.

The following updates have been tested, and are now available.

Name Version
Frameworks 5.55.0
Plasma 5.15.0
Applications 18.12.2

Most of our mirrors synchronize with the central repositories on the origin server within 24 hours. Use the mirror status web page to see when your mirror of choice last synchronized. Run sudo pacman -Syu to update and upgrade your system. If you have any issues updating or upgrading, reply to this topic with the complete input and output in English, i.e. run LC_ALL=C sudo pacman -Syu.


“The KDE dragons” by Tyson Tan, Creative Commons BY-SA, made with Krita.

Posts: 1

Participants: 1

Read full topic

February 13, 2019

KDE neon was rebased onto Ubuntu bionic/18.04 last year and upgrades have gone generally smooth. We have removed xenial/16.04 build from our machines (they only hang around for as long as they did because it took a while to move the Snap builds away from them) and the apt repo will remove soon. If you haven’t already upgrade now.

Snaps is a fancy new package format for Linux which allows applications to be shipped which run on pretty much any Linux distro. This nicely solves one of the headaches with shipping software for Linux, that you have to package it a dozen times using a dozen different methods to get anyone to be able to install it.

The format and host for Snaps is made using Ubuntu and developed by KDE patron Canonical.

We have been working on building Snaps from the KDE neon builders for some time and they’re now at a quality where we can move them into the stable channel. (Snap software gets hosted in channels depending on the risk you want to take, others being candidate, beta and edge.)

If you’re a Plasma user you can use Discover to install the Snaps, but of course they work equally well on other desktops with other package managers or using the snap command.

This month the Snap team are highlighting KDE’s stable Snaps on their Twitter and Facebook feeds. Here’s what we’ve seen so far:

There’s still plenty of KDE apps that need tweaks before they can go in the Snap stable channel. If you’re an app maintainer then come and talk to us (in #kde-neon probably) about how your app can be distributed. We plan on doing some automated QA so they don’t need manual review before publishing and before long hopefully we can move much of the build details into the app repo rather than the KDE neon repo.

February 12, 2019

Say hello to Plasma 5.15, the newest version of KDE's acclaimed desktop environment.

This February release of KDE Plasma comes with a wide range of new features and improvements. The main focus of developers has been stamping out all minor problems and papercuts of the desktop, aiming to make Plasma smoother and easier to use.

Plasma's configuration interfaces have been redesigned, expanded and clarified to cover more user cases and make it simpler to adapt Plasma to everybody's needs. Plasma has also improved the integration of non-native applications, so Firefox, for example, can now optionally use native KDE open/save dialogs. Likewise, GTK and GNOME apps now respect the global scale factor used by high-DPI screens.

Updating your system is now easier and more reliable with the new and improved Discover.

Developers have also been hard at work on Discover, Plasma's built-in software manager. Options for upgrading your distribution are now included in Discover's Update Notifier widget, which will also display a "Restart" button if a restart is recommended when updating is done. Talking of updates, it is now possible to uncheck and re-check all available updates to make it easier to pick and choose the ones you want to apply. Another improvement is that repository management in Discover is now more practical and usable, especially for Ubuntu-based distros.

We have also solved problems with text readability and icon clarity. KDE designers have improved a variety of Breeze device and preference icons, including the multimedia icons and all icons that depict a stylized version of a Plasma wallpaper. The Places, Vault and Python bytecode files all have redesigned icons to make them easier to identify.

There are literally hundreds more improvements and tweaks included in this release, all implemented to make your life as a Plasma user much more enjoyable. Read the official announcement and check out the Plasma 5.15 changelog for more details on this new version of the Plasma desktop.

February 11, 2019

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

Changelog

  • Correction bug 403575: skrooge w/ -DSKG_WEBENGINE=ON: ui_skgtablewithgraph.h:15:10: fatal error: QtWebKitWidgets/QWebView: No such file or directory
  • Correction bug 403675: App crashes with segfault after second import
  • Correction bug 402330: error importing QIF File "SKGImportPluginQif::importFile() RC=[ERR-5]: SKGCategoryObject::addCategory failed because linked object is not yet saved in the database.
  • Correction bug 403725: import Quicken tags from QIF as Skrooge trackers
  • Correction bug 403985: kgbasegui/skgwebview.h:28:10: fatal error: qwebview.h: No such file or directory
  • Correction: Import KMYMONEY with non utf8 characters doesn't work (see https://forum.kde.org/viewtopic.php?f=210&t=156506)
  • Correction: Import KMYMONEY of scheduled operations from the next operation to add instead of the first one (to avoid duplicate) 
  • Correction: Import KMYMONEY of shares with only one split must be done with the unit of the share
  • Correction: Nb occurrences and last date are not aligned on weekly schedules
  • Correction: Display all occurrences of a schedule in dashboard not only the first one 
  • Correction: Display the currency symbol at the right place in scheduled operations 
  • Correction: Display correctly the amount in "highlighted operations" in dashboard  
  • Correction: The advice "Advice are very long to compute" can now be rejected
  • Correction: Add date in "Bank (light)" widget in html mode 
  • Correction: Remove template from "Highlighted operation" widget 
  • Feature: Better help for "Internet code" of sources in unit page
  • Feature: New MSN source of download for quotes
  • Feature: File can be made anonymous in a reversible mode 
  • Feature: In "Operations" page, possibility to view all operations of an account + its credit cards associated
  • Feature: The number of years for forecasts based on scheduled operations can be choosen from settings 
  • Feature: Possibility to choose the max date of schedules in dashboard  
  • Feature: New action to skip scheduled operations
  • Feature: Possibility to skip scheduled operations from dashboard
  • Feature: Addition of options (Incomes, Expenditures, Transfers, ...) in contextual menu of graphs in "Account" page 
  • Feature: Addition of options (Days, Weeks, Months, ...) in contextual menu of graphs in "Account" page 

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: https://binary-factory.kde.org/job/Skrooge_Nightly_mingw64/

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 !

In the Imaginario code I had written a C++ method to find all files present in a directory tree (for some reason this code is always encoding file paths as QUrl, but feel free to ignore that):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
QList<QUrl> Utils::findFiles(const QUrl &dirUrl, bool recursive) const
{
    QList<QUrl> files;

    QDir dir(dirUrl.toLocalFile());
    if (Q_UNLIKELY(!dir.exists())) return files;

    auto list = dir.entryInfoList(QDir::NoDotAndDotDot |
                                  QDir::Dirs | QDir::Files,
                                  QDir::Name);
    for (const QFileInfo &info: list) {
        if (info.isDir()) {
            if (recursive) {
                files += findFiles(QUrl::fromLocalFile(info.filePath()), true);
            }
        } else {
            files.append(QUrl::fromLocalFile(info.filePath()));
        }
    }

    return files;
}

The Utils mentioned in this snipped is a QObject-derived class which is registered to QML as

1
2
3
4
5
6
7
8
static QObject *utilsProvider(QQmlEngine *, QJSEngine *)                                               
{                                                                                                      
    return new Utils;                                                                                  
}

...
// In some other part of the code, before entering the main loop:
qmlRegisterSingletonType<Utils>("Imaginario", 1, 0, "Utils", utilsProvider);

This allows me to call the C++ findFiles() method from QML, like this:

1
2
3
4
import Imaginario 1.0

...
    onClicked: importer.addFiles(Utils.findFiles(folder, true))

So far, so good. However, I couldn't help noticing that when the selected folder contains a large number of files, the whole UI freezes until the findUtils() method has returned. So, how can I invoke my C++ method without blocking the UI?

QML offers a WorkerScript element which seems to do exactly what we need, but unfortunately the possibility of invoking C++ code is only there since Qt 5.12 (before that version, worker script could not use import statements), and in any case the requirement to store the script into a separate Javascript file makes the code less readable.

A better option, in my opinion, is to write a C++ method that performs the lengthy task in a thread and invokes a Javascript callback once the job execution is completed. This sounds pretty complex at first, but fortunately Qt's nice APIs make this an almost trivial task. Without modifying our previous findFiles() method, we write a second one which will execute it in a thread, using QtConcurrent::run():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
void Utils::findFiles(const QUrl &dirUrl,
                      bool recursive,
                      const QJSValue &callback) const
{
    auto *watcher = new QFutureWatcher<QList<QUrl>>(this);
    QObject::connect(watcher, &QFutureWatcher<QList<QUrl>>::finished,
                     this, [this,watcher,callback]() {
        QList<QUrl> files = watcher->result();
        QJSValue cbCopy(callback); // needed as callback is captured as const
        QJSEngine *engine = qjsEngine(this);
        cbCopy.call(QJSValueList { engine->toScriptValue(files) });
        watcher->deleteLater();
    }); 
    watcher->setFuture(QtConcurrent::run(this, &Utils::findFiles, 
                                         dirUrl, recursive));
}

You might be surprised, but this is all what is needed in the C++ side. The changes to the QML side are equally trivial:

1
2
3
4
5
6
7
8
import Imaginario 1.0

...
    onClicked: {
        Utils.findFiles(folder, true, function(files) {
            importer.addFiles(files)
        })
    }

That's it! Line 6 in this last snippet will be invoked once the findFiles() method has completed its execution, and you'll be glad to see that the UI will be responsive throughout the duration of the operation.

QtConcurrent alternatives

QtConcurrent::run() is very simple to use, but it's not without its shortcomings, the biggest of which is that it doesn't support cancelling. This is something I can live with in this particular case, but, if you can't, don't despair: there are other options. The second simplest one is probably the static QThread::create() method, which behaves similarly to QtConcurrent::run() but returns a QThread object which can be requested to terminate, for example with QThread::requestInterruption(). This method exists only since Qt 5.10, and that's why I didn't list it as my first choice; but if you are using such a recent version of Qt, then it's probably the best option, because one doesn't even need to subclass QThread (and there's no need to depend on QtConcurrent). Of course, subclassing QThread is also an option, but this involves a little more typing.

Beware of threading issues

The most tempting solution (and I confess, my first approach to the problem was exactly this) is to invoke the Javascript callback directly from the thread:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
void Utils::findFiles(const QUrl &dirUrl,
                      bool recursive,
                      const QJSValue &callback) const
{
    QtConcurrent::run([=]() {
        const QList<QUrl> files = findFiles(dirUrl, recursive);
        QJSValue cbCopy(callback);
        QJSEngine *engine = qjsEngine(this);
        cbCopy.call(QJSValueList { engine->toScriptValue(files) });
    });
}

However, this will work 95% of the times only, because QJSValue::call() is not thread-safe, and therefor your application will be victim of random crashes. So, we need to write a couple of lines more and invoke the callback from the main thread, like I'm doing before.

This is the last week of early bird tickets for foss-north 2019. The program has not yet been set, so getting one of these tickets, you trust us to deliver a great conference – something that we’re very thankful for.

We do have some parts of the schedule fixed: the trainings and some initial speakers.

The trainings are open enrollment courses at a bargain price, where parts of the dividends goes to financing the conference. This year we have two great trainers: Michael Kerrisk of manpage and The Linux Programming Interface fame, and Chris Simmonds, the man behind the Mastering Embedded Linux Programming book and a trainer since more than 15 years. The trainings held are: Building and Using Shared Libraries on Linux and Fast Track to Embedded Linux. These are both one day courses held in a workshop format.

Browsing through the replies to the call for papers, I am convinced that the 2019 foss-north will be the best one this far – and the past three years have been great.

So, get your tickets while they are hot! ;-)

PS. If you want to help out – give me a ping at e8johan – gmail – com. We need a couple of helping hands during the event days to help make sure everything runs smoothly.


February 10, 2019

Get ready for a humongous monster week 57 for KDE’s Usability & Productivity initiative and there’s a metric tonne of stuff!!! So go make yourself a cup of tea or coffee and settle in for a long list of improvements. ��

But first I want to mention that we’re working on fixes for Discover users in Plasma 5.14.5 who are stuck unable to update. We’ve pushed a fix into the 5.14 branch that should cause the stuck backend to time out after one minute, allowing everything else to work. We’ll be releasing a Plasma 5.14.5.1 bugfix release, inclusing this fix. Fear not, we won’t leave you out in the icy cold blackness of night… alone, hungry, and unable to upgrade your software using a GUI application?

Also it’s already fixed in Plasma 5.15. ��

We’ve also backported a number of other fixes onto the 5.14 branch and I hope we can ship one more bugfix release of 5.14 just to ensure that the quality is as high as possible for the upcoming Debian Stable freeze.

New Features

Bugfixes & Performance Improvements

User Interface Improvements

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 https://community.kde.org/Get_Involved, 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 you find KDE software useful, consider making a donation to the KDE e.V. foundation.

February 09, 2019

Last week I was invited to give a talk at the first edition of the “Jornadas Tecnológicas Insert Coín” in Coín (Málaga, Spain) to the students of the high school I.E.S. Los Montecillos and other high schools of the area. The subject of the talk was cross-platform development with KDE and Qt. I think the talk was very well received and the students seemed to like it (at least, I think they did). I organized the talk in two sections, first some slides about Qt and KDE (mostly about KDE Frameworks), and then some “live” development to show how use Qt Creator to develop a small web browser with Qt in C++ and then how to use KDevelop to develop the same application in Python.

After the talk was ended, I told the audience I would put the source code on github so they can examine it with more time, modify it and use it to learn more about Qt. So I have just uploaded it to https://github.com/antlarr/thebrowsertutorial with the hope it’s useful to them, and also to others wanting to learn about Qt. In any case, please, read the README on that repository before cloning the sources in your computer.

Update: I uploaded the talk slides I used (in Spanish) in case they’re useful to anyone: insertcoin.odp

Last weekend I attended FOSDEM 2019 in Brussels, and following that I stopped by the Plasma Mobile sprint while that was in town.

FOSDEM

FOSDEM was fun and inspiring as usual, even if actually getting to see talks has become almost impossible, due to the limit amount of space and the ever growing amount of attendees. However the real value of FOSDEM for me is meeting people anyway, you can’t move a few meters without running into someone you know and want to catch up with.

Adrian and Agustín have already written about KDE’s presence. My personal highlight was Alistair’s work of bringing Plasma Mobile to RISC-V. Open Source harware and Free Software are a perfect team, and it was also very nice to see our work on bringing KDE components to Yocto being used for this.

Plasma Mobile on a RISC-V board at KDE's FOSDEM 2019 booth Plasma Mobile on RISC-V

FOSDEM 2018 was the first test flight with a boarding pass rendered by what should become KDE Itinerary (back then using a screenshot from a desktop application on my phone). This year the flights posed no challenge for KDE Itinerary anymore, the access gates at the Brussels airport train station however did. Turns out the Code 128 one-dimensional barcodes used there are too wide for displaying them horizontally on a mobile phone screen. Obviously this got fixed meanwhile :)

Plasma Mobile Sprint

Following FOSDEM there was a week-long Plasma Mobile sprint in the Endocode office in Berlin. I couldn’t attend the full time but even a day is already immensely helpful to move things forward.

One result is that KDE Itinerary is now also available as Flatpak, in the KDE Flatpak repository. This however required a small change to how the application identifies itself, and as a side-effect where it stores its data. In case you are using the application on desktop with production data, the following commands adjust that to the new location (Android is not affected).

mv ~/.config/KDE/kde-itinerary.conf ~/.config/KDE/itinerary.conf
mv ~/.local/share/KDE/kde-itinerary  ~/.local/share/KDE/itinerary

This will be a short post about a feature in STL that seems to be not as well-known as it should be.

Imagine we want to create a small function that collects files in the subdirectories of the current directory. So, a list that would be returned by ls */*.

We’ll start by creating a function that returns filenames of all files in the specified directory.

std::vector<fs::directory_entry>
files_in_dir(const fs::directory_entry& dir)
{
    return std::vector<fs::directory_entry>(
            fs::directory_iterator{dir.path()},
            fs::directory_iterator{});
}

This function creates a vector of all files in a specified directory using the STL’s filesystem library.

What we need to do now is create a function that calls files_in_dir for all directories in the current directory and collect all the results in a single vector.

std::vector<fs::directory_entry>
files_in_subdirs()
{
    std::vector<fs::directory_entry> results;

    auto item = fs::directory_iterator{"."};
    const auto last = fs::directory_iterator{};

    for (; item != last; ++item) {
        if (!item->is_directory()) {
            continue;
        }

        auto dir_items = files_in_dir(*item);

        [ Add everything from dir_items into results ]
    }

    return results;
}

The function should be easy to understand – it is just iterating through subdirectories of the current directory, and calls files_in_dir to get the list of files in them.

The question that remains is how to add those collected items into the resulting vector.

We can use .insert to insert all items from dir_items into the results vector:

results.insert(results.end(),
               dir_items.cbegin(),
               dir_items.cend());

The problem is that this will copy all the directory_entry values from dir_items to result. The copies are unnecessary because dir_items is destroyed immediately afterwards.

We could have moved everything into the results vector.

If we didn’t know any better, we could replace this insert with a for loop that moves the elements from dir_items to results one by one (we would need to call reserve before to eliminate the possibility of vector reallocations).

But we do know better – there is an iterator adaptor that returns rvalue references when it is dereferenced and it is aptly named std::move_iterator.

This means that we can still rely on higher abstraction functions like .insert and still be efficient. We just need to pass a move iterator to .insert instead of the normal one:

results.insert(results.end(),
               std::make_move_iterator(dir_items.begin()),
               std::make_move_iterator(dir_items.end()));

That’s it for now.


You can support my work on Patreon, or you can get my book Functional Programming in C++ at Manning if you're into that sort of thing.

February 08, 2019

Clazy 1.5 is now available. This is a small release, mainly focused on bug fixing.

Clazy is a clang compiler plugin which emits warnings related to Qt best practices. We’ll be showing Clazy at Embedded World, Nuremberg, Febr 26-28, where we are a main Qt partner. You can read more about it in our previous blog posts:

As usual, MSVC and AppImage binaries are available at http://downloads.kdab.com/clazy.

The interesting part of the ChangeLog is as follows:

New Checks

1. ifndef-define-typo

Tries to find cases where a #define following an #ifndef defines a different but similar name.

Example:

#ifndef GL_FRAMEBUFFER_SRG // Oops, typo.
# define GL_FRAMEBUFFER_SRGB 0x8DB9
#endif

It uses a Levenshtein Distance algorithm so it will only warn if the names are similar. This check is disabled by default as it can report many false-positives. Nevertheless you should give it a go, it even found a bug in Qt: https://codereview.qt-project.org/#/c/242090/.

2. lowercase-qml-type-name

Warns when QML types registered with qmlRegisterType() or qmlRegisterUncreatableType() don’t start with uppercase. It’s required by the QML engine that they do.

3. qrequiredresult-candidates

Suggests methods that could be marked as [[nodiscard]] (via Q_REQUIRED_RESULT). Functions annotated with this attribute will trigger a compiler warning if their value is unused.

Clazy’s criteria for making such suggestion is: const methods, returning the same type as their class and ending with ‘ed’

For example, the signature for QRect::intersected() should be written as: Q_REQUIRED_RESULT QRect intersected(const QRect &other) const so that user code will get a warning when discarding the result.

New Fixits

To help you automatically rewrite your code, a few new fixits were implemented:

Other

  • Renamed the clazy plugin from ClangLazy.so to ClazyPlugin.so
  • fully-qualified-moc-types now warns for slot/invokable return values too. They need to be fully qualified for QML
  • Many bug fixes, including crashes

The post Clazy 1.5 released appeared first on KDAB.

February 07, 2019

February means FOSDEM, the largest gathering of free software developers in the continent. I drove for two days down the winding roads and even onto a train and out again to take the bits needed to run the stall there. Fortunately my canoeing friend Poppy was there for car karaoke and top Plasma dev David got picked up along the way to give us emotional support watching Black Mirror Bandersnatch with its multiple endings.

The beer flowed freely at Delerium but disaster(!) the venue for Saturday did not exist!  So I did some hasty scouting to find a new one before returning for more beer.

Rather than place us next to Gnome the organisers put us next to our bestie friends Nextcloud which was nice and after some setup the people came and kept on coming.  Saturday was non stop on the stall but fortunately we had a good number of volunteers to talk to our fans and future fans.

Come Home to KDE in 2019 was the theme.  You’ve been distro hopping.  Maybe bought a macbook because you got bored of the faff with Linux. But now it’s time to re-evaluate.  KDE Plasma is lightweight, full features, simple and beautiful.  Our applications are world class.  Our integration with mobile via KDE Connect is unique and life changing.

I didn’t go to many talks because I was mostly stuck on the stall but an interesting new spelling library nuspell looks like something we should add into our frameworks, and Tor is helping people evade governments and aiding the selling of the odd recreational drug too.

20190203_090217

At 08:30 not many helpers or punters about but the canoeists got the show going.

20190202_102814
In full flow on the Saturday Wolthera does a live drawing show of Krita while Boud is on hand for queries and selfies.

20190202_212641
The Saturday meal after a quick change of venue was a success where we were joined by our friends Nextcloud and the Lawyers of Freedom.

20190203_214942
Staying until the following day turns out to allow a good Sunday evening to actually chat and discuss the merits of KDE, the universe and everything.  With waffles.

Facebooktwitterlinkedinby feather

February 06, 2019

It is available at the usual place https://community.kde.org/Schedules/Applications/19.04_Release_Schedule

Dependency freeze is March 14 and Feature Freeze a week after that, make sure you start finishing your stuff!

@totte wrote:

Also available in Simplified Chinese, and Traditional Chinese.

The following updates have been tested, and are now available.

Name Version Comment
Frameworks 5.54.0
Plasma 5.14.5
Applications 18.12.1
Complete list of updated packages
akonadi-18.12.1-1-x86_64.pkg.tar.xz
akonadi-calendar-18.12.1-1-x86_64.pkg.tar.xz
akonadi-calendar-debug-18.12.1-1-x86_64.pkg.tar.xz
akonadi-calendar-tools-18.12.1-1-x86_64.pkg.tar.xz
akonadi-calendar-tools-debug-18.12.1-1-x86_64.pkg.tar.xz
akonadiconsole-18.12.1-1-x86_64.pkg.tar.xz
akonadiconsole-debug-18.12.1-1-x86_64.pkg.tar.xz
akonadi-contacts-18.12.1-1-x86_64.pkg.tar.xz
akonadi-import-wizard-18.12.1-1-x86_64.pkg.tar.xz
akonadi-import-wizard-debug-18.12.1-1-x86_64.pkg.tar.xz
akonadi-mime-18.12.1-1-x86_64.pkg.tar.xz
akonadi-notes-18.12.1-1-x86_64.pkg.tar.xz
akonadi-search-18.12.1-1-x86_64.pkg.tar.xz
akonadi-search-debug-18.12.1-1-x86_64.pkg.tar.xz
akregator-18.12.1-1-x86_64.pkg.tar.xz
akregator-debug-18.12.1-1-x86_64.pkg.tar.xz
analitza-18.12.1-1-x86_64.pkg.tar.xz
aom-1.0.0-1-x86_64.pkg.tar.xz
apache-2.4.38-1-x86_64.pkg.tar.xz
ark-18.12.1-1-x86_64.pkg.tar.xz
ark-debug-18.12.1-1-x86_64.pkg.tar.xz
artikulate-18.12.1-1-x86_64.pkg.tar.xz
artikulate-debug-18.12.1-1-x86_64.pkg.tar.xz
attica-qt5-5.54.0-1-x86_64.pkg.tar.xz
attica-qt5-debug-5.54.0-1-x86_64.pkg.tar.xz
audiocd-kio-18.12.1-1-x86_64.pkg.tar.xz
baloo-5.54.0-1-x86_64.pkg.tar.xz
baloo-debug-5.54.0-1-x86_64.pkg.tar.xz
baloo-widgets-18.12.1-1-x86_64.pkg.tar.xz
baloo-widgets-debug-18.12.1-1-x86_64.pkg.tar.xz
blinken-18.12.1-1-x86_64.pkg.tar.xz
blinken-debug-18.12.1-1-x86_64.pkg.tar.xz
bluedevil-5.14.5-1-x86_64.pkg.tar.xz
bluedevil-debug-5.14.5-1-x86_64.pkg.tar.xz
bluez-qt-5.54.0-1-x86_64.pkg.tar.xz
bluez-qt-debug-5.54.0-1-x86_64.pkg.tar.xz
bomber-18.12.1-1-x86_64.pkg.tar.xz
bomber-debug-18.12.1-1-x86_64.pkg.tar.xz
bovo-18.12.1-1-x86_64.pkg.tar.xz
bovo-debug-18.12.1-1-x86_64.pkg.tar.xz
breeze-5.14.5-1-x86_64.pkg.tar.xz
breeze-debug-5.14.5-1-x86_64.pkg.tar.xz
breeze-grub-5.14.5-1-any.pkg.tar.xz
breeze-gtk-5.14.5-1-x86_64.pkg.tar.xz
breeze-gtk-debug-5.14.5-1-x86_64.pkg.tar.xz
breeze-icons-5.54.0-1-any.pkg.tar.xz
breeze-plymouth-5.14.5-1-x86_64.pkg.tar.xz
breeze-plymouth-debug-5.14.5-1-x86_64.pkg.tar.xz
bumblebee-3.2.1-19-x86_64.pkg.tar.xz
ca-certificates-mozilla-3.41.1-1-x86_64.pkg.tar.xz
calamares-3.2.2-6-x86_64.pkg.tar.xz
calamares-3.2.3-1-x86_64.pkg.tar.xz
calendarsupport-18.12.1-1-x86_64.pkg.tar.xz
calendarsupport-debug-18.12.1-1-x86_64.pkg.tar.xz
cantor-18.12.1-1-x86_64.pkg.tar.xz
cantor-debug-18.12.1-1-x86_64.pkg.tar.xz
cervisia-18.12.1-1-x86_64.pkg.tar.xz
cervisia-debug-18.12.1-1-x86_64.pkg.tar.xz
chakra-common-18.12.1-1-x86_64.pkg.tar.xz
chakra-heritage-themes-2018.12-2-x86_64.pkg.tar.xz
chakra-heritage-themes-2019.01-1-x86_64.pkg.tar.xz
chakra-heritage-themes-2019.01-2-x86_64.pkg.tar.xz
chakra-heritage-themes-2019.01-3-x86_64.pkg.tar.xz
chakra-heritage-themes-2019.01-4-x86_64.pkg.tar.xz
chakra-live-skel-2018.12-6-x86_64.pkg.tar.xz
chakra-live-skel-2019.01-1-x86_64.pkg.tar.xz
chakra-wallpapers-giau-2018.11.03-2-any.pkg.tar.xz
cython2-0.29.3-1-x86_64.pkg.tar.xz
cython3-0.29.3-1-x86_64.pkg.tar.xz
dav1d-0.1.0-1-x86_64.pkg.tar.xz
dolphin-18.12.1-1-x86_64.pkg.tar.xz
dolphin-debug-18.12.1-1-x86_64.pkg.tar.xz
dolphin-plugins-18.12.1-1-x86_64.pkg.tar.xz
dolphin-plugins-debug-18.12.1-1-x86_64.pkg.tar.xz
doxygen-1.8.15-1-x86_64.pkg.tar.xz
doxygen-docs-1.8.15-1-x86_64.pkg.tar.xz
dragon-18.12.1-1-x86_64.pkg.tar.xz
dragon-debug-18.12.1-1-x86_64.pkg.tar.xz
drkonqi-5.14.5-1-x86_64.pkg.tar.xz
drkonqi-debug-5.14.5-1-x86_64.pkg.tar.xz
elfutils-0.175-1-x86_64.pkg.tar.xz
eventviews-18.12.1-1-x86_64.pkg.tar.xz
eventviews-debug-18.12.1-1-x86_64.pkg.tar.xz
extra-cmake-modules-5.54.0-1-x86_64.pkg.tar.xz
falkon-3.0.1-5-x86_64.pkg.tar.xz
ffmpegthumbs-18.12.1-1-x86_64.pkg.tar.xz
filelight-18.12.1-1-x86_64.pkg.tar.xz
filelight-debug-18.12.1-1-x86_64.pkg.tar.xz
fontconfig-2.13.0-1-x86_64.pkg.tar.xz
fontconfig-2.13.0-2-x86_64.pkg.tar.xz
fontconfig-2.13.1-1-x86_64.pkg.tar.xz
frameworkintegration-5.54.0-1-x86_64.pkg.tar.xz
frameworkintegration-debug-5.54.0-1-x86_64.pkg.tar.xz
freetype2-2.9.1-2-x86_64.pkg.tar.xz
freetype2-demos-2.9.1-2-x86_64.pkg.tar.xz
freetype2-docs-2.9.1-2-x86_64.pkg.tar.xz
fuse2-2.9.9-1-x86_64.pkg.tar.xz
git-2.20.1-1-x86_64.pkg.tar.xz
granatier-18.12.1-1-x86_64.pkg.tar.xz
granatier-debug-18.12.1-1-x86_64.pkg.tar.xz
grantlee-editor-18.12.1-1-x86_64.pkg.tar.xz
grantlee-editor-debug-18.12.1-1-x86_64.pkg.tar.xz
grantleetheme-18.12.1-1-x86_64.pkg.tar.xz
grantleetheme-debug-18.12.1-1-x86_64.pkg.tar.xz
gwenview-18.12.1-1-x86_64.pkg.tar.xz
harfbuzz-2.2.0-1-x86_64.pkg.tar.xz
harfbuzz-icu-2.2.0-1-x86_64.pkg.tar.xz
incidenceeditor-18.12.1-1-x86_64.pkg.tar.xz
incidenceeditor-debug-18.12.1-1-x86_64.pkg.tar.xz
juk-18.12.1-1-x86_64.pkg.tar.xz
juk-debug-18.12.1-1-x86_64.pkg.tar.xz
k3b-18.12.1-1-x86_64.pkg.tar.xz
k3b-debug-18.12.1-1-x86_64.pkg.tar.xz
kaccounts-integration-18.12.1-1-x86_64.pkg.tar.xz
kaccounts-providers-18.12.1-1-x86_64.pkg.tar.xz
kactivities-5.54.0-1-x86_64.pkg.tar.xz
kactivities-debug-5.54.0-1-x86_64.pkg.tar.xz
kactivities-stats-5.54.0-1-x86_64.pkg.tar.xz
kactivities-stats-debug-5.54.0-1-x86_64.pkg.tar.xz
kactivitymanagerd-5.14.5-1-x86_64.pkg.tar.xz
kactivitymanagerd-debug-5.14.5-1-x86_64.pkg.tar.xz
kaddressbook-18.12.1-1-x86_64.pkg.tar.xz
kaddressbook-debug-18.12.1-1-x86_64.pkg.tar.xz
kajongg-18.12.1-1-x86_64.pkg.tar.xz
kalarm-18.12.1-1-x86_64.pkg.tar.xz
kalarmcal-18.12.1-1-x86_64.pkg.tar.xz
kalarmcal-debug-18.12.1-1-x86_64.pkg.tar.xz
kalarm-debug-18.12.1-1-x86_64.pkg.tar.xz
kalgebra-18.12.1-1-x86_64.pkg.tar.xz
kalzium-18.12.1-1-x86_64.pkg.tar.xz
kalzium-debug-18.12.1-1-x86_64.pkg.tar.xz
kamera-18.12.1-1-x86_64.pkg.tar.xz
kamera-debug-18.12.1-1-x86_64.pkg.tar.xz
kamoso-18.12.1-1-x86_64.pkg.tar.xz
kanagram-18.12.1-1-x86_64.pkg.tar.xz
kapidox-5.54.0-1-any.pkg.tar.xz
kapman-18.12.1-1-x86_64.pkg.tar.xz
kapman-debug-18.12.1-1-x86_64.pkg.tar.xz
kapptemplate-18.12.1-1-x86_64.pkg.tar.xz
karchive-5.54.0-1-x86_64.pkg.tar.xz
karchive-debug-5.54.0-1-x86_64.pkg.tar.xz
kate-18.12.1-1-x86_64.pkg.tar.xz
kate-debug-18.12.1-1-x86_64.pkg.tar.xz
katomic-18.12.1-1-x86_64.pkg.tar.xz
katomic-debug-18.12.1-1-x86_64.pkg.tar.xz
kauth-5.54.0-1-x86_64.pkg.tar.xz
kauth-debug-5.54.0-1-x86_64.pkg.tar.xz
kbackup-18.12.1-1-x86_64.pkg.tar.xz
kblackbox-18.12.1-1-x86_64.pkg.tar.xz
kblackbox-debug-18.12.1-1-x86_64.pkg.tar.xz
kblocks-18.12.1-1-x86_64.pkg.tar.xz
kblocks-debug-18.12.1-1-x86_64.pkg.tar.xz
kblog-18.12.1-1-x86_64.pkg.tar.xz
kblog-debug-18.12.1-1-x86_64.pkg.tar.xz
kbookmarks-5.54.0-1-x86_64.pkg.tar.xz
kbookmarks-debug-5.54.0-1-x86_64.pkg.tar.xz
kbounce-18.12.1-1-x86_64.pkg.tar.xz
kbounce-debug-18.12.1-1-x86_64.pkg.tar.xz
kbreakout-18.12.1-1-x86_64.pkg.tar.xz
kbreakout-debug-18.12.1-1-x86_64.pkg.tar.xz
kbruch-18.12.1-1-x86_64.pkg.tar.xz
kbruch-debug-18.12.1-1-x86_64.pkg.tar.xz
kcachegrind-18.12.1-1-x86_64.pkg.tar.xz
kcachegrind-debug-18.12.1-1-x86_64.pkg.tar.xz
kcalc-18.12.1-1-x86_64.pkg.tar.xz
kcalc-debug-18.12.1-1-x86_64.pkg.tar.xz
kcalcore-18.12.1-1-x86_64.pkg.tar.xz
kcalcore-debug-18.12.1-1-x86_64.pkg.tar.xz
kcalutils-18.12.1-1-x86_64.pkg.tar.xz
kcalutils-debug-18.12.1-1-x86_64.pkg.tar.xz
kcharselect-18.12.1-1-x86_64.pkg.tar.xz
kcharselect-debug-18.12.1-1-x86_64.pkg.tar.xz
kcmutils-5.54.0-1-x86_64.pkg.tar.xz
kcmutils-debug-5.54.0-1-x86_64.pkg.tar.xz
kcodecs-5.54.0-1-x86_64.pkg.tar.xz
kcodecs-debug-5.54.0-1-x86_64.pkg.tar.xz
kcolorchooser-18.12.1-1-x86_64.pkg.tar.xz
kcolorchooser-debug-18.12.1-1-x86_64.pkg.tar.xz
kcompletion-5.54.0-1-x86_64.pkg.tar.xz
kcompletion-debug-5.54.0-1-x86_64.pkg.tar.xz
kconfig-5.54.0-1-x86_64.pkg.tar.xz
kconfig-debug-5.54.0-1-x86_64.pkg.tar.xz
kconfigwidgets-5.54.0-1-x86_64.pkg.tar.xz
kconfigwidgets-debug-5.54.0-1-x86_64.pkg.tar.xz
kcontacts-18.12.1-1-x86_64.pkg.tar.xz
kcontacts-debug-18.12.1-1-x86_64.pkg.tar.xz
kcoreaddons-5.54.0-1-x86_64.pkg.tar.xz
kcrash-5.54.0-1-x86_64.pkg.tar.xz
kcrash-debug-5.54.0-1-x86_64.pkg.tar.xz
kcron-18.12.1-1-x86_64.pkg.tar.xz
kcron-debug-18.12.1-1-x86_64.pkg.tar.xz
kdav-18.12.1-1-x86_64.pkg.tar.xz
kdav-debug-18.12.1-1-x86_64.pkg.tar.xz
kdbusaddons-5.54.0-1-x86_64.pkg.tar.xz
kdbusaddons-debug-5.54.0-1-x86_64.pkg.tar.xz
kdebugsettings-18.12.1-1-x86_64.pkg.tar.xz
kdebugsettings-debug-18.12.1-1-x86_64.pkg.tar.xz
kdeclarative-5.54.0-1-x86_64.pkg.tar.xz
kdeclarative-debug-5.54.0-1-x86_64.pkg.tar.xz
kde-cli-tools-5.14.5-1-x86_64.pkg.tar.xz
kde-cli-tools-debug-5.14.5-1-x86_64.pkg.tar.xz
kdecoration-5.14.5-1-x86_64.pkg.tar.xz
kdecoration-debug-5.14.5-1-x86_64.pkg.tar.xz
kded-5.54.0-1-x86_64.pkg.tar.xz
kded-debug-5.54.0-1-x86_64.pkg.tar.xz
kde-dev-scripts-18.12.1-1-any.pkg.tar.xz
kde-dev-utils-18.12.1-1-x86_64.pkg.tar.xz
kde-dev-utils-debug-18.12.1-1-x86_64.pkg.tar.xz
kdeedu-data-18.12.1-1-x86_64.pkg.tar.xz
kdegraphics-mobipocket-18.12.1-1-x86_64.pkg.tar.xz
kdegraphics-mobipocket-debug-18.12.1-1-x86_64.pkg.tar.xz
kdegraphics-thumbnailers-18.12.1-1-x86_64.pkg.tar.xz
kdegraphics-thumbnailers-debug-18.12.1-1-x86_64.pkg.tar.xz
kde-gtk-config-5.14.5-1-x86_64.pkg.tar.xz
kde-gtk-config-debug-5.14.5-1-x86_64.pkg.tar.xz
kdelibs4support-5.54.0-1-x86_64.pkg.tar.xz
kdelibs4support-debug-5.54.0-1-x86_64.pkg.tar.xz
kdenetwork-filesharing-18.12.1-1-x86_64.pkg.tar.xz
kdenetwork-filesharing-debug-18.12.1-1-x86_64.pkg.tar.xz
kdenlive-18.12.1-1-x86_64.pkg.tar.xz
kdenlive-debug-18.12.1-1-x86_64.pkg.tar.xz
kdepim-addons-18.12.1-1-x86_64.pkg.tar.xz
kdepim-addons-debug-18.12.1-1-x86_64.pkg.tar.xz
kdepim-apps-libs-18.12.1-1-x86_64.pkg.tar.xz
kdepim-apps-libs-debug-18.12.1-1-x86_64.pkg.tar.xz
kdepim-runtime-18.12.1-1-x86_64.pkg.tar.xz
kdepim-runtime-debug-18.12.1-1-x86_64.pkg.tar.xz
kdeplasma-addons-5.14.5-1-x86_64.pkg.tar.xz
kdeplasma-addons-debug-5.14.5-1-x86_64.pkg.tar.xz
kdesdk-thumbnailers-18.12.1-1-x86_64.pkg.tar.xz
kdesdk-thumbnailers-debug-18.12.1-1-x86_64.pkg.tar.xz
kdesignerplugin-5.54.0-1-x86_64.pkg.tar.xz
kdesu-5.54.0-1-x86_64.pkg.tar.xz
kdesu-debug-5.54.0-1-x86_64.pkg.tar.xz
kdewebkit-5.54.0-1-x86_64.pkg.tar.xz
kdewebkit-debug-5.54.0-1-x86_64.pkg.tar.xz
kdf-18.12.1-1-x86_64.pkg.tar.xz
kdf-debug-18.12.1-1-x86_64.pkg.tar.xz
kdialog-18.12.1-1-x86_64.pkg.tar.xz
kdialog-debug-18.12.1-1-x86_64.pkg.tar.xz
kdiamond-18.12.1-1-x86_64.pkg.tar.xz
kdiamond-debug-18.12.1-1-x86_64.pkg.tar.xz
kdnssd-5.54.0-1-x86_64.pkg.tar.xz
kdnssd-debug-5.54.0-1-x86_64.pkg.tar.xz
kdoctools-5.54.0-1-x86_64.pkg.tar.xz
kdoctools-debug-5.54.0-1-x86_64.pkg.tar.xz
keditbookmarks-18.12.1-1-x86_64.pkg.tar.xz
keditbookmarks-debug-18.12.1-1-x86_64.pkg.tar.xz
kemoticons-5.54.0-1-x86_64.pkg.tar.xz
kemoticons-debug-5.54.0-1-x86_64.pkg.tar.xz
kfilemetadata-5.54.0-1-x86_64.pkg.tar.xz
kfilemetadata-debug-5.54.0-1-x86_64.pkg.tar.xz
kfind-18.12.1-1-x86_64.pkg.tar.xz
kfind-debug-18.12.1-1-x86_64.pkg.tar.xz
kfloppy-18.12.1-1-x86_64.pkg.tar.xz
kfloppy-debug-18.12.1-1-x86_64.pkg.tar.xz
kfourinline-18.12.1-1-x86_64.pkg.tar.xz
kfourinline-debug-18.12.1-1-x86_64.pkg.tar.xz
kgamma5-5.14.5-1-x86_64.pkg.tar.xz
kgamma5-debug-5.14.5-1-x86_64.pkg.tar.xz
kgeography-18.12.1-1-x86_64.pkg.tar.xz
kgeography-debug-18.12.1-1-x86_64.pkg.tar.xz
kget-18.12.1-1-x86_64.pkg.tar.xz
kget-debug-18.12.1-1-x86_64.pkg.tar.xz
kglobalaccel-5.54.0-1-x86_64.pkg.tar.xz
kglobalaccel-debug-5.54.0-1-x86_64.pkg.tar.xz
kgoldrunner-18.12.1-1-x86_64.pkg.tar.xz
kgoldrunner-debug-18.12.1-1-x86_64.pkg.tar.xz
kgpg-18.12.1-1-x86_64.pkg.tar.xz
kgpg-debug-18.12.1-1-x86_64.pkg.tar.xz
kguiaddons-5.54.0-1-x86_64.pkg.tar.xz
kguiaddons-debug-5.54.0-1-x86_64.pkg.tar.xz
khangman-18.12.1-1-x86_64.pkg.tar.xz
khelpcenter-18.12.1-1-x86_64.pkg.tar.xz
khelpcenter-debug-18.12.1-1-x86_64.pkg.tar.xz
kholidays-1:5.54.0-1-x86_64.pkg.tar.xz
kholidays-debug-1:5.54.0-1-x86_64.pkg.tar.xz
khotkeys-5.14.5-1-x86_64.pkg.tar.xz
khotkeys-debug-5.14.5-1-x86_64.pkg.tar.xz
khtml-5.54.0-1-x86_64.pkg.tar.xz
khtml-debug-5.54.0-1-x86_64.pkg.tar.xz
ki18n-5.54.0-1-x86_64.pkg.tar.xz
ki18n-debug-5.54.0-1-x86_64.pkg.tar.xz
kiconthemes-5.54.0-1-x86_64.pkg.tar.xz
kiconthemes-debug-5.54.0-1-x86_64.pkg.tar.xz
kidentitymanagement-18.12.1-1-x86_64.pkg.tar.xz
kidentitymanagement-debug-18.12.1-1-x86_64.pkg.tar.xz
kidletime-5.54.0-1-x86_64.pkg.tar.xz
kidletime-debug-5.54.0-1-x86_64.pkg.tar.xz
kig-18.12.1-1-x86_64.pkg.tar.xz
kigo-18.12.1-1-x86_64.pkg.tar.xz
kigo-debug-18.12.1-1-x86_64.pkg.tar.xz
killbots-18.12.1-1-x86_64.pkg.tar.xz
killbots-debug-18.12.1-1-x86_64.pkg.tar.xz
kimageformats-5.54.0-1-x86_64.pkg.tar.xz
kimageformats-debug-5.54.0-1-x86_64.pkg.tar.xz
kimagemapeditor-18.12.1-1-x86_64.pkg.tar.xz
kimagemapeditor-debug-18.12.1-1-x86_64.pkg.tar.xz
kimap-18.12.1-1-x86_64.pkg.tar.xz
kimap-debug-18.12.1-1-x86_64.pkg.tar.xz
kinfocenter-5.14.5-1-x86_64.pkg.tar.xz
kinfocenter-debug-5.14.5-1-x86_64.pkg.tar.xz
kinit-5.54.0-1-x86_64.pkg.tar.xz
kinit-debug-5.54.0-1-x86_64.pkg.tar.xz
kio-5.54.0-1-x86_64.pkg.tar.xz
kio-5.54.1-1-x86_64.pkg.tar.xz
kio-debug-5.54.0-1-x86_64.pkg.tar.xz
kio-debug-5.54.1-1-x86_64.pkg.tar.xz
kio-extras-18.12.1-1-x86_64.pkg.tar.xz
kio-extras-debug-18.12.1-1-x86_64.pkg.tar.xz
kioslaves-18.12.1-1-x86_64.pkg.tar.xz
kirigami-5.54.0-1-x86_64.pkg.tar.xz
kirigami-debug-5.54.0-1-x86_64.pkg.tar.xz
kiriki-18.12.1-1-x86_64.pkg.tar.xz
kiriki-debug-18.12.1-1-x86_64.pkg.tar.xz
kitemmodels-5.54.0-1-x86_64.pkg.tar.xz
kitemmodels-debug-5.54.0-1-x86_64.pkg.tar.xz
kitemviews-5.54.0-1-x86_64.pkg.tar.xz
kitemviews-debug-5.54.0-1-x86_64.pkg.tar.xz
kiten-18.12.1-1-x86_64.pkg.tar.xz
kiten-debug-18.12.1-1-x86_64.pkg.tar.xz
kitinerary-18.12.1-1-x86_64.pkg.tar.xz
kitinerary-debug-18.12.1-1-x86_64.pkg.tar.xz
kjobwidgets-5.54.0-1-x86_64.pkg.tar.xz
kjobwidgets-debug-5.54.0-1-x86_64.pkg.tar.xz
kjs-5.54.0-1-x86_64.pkg.tar.xz
kjs-debug-5.54.0-1-x86_64.pkg.tar.xz
kjsembed-5.54.0-1-x86_64.pkg.tar.xz
kjsembed-debug-5.54.0-1-x86_64.pkg.tar.xz
kjumpingcube-18.12.1-1-x86_64.pkg.tar.xz
kjumpingcube-debug-18.12.1-1-x86_64.pkg.tar.xz
kldap-18.12.1-1-x86_64.pkg.tar.xz
kldap-debug-18.12.1-1-x86_64.pkg.tar.xz
kleopatra-18.12.1-1-x86_64.pkg.tar.xz
klettres-18.12.1-1-x86_64.pkg.tar.xz
klettres-debug-18.12.1-1-x86_64.pkg.tar.xz
klickety-18.12.1-1-x86_64.pkg.tar.xz
klickety-debug-18.12.1-1-x86_64.pkg.tar.xz
klines-18.12.1-1-x86_64.pkg.tar.xz
klines-debug-18.12.1-1-x86_64.pkg.tar.xz
kmag-18.12.1-1-x86_64.pkg.tar.xz
kmag-debug-18.12.1-1-x86_64.pkg.tar.xz
kmahjongg-18.12.1-1-x86_64.pkg.tar.xz
kmahjongg-debug-18.12.1-1-x86_64.pkg.tar.xz
kmail-18.12.1-1-x86_64.pkg.tar.xz
kmail-account-wizard-18.12.1-1-x86_64.pkg.tar.xz
kmail-account-wizard-debug-18.12.1-1-x86_64.pkg.tar.xz
kmail-debug-18.12.1-1-x86_64.pkg.tar.xz
kmailtransport-18.12.1-1-x86_64.pkg.tar.xz
kmailtransport-debug-18.12.1-1-x86_64.pkg.tar.xz
kmbox-18.12.1-1-x86_64.pkg.tar.xz
kmbox-debug-18.12.1-1-x86_64.pkg.tar.xz
kmediaplayer-5.54.0-1-x86_64.pkg.tar.xz
kmediaplayer-debug-5.54.0-1-x86_64.pkg.tar.xz
kmenuedit-5.14.5-1-x86_64.pkg.tar.xz
kmenuedit-debug-5.14.5-1-x86_64.pkg.tar.xz
kmime-18.12.1-1-x86_64.pkg.tar.xz
kmime-debug-18.12.1-1-x86_64.pkg.tar.xz
kmines-18.12.1-1-x86_64.pkg.tar.xz
kmines-debug-18.12.1-1-x86_64.pkg.tar.xz
kmix-18.12.1-1-x86_64.pkg.tar.xz
kmix-debug-18.12.1-1-x86_64.pkg.tar.xz
kmousetool-18.12.1-1-x86_64.pkg.tar.xz
kmousetool-debug-18.12.1-1-x86_64.pkg.tar.xz
kmouth-18.12.1-1-x86_64.pkg.tar.xz
kmouth-debug-18.12.1-1-x86_64.pkg.tar.xz
kmplot-18.12.1-1-x86_64.pkg.tar.xz
kmplot-debug-18.12.1-1-x86_64.pkg.tar.xz
knavalbattle-18.12.1-1-x86_64.pkg.tar.xz
knavalbattle-debug-18.12.1-1-x86_64.pkg.tar.xz
knetwalk-18.12.1-1-x86_64.pkg.tar.xz
knetwalk-debug-18.12.1-1-x86_64.pkg.tar.xz
knewstuff-5.54.0-1-x86_64.pkg.tar.xz
knewstuff-debug-5.54.0-1-x86_64.pkg.tar.xz
knotes-18.12.1-1-x86_64.pkg.tar.xz
knotes-debug-18.12.1-1-x86_64.pkg.tar.xz
knotifications-5.54.0-1-x86_64.pkg.tar.xz
knotifications-debug-5.54.0-1-x86_64.pkg.tar.xz
knotifyconfig-5.54.0-1-x86_64.pkg.tar.xz
knotifyconfig-debug-5.54.0-1-x86_64.pkg.tar.xz
kolf-18.12.1-1-x86_64.pkg.tar.xz
kolf-debug-18.12.1-1-x86_64.pkg.tar.xz
kollision-18.12.1-1-x86_64.pkg.tar.xz
kollision-debug-18.12.1-1-x86_64.pkg.tar.xz
kolourpaint-18.12.1-1-x86_64.pkg.tar.xz
kolourpaint-debug-18.12.1-1-x86_64.pkg.tar.xz
kompare-18.12.1-1-x86_64.pkg.tar.xz
kompare-debug-18.12.1-1-x86_64.pkg.tar.xz
konqueror-18.12.1-1-x86_64.pkg.tar.xz
konqueror-debug-18.12.1-1-x86_64.pkg.tar.xz
konquest-18.12.1-1-x86_64.pkg.tar.xz
konquest-debug-18.12.1-1-x86_64.pkg.tar.xz
konsole-18.12.1-1-x86_64.pkg.tar.xz
kontact-18.12.1-1-x86_64.pkg.tar.xz
kontact-debug-18.12.1-1-x86_64.pkg.tar.xz
kontactinterface-18.12.1-1-x86_64.pkg.tar.xz
kontactinterface-debug-18.12.1-1-x86_64.pkg.tar.xz
kopete-18.12.1-1-x86_64.pkg.tar.xz
korganizer-18.12.1-1-x86_64.pkg.tar.xz
korganizer-debug-18.12.1-1-x86_64.pkg.tar.xz
kpackage-5.54.0-1-x86_64.pkg.tar.xz
kpackage-debug-5.54.0-1-x86_64.pkg.tar.xz
kparts-5.54.0-1-x86_64.pkg.tar.xz
kparts-debug-5.54.0-1-x86_64.pkg.tar.xz
kpat-18.12.1-1-x86_64.pkg.tar.xz
kpat-debug-18.12.1-1-x86_64.pkg.tar.xz
kpeople-5.54.0-1-x86_64.pkg.tar.xz
kpeople-debug-5.54.0-1-x86_64.pkg.tar.xz
kpimtextedit-18.12.1-1-x86_64.pkg.tar.xz
kpimtextedit-debug-18.12.1-1-x86_64.pkg.tar.xz
kpkpass-18.12.1-1-x86_64.pkg.tar.xz
kpkpass-debug-18.12.1-1-x86_64.pkg.tar.xz
kplotting-5.54.0-1-x86_64.pkg.tar.xz
kplotting-debug-5.54.0-1-x86_64.pkg.tar.xz
kpty-5.54.0-1-x86_64.pkg.tar.xz
kpty-debug-5.54.0-1-x86_64.pkg.tar.xz
kqtquickcharts-18.12.1-1-x86_64.pkg.tar.xz
kqtquickcharts-debug-18.12.1-1-x86_64.pkg.tar.xz
krdc-18.12.1-1-x86_64.pkg.tar.xz
krdc-debug-18.12.1-1-x86_64.pkg.tar.xz
kreversi-18.12.1-1-x86_64.pkg.tar.xz
kreversi-debug-18.12.1-1-x86_64.pkg.tar.xz
krfb-18.12.1-1-x86_64.pkg.tar.xz
krfb-debug-18.12.1-1-x86_64.pkg.tar.xz
kross-5.54.0-1-x86_64.pkg.tar.xz
kross-debug-5.54.0-1-x86_64.pkg.tar.xz
kross-interpreters-18.12.1-1-x86_64.pkg.tar.xz
kross-interpreters-debug-18.12.1-1-x86_64.pkg.tar.xz
kruler-18.12.1-1-x86_64.pkg.tar.xz
kruler-debug-18.12.1-1-x86_64.pkg.tar.xz
krunner-5.54.0-1-x86_64.pkg.tar.xz
krunner-debug-5.54.0-1-x86_64.pkg.tar.xz
kscreen-5.14.5-1-x86_64.pkg.tar.xz
kscreen-debug-5.14.5-1-x86_64.pkg.tar.xz
kscreenlocker-5.14.5-1-x86_64.pkg.tar.xz
kscreenlocker-debug-5.14.5-1-x86_64.pkg.tar.xz
kservice-5.54.0-1-x86_64.pkg.tar.xz
kservice-debug-5.54.0-1-x86_64.pkg.tar.xz
kshisen-18.12.1-1-x86_64.pkg.tar.xz
kshisen-debug-18.12.1-1-x86_64.pkg.tar.xz
ksirk-18.12.1-1-x86_64.pkg.tar.xz
ksirk-debug-18.12.1-1-x86_64.pkg.tar.xz
ksmtp-18.12.1-1-x86_64.pkg.tar.xz
ksnakeduel-18.12.1-1-x86_64.pkg.tar.xz
ksnakeduel-debug-18.12.1-1-x86_64.pkg.tar.xz
kspaceduel-18.12.1-1-x86_64.pkg.tar.xz
kspaceduel-debug-18.12.1-1-x86_64.pkg.tar.xz
ksquares-18.12.1-1-x86_64.pkg.tar.xz
ksquares-debug-18.12.1-1-x86_64.pkg.tar.xz
ksshaskpass-5.14.5-1-x86_64.pkg.tar.xz
ksshaskpass-debug-5.14.5-1-x86_64.pkg.tar.xz
ksudoku-18.12.1-1-x86_64.pkg.tar.xz
ksudoku-debug-18.12.1-1-x86_64.pkg.tar.xz
ksysguard-5.14.5-1-x86_64.pkg.tar.xz
ksysguard-debug-5.14.5-1-x86_64.pkg.tar.xz
ksystemlog-18.12.1-1-x86_64.pkg.tar.xz
ksystemlog-debug-18.12.1-1-x86_64.pkg.tar.xz
kteatime-18.12.1-1-x86_64.pkg.tar.xz
kteatime-debug-18.12.1-1-x86_64.pkg.tar.xz
ktexteditor-5.54.0-1-x86_64.pkg.tar.xz
ktexteditor-debug-5.54.0-1-x86_64.pkg.tar.xz
ktextwidgets-5.54.0-1-x86_64.pkg.tar.xz
ktextwidgets-debug-5.54.0-1-x86_64.pkg.tar.xz
ktimer-18.12.1-1-x86_64.pkg.tar.xz
ktimer-debug-18.12.1-1-x86_64.pkg.tar.xz
ktnef-18.12.1-1-x86_64.pkg.tar.xz
ktouch-18.12.1-1-x86_64.pkg.tar.xz
ktouch-debug-18.12.1-1-x86_64.pkg.tar.xz
ktp-accounts-kcm-18.12.1-1-x86_64.pkg.tar.xz
ktp-approver-18.12.1-1-x86_64.pkg.tar.xz
ktp-auth-handler-18.12.1-1-x86_64.pkg.tar.xz
ktp-call-ui-18.12.1-1-x86_64.pkg.tar.xz
ktp-call-ui-debug-18.12.1-1-x86_64.pkg.tar.xz
ktp-common-internals-18.12.1-1-x86_64.pkg.tar.xz
ktp-contact-list-18.12.1-1-x86_64.pkg.tar.xz
ktp-contact-runner-18.12.1-1-x86_64.pkg.tar.xz
ktp-filetransfer-handler-18.12.1-1-x86_64.pkg.tar.xz
ktp-kded-module-18.12.1-1-x86_64.pkg.tar.xz
ktp-send-file-18.12.1-1-x86_64.pkg.tar.xz
ktp-text-ui-18.12.1-1-x86_64.pkg.tar.xz
ktuberling-18.12.1-1-x86_64.pkg.tar.xz
ktuberling-debug-18.12.1-1-x86_64.pkg.tar.xz
kturtle-18.12.1-1-x86_64.pkg.tar.xz
kturtle-debug-18.12.1-1-x86_64.pkg.tar.xz
kubrick-18.12.1-1-x86_64.pkg.tar.xz
kubrick-debug-18.12.1-1-x86_64.pkg.tar.xz
kunitconversion-5.54.0-1-x86_64.pkg.tar.xz
kunitconversion-debug-5.54.0-1-x86_64.pkg.tar.xz
kwallet-5.54.0-1-x86_64.pkg.tar.xz
kwallet-debug-5.54.0-1-x86_64.pkg.tar.xz
kwalletmanager-18.12.1-1-x86_64.pkg.tar.xz
kwalletmanager-debug-18.12.1-1-x86_64.pkg.tar.xz
kwallet-pam-5.14.5-1-x86_64.pkg.tar.xz
kwallet-pam-debug-5.14.5-1-x86_64.pkg.tar.xz
kwave-18.12.1-1-x86_64.pkg.tar.xz
kwave-debug-18.12.1-1-x86_64.pkg.tar.xz
kwayland-5.54.0-1-x86_64.pkg.tar.xz
kwayland-debug-5.54.0-1-x86_64.pkg.tar.xz
kwayland-integration-5.14.5-1-x86_64.pkg.tar.xz
kwayland-integration-debug-5.14.5-1-x86_64.pkg.tar.xz
kwidgetsaddons-5.54.0-1-x86_64.pkg.tar.xz
kwidgetsaddons-debug-5.54.0-1-x86_64.pkg.tar.xz
kwin-5.14.5-1-x86_64.pkg.tar.xz
kwin-debug-5.14.5-1-x86_64.pkg.tar.xz
kwindowsystem-5.54.0-1-x86_64.pkg.tar.xz
kwindowsystem-debug-5.54.0-1-x86_64.pkg.tar.xz
kwordquiz-18.12.1-1-x86_64.pkg.tar.xz
kwordquiz-debug-18.12.1-1-x86_64.pkg.tar.xz
kwrite-18.12.1-1-x86_64.pkg.tar.xz
kwrited-5.14.5-1-x86_64.pkg.tar.xz
kwrited-debug-5.14.5-1-x86_64.pkg.tar.xz
kwrite-debug-18.12.1-1-x86_64.pkg.tar.xz
kxmlgui-5.54.0-1-x86_64.pkg.tar.xz
kxmlgui-debug-5.54.0-1-x86_64.pkg.tar.xz
kxmlrpcclient-5.54.0-1-x86_64.pkg.tar.xz
kxmlrpcclient-debug-5.54.0-1-x86_64.pkg.tar.xz
lib32-fontconfig-2.13.0-1-x86_64.pkg.tar.xz
lib32-fontconfig-2.13.1-1-x86_64.pkg.tar.xz
lib32-freetype2-2.9.1-1-x86_64.pkg.tar.xz
lib32-harfbuzz-2.2.0-1-x86_64.pkg.tar.xz
lib32-libelf-0.175-2-x86_64.pkg.tar.xz
lib32-nss-3.41.1-1-x86_64.pkg.tar.xz
lib32-virtualgl-2.6.1-1-x86_64.pkg.tar.xz
libastro-18.12.1-1-x86_64.pkg.tar.xz
libastro-debug-18.12.1-1-x86_64.pkg.tar.xz
libelf-0.175-1-x86_64.pkg.tar.xz
libgravatar-18.12.1-1-x86_64.pkg.tar.xz
libgravatar-debug-18.12.1-1-x86_64.pkg.tar.xz
libkcddb-18.12.1-1-x86_64.pkg.tar.xz
libkcddb-debug-18.12.1-1-x86_64.pkg.tar.xz
libkcompactdisc-18.12.1-1-x86_64.pkg.tar.xz
libkcompactdisc-debug-18.12.1-1-x86_64.pkg.tar.xz
libkdcraw-18.12.1-1-x86_64.pkg.tar.xz
libkdcraw-debug-18.12.1-1-x86_64.pkg.tar.xz
libkdegames-18.12.1-1-x86_64.pkg.tar.xz
libkdegames-debug-18.12.1-1-x86_64.pkg.tar.xz
libkdepim-18.12.1-1-x86_64.pkg.tar.xz
libkdepim-debug-18.12.1-1-x86_64.pkg.tar.xz
libkeduvocdocument-18.12.1-1-x86_64.pkg.tar.xz
libkexiv2-18.12.1-1-x86_64.pkg.tar.xz
libkexiv2-debug-18.12.1-1-x86_64.pkg.tar.xz
libkgapi-18.12.1-1-x86_64.pkg.tar.xz
libkgapi-debug-18.12.1-1-x86_64.pkg.tar.xz
libkgeomap-18.12.1-1-x86_64.pkg.tar.xz
libkgeomap-debug-18.12.1-1-x86_64.pkg.tar.xz
libkipi-18.12.1-1-x86_64.pkg.tar.xz
libkipi-debug-18.12.1-1-x86_64.pkg.tar.xz
libkleo-18.12.1-1-x86_64.pkg.tar.xz
libkleo-debug-18.12.1-1-x86_64.pkg.tar.xz
libkmahjongg-18.12.1-1-x86_64.pkg.tar.xz
libkmahjongg-debug-18.12.1-1-x86_64.pkg.tar.xz
libkomparediff2-18.12.1-1-x86_64.pkg.tar.xz
libksane-18.12.1-1-x86_64.pkg.tar.xz
libksane-debug-18.12.1-1-x86_64.pkg.tar.xz
libkscreen-5.14.5-1-x86_64.pkg.tar.xz
libkscreen-debug-5.14.5-1-x86_64.pkg.tar.xz
libksieve-18.12.1-1-x86_64.pkg.tar.xz
libksieve-debug-18.12.1-1-x86_64.pkg.tar.xz
libksysguard-5.14.5-1-x86_64.pkg.tar.xz
libksysguard-debug-5.14.5-1-x86_64.pkg.tar.xz
libmtp-1.1.16-1-x86_64.pkg.tar.xz
libplacebo-1.7.0-1-x86_64.pkg.tar.xz
libraw-0.19.2-1-x86_64.pkg.tar.xz
libsodium-1.0.17-1-x86_64.pkg.tar.xz
lokalize-18.12.1-1-x86_64.pkg.tar.xz
lokalize-debug-18.12.1-1-x86_64.pkg.tar.xz
lsb-release-1.4-24-x86_64.pkg.tar.xz
lskat-18.12.1-1-x86_64.pkg.tar.xz
lskat-debug-18.12.1-1-x86_64.pkg.tar.xz
mailcommon-18.12.1-1-x86_64.pkg.tar.xz
mailcommon-debug-18.12.1-1-x86_64.pkg.tar.xz
mailimporter-18.12.1-1-x86_64.pkg.tar.xz
mailimporter-debug-18.12.1-1-x86_64.pkg.tar.xz
marble-18.12.1-1-x86_64.pkg.tar.xz
marble-data-18.12.1-1-x86_64.pkg.tar.xz
marble-debug-18.12.1-1-x86_64.pkg.tar.xz
mbox-importer-18.12.1-1-x86_64.pkg.tar.xz
mbox-importer-debug-18.12.1-1-x86_64.pkg.tar.xz
messagelib-18.12.1-1-x86_64.pkg.tar.xz
messagelib-debug-18.12.1-1-x86_64.pkg.tar.xz
milou-5.14.5-1-x86_64.pkg.tar.xz
milou-debug-5.14.5-1-x86_64.pkg.tar.xz
minuet-18.12.1-1-x86_64.pkg.tar.xz
minuet-debug-18.12.1-1-x86_64.pkg.tar.xz
mlt-6.12.0-1-x86_64.pkg.tar.xz
mlt-debug-6.12.0-1-x86_64.pkg.tar.xz
mlt-python-bindings-6.12.0-1-x86_64.pkg.tar.xz
mlt-python-bindings-debug-6.12.0-1-x86_64.pkg.tar.xz
modemmanager-qt-5.54.0-1-x86_64.pkg.tar.xz
modemmanager-qt-debug-5.54.0-1-x86_64.pkg.tar.xz
nasm-2.14.02-1-x86_64.pkg.tar.xz
networkmanager-qt-5.54.0-1-x86_64.pkg.tar.xz
networkmanager-qt-debug-5.54.0-1-x86_64.pkg.tar.xz
nss-3.41.1-1-x86_64.pkg.tar.xz
obexftp-0.24.2-1-x86_64.pkg.tar.xz
okular-18.12.1-1-x86_64.pkg.tar.xz
okular-debug-18.12.1-1-x86_64.pkg.tar.xz
opencore-amr-0.1.5-1-x86_64.pkg.tar.xz
opencv-3.4.5-1-x86_64.pkg.tar.xz
opencv-samples-3.4.5-1-x86_64.pkg.tar.xz
openobex-1.7.2-1-x86_64.pkg.tar.xz
oxygen-5.14.5-1-x86_64.pkg.tar.xz
oxygen-cursors-5.14.5-1-x86_64.pkg.tar.xz
oxygen-debug-5.14.5-1-x86_64.pkg.tar.xz
oxygen-icons-1:5.54.0-1-x86_64.pkg.tar.xz
oxygen-icons-svg-1:5.54.0-1-x86_64.pkg.tar.xz
pacman-mirrorlist-20190115-1-x86_64.pkg.tar.xz
pacman-mirrorlist-20190202-1-x86_64.pkg.tar.xz
palapeli-18.12.1-1-x86_64.pkg.tar.xz
palapeli-debug-18.12.1-1-x86_64.pkg.tar.xz
parley-18.12.1-1-x86_64.pkg.tar.xz
php-7.1.26-1-x86_64.pkg.tar.xz
php-apache-7.1.26-1-x86_64.pkg.tar.xz
php-cgi-7.1.26-1-x86_64.pkg.tar.xz
php-dblib-7.1.26-1-x86_64.pkg.tar.xz
php-embed-7.1.26-1-x86_64.pkg.tar.xz
php-enchant-7.1.26-1-x86_64.pkg.tar.xz
php-fpm-7.1.26-1-x86_64.pkg.tar.xz
php-gd-7.1.26-1-x86_64.pkg.tar.xz
php-imap-7.1.26-1-x86_64.pkg.tar.xz
php-intl-7.1.26-1-x86_64.pkg.tar.xz
php-mcrypt-7.1.26-1-x86_64.pkg.tar.xz
php-odbc-7.1.26-1-x86_64.pkg.tar.xz
php-pgsql-7.1.26-1-x86_64.pkg.tar.xz
php-phpdbg-7.1.26-1-x86_64.pkg.tar.xz
php-pspell-7.1.26-1-x86_64.pkg.tar.xz
php-snmp-7.1.26-1-x86_64.pkg.tar.xz
php-sqlite-7.1.26-1-x86_64.pkg.tar.xz
php-tidy-7.1.26-1-x86_64.pkg.tar.xz
php-xsl-7.1.26-1-x86_64.pkg.tar.xz
picmi-18.12.1-1-x86_64.pkg.tar.xz
picmi-debug-18.12.1-1-x86_64.pkg.tar.xz
pimcommon-18.12.1-1-x86_64.pkg.tar.xz
pimcommon-debug-18.12.1-1-x86_64.pkg.tar.xz
pim-data-exporter-18.12.1-1-x86_64.pkg.tar.xz
pim-data-exporter-debug-18.12.1-1-x86_64.pkg.tar.xz
pim-sieve-editor-18.12.1-1-x86_64.pkg.tar.xz
pim-sieve-editor-debug-18.12.1-1-x86_64.pkg.tar.xz
plasma5-applets-ktp-desktop-18.12.1-1-x86_64.pkg.tar.xz
plasma-browser-integration-5.14.5-1-x86_64.pkg.tar.xz
plasma-browser-integration-debug-5.14.5-1-x86_64.pkg.tar.xz
plasma-desktop-5.14.5-1-x86_64.pkg.tar.xz
plasma-desktop-debug-5.14.5-1-x86_64.pkg.tar.xz
plasma-framework-5.54.0-1-x86_64.pkg.tar.xz
plasma-framework-debug-5.54.0-1-x86_64.pkg.tar.xz
plasma-integration-5.14.5-1-x86_64.pkg.tar.xz
plasma-integration-debug-5.14.5-1-x86_64.pkg.tar.xz
plasma-nm-5.14.5-1-x86_64.pkg.tar.xz
plasma-nm-debug-5.14.5-1-x86_64.pkg.tar.xz
plasma-pa-5.14.5-1-x86_64.pkg.tar.xz
plasma-pa-debug-5.14.5-1-x86_64.pkg.tar.xz
plasma-sdk-5.14.5-1-x86_64.pkg.tar.xz
plasma-sdk-debug-5.14.5-1-x86_64.pkg.tar.xz
plasma-vault-5.14.5-1-x86_64.pkg.tar.xz
plasma-vault-debug-5.14.5-1-x86_64.pkg.tar.xz
plasma-wayland-session-5.14.5-1-x86_64.pkg.tar.xz
plasma-wayland-session-5.14.5-4-x86_64.pkg.tar.xz
plasma-workspace-5.14.5-1-x86_64.pkg.tar.xz
plasma-workspace-5.14.5-4-x86_64.pkg.tar.xz
plasma-workspace-debug-5.14.5-1-x86_64.pkg.tar.xz
plasma-workspace-debug-5.14.5-4-x86_64.pkg.tar.xz
plasma-workspace-wallpapers-5.14.5-1-x86_64.pkg.tar.xz
polkit-kde-agent-5.14.5-1-x86_64.pkg.tar.xz
postgresql-10.6-1-x86_64.pkg.tar.xz
postgresql-docs-10.6-1-x86_64.pkg.tar.xz
postgresql-libs-10.6-1-x86_64.pkg.tar.xz
postgresql-old-upgrade-9.6.11-1-x86_64.pkg.tar.xz
powerdevil-5.14.5-1-x86_64.pkg.tar.xz
powerdevil-debug-5.14.5-1-x86_64.pkg.tar.xz
poxml-18.12.1-1-x86_64.pkg.tar.xz
poxml-debug-18.12.1-1-x86_64.pkg.tar.xz
print-manager-18.12.1-1-x86_64.pkg.tar.xz
print-manager-debug-18.12.1-1-x86_64.pkg.tar.xz
prison-5.54.0-1-x86_64.pkg.tar.xz
prison-debug-5.54.0-1-x86_64.pkg.tar.xz
purpose-5.54.0-1-x86_64.pkg.tar.xz
qqc2-desktop-style-5.54.0-1-x86_64.pkg.tar.xz
qqc2-desktop-style-debug-5.54.0-1-x86_64.pkg.tar.xz
rocs-18.12.1-1-x86_64.pkg.tar.xz
rocs-debug-18.12.1-1-x86_64.pkg.tar.xz
rust-1.32.0-1-x86_64.pkg.tar.xz
sddm-kcm-1:5.14.5-1-x86_64.pkg.tar.xz
sddm-kcm-debug-1:5.14.5-1-x86_64.pkg.tar.xz
serf-1.3.9-1-x86_64.pkg.tar.xz
shared-mime-info-1.12-1-x86_64.pkg.tar.xz
signon-kwallet-extension-18.12.1-1-x86_64.pkg.tar.xz
solid-5.54.0-1-x86_64.pkg.tar.xz
solid-debug-5.54.0-1-x86_64.pkg.tar.xz
sonnet-5.54.0-1-x86_64.pkg.tar.xz
sonnet-debug-5.54.0-1-x86_64.pkg.tar.xz
spectacle-18.12.1-1-x86_64.pkg.tar.xz
spectacle-debug-18.12.1-1-x86_64.pkg.tar.xz
srt-1.3.1-1-x86_64.pkg.tar.xz
steam-1.0.0.59-1-x86_64.pkg.tar.xz
step-18.12.1-1-x86_64.pkg.tar.xz
step-debug-18.12.1-1-x86_64.pkg.tar.xz
subversion-1.11.1-1-x86_64.pkg.tar.xz
svgpart-18.12.1-1-x86_64.pkg.tar.xz
svgpart-debug-18.12.1-1-x86_64.pkg.tar.xz
sweeper-18.12.1-1-x86_64.pkg.tar.xz
sweeper-debug-18.12.1-1-x86_64.pkg.tar.xz
syndication-1:5.54.0-1-x86_64.pkg.tar.xz
syndication-debug-1:5.54.0-1-x86_64.pkg.tar.xz
syntax-highlighting-5.53.0-2-x86_64.pkg.tar.xz
syntax-highlighting-5.54.0-1-x86_64.pkg.tar.xz
syntax-highlighting-debug-5.53.0-2-x86_64.pkg.tar.xz
syntax-highlighting-debug-5.54.0-1-x86_64.pkg.tar.xz
systemsettings-5.14.5-1-x86_64.pkg.tar.xz
systemsettings-debug-5.14.5-1-x86_64.pkg.tar.xz
tcl-8.6.9-1-x86_64.pkg.tar.xz
terminus-font-4.47-1-x86_64.pkg.tar.xz
threadweaver-5.54.0-1-x86_64.pkg.tar.xz
threadweaver-debug-5.54.0-1-x86_64.pkg.tar.xz
tk-8.6.9-1-x86_64.pkg.tar.xz
tor-0.3.5.7-1-x86_64.pkg.tar.xz
torsocks-2.3.0-1-x86_64.pkg.tar.xz
ttf-liberation-2.00.4-1-any.pkg.tar.xz
umbrello-18.12.1-1-x86_64.pkg.tar.xz
umbrello-debug-18.12.1-1-x86_64.pkg.tar.xz
user-manager-5.14.5-1-x86_64.pkg.tar.xz
user-manager-debug-5.14.5-1-x86_64.pkg.tar.xz
vala-0.42.4-1-x86_64.pkg.tar.xz
virtualgl-2.6.1-1-x86_64.pkg.tar.xz
vlc-3.0.6-1-x86_64.pkg.tar.xz
wine-4.0-1-x86_64.pkg.tar.xz
wine-4.1-1-x86_64.pkg.tar.xz
xbitmaps-1.1.2-1-x86_64.pkg.tar.xz
xdg-desktop-portal-kde-5.14.5-1-x86_64.pkg.tar.xz
zeroconf-ioslave-18.12.1-1-x86_64.pkg.tar.xz
zeroconf-ioslave-debug-18.12.1-1-x86_64.pkg.tar.xz

Most of our mirrors take 12-24 hours to synchronize with the central repositories on the origin server. Use the mirror status web page to see when your mirror of choice last synchronized.

Run sudo pacman -Syu to update and upgrade your system. It should be safe to answer y (for yes) to any question about replacing installed packages with new ones. If you have any issues updating or upgrading, reply to this topic with the complete input and output in English, i.e. run LC_ALL=C sudo pacman -Syu.


“The KDE dragons” by Tyson Tan, Creative Commons BY-SA, made with Krita.

Posts: 2

Participants: 1

Read full topic

FOSDEM is over and it is time to recap.

Last year I decided to take a break and did not attend to the event. This year I was really looking forward to attend.

I will start by thanking Codethink Ltd for sponsoring my trip. It is always a pleasure to work in a company that supports their employees in attending to Open Source community events. Codethink sponsored FOSDEM once again by the way.

It has not been the easiest edition for me because I have been sick the past days and was not fully recovered. The cold weather didn’t help so I decided to stay away from late nights and Trappist beers. It was hard to go to bed at a decent time every night and miss some night gatherings like the KDE and GNOME ones or the FOSDEM party on Friday at Delirium Cafe.

On February 1st I attended to the CHAOSScon EU conference. I liked it. It was well organised and I could have several interesting conversations about what to measure and why when it comes to Open Source communities. I attended to most of the talks and I participated in one of the workshops. I think I can add some value in the GMD working group. Let’s see if I have the time to contribute. It would be fun.

I would like to highlight the prominent role that Bitergia, a Spanish company, plays in the CHAOSS project, a Linux Foundation Initiative. Despite being a small organization, they are in the front line when it comes to software analytics, specially in the Open Source space. Well done Bitergians!

As you probably know, I am putting some effort, together with some KDE developers, in calling the attention within the KDE community about the immense opportunity this project has in embedded, now that Plasma Mobile and Kirigami are a reality. KDE project is making an efforts also to show devices with this new shell at events, so professionals and corporations can identify the value that the KDE as community can add in ecosystems like the (open) automotive ones.

ELCE 2018 was the first event were we showed the outcome of our efforts in embedded ()in mobile we have for some time now). FOSDEM has been the second one. There will be more during this 2019.

davPlasma Mobile + Yocto in a RPi3 and Risc-V boards at the KDE booth. FOSDEM 2019

It was a pleasant surprise to see several boards and devices at the KDE booth, my RPi3 and a Risc-V board among them, both with Yocto and Plasma Mobile. I think attendees were both, surprised and happy to see KDE showing new and attractive stuff.

krita demoWolthera sketching live. Krita demo. FOSDEM 2019

Krita had a strong presence at the booth and the last day there was a KDEnlive demo, among other activities. A Pinebook, a Slimbook and an ARM based

Rockchip board completed the show. I think the booth worked extremely well. Some of the messages published in social media reflected it.

Special thanks to every KDE contributors that made the booth possible. I was really proud to be part of such an amazing group of people.

I attended to the automotive/embedded dinner on Saturday night. There is a group of people interested in reviving the Embedded devroom at FOSDEM 2020. The dinner’s main goal was to find out how many people wanted to help and coordinate them. Mission accomplished! Thanks Jan-Simon and Leon Avani for organising it.

On Sunday night I attended to the OpenChain informal dinner. Thanks Shane for organising it. I had a really good time. Lawyers are very cool people. There were several interesting conversations there about the FLA, which is not well known yet among the legal and developer communities despite being around for several years.

I tried to attend to three talks during FOSDEM. I couldn´t even get close to the door in any of them because, not just were the rooms packed, but there was a long queue of people waiting to get in. I got a little frustrated and decided to stop trying. Videos will come to the rescue.

On the bright side, the organisers opened an additional cafeteria this year. I usually take some sandwiches and water with me to the the venue so I can skip the long lines to get something to eat. On Sunday I didn’t and it worked out well. I guess that the days when it was impossible to get a sandwich are over. Yay!

As usual I could talk with lots of people which is the part I like the most about this event. I could also chat with some of the many Codethings (colleagues from Codethink) that attended to the event. I also take with me new contacts and plenty of new technologies and project to evaluate.

In general it has been a very good event. I will spend a week in Manchester after FOSDEM and then go back home. My next stop will be Embedded World, in Nuremberg, GE at the end of the month.

Thanks to the FOSDEM organisers and volunteers for your effort and dedication.

FOSDEM rocks!


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.