Recently I had a problem with my sound in Linux. Although Linux desktop had progressed immensely in the last several years, still sometimes I find myself trying to understand what went wrong. This time, instead of diving into the system logs, I let an LLM model do it. Quickly I got the root cause and a solution which was to turn off the unnecessary Pipewire plugin. That led me to a sad…
Part of my day job is orchestrating browsers using the Chrome DevTools Protocol , also known as CDP. CDP is a powerful protocol that exposes many ways to control and inspect a running Chrome instance. People usually interact with a wrapper around CDP like Puppeteer or Playwright but sometimes to get the full power of the protocol, you need to use it directly. Sadly it seems that the protocol was…
I’ve wanted to attend FOSDEM for the last few years, and I finally made it this year for my first time. I came with two friends from my previous job and it was a blast. I’ve read beforehand whatever I could about the conference but it still took the first day to understand how to get around the conference. Talks Each of us made a list of talks we wanted to attend. Of course there were…
Recently I had some automation work again with Android but this time with a catch, it had to work with remote physical devices that are not reachable over TCP. More than that, I wanted to connect my devices to a VLAN that I assemble and dismantle on demand. I’ve done something similar to it before with Gnirehtet 1 for reverse tethering into the VLAN but this was the first time using a remote…
Recently we discovered a surprising bottleneck in our Kubernetes cluster at work. Apparently, our DNS server was overloaded and started to respond slowly. We have applied the quick solution suggested by Wolt’s excellent post but it was only a superficial solution to the bigger problem, why do we have so many DNS queries? The reason for the DNS load was for two reasons: DNS records in…
When a program is listening for new TCP connections, it needs to choose which ip address and port to listen on. While the port option is pretty easy to understand 1 , people give less thought to the address they use. Why is that? Usually programs bind to one of two addresses: 127.0.0.1 to listen on the loopback interface or 0.0.0.0 to listen on all interfaces. While those are the most common…
Recently I had the displeasure of working again within an air-gapped system. The main obstacle I usually have with these systems is that it’s very easy to mirror a complete packages repository but a lot harder to mirror only a specific set of packages and their dependencies. About a year ago I had to figure out how to do it with OpenBSD, but recently I had to do it again and completely…
I plan on diving deep into Android in future blog posts but for now I thought I might share something that was really confusing to me in hope to prevent the confusion to others. The confusion was not actually Android exclusive, I just stumpled upon it while working with Android and it was a great reminder that routing is a lot more complicated than I usually think of it. Anyway, if you have an…
The cloud is notoriously expensive compared to the comparative on-prem hardware available in the market 1 . Of course, the cloud is not only about cost, but also about ease of use and available features like managed databases and security services. Yet, sometimes all you need is a simple, powerful Linux machine. Luckily, there is a large list of options outside of the big three cloud provides that…
Compiling Frida can seem to be a bit daunting, with over two thousand lines of Makefile, and that is without even beginning to look at the shell scripts in there. This complexity is there for a reason, Frida needs to be run on over a dozen of build targets, many of which are not proper building environments. The make files you are looking at are mostly for this reason 1 . But luckily, Frida itself…
In the modern world of Docker and Podman, it seems that deployment is a solved problem. But this is only true if you give up on keeping it simple. There are of course use cases for containers, but sometimes all we need is a small Linux VM to run a few services on, why is it so hard? Recently I’ve tried with varying degrees of success to run several web services, mostly written in dynamic…
I’m not as radical as I used to be and so I do have a Netflix account 1 . There are still many shows and movies that I can’t access legally without paying up for yet another media streaming service. Of course, a mere DRM won’t prevent me from watching the latest seasonal anime or another random pop culture show. I’m sure there will be some misguided people saying how…
For a long time by now, I had a conflicting view of my ideal computer system. On the one hand, I strive for minimal, clean abstractions, without the legacy code plaguing most modern software. On the other hand, modern software gives me a huge boost in creativity and makes software more approachable than ever. This contrast between modern software that is focused on productivity and conservative…
Plan 9 is the failed 1 successor to Unix. It was developed by the same group, Bell Labs, with all of the experience they had gather in the twenty years since Unix was first written. Many features that are common today in many Unix systems, and some non Unix systems, came originally from Plan 9. For example, the /proc file system was first implemented in UNIX 8th Edition, which was the predecessor…
I’m not in any way an expert in CI systems, I’ve only used four such systems in my whole career: Jenkins, Gitlab CI, Sourcehut Builds and recently also Github Actions. I’ve been praising Sourcehut Builds to my coworkers for a long time but I always assumed that it’s not that special, just that I had a bad experience with Gitlab CI and Jenkins. That is, until I tried Github…
In the last couple of years I sadly tuned down my free software usage and evangelism. I still believe in it but I just got tired of using 100% free software and decided to take a more pragmatic route. The pragmatic route, just as the title says, it means sometimes using proprietary software. But I’m not talking about Google services or Windows, I’m talking about companies that promote…
It seems more and more common, at least in the self-hosted community, to provide two methods of installations: Docker or a shell script installer. It seems that many new projects don’t even bother with a native package manager, such as dpkg or rpm, which makes me reluctant to use them. Many talk about the security implications of piping curl into bash but it has been talked about enough and…
I have been using Fedora for a few years now and installed it countless times because it bothers me to have a messy system. I stay on Fedora because it has one of the best out of the box experience, at least for me. But still, there are some things that I need to tweak on every new installation so I have a script to do most of those things and after over four years it got pretty good in doing it.…
I’ve started ricing my workstation again and wanted to change the new tab page in Firefox. Apparently it’s harder than it should be because extensions don’t have access to an API that can do it. You might remember a setting called “New Tabs” but it only let you choose between a blank page and the default new tab page. Anyway, the solution is to edit the internal new…
For over a year I have used a Google-free smart phone, at first with just LineageOS and later with LineageOS+MicroG . It was a nice experiment but my phone was causing too much trouble and in the end I got fed up and bought a new phone (Samsung Galaxy S10e). I hope one day to have a free phone again (maybe if the Librem 5 will succeed) but currently there isn’t a real alternative that is…
I have already shown how to build a Vala program with Meson. In this post, I will show how to do the same for Python. You don’t really need to compile an interpreted language but Meson helps you to put the files in their correct installation directory.
While I was working on my first GNOME application which I hope to publish soon I stumbled upon a small hindrance of how to spawn a subprocess efficiency without blocking the main thread. I could have left it as is with the straightforward pythonic way but I wanted the user interface to be fluid.
The case of static vs dynamic typing is a long lasting debate without a clear answer. A few years ago it seems that all of the popular programming languages were dynamic: Ruby 1 , JavaScript 2 , Python 3 etc but all of the languages I have listed have some sort of static typing added to them. Why is that?
If you are using a recent version of Python (which you should because Python 2 will be EOL in less than a year) than you can use type hinting with a sane syntax instead of using docstrings to document the arguments types.
In my previous post Getting Started With Vala I showed you how to write a program in Vala and compile it using valac . Compiling with valac was okay but even with only GTK+ as our dependency the command is starting to get long. If you don’t want to specify all the compiler flags each time you can use a build system.
Vala is an object oriented programming language that was designed specifically for GTK+ and GNOME development. Vala’s syntax is similar to C# but it compile to C code using the GObject system which let you use the GNOME ecosystem easily.
My setup is a bit fluid but there are some workflows that I’ve found to work for me. I will try to focus on what works for me in the long term, a sort of living copy of my post about my Fedora tweaks . Hardware I sometimes work from the office but I have little say in the hardware there so I will focus on what I have at home. I do work most days from home so it’s the better working…