A feature that sounded obviously good When I introduced Book Corners , I explained that much of its initial data came from OpenStreetMap . OSM gave the project a useful starting point, with thousands of public bookcases already mapped around the world. Book Corners also accepts new libraries directly from its users. People can submit a location and a photo, and the contribution becomes public…
Introduction I spend a good amount of time in meetings, and over time I started using different tools around them. MacParakeet is great for local meeting transcription, Fellow is useful for meeting recaps and action items, and Obsidian is where I keep my own notes and long-term knowledge base. The problem was not generating meeting notes. The problem was keeping them in the right place. I often…
Introduction mcp-wire is a small Go CLI that installs and configures MCP (Model Context Protocol) servers across multiple AI coding tools — Claude Code, Codex, and OpenCode — from a single interface. If you’re new to the project, the original release post covers the motivation and the basics. Version 0.3.0 is a usability-focused release. It makes the tool easier to understand, safer to use,…
Introduction logbasset , my open source CLI for querying Scalyr logs, was already built to be friendly to AI coding agents. It ships a context command that prints an agent-facing reference — every command, flag, output format, time syntax, and even a list of flags that look plausible but don’t exist — plus a schema command that emits the same information as machine-readable JSON. So when I…
What is mb-cli? mb-cli is a read-only command-line interface for the Metabase API, written in Go. It lets you explore databases, inspect schemas and run ad-hoc queries straight from the terminal, without opening the Metabase UI. It was designed with AI coding agents in mind, so tools like Claude Code can investigate data on their own, and it redacts PII (emails, names, phone numbers) from results…
Introduction logbasset is an open source command-line tool, written in Go, for accessing and analyzing Scalyr logs. It’s a from-scratch rewrite of Scalyr’s original Python client, focused on the read-only operations you actually reach for day to day: query , power-query , numeric-query , facet-query , timeseries-query , and a live tail . Being a single Go binary, it’s trivial to…
Introduction If you’ve ever walked around a neighbourhood and stumbled upon a small wooden box full of books, you know the feeling: a mix of curiosity and warmth. These little free libraries are scattered across cities and towns everywhere, yet there was no easy way to find them or share new ones you discover. I’ve always been a book lover, and after spotting a few of these gems near…
Introduction If you’ve been using AI coding agents like Claude Code, OpenCode, or Codex, you’ve probably noticed that each one has its own way of configuring MCP (Model Context Protocol) servers. Claude Code uses JSON, OpenCode uses JSONC, Codex uses TOML, and they all store things in different locations. Adding a new MCP service means manually editing the right config file for each…
Introduction If you work with Claude Code regularly, you know how useful it can be to have multiple instances running on different machines. But what happens when you’re away from your desk and need to check on a long-running task or provide input to your agent? VibeTunnel solves this problem by exposing your Claude Code terminal sessions through a web interface, allowing you to control them…
Introduction When I use coding agents, I often need to retrieve details from a Sentry issue to provide context for diagnosing the root cause. I’ve been using the Sentry MCP for this, but I wanted to switch to a simpler command-line tool. I assumed sentry-cli would fit the bill, until I realized it’s designed for a different purpose (per their docs): 1 2 It’s primarily used for managing debug…
Introduction A few days ago, Anthropic released an update for Claude Code that adds an interesting feature : a new command named /statusline , which will create a script to fetch and show useful information in the app’s status bar and automatically add the configuration for it. You can either let Claude generate the script for you, or provide your own. Installation To install my script, you need…
Introduction At work, we use Scalyr to access our logs. They provide a web interface and a client written in Python, but it hasn’t been updated in the last couple of years, and I’m not sure if it’s abandoned. As CLI coding agents become more popular, it’s important to have reliable CLI tools for accessing various services. Log Basset is a CLI tool for accessing Scalyr logs,…
Introduction In the past few days Claude Code had some reliability issues and was sometimes unavailable. I started looking for alternative solutions (for context: through my job, I already have paid subscriptions to GitHub Copilot and ChatGPT ) but I wanted something that would better fit my workflow. While I initially used Copilot in VSCode , in the last month I’ve mostly been using VSCode for…
Introduction Working with multiple branches in Python projects can be challenging, especially when you need to switch between different features, bug fixes, or versions while maintaining separate virtual environments and dependencies. git worktree provides an elegant solution to this problem by allowing you to check out multiple branches simultaneously in separate working directories, but it…
Introduction When working with Claude Code on macOS, you might find yourself waiting for long-running tasks to complete or missing important prompts for user input. The terminal-notifier utility provides an elegant solution by sending desktop notifications directly from the command line, helping you stay informed about your Claude Code sessions even when you’re focused on other tasks. Note:…
Following my previous post , today I wanted to see if I could replace my pyenv and pyenv-virtualenv usage with uv . Install uv If you haven’t done it yet, you need to first install uv using either this method or one of the methods described in the documentation : 1 2 brew update brew install uv Install Python uv can detect Python versions installed in different ways in the system or it can…
I heard about uv and Astral last year and as I previously mentioned in this blog post , I did (and still have) have some concerns about them. By the way, inspired by some work a colleague of mine is doing, I wanted to give it a chance and I checked if I could start using it without disrupting my pyenv workflow . Note: Even if you don’t want to migrate away from your favourite Python…
In the past couple of days I was having this annoying issue while trying to pull a model from Ollama : I was running the command ollama pull deepseek-r1:8b , it was downloading something like 4-5% of the model and then the connection was reset , the client was “crashing” and it always restarted from 0% . It looks like I wasn’t alone: https://github.com/ollama/ollama/issues/8406…
I found out about Micro.blog platform thanks to Jeff Triplett a few months ago and I even decided to give it a try, but to be honest, having already a main blog, made with Hugo , which is hosted for free on GitHub Pages , I couldn’t really justify spending another $5/month for a micro blogging platform. Micro.one Then Manton Reece (the creator of Micro.blog) announced (actually he…
After having thought about this for a while, I finally decided to start sponsoring some of the open source projects I regularly use. I set aside a monthly budget and I evenly divided the amount across the projects. Who am I sponsoring? So far I’ve started sponsoring these projects / people (in no particular order): iTerm2 - a terminal for MacOS I’ve been using for years Sebastián…
Inspired by this post from Nicola Iarocci , I decided to check my own bash zsh history: 1082 git 99 cd 95 nox 38 pip 37 ls 33 pytest 29 brew 26 code 19 curl 16 pyenv Even for me, my biggest usage of the terminal is because of git 😅 You can produce your own list by using this command: history | awk '{print $2}' | sort | uniq --count | sort --numeric-sort --reverse | head -10
I’ve always wanted a dog (actually… my family had one ~30 years ago, but since I wasn’t directly involved with him, I never felt him as my own). Life (and sometimes laziness) had not allowed me to own one in the past (living abroad, moving back to Italy but living in a small apartment etc…) so when I finally had the chance, I got him! His name is Fulvio and he’s a…
I recently found out (thanks to this article from Juha-Matti Santala ) that not only you can power a RaspberryPi device through the USB-C of an iPad but that you can also get an ethernet connection through it Requirements an USB-C iPad (I used an iPad Air 4th gen) a USB-C cable (I used the one that comes with the iPad) a RaspberryPi (you need at least a RPI 4. I used a RPi 5) you already have SSH…
This is my user manual . If we are working together (or planning to), please read it carefully. You will learn how to deal with me productively and avoid misunderstandings. I initially wrote this for my current colleagues, but I thought it could be a good idea to make it public for everyone else I daily interact with. My style I need to understand why I’m doing something I love working as a…
If you work in software development, chances are high that your company is using open source software to build their products . Nowadays open source software is nearly everywhere: it can be included in your operating system, in commercial software or it can be responsible for hosting your website or your application. In this post I will focus mainly on languages, libraries and frameworks which are…
If you are using Tailscale in some of your devices, you also need to use Tailscale own DNS server to resolve the names of the devices in the network. If you are also a user of ControlD DNS, and you want to use it with Tailscale, you can finally do it! Configure a new Endpoint on ControlD First of all, you need to create a new endpoint on ControlD. You can do it by logging in to your ControlD…
If you have ever used a flight tracking app like Flightradar24 or FlightAware you might have wondered how they get the data about the airplanes in real time. All these services use an existing network of ADS-B receivers to collect data about the airplanes in the sky. What is ADS-B? ADS-B stands for Automatic Dependent Surveillance-Broadcast and it’s a technology that allows aircraft to…
I recently started using Umami (a privacy first , GDPR compliant solution) for this website analytics but I immediately found out that their free plan was not enough for my needs (10k page views per month). Since it’s completely open source , you can self host it anywhere you want. I was initially evaluating between buying a Raspberry Pi or renting a VPS , but I eventually found a third…
Recently I was planning to self host a service I’m using and I was immediately stuck on a decision: should I just buy a Raspberry Pi 5 or rent a VPS? Requirements Let’s starts from the basic question: what specs do I need to run this service? Reading around, it seems that something with 4GB of RAM and 20-30 GB of disk could be enough for my needs. Good. Costs A Raspberry Pi 5 would…
This morning I randomly found this post from Miguel Grinberg : It’s Time For A Change: datetime.utcnow() Is Now Deprecated . The main point is that Python utcnow() method is not timezone aware , and Python 3.12 is deprecating it . Therefore, you should start migrating your code to use now() instead. Current state until Python 3.11 Until Python 3.11, the utcnow() method returns a datetime…