Skip to content

Friday, 20 August 2021

Let’s go for my web review for the week 2021-33.


Spotify Has Changed Music Libraries Forever - The Atlantic

Tags: spotify, culture

Ever worried our culture is more and more built on sand? :-)

https://www.theatlantic.com/culture/archive/2021/07/spotify-streaming-music-library/619453/


All the Ways Spotify Tracks You—and How to Stop It | WIRED

Tags: spotify, surveillance

One of the reasons why I’m not into streaming music or movies. Way too much data collection again…

https://www.wired.com/story/spotify-tracking-how-to-stop-it/


How LGBTQ+ Content is Censored Under the Guise of “Sexually Explicit” | Electronic Frontier Foundation

Tags: apple, surveillance, machine-learning

When machine learning biases collides with ill-placed puritan attempt… what could possibly go wrong?

https://www.eff.org/deeplinks/2021/08/how-lgbtq-content-censored-under-guise-sexually-explicit


Secret terrorist watchlist with 2 million records exposed online

Tags: surveillance, security

Now this is a really bad leak… of a really bad list…

https://www.bleepingcomputer.com/news/security/secret-terrorist-watchlist-with-2-million-records-exposed-online/


Asking nicely for root command execution (and getting it)

Tags: tech, security

Pile up enough complexity and it’ll quickly become insecure.

https://rachelbythebay.com/w/2021/08/17/pop/


Command-line Tools can be 235x Faster than your Hadoop Cluster - Adam Drake

Tags: tech, data-science, databases, command-line

A good reminder to use the right tool for the task. Sometimes all you need is really a POSIX shell with a couple of well optimized tools.

https://adamdrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html


Adactio: Journal—Foundations

Tags: tech, web, standard

A good reminder of what the Web really is. Yes, it’s hard to add features to it, but look at the amazing backward compatibility! Everyone can write web pages and that’s what matters.

https://adactio.com/journal/18337



Bye for now!

Whelp, the latest IPCC report doesn’t beat about the bush. It whacks right into it. And, yes, while governments and companies need to take responsibility and finally start to DO something, we all still have a personal responsibility.

As KDE we’re working on the energy consumption of our applications (which already has shown something we, the Krita developers, can do right away), I changed to buying the electricity I use for building Krita (and everything else) from the local windmill coop… I don’t drive, never have, and that pile of wood next to the stove dates back to 2018, and we’re not going to burn it any more. (Why would we — it’s too warm in winter, when we came to live here in 2007, we needed that stove because it was too cold otherwise!)

All of that is peanuts.

But there is one place where we, as a free software community, have to take responsibility (that word again) and stop doing something we absolutely love to do, and for which we’ve been pining.

In-person conferences with a world-wide attendance.

I’m hating having to say this, and I’m hating that I have to say that it is inevitable, and I hate that many of my Krita collaborators won’t actually be meeting me, the improved second release, but… We, as a free software community need to have this discussion, and until now, all I’ve seen has been silence.

Flying always scared me irrationally, but that’s not the reason I think we should stop it. Cheap air travel is only possible because it’s subsidized, untaxed and airlines are being kept alive only as a matter of national pride. And that’s the only reason we can actually afford to fly people from all around the world to conferences, sprints, Akademies and the like.

Our conference model is built upon something we wouldn’t be able to afford if air travel was priced in accordance with its real cost.

And, we’re probably not going to miss the presentations, much? Most presentations at free software conferences are, honestly, a bit meh. A conference with presentations is something we’ve copied from Academia. What we’re really missing is the meetings, the chats, the sitting together at a table and making notes, the occasional pair programming, the making new acquaintances, the gossip.

And the remote conference format pretty much only provides the presentations, with a bit of chat, which we already have next to it. And I really cannot handle remote conferences myself. For meetings and BoF sessions, I get a headache in a minute or ten. For presentations, especially when pre-recorded, I get bored in under a minute. That sucks.

Maybe we can find a better on-line get-together activity. Max Miller from Tasting History has a virtual cocktail party with his patreons. Maybe the next virtual conference could start with planning and facilitating the socializing, and only add in a program as an afterthought?

But whatever, we still should not go back to burning enormous amounts of kerosene for our get-togethers. Would it be too much to say that that would be criminal?

I have been using the GIMP since about 20 years or so, but recently started to also work with Krita since I found it quite nice to work with (besides the text module, which is a pain).

As there came out the first beta of Krita 5, I decided to throw it into my KDE/Plasma OBS builds to try it out. To get it working, add my OBS key say in /usr/local/share/keyrings/obs-npreining.asc and add a file /etc/apt/sources.lists.d/obs-npreining-krita-beta.list, containing the following line:

deb [signed-by=/usr/local/share/keyrings/obs-npreining.asc] https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/krita-beta/Debian_Unstable/ ./

Warning: Krita will also warn you, but files saved with version 5 might not be openable with version 4 of Krita, so be sure to have a backup of your files in case you need to go back to Krita 4.

Enjoy.

Wednesday, 18 August 2021

Bullseye has been released, and we are in the post-release rush with lots of changes going on. On the KDE/Plasma side we are trying to move all our accumulated changes to unstable. On the OSC side, frameworks 5.85 and KDE Gears 21.08.0 have been released.

Debian Bullseye

As mentioned previously, the now released Debian/Bullseye contains KDE Frameworks 5.78, including several backports of fixes from 5.79 to get smooth operation. Plasma 5.20.5, again with several cherry picks for bugs will be in Bullseye, too. The KDE/Apps are mostly at 20.12 level, and the KDE PIM group packages (akonadi, kmail, etc) are at 20.08.

Debian unstable (and in time also testing)

Frameworks 5.83 and Plasma 5.21.5 have been uploaded to unstable. This is a temporary measure until several necessary packages have cleared the NEW queue. After that we will upload frameworks 5.85 and Plasma 5.22.N.

KDE Gears is still at 20.08, but we have 21.04 in experimental, and I am currently preparing to upload 21.08.0, should be done soon.

OBS packages

The OBS packages as usual follow the latest release, and currently ship KDE Frameworks 5.85, KDE Gears 21.08.0, and Plasma 5.22.4. The package sources are as usual (note the different path for the Plasma packages and the apps packages, containing the release version!), for Debian/unstable:

deb https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/frameworks/Debian_Unstable/ ./
deb https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/plasma522/Debian_Unstable/ ./
deb https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/apps2108/Debian_Unstable/ ./
deb https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/other/Debian_Unstable/ ./

and the same with Testing instead of Unstable for Debian/testing.

OBS for bullseye

For now, use the Testing packages with the addition dependencies:

deb https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/other-deps/Debian_Testing/ ./
deb https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/frameworks/Debian_Testing/ ./
deb https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/plasma522/Debian_Testing/ ./
deb https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/apps2108/Debian_Testing/ ./
deb https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/other/Debian_Testing/ ./

Sooner or later OBS will offer Debian Bullseye as proper target, and then I will prepare releases for it and write another blog post.

Closing

Expect continued breakage of the next weeks until the upload storm subsides a bit.

Tuesday, 17 August 2021

Hi everyone! GSoC coding period is in its last stage, The final evaluation has started yesterday, I am really happy that all activities have been finished on time, 3 of them are already merged in master and I hope the last one will also be merged soon.

In the past 2 weeks, I was working on finalizing mouse control action activity:

  • The “click” circle appears only if the pixel is exactly the same on pressed and on released, we found it is better to to give it a bit of tolerance, as for touch input it might be very hard to stay on the same pixel.
  • Supporting swipe gestures for phones/tablets and mouse movements by making the main duck moving by hovering in case of laptops or it can move by touch inputs using MultiPointTouchArea in case of phones/tablets.
  • Fixing an issue result from a side effect of hover + drag combination as when doing click-drag, on release the duck can jump position.
  • Making the main duck motion more smoother by moving it a short distance and within a very short duration/repetition.
Mouse Control Action Activity

Challenges

The activity was tested on another Qt version (Qt5.9) and it didn’t work as expected, though it works good on Qt5.15, I was using the startX and startY properties of the TouchPoint (these properties hold the starting position of the touch point). The problem is that these properties are always zero though they have value, as a result it effects the activity’s main functionality. To solve this problem, I have implemented my own startX and startY properties and assigned them the starting position of the touch point when the release signal is triggered in the MultiPointTouchArea.

It has been an awesome journey with KDE, I can safely say that this past summer has been an immensely gratifying learning experience. All of this has been possible only because of my mentors Timothée Giet, Johnny Jazeix and Emmanuel Charruau, They not only helped me throughout the process but made sure to appreciate my work and gave me constructive feedback at every turn. I’m extremely grateful for the opportunity to learn from such talented people. Thank you to the KDE community for bearing with me while I got up to speed with way things work.

Thank you so much for this wonderful summer 🙂

Monday, 16 August 2021

Well, we all know that the work on open source projects is never truly finished, but all of the core goals have been achieved and the time is up :). In this post I’ll briefly summarize my GSOC work and then talk about one last small but user-facing feature that I’ve implemented.

I’ve successfully implemented a new DSO backend and smoothed out most of the bugs. The python framework does work satisfactory and all existing catalogs have been ported. There remains the UGC catalog which will be imported in the future, either by me or by another member of the project. The latter option would be a good way to battle-test the documentation and I would prefer this option because I do not want to remain the only person familiar with the system.

To quantify my contributions during the GSOC period see the snippet below, although I do not think such numbers have much to say1.

Valentin Boettcher <hiro@protagon.space>:
       insertions:    15193  (19%)
       deletions:     23402  (35%)
       files:         312    (21%)
       commits:       76     (23%)
       lines changed: 38595  (26%)

Furthermore there is https://invent.kde.org/education/kstars/-/merge_requests?scope=all&state=merged&author_username=vboettcher (the list of my merge requests)2 which does go into more detail.

The user-facing side of my work is not very prominent. There is a small GUI for managing catalogs that allows importing, exporting, creating and editing catalogs.

There is also a basic CSV importer that should make it easier for users to get their own custom data into KStars.

Figure 1: The CSV importer. It sure needs some prettying up :P.

Figure 1: The CSV importer. It sure needs some prettying up :P.

Nevertheless, the main goal of my work was to create a seamless replacement for the old DSO system of which the user should not be too aware. To that end, I’ve implemented a feature that should have been in my overhaul from the beginning: a mechanism to import custom objects from the old DSO database. Now, on startup the user is being asked whether the old database should be imported if it is present.

And finally: Colors!

The DSOs always had a distinct color depending on the catalog they’re from. Right from the outset one complaint from early testers were the garish colors that I chose for the catalogs. I “fixed” this problem by simply choosing more subdued colors. But colors are a matter of personal taste. Also, a single color can’t fit all of KStars' color schemes. Therefore colors can now be customized for each catalog and color scheme through a “pretty” dialog.

Figure 2: The &ldquo;pretty&rdquo; color picker.

Figure 2: The “pretty” color picker.

Now you can do things like this:

Figure 3: Color Scheme: Moonless Night

Figure 3: Color Scheme: Moonless Night

Figure 4: Color Scheme: Starchart

Figure 4: Color Scheme: Starchart

And again I’ve learned that user feedback is very important. I would never have thought of this feature on my own but must admit that it enhances the usability of KStars greatly.

With that oddly specific foray into the world of colors I now conclude this blog post and thank you for your attention.

Cheers, Valentin


  1. I deleted the old OpenNGC text catalog which contained more than ten thousand lines :P. ↩︎

  2. You have to paste this link into the url bar manually to make it work! ↩︎

We’ve reached the final few days of Google Summer of Code 2021. It has been an amazing journey. I learned so many new things throughout this journey. It makes me proud that I’ve contributed to KDE, which is an amazing open source organization. It brings immense pleasure to know that my work is going to enhance GCompris project, which has thousands of active users. Though GSoC is coming to an end, I strongly believe, this is not the end to my contributions towards KDE or open source software in general.

In my previous blog, I talked about Oware activity. Oware is an abstract strategy game among the Mancala family of board games. I had already completed the basic layout for this activity. In the past few weeks, I worked on making the actual game mechanics, adding animations to the activity, and also creating a simple oware engine for playing the game against the computer.

Oware against Computer

In this activity, the user controls the upper 6 pit with green border, and the computer controls the bottom 6 pits with purple border.

Oware against Computer: demonstration of automatic move by computer

The engine is a basic one. Out of all valid moves, it picks any one random move.

When captures happen in clockwise fashion. Whenever a pit ends with two or three seeds in opponents camp, it can be captured by the player, before the streak of consecutive captures break.

Demonstration of multiple captures

Oware against a friend

In this mode, the computer does not play any role. Two sides of the board are controlled by two different users.

Oware against a friend: Demonstration of two player mode

Challenges

  • Implementing the animations was a challenging task. Lot of different animations were to be play sequentially one after the other. It involved a lot of manual recursive triggers. The base cases were very important to not get stuck into an infinite recursion.
  • The layout of the activity was quite a challenge. The idea of show a particular pattern for displaying a specific number of seeds in a pit was quite challenging task.
  • Implementing the rules of the game was also quite challenging.

What next?

I completed almost all the objectives of this task. A few of the objectives were not met, and could be easily extended from the current code. The following sub tasks are left for future work:

  • Offer draw to opponent, detect if accepting draw is feasible for computer.
  • Implement tougher engines for oware. The current engine randomly picks one valid move. Though even random moves are strong, and so simple to win over the computer.

Conclusion

It has been an awesome journey with KDE. Working on GCompris project was very interesting. Path activities has already been merged to main branch. Oware activities are still under review. I believe it would be merged soon to the main branch.

Thanks for reading!

I’m happy to announce first release of QCoro, a library that provides C++ coroutine support for Qt.

You can download QCoro 0.1.0 here or check the latest sources on QCoro GitHub.

I have talked about QCoro (and C++ coroutines in general) recently at KDE Akademy, you can view the recording of my talk on YouTube.

In general, QCoro provides coroutine support for various asynchronous operations provided by Qt. Since Qt doesn’t support coroutines by default, QCoro provides the necessary “glue” between native Qt types and the C++ coroutine machinery, making it possible to use Qt types with coroutines easily.

QCoro provides coroutine support for asynchronous operations of QIODevice, QNetworkReply, QProcess, QDBusPendingReply, QTimer and more. Take a look at the documentation for detailed description and list of all currently supported Qt types.

A brief example from our documentation that demonstrates how using coroutines makes handling asynchronous operations in Qt simpler:

This is a (simplified) example of how we do network requests with Qt normally, using signals and slots:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkReply *reply = manager->get(url);
connect(reply, &QNetworkReply::finished, this,
        [this, reply]() {
            const auto data = reply->readAll();
            doSomethingWithData(data);
            reply->deleteLater();
        });

And this is the same code, written using C++ coroutines:

QNetworkAccessManager networkAccessManager;
QNetworkReply *reply = co_await networkAccessManager.get(url);
const auto data = reply->readAll();
doSomethingWithData(data);
reply->deleteLater();

The co_await keyword here is the key here: it asynchronously waits for the reply to finish. During the wait, the execution returns to the caller, which could be the Qt event loop, which means that even if this code looks synchronous, in fact it won’t block the event loop while keeping the code simple to read and understand.

Saturday, 14 August 2021

A relatively easy way to decide what communication activities are appropriate for your Free Software project.

Friday, 13 August 2021

Let’s go for my web review for the week 2021-32.


This scientist says cleaning indoor air could make us healthier—and smarter

Tags: air-quality, science

Clean indoor air is important for a lot of health factors… Including the pandemic.

https://www.sciencemag.org/news/2021/08/scientist-says-cleaning-indoor-air-could-make-us-healthier-and-smarter


Atlantic Ocean currents weaken, signalling big weather changes - study

Tags: climate, ecology

If confirmed this is seriously bad news…

https://www.reuters.com/business/environment/atlantic-ocean-currents-weaken-signalling-big-weather-changes-study-2021-08-05/


Apple Privacy Letter: An Open Letter Against Apple’s Privacy-Invasive Content Scanning Technology

Tags: tech, apple, surveillance, security, privacy

The Apple ecosystem hell bent on becoming extremely privacy invasive… Per usual it’s justified by “protecting the children” or some other false pretense. Don’t be fooled, once it’s in, it’ll just expand in scope and governments will do everything they can to tap in the content of those scans.

https://appleprivacyletter.com/


If You Build It, They Will Come: Apple Has Opened the Backdoor to Increased Surveillance and Censorship Around the World | Electronic Frontier Foundation

Tags: apple, surveillance

Thanks you Apple for creating the perfect tools for private and governmental surveillance. Now, we can probably expect a race to the bottom from the other players as well.

https://www.eff.org/deeplinks/2021/08/if-you-build-it-they-will-come-apple-has-opened-backdoor-increased-surveillance


After DeepMind’s cofounder was placed on leave for bullying, Google promoted him

Tags: tech, google

Such a nice company…

https://www.morningbrew.com/emerging-tech/stories/2021/08/04/deepminds-cofounder-placed-leave-bullying-google-promoted


SAML is insecure by design

Tags: tech, saml, security

Interesting exploration and rough explanation of why SAML has so many issues. Complexity by design in such critical components is a bad idea…

https://joonas.fi/2021/08/saml-is-insecure-by-design/


CSS Transforms tutorial

Tags: tech, web, frontend, css

Nice summary of the abilities coming from CSS transforms.

https://www.joshwcomeau.com/css/transforms/


Working Around a Case Where the Postgres Planner Is “Not Very Smart” - Heap

Tags: tech, databases, postgresql, performance

Interesting exploration and workaround for the Postgres query planner.

https://heap.io/blog/when-the-postgres-planner-is-not-very-smart



Bye for now!