<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: geoffrey-litt</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/geoffrey-litt.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-10-24T14:07:11+00:00</updated><author><name>Simon Willison</name></author><entry><title>Quoting Geoffrey Litt</title><link href="https://simonwillison.net/2025/Oct/24/geoffrey-litt/#atom-tag" rel="alternate"/><published>2025-10-24T14:07:11+00:00</published><updated>2025-10-24T14:07:11+00:00</updated><id>https://simonwillison.net/2025/Oct/24/geoffrey-litt/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www.geoffreylitt.com/2025/10/24/code-like-a-surgeon"&gt;&lt;p&gt;A lot of people say AI will make us all "managers" or "editors"...but I think this is a dangerously incomplete view!&lt;/p&gt;
&lt;p&gt;Personally, I'm trying to &lt;strong&gt;code like a surgeon&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A surgeon isn't a manager, they do the actual work! But their skills and time are highly leveraged with a support team that handles prep, secondary tasks, admin. The surgeon focuses on the important stuff they are uniquely good at. [...]&lt;/p&gt;
&lt;p&gt;It turns out there are a LOT of secondary tasks which AI agents are now good enough to help out with. Some things I'm finding useful to hand off these days:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Before attempting a big task, write a guide to relevant areas of the codebase&lt;/li&gt;
&lt;li&gt;Spike out an attempt at a big change. Often I won't use the result but I'll review it as a sketch of where to go&lt;/li&gt;
&lt;li&gt;Fix typescript errors or bugs which have a clear specification&lt;/li&gt;
&lt;li&gt;Write documentation about what I'm building&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I often find it useful to run these secondary tasks async in the background -- while I'm eating lunch, or even literally overnight!&lt;/p&gt;
&lt;p&gt;When I sit down for a work session, I want to feel like a surgeon walking into a prepped operating room. Everything is ready for me to do what I'm good at.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.geoffreylitt.com/2025/10/24/code-like-a-surgeon"&gt;Geoffrey Litt&lt;/a&gt;, channeling The Mythical Man-Month&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="geoffrey-litt"/><category term="coding-agents"/><category term="parallel-agents"/></entry><entry><title>Enough AI copilots! We need AI HUDs</title><link href="https://simonwillison.net/2025/Jul/27/enough-ai-copilots-we-need-ai-huds/#atom-tag" rel="alternate"/><published>2025-07-27T22:15:55+00:00</published><updated>2025-07-27T22:15:55+00:00</updated><id>https://simonwillison.net/2025/Jul/27/enough-ai-copilots-we-need-ai-huds/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.geoffreylitt.com/2025/07/27/enough-ai-copilots-we-need-ai-huds"&gt;Enough AI copilots! We need AI HUDs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Geoffrey Litt compares Copilots - AI assistants that you engage in dialog with and work with you to complete a task - with HUDs, Head-Up Displays, which enhance your working environment in less intrusive ways.&lt;/p&gt;
&lt;p&gt;He uses spellcheck as an obvious example, providing underlines for incorrectly spelt words, and then suggests his &lt;a href="https://www.geoffreylitt.com/2024/12/22/making-programming-more-fun-with-an-ai-generated-debugger"&gt;AI-implemented custom debugging UI&lt;/a&gt; as a more ambitious implementation of that pattern.&lt;/p&gt;
&lt;p&gt;Plenty of people have expressed interest in LLM-backed interfaces that go beyond chat or editor autocomplete. I think HUDs offer a really interesting way to frame one approach to that design challenge.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/design-patterns"&gt;design-patterns&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;&lt;/p&gt;



</summary><category term="design"/><category term="design-patterns"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="geoffrey-litt"/></entry><entry><title>Malleable software</title><link href="https://simonwillison.net/2025/Jun/11/malleable-software/#atom-tag" rel="alternate"/><published>2025-06-11T19:21:39+00:00</published><updated>2025-06-11T19:21:39+00:00</updated><id>https://simonwillison.net/2025/Jun/11/malleable-software/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.inkandswitch.com/essay/malleable-software/"&gt;Malleable software&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
New, delightful manifesto from Ink &amp;amp; Switch.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In this essay, we envision malleable software: tools that users can reshape with minimal friction to suit their unique needs. Modification becomes routine, not exceptional. Adaptation happens at the point of use, not through engineering teams at distant corporations.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a beautifully written essay. I love the early framing of a comparison with physical environments such as the workshop of a luthier:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A guitar maker sets up their workshop with their saws, hammers, chisels and files arranged just so. They can also build new tools as needed to achieve the best result—a wooden block as a support, or a pair of pliers sanded down into the right shape. […] &lt;strong&gt;In the physical world, the act of crafting our environments comes naturally, because physical reality is malleable&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Most software doesn’t have these qualities, or requires deep programming skills in order to make customizations. The authors propose “malleable software” as a new form of computing ecosystem to “give users agency as co-creators”.&lt;/p&gt;
&lt;p&gt;They mention plugin systems as one potential path, but highlight their failings:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;However, &lt;strong&gt;plugin systems still can only edit an app's behavior in specific authorized ways.&lt;/strong&gt; If there's not a plugin surface available for a given customization, the user is out of luck. (In fact, most applications have no plugin API at all, because it's hard work to design a good one!)&lt;/p&gt;
&lt;p&gt;There are other problems too. Going from installing plugins to &lt;em&gt;making&lt;/em&gt; one is a chasm that's hard to cross. And each app has its own distinct plugin system, making it typically impossible to share plugins across different apps.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Does AI-assisted coding help? Yes, to a certain extent, but there are still barriers that we need to tear down:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We think these developments hold exciting potential, and represent a good reason to pursue malleable software at this moment. But at the same time, &lt;strong&gt;AI code generation alone does not address all the barriers to malleability.&lt;/strong&gt; Even if we presume that every computer user could perfectly write and edit code, that still leaves open some big questions.&lt;/p&gt;
&lt;p&gt;How can users tweak the &lt;em&gt;existing&lt;/em&gt; tools they've installed, rather than just making new siloed applications? How can AI-generated tools compose with one another to build up larger workflows over shared data? And how can we let users take more direct, precise control over tweaking their software, without needing to resort to AI coding for even the tiniest change?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;They describe three key design patterns: a gentle slope from user to creator (as seen in Excel and HyperCard), focusing on tools, not apps (a kitchen knife, not an avocado slicer) and encouraging communal creation.&lt;/p&gt;
&lt;p&gt;I found this note inspiring when considering my own work on &lt;a href="https://datasette.io/"&gt;Datasette&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many successful customizable systems such as spreadsheets, HyperCard, Flash, Notion, and Airtable follow a similar pattern: &lt;strong&gt;a media editor with optional programmability.&lt;/strong&gt; When an environment offers document editing with familiar direct manipulation interactions, users can get a lot done without needing to write any code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The remainder of the essay focuses on Ink &amp;amp; Switch's own prototypes in this area, including Patchwork, Potluck and Embark.&lt;/p&gt;
&lt;p&gt;Honestly, this is one of those pieces that defies attempts to summarize it. It's worth carving out some quality time to spend with this.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://lobste.rs/s/fkgmer/malleable_software_restoring_user"&gt;lobste.rs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/design-patterns"&gt;design-patterns&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/local-first"&gt;local-first&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ink-and-switch"&gt;ink-and-switch&lt;/a&gt;&lt;/p&gt;



</summary><category term="design-patterns"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="local-first"/><category term="geoffrey-litt"/><category term="ink-and-switch"/></entry><entry><title>Stevens: a hackable AI assistant using a single SQLite table and a handful of cron jobs</title><link href="https://simonwillison.net/2025/Apr/13/stevens/#atom-tag" rel="alternate"/><published>2025-04-13T20:58:09+00:00</published><updated>2025-04-13T20:58:09+00:00</updated><id>https://simonwillison.net/2025/Apr/13/stevens/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.geoffreylitt.com/2025/04/12/how-i-made-a-useful-ai-assistant-with-one-sqlite-table-and-a-handful-of-cron-jobs"&gt;Stevens: a hackable AI assistant using a single SQLite table and a handful of cron jobs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Geoffrey Litt reports on Stevens, a shared digital assistant he put together for his family using SQLite and scheduled tasks running on Val Town.&lt;/p&gt;
&lt;p&gt;The design is refreshingly simple considering how much it can do. Everything works around a single &lt;code&gt;memories&lt;/code&gt; table. A memory has text, tags, creation metadata and an optional &lt;code&gt;date&lt;/code&gt; for things like calendar entries and weather reports.&lt;/p&gt;
&lt;p&gt;Everything else is handled by scheduled jobs to popular weather information and events from Google Calendar, a Telegram integration offering a chat UI and a neat system where USPS postal email delivery notifications are run through Val's own email handling mechanism to trigger a Claude prompt to add those as memories too. &lt;/p&gt;
&lt;p&gt;Here's &lt;a href="https://www.val.town/x/geoffreylitt/stevensDemo"&gt;the full code on Val Town&lt;/a&gt;, including &lt;a href="https://www.val.town/x/geoffreylitt/stevensDemo/code/dailyBriefing/sendDailyBrief.ts"&gt;the daily briefing prompt&lt;/a&gt; that incorporates most of the personality of the bot.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/sqlite"&gt;sqlite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/val-town"&gt;val-town&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-personality"&gt;ai-personality&lt;/a&gt;&lt;/p&gt;



</summary><category term="sqlite"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="geoffrey-litt"/><category term="val-town"/><category term="ai-personality"/></entry><entry><title>Ambsheets: Spreadsheets for exploring scenarios</title><link href="https://simonwillison.net/2025/Feb/5/ambsheets/#atom-tag" rel="alternate"/><published>2025-02-05T02:50:22+00:00</published><updated>2025-02-05T02:50:22+00:00</updated><id>https://simonwillison.net/2025/Feb/5/ambsheets/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.inkandswitch.com/ambsheets/"&gt;Ambsheets: Spreadsheets for exploring scenarios&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Delightful UI experiment by Alex Warth and Geoffrey Litt at Ink &amp;amp; Switch, exploring the idea of a spreadsheet with cells that can handle multiple values at once, which they call "amb" (for "ambiguous") values. A single sheet can then be used to model multiple scenarios.&lt;/p&gt;
&lt;p&gt;Here the cell for "Car" contains &lt;code&gt;{500, 1200}&lt;/code&gt; and the cell for "Apartment"  contains &lt;code&gt;{2800, 3700, 5500}&lt;/code&gt;, resulting in a "Total" cell with six different values. Hovering over a calculated highlights its source values and a side panel shows a table of calculated results against those different combinations.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Spreadsheet showing budget items with values in cells: Column A shows Budget, Car, Apartment, Netflix, and TOTAL. Column B shows values including x̄ = 850 for Car with values 500 and 1,200; x̄ = 4,000 for Apartment with values 2,800, 3,700, and 5,500; Netflix shows 18; TOTAL row shows x̄ = 4,868 with values 3,318, 4,218, 6,018, 4,018, 4,918, and 6,718. Right side shows formula =sum(b3:b5), TABLE with aggregate avg dropdown, and STACKS visualization of the values." src="https://static.simonwillison.net/static/2025/amb-sheets.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Always interesting to see neat ideas like this presented on top of UIs that haven't had a significant upgrade in a very long time.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=42941143"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/spreadsheets"&gt;spreadsheets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ui"&gt;ui&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ink-and-switch"&gt;ink-and-switch&lt;/a&gt;&lt;/p&gt;



</summary><category term="spreadsheets"/><category term="ui"/><category term="ux"/><category term="geoffrey-litt"/><category term="ink-and-switch"/></entry><entry><title>Quoting Geoffrey Litt</title><link href="https://simonwillison.net/2025/Jan/15/geoffrey-litt/#atom-tag" rel="alternate"/><published>2025-01-15T16:15:54+00:00</published><updated>2025-01-15T16:15:54+00:00</updated><id>https://simonwillison.net/2025/Jan/15/geoffrey-litt/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/geoffreylitt/status/1879561947299115433"&gt;&lt;p&gt;Today's software ecosystem evolved around a central assumption that code is expensive, so it makes sense to centrally develop and then distribute at low marginal cost.&lt;/p&gt;
&lt;p&gt;If code becomes 100x cheaper, the choices no longer make sense! Build-buy tradeoffs often flip.&lt;/p&gt;
&lt;p&gt;The idea of an "app"—a hermetically sealed bundle of functionality built by a team trying to anticipate your needs—will no longer be as relevant.&lt;/p&gt;
&lt;p&gt;We'll want looser clusters, amenable to change at the edges. Everyone owns their tools, rather than all of us renting cloned ones.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/geoffreylitt/status/1879561947299115433"&gt;Geoffrey Litt&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="geoffrey-litt"/></entry><entry><title>Quoting Geoffrey Litt</title><link href="https://simonwillison.net/2024/Dec/23/geoffrey-litt/#atom-tag" rel="alternate"/><published>2024-12-23T04:22:56+00:00</published><updated>2024-12-23T04:22:56+00:00</updated><id>https://simonwillison.net/2024/Dec/23/geoffrey-litt/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www.geoffreylitt.com/2024/12/22/making-programming-more-fun-with-an-ai-generated-debugger.html"&gt;&lt;p&gt;Whether you’re an AI-programming skeptic or an enthusiast, the reality is that many programming tasks are beyond the reach of today’s models. But many decent &lt;em&gt;dev tools&lt;/em&gt; are actually quite easy for AI to build, and can help the rest of the programming go smoother. In general, these days any time I’m spending more than a minute staring at a JSON blob, I consider whether it’s worth building a custom UI for it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.geoffreylitt.com/2024/12/22/making-programming-more-fun-with-an-ai-generated-debugger.html"&gt;Geoffrey Litt&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="geoffrey-litt"/></entry><entry><title>Towards universal version control with Patchwork</title><link href="https://simonwillison.net/2024/May/8/universal-version-control/#atom-tag" rel="alternate"/><published>2024-05-08T01:44:26+00:00</published><updated>2024-05-08T01:44:26+00:00</updated><id>https://simonwillison.net/2024/May/8/universal-version-control/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://buttondown.email/geoffreylitt/archive/towards-universal-version-control-with-patchwork/"&gt;Towards universal version control with Patchwork&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Geoffrey Litt has been working with Ink &amp;amp; Switch exploring UI patterns for applying version control to different kinds of applications, with the goal of developing a set of conceptual primitives that can bring branching and version tracking to interfaces beyond just Git-style version control.&lt;/p&gt;

&lt;p&gt;Geoffrey observes that basic version control is already a metaphor in a lot of software—the undo stack in Photoshop or suggestion mode in Google Docs are two examples.&lt;/p&gt;

&lt;p&gt;Extending that is a great way to interact with AI tools as well—allowing for editorial bots that can suggest their own changes for you to accept, for example.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/stevekrouse/status/1787834460358017497"&gt;@stevekrouse&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/version-control"&gt;version-control&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ink-and-switch"&gt;ink-and-switch&lt;/a&gt;&lt;/p&gt;



</summary><category term="version-control"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="geoffrey-litt"/><category term="ink-and-switch"/></entry><entry><title>Quoting Geoffrey Litt</title><link href="https://simonwillison.net/2024/Mar/18/geoffrey-litt/#atom-tag" rel="alternate"/><published>2024-03-18T18:16:09+00:00</published><updated>2024-03-18T18:16:09+00:00</updated><id>https://simonwillison.net/2024/Mar/18/geoffrey-litt/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/geoffreylitt/status/1769471002755338553"&gt;&lt;p&gt;It's hard to overstate the value of LLM support when coding for fun in an unfamiliar language. [...] This example is totally trivial in hindsight, but might have taken me a couple mins to figure out otherwise. This is a bigger deal than it seems! Papercuts add up fast and prevent flow. (A lot of being a senior engineer is just being proficient enough to avoid papercuts).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/geoffreylitt/status/1769471002755338553"&gt;Geoffrey Litt&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;&lt;/p&gt;



</summary><category term="programming"/><category term="ai"/><category term="llms"/><category term="geoffrey-litt"/></entry><entry><title>You Can Build an App in 60 Minutes with ChatGPT, with Geoffrey Litt</title><link href="https://simonwillison.net/2024/Jan/10/you-can-build-an-app-in-60-minutes-with-chatgpt-with-geoffrey-li/#atom-tag" rel="alternate"/><published>2024-01-10T23:41:15+00:00</published><updated>2024-01-10T23:41:15+00:00</updated><id>https://simonwillison.net/2024/Jan/10/you-can-build-an-app-in-60-minutes-with-chatgpt-with-geoffrey-li/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=oy7uMpPrGMA"&gt;You Can Build an App in 60 Minutes with ChatGPT, with Geoffrey Litt&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
YouTube interview between Dan Shipper and Geoffrey Litt. They talk about how ChatGPT can build working React applications and how this means you can build extremely niche applications that you woudn’t have considered working on before—then to demonstrate that idea, they collaborate to build a note-taking app to be used just during that specific episode recording, pasting React code from ChatGPT into Replit.&lt;/p&gt;

&lt;p&gt;Geoffrey: “I started wondering what if we had a world where everybody could craft software tools that match the workflows they want to have, unique to themselves and not just using these pre-made tools. That’s what malleable software means to me.”

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/imaurer/status/1745188382030848207"&gt;Ian Maurer&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/react"&gt;react&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatgpt"&gt;chatgpt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="react"/><category term="generative-ai"/><category term="chatgpt"/><category term="llms"/><category term="geoffrey-litt"/></entry><entry><title>Quoting Geoffrey Litt</title><link href="https://simonwillison.net/2023/Mar/27/geoffrey-litt/#atom-tag" rel="alternate"/><published>2023-03-27T06:10:29+00:00</published><updated>2023-03-27T06:10:29+00:00</updated><id>https://simonwillison.net/2023/Mar/27/geoffrey-litt/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www.geoffreylitt.com/2023/03/25/llm-end-user-programming.html"&gt;&lt;p&gt;I think it’s likely that soon all computer users will have the ability to develop small software tools from scratch, and to describe modifications they’d like made to software they’re already using.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.geoffreylitt.com/2023/03/25/llm-end-user-programming.html"&gt;Geoffrey Litt&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="geoffrey-litt"/></entry><entry><title>SQLite Happy Hour - a Twitter Spaces conversation about three interesting projects building on SQLite</title><link href="https://simonwillison.net/2022/Mar/23/sqlite-happy-hour/#atom-tag" rel="alternate"/><published>2022-03-23T22:01:07+00:00</published><updated>2022-03-23T22:01:07+00:00</updated><id>https://simonwillison.net/2022/Mar/23/sqlite-happy-hour/#atom-tag</id><summary type="html">
    &lt;p&gt;Yesterday I hosted SQLite Happy Hour. my first conversation using Twitter Spaces. The idea was to dig into three different projects that were doing interesting things on top of SQLite. I think it worked pretty well, and I'm curious to explore this format more in the future.&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="https://twitter.com/simonw/status/1504604448202518529"&gt;the tweet&lt;/a&gt; that initially promoted the space:&lt;/p&gt;

&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;Interested in devious tricks to push the envelope of what you can do with SQLite?&lt;br /&gt;&lt;br /&gt;Join myself, &lt;a href="https://twitter.com/benbjohnson?ref_src=twsrc%5Etfw"&gt;@benbjohnson&lt;/a&gt;, &lt;a href="https://twitter.com/geoffreylitt?ref_src=twsrc%5Etfw"&gt;@geoffreylitt&lt;/a&gt; and &lt;a href="https://twitter.com/nschiefer?ref_src=twsrc%5Etfw"&gt;@nschiefer&lt;/a&gt; on Tuesday for a Twitter Spaces conversation about &lt;a href="https://twitter.com/litestream?ref_src=twsrc%5Etfw"&gt;@litestream&lt;/a&gt;, &lt;a href="https://twitter.com/datasetteproj?ref_src=twsrc%5Etfw"&gt;@datasetteproj&lt;/a&gt; and Riffle!&lt;a href="https://t.co/ukRMVgC09u"&gt;https://t.co/ukRMVgC09u&lt;/a&gt;&lt;/p&gt;- Simon Willison (@simonw) &lt;a href="https://twitter.com/simonw/status/1504604448202518529?ref_src=twsrc%5Etfw"&gt;March 17, 2022&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;My co-hosts, representing the three projects, were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ben Johnson &lt;a href="https://twitter.com/benbjohnson"&gt;@benbjohnson&lt;/a&gt;, creator of &lt;a href="https://litestream.io/"&gt;Litestream&lt;/a&gt; - a tool that adds replication to SQLite built on top of the WAL mechanism.&lt;/li&gt;
&lt;li&gt;Geoffrey Litt &lt;a href="https://twitter.com/geoffreylitt"&gt;@hgeoffreylitt&lt;/a&gt; and Nicholas Schiefer &lt;a href="https://twitter.com/nschiefer"&gt;@nschiefer&lt;/a&gt; who are working on Riffle, a project exploring the idea of driving reactive user interfaces using SQL queries - see &lt;a href="https://riffle.systems/essays/prelude/"&gt;Building data-centric apps with a reactive relational database&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Twitter Spaces recorded audio only lasts for 30 days, so I've exported the audio and shared it &lt;a href="https://soundcloud.com/simon-willison/sqlite-happy-hour-22nd-march-2022"&gt;on SoundCloud&lt;/a&gt; as well.&lt;/p&gt;

&lt;iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1237563277&amp;amp;color=%23ff5500&amp;amp;auto_play=false&amp;amp;hide_related=false&amp;amp;show_comments=true&amp;amp;show_user=true&amp;amp;show_reposts=false&amp;amp;show_teaser=true"&gt; &lt;/iframe&gt;&lt;div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"&gt;&lt;a href="https://soundcloud.com/simon-willison" title="Simon Willison" target="_blank" style="color: #cccccc; text-decoration: none;"&gt;Simon Willison&lt;/a&gt; · &lt;a href="https://soundcloud.com/simon-willison/sqlite-happy-hour-22nd-march-2022" title="SQLite Happy Hour - 22nd March 2022" target="_blank" style="color: #cccccc; text-decoration: none;"&gt;SQLite Happy Hour - 22nd March 2022&lt;/a&gt;&lt;/div&gt;

&lt;h4&gt;Collaborative notes from the session&lt;/h4&gt;
&lt;p&gt;Something I've observed in Twitter Spaces I've joined in the past is that they can really benefit from a dedicated back-channel, to share links and allow audience participation without people needing to first request to speak.&lt;/p&gt;
&lt;p&gt;A trick I've used with online talks I've given in the past is to start a collaborative Google Doc to collect shared notes and questions. I tried this for the Twitter Space, and it worked really well!&lt;/p&gt;
&lt;p&gt;You &lt;a href="https://docs.google.com/document/d/1ykZdd-Q_PF21N239T7EolOFSM-dHJUjjM2NVP5K26oQ/edit#"&gt;see that document here&lt;/a&gt;. During the session the document was open for anyone to edit - I've locked it down now that the session has ended.&lt;/p&gt;
&lt;p&gt;I've duplicated the final form of the document at the bottom of this post.&lt;/p&gt;
&lt;p&gt;Something I really like about this format is that it allows for additional material to be posted later. I spent some time adding more detailed answers to the questions about Datasette after the session had ended.&lt;/p&gt;
&lt;h4&gt;Thoughts for if I do this again&lt;/h4&gt;
&lt;p&gt;This was my first time hosting a space, and I learned a lot along the way.&lt;/p&gt;
&lt;p&gt;Firstly, this kind of thing works the best when there is a back and forth between the participants.&lt;/p&gt;
&lt;p&gt;My original idea was to have each project talk for ten minutes, then spend five minutes on discussion between the panel before moving on to the next project - and 15 minutes of open discussion at the end.&lt;/p&gt;
&lt;p&gt;My co-hosts suggested we try to make it more conversational, interrupting each other as we went along. We did that, and it worked much better: these conversations are far more interesting as a conversation than a monolog.&lt;/p&gt;
&lt;p&gt;I still don't have a great feel for when to interrupt people in an audio-only conversation, since unlike an in-person panel there are no visual clues to go off!&lt;/p&gt;
&lt;p&gt;Techology: it turns out Twitter Spaces has wildly different functionality on web v.s. mobile apps. We spent the first five minutes making sure all of our speakers could talk! We really should have done a tech rehearsal first, but I wasn't sure how to do that without accidentally broadcasting it to the world - maybe setup burner Twitter accounts for testing?&lt;/p&gt;
&lt;p&gt;Presenting audio-only is itself a challenge: I'm used to leaning on visual demos when I explain what Datasette is in a talk, and not having those to fall back on was challenging. I had jotted down notes on the main points I wanted to hit which certainly helped, but I think there's a whole new presenting skill here that I need to work harder to develop.&lt;/p&gt;
&lt;p&gt;Exporting the recorded audio from Twitter was frustrating but possible. I wrote some notes on how I did that &lt;a href="https://til.simonwillison.net/twitter/export-edit-twitter-spaces"&gt;in this TIL&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Our collaborative notes in full&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;SQLite Happy Hour Twitter Space&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;22nd March 2022 - &lt;a href="https://www.worldtimebuddy.com/?qm=1&amp;amp;lid=5128581,5391959,5419384,2643743&amp;amp;h=5128581&amp;amp;date=2022-3-22&amp;amp;sln=15.5-16.5&amp;amp;hf=1"&gt;12:30pm PT / 1:30pm MT / 3:30pm ET&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Welcome to the SQLite Happy Hour! This hour-long session will feature three projects that are doing interesting things with SQLite. Each project will provide a ten minute overview, followed by five minutes of discussion from the panel. The last 15 minutes of the hour will be an open discussion and general Q&amp;amp;A.&lt;/p&gt;
&lt;p&gt;This document is open for anyone to edit. Please feel free to drop notes and questions in as we go along.&lt;/p&gt;
&lt;p&gt;The recording of the space is available here: &lt;a href="https://twitter.com/i/spaces/1ypKdEXvkMLGW"&gt;https://twitter.com/i/spaces/1ypKdEXvkMLGW&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;Riffle&lt;/h5&gt;
&lt;p&gt;Geoffrey Litt &lt;a href="https://twitter.com/geoffreylitt"&gt;@geoffreylitt&lt;/a&gt;, Nicholas Schiefer &lt;a href="https://twitter.com/nschiefer"&gt;@nschiefer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Riffle asks: what if you wrote your whole UI as a query over a local database? So far, we've built a prototype using SQLite and React. More background in this paper:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://riffle.systems/essays/prelude/"&gt;Building data-centric apps with a reactive relational database&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Research project goal is to make development simpler, as opposed to the ongoing trend of more complexity.&lt;/p&gt;
&lt;p&gt;Riffle looks at having a database-centric mechanism at the heart of the view. Declarative queries could make apps easier to understand and debug.&lt;/p&gt;
&lt;p&gt;SQLite is the tool used for the prototype.&lt;/p&gt;
&lt;p&gt;Local first architecture: Ink &amp;amp; Switch have been promoting this. Return to a world where you local client device serves as a source of truth - you can access data offline etc - and when the network is available your data gets synced to the cloud.&lt;/p&gt;
&lt;p&gt;The prototype: a reactive layer that uses SQLite as a state management backend for React, using &lt;a href="https://sql.js.org/#/"&gt;https://sql.js.org/&lt;/a&gt; which compiles SQLite in WASM. Also built prototypes of desktop apps using &lt;a href="https://github.com/tauri-apps/tauri"&gt;https://github.com/tauri-apps/tauri&lt;/a&gt; - like Electron but using the system web browser instead of bundling its own.&lt;/p&gt;
&lt;p&gt;Since they control the writes, they can re-execute every query after any writes happen. SQLite is so fast that this works fine, queries all take under a ms and even with a thousand queries you can still run them all.&lt;/p&gt;
&lt;p&gt;ALL UI state is in the database - there's no local React component state - literally everything is in the database. This means all UI state is persistent by default.&lt;/p&gt;
&lt;p&gt;IndexedDB is used for the in-browser persistence. The Tauri desktop app stores to a file on disk. Maybe SQL.js could do that with the new Chrome filesystem API stuff too?&lt;/p&gt;
&lt;p&gt;Questions about Riffle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Will Riffle target vanilla JS, or Node.js?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It's running client-side, so vanilla JS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From Stephen: What about browser-native UI state like scroll position, URL path, query string, multiple independent browser tabs, etc?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Great question. We do some syncing of browser-native state to put it in the DB: eg, to support virtualized list rendering we update scroll state in the DB with an event handler. But there's definitely some browser state that isn't being captured reliably. In the purest world, the pixels on your screen would be produced by a DB query :)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From Predrag Gruevski: Would "query the queries" be a viable approach for narrowing the set of queries that need to be re-executed after a given write? Simple example: if table X gets modified, query for all queries that have table X in a FROM clause, then re-execute them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;yeah, that's roughly the direction we're headed. It's a little trickier than that if you start having subqueries / materialized view, but good general idea&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From Longwei Su: Right now, each db update will cause a whole refresh. Is there any plan to refine the binding? So that any db update will only trigger UI component that "subscribe" to this section of the data. Sqlite have trigger, which can have callback on record update. How to construct that  "publisher"-&amp;gt; "subscriber" mapping from sql query?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comments for Riffle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;From Jesse - &lt;a href="http://web.dev/file-system-access/"&gt;http://web.dev/file-system-access/&lt;/a&gt; isn't a very rich api - I think you could persist to it, but I don't think you can seek/update/.../all the posix stuff sqlite probably needs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hasura &lt;a href="https://github.com/hasura/graphql-engine/blob/master/architecture/live-queries.md"&gt;documented&lt;/a&gt; how they do reactive queries with Postgres, might be useful for minimising refetch overhead?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Datasette&lt;/h5&gt;
&lt;p&gt;Simon Willison &lt;a href="https://twitter.com/simonw"&gt;@simonw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://datasette.io/"&gt;Datasette&lt;/a&gt; is an open source multi-tool for exploring and publishing data. It explores SQLite as a read-only mechanism for publishing structured data online in as flexible a manner as possible, and aims to build an ecosystem of plugins that can handle a wide range of exploratory data analysis challenges.&lt;/p&gt;
&lt;p&gt;Video introduction here: &lt;a href="https://simonwillison.net/2021/Feb/7/video/"&gt;https://simonwillison.net/2021/Feb/7/video/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Questions about Datasette:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How does it compares with &lt;a href="https://github.com/dinedal/textql"&gt;https://github.com/dinedal/textql&lt;/a&gt;, it seems the same but instead of sqlite binaries, just raw csv files which are more ubiquitous, and easier to view and edit with with office software (msf excel, libreoffice calc) ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sqlite-utils memory provides similar functionality: &lt;a href="https://simonwillison.net/2021/Jun/19/sqlite-utils-memory/"&gt;https://simonwillison.net/2021/Jun/19/sqlite-utils-memory/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does Datasette need to worry about SQLite's &lt;a href="https://www.sqlite.org/security.html"&gt;Defense Against the Dark Arts&lt;/a&gt; security guidelines?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yes, absolutely! I've put a lot of work in there. Most importantly, Datasette enforces a time limit on queries, which cuts them off if they take more than a second.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The SQLite3 docs are sometimes light on examples for the tricky stuff (e.g., enabling WAL). What's your best sort of info beyond the official docs?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I've been publishing my own notes here: &lt;a href="https://til.simonwillison.net/sqlite"&gt;https://til.simonwillison.net/sqlite&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The SQLite Forum is amazing - I ask questions on there and often get a reply from the maintainers within a few hours: &lt;a href="https://sqlite.org/forum/forummain"&gt;https://sqlite.org/forum/forummain&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From Predrag Gruevski: Regarding learning curve, is a GraphQL web IDE (with syntax highlighting / autocomplete etc.) sufficiently user-friendly for folks more comfortable with a spreadsheet than a CLI tool or SQL?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Probably not! GraphQL requires thinking like a programmer too. I'm interested in helping people who aren't yet ready to learn any kind of programming language&lt;/li&gt;
&lt;li&gt;I have a plugin for Datasette that adds GraphQL with the GraphiQL user interface - demo here: &lt;a href="https://datasette-graphql-demo.datasette.io/graphql/github?query=%7B%0A%20%20issue_comments%20%7B%0A%20%20%20%20totalCount%0A%20%20%20%20pageInfo%20%7B%0A%20%20%20%20%20%20hasNextPage%0A%20%20%20%20%20%20endCursor%0A%20%20%20%20%7D%0A%20%20%20%20nodes%20%7B%0A%20%20%20%20%20%20html_url%0A%20%20%20%20%20%20issue_url%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20node_id%0A%20%20%20%20%20%20created_at%0A%20%20%20%20%20%20updated_at%0A%20%20%20%20%20%20author_association%0A%20%20%20%20%20%20body%0A%20%20%20%20%20%20reactions%0A%20%20%20%20%20%20performed_via_github_app%0A%20%20%20%20%20%20user%20%7B%0A%20%20%20%20%20%20%20%20id%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20issue%20%7B%0A%20%20%20%20%20%20%20%20id%0A%20%20%20%20%20%20%20%20title%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D"&gt;datasette-graphql-demo.datasette.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Thanks! Would love to compare notes on this -- my experience from working with analysts at my employer was that they were able to master GraphiQL very quickly. In a sense, it was more intimidating than actually difficult, so working with them directly to get them over the initial difficulty hump via examples and targeted exercises made a huge positive impact.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Litestream&lt;/h5&gt;
&lt;p&gt;Ben Johnson &lt;a href="https://twitter.com/benbjohnson"&gt;@benbjohnson&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://litestream.io/"&gt;Litestream&lt;/a&gt; adds replication to SQLite, allowing databases to be cheaply replicated to storage systems such as S3. Litestream also now implements live read-replication, where many read replicas can be run against a single leader database.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.sqlite.org/np1queryprob.html"&gt;https://www.sqlite.org/np1queryprob.html&lt;/a&gt; - Many Small Queries Are Efficient in SQLite&lt;/p&gt;
&lt;p&gt;Questions about Litestream:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;What does the planned hot standby feature look like, especially regarding durability guarantees during fail-over?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BJ: Hot standby is a tough issue to generalize. The database-as-a-service version of Litestream that's coming will handle this but it's not necessarily planned for Litestream)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Will DBaaS be hosted, OSS, or both?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It'll be both&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From Longwei Su: I assume offline update will be commit locally then sync with the online storage. If there is a offline commit that conflict with the online version(that already committed in). How to resolve the conflict?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Not sure if this relates to Litestream but; how big is sql.js --- how much does it cost (in kilobytes) to load sqlite in the browser?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BJ: I think sql.js is 1.2MB so the cost depends on how much your provider charges for bandwidth&lt;/li&gt;
&lt;li&gt;Thanks! Meant "cost" in the sense of bytes transferred over wire --- this answers it :)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GraphQL&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/simonw/help-scraper"&gt;https://github.com/simonw/help-scraper&lt;/a&gt; is scraping GraphQL schemas&lt;/li&gt;
&lt;/ul&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/sqlite"&gt;sqlite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/my-talks"&gt;my-talks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/datasette"&gt;datasette&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/litestream"&gt;litestream&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ben-johnson"&gt;ben-johnson&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="sqlite"/><category term="my-talks"/><category term="twitter"/><category term="datasette"/><category term="litestream"/><category term="ben-johnson"/><category term="geoffrey-litt"/></entry></feed>