Blog - page 2
Top 10 Categories
Top 10 Tags
Routing Android Device Through a Laptop Using Bluetooth PAN and Tailscale
A Practical Walkthrough of a Surprisingly Hard Problem
For a task that sounded trivial at first, this experiment turned into a surprisingly deep dive into Android networking limitations, routing constraints, VPN behavior, and how Bluetooth Personal Area Networking (PAN) actually works under the hood.
My goal sounded simple:
Connect an Android phone to my Linux laptop over Bluetooth PAN and route ALL traffic from the phone to the Internet through the laptop — without Wi-Fi, without mobile data, without USB tethering, and without root.
Easy peasy.
Adding Backpressure to Python’s ProcessPoolExecutor
Recently I’ve hit a practical limitation with Python’s ProcessPoolExecutor:
when feeding it tens of thousands of tasks from hundreds of producer threads,
the executor happily accepted them all. The result? Memory usage ballooned,
latency increased, and eventually the whole system became unstable.
Bringing Class-Based Views to Fastify (Inspired by Django)
Why doesn’t Node.js have something like Django’s Class-Based Views (CBVs)?
I love Django key features like its class-based views or ORM, and I usually miss them when working with Node.js. So yesterday night, in the middle of my usual insomnia, I wondered if anyone had already built something like that for Node.js.
I did a quick search, and what I found were just a few experiments from ~8–9 years ago. Nothing robust, modern, or maintained.
Django Class-Based Views (CBVs) provide a clear structure, lots of built-in functionality, and still enough flexibility to adapt them to different use cases. So I decided to sketch out a design for Fastify (and Node.js in general) that feels natural to use, contract-first, and TypeScript-friendly. This post is a walk-through of that exploration during the rest of the Sunday.
How to build WebRTC for Android in Ubuntu 25.04
Google used to provide
prebuild Android images of
libWebRTC library, and in fact, it’s (still) the recomended way to use them on
its own documentation.
But starting on WebRTC M80 release (January 2020), they decided to
deprecate the binary mobile libraries,
and the reasons were that the builds were intended just only for development
purposes, and
users were already building it themselves with their own customizations, or using third party libraries that embedded them
(where have been left developers that just want to build a WebRTC enabled mobile
app?), and they just only provided another build in August 2020 (1.0.32006) to
fill some important security holes, in case someone (everybody?) was still using
the binary mobile libraries.
Designing “Almost-Autonomous” Reminders in ChatGPT (No Third-Party Bots)
How we went from a one-off ping to a nightly, varied, almost-autonomous reminder flow inside ChatGPT, and the three agent patterns you can use to build it — complete with runnable code.
Minimal and secure Python distroless Docker images with Poetry
For a recent project, I needed to create a Docker image for a Python application that is being handled with Poetry. I already done it one year ago using distroless images, that provide minimal Docker images based on Debian without package managers, shells or any other tools commonly found in traditional images, and optimized for security and size. But after the release of Debian 12 and Poetry 2.0, and so much improvements on the ecosystem during this year, this time I wanted to take the opportunity to create a more secure and minimal image, and to know what would be the best practices for doing so.
How to install Python 2.7 on Ubuntu 24.04 (24.10)
Recently I needed to work on the upgrade and migration of a project that was using Mediasoup… version 1.2.8, published 8 years ago and totally outdated up to the point that the documentation for that version was removed from the Mediasoup website:
mediasoup v1 is no longer documented. Sorry. Anyway it’s no longer maintained so please move to the latest version.
Optimizing Git Branch Naming & Syncing with Upstream Repositories
When working with multiple remote repositories, especially when syncing changes from upstream (such as in a forked repository), it’s important to have a well-structured system for organizing and tracking branches. This ensures clarity, ease of maintenance, and the ability to manage branches effectively. In this post, we’ll walk through the decision-making process for setting up a clear naming convention and syncing branches between your repository and an upstream one.
How to use a different SSH credential for a specific git repository
If you have multiple SSH keys and want to use a specific one for a particular Git repository, you can do so by configuring it on the SSH config file:
How to install npm packages stored at GitHub Packages Registry as dependencies in a GitHub Actions workflow
When working on npm projects with multiple subprojects as dependencies,
there’s a problem when you need to do frequent updates. Ideally, that
dependencies should have their own tests and versioning, but that’s not always
possible (for example, private packages) and sometimes we would need to publish
multiple development versions while trying to debug some obscure issues. This is
tedious and nasty, so that’s why so much people like monorepos.