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
Embedding paragraphs from my blog with E5-large-v2
Xeophon [suggested](https://twitter.com/TheXeophon/status/1700203810545680542) that [E5-large-v2](https://huggingface.co/intfloat/e5-large-v2) as a...
2363 words
|
12 minutes
Using ChatGPT to write AppleScript
I found a killer application for ChatGPT today: writing AppleScript!
553 words
|
3 minutes
WebAuthn browser support
I [started exploring](https://twitter.com/simonw/status/1476249939516616704) **[WebAuthn](https://webauthn.guide/)** today - a set of browser stand...
195 words
|
1 minute
A simple Python wrapper for the ChatGPT API
OpenAI [released an API for ChatGPT](https://openai.com/blog/introducing-chatgpt-and-whisper-apis) yesterday. It's 1/10th of the price of the `text...
455 words
|
2 minutes
A Discord bot to expand issue links to a private GitHub repository
I have a private Discord channel and a private GitHub repository.
862 words
|
4 minutes
Building and deploying a custom site using GitHub Actions and GitHub Pages
I figured out a minimal pattern for building a completely custom website using GitHub Actions and deploying the result to GitHub Pages.
289 words
|
1 minute
Using a Tailscale exit node with GitHub Actions
For an (ethical) [scraping project](https://github.com/simonw/scrape-doge-gov) I found that my low-volume scraper was working from my laptop but wa...
923 words
|
5 minutes
Running Varnish on Fly
The goal: run [Varnish](https://varnish-cache.org/) in a [Fly](https://fly.io/) container as a caching proxy in front of another Fly application.
390 words
|
2 minutes
Adding a robots.txt using Cloudflare workers
I got an unexpected traffic spike to https://russian-ira-facebook-ads.datasettes.com/ - which runs on Cloud Run - and decided to use `robots.txt` t...
261 words
|
1 minute
Understanding DNS - The Internet's Phone Book
A comprehensive guide to the Domain Name System (DNS), including its purpose, how it works, and a visual representation of the DNS resolution process.
506 words
|
3 minutes
Mastering Kubernetes Storage - PersistentVolumes, PersistentVolumeClaims, and StorageClasses
A comprehensive guide to Kubernetes storage concepts, including PersistentVolumes, PersistentVolumeClaims, and StorageClasses, with practical examples demonstrating their implementation and usage.
580 words
|
3 minutes