Skip to content

Saturday, 3 September 2022

Dear digiKam fans and users,

After three months of active maintenance and another bug triage, the digiKam team is proud to present version 7.8.0 of its open source digital photo manager. See below the list of most important features coming with this release.

Qt 5.15 LTS used in AppImage bundle

As with the previous release, we take care about upgrading the Qt framework with a LTS version. Since Qt 5.15.2, the framework is only published privately to the registered clients from the Qt Company. By chance, the KDE project deals with the Qt company to provide a rolling relea se of the whole Qt framework including all the most important patches. This is the Qt collection patch used from now by the digiKam AppImage bundle. This allows digiKam to benefit from important fixes as to support the most recent version of Mysql and Mar iadb database in the QtSql plugin. Even if Qt 5.15.5 is just released as open-source, more than one year later 5.15.2, we will continue to use the Qt Collecti on Patch, as the last customer Qt5 release is 5.15.10. So there exists again a serious gap between the open-source and the customer versions of Qt.

Friday, 2 September 2022

Let’s go for my web review for the week 2022-35.


Visual Studio Code is designed to fracture

Tags: tech, tools, programming, microsoft, foss

More elements on why we should all be concerned about Visual Studio Code and the state of development tools overall. It’s clearly moving more and more proprietary. Visual Studio Code’s ecosystem is a very well designed trap. I see it more and more around me (even tried it for a little while to see what it was all about). What can I say… Go Kate Go! And also we clearly need many more LSP servers.

https://ghuntley.com/fracture/


Exploring 12 Million of the 2.3 Billion Images Used to Train Stable Diffusion’s Image Generator - Waxy.org

Tags: tech, ai, art, machine-learning

Interesting first exploration of a tiny part of the data set. If you read closely, this shows some of the potential biases in there.

https://waxy.org/2022/08/exploring-12-million-of-the-images-used-to-train-stable-diffusions-image-generator/


4.2 Gigabytes, or: How to Draw Anything - ⌨️🤷🏻‍♂️📷

Tags: tech, ai, art, machine-learning

I’d lie if I said I’m not slightly fascinated by what you can do with Stable Diffusion…

https://andys.page/posts/how-to-draw/


Things not available when someone blocks all cookies

Tags: tech, web, browser

It’s at least nice to see people paying attention to this and fixing their applications accordingly.

https://blog.tomayac.com/2022/08/30/things-not-available-when-someone-blocks-all-cookies/


Is premature optimization the root of all evil? | Secret Weblog

Tags: tech, optimization, performance

Let’s put this quote back in its context, shall we?

https://blog.startifact.com/posts/is-premature-optimization-the-root-of-all-evil/


Filtering my RSS reading - All this

Tags: tech, xslt, rss

Interesting use of XSLT (blast from the past!) to quickly filter RSS feeds.

https://leancrew.com/all-this/2022/08/filtering-my-rss-reading/


Code: Falsehoods programmers believe about email

Tags: tech, email

This mistakes are indeed widespread too much for my taste.

https://beesbuzz.biz/code/439-Falsehoods-programmers-believe-about-email


OCaml at First Glance

Tags: tech, programming, ocaml

I think this is a fair account on the state of OCaml in 2022. I wish it’d have grown more and have a bigger community by now. Nice little language still.

https://batsov.com/articles/2022/08/29/ocaml-at-first-glance/


Some ways to get better at debugging

Tags: tech, debugging

Nice categorization of the knowledge and skills needed for debugging. Definitely something to keep in mind to focus your efforts.

https://jvns.ca/blog/2022/08/30/a-way-to-categorize-debugging-skills/


Devbox: Instant, easy, predictable shells and containers.

Tags: tech, tools, docker

Early days but this potentially looks like an interesting tool to manage developer environments.

https://github.com/jetpack-io/devbox


You Should Be Using Python’s Walrus Operator - Here’s Why | Martin Heinz

Tags: tech, python, programming

Still controversial in the Python community, this post shows a balanced view on where it makes sense and where it doesn’t.

https://martinheinz.dev/blog/79


Rockstar Developers Are THE WORST Developers - YouTube

Tags: tech, hiring, programming, processes

Unfortunately seems to subscribe to the 10x programmer myth at least partly while trying to debunk another one… apart from that, it was very insightful, shows well how it’s a team sport and how you want people to complete each other. The whole “rockstar developer” thing is a recruitment marketing scheme.

https://www.youtube.com/watch?v=mVY2rFninp8


The False Trade-off between Quality and Speed

Tags: tech, design, quality, velocity, project-management, estimates

Good explanations on why trading quality for speed is always a bad idea. It also goes on about how to avoid sacrificing quality through the definition of done and proper estimates.

https://maruz.medium.com/the-false-trade-off-between-quality-and-speed-7f0f9e93fdd


Why are you so busy?

Tags: tech, product-management, planning

Wise words, if you’re always too busy and overloading your team, it’s a sign of something… but what? It’s important to know since it’s what will drive the necessary conversation you need to have.

https://tomlingham.com/articles/why-are-you-so-busy/



Bye for now!

Wednesday, 31 August 2022

We worked several months on Kaidan’s upcoming end-to-end encryption and trust management. Once Kaidan 0.9 is released, it will provide the latest OMEMO Encryption. But it will also make trust decisions in the background for you if it’s possible. Some trust decisions have to be made manually but there are many others Kaidan automates without decreasing your security. That is done by automatically sharing trust decisions via already secured channels.

The feature Kaidan uses is called Automatic Trust Management (ATM). Your device receives the encryption data to secure the conversation between you and your contact via the internet. That encryption data can be the data of an attacker. While you think that you communicate with your contact securely, the attacker can read, modify or drop everything you exchange.

You have to make sure that the encryption data you received are really those from your contact to detect and stop an attack. That is done by comparing the exchanged encryption data via a second secure channel. Kaidan provides QR codes for that. QR codes are especially helpful when you want a secure conversation with a contact you can meet in person. For that, you simply scan your contact’s QR code and vice versa.

First QR code scan

Second QR code scan

But what if your contact used a smartphone during the first QR code scan and now wants to chat with you via a notebook too? Usually, your contact would have to scan the notebook’s QR code with the smartphone and vice versa. Furthermore, you would have to scan the notebook’s QR code and vice versa. If you or your contact gets another device or even replaces an old one, QR codes have to be scanned again. That leads to multiple mutual scans, one for each pair of devices.

In the following example graph, there are four devices. B1, B2 and B3 could be your contact’s devices and A1 yours. The six gray edges are the mutual QR code scans that are needed to stop all possible attacks.

Needed trust decisions

With ATM, many QR code scans between you and your contact become unnecessary. The first meeting is used for the initial scan. The encryption data of all new devices is checked via the secure channel established by it. If your contact wants to chat via the notebook, your contact simply scans the notebook via the smartphone and vice versa. But all other scans are not needed anymore. The trust decisions are communicated between the devices that already have a secure channel.

In the example graph, ATM could work as follows:

  1. A1 scans B1’s QR code and vice versa.
  2. A1 scans A2’s QR code and vice versa.
  3. A2 scans A3’s QR code and vice versa.
  4. The remaining three edges are created automatically by ATM via the existing secure channels.

If you want to try out that new feature, stay tuned! Our next release will come soon.

Third issue about the progress on rolisteam.

1. RCSE

Rolisteam CharacterSheet Editor

Short introduction, the RCSE allows you to create charactersheet for any TTRPG. It is based on a visual editor to draw fields directly upon an image of the charactersheet. The editor part is using: QGraphicsView/QGraphicsScene and a table view to edit each field. Then the final result can be generated to get the sheet in QML.

User can edit the generated code directly. After merging almost all repo into the main one (see Update of june), RCSE was really unstable and some features weren’t working anymore.

Some changes in details:

The UI Improvements

RCSE in v1.9.0 RCSE_v1.9

Improved UI of RCSE RCSE_v1.8

New QML generation

In the earlier version of RCSE, there were 2 ways to generate the QML. The first option was to generate a qml item that adapt itself to the size of the windows. The second option was to create an item inside a flickview at the fixed scale value and if the window was to small to display the whole sheet. Users can scroll up/down/right/left to see the proper section of the sheet.

We remove those two options and now, by default the sheet adapts itself to the windows and there are actions to change the zoom factor. So user can decide the size of the sheet. Of course, scrolling is still possible. We basically merged both options into one.

Add support for formula into the field model

Some users complain about the fact that formula didn’t work in the field model.
There were working only in the character’s table. It is fixed now, and formula are duplicated into character (at character creation).

RCSE_v1.8

Changes:

  • Change architecture to have a MainController
  • Exposing C++ API from a singleton instead of rootProperty.
  • Fix image models
  • Add right click feature to control zoom
  • Removal
  • UI Improvements
  • Save loglevel and restore it on the next start
  • Add slider item for sheet
  • Add hidden field for intermediate computation (feature requirement from user).
  • and others…

Vectorial Map

This month, we spent time over vectorial map as well. The main changes that we introduce are about:

The small view

It allows user to see an overview of map. It is also possible to see the visible section of the map. It is really helpful to understand the relus.

maps

GameMaster Layer

As you may know map already had Ground, Object and Character layer. User wrote a ticket asking for an additionnal layer to put elements hidden from the players but visible for GM. To mark that items belong to the GameMaster layer, they become half transparent.

Features:

  1. Highlighter is using user color, now.
  2. Improvements about zooming and scrolling over the scene.
  3. Improve changing z order of map items (still in development)

5. Work for September

  • Keep working on Vectorial map
  • Network part for vmap

Tuesday, 30 August 2022

Resuming

In my final weeks of the Google Summer of Code 2022, I spend my time polishing code and writing and documenting all parts of my code for the final Submission for final integration into the branch master.

I discussed with my mentor throughout these weeks that these tasks mainly focus on :

  • Add a license header on the top of each source file.
  • Drop extra space by using the bash script : https://invent.kde.org/graphics/digikam/-/blob/master/project/scripts/dropextraspaces.sh.
  • Use cppcheck (Cppcheck is an analysis tool for C/C++ code). It provides unique code analysis to detect bugs and focuses on seeing undefined behavior and danger).
  • Reduce the text size of each item in QcomboBox, add notes in context for translators to limit translation sizes, and use a tooltip to host a long string description for each item.
  • Limit digiKam and Qt headers to export the minimum dependencies outside digiKam.

To summarize, I would like to demo the functionalities of the Digikam OCR tool what I have done:

  1. The user can process OCR in multiple documented images by in a items list; if list is empty, a pop-up will appear.

  2. There are four options that users can choose from based on 4 Tesseract basic options.

  3. When the User clicks the button “Start OCR,” The batch process will begin, it finishes 100% in the progress bar, and all results details are displayed in the Text Editor by double click on the item.

  4. Double click on each item list allows users to review recognized text.

  5. With the support of the spell-checking engine, users can adjust the text and store it in separate text files or XMP metadata by clicking on the “Save” button.

  6. The text stored in XMP can translate to another language if stored in another place.

You can view the demo of the plugin here :

demo

Main commits

Improvement

As mentioned in week 1 and 2, the accuracy of OCR need to be enhanced, so a dialog concluding the pre-processing methods is necessary. This feature will be helpful in the future.

These last few weeks have been a good learning experience with Krita as I try to implement a node visitor and save context classes. First we want to create a saveContext class for svg called KisScalableVectorGraphicsSaveContext that will be used to save to the file when visiting all nodes. This class is fairly cookie cutter and takes a KoStore to use to write to a specified file. The real work will happen in our node visitor class KisScalableVectorGraphicsSaveVisitor. Most of this right now includes some template visit functions like visit(KisPaintLayer *layer) that just calls saveLayer(KisLayer *layer) to save the specific type of layer. One small quirk here was when trying to find out where vector layers are processed. After experimenting with the ora plugin I found out this would be visited under the group layer function visit(KisGroupLayer *layer) so I similar for the svg plugin.

What’s this extra text in my file

Now that we’ve implemented the node visitor and are using a save context we have some preliminary text in our saved file. But something in our file isn’t quite right in our file. We see some garbled text at the start of our file:

PK�����ŽŽU_U0���������mimetypeimage/svg

I wasn’t sure where this garbled text was coming from but I can tell that the mimetypeimage/svg comes from my declaration in the KoStore where I specify image/svg. Starting from there, we can tell that something happens either in the creation of the KoStore object or when we start writing to it in the save context. At first I couldn’t find anything explicitly clear in the code for where this occurs. The save context declares some variables when an object is instantiated and just writes to disk when saving elements. But the KoStore has a little bit of a hint, it uses a zip or directory structure for use as its backend and I was using “Auto”. After checking the code comments and seeing that Auto defaults to Zip I was pretty sure that’s whats generating that garbled text.

But the next question is what should it be using instead? The node visitor requires a save Context to save elements. And the saveContext requires at something in order to actually to save to disk. Without a definitive answer I decided to look at some other export file code and what they do for their formats. I had been looking at ora/kra plugins but they are supposed to be a zip file so that’s not too helpful here. Instead the csv and tiff plugins show using the visitor with QIODevice a little more directly. Great that means we can go that route for the svg plugin.

Whats next

Right now I’m still figuring out how to integrate using the QIODevice with my node visitor. Hopefully that isn’t too difficult and I have some exciting news to share next week.

Friday, 26 August 2022

Let’s go for my web review for the week 2022-34.


A new jailbreak for John Deere tractors rides the right-to-repair wave

Tags: tech, repair

Good news for the right to repair movement. I wish they would stop DRM’ing equipments like this…

https://arstechnica.com/information-technology/2022/08/a-new-jailbreak-for-john-deere-tractors-rides-the-right-to-repair-wave/


Coping with Copilot | SIGARCH

Tags: tech, machine-learning, github, copilot, university

Indeed, this is going to be “interesting” in educational situations… I guess that’ll at least push into richer assignments.

https://www.sigarch.org/coping-with-copilot/


VS Code - What’s the deal with the telemetry?

Tags: tech, editor, microsoft, surveillance, gdpr

The obvious problem with VS Code, you just cannot have any trust into it.

https://www.roboleary.net/tools/2022/04/20/vscode-telemetry.html


Stable Diffusion Public Release — Stability.Ai

Tags: tech, machine-learning, ai, art

OK, now this is out and potentially a big deal to have this in open source.

https://stability.ai/blog/stable-diffusion-public-release


The New Normal: The Coming Tsunami of Fakery

Tags: tech, ai, internet, machine-learning, fake

The come back of the Dead Internet Theory? Getting more and more probable by the minute indeed thanks to the newer wave of generative AI text and art.

https://grandy.substack.com/p/the-new-normal-the-coming-tsunami


The Three F’s of Open Source Development | Ben E. C. Boyter

Tags: tech, foss

A good reminder for some of the loudly annoying Free Software users out there.

https://boyter.org/posts/the-three-f-s-of-open-source/


Preparing for the wave of open source funding

Tags: tech, foss, fundraising

Indeed, there’s more funding available. It’s becoming a maze though and PR shouldn’t be underestimated.

https://sethmlarson.dev/blog/preparing-for-the-wave-of-open-source-funding


Rust: A hard decision pays off | Pinecone

Tags: tech, rust, python, safety, productivity

Interesting points in there, indeed we rarely see things presented along an advantage in productivity for Rust when it’s compared to Python.

https://www.pinecone.io/learn/inside-the-pinecone/#rust-a-hard-decision-pays-off


Developers, please nurture your coding experience

Tags: tech, programming, craftsmanship, tools

I definitely recommend adopting this mindset. Been doing most of that for a long time and this definitely helps.

https://aymericbeaumet.com/developers-please-nurture-your-coding-experience


How to deal with money in software

Tags: tech, programming, money

Very good summary on how to process currencies properly in software. Goes all the way to explaining how such a library must behave (should you make one or decide which one to pick).

https://cs-syd.eu/posts/2022-08-22-how-to-deal-with-money-in-software


Why your website should be under 14kB in size | endtimes.dev

Tags: tech, http, web, networking, tcp

A good reason to try to make pages as small as possible. Interesting to see where this threshold is coming from.

https://endtimes.dev/why-your-website-should-be-under-14kb-in-size/


Journey to Lumen

Tags: tech, 3d, unreal

Very interesting account of the techniques evaluated to reach real time global illumination in the Unreal Engine.

https://knarkowicz.wordpress.com/2022/08/18/journey-to-lumen/



Bye for now!

I have implemented adding room to a Space.

I needed help from Tobias with it. I wanted to send m.space.child room event to a Space, but didn't know the right way to do it. Tobias suggested that I use the following function

SetRoomStateWithKeyJob* setState(const QString& evtType,
                                     const QString& stateKey,
                                     const QJsonObject& contentJson);

Here, contentJson will have the room event data.

The function call I used for removing a room from Space is

connection->callApi<SetRoomStateWithKeyJob>(spaceId, "m.space.child", roomId, QJsonObject{});

Similarly, the function call I used to add room to Space is

connection->callApi<SetRoomStateWithKeyJob>(spaceId, "m.space.child", roomId, QJsonObject{{"via", {connection->homeserver().toString()}}});

Its all well and good, except that adding room to Space doesn't work!

I asked about this to Tobias on our call. He pointed out that {connection->homeserver().toString()} should be written as QJsonObject{connection->homeserver().toString()}.

So, finally the call becomes connection->callApi<SetRoomStateWithKeyJob>(spaceId, "m.space.child", roomId, QJsonObject{{"via", QJsonArray{connection->homeserver().toString()}}});

With this, one can add or remove rooms. This feature is being added to the Child Rooms editor in Space Settings.

Wednesday, 24 August 2022

Monthly update on KDE/Plasma on Debian: Updates to Frameworks and KDE Gears

I have packaged KDE Gears 22.08 as well as the latest frameworks, and Plasma got a point release. The status is as follows (all for Debian/stable, testing, unstable:

  • Frameworks: 5.97
  • Gears: 22.08.0
  • Plasma 5.25: 5.25.4
  • Plasma 5.24 LTS: 5.24.6

I repeat (and update) instructions for all here, updated to use deb822 format (thanks to various comments on the blog here):

  • Get the key via
    curl -fsSL https://www.preining.info/obs-npreining.asc | sudo tee /usr/local/share/keyrings/obs-npreining.asc
    
  • Add the sources definition in /etc/apt/sources.lists.d/obs-npreining-kde.sources, replacing the DISTRIBUTION part with one of Debian_11 (for Bullseye), Debian_Testing, or Debian_Unstable:
    # deb822 source:
    # https://www.preining.info/blog/tag/kde/
    Types: deb
    URIs: 
     https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/other-deps/DISTRIBUTION
     https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/frameworks/DISTRIBUTION
     https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/plasma525/DISTRIBUTION
     https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/apps2208/DISTRIBUTION
     https://download.opensuse.org/repositories/home:/npreining:/debian-kde:/other/DISTRIBUTION
    Suites: /
    Signed-By: /usr/local/share/keyrings/obs-npreining.asc
    Enabled: yes
    

Warnings/Todos:

  • Update of the other repository to compile against Gears 22.08
  • kopete and ktorrent don’t compile. If you can fix that, please let me know.

Enjoy!

Usual disclaimer: Considering that I don’t have a user-facing Debian computer anymore, all these packages are only tested by third parties and not by myself. Be aware!

Monday, 22 August 2022

Hey, just a quick post, I uploaded some themes I've made for Aurorae and Plasma to KDE store.

They're simple themes that follow your colorscheme but are made for dark color schemes. The accent themes follow your accent color for the outlines.

The reason I made these themes is that I need a strong outline around my windows and other elements: Otherwise all the windows I have just "blend" together no matter how strong shadow I have enabled.

Aurorae Themes:

Plasma Themes:

Here's screenshots of them in use:

Without accent outlines: Non-accented theme

With accent outlines: Accented theme

And finally, link to the repository: https://codeberg.org/akselmo/aks_themes

I hope you like them!