Weeknotes: the aftermath of NICAR
16th March 2024
NICAR was fantastic this year. Alex and I ran a successful workshop on Datasette and Datasette Cloud, and I gave a lightning talk demonstrating two new GPT-4 powered Datasette plugins—datasette-enrichments-gpt and datasette-extract. I need to write more about the latter one: it enables populating tables from unstructured content (using a variant of this technique) and it’s really effective. I got it working just in time for the conference.
I also solved the conference follow-up problem! I’ve long suffered from poor habits in dropping the ball on following up with people I meet at conferences. This time I used a trick I first learned at a YC demo day many years ago: if someone says they’d like to follow up, get out a calendar and book a future conversation with them right there on the spot.
I have a bunch of exciting conversations lined up over the next few weeks thanks to that, with a variety of different sizes of newsrooms who are either using or want to use Datasette.
Action menus in the Datasette 1.0 alphas
I released two new Datasette 1.0 alphas in the run-up to NICAR: 1.0a12 and 1.0a13.
The main theme of these two releases was improvements to Datasette’s “action buttons”.
Datasette plugins have long been able to register additional menu items that should be shown on the database and table pages. These were previously hidden behind a “cog” icon in the title of the page—once clicked it would reveal a menu of extra actions.
The cog wasn’t discoverable enough, and felt too much like mystery meat navigation. I decided to turn it into a much more clear button.
Here’s a GIF showing that new button in action across several different pages on Datasette Cloud (which has a bunch of plugins that use it):
Prior to 1.0a12 Datasette had plugin hooks for just the database and table actions menus. I’ve added four more:
- query_actions() for actions that apply to the query results page. (#2283)
- view_actions() for actions that can be applied to a SQL view. (#2297)
- row_actions() for actions that apply to the row page. (#2299)
- homepage_actions() for actions that apply to the instance homepage. (#2298)
Menu items can now also include an optional description, which is displayed below their label in the actions menu.
It’s always DNS
This site was offline for 24 hours this week due to a DNS issue. Short version: while I’ve been paying close attention to the management of domains I’ve bought in the past few years (datasette.io, datasette.cloud etc) I hadn’t been paying attention to simonwillison.net
.
... until it turned out I had it on a registrar with an old email address that I no longer had access to, and the domain was switched into “parked” mode because I had failed to pay for renewal!
(I haven’t confirmed this yet but I think I may have paid for a ten year renewal at some point, which gives you a full decade to lose track of how it’s being paid for.)
I’ll give credit to 123-reg (these days a subsidiary of GoDaddy)—they have a well documented domain recovery policy and their support team got me back in control reasonably promptly—only slightly delayed by their UK-based account recovery team operating in a timezone separate from my own.
I registered simonwillison.org
and configured that and til.simonwillison.org
during the blackout, mainly because it turns out I refer back to my own written content a whole lot during my regular work! Once .net
came back I set up redirects using Cloudflare.
Thankfully I don’t usually use my domain for my personal email, or sorting this out would have been a whole lot more painful.
The most inconvenient impact was Mastodon: I run my own instance at fedi.simonwillison.net (previously) and losing DNS broke everything, both my ability to post but also my ability to even read posts on my timeline.
Blog entries
I published three articles since my last weeknotes:
- The GPT-4 barrier has finally been broken
- Prompt injection and jailbreaking are not the same thing
- Interesting ideas in Observable Framework
Releases
I have released so much stuff recently. A lot of this was in preparation for NICAR—I wanted to polish all sorts of corners of Datasette Cloud, which is itself a huge bundle of pre-configured Datasette plugins. A lot of those plugins got a bump!
A few releases deserve a special mention:
- datasette-extract, hinted at above, is a new plugin that enables tables in Datasette to be populated from unstructured data in pasted text or images.
-
datasette-export-database provides a way to export a current snapshot of a SQLite database from Datasette—something that previously wasn’t safe to do for databases that were accepting writes. It works by kicking off a background process to use
VACUUM INTO
in SQLite to create a temporary file with a transactional snapshot of the database state, then lets the user download that file. - llm-claude-3 provides access to the new Claude 3 models from my LLM tool. These models are really exciting: Opus feels better than GPT-4 at most things I’ve thrown at it, and Haiku is both slightly cheaper than GPT-3.5 Turbo and provides image input support at the lowest price point I’ve seen anywhere.
- datasette-create-view is a new plugin that helps you create a SQL view from a SQL query. I shipped the new query_actions() plugin hook to make this possible.
Here’s the full list of recent releases:
-
datasette-packages 0.2.1—2024-03-16
Show a list of currently installed Python packages -
datasette-export-database 0.2.1—2024-03-16
Export a copy of a mutable SQLite database on demand -
datasette-configure-fts 1.1.3—2024-03-14
Datasette plugin for enabling full-text search against selected table columns -
datasette-upload-csvs 0.9.1—2024-03-14
Datasette plugin for uploading CSV files and converting them to database tables -
datasette-write 0.3.1—2024-03-14
Datasette plugin providing a UI for executing SQL writes against the database -
datasette-edit-schema 0.8a1—2024-03-14
Datasette plugin for modifying table schemas -
llm-claude-3 0.3—2024-03-13
LLM plugin for interacting with the Claude 3 family of models -
datasette-extract 0.1a3—2024-03-13
Import unstructured data (text and images) into structured tables -
datasette 1.0a13—2024-03-13
An open source multi-tool for exploring and publishing data -
datasette-enrichments-quickjs 0.1a1—2024-03-09
Enrich data with a custom JavaScript function -
dclient 0.4—2024-03-08
A client CLI utility for Datasette instances -
datasette-saved-queries 0.2.2—2024-03-07
Datasette plugin that lets users save and execute queries -
datasette-create-view 0.1—2024-03-07
Create a SQL view from a query -
pypi-to-sqlite 0.2.3—2024-03-06
Load data about Python packages from PyPI into SQLite -
datasette-uptime 0.1.1—2024-03-06
Datasette plugin showing uptime at /-/uptime -
datasette-sqlite-authorizer 0.2—2024-03-05
Configure Datasette to block operations using the SQLIte set_authorizer mechanism -
datasette-sqlite-debug-authorizer 0.1.1—2024-03-05
Debug SQLite authorizer calls -
datasette-expose-env 0.2—2024-03-03
Datasette plugin to expose selected environment variables at /-/env for debugging -
datasette-tail 0.1a0—2024-03-01
Tools for tailing your database -
datasette-column-sum 0.1a0—2024-03-01
Sum the values in numeric Datasette columns -
datasette-schema-versions 0.3—2024-03-01
Datasette plugin that shows the schema version of every attached database -
datasette-studio 0.1a1—2024-02-29
Datasette pre-configured with useful plugins. Experimental alpha. -
datasette-scale-to-zero 0.3.1—2024-02-29
Quit Datasette if it has not received traffic for a specified time period -
datasette-explain 0.2.1—2024-02-28
Explain and validate SQL queries as you type them into Datasette
TILs
- Redirecting a whole domain with Cloudflare—2024-03-15
- SQLite timestamps with floating point seconds—2024-03-14
- Generating URLs to a Gmail compose window—2024-03-13
- Using packages from JSR with esbuild—2024-03-02
More recent articles
- Prompts.js - 7th December 2024
- First impressions of the new Amazon Nova LLMs (via a new llm-bedrock plugin) - 4th December 2024
- Storing times for human events - 27th November 2024