Friday, February 26, 2021

Sometimes It's The Little Things

Big, new things are always a blast to work on, but sometimes polishing is also an enormously important part of software development which we often find ourselves just kind of pushing ahead of us on the todo list, because there's more fun things to be working on. However, those rough edges and lacklustre surfaces also need attention.

Just One Word

Occasionally you come across something where there's just that one word that looks out of place. You end up assuming that there must be some huge, complex underlying reason for why it's like that. And then, when you finally decide to go and look at it, you discover that it really is just a small wording error, either a copy/paste error, or just outright mis-wording something and then not catching it before rolling it out.
For example, when performing a system update in Discover, the Tasks view showed the string "View Updates - Installing". It turned out that, rather than being some scary thing due to a high level of abstraction and reuse of strings in various places, requiring decoupling and things like that, this was one of those situations where it was just worded incorrectly, and that's been fixed now.

Down In Front

A super specific one here. Sometimes in Kirigami applications, the handles for the drawers (global and context) will be covering bits of the UI. This happens when something is put at the bottom of a page, specifically on the very left or right most side of the page. The fix is extremely simple, so if you come across something like that, sorting it out just takes a single line.

Don't Get Cut Off

You're going through your day to day, maybe playing around with the layout of your desktop, or actually working on some important work type thing, or an even more important hobby task, and you come across a bit of the user interface that looks like it's been chopped off.
Sometimes these turn into something a bit more involved, but even then you can start out with something that maybe isn't exactly perfect, or even particularly good at all. Other members of our little community will be able to guide you in a direction that actually works more properly, and perhaps even helps fix an issue found in other, sometimes surprising places.
Sometimes they are outright simple, however. Indeed, this second one (unmerged as i'm writing these words) was what made me write this entry, because...

Now Over To You

My hope in writing this short update of semi-randomly selected things is that i might convince you that when you spot things like that, you are more than welcome hop over to KDE's Invent and take a look at the code yourself. Maybe it is one of the big, scary things, and that's where bugs.kde.org comes in - tell us it's wrong, because while it might be super obvious to you, maybe the rest of us just haven't noticed, and that makes your observation great in itself.
But if it's not, well... why not grab yourself a clone and put up a merge request or two? Remember, those merge requests exist to specifically make sure that if you've missed something, others will catch it during the review, so you don't have to be scared. Give it a shot, the worst that can happen is you'll learn something about a codebase you've not looked at before :)



The word of the day is: Shiny, because that's what things become when you polish them

Labels: , ,

Monday, February 22, 2021

The Application Of New Things

KDE has, for a very long time, had this thing called Get Hot New Stuff, which is the name for a whole pile of tech which all exists just so you can just click a button in your wallpapers dialog that will pop up a dialog where you can, well, get hot new wallpapers for your system. Or mouse cursors. Or Plasma themes. Or books in Peruse. Or templates in a bunch of apps, or any variety of other things.

For a while now, it's been possible to add something called an adoption command, which is what will make a button show up in that dialog, and in Discover, labelled "Use". It's been used in a few places, but i recently sat down and got a bunch of little tools done that lets you set various things from the command line, and that in turn allowed me to also add those tools as adoption commands for the Get Hot New Stuff dialogues which download the stuff that those tools can apply.

How To Use A Wallpaper

What that means is that, fresh off the back of the 5.21 release, we've got that merged in, and it should become available to anybody running master pretty much immediately, and anybody who doesn't, well, hopefully in not too long.

The specific things that have had an adoption command added are:
  • Window Decorations - that is, themes for KWin's Aurora theming engine
  • Wallpapers - technically there was already an adoption command set, but it didn't work very reliably
  • Cursor Themes - cursor as in mouse cursor
  • Color Schemes - the things which define what colours your entire desktop uses
  • Plasma Themes - what defines how Plasma draws all it's UI components (panels, applets, all that lovely stuff)
  • Global Themes - complete packages of full-desktop settings, which adapt the look and feel of your entire desktop to something new
What all this means is that when scrolling through the content of one of the dialogues which let you grab these things, if there's a way to just outright guess what the thing should be applied to, in a global sort of fashion, there should be an adoption command for it.

It also means that, apart from the KWin tool, which is not installed as a systemwide tool (look for kwin-applywindowdecoration in your libexec if you want a play), you can now interact with these things from the command line. This is more or less done the same way you've been able to do with Global Themes for a while now using lookandfeeltool, which with this patch also got a quick bit of attention to make sure it would work as an adoption command, as well as a quick rename to match the naming scheme for the new tools. The new tools are all named plasma-apply-(thingtheyapply), so if you just type that out and tap the tab button, you should see all of them show up for you to play with.

What Desktop Themes Does leinir Have?

Finally, if you spot a dialog that seems like it should have this, but doesn't, do give me a poke, either here or on bugs.kde.org, and we can try and sort it out. Also, if you look at the merge request itself, you'll notice how these tools really aren't particularly scary for the most part. If you would like somewhere nice and self contained to jump in and do some work? Well, there's a good spot for you :)

The word of the day is: User. The thing you become upon clicking the Use button in a Get Hot New Stuff dialog ;)

Labels: , ,

Friday, November 27, 2020

The Homer Car, But It's leinir's Laptop

Or alternatively "But Why Don't You Just Get A Different One?"

We are now into week three of me sitting in a virtual machine on my better half's laptop, while we wait for my replacement Dell XPS 13 2-in-1 (2019) to arrive, after Dell conceded that they could not fix the old one. Short version: The graphics fan went wonky and stopped spinning, so they sent an engineer out to replace the mainboard (because everything is soldered on, including the fan assembly), and then it stopped booting. So they sent out another, and that also immediately failed to post, and then decided that wasn't worth trying again, so they would send me a replacement laptop. Three weeks later, and i have a tracking number, with no updates for a couple of days, though it also isn't past the estimate they gave me for getting it (two weeks for an in stock item, from Ireland to England, nice...).

Now, the above might sound like a perfect reason to just cut my losses and switch to a different machine but here's where it all gets a little more silly: This is literally the only laptop on the market today which has the set of requirements i have for a laptop. They are not, i think, particularly terrible ones, but it turns out that there is a significant gap in the market between this specific laptop, and everything else out there. 

Here's a quick little rundown of those requirements:

  • 360-degree hinge Basically, a way to turn my laptop into something that works like a screen for use at a my desk, where i plug in a proper keyboard and a trackball. In essence, this means a 2-in-1 design of some type, with the yoga-style 360 degree hinge design coming out on top for basically being able to turn the laptop into a display with a built-in stand. Acer's Ezel hinge design also works reasonably well for this, though it does put the display further away as a result of the design.
  • High-resolution display My optimal resolution at the 13 inch size would be 1440p, but that's not an option on Dell's 2-in-1 offering, so 4K it is - but 1440p would be better at this size, then i wouldn't have to deal with fractional scaling (i run the system at 150%, fine in most cases, just a tiny bit odd in others, but entirely fine for the vast majority of situations). If there was a 15 or 16 inch 2-in-1 with a 4K display, that would be neat, but no problem, 13 inches works fine as well.
  • Touch screen with pen support Yes, really, i do use this. It might seem like a gimmick if you've not spent time with it, but i use it for a variety of purposes. The touch screen is just one of those things that comes in handy for just... using a machine for casual consumption of stuff, and well, the convertible mode thing above means such a laptop also works not only as a display with keyboard and mouse plugged in, but also as a passive consumption device when you just have it in pure tablet mode. The pen? Yes, sure, i could just sketch ui stuff with a finger, but a pen is just so much more pleasant to use. Doesn't even have to dock, magnets work fine for me.
  • Proprietary driver go away Hoping i don't need to explain this one too much, don't think there's all that much to discuss about how those aren't great ;)
  • Recent-gen Core i7 or equivalent Similarly, hoping this will come as no huge surprise. Writing code, you kind of need crunch those numbers a bunch, and an i3 or (sorry Pine64, but maybe that's something that could be fixed) current arm options aren't going to cut it.
  • At least 32GiB of RAM Simple enough, lots of laptops with those. But wait, that first requirement up there means that apparently there isn't. It turns out that, of all the requirements that one might have for a laptop today, any amount of memory that allows you to open KDevelop and throw, say, a couple of our larger frameworks at it (or, dog forgive me, the giant that is Calligra) means that you are in workstation territory, which means that you suddenly have no options that are not either experimental creativity monsters, or something you can't have in any form that is not... just a laptop.

The requirements list above means that out of all the available machines on the market, there is precisely one that fulfills them all. Oh what a luxury problem to have, yes, most definitely. I just have no choice but to buy a stupidly expensive piece of Dell sculpture which, while of course there are no expansion options and the only connectivity is two type-c ports, headphone socket (yes, what a crazy world), and a micro-sd slot), just feels amazing to me to type on when i'm away from the desk and is so light i barely feel when i  put it in a backpack.

"Why Are You Talking To Me?!"

Why am i writing this here on Planet KDE and friends? Well, it turns out that we have some friends in the KDE community who build hardware and ship it with KDE software. I would greatly like to have the option to buy one of your piece of beautiful hardware, but as you can see from that little rant above, that currently isn't really an option.

But, before you tell me that there's no way you can compete with Dell in creating such a heavily designed, ultra light weight, super thin device, I would ask you to look through those requirements again: I am not after a thin-and-light. I am after a productivity machine. I am after something which will both let me do my job (which requires me to work with fairly large, occasionally convoluted and interdependent codebases), and also allows me to enjoy it in a more casual fashion.

 So with the requirements above set out, here's a list of nice-to-haves:

  • 15 or 16 inch display 13" inches is a little squinty-vision at times, and a 4K display at somewhere around the 15 to 16 inch size would be the sweet spot.
  • RAM slots Please just pop a couple of those in there. One is good, two is better. With that, i can fit 32 gigs in, or perhaps even 64 for that OTT level thing at some later point, without the initial outlay
  • Expandable storage M.2 nVME doesn't seem like a stretch these days, one slot will do. Just don't solder the storage on.
  • Good keyboard As in, a keyboard worth typing on. Not asking for a mechanical keyboard, i guess, but something that isn't squishy, and which doesn't require me to always need to hit the key in the perfect centre to get letters to happen. If you want to test this for yourself, poke the corners of the keys on your laptop, and see whether they move uniformly, or whether they just kind of bend over.
  • Thunderbolt 3 Yeah, not even asking for 4 here, though sure, that'd be nice. Really just need something so that my docking connection for when i scamper from the desk at the end of a day is just the one cable, so i'm not plugging and unplugging a bunch of cables all the time.
  • Fans Sure, go right ahead and pop some of those in there. Seriously, as long as they don't sound like a jet engine and their tone isn't fingernails on a chalk board, it's all fine, and given this is a workstation? Yeah, fanless isn't really an option.

Hoping that running down that list makes you go "Hey, that doesn't look too bad", that's why i wrote this blog entry :D i've tried to make this seem like perhaps it's not a Homer-car, and instead it's more a kind of... light modification on systems that are already out there.

Oh, and that elephant over there with currency signs painted all over it: First, why would you paint it like that, poor thing's got enough to worry about without you getting out the brush, and is that paint even skin safe? Second, I hope you noticed the brand and name of the laptop i already have up in the first paragraph. That thing is not a cheap device. Dell sells the configuration i have for GBP2500, and that's not even counting the pen which is another almost a hundred quid on top. Full disclosure, i bought my one second hand and did not pay that much for it, but that is what these things cost, and if it were someone not a huge, multi-national company, but rather a small outfit with a track record of supporting KDE and free software in general? Sure, i'd pony up the cash for something like what i've described here.


The word of the day is: choice, because i would really like one of those...

Labels: ,

Tuesday, October 15, 2019

Very Hot New Stuff


K', Hot off the presses, here's some New Stuff for you, with the Quickness! ...terribly sorry about that, i shall endeavour to do better. Let's try that again.

As of KDE Frameworks 5.63, released on 2019/10/12, we officially introduce the fruits of my labour over the last few months, the shiny, new Qt Quick components, which were created to bring the Qt Quick submodule of KNewStuff up to par with the old QWidget based UX. Not only that, they also bring with them some shiny, new abilities in KNewStuff, which previously did not have any concept of comments outside of the very basic information of how many a content item had (which, incidentally, was also incorrect, and had been since, well... since that code was written about a decade ago - guess nobody noticed, because the information is a bit useless on its own).

Before running off and explaining what's what, have a video of my presentation from Akademy 2019, where i gave an overview of the new components and functionality:



Now, before you hop over to the API documentation and start digging in to work out how to actually use all this hot new stuff really quickly (sorry), here's a really quick visual rundown of some of the shiny stuff:

You know this. It's the KNS::Button button, but now more Quick [API]. Don't use this unless you're doing some porting, keep going...

The dialog we all know and love, but with a twisty twist and shiny new tile types [API] Don't use this either (with a similar caveat), use the next thing instead!

The new Page. The new intended central access. Shown here in the similarly new test tool. [API]

The entry details dialog, except as a Kirigami Page [API]

A lot of entries have multiple options for stuff to get - the DownloadItems Sheet shows those. [API]

You want comments? We got comments! All automatic, except if you feel like doing something much deeper. Have a model. [API]

Authors are important. So we should trust what they tell us they're called, and what they look like, right? Anyway, a super easy data provider Component for Author information. [API]

When you have a UI-less library that needs to get some feedback from the user, what do you do? Well, KNewStuff uses a QuestionAsker system. [API]

If you (like Peruse) was already using the old Qt Quick components List and Item, they still work just fine. In fact, finer than they did before by a fair chunk. Do consider using the Page, though. [API]

i hope you have enjoyed your screenshots and videos ;) Now go forth and implement getting that hot new stuff in your Qt Quick applications!

Also don't hesitate to mention, when you discover it, the various holes in the documentation that undoubtedly are there, so that we might get those fixed. Even better yet, we are very happy to take patches over on Phabricator, both code and documentation ones. One thing that i know is missing is a porting guide, to help people transition from the old QWidgets based stuff to the Qt Quick components for people who have got applications they're looking to port or are already porting.


The word of the day is: Shiny. Because shiny things are neat ;)

Labels: ,

Wednesday, September 25, 2019

Milanese Akademics

Each year, the KDE community puts on one of the best tech conferences in the world, and people from around the globe congregate in, usually, a university to talk about all the things that happened over the last year (or decade, or indeed sometimes longer, usually referring to a certain David's t-shirts), and to show off the shiny things people have been working on, or take those discussions which fall into the overlap between "too awkward to take over the internet" and "can wait a few months for a resolution".

We even managed to do a short stop at a cafe near Paris Gare de Lyon for lunch, and for a slightly tired Jonathan to do a quick unboxing of a shiny new piece of kit donated to the cause by Tuxedo Computers

Last year, my attendance was cut short due to a stressful situation (entirely of my own making, or rather my builders' making - house renovation work is at least as stressful people tell you it is), but this year i was able to stay for the duration. It started in London, where three of us caught the Eurostar to Paris, and then a TGV from there to Milan. A lovely, relaxed sort of trip, with considerably less hassle than any flight i've taken. Highly recommend it if you have a few more hours available to spend. Oh, and it's way better for the environment than flying, which when the option exists in a reasonable capacity is just a lovely side effect (still no tunnels between the Americas and the Eurasian land mass ;) ).

Delightful food, and impressively made ales and beers, hosted by Je Suis Jambon.

Tradition dictates that the evening before the first day of Akademy is spent at some place somewhere in the host city, where a registration station is available for people to drop by and get their badge, and some refreshments. In this case, it was a delightful place with craft beers on tap, and some absolutely wonderful fingerfoods, in the shape of cheeses, cured meats, and a variety of bread based delights. Also while there, i was reminded that i had quite entirely forgotten to bring my sound recorder, and so the video of Jonathan installing KDE Neon on the new laptop was not particularly useful. Note to self: Bring sound recorder next year.

A Panel of Goals. One old and shiny, and one new and also shiny.

The first day of Akademy was full of all manner of amazing talks, and not just the always-brilliant hallway track. A great keynote by Lars Knoll, talking about shiny things in the pipeline for Qt 6, followed by several talks, all about the goals the community have been focused on furthering the most over the last couple of years, and the announcement of new goals alongside that. As with all such things, that does not mean the old goals have been reached, not by far, and they are continuing to be worked on. It means that there is recognition that there is sufficient progress that we can bring focus onto other parts of our community as well.

Italians take their coffee breaks seriously

Sunday was my own sort of "big day", and so i managed to get precisely zero pictures of the goings-on during that day - though of course i did manage to get in the group photo along with most everybody else. What i did instead of taking photos of people being engaged in eating tasty treats and generally being amazing was to do two presentations.

The social event Sunday night had tasty food, enthusiastic and skilled bar staff, and great company. Also a Kirigami-powered tail (sorry, no pictures, i was busy wearing it ;) )

The first of these was a panel, where we first presented the various ways in which KDE gets its software to users. The second half was the panel round, in which the panel took questions from a an audience so engaged we entirely ran out of time. Some really great questions, too, and i personally look forward to looking through the video of it when those are released, as i feel like there were definitely things that i have forgotten and which need following up on. Thank you to all who attended, and to the panel participants.

The social event venue was in what i can only describe as an eclectic, and delightful location.

The second of these was a much more traditional presentation, in which i went through my work on KNewStuff's Qt Quick components over the last few months. The patch is currently still in review (please do take time to give that a once-over, if you've got the time), but feels very much like it wants to get merged. The whole point of the exercise is to make KNewStuff work in a Qt Quick world, and generally make everything look and feel modern. The old widget based components have done their job well, and continue to do so (in fact, i have spent not inconsiderable time to ensure they still work), but everybody wants things that are more touch friendly, and while that could be done with widgets, it would just be shoehorning something in, and that's just not how we roll. The new ones are new and shiny, and all 'round lovely, if one does say so themselves.

The BoF sessions during the week were sometimes intense, sometimes intimate, and always interesting.

During the week, alongside the KDE e.V. AGM on Monday, it was time for the other, meatier part of the conference: The BoF sessions. Those things i mentioned earlier, which are awkward or difficult to discuss online for various reasons, that's what the BoF sessions are for. I didn't host any myself this year, but I did attend a great many. A small sample includes the Maui and Kirigami sessions on the Monday morning, which put the two teams in the same room, allowing them to take on those seemingly contentious topics of "why?", giving the team the ability turn that into the more immediately useful "how". Much progress was made there, that i very much look forward to seeing continuing.

Plasma is always a big topic, so one room was mostly dedicated to that.

Tuesday evening, the LGBTQ+ Meal event, hosted by the already busy Kenny D at his apartment near the university. As it turned out, the food was delicious, the wine and beer tasty, and sufficient enough that we all made it to the university the day after, and the chat ended up more or less centered around books, mostly science fiction, with a hint of fantasy mixed in, and just how incredibly powerfully the genre has changed recently. Sorry, no pictures from that, we were too busy being excited about C. J. Cherryh, Iain M. Banks, Ada Palmer, and a bunch of other amazing writers doing the good work. At this point i should perhaps mention that i sometimes make words, which other people think are sufficiently skilfully put together that they are ok to be published. If you'd like to see some of those, my Goodreads profile has links to those books.

Narrow passages, tiny cafes with tiny terraces, and church towers behind flowers

Along with more BoFs, Wednesday brought us the day trip, which this year was to Lake Como, a place to which the approach by coach is so steep several people very near to panic. We did all make it down intact, however, and we were greeted by the most delightful village of Varenna, with its steep, cliff side built houses, with their narrow passageways and immaculately presented, well, everything.

Nights are beautiful as well, even when just hanging out in a parking lot waiting for a coach to arrive

Thursday was the end of BoFs, and in the past this day has sometimes been more lightly dusted with sessions. This year, however, the spread was much more thorough, with many of the sessions from the previous days having had to be cut short, resulting in another sessions being desirable. It was exciting to me for two reasons: Firstly that it meant we understand limits and don't just keep going when someone else wants to start their BoF, which definitely is a positive. Secondly, it means we are getting good at picking things up in a more organised fashion, which might otherwise have just ended up either discarded, or being handled in the hallway track. While that of course is an endlessly useful not-really-track, if things are handled there, it makes those group chats much more difficult to achieve, compared to a room with a topic and (most often) an agenda. In short: We're getting good at this conferency thing. Kudos to everybody on that, this in itself has been nifty to witness.

Gelato? Gelato. Also, just someone's house, half way up a steep cliff face, with a lovely, little outlook space next to it.

Friday for me was travel day. Similarly no pictures of this, but it started with a nice, leisurely breakfast at the hotel, followed by a train all the way from Milan to London, via Paris (top tip: don't exit Paris Gare du Nord if you aren't keen on very busy streets), and finally a train from London and most of the way home. Bus finished it off, and i was home in time for perfectly normal bedtime. Oh, and i ported most of Calligra Gemini's welcome pages to Kirigami while we were sat on a comfortable and spacious train. Definitely doing that again :D

Calligra Gemini's alive?! </BrianBlessed>

Thank you to everybody involved in making Akademy such a huge success every year i've attended, it is never not a great event to attend!


The word of the day is: Umbrella. Because apparently the need for that sometimes occurs in Milan ;) (as well as here in the UK)

Labels: , ,

Tuesday, April 23, 2019

Bundle Up, It's Time To Discover Some Apps

The Short Of The Long

(or tl;dr)

Would you like to try out Discover's AppImageHub integration? Sure you do! You'll need Discover from git master, and you'll want to install the storekdeapps.knsrc file (which you for now can get by installing the bits found in this scratch repository). Then all you need to do is start up your shiny, new Discover and navigate through Applications to the KDE Store Apps category. Early days, but there you go!

The Long of the Short

(or gimme all that juicy stuff)

And now the long version with me writing about history and stuff, accompanied by a bunch of screenshots and old videos and doodads and whatnot!

2009: The Gluon Years

Once, in the long ago times, before i had finished attending university, i and a few others got together to describe what we then called Gaming Freedom (thanks archive.org for providing us with a functioning link, there, as we've shut down the original site). Some of you reading this will remember a project called Gluon, which was designed as a (primarily) 2D game engine, which would use QML as both the UI language and the internal scripting system, and envisioned as a way to easily create, distribute, play and interact with games, as both creators and players of games. Have a video of me talking about this idea for a while:


2010: The Age of Bretzn

Later on, straight out of university, i was hired by then opendesktop.org front person Frank Karlitschek to work with him and a few others on Project Bretzn, which was envisioned as being a way to close the loop and provide a fix for the questionmark on the number two step in the following three-step process:
  1. Build app using some IDE
  2. ?
  3. have users download app from e.g. opendesktop.org's software categories
You might notice a similarity between this and the concepts we described in Gluon's vision. In this project, however, we did indeed achieve the goal, at least for some Linux distributions, by using the then newly renamed Open Build Service to do the heavy lifting of actually building packages. We did this through creating a plugin for Qt Creator which created a set of basic OBS instructions, upload sources, and then once OBS had created packages, distribute those automatically using the Open Collaboration Services API, for which we created an extension supposed to interact with OBS directly. You might be forgiven for not having heard too much about this effort; while it did in fact work, it was perhaps a little more like a proof of concept than an actual, finished product, and after six months of work, we ran out of funds and i had to find somewhere else to pay my rent.


2016: Splitting Frameworks

Since then, i have been working on Open Collaboration Services and KNewStuff on and off, and in the autumn of 2016 i fronted a project to split KNewStuff's UI logic from the logic of its core. Initially this was aimed at allowing the use of KNewStuff entirely without having to link to QWidgets and the like, but it also resulted in a much more sleek engine, which reduced the requirements of the KNewStuffCore to a strict minimum (that is to say, while the KNewStuff Framework is Tier 3, if you only require KNewStuffCore, you can consider it effectively a Tier 2 Framework).

As a result of this work, in addition to being able to build store support into the Peruse comic book reader, it meant that the shiny new software manager Discover was able to finally start allowing users a central location to manage the Plasma extensions and addons which were previously managed in all sorts of varied locations throughout the Plasma Desktop UI. It further, and very rapidly, ended up also showing literally all Application extensions provided by any KNewStuff configuration file found on the system, again in one central location.

2017-2018: Folksonomic Adaptations

One thing which has, arguably, been missing from the Open Collaboration Services API is the ability to filter on types of information which are highly tied to the specific type of content found in some category. The reason this feature has been missing is that OCS itself is designed very explicitly to be content type agnostic. What that means is that if some piece of information is not generally applicable to the vast majority of content, then it isn't exposed through the API.

A couple of examples describe fairly simply how this might be less than great: Say you have a category which is supposed to contain electronic books. This might cause problems for clients consuming this content, as while that might be interpreted to mean anything like epub, mobi, cbz, cbr, dejavue, pdf or indeed any other number of assorted formats used to distribute electronic book content, not all clients are going to be able to actually consume that content. So, being able to filter out bits that you don't support would be very handy.

Since the end of 2018, both the KDE Store, and the Attica and KNewStuffCore frameworks support filtering by a variety of bits of information which are defined per category, rather than directly in the API. See also this maniphest task for the proposed OCS extension (and if anybody reading can help me get my fdo account credentials back so we can get it ratified, do get in touch ;) ).

2019: Bundles of Discoveries

With the ability to filter things based on any arbitrary number of things, it was finally time to get all of this tied together and put a nice bow on top. We had always had the ability to show the applications in Discover, ever since the KNewStuffCore split, but they would invariably show up in a huge bunch listed simply under the name of the configuration file representing them, and underneath the Application Addons category rather than Applications, and you would also get shown literally everything in the categories as well, rather than only the applications you'd be able to actually download and run on your particular device, as well as a few other little annoyances (like the Launch button saying Use instead).

As of now, while things are not rosy and there is certainly more work to be done, we are a very great deal of the way there, and i think it's time i did that thing where i ask people to try it out and tell me which bits are absolutely totally wrong and where i can then see who is wrong (likely me) and how to fix it (hopefully easily).

Thank you to the one or two people who've read until now, and i hope you've enjoyed reading about my personal journey through software distribution :D

You promised me screenshots!

I absolutely did, and here you go! The culmination of ten years of scheming and plotting has come to fruition, and we finally have a way to deliver software in a more social fashion. Now, I realise you are going to scream at us all and say distributions are great at this. They totally are, and that's not the point here, and i would like if we could aim that discussion elsewhere (you will notice how Discover still very much has all the distribution packages up front and centre, particularly in the last screenshot).

That's a whole lot of applications there, in a whole lot of nicely nested categories, you might say, and you'd be right, thank you so much for noticing that!
Oh look, SuperTux, i know that game! Nice screenshots there, think I might just click install on that one.

Oh hey, now that it's installed, guess I'll just click launch...


Nice, let's do this thing, time to do a bit of running and jumping with our favourite, lovable chubby penguin mascot!

Hey, look, it's right there alongside all the other bits of software I've installed, how handy!




The word of the day is: Sunshine. Because we seem to have it now, yay! :)


Labels: ,

Friday, October 19, 2018

Cleaning up the KDE Store

In August of last year, i wrote a blog entry about my experience at Akademy 2017 in the amazing Almería, and in that blog entry, amongst many other things, i wrote about an effort which had been slowly brewing, conceptually, for about a year by then: Tagging support in the Open Collaboration Services API. Now, what does that have to do with the KDE Store, you might say? Well, that is the API used by the KNewStuff framework to interface with the store, and that in turn is what is used in the many various places in our software which show shiny, new content for downloading (or to put it in a different way: used by our software to let users Get Hot New Stuff).

For Your Immediate Consumption

I am proud to announce that as of KDE Frameworks 5.51.0, a major patch for KNewStuff was merged, which expands substantially on some basic tag data handling functionality previously added to the Attica framework. One thing it includes, amongst others, is a test tool. Have a screenshot, because those are shiny and make people look at blog entries ;)

A usable test tool for KNewStuff would make testing KNewStuff easier, you say? Well, in that case, have a usable test tool for KNewStuff.

Some of you brave people running Frameworks from Neon's nightly packages saw an explosion when using Discover a few weeks ago, and i'd just like to also extend an apology to you, as that was my fault for temporarily introducing a binary incompatibility in the first merged version of that patch. Thank you, also, for actually running this, as without you we might have not found this bug before releasing, at which point it would have been too late to fix. So, thank you for your invaluable testing and reporting work! This double merge of the patch is also why you might notice two entries of that patch being mentioned in the changelog.

Immediate Culminations

So, apart from shiny new test tools, what sort of shiny things can you, as a user or developer of KDE software, expect when running it on top of KF5.51? Well, one important thing you will notice (or, rather, hopefully not notice too much) is that the content offered to you in for example Plasma's Get New Wallpapers dialogue or KDEnlive's templates are going to be both installable and usable. This does require intervention by the KDE Store's moderators, who are the ones that can mark content as something KNewStuff should hide by default, and is why a call went out for assistance there a couple of months ago, so we could prepare for the arrival of this patch. Incidentally, if you find anything off on the store, please do tell us about it and we'll get right on it!

One very important point i feel i need to make before continuing: The basic filtering functionality I'm about to describe is entirely backward compatible, with no side effects other than the filtering just not happening if an application using it is run on top of an older version of KNewStuff. This means if you want to add this to your software, you won't need to wait for your favourite distros to get all up to date with Frameworks.

As an example of something slightly more involved than just hiding those bits explicitly marked as unwanted on the server, have a couple of screenshots of a bit more of the functionality in this patch. On the left we have the test category Comics on share.krita.org, with one comic (supplied as an ePub file in this case), one non-downloadable comic (still technically a comic, but it's a link to a website - technically fine for this category, but not downloadable), and one spam entry (fairly sure this stuff isn't a comic book of any kind...). On the right, the same data is shown in Peruse,  but with the two non-usable entries filtered out for having either no comic to download, or for being spam and explicitly excluded by a moderator.

No modifications were done in Peruse's code itself either, only the knsrc configuration file, which had the following line added to it:

DownloadTagFilter=data##mimetype==application/x-cbz,data##mimetype==application/x-cbr,data##mimetype==application/x-cb7,data##mimetype==application/x-cbt,data##mimetype==application/x-cba,data##mimetype==application/vnd.comicbook+zip,data##mimetype==application/vnd.comicbook+rar,data##mimetype==application/vnd.ms-htmlhelp,data##mimetype==image/vnd.djvu,data##mimetype==image/x-djvu,data##mimetype==application/epub+zip,data##mimetype==application/pdf

This somewhat unsightly chunk means, fairly simply, that there should be a filter on the content item's download items, which should accept only entries in which at least one of those download items had one of the listed entries for the data##mimetype tag. The documentation for the filtering of content items can be found right over here and here for download item tags, alongside KNewStuff's other API documentation.

If you want to do something more involved than what is possible using a static list of tags like that, you can absolutely add the filters manually through code. Do this by calling the KNSCore::Engine::addTagFilter and addDownloadTagFilter functions, using the formats listed in TagsFilterChecker's documentation.

Future Prospects

What does the future hold? Well, for KNewStuff itself, the functionality as it stands now is pretty powerful already, but if you have ideas for enhancements, please do get in touch, either directly to me (i'm not difficult to find, to the best of my knowledge i'm the only leinir around), or on IRC (i'm leinir on many of KDE's various channels on Freenode and on our Telegram groups, on Twitter and so on), or even better, surprise us with a patch over on Phabricator.

What are all these AppImage being filtered by architecture? Well, then, that's certainly something we should perhaps be doing more of now that it's possible to do so... ;)

One future prospect which is very immediate is going to be enhancing the KDE Store support in Discover. Right now, Discover's support for content coming through KNewStuff is limited to, effectively, just showing the items offered by all the knsrc files on the system and managing their installation and removal. This is already lovely, but enhancing this functionality by adding such things as explicit, user specified filtering or browsing through tags supplied by the creators, or by computer architecture and the like for things which require running would be very handy (for example for supporting downloading and installing AppImages from the AppImage section on the store).

Thank You!

The future, then, is very much full of shiny possibilities, and while i am under no illusion that anybody is going to be quite as enthusiastic as someone who has been working (on and off) on this functionality for over two years, i do hope that some of my excitement might have rubbed off on you.


The word (/abbreviation) of the day is: SABA (because having supplied air breathing apparatus would be handy with the bitumen removal chemicals being used in our house at the moment)

Labels: ,

Thursday, August 17, 2017

Services Collaborating Openly at Akademy 2017

At the recently concluded Akademy 2017 in the incredibly hot but lovely Almería, yours truly went and did something a little silly: Submitted both a talk (which got accepted) and hosted a BoF, both about Open Collaboration Services, and the software stack which KDE builds to support that API in the software we produce. The whole thing was amazing. A great deal of work, very tiring, but all 'round amazing. I even managed to find time to hack a little bit on Calligra Gemini, which was really nice.

This blog entry collects the results from the presentation and the BoF. I realise this is quite long, but i hope that you stick with it. In the BoF rundown, i have highlighted the specific results, so hopefully you'll be able to skim-and-detail-read your specific interest areas ;)

First, A Thank You In Big Letters

Before we get to that, though, i thought i'd quickly touch on something which i've seen brought up about what the social media presence of the attendees looks like during the event: If you didn't know better, you might imagine we did nothing but eat, party and go on tours. My personal take on that is, we post those pictures to say thank you to the amazing people who provide us with the possibility to get together and talk endlessly about all those things we do. We post those pictures, at least in part, because a hundred shots of a group of people in an auditorium get a bit samey, and while the discussions are amazing, and the talks are great, they don't often make for exciting still photography. Video, however, certainly does that, and those, i hear, are under way for the presentations, and the bof wrapups are here right now :)

Nothing will stop our hackers. And this is before registration and the first presentation!

Presenting Presentations

Firstly, it felt like the presentation went reasonably well, and while i am not able to show you the video, i'll give you a quick run-down of the main topic covered in it. Our very hard working media team is working on the videos at the moment, though, so keep your eyes on the KDE Community YouTube channel to catch those when they're released.

The intention of the presentation was to introduce the idea that just because we are making Free software, that does not mean we can survive without money. Consequently, we need some way to feed funds back to the wildly creative members of our community who produce the content you can find on the KDE Store. To help work out a way of doing this in a fashion that fits in with our ideals, described by the KDE Vision, i laid out what we want to attempt to achieve in five bullet points, tongue-in-cheek called Principia pene Premium, or the principles of almost accidental reward:
  • Financial support for creators
  • Not pay-for-content
  • Easy
  • Predictable
  • Almost (but not quite) accidental
The initial point is the problem itself, that we want the creators of the content on the store to be financially rewarded somehow. The rest are limiting factors on that:

Not pay-for-content alludes to the fact that we don't want to encourage paywalls. The same way we make our software available under Free licenses of various types, we want to encourage the creators of the content used in it to release their work in similarly free ways.

Easy means easy for our creators, as well as the consumers of the content they produce. We don't want either them to have to jump through hoops to receive the funds, or to send it.

Predictable means that we want it to be reasonably predictable for those who give funds out to the creators. If we can ensure that there are stable outgoings for them, say some set amount each month or year, then it makes it easier to budget, and not have to worry. Similarly, we want to try and make it reasonably predictable for our creators, and this is where the suggestion about Liberapay made by several audience members comes in, and i will return to this in the next section.

Finally, perhaps the most core concept here is that we want to make it possible to almost (but not quite) accidentally send one of the creators funds. Almost, because of course we don't want to actually do so accidentally. If that were the case, the point of being predictable would fly right out the window. We do, however, want to make it so easy that it is practically automatically done.

All of this put together brings us to the current state of the KDE Store's financial support system: Plings. These are an automatic repayment system, which the store handles for every creator who has added PayPal account information to their profile. It is paid out monthly, and the amount is based on the Pling Factor, which is (at the time of writing) a count of how many downloads the creator has accumulated over all content items over course of the month, and each of those is counted as $0.01 USD.

Space-age looking crazy things at the Almería Solar Platform. Amazing place. Wow. So science.

Birds of a Feather Discuss Together

On Wednesday, a little while before lunch, it was time for me to attend my final BoF session of the week (as i would be leaving early Thursday). This one was slightly different, of course, because i was the host. The topic was listed as Open Collaboration Service 1.7 Preparation, but ended up being more of a discussion of what people wanted to be able to achieve with the store integration points we have available.

Most of the items which were identified were points about KNewStuff, our framework designed for easy integration of remote content using either OCS, or static sources (used by e.g. KStars for their star catalogues).

Content from alternate locations was the first item to be mentioned, which suggests a slight misunderstanding about the framework's abilities. The discussion revealed that what was needed was less a question of being able to replace existing sources in various applications, so much as needing the ability to control the access to KNewStuff more granularly. Specifically, being able to enable/disable specific sources was highlighted, perhaps through using Kiosk. It might still make sense to be able to overlay sources - one example given was the ability to overlay the wallpapers source (used in Plasma's Get New Wallpapers) with something pointing to a static archive of wallpapers (so users might be able to get a set of corporate-vetted backgrounds, rather than just one). This exact use case should already be possible, simply by providing a static XML source, and then replacing the wallpapers.knsrc file normally shipped by Plasma with another, pointing to that source.

A more complete set of Qt Quick components was requested, and certainly this would be very useful. As it stands, the components are very minimal and really only provide a way to list available items, and install/update/remove them. In particular two things were pointed out: There is no current equivalent of KNS3::Button in the components, and further no Kiosk support, both of which were mentioned as highly desired by the Limux project.

Signing and Security was highlighted as an issue. Currently, KNSCore::Security exists as a class, however it is marked as "Do not use, non-functional, internal and deprecated." However, it has no replacement that i am myself aware of, and needs attention by someone who, well, frankly knows anything of actual value about signing. OCS itself has the information and KNS does consume this and make it available, it simply seems to not be used by the framework. So, if you feel strongly about signing and security issues, and feel like getting into KNewStuff, this is a pretty good place to jump in.

Individual download item install/uninstall was mentioned as well, as something which would be distinctly useful for many things (as a simple example, you might want more than one variant of a wallpaper installed). Right now, Entries are marked as installed when one download item is installed, and uninstalling implicitly uninstalls that download item. There is a task on the KNewStuff workboard which has collected information about how to adapt the framework to support this.

But KNewStuff wasn't the only bit to get some attention. Our server-side software stack had a few comments along the way as well.

One was support for Liberapay which is a way to distribute monetary wealth between people pretty much automatically, which fits very nicely into the vision of creator support put forward in my presentation. In short, what it allows us to do

One topic which comes up regularly is adding support for the upload part of the OCS API to our server-side stack. Now, the reason for this lack is not that simply adding that is difficult at all, because it certainly isn't - quite the contrary, the functionality practically exists already. The problem here is much more a case of vetting: How do we ensure that this will not end up abused by spammers? The store already has spam entries to be handled every day, and we really want to avoid opening up a shiny, new vector for those (insert your own choice of colloquialism here) spammers to send us things we want to not have on the store. Really this deserves a write-up of its own, on account of the sheer scope of what might be done to alleviate the issues, but what we spoke about essentially came down the following:

  • Tight control of who can upload, so people have to manually be accepted by an administration/editors team as uploaders before they are given the right to do so through the API. In essence, this would be possible through establishing a network of trust, and through people using the web interface first. As we also want people to approach without necessarily knowing people who know people, a method for putting yourself up for API upload permission approval will also be needed. This might possibly be done through setting a requirement for people who have not yet contributed in other ways to do so (that is, upload some content through the web first, and then request api upload access). Finally, since we already have a process in place for KDE contributors, matching accounts with KDE commit access might also be another way to achieve a short-cut (you already have access to KDE's repositories, ability to publish things on the store would likely not be too far a stretch).
  • Quality control of the content itself. This is something which has been commented on before. Essentially, it has been discussed that having linting tools that people can use locally before uploading things would be useful (for example, to ensure that a kpackage for a Plasma applet is correct, or that a wallpaper is correctly packaged, or that there is correct data in a Krita brush resource bundle, or that an AppImage or Flatpak or Snap is what it says it is, just to mention a few). These tools might then also be used on the server-side, to ensure that uploaded content is correctly packaged. In the case of the API, what might be done is to return the result of such a process in the error message field of a potentially failed OCS content/add or content/edit call, which then in turn would be something useful to present to the user (in place of a basic "sorry, upload failed" message). 

For OCS itself, adding mimetype as an explicit way to search and filter entries and downloaditems was suggested. As it stands, it could arguably be implemented by clients and servers, however having it explicitly stated in the API would seem to make good sense.

The proposal to add tagging support to OCS currently awaiting responses on the OCS Webserver phabricator was brought up. In short, while there are review requests open for adding support for the proposal to Attica and KNewStuff respectively, the web server needs the support added as well, and further the proposal itself needs review by someone who is not me. No-one who attended the BoF felt safe in being able to review this in any sensible way, and so: If you feel like you are able to help with this, please do take part and make comments if you think something is wrong.

Finally, both at the BoF and outside of it, one idea that has been kicked around for a while and got some attention was the idea of being able to easily port and share settings between installations of our software. To be able to store some central settings remotely, such as wallpaper, Plasma theme and so on, and then apply those to a new installation of our software. OCS would be able to do this (using its key/value store), and what is needed here is integration into Plasma. However, as with many such things, this is less a technical issue (we have most of the technology in place already), and more a question of design and messaging. Those of you who have ever moved from one Windows 10 installation to another using a Microsoft account will recognise the slightly chilling feeling of the sudden, seemingly magical appearance of all your previous settings on the machine. As much as the functionality is very nifty, that feeling is certainly not.

Solar powered sun-shade platform outside the university building. With fancy steps. And KDE people on top ;)

Another Thank You, and a Wish

Akademy is not the only event KDE hosts, and very soon there is going to be another one, in Randa in the Swiss alps, this year about accessibility. I will not delve into why this topic is so important, and can only suggest you read the article describing it. It has been my enormous privilege to be a part of that several years, and while i won't be there this year, i hope you will join in and add your support.


The word of the day is: Aircon. Because the first night at the Residencia Civitas the air conditioning unit in the room i shared with Scarlett Clark did not work, making us very, very happy when it was fixed for the second night ;)

Labels: , ,

Wednesday, December 28, 2016

Peruse 1.2 "The Winter Wonderland Release"

My sister, with a cup of gløgg and some
æbleskiver, reading Wasteland Mutants in Peruse.
Today marks a very interesting day: Near enough to six months after its initial release, this will be the final release (minus any potential minor revision work) of the 1.x series of the comic book reader Peruse.

Why is it the final release, you say? Well, easy - there will be a 2.x series, which will be based upon Kirigami 2, and further have a bunch of new features and behavioural changes which all together makes it sensible to make a big version number change. So, no, this is not the final release of Peruse itself, only the 1.x series - rest assured that there is a very bright future indeed for your favourite comic book reader built by and powered by the KDE community!

Where can I get it?!

Don't want to wait? Well, certainly, don't let me stop you! Hop right over to the Peruse website and grab yourself a copy of whichever version best matches your needs.

What's in this?

While you wait for your download, let's have a look at what you can find in this shiny, new version of Peruse. The same features you found in 1.1 are still there, of course: CBZ, PDF and ePub support, alongside a few other less common ones. A handy continue-where-you-left-off feature with support for multiple books. A collection system with filtering options based on author, title, folder structure and so on. Full screen mode, with both touch and keyboard controls. All that stuff you already know.

As for new things, however, we have done some major overhauling of the PDF and ePub support, which is now considerably more solid, with less glitchy rendering and a more usable view. Still based on Okular, but using a more Peruse-like navigation system, which makes the whole thing feel more at home.

A whole bunch of little annoyances have been ironed out as well, and using Peruse is now more pleasant as a result. Things like using a more natural title for title-less comic book archives, and supporting basic ACBF information will come in handy when browsing your collection, and when reading.

What about shinies?

This version is not all just cleaning and polishing, you also have a preview of things to come: There is now a (very basic) shop, which you can find in the sidebar with the title "Get Hot New Books", which is by no means the final name, and is more alluding to the name of the technology underneath. Clicking on this entry will let you download and read comics from the share.krita.org comic section, which is currently quite low on content - something which the second thing being previewed in this version might help with.

Peruse Creator is a partner application to Peruse Reader, designed to allow the many creative people out there to easily produce comic book archives, for use not only with Peruse, but with any other comic book readers out there. The version shipped with this release is an initial, basic version, a sort of proof of concept. Even then, it already has support for creating comic book archives with ACBF information embedded, including not only titles and other basic information like that, but also genres and the like. Important to note is that comic book archives made using Peruse Creator will, even though they have ACBF information embedded, work just fine with applications which do not support this: They will simply not have the information available, and really just work like any other cbz file you might come across.

What's next?

Bear with me as I go slightly fluffy for a moment: The next step for Peruse is to close the cycle between creation and consumption. We want to make it as easy for the readers and the makers to achieve their goals, which here is, of course, to let the readers read the things the makers make. This is not simply a case of creating a store that people can put things on and get things from, it is about creating the tools which allow the readers to read the content they want to read, in the most comfortable manner possible, and for the makers to make the content they want to make, in the most comfortable manner possible. That all sounds nice and logical, right? But, what, more precisely, does it mean?

For the readers, it means creating a place where they can get that content, the store which is previewed in this version. The version in Peruse now is extremely simple, and really, it would be great to hear what you all want out of it. We have ideas of our own, like showing you what's next in a series where you have downloaded and completed reading a book, and there are more books available on the store. And to show various categories and the like in the store, to let you find things you want to read. Most of all, though, we want to hear what you want to be able to do.

For the makers, it means letting you create comics not only comfortably, but efficiently as well. The creation tool is currently simplistic, but we want to support all the features that ACBF allows for, to allow our makers to make comics which can do things they could not do on paper alone, such as frame based navigation instead of simply page-by-page navigation. Again, we want to hear from you what you want to be able to do.

We in this case are myself and the KDE Visual Design Group, and we would absolutely welcome input from everybody out there, because you are the people we want to be able to make happy. So please, get in touch and we will greatly enjoy listening to your amazing ideas, so we can create the best Peruse possible.

The word of the day is: Boiler. Because we are having a new one installed right now. Have been without heating for over a week now, so getting that sorted is nice ;)

Labels: ,