From the blog
All posts
Every post on the blog, newest first.
Linux / Tech
OpenAI sells a $230 keypad to run AI agents. I built one for $28 on Linux.
OpenAI’s first hardware is a $230 keypad for driving AI coding agents. I rebuilt the part that matters — voice dictation and one-press agent commands — for $28, on Linux, with...
Programming / Tech
Walking Pad, Controlled by Code: BLE, FTMS, and a Phone Button That Tracks Every Step
I have a Mobvoi Home walking pad under my standing desk. BLE, FTMS, Python, and a Home Assistant button: one tap to start, one to stop, every session logged.
AI / Programming
iPhone Screenshots on Linux, on a Stream Deck Button
How I screenshot my iPhone straight to the Linux clipboard with one Stream Deck button — iOS 17+ needs pymobiledevice3 and a root tunnel, not the classic idevicescreenshot. No...
AI / Programming
Give Your Screenshots a Sound — a Stream Deck Button That Dings When the Image Is on the Clipboard
A Stream Deck button that plays a ding the instant a phone screenshot lands in the clipboard — no more counting to three. Plus a foldable multi-display gotcha (and the fix),...
AI / Programming
1,000 Stars: My Material Design 3 Skill Hit a Milestone I’d Never Reached
My Material Design 3 skill for AI coding agents just passed 1,000 stars on GitHub — my first repo ever to do so. The story, what it does (30+ MD3 components, Compose-first,...
AI / Programming
How I Let My AI Coding Agent Run sudo on My Linux Box Without Pasting Into a Terminal
Letting an AI coding agent run root commands on Linux without pasting sudo into a terminal — a tiny reusable asroot helper built on pkexec and polkit's graphical password dialog.
AI / Programming
How I Gave the Claude App Access to My Self-Hosted Second Brain
I gave the Claude phone app access to my self-hosted memory — a remote MCP server over Tailscale Funnel, OAuth and Qdrant, running on a solar-powered PC at home.
Linux / Tech
Google Drive on Linux: A Fast rclone Mount (and Why Your Thumbnails Are Missing)
How I finally got Google Drive working as a fast, normal folder on Linux with rclone — and fixed the non-obvious problem of missing image thumbnails on FUSE mounts.
AI / Programming
How to Build, Theme, and Audit Material Design 3 UIs with AI Agents
A practical guide to material-3-skill — components, theme generation, the 10-category MD3 audit, and the real Compose bugs it catches in production code.
AI / Programming
Your AI Coding Rules Should Not Live in Cursor Rules
I stopped treating editor-specific AI rule files as the source of truth and moved my Rails and Flutter standards into plain Markdown that Cursor, Claude, Codex, Copilot, and...
AI / Programming
A 10 GB Memory Leak Killed My Bluetooth Trackpad: bluetoothd –experimental on Ubuntu
How a runaway bluetoothd process — silently leaking memory for three days under the --experimental flag — quietly killed my Apple Magic Trackpad on Ubuntu 25.10, what the...
AI / Programming
How I Run My Daily Standup on a Local LLM: Git, Gemma 4, llama.cpp and Telegram
A real-world pipeline that scans my Git repos every morning, formats the day's commits with a local Gemma 4 E4B on llama.cpp, and posts the summary to Telegram — no cloud, no...
AI / Programming
Claude Code Persistent Memory: How I Wired Mempalace Into My Telegram Bot
Claude Code forgets everything between sessions. Here's how I added persistent memory across conversations with Mempalace, wired into a Telegram bot.
Linux
Apple Magic Trackpad on Linux: How I Made It Work on Ubuntu XFCE
Get the Apple Magic Trackpad working on Linux: a guide for Ubuntu XFCE with BlueZ fixes, libinput tuning, autostart, battery indicator, and troubleshooting.
Linux
When Ubuntu Updates Break NVIDIA… Again
Every now and then I update Ubuntu, sip my coffee, install all-the-things… and everything looks fine. Until I suspend. Because of course the moment the PC suspends, NVIDIA...
Linux
How to Add “Convert to GIF” to Thunar on Linux (XFCE)
Add a right-click Convert to GIF action to the Thunar file manager on Linux XFCE using FFmpeg and a shell script — turn any video into a GIF in two clicks.
Programming
Run GitHub Actions on Your Own Machine (No Cloud Required… Kinda)
$EXISTING
Linux / Tech
Bringing DHH’s Omakub to WSL2?
Setting up a developer environment on WSL2 with Alacritty, Zellij, Cargo and the Tokyo Night theme inspired by DHH's Omakub.
Programming / Rails
Using Ngrok with Rails
When working with Rails, I like to test my web apps with my desktop browser and my mobile browser. I like using my mobile browser, especially to test the PWA setup. To be able...
Rails
Get started with Ruby on Rails on WSL2 Ubuntu
Complete guide to installing Ruby on Rails on WSL2 Ubuntu 24.04 using rbenv, including Tailwind CSS setup.
Life / Programming
New year, old and new challenges
2023 ended with me falling in love with Rails again after 15 years. I have always been a huge fan of 37signals. I like their products in a weird way: I have always wanted...
Life
The Power of Flexibility: More Than Just a Mindset
In the ever-changing landscape of life and work, adaptability isn’t just a buzzword—it’s a survival skill. As a seasoned software engineer and a human being who’s navigated the...
Android
You won’t believe how much time you will save with this Git pre-push hook
Introduction A significant part of being a successful software developer is refining our workflows to optimize productivity. One method I’ve found incredibly useful is...
Programming
DigitalOcean Droplets killing your npm install? You need more swap!
When your DigitalOcean Droplet runs out of memory during npm install or builds, add swap. Quick commands to grow from 500MB to 1GB and tune swappiness.
IDE / Programming
Run a IntelliJ/Android Studio configuration with a shortcut
If you are like me, you have a few “Run configurations” when you develop an app: Run the app Run the tests Run the static analysis Run the UI tests You can generally only run...
Android
Show layout bounds from command line
Two adb shell aliases to toggle Android's Show layout bounds debug overlay from the terminal — faster than digging through Developer options every time.
IDE / Programming
Rainbow Brackets for IntelliJ IDEA & Android Studio
Rainbow Brackets is the IntelliJ IDEA / Android Studio plugin I use to color-match every parenthesis, brace, and bracket — install, configure, and customize.
Android / Kotlin
Diventa un Android Dev
Dal 1 febbraio 2021, in collaborazione con CGM Consulting, partirà il mio corso di programmazione Android destinato a tutti coloro che si stanno avvicinando al mondo della...
Kotlin / Programming
Sealed Classes in Kotlin: How to handle the missing .copy() method (2026 Update)
Sealed classes in Kotlin don't have a .copy() method like data classes do. Here's how to update them anyway using Arrow Optics Prisms for clean immutability.
IDE / Programming
IntelliJ IDEA / Android Studio Tricks: “Save Actions” plugin
The Save Actions plugin for IntelliJ IDEA / Android Studio runs code-quality fixes (formatting, imports, optimizations) every time you save a file.
Kotlin / Programming
How to fix the pain of modifying Kotlin nested data classes
Using Arrow Lenses to simplify deeply nested data class updates in Kotlin, replacing verbose chained .copy() calls.
Android / IDE
IntelliJ IDEA / Android Studio Tricks: Surround With
IntelliJ IDEA's Surround With wraps selected code in try/catch, if/else, or Kotlin-specific snippets — Mac (⌥⌘T) and Windows (Ctrl+Alt+T) shortcuts.
Life
On intermittent fasting
Lately I’m having a lot of chats about intermittent fasting and I think it’s a good time to write down my whole experience. As I kid I was slim, super slim, a tiny skinny kid....
Life / Tech
How to Turn Off Camera and Mic by Default in Google Meet (2026)
Start every Google Meet with camera off and mic muted — no plugins needed. Step-by-step guide updated for 2026 with the latest Google Meet settings.
IDE / Kotlin
My IntelliJ Plugin Collection – Kotlin Fill class
Kotlin Fill Class is an IntelliJ / Android Studio plugin that auto-fills data class constructor arguments — stop typing the same parameters by hand.
Life / Tech
How to Open Bookmarks in a New Tab in Chrome
How to open bookmarks in a new tab in Chrome: a one-click bookmarklet trick, the Ctrl/Cmd-click shortcut, and middle-click — so links stop hijacking your current tab.
Life / Programming
Go to first unread message on Telegram Web
How to jump to the first unread message in Telegram Web with a keyboard shortcut — like Slack's Cmd+K but for Telegram. A quick tip for desktop users.
Android / Programming
ADB Pro: Install and run an Android app on every connected device (2026 Update)
adb commands to install or run an Android app on a specific connected device — or every device at once — using device IDs, serial numbers, and helper scripts.
Life / Tech
What we have now is not “remote working”, it’s “apart working”
Today I saw a tweet that resonated a lot with me I could not agree more. The whole COVID-19 lockdown created a weird situation where a lot of companies found themselves...
Programming / Tech
Uninstall and Run in one shot in Android Studio
As an Android developer, I live my life one repetitive task after another: Clean, Run Uninstall, Run Restart Clean, Restart Restart with Debugger Click here, click there. Tap...
Tech
Push-to-talk on Meet – Part 2
Let’s go physical! A couple of weeks ago, I published a post about adding Push-to-talk to Meet. I love that solution and I’m using all the time… or I was. The problem is that I...
Life / Tech
Enable Push-to-talk in Google Meet
Use the spacebar as a push-to-talk button in Google Meet — keep your mic muted by default and unmute only while speaking. Works in Chrome with no extension.
Kotlin / Programming
Can I loop over a Kotlin Sealed Class?
As an Android developer, I constantly write API clients: 90% of all mobile apps fetch some JSON, parse it and show it in a list ¯\_(ツ)_/¯ To keep a clear separation between...
Tech
Closing 2019 – Beyond Android
Since I started going around for conferences in 2015, I mostly attended Droidcons. Over time, I realized that I was building a weird sort of bubble and patterns started to...
Life
Gerber E.A.B. – Travel-friendly knife… -ish
A small review of the Gerber E.A.B. — the travel-friendly utility knife I carry instead of a full multitool. Why it works and how the safety lock opens.
Life
About attitude, personal growth and community
It’s been quite a long time since I have been writing after a conference I joined as a speaker. Today something clicked and I felt like I had to put my thoughts down while...
Life
SHIIIIIIIP IIIIIIT!!1!1!!
When I joined AsanaRebel, I picked up the project and I started to navigate through the repository, focusing especially on the build.gradle file. Sadly, I had no CI setup to...
Kotlin
Modules, modules everywhere
I have joined asanarebel.com as Senior Android developer at the beginning of February. Asana Rebel is a health and fitness app with workouts for different body and health...
Kotlin
Kotlin DSL Gradle files, multiple modules and shared variables
This doesn’t want to be a real article, but more a crash course about Kotlin DSL for Gradle. The crucial point is the possibility of migrating an existing project to the new...
Life
Being alone is not being lonely
I have started meditating in 2014, thanks to Francesca. I was coming from a very hard year: working in the sport event business is no joke when it comes to stressful...
Life
Push vs Pull: air conditioning system
By Ivan Morgillo, Sasa Sekulic and Fabrizio Chignoli This article has been excerpted from Grokking ReactiveX. After a life of imperative programming, switching to a reactive...
Tech
GDG Geneva — July event
GDG Geneva is a small GDG, but we try hard 😊 Last Monday we had our July event, and, despite the tremendous heat, spent more than one hour talking about MVP on Android. I...
Android
My week at Droidcon Zagreb and App Builders
Last week was quite intense for me. For the first time I had two conferences in two countries in 3 days. I’m definitely too old for this 😜 Droidcon Zagreb Droidcon Zagreb...
Android
Running Android Unit Tests before Git Push
A pre-push Git hook that runs your Android unit tests before pushing — catches typos and broken refactors before they hit CI. Setup script included.
Android
Android Library AAR and Javadoc
As an Android developer, I’m used to ask Android Studio/Intellij Idea for documentation constantly. I have even replaced the shortcut: now, it’s F1, the old-fashion help key....
Tech
Installing Git Cola on OSX
How to install Git Cola on macOS — the only Git GUI I've found that supports staging individual lines (not just hunks) for fine-grained commits.
Tech
Text replacement, ASCII emoji and Slack
How to use macOS Text Replacement to type ASCII emoticons (¯\_(ツ)_/¯, ಠ_ಠ, etc.) in Slack and elsewhere — set them up once, type them everywhere.
Android
ADB over WiFi
A few days ago, I built a device holder to place as many devices as possible on my desk without losing my sanity...
Life
First hardware project of 2016: device holder
“Ingredients” Old TV/VCR shelf Velcro Scissors 5 minutes /! Rocket science alert /! Flip the shelf. Place velcro on both the shelf and the back of the device. Attach the device.
Life
2015: my quantum leap
First week of 2016, lots to do, but what about 2015? I’m still working remotely and this helped a lot from a logistic point of view: I relocated in France with my fiancee....
Android
Back in Krakow for the Droidcon
After almost ten years, I was in Poland again last week. Ten years ago I was an Erasmus student; last week I was a speaker at Droidcon Krakow! The venue Every Droidcon feels...
Tech
My first Devoxx
Last Sunday my first Devoxx journey began, when I landed in the cute Antwerp. First thing in the morning: taxi to the Kinepolis Event Center. 5 minutes in the queue and I had...
Life
Could you do remote working?
When I started working a few years ago, I was a common junior programmer in a common huge open space. It was fun: lots of people hanging around, cool projects, lots to do. It...
Life
Ricetta per Pancake
Da qualche tempo sto facendo colazione con i Pancake. Sono nutrienti e non hanno ingredienti esoterici come le merendine commerciali. Ingredienti per una persona “affamata”...