Recent Posts (all)

From Slack to Discourse

Netnewswire is moving to Discourse

We’re moving from Slack to here. This way we can use an open source app that’s part of the open web — and we can have conversations that don’t get deleted, that are findable, that people can benefit from long after the conversation actually happened.

👏🏼 I would love if more communities were to move to Discourse.

We briefly had it for the GoDataDriven Academy, but it never took off with students. I guess they were not so idealistic?

Migrate Bitbucket repositories to GitHub

Just before Christmas, I got an email from Bitbucket saying that inactive workspaces will be deleted.

Almost 20 years ago, I created a Bitbucket workspace to host my university stuff (mostly for my research thesis and various papers).

And while I have the final PDFs, I did not want all that LaTeX to go to waste, so I decided to migrate everything to GitHub (which, since 20 years ago, added private repositories to their free offering).

Creating these scripts is a use case where LLMs really shine—although I had to doctor it a bit, as the way it concocted to create repositories on GitHub didn’t work.

The final script is in this gist, and to use it you need the GitHub CLI utility gh installed (see the instructions if you don’t have it) and ready to go.

Once that is done, it’s a matter of writing the names of your repositories in a file called, f.e., repos.txt and then calling the script:

BB_WORKSPACE=your_bitbucket_workspace \
GH_OWNER=your_github_username \
./migrate-bitbucket.sh repos.txt

After a while, depending on the number of repositories, you should see

🎉 All migrations complete.

Notes:

Add tags automatically to this blog

When starting this blog, I didn’t think about adding tags. As time passed, I wondered about adding them, but back-filling them was a chore.

But with LLMs, this can be done relatively quickly and easily:

So I did just that! In a 10-minute session, Copilot created the add_tags.py script, which you can find in this gist!

There are two commits where the tags were added: one for the theme and the other for adding the actual tags to the posts.

LLMs for grammar

UPDATE: There’s a more refined version of this in a new post.

Today, Dr. Drang asked on Mastodon about my setup to leverage LLMs to check my grammar.

My setup has a couple of assumptions, just like his:

Tooling

For this post, I’m assuming you already set up llm, but if not and you have uv handy, it’s this simple:

uv tool install llm
llm keys set openai # if using OpenAI
# if using gemini
llm install llm-gemini 
llm keys set gemini
# if using Claude
llm install llm-anthropic
llm keys set anthropic

The macro

Once this is in place, the macro is pretty straightforward, and I invoke it with the text I want to check selected. I then have to wait a bit, and the script will replace the text with a corrected version, each corrected item marked in bold (I don’t use bold much in my text, so that is OK).

A screenshot of the Keyboard Maestro macro to check for grammatical mistakes
A screenshot of the Keyboard Maestro macro to check for grammatical mistakes

The core of the macro is the (fish, but it will work on other shell unmodified, probably) script (pasted here to make it easier to copy and paste):

#!/opt/homebrew/bin/fish

pbpaste | llm -m gemini-3-flash-preview -s "
Given the following text, improve grammar and punctuations. 

Once you're done, highlight the changes by using a double asterisk (bold, in Markdown). Only output the text, don't add commentary or summaries anywhere in the text" 

Since the macro highlights clearly what has been changed, I can learn a bit as well! And if the window loses focus, everything will be in the clipboard.


  1. Not all text might need to be checked, though. For example, in my mail client, most of the text I’m replying to doesn’t need a grammar check. ↩︎

LLM-powered coding mass-produces technical debt

LLM-powered coding mass-produces technical debt

The promise of AI for engineers is getting rid of engineers.

Tools like GitHub’s Copilot write code, specs, review, and create pull requests. They create and run tests, and do so in the background while the developers engage in more productive activities, such as meetings.

On Agentic AI and reusing passwords

Agentic AI, Use Cases That Drive Revenue

However, whenever a customer went beyond the rigid scripts, the chat had to be routed to a person, only to reset the password to “Welcome97” (the previous one, in fact, was “Welcome96”, so it couldn’t be reused. Security, go figure!) and wasting everybody’s time while doing so.

I still love this bit of writing from my article on Xebia’s blog about agentic use cases that drive revenue.

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

A screenshot of Concurrent
A screenshot of the metrics view

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

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

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
2/14