Using ChatGPT Browse to name a Python package
I needed a name for my new Python CLI tool.
1008 words
|
5 minutes
Git Identity Management and History Rewriting: Complete Guide
A comprehensive guide to managing Git identities and rewriting commit history, including changing author information, handling multiple identities, and best practices for safe history manipulation.
1259 words
|
6 minutes
Complete Guide: Installing Ansible and Java 8 on Ubuntu 20.04
A comprehensive guide for installing and configuring Ansible and Java 8 on Ubuntu 20.04, including setup for managed nodes, security best practices, and testing procedures.
1340 words
|
7 minutes
axe-core and shot-scraper for accessibility audits
I just watched a talk by [Pamela Fox](https://www.pamelafox.org/) at [North Bay Python](https://2023.northbaypython.org/) on Automated accessibilit...
476 words
|
2 minutes
Listing files uploaded to Cloud Build
Today while running `datasette publish cloudrun ...` I noticed the following:
162 words
|
1 minute
Running Python code in a Pyodide sandbox via Deno
I continue to seek a solution to the Python sandbox problem. I want to run an untrusted piece of Python code in a sandbox, with limits on memory an...
842 words
|
4 minutes
Vega-Lite bar charts in the same order as the data
I've been puzzling over this one for a couple of years now, and I finally figured out the solution.
188 words
|
1 minute
Writing tests with Copilot
I needed to write a relatively repetitive collection of tests, for a number of different possible error states.
399 words
|
2 minutes
Creating desktop backgrounds using Midjourney
I decided to create a new desktop background for my Mac using [Midjourney](https://midjourney.com/). My laptop has a 16:10 aspect ratio and a retin...
257 words
|
1 minute
Social media cards generated with shot-scraper
My [TIL website](https://til.simonwillison.net/) has social media card images to make links shared from it look slightly more interesting when shar...
933 words
|
5 minutes
Understanding Kristofer Joseph's Single File Web Component
[Via Brian LeRoux](https://twitter.com/brianleroux/status/1453472609518034944) I found [single-file-web-component.html](https://gist.github.com/kri...
384 words
|
2 minutes
Storing and serving related documents with openai-to-sqlite and embeddings
I decide to upgrade the related articles feature on my TILs site. Previously I calculated these [using full-text search](https://til.simonwillison....
1562 words
|
8 minutes
GitHub OAuth for a static site using Cloudflare Workers
My [tools.simonwillison.net](https://tools.simonwillison.net/) site is a growing collection of small HTML and JavaScript applications hosted as sta...
2012 words
|
10 minutes
Named Entity Resolution with dslim/distilbert-NER
I was exploring the original BERT model from 2018, which is mainly useful if you fine-tune a model on top of it for a specific task.
252 words
|
1 minute
Using the ChatGPT streaming API from Python
I wanted to stream the results from the ChatGPT API as they were generated, rather than waiting for the entire thing to complete before displaying ...
294 words
|
1 minute
Google Chrome --headless mode
In the README for [monolith](https://github.com/Y2Z/monolith) (a new Rust CLI tool for archiving HTML pages along with their images and assets) I s...
599 words
|
3 minutes
Trying out the facebook/musicgen-small sound generation model
Facebook's [musicgen](https://huggingface.co/facebook/musicgen-small) is a model that generates snippets of audio from a text description - it's ef...
153 words
|
1 minute
Reading thermometer temperatures over time from a video
[Natalie](https://www.instagram.com/natbat.art/) has been experimenting with using a microwave as a kiln for pottery, specifically for [Raku](https...
1147 words
|
6 minutes
Using Playwright MCP with Claude Code
Inspired [by Armin](https://simonwillison.net/2025/Jun/29/agentic-coding/), I decided to figure out how to use the official [microsoft/playwright-m...
335 words
|
2 minutes
Cloudflare redirect rules with dynamic expressions
I wanted to ensure `https://niche-museums.com/` would redirect to `https://www.niche-museums.com/` - including any path - using Cloudflare.
186 words
|
1 minute
Running a gpt-oss eval suite against LM Studio on a Mac
OpenAI's [gpt-oss models](https://github.com/openai/gpt-oss/) come with an eval suite, which is described in their [Verifying gpt-oss implementatio...
1219 words
|
6 minutes
Using GPT-3 to figure out jq recipes
I like [jq](https://stedolan.github.io/jq/), but I always have to think pretty hard about how to construct the right syntax for it.
298 words
|
1 minute
Running prompts against images, PDFs, audio and video with Google Gemini
I'm still working towards adding multi-modal support to my [LLM](https://llm.datasette.io/) tool. In the meantime, here are notes on running prompt...
1385 words
|
7 minutes