RSSAmplifier

Blog

Yotam's blog

Recent content on Yotam's blog

yotam.netRSS feed ↗27 posts

Latest posts

How Can I Learn While Using AI?

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…

Piercing the Shadow Root Using CDP

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…

My First FOSDEM

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…

Remote Reverse Tethering With Gnirehtet

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…

Dont Forget The Dot

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…

Please, Let Me Choose The Binding Address

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…

OpenBSD in an Air-Gapped System

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…

Network Management in Android: Routing

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…

Dedicated CPU instances on the cloud

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 on Fedora

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…

Easing Deployment Without Containers

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…

Kodi Setup: Sailing The High Seas

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…

Two Different Outlooks of Computers

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…

Linux Namespaces Are a Poor Man's Plan 9 Namespaces

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…

What Makes Sourcehut CI So Good

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…

Promoting Free Culture With Proprietary Software

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…

The Audacity of Piping Curl to Bash

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…

Reviewing my tweaks for Fedora

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.…

Change New Tab in Firefox

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…

Why I Give Up on Free Software Phones

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…

Building a Python Project With Meson

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.

Spawning a Subprocess With GLib and Gio

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.

Why Static Typing

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?

Python Type Hinting - Part I

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.

Compile Vala With Meson

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.

Getting Started With Vala

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

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…