Skip to content

Tuesday, 6 September 2022

Due to a problem with releaseme's tarme.rb script, the release tarball for KPhotoAlbum 5.9.0 didn't contain any translation data. Alas, I noticed this not before the tarball already spread the mirrors, so we had to withdraw it an create a new one, with a bumped version number.

So here we are, KPhotoAlbum 5.9.1 is out now – even with translations now ;-)

— Tobias

Monday, 5 September 2022

My previous post in this series tracked what I had done until the 5th week, and gave some information on the technical aspects of the project. This post covers the work done since.

Work Done:

1. Adding User-defined Permissions

For permissions of 4 categories (namely, “Filesystems”, “Session Bus Policy”, “System Bus Policy” and “Environment”), the user can add their own permissions and an associated value (such as adding their music directory with “read-only”, which lets the application read the contents of their music directory).

The first task in the 2nd half of GSoC was adding support for users defining their own paths, buses and environment variables.

At first, I went with keeping a global “Add permission” button, but it was sensibly suggested later on to have a separate “Add New” button for each category.

2. Implementing “Apply”, “Default” and “Reset” Buttons

The KCM didn’t actually work like a KCM because changing a permission on the interface would instantly change the permission in the overrides file as well, instead of sending it to a “waiting” area until the user hits “Apply” button. Similarly, the “Default” and “Reset” buttons did nothing.

Most KCMs use a KConfig file, instead of an overrides file like being used here, to store the settings. This caused me to stall for a while since I wasn’t sure how to proceed, but after my mentors referred me to the tablets KCM, work picked up again and I proceeded to implementing the 3 buttons.

This involved overrides 5 functions from the KQuickAddons::ManagedConfigModule class, namely: load(), save(), isDefaults(), isSaveNeeded() and defaults(). This also marked the first time I used signals and slots.

After implementing functionality for the buttons, the next step in this metatask was to handle the situation when the user changes certain permissions, but without clicking any of the buttons that would finalize or reverse the changes, clicks on another application. In the beginning, I did some changes that would do as follows: when the user clicks on an app A and makes some changes and then – without applying/resetting them – jumps to another app B and makes some changes there, and then clicks “apply”, changes made to B would be applied and changes made to A would still be un-applied, so the user can jump back to A and apply those changes as well. Essentially the 3 buttons worked only for the app and changes that is currently selected.

This was, however, not a good way of doing things. It would be much simpler for a user to just be prevented from changing the application when there are unsaved changes in the presently selected one. So I implemented this instead.

Along the way, as newer changes were made, the “reset” (especially) and the “default” buttons would stop working as expected, so I’d have to revisit this part of the project and fix whatever got broken. These were trivial and not time consuming, though.

3. Redesign:

The plan since the beginning was to split the interface into “basic”/”advanced” sections. The basic section would include internet access, device access, remote login, filesystems, bluetooth etc. The advanced section would include more technical things such as interprocess communication, buses and environment variables.

I started working on this a couple of weeks back. During the first week, I split the interface into 3 parts: the app names, option whether the user wants to go to basic permissions or advanced ones, and the permissions themselves. Later, this was changed back to just 2 sections with a drop-down list. When the user clicks it, advanced permissions are shown (or un-shown, if they were displayed already).

Here’s how it looks now:

Screenshot

Screenshot

The 3 above were “metatasks” that involved plenty of minor things. Below, I have mentioned some of the standalone or “minor” things I spent doing:

1. Fixing section headers’ places: Earlier, section headers would appear as the program read it in metadata or overrides file. For example, if an app does not have any permissions under the “Session Bus Policy” group, Session Bus Policy header would not show up at all. Then, if the user added a session bus, it would show up at the end of the list. The list headers were thus never consistent in their ordering across different applications. So I added them in fixed places using “Dummy” permissions. “Dummy” permissions are just placeholder permissions and their only purpose is to make QML display the section headers. If a permission under a group does not exist, the program would add a dummy permission in that group, so the section appears. Later when the user adds their own permission in that group, the dummy would get deleted. When user deletes their permission, the dummy would come back to life. Dummy permissions are, of course, never shown.

2. Fixing random crashes: On random runs, the program would crash. I initially thought it had something to do with the manner in which I was access section labels, but it actually was related to a undefined value being passed to the ref property. The fix was trivial, though it took some time to realize the actual problem.

3. Fixing icons’ problem: For KDevelop on my own machine, and multiple apps on my mentor’s machine, icons would not appear. This took some time to fix since I was not sure what was causing the issue, particularly since the same icons did appear for me on my own machine (except KDevelop).

4. Adding tooltips, icons etc: The “add new permission” button needs tooltips and icons, so I added those. I also changed the buttons from raised buttons to flat ones.

5. Fix bugs related to previous work: My new changes would break the apply/default/reset buttons from time to time, so I spent a little time fixing these again. Similarly, as I used more and more of the KCM, I realized that in some cases the values for non-simple permissions would not work. However, there has been no problem in the latter part of the project in the past 5 weeks.

6. Minor design changes: Preventing components from overflowing, ensuring margins exist in dialogs, making dialog text more specific, improving descriptions of filesystem permissions, putting a frame around the panel, making sure the header on the right view does not get cut off at startup (yet to be merged as of this writing) etc.

7. Misc. tasks: Ensuring re-use compliancy and adding licenses properly, addressing warnings from KCM and GTK, cleaning up json file and adding icon etc.

8. CheckableListItem: This caused me a fair bit of frustration: the checkable list item delegate would not work if you click the box (instead of elsewhere on the delegate). Using “actions:” or “onCheckedChanged:” instead of “onClicked:” would cause weird behaviour. This was very confusing since the delegate seemed to be working OK in Discover. The fix should be merged soon.

What’s next:

I have fallen of my schedule a considerable amount: I started the Snap KCM part of my project only this weekend. I have listed the app names and icons so far, and I hope to do as much as possible before GSoC ends. I will elaborate upon it in the next post 4-6 days later.

Sunday, 4 September 2022

It's been a while, but now, we're happy to announce the brand new release 5.9.0 of KPhotoAlbum, the KDE photo management program :-)

The new version includes (from the ChangeLog):

  • Bugfix: Fix crash when forgetting to select images upon import (Fixes: 445404)
  • Bugfix: Fix faulty assertion when video thumbnail files cannot be written (Fixes: 446258)
  • Bugfix: Remove incomplete URL encoding of non-ASCII characters in HTML export (Fixes: 452458)
  • Bugfix: Fix crash when reimporting deleted files from a .kim file (Fixes: 444792)
  • Bugfix: Fix multiple issues identified by code analysis tools.
  • Deprecation: Tip of the day feature was removed because it is no longer supported by KDE Frameworks.
  • Enhancement: Generic file metadata (size, last changed date etc.) can now be viewed via the Exif metadata dialog.
  • Enhancement: Support other video backends (libVLC, QtAV) in addition to Phonon.
  • Enhancement: Add volume controls to video player.

Thanks to everybody having contributed to this release. The authors were (according to git log and in alphabetical order):

  • Nicolás Alvarez
  • Yuri Chornoivan
  • Albert Astals Cid
  • Pierre Etchemaïté
  • Nicolas Fella
  • Friedrich W. H. Kossebau
  • Tobias Leupold
  • Jesper K. Pedersen
  • Snehit Sah
  • Ömer Fadıl Usta
  • Johannes Zarl-Zierl
  • Henner Zeller

Have a lot of fun with the new version!

— Tobias

I created a merge request to submit my additions for Space Home and Space Creation/ Editing functionality. The merge request can be found here.

This merge request recieved a lot of helpful suggestions by Carl Schwan and Jan Bidler. I tried implementing a lot of them.

There were a couple of UI fixes. Non privileged accounts were restricted from accessing options to edit child rooms of Spaces on UI.

There were some syntax related changes too.

Functionality wise, I will be creating a new list model for the child room editor. It will contain the rooms user is part of as well as rooms that are children of Space. I also have to set up connections to update Space home page whenever changes to Space settings are made.

This is the final post for Google Summer of Code 2022. I will continue to contribute to NeoChat, and to other KDE projects. I will push updates to the open merge request contribute further code or bug fixes.

Saturday, 3 September 2022

OMEMO logo

Kaidan will receive a grant by NLnet for adding encrypted audio and video calls.

The calls will be end-to-end encrypted and authenticated via OMEMO. Furthermore, Kaidan will support small group calls. We strive for interoperability between Kaidan and other XMPP apps supporting calls. In order to achieve that, we will implement a large number of XEPs (XMPP Extension Protocols). They make it possible to have a modern call experience.

Calls have become more widespread over the past few years in free XMPP chat apps. Especially, grants by NLnet made that possible. The development speed and interoperability between different apps have increased. Such an intense development often results in improved specifications. But sometimes the development overtakes the standardization. In that case, the standardization needs to catch up what has already been implemented.

We have to handle that circumstance with group calls and invitations to calls at the moment. There are some adjustments that are not yet official. To make calls from Kaidan to other apps already supporting them, we have to base our work on those changes. If those unofficial adjustments are being modified later to become official, we will need to modify Kaidan as well. But we see the evolution of calls in XMPP as a huge progress and are ready for adaption!

Kaidan’s goal is to establish free and secure communication while being easy to use, thus lowering the entry barrier to XMPP for average users coming from other networks. NLnet and a couple of other organizations support us via the NGI Zero PET fund to achieve that. The money is provided by the European Commission. That is an example of how software can be developed according to the Public Money, Public Code initiative.

There are many other interesting projects currently funded by NLnet. We are glad that Kaidan is one of them!

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.