Skip to content

Friday, 4 February 2022

Recently I got an older Intel tablet, specifically the mpman Converter 102. It is one of the devices that have a 64-bit processor but a 32-bit UEFI. This makes booting normal linux distribution images impossible. This device had another limitation, it didn’t have a menu to boot from USB.

The tablet and the Pine Phone
Taking good pictures at 3 am is hard.

Luckily this isn’t a problem, since the refind boot manager can be installed from within Windows. The author of refind maintains good documentation on how to do that.

The refind that will be booted afterwards is still 32-bit, so normal distros will still not boot. To work around that, we need an install media that contains a 32-bit grub build. Since the default iso files from debian are a ISO 9660 filesystem, it’s not trivial to add new files to the boot media. While you can unpack the iso and repack it, I just used unetbootin and copied the file afterwards. Unetbootin leaves a fat32 filesystem instead of the ISO 9660 one. The 32-bit grub I used is unfortunately just a random file from GitHub. You may find better, more trustworthy builds of it, but this is what worked for me. You can now boot the media from within refind, and you will see the debian grub menu, rendered in a very basic way because the grub build is old.

Finally the Debian installer can be ran as usually. Unfortunately these kind of tablets can contain hardware that linux-firmware doessn’t have firmware for, so it’s likely that you have to find some of them on the internet. If you have the same tablet, I can give you the files I used. They are for a different tablet (One called jumper-ezpad-mini3), but turned out to work.

The uefi bootorder editing that the debian installer did didn’t work for me, maybe because I installed on an external SD-card. So I had to select refind in the UEFI menu after pressing ESC. Then I could launch the Grub which the Debian installer installed and boot the new system.

We can set up refind as the primary bootloader again using efibootmngr. efibootmngr -o {list of numbers} can be used to set the bootorder. The boot entry numbers can be retrieved by running efibootmngr without arguments.

So far the screen was always rotated to the right. Luckily with current linux kernels this can be easily changed. For that, /etc/default/grub needs to be edited. We need to find out the name of the internal display. This can be done using xrandr xrandr --listmonitors. Then we can change GRUB_CMDLINE_LINUX_DEFAULT to quiet splash video={display_name}:panel_orientation=right_side_up.

I decided to hide grub as much as possible, since my primary bootloader is refind. Grub is still needed to cross the 32-bit / 64-bit boundary, but it can be hidden using the following lines:

GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=0

After all changes are done, we can run update-grub as root.

I wrote this down mostly for reference in the future, but maybe it can help you with a device of yours.

Thursday, 3 February 2022

DISCLAIMER : This post is entirely my personal view, and does not reflect that of any projects I contribute(d) to.

Hey! In this post I've shared my personal experience with contributing to open source projects. I'm still a learner, and probably will be one for rest of my life. But I believe I'm beyond that point where I was confused about "how do I even start". I'm recording my experience in hope that it proves to be useful to someone else.

Since this post is meant to record my personal experience and observations, I have glossed over some commonly known practices like looking for good first issues, or learning basics of the toolchain you'll be using. I find those advice to be abundantly available on the internet.

Be inspired

The first step is pretty simple. Be inspired!

As simple as it sounds, many people don't know exactly why they should be contributing to open source projects.

Do you want to improve application reliability for thousands (or even millions) of users around the world? Do you think you can add a cool feature to your favorite application? Do you believe that you can lend a helping hand to the developers pushing updates to applications you use daily? (and many of them are probably doing it without any pay)

If your answer to any of the above is "yes", you've already completed the most difficult step.

Finding true love

If your answer was "no", well, how do you find that application or organization where you're truly motivated to contribute? First step wolud be start using more open source software. As you increase your exposure with open source software, you'll eventually find a software that you really want to help with and improve upon.

I really suggest switching to a Linux distribution at this point, because that will make your life much easier.

My story, you ask? I have tried contributing to open source projects here and there, but the lack of real motivation was a big friction point for me. Fast-forward to April 2020, when I first used Endeavour OS. I found it to be a great distribution, offering the experience I really liked and believed in. Months later, I realized I really wanted to help them out. In whatever small way I can. February 2022 marks one year of me being on the team.

If you try contributing to a software you use, it will be much easier for you to test changes and come up with new ideas/ improvements.

But, I don't know coding :(

"I don't know coding, how do I contribute?"

This is a big misconception among people new to the open source scene. Programming is just one part of the process. There are many other things a project needs help with. Graphics, translation, cloud infrastructure maintenance, promotions, testing, support... KDE even had openings for music producers willing to work on sound design for Plasma!

Some of these don't even require a very high technical IQ. Take for example testing - an average Joe is as suited to test applications as the project developer, since most of the users are going to be the average Joe.

On Endeavour OS, I do testing, theming, packaging etc. Any one who can write code to traverse an array can certainly do these things. So you can already guess there is no coding involved. But my favorite work is seeing those experienced people discuss problems and find solutions. That is what grows me as a learner.

However, that doesn't get me into XYZ open source event

"Most open source events for students are geared towards programming, so how do I make it if I contribute with other stuff you just mentioned above?"

If you've reached here, I suppose you said "yes" to the questions I put up in the first section. If you're doing this only to get into an open source event - that would totally defeat the purpose. Yes, it's good to try getting into these, but in case you're not able to make it, you shouldn't stop contributing to open source altogether. You can still contribute even if you're not a part of any student event. What should motivate you is the fact that you'll be improving user experience for thousands (or millions) around the world.

Even if you don't contribute code, there is a lot to learn. Just by seeing how the project members function, you get an idea about managing large communities. You get better with your communication skills. You learn more about the organization and make friends, who could certainly help or guide you. (seriously, knowing an experienced person is way better than a hundred unknown LinkedIn connections)

Ok so, how do I start?

You've finally found the project(s) you want to work on. What do you do now?

First up, join whatever communication platform the project uses. Matrix, IRC, forum and mailing lists are the common ones. Introduce yourself - keep it short and to the point. List your technical skills that are relevant to the project. You don't go to a kernel development group and say that you know React. (unless you're discussing their website) Most likely, you're going to be ignored. It shows that you did not try to read up what the project is about and how they do their work. Introducing yourself is - undoubtedly - one of the most dreaded questions. Looking back, I find that my non-coding days at Endeavour OS taught me a lot about how open source projects function. Being a mini maintainer myself, I have seen quite a few potential contributors. I know what a project maintainer would like to hear. And that helps me when I am the one introducing myself in communities where I'm new. From the last section - even if you're not programming for a project, you're still progressing faster than you know.

Stalking communication channels, I've seen a couple of copy-paste introductions and project ideas. The posters had put in absolutely zero effort in even looking up what kind of products does organization makes. As a result, they either were gracefully ignored, or received a feeble response. So, do little bit of research beforehand. Do your ideas suit the project goals and philosophy? It is much easier and smoother working on a project where you believe in the goals and philosophy.

Once you have introduced yourself, a community member should point you towards the resources and relevant communication channels where you could help out. Do note, exactly nobody will spoon-feed you. Most likely, you'll get link to a wiki page, or link to a different group. It's your task to explore and follow the links to find what you want to help with.

Say, you want to join the promo team. Of course, you'll first need to join their channel. For a couple of days, try to just observe how they work. They are probably more efficient than the way you're used to working with your friends. Try to understand the tone and air of the channel. (you never want to crack an out-of-place joke) Once you feel you understand their flow, start chipping in with your suggestions, ideas and opinions. Again, you're probably not contributing something tangible at the beginning, but one idea leads to another - you never know when your simple idea transforms into a lengthy discussion and ends up as the next big thing.

And obviously, never send memes in #general XD

If you actually want to get into coding...

It is a tough ride ahead, but I promise, it is very rewarding. As I said earlier, if you are contributing to a software you already use, chances are you already have some suggestions or ideas to make it better. Why not take them as the starting point? Before starting to work on anything, it is always good to discuss with other team members about the changes. It is possible that your suggestion goes against the project philosophy, so it might need some tweaking. Or in the other case, an experienced member could help you refine your idea. Also, make it a point to look up if the idea or bug you want to work on has already been reported and/or is being worked upon. If yes, you could team up with the person(s) working on it, and help them with testing, or giving ideas.

What if you don't have any idea, or you're new to the project altogether? Download it and start using! Try to look around the application to get a sense of what is it about. Don't straight dive into the code. Look for pending issues. Try to assess which issues you could possibly solve. You don't have to solve the complete issue in your head right now. Just think about what all tools you'll need. Do you know how to use them? If still looks difficult at this point, simply try to reproduce the bug. There are many nasty bugs that are hard to reproduce. Even if you come up with a definitive process to reproduce the bug, you'll be doing a great help to whoever takes up the task of fixing it. Share your findings with the team, and follow the discussion. When the bug is finally patched, try reading the diffs and see how it was solved. This will give you idea about at least one component of the application.

If submitting patches, feel free to discuss or take help from the community members. Most likely they'll help you out. Never be afraid of code reviews. See them as light discussions. My first code patch was not merged, and the discussion only led me to contributing a better patch. I've recorded the experience below.

My experience

The first "coding" related issue I had to fix on a KDE project was on KDF. You can see my bug report here. KDF was using Dolphin as the default file manager, instead of the system default. It did let users change file manager from settings, but that wouldn't work when using KDF as a Flatpak. So, in my first patch, I removed the feature of selecting file manager altogether and made it such that KDF will always use system default file manager. In review, I was suggested to not remove the feature, but instead give users the option to either use default file manager, or specify a custom one.

I closed the pull request and the next day, created a new one, which was finally merged. My code contribution wasn't something too significant, but it helped me become more confident with QtWidgets, C++, signals - slots and by poking around in the source code, I also learned how the project is structured and how they use their framework to store user preferences. Tiny patch, but big learning. As my next patch, I was suggested to add a feature that would detect if application is running as a Flatpak, and disable the custom file manager input automatically. This time I already knew about the application. I sent the patch rather quickly.

Of course, I got a lot of help from the community members. The whole experience makes it worth it for me to contribute.

Going further

By now, you probably have some idea about how to go about making your initial contributions to your favorite project.

Once you make your first successful contribution, you feel lot more confident. You feel motivated to take on bigger tasks, and become active in discussions. You should have already realized that this is a team effort. You work with constant back and forth reviews and suggestions. The more you participate, the more you learn. Probably for this reason, I like joining different channels and stalking their discussions. (even if I don't understand half the technical terms they use!)

This was a beginner sharing his experience for other beginners. Hoping this post cleared up your doubts and you feel more confident about stepping into the world of open source software development!

Tuesday, 1 February 2022

My Painting

About Me

I’m Srirupa Datta, a third year undergraduate studying Electrical Engineering at Jadavpur University, India. This year, I have decided to take part in Season of KDE and will be working on extending the Ellipse Assistant Tool to add support for Perspective Ellipse in Krita.

My Introduction to Qt and Krita

As a painter who also likes software development, I first came across Krita when I was looking for digital painting applications on Windows. Later on, I learned about open source and decided to start contributing as a way to build my development skills while working on something that I myself use. I spent the last few months of 2020 building Krita, first in Windows (a nightmare :P), then in Linux, and started learning Qt since I was already familiar with some basic C++ from school.

Since then, I have fixed some minor bugs in my free time, including Warn when exporting layers with multiple transparency masks into .psd and Convert Colorize Mask to Paint Layer before splitting layers. After becoming somewhat familiar with Krita’s huge codebase, I started looking for something more challenging to implement and came across this Feature request: Circle in a Square Assistant Tool .

Once I learnt about Season of KDE, I decided to apply for it and cooked up a proposal to implement this feature request and Halla was kind enough to agree to mentor me!

Project Details

Overview

This project aims to create a tool that is essentially an adjustable four corner mesh that always has an ellipse inside it which touches the sides, in order to draw ellipses in perspective with ease. The attachment below, provided by Hector demonstrates how the tool is supposed to work:

circle in square tool

Benefit

Developing this tool would make it easier to draw ellipses in perspective. Currently, to draw a circle in a square with the ellipse tool, one needs to draw the diagonals of the square and correctly align the axis of the ellipse to the square, which is rather complicated since it takes time to set a concentric ellipse with the current ellipse tool. With the circle in a square tool, one just needs to set the four corners of the square. Hector, who created this feature request is also willing to test this feature while it’s being developed!

This is probably the most specific use case I’ll ever post on this blog :-p I noticed whenever I click an address in KAddressBook, it opens it in OpenStreetMap in your web browser by default. Huh?

Edit: Recent Plasma versions now have the ability to select KDE Marble as the default maps application, and KAddressBook dropped support for setting the “Show Address” function like as pictured below. However, KDE Marble still lacks a way to properly decode addresses, making this functionality useless still. I will further update the article once I find a workaround, or I contribute something upstream.

But I learned that KDE Marble exists, a native KDE app that’s basically just FOSS Google Earth (the cool old version, I think it’s called Google Earth Pro?) Anyway, for some reason KAddressBook cannot open addresses with KDE Marble out of the box. Weird, right? So, I thought this would be a cool scripting exercise, and this is the solution I came up with:

  1. We set the “Show Address” to open an “External Application”, this is where we’ll call our python script geo.py:
KAddressBook settings
KAddressBook settings

The full command is:

marble --latlon "$(python geo.py ""%s %l %r %c"")" --distance 0 --map "earth/openstreetmap/openstreetmap.dgml"

  1. Then we have a python script, using GeoPy and Nominatim (a free service run by OpenStreetMap, perfect since it’s free, FOSS, and most importantly has reasonable rate limits for our personal use)
from geopy.geocoders import Nominatim
from geopy import Point
import sys

args = " ".join(sys.argv[1:])

geolocator = Nominatim(user_agent="kdemarble")
loc = geolocator.geocode(" ".join(sys.argv[1:]))
p = Point(loc.latitude, loc.longitude)
print(p.format(deg_char='°', min_char='\'', sec_char=''))
  1. Then, simply click an address in KAddressBook, and it’ll open up in KDE Marble!

More Details

This is actually quite interesting, as I would think KAddressBook would have this functionality out of the box, however it is more work than you might think it is. First, KAddressBook stores the address of your contacts literally, like a string - it stores the Address, Region, and Location separately (this is the %s, %l, %r variables as shown above). However, KDE Marble only accepts longitude and latitude as command line arguments.

So this is where Nominatim comes in, which as said before - is a service run by OpenStreetMap. Its API is extremely simple, which is perfect. I originally tried to only do this in Shell and CURL, but it turned out to be much easier just to use GeoPy and Python.

KDE Marble without the extra arguments
KDE Marble without the extra arguments

Then, you’ll notice if you don’t add any extra arguments to Marble, it’ll open up super far away and also in a weird default view that’s not suitable for viewing addresses. Luckily, the developers already added some nice arguments to allow us to change this default behavior:

--distance 0 --map "earth/openstreetmap/openstreetmap.dgml"

This will set the initial distance to “0 km” and also changes the map view to OpenStreetMap, perfect!

KDE Marble in it’s ideal view for streets
KDE Marble in it’s ideal view for streets

Saturday, 29 January 2022

New Year, New Job 🔗

Elvis Angelaccio elvisangelaccio 22:00 +00:00
RSS

Next week I’ll be starting a new job after 4 years since my last one. I’m very happy because I’m finally going to work with C++ and Qt; it was not easy to find this kind of job on the Italian market… I will also move from Rome to Florence which should be a nice quality of life upgrade.

My new employer is Develer. Some of you might know it because they organize the annual QtDay. They also sponsor other conferences such as the italian Pycon and they are in general friendly to open source.

In the past few months I had very little time for KDE stuff, hopefully this will change once I settle down in the next few weeks.

While working on Rust bindings for KConfig as a part of Season of KDE 2022, I came across a few problems while trying to represent QFlags in Rust: Most QFlags are defined as C++ enums in which multiple members can have the same value. This is not possible in Rust enum. It is possible to enable multiple flags using BitwiseOr. Rust enums cannot do bitwise operations. …

Friday, 28 January 2022

undocumented feature = surprise

surprise = unexpected functionality

unexpected functionality = bug

QED ;)

hook out → packing …

About me

I am Samarth Raj, a second-year engineering undergraduate at Kalinga Institute of Industrial Technology, Orissa, India. My major is Computer Science. I got to know about open source through Hacktoberfest in my first year. I started contributing to GCompris in December 2021. I added an undo-all feature to the chess activity.

Issue Merge request

Motivation for applying to Season of KDE

I feel open source is the best way to learn about new technologies and projects that people use in their day-to-day lives. I don’t have any prior knowledge about development. Although I know HTML, CSS, and Javascript. I’ve never worked on a real-life project, so when I got to know about SoK (from a friend) I thought this was a great opportunity to learn a lot about open source.

GCompris is an easy to use child learning platform which has thousands of active users and Qt/Qml provides a framework for developing applications and libraries with the QML language through which we can develop applications that are highly performant, fluidly animated, and visually appealing across all platforms (phones, desktop, tablets) through a single code base, So my interest intrigued in it and started contributing to GCompris.

SoK project – Adding a new activity in GCompris

Overview

I plan to add a new activity for left and right click training. This activity will teach the very functioning of the mouse clicks in a fun and interactive way. 

Explanation

The idea behind the implementation of this activity is to teach about left and right-click with the help of animals and the places where they live (horses live in stables). In this activity, we’ll have 2 kinds of animals and their houses. For every animal, the user needs to decide whether to click it with a left-click or right-click to send it to the house placed on the left side of the screen or to the right side of the screen, respectively. Once the user is able to correctly click on all the animals, he/she wins the game.

This is the initial layout of the activity-

Goal

To keep the activity easy to use as children are the target users for GCompris. To teach the usage of left and right-click functionality in such a way that they don’t get bored while using it and we are also teaching them about where the animals live. And this is the idea behind the GCompris, to teach multiple things at once without the users (children) realizing that they are learning these things.

What next?

There are lots of possibilities for this activity; for example, we can increase the difficulty of the activity as of now we only have two animals, but further, we can increase the number of animals (level wise) keeping the number of houses the same, so the user needs to think more about making the right choice.

Conclusion

I look forward to learning a lot from my mentors, Harsh and Emmanuel. And, to gain some confidence in Qt/Qml by end of the SoK period because sometimes (mostly always) I really struggle to implement what I’m thinking. But now I understand it’s all part of the learning process and I’m really excited to work on my first major contribution.

Thanks for taking out your time to read this. 🙂

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


Nvidia (NVDA) Quietly Prepares to Abandon $40 Billion Arm Bid - Bloomberg

Tags: tech, business, arm, nvidia

This is likely for the best.

https://www.bloomberg.com/news/articles/2022-01-25/nvidia-is-said-to-quietly-prepare-to-abandon-takeover-of-arm


How E Ink Developed Full-Color e-Paper

Tags: tech, display, e-ink

Very interesting story (even though it feels a bit like advertisements at times) about the quest to get color into e-ink displays. Goes on to explain a bit of the technology behind those.

https://spectrum.ieee.org/how-e-ink-developed-full-color-epaper


LogJ4 Security Inquiry – Response Required | daniel.haxx.se

Tags: tech, security, foss

This is… whoa… such a level of incompetency is incredible.

https://daniel.haxx.se/blog/2022/01/24/logj4-security-inquiry-response-required/


Over 90 WordPress themes, plugins backdoored in supply chain attack

Tags: tech, security, supply-chain, wordpress

Now this is a really bad supply-chain attack for the WordPress ecosystem.

https://www.bleepingcomputer.com/news/security/over-90-wordpress-themes-plugins-backdoored-in-supply-chain-attack/


Google Details Two Zero-Day Bugs Reported in Zoom Clients and MMR Servers

Tags: tech, zoom, security

Also a good reminder of why the fact that it’s proprietary makes things harder security wise.

https://thehackernews.com/2022/01/google-details-two-zero-day-bugs.html


Block Protocol - an open standard for data-driven blocks

Tags: tech, interoperability, api

That looks like an interesting way to share data between applications. Reminds a bit of the semantic web movement back in early 2000s (talking entities and aggregates), maybe less heavy on the schema side though. I’d need to look at the specification more.

https://blockprotocol.org/


Scrum Rant

Tags: tech, scrum, xp, craftsmanship

Or why I’m actually glad I’m not certified even though I could be. This is a good way to stay balanced about all this. At least I’m trying to do my part trying to help people also on the technical areas which are mostly ignored by the “Scrum Industrial Complex” (as Ron Jeffries puts it). Clearly the scrum organizations are not interested in taking up that mantle so it falls onto us.

https://ronjeffries.com/articles/-z022/01121/scrum-rant/


Pass-by-value, reference, and assignment | Pydon’t 🐍 | Mathspp

Tags: tech, programming, python

Good explanation of the Python object model and how parameters are passed to functions. This can look rather surprising or confusing if you come from another language. Always keep in mind: mutability and the fact that variable name are just labels play a big role in this. That means you might need to copy explicitly in the case of mutable objects… which makes the performance burden explicit as well (and this means you need to pick between shallow or deep copying).

PS: I really mean “label” here (like in the post), it’s a bit different from “pointer” since you don’t get the pointer geometry (you can only reassign). From the C++ perspective I’d say it behaves as if all variables were “reassignable non-const references” only, something like that.

https://mathspp.com/blog/pydonts/pass-by-value-reference-and-assignment


Don’t Wrap Instance Methods with ‘functools.lru_cache’ Decorator in Python · Redowan’s Reflections

Tags: tech, programming, python

Interesting caveat on how lru_cache is used in Python.

https://rednafi.github.io/reflections/dont-wrap-instance-methods-with-functoolslru_cache-decorator-in-python.html


systemd by example - the systemd playground

Tags: tech, linux, systemd

Nice way to learn systemd uses.

https://systemd-by-example.com/


Five Easy to Miss PostgreSQL Query Performance Bottlenecks

Tags: tech, databases, performance, postgresql

Interesting tips for potential bottlenecks in your queries.

https://pawelurbanek.com/postgresql-query-bottleneck


Improving end to end tests reliability / frantic.im

Tags: tech, tests

Good guidelines to improve end to end tests. I especially relate to the first one, the test API is very important for those, otherwise they become a chore to maintain and understand.

https://frantic.im/e2e-tests/


API development with type-safety across the entire stack

Tags: tech, services, api

A bit on the fence with this still… but that sounds like an interesting path to explore in dealing with service APIs. A DSL with a code generator allows to neatly separate concerns if done properly. I wonder where the catches are (apart from the obvious strong coupling to Golang in that particular case).

https://blog.lawrencejones.dev/goa/


Type-Driven Development - IMAP parsing

Tags: tech, type-systems, rust, imap

Interesting example of using a strong type system to avoid mistakes in code using a parsing and serialization library. The fact that it’s about IMAP and I’m still traumatized by it has nothing to do with my interest in that article, really.

https://duesee.dev/p/type-driven-development/


Static Typing Python Decorators · Redowan’s Reflections

Tags: tech, programming, python, type-systems, mypy, pyright

Type annotations become quickly complex with Python. This is in part because it’s rolled out incrementally on top or existing practices. Here it collides a bit with decorators. Nice to see this hole is getting plugged though. Also nice to discover an alternative to mypy which seems a bit more precise (at least for the time being).

https://rednafi.github.io/reflections/static-typing-python-decorators.html


Why Static Languages Suffer From Complexity

Tags: tech, programming, type-systems

Lots of food for thought in that article. Shows very well some of the trade offs in complexity languages have to deal with when they bring a strong type system to the table. Hence some limitations being in place… and that’s why it can get into nasty metaprogramming territory quickly. This show a couple of interesting examples on how this can be mitigated although we don’t have any perfect solution yet.

https://hirrolot.github.io/posts/why-static-languages-suffer-from-complexity


Stop paying tech debts, start maintaining code

Tags: tech, technical-debt, maintenance, complexity

Good reminder of why “tech debt” is not a so bright metaphor. I find it useful sometimes but clearly it became overused in the industry (often a sign of something loosing its meaning whatever it was). That’s why lately I’m talking about complexity, some of it being legitimate so you need to keep the illegitimate one at bay. I like the focus on maintenance in that post. Also there are a couple of good ideas on how to schedule the maintenance tasks in your project.

https://blog.testdouble.com/posts/2022-01-20-stop-paying-debts-start-maintaining-code/



Bye for now!

Wednesday, 26 January 2022

I am Ayush Singh, a second-year student of the Indian Institute of Technology, Dhanbad, India. My application has been accepted in the Season of KDE 2022. I will be working on writing a Rust wrapper for KConfig KDE Framework. This post describes my journey with KDE and why I submitted this Project for the Season of KDE. …