OpenAI's gpt-oss models come with an eval suite, which is described in their Verifying gpt-oss implementations cookbook. I figured out how to run it on my Mac against their gpt-oss-20b model hosted locally using LM Studio, using uv .| til.simonwillison.net
GitHub Codespaces provides full development environments in your browser, and is free to use with anyone with a GitHub account. Each environment has a full Linux container and a browser-based UI using VS Code.| til.simonwillison.net
My blog was showing poor performance, with some pages taking several seconds to load or even failing entirely.| Simon Willison TIL
One of our cameras takes raw photos in ORF format, which I believe stands for "Olympus Raw Format". Here's a recipe I found for converting them to JPEG on macOS:| Simon Willison TIL
Microsoft recently released Edit, a new terminal text editor written in Rust. It's pretty nice - it's reminiscent of nano but with a retro MS DOS feel.| Simon Willison TIL
I wanted to redirect https://global-power-plants.datasettes.com/ to https://datasette.io/ - I decided to spin up a Cloudflare Pages site to do the work.| Simon Willison TIL
I use pytest-httpx in a bunch of my projects. Occasionally I run into test failures like this one, which can sometimes be really hard to figure out:| Simon Willison TIL
I wrote a Python script, triggers.py, to help me understand what data is available to SQLite triggers for which operations.| Simon Willison TIL
I figured out a minimal pattern for building a completely custom website using GitHub Actions and deploying the result to GitHub Pages.| Simon Willison TIL
I've been experimenting with the HTML dialog element recently, for example in my Prompts.js JavaScript library.| Simon Willison TIL
I tried to get jupyterlab working via uv tool install today and ran into some sharp edges.| Simon Willison TIL
For an (ethical) scraping project I found that my low-volume scraper was working from my laptop but was being blocked by Cloudflare when I attempted to run it in GitHub Actions, presumably because the GitHub Actions IP range was disallowed.| Simon Willison TIL
This is a three-quarters-baked experiment that I ran this morning. I'm interested in efficiently tracking which new files have been added to an S3 bucket, where that bucket could potentially hold millions of items.| Simon Willison TIL
I figured out a really simple pattern for experimenting with new Python packages today:| Simon Willison TIL
Rhet Turnbull shared this short script for looking up the named timezone for a given location from Python on macOS using objc and the CoreLocation framework. It uses the objc package and pyobjc-framework-CoreLocation .| til.simonwillison.net
Simon Willison: TIL| til.simonwillison.net
Inspired by Armin , I decided to figure out how to use the official microsoft/playwright-mcp Playwright MCP server with Claude Code.| til.simonwillison.net
Today I wanted to figure out where the vercel CLI tool on my Mac kept its authentication tokens.| til.simonwillison.net
App Platform is the new PaaS from DigitalOcean. I figured out how to run Datasette on it.| til.simonwillison.net
Today I built a system for monitoring Reddit for new posts that link to various domains that I own.| til.simonwillison.net
I wanted to add the new tutorials on https://datasette.io/tutorials to the search index that is used by the https://datasette.io/-/beta search engine.| til.simonwillison.net
I published a reusable Django application today: django-http-debug , which lets you define mock HTTP endpoints using the Django admin - like /webhook-debug/ for example, configure what they should return and view detailed logs of every request they receive.| til.simonwillison.net
I've been working on a tool called dclient which is a CLI client tool for talking to Datasette instances.| til.simonwillison.net
I really like Playwright for writing automated tests for web applications using a headless browser. It's pretty easy to install and run, and it works well in GitHub Actions.| til.simonwillison.net
I added some unit tests to my datasette-plugin cookiecutter template today, since the latest features involved adding a hooks/post_gen_project.py script.| til.simonwillison.net
We launched the Datasette Cloud blog today. The Datasette Cloud site itself is a Django app - it uses Django and PostgreSQL to manage accounts, teams and soon billing and payments, then launches dedicated containers running Datasette for each customer.| til.simonwillison.net
Today I heard about the sqlite3-rsync command, currently available in a branch in the SQLite code repository. It provides a mechanism for efficiently creating or updating a copy of a SQLite database that is running in WAL mode, either locally or via SSH to another server.| til.simonwillison.net
A popular nightmare scenario for AI is giving it access to tools, so it can make API calls and execute its own code and generally break free of the constraints of its initial environment.| til.simonwillison.net
I'm a big fan of snapshot testing - writing tests where you compare the output of some function to a previously saved version, and can re-generate that version from scratch any time something changes.| til.simonwillison.net