Recent Posts (all)

Benchmarking AI models at Scale

Concurrent: Free LLM benchmarking tool

I just stumbled upon this (free) app, called Concurrent, that lets you benchmark different LLMs across speed, cost, and quality.

The app is built by Al Castle, VP of Engineering & Security @ Nerdy and works by sending your prompt to multiple AI models simultaneously, showing you side-by-side comparisons of quality, cost, and speed.

I especially like the feature to measure and compare the quality of AI responses

Posted on 11 Dec 2025

No Arial

Typography in ten minutes

What a marvelously succinct article about typography with a punchy take-home message!

“And never choose times new roman or arial, as those fonts are favored only by the apathetic and sloppy.”

https://practicaltypography.com/typography-in-ten-minutes.html

Posted on 10 Dec 2025

Hey Claude, delete my home folder

Claude CLI deleted my entire home directory! Wiped my whole mac.

Use agents, they said. You will save time, they said.

Tools like Anthropic Claude CLI, OpenAI Codex, Gemini CLI, etc. can be super useful but, by default, they don’t execute commands before asking for permission each time.

As a result, multi-steps tasks can become tedious to validate each time. You need to keep constant attention to it, track what it does, approving all changes and actions.

However, there’s a way around it, the --dangerously-skip-permissions flag. Using that flag, the agent starts doing things in the background and you can go on with your life and check back once it’s done. But agents hallucinate, and, sometimes, they do so big time. Like what happened with LovesWorkin (username checks out) on Reddit: Claude run a rm -rf tests/ patches/ plan/ ~/ command, wiping their whole home folder 😱

The comments, as always, are a joy to read.

A screenshot of the terminal showing the tasks Claude was executing
Posted on 09 Dec 2025

Forced Update to iOS 26

David Smith, colloquially known as _, has compared iOS 18 with iOS 26 adoption.

Today, he tooted that someone at Apple has hit a switch to update everyone.

Anecdotally, I saw this forced update pattern with my wife’s phone (a 14 Pro). She got it replaced by Apple (through Apple Care) and to restore her iOS 18 backup into the replacement 14 Pro, she had to update to iOS 26.

I don’t know how many phones get replaced each month, but this pattern contributes to the uptick in adoption David is seeing, as we were not planning to update to iOS 26 anytime soon!

The iOS 26 adoption as measured by David Smith, or Widgetsmith fame
Posted on 08 Dec 2025

Most Popular LinkedIn Post

I just written what has been, to date, my most popular LinkedIn post.

I did not expect it when writing it–it is such a niche topic–but apparently it struck a chord.

A screenshot of the LinkedIn post that got tens of thousands of views
Posted on 10 Nov 2025

Ban Emails

I get plenty of annoying spam emails from so-called legitimate business. My favorite way to get rid of them is this little Powershell script that I invoke from Launchbar after I copied the email address I want to ban!

param(
[string]$email
)
$domain = $email.Split("@")[1]
Connect-ExchangeOnline -UserPrincipalName my@email.com
New-InboxRule -Name "From $domain" -DeleteMessage $True -FromAddressContainsWords $domain

For this to work, you need to replace my@email.com with your actual email and it only support Exchange/Microsoft365 tenants.

From Launchbar, I launch it through a script (there’s probably a better way, I’m sure)

#!/bin/sh

/usr/local/bin/pwsh -File ~/.dotfiles/bin/ban_email.ps1 -email $(pbpaste)
Posted on 02 Sep 2025

Flash the Firmware of the Preonic from Keyboardio

I recently bought the Preonic keyboard, as my two Model 01 were not really portable.

The Preonic is a superb keyboard that is highly customizable and connects either by wire or bluetooth. I couldn’t pass the opportunity.

Since it’s customizable, one of the first things I wanted to do was change the layout a bit. The suggested way is to use Chrysalis but it requires Chrome-based browsers, which I don’t use. So, I resorted to the terminal.

As there were no step-by-step instructions, this post documents how I’ve done it.

Getting started

The first step is to clone the repository and set things up. From your terminal, type:

git clone https://github.com/keyboardio/Kaleidoscope
cd Kaleidoscope
export KALEIDOSCOPE_DIR=${HOME}/git/Kaleidoscope  # or, if you use fish, use set -x KALEIDOSCOPE_DIR ${HOME}/git/Kaleidoscope
make setup # this is done the first time

Customizing the layout

If everything goes well, we should be ready to customize our layout. To do so

# for some reason, it's not where their other firmwares are
cd plugins/Kaleidoscope-Hardware-Keyboardio-Preonic/examples/Devices/Keyboardio/Preonic
vim Preonic.ino # edit the layout with whatever editor you have
make compile

If everything went well (e.g., you didn’t mess up), we should be ready to flash the layout.

Flashing the layout into the Preonic

To flash the layout, we need to put the keyboard in bootloader model (these instructions minus the last step come from their website):

That’s it! You should now have a working layout. If you want to generate an SVG of the layout, you can type

python generate_layout.py

There are a couple of quirks in the python file, but it will output something that looks like

The layout as produced by a modified version of the generate_layout.py file

Well done, Jesse and Kaia!

Posted on 06 Aug 2025

Goodbye, Firewire my old friend

macOS Tahoe beta drops support for FireWire

Sad news if the trends continue until the official release of macOS Tahoe: FireWire will not be supported by newer versions of macOS.

I remember how I loved FireWire: its almost constant speed, effectively obliterating USB, at no extra CPU cost. It was just a pleasure to use.

The first one I could afford to buy was in 2010: a 1 TB WD My Book Studio with FireWire 800. I could find the invoice (snippet below!)

Product Name Quantity Price Total
WD My Book Studio 1TB (1000GB) 16MB 7200rpm eSATA USB2.0 Firewire800 IEEE1394a/b 1 €71.43 €71.43
Kingston DataTraveler Generation 2 16GB Red 1 €26.08 €26.08
Shipping/Pickup Costs: €5.84
Subtotal: €103.35
VAT: €19.64
Total: €122.99
Posted on 22 Jun 2025

AWS GenAI in Health Care Impressions

Yesterday, I attended the AWS GenAI for Healthcare Summit in Lisbon, hosted by the Champalimaud Foundation

Here’s my impressions for the day.

Where is the Medical Sector using (Gen)AI

A non-exhaustive list:

  1. Clinical Decision Support

  2. AI Buddy in Diagnostics

  3. Enhancing Imaging

    For example, using AI to adjust X-ray imaging when there’s missing data, low resolution, cropping, or low contrast.

  4. Data Storage Management

    Some institutions have kept all their digital X-ray images. Since storage is so costly they started leveraging AI to discard 70% of their data and reconstruct when needed from the remaining 30% without information loss.

  5. Reducing Invasive Examinations

    Research suggests up to 5% of all cancers may be linked to exposure from CT scans. To avoid it, less precise scans can be used, making diagnosis harder. TheraPanacea trained a variational autoencoder on 250,000 CT scans to generate high-quality images from lower-quality scans. The demo results were impressive!

I found it fascinating that 3–5 are “human-out-of-the-loop” applications—offering scalable, software-like gains!

The most moving example, however, was a highly “human-in-the-loop,” non-scalable solution. In Africa, there’s a shortage of radiologists and widespread tuberculosis. To help, a new portable X-ray box with built-in AI models is being used. It’s transported village-to-village by motorbike. Everyone in the village can be scanned, and if the AI flags someone’s scan, they’re referred to a hospital for specialized care. The motorcyclist doesn’t need medical training—the X-ray box and AI do the work!

Challenges

Customized/fine-tuned foundational models for the medical subdomain is a must. That is, not only should models be specialized in health care: they should be specialized in the discipline within health care where they will be deployed. Why?

  1. Medical accuracy (goes without saying)
  2. Clinical relevance
  3. Direct access and quoting medical sources and evidence
  4. Healthcare context understanding (steering the model towards prioritizing clinical info—which is something the models should be able to do already, but I suspect that there’s a lot of improvised medical advice on the internet that a non-specialized model won’t be steered enough by prompting alone)
  5. A didactic approach in the replies geared towards what health professionals are used to. I cannot validate this, but I’ve heard that general models tends to be terser in their replies by default. I don’t know by which measure prompting can address it!

All these items contribute to trust, one of the big challenges in deploying AI in the medical sector. And with trust, adoption follows, and, from adoption, impact.

Which brings me to the observation that if AI doesn’t become operational, there’s no value. You could tell that health care professionals are not looking for the n-th pilot of PoC. They’re looking for stuff that makes their job easier, improve patients’ lives, and doesn’t require an Einstein to operate.

Closing thoughts

To close: everybody was screaming agents but there were no agentic demos.

Maybe next year?

Posted on 19 Jun 2025

Customizing the Binepad BNK9 firmware

Last year, I blogged about the Binepad BNK8, a macropad by Binepad. This week, I received the larger brother, the Binepad BNK9. It sports 9 buttons and a larger knob1.

Since the firmware is customizable, I started exploring it through VIA. I could create new layers, control the light effects, etc. But, once I started adding layers, I had a dilemma:

  1. Either keep a key pressed to activate a layer. That, however, required some finger gymnastic, especially if I wanted to use the knob while keeping a key pressed. Or
  2. Be left wondering in which layer I was as there is no visual clue.

I then started looking around and soon it turned out I had to write a qmk firmware by hand.

The getting started guide is straightforward. On macOS, just fire up a terminal and type:

brew install qmk/qmk/qmk
qmk setup  # take note of where the qmk_firware is cloned. It will be your $QMK_FIRMWARE_HOME
qmk compile -kb binepad/bnk9 -km default
qmk config user.keyboard=binepad/bnk9

Afterwards, I created a copy of the keymap into $QMK_FIRMWARE_HOME/keyboards/binepad/bnk9/keymaps/gglanzani, where $QMK_FIRMWARE_HOME is whatever folder qmk_firmware was cloned into.

After some trials and errors, I ended up with a keymap.c, config.h, and rules.mk that work the way I want. I’ve uploaded them to Github and you’re free to use them.

To compile the custom firmware type in a terminal:

cd $QMK_FIRMWARE_HOME
qmk compile -kb binepad/bnk9 -km gglanzani  # use your own if you don't use my repo!

This will create a binepad_bnk9_gglanzani.uf2 file in your $QMK_FIRMWARE_HOME folder.

But how do you get it on your macropad? To do so, disconnect the USB cable, press the knob, and then connect the cable. That will mount an RPI-RP2 volume on your computer. One you copy the uf2 file into it, the volume will unmount and your macropad will be ready to use!

If you look into my repository, there should be enough comments to understand what’s going on an adapt it to your needs!


  1. For those curious about the quality: the product finish of the knob and the buttons is nice, while the USB-C port feels finnicky at times ↩︎

Posted on 22 Feb 2025
1/12