Simon Willison’s Weblog

Subscribe

TILs

Filters: Sorted by date

TIL shot-scraper for a subset of table columns — For [Datasette issue #1844](https://github.com/simonw/datasette/issues/1844) I wanted to create the following screenshot:
TIL Using psutil to investigate "Too many open files" — I was getting this intermittent error running my Datasette test suite:
TIL Pisco sour — This classic Peruvian cocktail recipe is particularly useful if you have both a lemon tree and chickens producing fresh eggs!
TIL Querying newline-delimited JSON logs using AWS Athena — I've been writing my Fly logs to S3 in newline-delimited JSON format using the recipe described in [Writing Fly logs to S3](https://til.simonwillison.net/fly/fly-logs-to-s3).
TIL Tommy's Margarita — A few years ago I decided to learn how to make some classic cocktails. It is a very rewarding hobby.
TIL GraphQL fragments — One of [the scripts](https://github.com/simonw/datasette.io/blob/main/build_directory.py) that builds and deploys [datasette.io](https://datasette.io/) uses a GraphQL query to retrieve information from GitHub about the repositories used for the various Datasette tools and plugins.
TIL HTML video that loads when the user clicks play — Today I figured out how to use the `<video>` tag to show a static thumbnail that gets replaced by the loaded video only when the user clicks play.
TIL Athena error: The specified key does not exist — I was trying to run Athena queries against compressed JSON log files stored in an S3 bucket.
TIL Ensure labels exist in a GitHub repository — I wanted to ensure that when [this template repository](https://github.com/simonw/action-transcription) was used to create a new repo that repo would have a specific set of labels.
TIL Whisky sour — I picked up the recipe for this one from [this video](https://www.tiktok.com/t/ZTRaxyxQP/) by [@notjustabartender](https://www.tiktok.com/@notjustabartender) on TikTok.
TIL Deploying Python web apps as AWS Lambda functions — I've been wanting to figure out how to do this for years. Today I finally put all of the pieces together for it.
TIL Using DuckDB in Python to access Parquet data — Did a quick experiment with [DuckDB](https://duckdb.org/) today, inspired by the [bmschmidt/hathi-binary](https://github.com/bmschmidt/hathi-binary) repo.
TIL Returning related rows in a single SQL query using JSON — When building database-backed applications you'll often find yourself wanting to return a row from the database along with its related rows.
TIL Running PyPy on macOS using Homebrew — [Towards Inserting One Billion Rows in SQLite Under A Minute](https://avi.im/blag/2021/fast-sqlite-inserts/) includes this snippet:
TIL Browse files (including SQLite databases) on your iPhone with ifuse — I spotted an intriguing note in the release notes for [osxphotos 0.51.7](https://github.com/RhetTbull/osxphotos/releases/tag/v0.51.7):
TIL Driving an external display from a Mac laptop — For a friend's wedding I needed to run a Google Photos slideshow on some large televisions.
TIL Clone, edit and push files that live in a Gist — GitHub [Gists](https://gist.github.com/) are full Git repositories, and can be cloned and pushed to.
TIL Run pytest against a specific Python version using Docker — For [datasette issue #1802](https://github.com/simonw/datasette/issues/1802) I needed to run my `pytest` test suite using a specific version of Python 3.7.
TIL Loading Twitter Birdwatch into SQLite for analysis with Datasette — [Twitter Birdwatch](https://twitter.github.io/birdwatch/) is "a collaborative way to add helpful context to Tweets and keep people better informed".
TIL How to scp files to and from Fly — I have a Fly instance with a 20GB volume, and I wanted to copy files to and from the instance from my computer using `scp`.
TIL SQLite VACUUM: database or disk is full — I was trying to run `VACUUM` against a large SQLite database file (~7GB) using `sqlite-utils vacuum data.db` and I got this error:
TIL Seeing which functions are unique to a specific SQLite / Datasette instance — In reading [Scraping JSON, HTML, and ZIP Files with Pure SQLite](https://observablehq.com/@asg017/scrape-json-html-zip-with-sqlite) by Alex Garcia I got curious to see a full list of functions he had registered in his [sqlite-extension-examples.fly.dev](https://sqlite-extension-examples.fly.dev) Datasette instance that weren't available in a regular Datasette.
TIL Trying out Quarto on macOS — I decided to try out [Quarto](https://quarto.org/), the new notebook/markdown/publishing system built on Pandoc.
TIL Sort by number of JSON intersections — This [post on Reddit](https://www.reddit.com/r/sqlite/comments/wr0wp0/i_have_a_sqlite_database_of_recipes_i_would_like/) asked how to run a query that takes a list of items (in this case ingredients) as the input and returns all rows with at least one of those items in a JSON list, ordered by the most matches.
TIL Analyzing Google Cloud spend with Datasette — Google Cloud provide extremely finely grained billing, but you need to access it through BigQuery which I find quite inconvenient.
TIL Defining setup.py dependencies using a URL — For [sqlite-utils issue 464](https://github.com/simonw/sqlite-utils/issues/464) I implemented a fix to a tiny bug in a dependency in [my own fork](https://github.com/simonw/beanbag-docutils/tree/bytes-in-url) on GitHub.
TIL Creating a tiled zoomable image with OpenSeadragon and vips — The San Francisco Microscopical Society has some extremely high resolution scanned images - one of them is a 1.67GB PNG file with a 25,088 × 17,283 pixel resolution.
TIL 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.
TIL Mocking a Textract LimitExceededException with boto — For [s3-ocr issue #21](https://github.com/simonw/s3-ocr/issues/21) I needed to write a test that simulates what happens when Amazon Textract returns a "LimitExceededException". When using boto this error presents itself as an exception:
TIL Trying out SQLite extensions on macOS — Alex Garcia has been building some really cool new custom extensions for SQLite, working in C and Go. So far he's released two:

Years