Skip to content

Friday, 9 July 2021

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

Chatcontrol: European Parliament approves mass surveillance of private communications – Patrick Breyer

Tags: tech, europe, surveillance, dystopia

Constant monitoring of communications. Lovely…

New EDRi report reveals depths of biometric mass surveillance in Germany, the Netherlands and Poland - European Digital Rights (EDRi)

Tags: tech, europe, surveillance, dystopia

As if monitoring communications wasn’t enough… biometric surveillance is already on going in some of the EU states.

Amazon shifts Lumberyard to open source 3D game engine supported by 20 companies | VentureBeat

Tags: tech, amazon, 3d, free-software

OK, this is actually a very big deal. I think it’s the first AAA game 3D engine which gets open sourced. This could be very impactful to the industry.

YAGNI exceptions -

Tags: tech, craftsmanship, design, programming, logging

This is actually a good list. Clearly doesn’t try to invalidate YAGNI at all, focuses more on this infrastructure things you need on most projects anyway either for debug purpose or because they allow you to change the system easily later which in fact… supports YAGNI.

Does elegance matter? | Pydon’t | Mathspp

Tags: tech, elegance, programming, python

Very good points about why elegance matters in code. It’s definitely something I try to keep in mind in code reviews. One has to be careful not to use too obscure features of the language though. For instance, you’re mostly fine in Python where what it considered idiomatic is somewhat well defined, you’re much more in trouble in C++ which isn’t as cohesive.

Annotell: Code Custodian - how to clean your code

Tags: tech, programming, mob-programming, technical-debt, craftsmanship

Interesting use of mob/ensemble programming to tackle technical debt on projects.

Bye for now!

Thursday, 8 July 2021

KDE Floating Applets

KDE Floating Applets

Squashing Bugs


QFileInfo no longer causes application segmentation fault when the variable does not exist or has not been initialized.

Using python yield

GDB tries to print the least amount of values needed, but if you just return a list is disregards the set print elements no command. to prevent this, the python key word yield can be used to lazily compute the next needed values.

relevant commit -> here here.

QList Printer

QListPrinter in the debug pane now show if it is uninitialized or empty instead of showing an error.


Added Printers

  • QUrl Printer adapted from here and here.
  • QVarArray Printer.
  • QTime Printer.

What is next ?

Automatic testing, currently the way I test the printers is to manually compile and compare the debugger’s result with the expected one, but this gets cumbersome. When you add more printers you are not sure how it would affect previous printers.

More on testing next week as the initial step has begun, bye.

Tuesday, 6 July 2021

I’ve been slowly building up an OPDS feed, because I added support to KNewStuff, and I wanted to make sure I was able to make an OPDS feed myself.

Of course, the biggest problem is content. I have some fan comics lying around, and I have some Krita Resource Bundles that are all over the place… But there was a thing missing. Back when I was fifteen, I started work on a comic named Streets of Ganjet, an urban fantasy comic about the people living in the city of Ganjet. I have tried to rewrite it, but never got far enough for it to publish new chapters.

Those old chapters were made traditionally. I made them with Royal Talens east-india ink, using a small Conté nib, fineliners and of course pencil and eraser on A4 paper, upgrading to A4 Bristol board. On the computer I then cleaned up the pages with Paintshop Pro and later Photoshop, and posted them to the Narutofan forums. These pages are at my parent’s house. But I had another place where I kept the digital files: My old backup hard drive. Which I thought had broken, given it stopped spinning up somewhere in 2012. I tried spinning it up again, and lo and behold: It worked!

So, without further ado, Streets of Ganjet:

Chapter 1

A boy in a soldier’s cape has been sighted, bringing the various factions of the City of Ganjet into a tizzy.

I started writing this comic when I was about 15, following the logic of “Hey, I like stories, I like drawing, let’s draw a comic!”. I don’t really know how to feel about that nowadays. On one hand, this comic has given me a lot of practice, but at the same time, in that period I was ‘the person good at art’, which I am not sure people know me as today. The comic was largely pantsed, meaning that like 90% of all the plot points brought up in the first 3 pages were ones I had NO idea what I was going to do with them.

This first issue is also interesting in that I remember having a lot of fun trying out all sorts of panel layouts. I have since greatly reduced the craziness I do with them, and try to focus on composition, which is pretty hard in itself. Another thing that I find interesting with this comic is that there’s a pretty decent action scene in there, which surprised me, as I had later comics die literally on an action scene. But good lord, are those first few pages cringe.

Chapter 2

While Miloor is still trying to find a place, someone else gets in trouble…

I remember this one being the one that was most well-drawn of the bunch, and it still holds up today. Back in the day, people over at the art section of the Narutofan forums were super excited about this one (“more character relationships explored, more plot development”, I recall being a comment).

Anyway, some thoughts: “Why is everyone so mean to one another?”, “I still don’t know who Alan is…” and “Hey, again a decent action scene, good job 16yo self!”.

Chapter 3

Laurens, kidnapped, tries to escape while everyone searches for him.

Don’t recall when I made this, but it must’ve been in the summer of 2006 somewhere, I do remember managing to make this comic within a month, something quite obvious from how poor the art is compared to chapter 2.

Other thoughts while making the acbf: “Gee, this comic is pretty violent (I am not a violent person at all in real life)”, “People are still not nice to each other”, “Ideh is much more cringe than I remember her being…”, “Marianne, chill, you don’t have to choke the kid to get him to cooperate, I know you’re a bitch, but still…” and “Huh, I didn’t realize Ideh originally had a pretty good idea of what was up with Laurens, did he tell her?”

Chapter 4

Marianne and Miloor get to know each other, while Ideh heads their way…

So, 3 wasn’t the worst drawn, 4 was. I seemed to have an obsession with making everyone’s heads really round during this period, not sure why… Notable is that this is the first entry that has relationships that are truly non-negative, maybe related, but also the first comic where people actually sit down and talk instead of running away from bullets and stuff.

Other thoughts: “Ideh will never fulfill that promise to Isabel, because the comic never gets that far…”, “dialog is slightly less cringe, but people keep stating the obvious”, “Oh, René, I had seriously totally forgotten you were even in the plot at this point”.

As a complete aside, I strongly remember drawing page 13 while my teacher was showing us Verhoeven’s The Fourth Man, which at that point had hit an Verhoeven sex scene, and I remember being too embarrassed to watch.

Other things I remember is my mother telling me that she didn’t understand certain scenes, so I had to add a couple of caption boxes to them. In one instance, she complimented me on how my characters looked subtly older between chapters… This wasn’t the case, I just got better at drawing them. My eldest sister told me she tried to read it, but profusely apologized that she didn’t really understand it. My father complimented me on the amount of work I had managed to do, which is a rarity for him. My other siblings never read it, as far as I know. Maybe for the best…

Eventually, the comic kind of died because of two reasons: 1. I was trying to do chapter 5 in A3 format, which slowed things down (as I couldn’t draw on the go anymore), but what also happened was that when I looked back I realized that all these plot points were going nowhere and all the characters were rather mean towards each other, so I wanted to fix that. Shortly after this realization I ended up doing a game design course which burned me out, and for a few years I was convinced I could not draw at all.

Nowadays… I am not exactly cat-vacuuming by working on Krita and Peruse and such, but rather, I now know what the conclusion to this story is going to be. However, the conclusion isn’t being signaled ahead of time in any of the earlier chapters, so it ends up coming out of nowhere and not really feeling cathartic. I want to fix that first…

In the meantime, here’s the old comics. I sometimes feel like I might come across as kinda know-it-all when there’s no comics to back it up, but I do have experience with drawing comics, and I have the comics to prove it. Even if they’re very cringey and written by a very edgy teenager.

And here’s the OPDS feed.

Growing a KDE Video Community: My Experiment

Growing a KDE Video Community: My Experiment

Monday, 5 July 2021

Hi everyone! It is the end of the 4th week of GSoC 2021 and here I am sharing the experience I gained throughout the week.

Last three weeks, I worked on finalizing “learn decimals” activity which has 3 sub-activities:

  • Learn decimal numbers.
  • Learn addition for decimal numbers.
  • Learn subtraction for decimal numbers.

I finished the implementation of all the 3 activities, they are ready now to be merged.

1. Learn decimal numbers

In this activity, a decimal number is displayed. the bar with the arrow represents a full unit, and each square in it represents one tenth of this unit, the kid has to drag the arrow to select a part of the bar, and drop the selected part into the empty area so that the number of dropped bars corresponds to the displayed decimal number.

For every dropped bar, all bars are organized after 1 second from the drop action such that the kid can see the reorganization of bars, as a result we add a place for a 6th bar to have at most 5 full bars.

The activity provides instruction tutorials on how to play with it, both vertical and horizontal layout are supported.

Horizontal Layout for Learn Decimals Activity
Vertical Layout for Learn Decimals Activity

2. Learn addition for decimal numbers

In this activity, an addition with two decimal numbers is displayed, and the kid has to represent the result of the addition by dragging bars into the empty space, in case he represents the result correctly, he is asked to type the corresponding result.

Horizontal layout for the Addition Decimal Activity
Vertical Layout for the Addition Decimal Activity

3. Learn subtraction for decimal numbers

In this activity, a subtraction with two decimal numbers is displayed. Below it, the first number from the subtraction is represented with bars, the kid has to click on the squares to represent the result of the subtraction.

A cross is added to all square units after the clicked square such that the kid can visualize what has been removed from the first decimal number, if he represented the result correctly then he is asked to type the corresponding result.

Horizontal Layout for Subtraction Decimal Activity
Vertical Layout for Subtraction Decimal Activity

Challenges I have faced

  1. Readjusting the position and mouse area of the arrow to not overlap with the bar area as it was very hard to click on the bar to drag it when the value is small (0.1 or 0.2)
  2. Checking the typed answer by the kid and the correct result wasn’t working correctly especially when the locale language is changed, there was a conflict between the dot decimal point character and the comma decimal point character for different languages, it was solved by taking the typed answer as a string, and converting the correct answer to its locale string, so that we can check both decimal number under the same locale language.
  3. Adding the 6th slot for decimal activity and addition decimal activity required some changes in the layout which leads to reorganize some components again for best fitting.

what’s next ?

Finally, the first milestone is achieved and now it is the time to start implementing a new activity which is “Programming Maze Loops”.

I am having a great time contributing to the project, I believe that working with GCompris catalyzes my journey to become a better software developer.

That’s all for now. See you next time!

Thanks for reading!

Saturday, 3 July 2021

DEVLOG: Bringing Breeze Redesign to Plasma Theme, part 1

DEVLOG: Bringing Breeze Redesign to Plasma Theme, part 1

Friday, 2 July 2021

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

FarmBot | Open-Source CNC Farming

Tags: tech, farming, free-software

Interesting product, and it’s fully Open Source, even the hardware.

Microsoft signed a malicious Netfilter rootkit | G DATA

Tags: tech, windows, security, supply-chain

A rootkit in a driver… OK that’s not new. Signed by the provider of the number 1 desktop OS and there you got a major security issue. Again a supply chain attack.

When it comes to git history, less is more - Stephen Brennan

Tags: tech, git, system

A good reminder of why you don’t want to mess too much with the VCS history for systems with long term maintenance and several stable releases.

When To Rewrite

Tags: tech, architecture, programming, legacy

Very good rant which explains nicely why rewriting some software from scratch is almost never the right answer.

How to build remote teams properly

Tags: remote-working, hr

Lots of good advice in there. Per usual quite some of it also makes sense in non-remote teams. Not sure I’d do everything exactly in the same way but that gives a good overall idea of the important points.

Why some biologists and ecologists think social media is a risk to humanity

Tags: tech, social-media

It is indeed important that serious research and conversation arise on this topic. The bomb is ticking.

Why Computing Students Should Contribute to Open Source Software Projects | July 2021 | Communications of the ACM

Tags: tech, free-software, university

Obviously I’m convinced it’s necessary for students to learn how to contribute as soon as possible. That being said, this leave unanswered the very important question of not burning out project maintainers. Indeed, it needs to be structured in some way, most projects can’t cope up with swarm of students dropping potential contributions on them.

gProfiler is a system-wide profiler, combining multiple sampling profilers

Tags: tech, profiling, performance

This looks like an interesting full system profiler.

Windows 11, Amazon, and Uncomfortable Questions

Tags: tech, security, supply-chain, surveillance

Seeing the bad practices of Amazon with its Android AppStore, it really feels like another supply chain mess in the making with Windows 11 Android support…

Windows 11: TPMs and Digital Sovereignty

Tags: tech, vendor-lockin, windows

If it wasn’t clear that Microsoft never abandoned it’s Palladium plans but merely went for a detour after the backslash… now it’s getting very clear with Windows 11. They’re clearly back at it and this could become a problem to install something else than Windows on PCs…


Tags: tech, tests, http

Looks like an interesting tool for testing when a HTTP server is involved.


Tags: tech, commons, smartphone, fair

Interesting approach. Nice to see several coops and non-coops forge an alliance like this for a better all encompassing offering.

Why do conspiracy theories flourish? Because the truth is too hard to handle | Edward Snowden | The Guardian

Tags: tech, surveillance, conspiracy

Very interesting and insightful point of view… I think this hits the nail on the head: “we talk about conspiracy theories in order to avoid talking about conspiracy practices, which are often too daunting, too threatening, too total”.

Bye for now!


lets start with QWeakPointer, here our pointer template type is Animal its structure is

├── wp (weakpointer): (QWeakPointer<Animal> *)
├── d 
│   ├── weakref  : as QAtomicInt  
│   └── strongref: as QAtomicInt
└── value: (Animal *)

QWeakpointers in GDB provide two variables.

  • d (data) -> stores the weak and strong references of the pointer.
  • value -> stores the type the pointer points to.

what we need to print is

  • weak reference
  • strong reference
  • the value

no need to worry about the weak and strong ref as QAtomicInt Printer has already been made, the values is then printed out

in the above Animal is the type template we need to print the value then we are done.

The above applies for both QWeak and QShared Pointer but not QAtomicPointer and QPointer

QPointer structure would be

QPointer (QPointer<Animal> *)
├── wp (weakpointer): (QWeakPointer<QObject> *)
│   ├── d
│   │ 	├──  weakref  : as QAtomicInt 
│   │ 	├── trongref: as QAtomicInt 
│   ├── value: (QObject *)

In this case we would get the template name from the parent and pass it to the weak pointer printer, then cast the value from a QObject to the template type, in our case it is Animal

for QAtomicPointer where are able to get the pointer at pointerName._q_value._M_i' and dereference it.

relevant commit

Fix For QFileInfo

  • printer for QfileInfo always crashes because i try to access methods that do not exist yet in the class to solve the problem i found a way to check if the class has been initialized in gdb commit here

  • added some extra variable that may be needed during debugging

the repo can be found here

That’s it for now see you next week

Thursday, 1 July 2021

In my previous blog, I discussed the progress on adding new activities to GCompris project. In the past three weeks, I was working on ‘Deplacements’ activity, which has now been renamed to ‘Path (Encoding / Decoding)’. As a result, the following 4 sub activities are now going to be added:

  • Path Encoding
  • Path Encoding Relative
  • Path Decoding
  • Path Decoding Relative

As of today (1 July, 2021), all the four activities are functional. Some finishing touches are left to be done. Apart from that, I have to add multiple datasets. Right now, just one dummy dataset has been added for testing purpose in all the four activities. (MR Link)

1. Path Encoding

In this activity, we are given a path on a grid. It has several obstacles on the map, and a fixed path is shown. Tux has to reach the target avoiding all the obstacles. The user has to follow the path by giving instructions. The instructions are absolute, and do not depend on the current direction of Tux.

Demonstration of Path Encoding activity. Notice that the given instructions do not depend on the current direction of Tux.

2. Path Encoding Relative

This activity is similar to Path Encoding activity. The only difference here is that the instructions are given with Tux as the frame of reference. The instructions depend on the current direction Tux is facing.

Demonstration of Path Encoding Relative activity. Notice that the given instructions depend on the current direction of Tux.

3. Path Decoding

In this activity, the fixed path is not initially shown to the user. Instead, a set of instructions and the initial position of Tux are given. The user has to process the instructions, and click on the next ‘Block’ where Tux will move to reach the target. Here, instructions are absolute and they do not depend on the current direction of Tux.

Demonstration of Decoding activity. Notice that the given instructions do not depend on the current direction of Tux.

4. Path Decoding Relative

This activity is similar to Path Decoding activity. The only difference here is that the instructions are given with Tux as the frame of reference. The instructions depend on the current direction Tux is facing.

Demonstration of Path Decoding Relative activity. Notice that the given instructions depend on the current direction of Tux.


  • To implement bug free relative mode was quite a challenge. The directions led to a lot of confusions while coding. I’ll be looking forward to enhance the readability of the code, by making an enumeration to indicate the directions.
  • Implementing smooth animations for movement of Tux was quite a challenge. Here, I reused the code written by Bruno Coudoin and Emmanuel Charruau for ‘reversecount’ activity and enhanced it for better suitability in this activity.
  • Handling of touch based input on mobile devices was quite important. This valuable suggestion came from Timothee Giet to detect valid drags, and accept them too. It has now been implemented. Users can see an overlay on the current box that they are holding, and can drag and change their selection before releasing the input in decoding activity.
Demonstration of drag and release support for touch based devices for better accuracy.
  • I proposed the idea of having sound effects for each move. Timothee suggested the audio tracks for the same, and I embedded them in these activities.
  • Apart from this, I’m also worked on several other changes suggested by my other mentors, Deepak and Johnny.

What next?

According to timeline in my proposal, I will work on improving this activity for the next few days before I move on to working on the next activity. The following tasks are still pending on these activities:

  • Multiple datasets, new maps
  • Responsive layout for vertical devices
  • Enumeration for direction in core
  • ActivityInfo for all these activities
  • Enhancing the UI / UX experience of the activity

I’ll be working on the above tasks, and try to finish them as soon as possible. You can follow the task on phabricator (T14159). Many of the assets being used in these activities are just for development, and borrowed from 3rd party sites (Attributions). Timothee will be working on these assets, before these activities are rolled out in a later release. I would like to thank him for his support.

It’s been more than 6 months since I’ve started to contribute to this project. It has been an amazing experience till date. I enjoy working on it. I’ve learnt so much in these past few months, and its still i a long way to go. I’m looking forward to more merry months with GCompris.

Last but not the least, thank you my dear readers for patiently reading till the end. Have a great day ahead!