Simon Willison: TIL

Things I've learned, collected in simonw/til. You may also enjoy my blog.

Atom feed

Browse by topic: ab 1 · amplitude 1 · asgi 1 · auth0 2 · aws 8 · awslambda 1 · azure 1 · bash 11 · caddy 1 · chrome 1 · clickhouse 2 · cloudflare 3 · cloudrun 8 · cocktails 3 · cookiecutter 2 · cooking 1 · cosmopolitan 1 · css 2 · datasette 18 · deno 3 · digitalocean 1 · discord 1 · django 17 · docker 9 · duckdb 3 · electron 6 · exif 1 · firefox 1 · fly 10 · gis 4 · git 6 · github 15 · github-actions 27 · go 1 · google 2 · google-sheets 1 · googlecloud 6 · gpt3 11 · graphql 3 · hacker-news 1 · heroku 3 · homebrew 6 · html 4 · http 1 · httpx 1 · ics 1 · imagemagick 2 · javascript 16 · jinja 3 · jq 8 · json 3 · jupyter 1 · kubernetes 2 · linux 4 · llms 14 · machinelearning 1 · macos 23 · markdown 3 · mastodon 4 · mediawiki 1 · midjourney 1 · misc 2 · networking 2 · nginx 1 · node 1 · npm 4 · observable 1 · observable-plot 2 · overture-maps 1 · pixelmator 1 · playwright 1 · pluggy 1 · postgresql 6 · presenting 1 · purpleair 1 · pyodide 1 · pypi 2 · pytest 19 · python 59 · quarto 1 · readthedocs 7 · reddit 1 · selenium 2 · service-workers 1 · shot-scraper 5 · spatialite 4 · sphinx 4 · sql 5 · sqlite 52 · svg 1 · tailscale 1 · tesseract 1 · twitter 3 · typescript 1 · valtown 1 · vega 1 · vim 1 · vscode 2 · web-components 1 · webassembly 2 · webauthn 1 · wikipedia 1 · yaml 1 · zeit-now 2 · zsh 2

Recent TILs

macos A script to capture frames from a QuickTime video - 2024-04-16

I was putting together some notes for a talk I gave, and I wanted an efficient way to create screenshots of specific moments in a video of that talk. …

macos impaste: pasting images to piped commands on macOS - 2024-04-04

I wanted the ability to paste the image on my clipboard into a command in the macOS terminal. …

go Installing tools written in Go - 2024-03-25

Today I learned how to install tools from GitHub that are written in Go, using github.com/icholy/semgrepx as an example: …

chrome Google Chrome --headless mode - 2024-03-24

In the README for monolith (a new Rust CLI tool for archiving HTML pages along with their images and assets) I spotted this tip for using Chrome in headless mode to execute JavaScript and output the resulting DOM: …

clickhouse Reviewing your history of public GitHub repositories using ClickHouse - 2024-03-20

There's a story going around at the moment that people have found code from their private GitHub repositories in the AI training data known as The Stack, using this search tool: https://huggingface.co/spaces/bigcode/in-the-stack

npm Running self-hosted QuickJS in a browser - 2024-03-20

I want to try using QuickJS compiled to WebAssembly in a browser as a way of executing untrusted user-provided JavaScript in a sandbox. …

python Programmatically comparing Python version strings - 2024-03-17

I found myself wanting to compare the version numbers 0.63.1, 1.0 and the 1.0a13 in Python code, in order to mark a pytest test as skipped if the installed version of Datasette was pre-1.0. …

cloudflare Redirecting a whole domain with Cloudflare - 2024-03-15

I had to run this site on til.simonwillison.org for 24 hours due to a domain registration mistake I made. …

sqlite SQLite timestamps with floating point seconds - 2024-03-13

Today I learned about this: …

google Generating URLs to a Gmail compose window - 2024-03-12

I wanted to send out a small batch of follow-up emails for workshop attendees today, and I realized that since I have their emails in a database table I might be able to semi-automate the process. …

javascript Using packages from JSR with esbuild - 2024-03-02

JSR is a brand new package repository for "modern JavaScript and TypeScript", launched on March 1st by the Deno team as a new alternative to npm

sqlite Tracking SQLite table history using a JSON audit log - 2024-02-26

I continue to collect ways of tracking the history of a table of data stored in SQLite - see sqlite-history for previous experiments. …

valtown Running a scheduled function on Val Town to import Atom feeds into Datasette Cloud - 2024-02-20

Val Town is a neat service for hosting short server-side JavaScript programs online - reminiscent of a combination of Glitch and Observable Notebooks. …

python Getting Python MD5 to work with FIPS systems - 2024-02-13

This issue by Parand Darugar pointed out that Datasette doesn't currently run on Linux systems with FIPS enabled, due to the way it uses MD5 hashes. …

networking Running Ethernet over existing coaxial cable - 2024-02-12

I recently noticed that the router in our garage was providing around 900 Mbps if I plugged my laptop directly into it via an Ethernet cable, but that speed fell to around 80Mbps (less than 1/10th that speed) elsewhere in our house. …

llms Piping from rg to llm to answer questions about code - 2024-02-11

Here's a trick I've used a couple of times in the past few days. …

github-actions Creating GitHub repository labels with an Actions workflow - 2024-02-09

Newly created GitHub repositories come with a default set of labels. I have several labels I like to add on top of these. The most important is research, which I use for issues that are tracking my notes on a research topic relevant to the repository. …

llms Exploring ColBERT with RAGatouille - 2024-01-27

I've been trying to get my head around ColBERT. …

httpx Logging OpenAI API requests and responses using HTTPX - 2024-01-26

My LLM tool has a feature where you can set a LLM_OPENAI_SHOW_RESPONSES environment variable to see full debug level details of any HTTP requests it makes to the OpenAI APIs. …

pypi Publish releases to PyPI from GitHub Actions without a password or token - 2024-01-14

I published a package to PyPI today using their Trusted Publishers mechanism for the first time. …

python Using pprint() to print dictionaries while preserving their key order - 2024-01-14

While parsing a CSV file using csv.DictReader today I noticed the following surprising result: …

playwright Using expect() to wait for a selector to match multiple items - 2024-01-13

In the Playwright tests for datasette-cluster-map I wanted to assert that two markers had been displayed on a Leaflet map. …

sphinx literalinclude with markers for showing code in documentation - 2024-01-10

I wanted to include some example Python tests in the Datasette documentation - but since they were tests, I also wanted to execute them as part of my test suite to make sure they worked correctly. …

datasette Writing Playwright tests for a Datasette Plugin - 2024-01-08

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. …

cloudflare How to get Cloudflare to cache HTML - 2024-01-08

To my surprise, if you setup a Cloudflare caching proxy in front of a website it won't cache HTML pages by default, even if they are served with cache-control: headers. …

fly Running Varnish on Fly - 2024-01-08

The goal: run Varnish in a Fly container as a caching proxy in front of another Fly application. …

github-actions GitHub Actions, Issues and Pages to build a daily planner - 2024-01-01

I'm trying a new thing: a private daily planner, where each day I note down my goals for the day and make notes on my progress towards them as the day progresses. …

sqlite Running Steampipe extensions in sqlite-utils and Datasette - 2023-12-20

Steampipe build software that lets you query different APIs directly from SQL databases. …

macos Editing an iPhone home screen using macOS - 2023-12-11

My iPhone has a weird bug: I can no longer re-arrange the app icons on the home screen (or in the dock) by dragging them around on my phone. It lets me get into edit mode (where the icons wiggle) and drag them around, but when I release they go back to where they came from. …

macos Grabbing a transcript of a short snippet of a YouTube video with MacWhisper - 2023-11-30

I grabbed a quote from a transcript of a snippet of a YouTube video today for my blog. …

Browse all 509 TILs