Recent Posts (all)

Matthew Rocklin on using LLM-powered coding

AI Zealotry

This post is so great, I want to frame it

If you’re an engineer opposed to AI coding—or if you haven’t started yet—read it.

I feel both that I can move faster and operate in areas that were previously inaccessible to me (like frontend). Experienced developers should all be doing this. We’re good enough to avoid AI Slop, and there’s so much we can accomplish today.

I like this quote from this blog

I get it, you’re too good to vibe code. You’re a senior developer who has been doing this for 20 years and knows the system like the back of your hand.

[…]

No, you’re not too good to vibe code. In fact, you’re the only person who should be vibe coding.

Using ty with the helix editor

The folks at Astral have released ty, which they define as:

An extremely fast Python type checker and language server, written in Rust.

You can read more in the blog post announcing it.

Today, I set it up with helix. To make it work, we first have to install it. Using uv, it’s as easy as typing:

uv tool install ty@latest

Then, edit your ~/.config/helix/languages.toml and add the following:

[language-server.ty]
command = "ty"
args = ["server"]

[[language]]
name = "python"
scope = "source.python"
injection-regex = "python"
file-types = ["py","pyi","py3","pyw",".pythonstartup",".pythonrc"]
shebangs = ["python"]
roots = [".", "pyproject.toml"]
comment-token = "#"
language-servers = ["ty"]
indent = { tab-width = 4, unit = "    " }
auto-format = true

At this point, you can start using it, but there are a few handy things to know:

[tool.ty.environment]
root = ["./app"]
[tool.ty.environment]
python = "./custom-venv-location/.venv"

That’s it. Now, when editing files with hx, you should get all of ty’s goodness!

A diff-based LLM-powered grammar check

Since posting about how I use llm to check my grammar, Dr. Drang took inspiration from my setup and wrote about how he implemented a system that shows differences side-by-side, instead of highlighting them as I do. On top of that, his system includes a short rationale for the changes.

I have always liked the idea of a diff-based check, but because I write in Mailmate, helix, and the browser, I couldn’t come up with a system that worked everywhere.

That was until I remembered about Meld, a diffing app.

Before starting, it’s important to have Meld installed and available at the command line (to do so, install it via brew install meld and follow these instructions).

Once that is done (and you have llm installed—see my previous post), I use this macro that I invoke after copying the text:

The short Keyboard Maestro macro to use an LLM to check for my grammar

The script does all the heavy lifting and is self-explanatory:

#!/opt/homebrew/bin/fish

pbpaste > /tmp/original.md
pbpaste | llm -m gemini-3-flash-preview -s "
Given the following text, improve grammar and punctuations. Note that there might be markdown syntax that needs to be preserved

Output the text and add commentary only at the end, after a clear break line (use dashes)" > /tmp/corrected.md
cat /tmp/corrected.md | pbcopy
meld /tmp/original.md /tmp/corrected.md

Once invoked, Meld opens, allowing me to review the changes and copy the text back:

The Meld main window showing this post and the uncorrected version of it
The interface to see the corrections

If you write long lines of text without hard wraps, don’t forget to check the Enable text wrapping box in the preferences pane!

Meld Preferences pane

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

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
1/13