{"exhaustive":{"nbHits":false,"typo":false},"exhaustiveNbHits":false,"exhaustiveTypo":false,"hits":[{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"kiyanwang"},"title":{"matchLevel":"none","matchedWords":[],"value":"Claude and ChatGPT for ad-hoc sidequests"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"}},"_tags":["story","author_kiyanwang","story_39836443"],"author":"kiyanwang","created_at":"2024-03-27T07:29:54Z","created_at_i":1711524594,"num_comments":0,"objectID":"39836443","points":5,"story_id":39836443,"title":"Claude and ChatGPT for ad-hoc sidequests","updated_at":"2024-03-28T20:26:08Z","url":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"PaulHoule"},"title":{"matchLevel":"none","matchedWords":[],"value":"Claude and ChatGPT for ad-hoc tasks"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"}},"_tags":["story","author_PaulHoule","story_39829894"],"author":"PaulHoule","children":[39830126,39829993],"created_at":"2024-03-26T16:40:18Z","created_at_i":1711471218,"num_comments":1,"objectID":"39829894","points":3,"story_id":39829894,"title":"Claude and ChatGPT for ad-hoc tasks","updated_at":"2024-03-26T17:57:30Z","url":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"synergy20"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building and testing C extensions for SQLite with ChatGPT Code Interpreter"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/23/building-c-extensions-for-sqlite-with-chatgpt-code-interpreter/"}},"_tags":["story","author_synergy20","story_39816988"],"author":"synergy20","created_at":"2024-03-25T14:46:10Z","created_at_i":1711377970,"num_comments":0,"objectID":"39816988","points":1,"story_id":39816988,"title":"Building and testing C extensions for SQLite with ChatGPT Code Interpreter","updated_at":"2024-03-25T14:51:41Z","url":"https://simonwillison.net/2024/Mar/23/building-c-extensions-for-sqlite-with-chatgpt-code-interpreter/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"thunderbong"},"title":{"matchLevel":"none","matchedWords":[],"value":"Google Chrome \u2013Headless Mode"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/chrome/headless"}},"_tags":["story","author_thunderbong","story_39814754"],"author":"thunderbong","children":[39815161],"created_at":"2024-03-25T11:07:41Z","created_at_i":1711364861,"num_comments":0,"objectID":"39814754","points":4,"story_id":39814754,"title":"Google Chrome \u2013Headless Mode","updated_at":"2024-03-25T12:44:25Z","url":"https://til.simonwillison.net/chrome/headless"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"SupremumLimit"},"title":{"matchLevel":"none","matchedWords":[],"value":"Claude and ChatGPT for ad-hoc sidequests"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"}},"_tags":["story","author_SupremumLimit","story_39806310"],"author":"SupremumLimit","children":[39806961],"created_at":"2024-03-24T10:45:07Z","created_at_i":1711277107,"num_comments":0,"objectID":"39806310","points":6,"story_id":39806310,"title":"Claude and ChatGPT for ad-hoc sidequests","updated_at":"2024-03-24T19:26:51Z","url":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building and testing C Extensions for SQLite with ChatGPT Code Interpreter"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/23/building-c-extensions-for-sqlite-with-chatgpt-code-interpreter/"}},"_tags":["story","author_simonw","story_39801938"],"author":"simonw","children":[39811486,39805506,39801972],"created_at":"2024-03-23T18:13:19Z","created_at_i":1711217599,"num_comments":2,"objectID":"39801938","points":4,"story_id":39801938,"title":"Building and testing C Extensions for SQLite with ChatGPT Code Interpreter","updated_at":"2024-03-24T23:31:37Z","url":"https://simonwillison.net/2024/Mar/23/building-c-extensions-for-sqlite-with-chatgpt-code-interpreter/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ridruejo"},"title":{"matchLevel":"none","matchedWords":[],"value":"Claude and ChatGPT Case Study"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"}},"_tags":["story","author_ridruejo","story_39798207"],"author":"ridruejo","created_at":"2024-03-23T07:44:25Z","created_at_i":1711179865,"num_comments":0,"objectID":"39798207","points":4,"story_id":39798207,"title":"Claude and ChatGPT Case Study","updated_at":"2024-03-23T17:59:02Z","url":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Claude and ChatGPT for ad-hoc tasks"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"}},"_tags":["story","author_simonw","story_39794179"],"author":"simonw","children":[39796319,39794479],"created_at":"2024-03-22T19:54:47Z","created_at_i":1711137287,"num_comments":1,"objectID":"39794179","points":6,"story_id":39794179,"title":"Claude and ChatGPT for ad-hoc tasks","updated_at":"2024-03-28T20:26:08Z","url":"https://simonwillison.net/2024/Mar/22/claude-and-chatgpt-case-study/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"wanderingmind"},"title":{"matchLevel":"none","matchedWords":[],"value":"Google Scholar search: \"certainly, here is\" -chatgpt -llm"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/15/certainly-here-is-google-scholar/"}},"_tags":["story","author_wanderingmind","story_39733605"],"author":"wanderingmind","children":[39733882,39734578,39734039,39734620,39733847,39733757,39734666,39733736,39734678,39734396,39733914,39736105,39733791,39733758,39734429,39735402,39734527,39734428,39733909,39733792,39734464,39734594,39733724,39734323,39733807,39733734,39733893,39733861,39734361,39733943,39733956,39734013],"created_at":"2024-03-17T11:14:56Z","created_at_i":1710674096,"num_comments":94,"objectID":"39733605","points":194,"story_id":39733605,"title":"Google Scholar search: \"certainly, here is\" -chatgpt -llm","updated_at":"2024-03-24T17:51:37Z","url":"https://simonwillison.net/2024/Mar/15/certainly-here-is-google-scholar/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Four new models that are benchmarking near or above GPT-4"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/8/gpt-4-barrier/"}},"_tags":["story","author_simonw","story_39643894"],"author":"simonw","children":[39647532,39644363,39645084,39644179,39644295,39644276,39644305,39644222,39644216,39644584,39644230,39644159,39644206,39644244,39644219,39645423,39644123,39644267],"created_at":"2024-03-08T18:05:58Z","created_at_i":1709921158,"num_comments":34,"objectID":"39643894","points":66,"story_id":39643894,"title":"Four new models that are benchmarking near or above GPT-4","updated_at":"2024-03-12T18:52:04Z","url":"https://simonwillison.net/2024/Mar/8/gpt-4-barrier/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Prompt injection and jailbreaking are not the same thing"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/5/prompt-injection-jailbreaking/"}},"_tags":["story","author_simonw","story_39605438"],"author":"simonw","children":[39606551,39605677],"created_at":"2024-03-05T16:10:20Z","created_at_i":1709655020,"num_comments":11,"objectID":"39605438","points":40,"story_id":39605438,"title":"Prompt injection and jailbreaking are not the same thing","updated_at":"2024-03-08T00:04:16Z","url":"https://simonwillison.net/2024/Mar/5/prompt-injection-jailbreaking/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Interesting ideas in Observable Framework"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Mar/3/interesting-ideas-in-observable-framework/"}},"_tags":["story","author_simonw","story_39582745"],"author":"simonw","children":[39584536,39585045,39585042,39584666,39586044,39586178,39587691,39587205,39608334,39585385,39584574,39591333,39585837,39593183,39593475,39586352,39586016,39586503],"created_at":"2024-03-03T18:01:13Z","created_at_i":1709488873,"num_comments":63,"objectID":"39582745","points":360,"story_id":39582745,"title":"Interesting ideas in Observable Framework","updated_at":"2024-03-20T14:43:37Z","url":"https://simonwillison.net/2024/Mar/3/interesting-ideas-in-observable-framework/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"The killer app of Gemini Pro 1.5 is using video as an input"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Feb/21/gemini-pro-video/"}},"_tags":["story","author_simonw","story_39458264"],"author":"simonw","children":[39458355,39461911,39461085,39459696,39458775,39458991,39459550,39459913,39458696,39459718,39461521,39462986,39459323,39465106,39479682,39459311,39458638,39461125,39459874,39460326,39459345,39459615,39459349,39465472,39460529,39464587,39465393,39460105,39464187,39459465,39459662,39460799,39458521,39459090,39459185,39459273,39461071,39462704,39459244,39459510,39460928,39458947,39458606,39468811,39460236,39461998,39459694,39458778,39459656,39462002,39460452,39460040,39468848,39459624,39463923,39460161,39462966,39461179,39462057,39462184,39458594,39464920,39464853,39459040,39459742,39560278,39459114,39460378,39462287,39461494,39458764,39460517,39461063,39460665,39459764,39459589,39460572,39459186,39465310,39459324,39460646,39458950],"created_at":"2024-02-21T19:23:06Z","created_at_i":1708543386,"num_comments":484,"objectID":"39458264","points":1136,"story_id":39458264,"title":"The killer app of Gemini Pro 1.5 is using video as an input","updated_at":"2024-03-23T16:07:32Z","url":"https://simonwillison.net/2024/Feb/21/gemini-pro-video/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Glench"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running a scheduled function on ValTown to import Atom feeds into Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/valtown/scheduled"}},"_tags":["story","author_Glench","story_39457759"],"author":"Glench","created_at":"2024-02-21T18:45:30Z","created_at_i":1708541130,"num_comments":0,"objectID":"39457759","points":2,"story_id":39457759,"title":"Running a scheduled function on ValTown to import Atom feeds into Datasette","updated_at":"2024-02-21T20:32:31Z","url":"https://til.simonwillison.net/valtown/scheduled"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running Ethernet over existing coaxial cable"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/networking/ethernet-over-coaxial-cable"}},"_tags":["story","author_edward","story_39358222"],"author":"edward","children":[39358305,39358415],"created_at":"2024-02-13T15:03:07Z","created_at_i":1707836587,"num_comments":2,"objectID":"39358222","points":2,"story_id":39358222,"title":"Running Ethernet over existing coaxial cable","updated_at":"2024-02-13T16:07:42Z","url":"https://til.simonwillison.net/networking/ethernet-over-coaxial-cable"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"finallyy"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running Ethernet over existing coaxial cable"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/networking/ethernet-over-coaxial-cable"}},"_tags":["story","author_finallyy","story_39355041"],"author":"finallyy","children":[39360505,39356671,39360169,39357069,39356855,39356820,39360053,39363060,39374968,39374693,39374517,39378924,39374764,39374625,39374905],"created_at":"2024-02-13T06:15:46Z","created_at_i":1707804946,"num_comments":63,"objectID":"39355041","points":45,"story_id":39355041,"title":"Running Ethernet over existing coaxial cable","updated_at":"2024-02-26T05:26:16Z","url":"https://til.simonwillison.net/networking/ethernet-over-coaxial-cable"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ekiauhce"},"title":{"matchLevel":"none","matchedWords":[],"value":"Copy Rich Text to the Clipboard"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/javascript/copy-rich-text-to-clipboard"}},"_tags":["story","author_ekiauhce","story_39253368"],"author":"ekiauhce","created_at":"2024-02-04T19:14:38Z","created_at_i":1707074078,"num_comments":0,"objectID":"39253368","points":3,"story_id":39253368,"title":"Copy Rich Text to the Clipboard","updated_at":"2024-02-04T20:34:08Z","url":"https://til.simonwillison.net/javascript/copy-rich-text-to-clipboard"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"gone35"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring ColBERT with RAGatouille"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/colbert-ragatouille"}},"_tags":["story","author_gone35","story_39174324"],"author":"gone35","created_at":"2024-01-29T09:14:45Z","created_at_i":1706519685,"num_comments":0,"objectID":"39174324","points":1,"story_id":39174324,"title":"Exploring ColBERT with RAGatouille","updated_at":"2024-01-29T09:17:10Z","url":"https://til.simonwillison.net/llms/colbert-ragatouille"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring ColBERT with RAGatouille"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/colbert-ragatouille"}},"_tags":["story","author_simonw","story_39167570"],"author":"simonw","created_at":"2024-01-28T17:02:55Z","created_at_i":1706461375,"num_comments":0,"objectID":"39167570","points":2,"story_id":39167570,"title":"Exploring ColBERT with RAGatouille","updated_at":"2024-01-28T18:37:28Z","url":"https://til.simonwillison.net/llms/colbert-ragatouille"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Talking about Open Source LLMs on Oxide and Friends"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Jan/17/oxide-and-friends/"}},"_tags":["story","author_tosh","story_39154500"],"author":"tosh","created_at":"2024-01-27T10:56:33Z","created_at_i":1706352993,"num_comments":0,"objectID":"39154500","points":2,"story_id":39154500,"title":"Talking about Open Source LLMs on Oxide and Friends","updated_at":"2024-01-27T22:09:50Z","url":"https://simonwillison.net/2024/Jan/17/oxide-and-friends/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"takemine"},"title":{"matchLevel":"none","matchedWords":[],"value":"It's OK to call it Artificial Intelligence"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Jan/7/call-it-ai/"}},"_tags":["story","author_takemine","story_38907696"],"author":"takemine","created_at":"2024-01-08T02:52:59Z","created_at_i":1704682379,"num_comments":0,"objectID":"38907696","points":3,"story_id":38907696,"title":"It's OK to call it Artificial Intelligence","updated_at":"2024-01-08T03:46:28Z","url":"https://simonwillison.net/2024/Jan/7/call-it-ai/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"helloplanets"},"title":{"matchLevel":"none","matchedWords":[],"value":"It's OK to call it Artificial Intelligence"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Jan/7/call-it-ai/"}},"_tags":["story","author_helloplanets","story_38899865"],"author":"helloplanets","children":[38905519,38903819,38900343,38905957,38904829,38908204,38908634],"created_at":"2024-01-07T09:39:46Z","created_at_i":1704620386,"num_comments":15,"objectID":"38899865","points":26,"story_id":38899865,"title":"It's OK to call it Artificial Intelligence","updated_at":"2024-01-13T21:37:52Z","url":"https://simonwillison.net/2024/Jan/7/call-it-ai/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"It's OK to call it Artificial Intelligence"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Jan/7/call-it-ai/"}},"_tags":["story","author_simonw","story_38897131"],"author":"simonw","children":[38897451,38897299,38897425,38897706],"created_at":"2024-01-07T00:39:57Z","created_at_i":1704587997,"num_comments":4,"objectID":"38897131","points":5,"story_id":38897131,"title":"It's OK to call it Artificial Intelligence","updated_at":"2024-01-07T11:08:26Z","url":"https://simonwillison.net/2024/Jan/7/call-it-ai/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"sebg"},"title":{"matchLevel":"none","matchedWords":[],"value":"Tom Scott, and the formidable power of escalating streaks"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Jan/2/escalating-streaks/"}},"_tags":["story","author_sebg","story_38866945"],"author":"sebg","created_at":"2024-01-04T13:51:25Z","created_at_i":1704376285,"num_comments":0,"objectID":"38866945","points":2,"story_id":38866945,"title":"Tom Scott, and the formidable power of escalating streaks","updated_at":"2024-01-04T19:58:46Z","url":"https://simonwillison.net/2024/Jan/2/escalating-streaks/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Tom Scott, and the formidable power of escalating streaks"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2024/Jan/2/escalating-streaks/"}},"_tags":["story","author_simonw","story_38847086"],"author":"simonw","children":[38848900,38848173],"created_at":"2024-01-02T20:58:11Z","created_at_i":1704229091,"num_comments":2,"objectID":"38847086","points":7,"story_id":38847086,"title":"Tom Scott, and the formidable power of escalating streaks","updated_at":"2024-01-07T06:34:25Z","url":"https://simonwillison.net/2024/Jan/2/escalating-streaks/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Stuff we figured out about AI in 2023"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Dec/31/ai-in-2023/"}},"_tags":["story","author_simonw","story_38828594"],"author":"simonw","children":[38830373,38830198,38831368,38831004,38830365,38831218,38830911,38830499,38832568,38830735,38831405,38831997,38838069,38830332,38830651],"created_at":"2024-01-01T00:08:38Z","created_at_i":1704067718,"num_comments":132,"objectID":"38828594","points":210,"story_id":38828594,"title":"Stuff we figured out about AI in 2023","updated_at":"2024-03-05T06:25:19Z","url":"https://simonwillison.net/2023/Dec/31/ai-in-2023/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"judell"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running Steampipe extensions in SQLite-utils and Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/sqlite/steampipe"}},"_tags":["story","author_judell","story_38722242"],"author":"judell","children":[38722243],"created_at":"2023-12-21T16:05:09Z","created_at_i":1703174709,"num_comments":1,"objectID":"38722242","points":12,"story_id":38722242,"title":"Running Steampipe extensions in SQLite-utils and Datasette","updated_at":"2024-01-08T03:08:44Z","url":"https://til.simonwillison.net/sqlite/steampipe"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Many options for running Mistral models in your terminal using LLM"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Dec/18/mistral/"}},"_tags":["story","author_simonw","story_38686221"],"author":"simonw","children":[38688806,38687647,38688537,38687654,38688556,38691164,38704250,38692636,38693653,38688755,38699563,38688319,38687612],"created_at":"2023-12-18T18:27:35Z","created_at_i":1702924055,"num_comments":99,"objectID":"38686221","points":215,"story_id":38686221,"title":"Many options for running Mistral models in your terminal using LLM","updated_at":"2024-01-17T15:50:52Z","url":"https://simonwillison.net/2023/Dec/18/mistral/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"The AI Trust Crisis"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Dec/14/ai-trust-crisis/"}},"_tags":["story","author_simonw","story_38643046"],"author":"simonw","children":[38643556,38645862,38645136,38644238,38643423,38646500,38646898,38643851,38646455,38646532,38646127,38644660,38645157,38644193,38646424,38645182,38643672,38644012,38643687,38643792,38647299,38643482,38646046,38645206,38644893,38647495,38646829,38647253,38655863,38645582,38645492,38643864,38643456,38646164,38647122,38645092,38643838,38647322,38644030,38643595,38644091,38644896,38644167,38645300,38643573,38644740,38644579,38643821,38645331,38646560,38645195,38647080,38644353,38645410,38646629,38647278,38646707,38646260,38647226,38649060,38645855,38644891,38646520,38644219,38646057,38643510,38645000,38644809,38645818,38644717],"created_at":"2023-12-14T16:22:36Z","created_at_i":1702570956,"num_comments":276,"objectID":"38643046","points":317,"story_id":38643046,"title":"The AI Trust Crisis","updated_at":"2024-02-20T02:51:06Z","url":"https://simonwillison.net/2023/Dec/14/ai-trust-crisis/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"PaulHoule"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette Enrichments: a new plugin framework for augmenting your data"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Dec/1/datasette-enrichments/"}},"_tags":["story","author_PaulHoule","story_38571019"],"author":"PaulHoule","created_at":"2023-12-08T16:44:49Z","created_at_i":1702053889,"num_comments":0,"objectID":"38571019","points":2,"story_id":38571019,"title":"Datasette Enrichments: a new plugin framework for augmenting your data","updated_at":"2023-12-08T17:10:27Z","url":"https://simonwillison.net/2023/Dec/1/datasette-enrichments/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"wrycoder"},"title":{"matchLevel":"none","matchedWords":[],"value":"Catching Up with the Cosmopolitan Ecosystem"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/cosmopolitan/ecosystem"}},"_tags":["story","author_wrycoder","story_38535472"],"author":"wrycoder","children":[38535493],"created_at":"2023-12-05T19:08:07Z","created_at_i":1701803287,"num_comments":1,"objectID":"38535472","points":26,"story_id":38535472,"title":"Catching Up with the Cosmopolitan Ecosystem","updated_at":"2024-02-01T04:42:07Z","url":"https://til.simonwillison.net/cosmopolitan/ecosystem"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"colinbartlett"},"title":{"matchLevel":"none","matchedWords":[],"value":"Llamafile is the new best way to run a LLM on your own computer"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Nov/29/llamafile/"}},"_tags":["story","author_colinbartlett","story_38525645"],"author":"colinbartlett","children":[38527384],"created_at":"2023-12-05T00:57:03Z","created_at_i":1701737823,"num_comments":1,"objectID":"38525645","points":8,"story_id":38525645,"title":"Llamafile is the new best way to run a LLM on your own computer","updated_at":"2023-12-06T00:42:32Z","url":"https://simonwillison.net/2023/Nov/29/llamafile/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette Enrichments: a new plugin framework for augmenting your data"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Dec/1/datasette-enrichments/"}},"_tags":["story","author_simonw","story_38493628"],"author":"simonw","created_at":"2023-12-01T22:48:15Z","created_at_i":1701470895,"num_comments":0,"objectID":"38493628","points":4,"story_id":38493628,"title":"Datasette Enrichments: a new plugin framework for augmenting your data","updated_at":"2023-12-06T06:23:32Z","url":"https://simonwillison.net/2023/Dec/1/datasette-enrichments/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"djha-skin"},"title":{"matchLevel":"none","matchedWords":[],"value":"Llamafile is the new best way to run a LLM on your own computer"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2023/Nov/29/llamafile/"}},"_tags":["story","author_djha-skin","story_38489533"],"author":"djha-skin","children":[38490421,38490938,38491726,38492334,38616014,38490716,38527594,38490942,38492228,38491696,38491714,38492916,38492911,38490616],"created_at":"2023-12-01T17:36:50Z","created_at_i":1701452210,"num_comments":47,"objectID":"38489533","points":195,"story_id":38489533,"title":"Llamafile is the new best way to run a LLM on your own computer","updated_at":"2024-02-28T12:54:41Z","url":"http://simonwillison.net/2023/Nov/29/llamafile/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"alexzeitler"},"title":{"matchLevel":"none","matchedWords":[],"value":"Llamafile is the new best way to run a LLM on your own computer"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Nov/29/llamafile/"}},"_tags":["story","author_alexzeitler","story_38483908"],"author":"alexzeitler","children":[38486089],"created_at":"2023-12-01T06:44:40Z","created_at_i":1701413080,"num_comments":1,"objectID":"38483908","points":3,"story_id":38483908,"title":"Llamafile is the new best way to run a LLM on your own computer","updated_at":"2023-12-01T12:51:15Z","url":"https://simonwillison.net/2023/Nov/29/llamafile/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Anon84"},"title":{"matchLevel":"none","matchedWords":[],"value":"Llamafile is the new best way to run a LLM on your own computer"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Nov/29/llamafile/"}},"_tags":["story","author_Anon84","story_38472936"],"author":"Anon84","created_at":"2023-11-30T13:01:10Z","created_at_i":1701349270,"num_comments":0,"objectID":"38472936","points":2,"story_id":38472936,"title":"Llamafile is the new best way to run a LLM on your own computer","updated_at":"2023-11-30T16:19:30Z","url":"https://simonwillison.net/2023/Nov/29/llamafile/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"atg_abhishek"},"title":{"matchLevel":"none","matchedWords":[],"value":"Cryptography in Pyiodide"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/pyodide/cryptography-in-pyodide"}},"_tags":["story","author_atg_abhishek","story_38429182"],"author":"atg_abhishek","created_at":"2023-11-27T07:23:01Z","created_at_i":1701069781,"num_comments":0,"objectID":"38429182","points":2,"story_id":38429182,"title":"Cryptography in Pyiodide","updated_at":"2023-11-27T08:16:13Z","url":"https://til.simonwillison.net/pyodide/cryptography-in-pyodide"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"meatjuice"},"title":{"matchLevel":"none","matchedWords":[],"value":"Fleet Context: ChatGPT with top 1221 popular python libraries"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2023/Nov/23/fleet-context/#atom-everything"}},"_tags":["story","author_meatjuice","story_38390789"],"author":"meatjuice","created_at":"2023-11-23T08:49:42Z","created_at_i":1700729382,"num_comments":0,"objectID":"38390789","points":2,"story_id":38390789,"title":"Fleet Context: ChatGPT with top 1221 popular python libraries","updated_at":"2023-11-23T11:19:27Z","url":"http://simonwillison.net/2023/Nov/23/fleet-context/#atom-everything"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Deciphering clues in a news article to understand how it was reported"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Nov/22/deciphering-clues/"}},"_tags":["story","author_simonw","story_38373709"],"author":"simonw","created_at":"2023-11-22T02:07:59Z","created_at_i":1700618879,"num_comments":0,"objectID":"38373709","points":12,"story_id":38373709,"title":"Deciphering clues in a news article to understand how it was reported","updated_at":"2023-11-22T20:17:11Z","url":"https://simonwillison.net/2023/Nov/22/deciphering-clues/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Add a Walrus"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Nov/15/gpts/#add-a-walrus"}},"_tags":["story","author_tosh","story_38287731"],"author":"tosh","created_at":"2023-11-16T10:14:30Z","created_at_i":1700129670,"num_comments":0,"objectID":"38287731","points":3,"story_id":38287731,"title":"Add a Walrus","updated_at":"2023-11-16T12:44:29Z","url":"https://simonwillison.net/2023/Nov/15/gpts/#add-a-walrus"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring GPTs: ChatGPT in a trench coat?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Nov/15/gpts/"}},"_tags":["story","author_simonw","story_38277926"],"author":"simonw","children":[38279167,38283688,38279668,38280538,38281394,38283596,38279571,38279584,38278782,38280072,38284921,38281110,38280733,38278775,38279746,38278999,38279907,38278868,38282141,38286812,38284223,38288325,38279699,38281528,38279095,38280886,38281812,38278913,38279575,38282177,38284452,38283706,38279305,38284036,38283645,38281245,38282687,38279006,38298642,38287624,38281260,38287421,38286182,38280643,38306976,38281884,38285990,38279002,38279968,38280065],"created_at":"2023-11-15T15:44:23Z","created_at_i":1700063063,"num_comments":203,"objectID":"38277926","points":503,"story_id":38277926,"title":"Exploring GPTs: ChatGPT in a trench coat?","updated_at":"2024-03-11T02:00:43Z","url":"https://simonwillison.net/2023/Nov/15/gpts/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"severo_bo"},"title":{"matchLevel":"none","matchedWords":[],"value":"Summing columns in remote Parquet files using DuckDB"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/duckdb/remote-parquet"}},"_tags":["story","author_severo_bo","story_38277706"],"author":"severo_bo","children":[38299717],"created_at":"2023-11-15T15:29:57Z","created_at_i":1700062197,"num_comments":1,"objectID":"38277706","points":4,"story_id":38277706,"title":"Summing columns in remote Parquet files using DuckDB","updated_at":"2023-12-01T02:41:57Z","url":"https://til.simonwillison.net/duckdb/remote-parquet"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Summing columns in remote Parquet files using DuckDB"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/duckdb/remote-parquet"}},"_tags":["story","author_simonw","story_38271082"],"author":"simonw","children":[38297760,38271190,38298799,38271126,38301194,38298989,38300209,38304938,38297999,38299767,38298875,38298309],"created_at":"2023-11-14T23:03:08Z","created_at_i":1700002988,"num_comments":75,"objectID":"38271082","points":146,"story_id":38271082,"title":"Summing columns in remote Parquet files using DuckDB","updated_at":"2024-03-14T15:19:43Z","url":"https://til.simonwillison.net/duckdb/remote-parquet"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"liumaiyi"},"title":{"matchLevel":"none","matchedWords":[],"value":"The point of \"Open\" in OpenID (2008)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2008/Jun/24/openid/"}},"_tags":["story","author_liumaiyi","story_38247810"],"author":"liumaiyi","created_at":"2023-11-13T07:21:40Z","created_at_i":1699860100,"num_comments":0,"objectID":"38247810","points":2,"story_id":38247810,"title":"The point of \"Open\" in OpenID (2008)","updated_at":"2023-11-13T09:45:17Z","url":"https://simonwillison.net/2008/Jun/24/openid/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"yeesian"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using llama-cpp-Python grammars to generate JSON"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/llama-cpp-python-grammars"}},"_tags":["story","author_yeesian","story_38190443"],"author":"yeesian","created_at":"2023-11-08T14:05:22Z","created_at_i":1699452322,"num_comments":0,"objectID":"38190443","points":2,"story_id":38190443,"title":"Using llama-cpp-Python grammars to generate JSON","updated_at":"2023-11-08T14:17:53Z","url":"https://til.simonwillison.net/llms/llama-cpp-python-grammars"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Ospeak: A CLI tool for speaking text in the terminal via OpenAI"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Nov/7/ospeak/"}},"_tags":["story","author_edward","story_38182236"],"author":"edward","created_at":"2023-11-07T20:21:07Z","created_at_i":1699388467,"num_comments":0,"objectID":"38182236","points":3,"story_id":38182236,"title":"Ospeak: A CLI tool for speaking text in the terminal via OpenAI","updated_at":"2023-11-07T22:27:22Z","url":"https://simonwillison.net/2023/Nov/7/ospeak/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"meatjuice"},"title":{"matchLevel":"none","matchedWords":[],"value":"Ospeak: A CLI tool for speaking text in the terminal via OpenAI"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2023/Nov/7/ospeak/#atom-everything"}},"_tags":["story","author_meatjuice","story_38174249"],"author":"meatjuice","created_at":"2023-11-07T07:49:05Z","created_at_i":1699343345,"num_comments":0,"objectID":"38174249","points":1,"story_id":38174249,"title":"Ospeak: A CLI tool for speaking text in the terminal via OpenAI","updated_at":"2023-11-07T20:22:59Z","url":"http://simonwillison.net/2023/Nov/7/ospeak/#atom-everything"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"raybb"},"title":{"matchLevel":"none","matchedWords":[],"value":"DALL-E 3, GPT4All, PMTiles, SQLite-migrate, datasette-edit-schema"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Oct/30/weeknotes/"}},"_tags":["story","author_raybb","story_38078200"],"author":"raybb","created_at":"2023-10-31T00:38:46Z","created_at_i":1698712726,"num_comments":0,"objectID":"38078200","points":2,"story_id":38078200,"title":"DALL-E 3, GPT4All, PMTiles, SQLite-migrate, datasette-edit-schema","updated_at":"2023-10-31T02:03:37Z","url":"https://simonwillison.net/2023/Oct/30/weeknotes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Now add a walrus: Prompt engineering in DALL-E 3"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Oct/26/add-a-walrus/"}},"_tags":["story","author_simonw","story_38031839"],"author":"simonw","children":[38033479,38033969,38033007,38033182,38034491,38038401,38033461,38035488,38033024,38033457,38036817,38037130,38033455,38039674,38036860,38033303,38037025,38033534],"created_at":"2023-10-26T21:19:22Z","created_at_i":1698355162,"num_comments":72,"objectID":"38031839","points":288,"story_id":38031839,"title":"Now add a walrus: Prompt engineering in DALL-E 3","updated_at":"2023-12-12T18:00:59Z","url":"https://simonwillison.net/2023/Oct/26/add-a-walrus/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"gilad"},"title":{"matchLevel":"none","matchedWords":[],"value":"Things I've learned about building CLI tools in Python"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Sep/30/cli-tools-python/"}},"_tags":["story","author_gilad","story_38008987"],"author":"gilad","children":[38009649,38009441,38009672,38009446,38009464,38009345,38011650,38009483,38009768,38009890,38011692,38009540,38009487,38023444,38010109],"created_at":"2023-10-25T03:59:49Z","created_at_i":1698206389,"num_comments":83,"objectID":"38008987","points":123,"story_id":38008987,"title":"Things I've learned about building CLI tools in Python","updated_at":"2024-01-12T16:16:03Z","url":"https://simonwillison.net/2023/Sep/30/cli-tools-python/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mpweiher"},"title":{"matchLevel":"none","matchedWords":[],"value":"Embeddings: What they are and why they matter"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Oct/23/embeddings/"}},"_tags":["story","author_mpweiher","story_38006251"],"author":"mpweiher","created_at":"2023-10-24T21:58:24Z","created_at_i":1698184704,"num_comments":0,"objectID":"38006251","points":4,"story_id":38006251,"title":"Embeddings: What they are and why they matter","updated_at":"2023-10-25T05:15:01Z","url":"https://simonwillison.net/2023/Oct/23/embeddings/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"rrampage"},"title":{"matchLevel":"none","matchedWords":[],"value":"Embeddings: What they are and why they matter"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Oct/23/embeddings/"}},"_tags":["story","author_rrampage","story_37998983"],"author":"rrampage","created_at":"2023-10-24T13:35:42Z","created_at_i":1698154542,"num_comments":0,"objectID":"37998983","points":10,"story_id":37998983,"title":"Embeddings: What they are and why they matter","updated_at":"2023-10-26T17:36:02Z","url":"https://simonwillison.net/2023/Oct/23/embeddings/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"jonbaer"},"title":{"matchLevel":"none","matchedWords":[],"value":"Embeddings: What they are and why they matter"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Oct/23/embeddings/"}},"_tags":["story","author_jonbaer","story_37993985"],"author":"jonbaer","children":[37995054],"created_at":"2023-10-24T01:42:02Z","created_at_i":1698111722,"num_comments":1,"objectID":"37993985","points":1,"story_id":37993985,"title":"Embeddings: What they are and why they matter","updated_at":"2023-10-24T05:22:57Z","url":"https://simonwillison.net/2023/Oct/23/embeddings/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Embeddings: What they are and why they matter"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Oct/23/embeddings/"}},"_tags":["story","author_simonw","story_37985489"],"author":"simonw","children":[38008786,38009896,38009039,38010616,38011238,37988568,38011947,38009615,38015385,38009308,38008937,38014351,38009852,38010870,38009720,37987675,38010587,38014717,38010488,38022619,38085024,38011411,38018459,38012933,38010809,38010025,38013674,38011429,38010358,38008856,38011586,38009553,38013813,38014807,38011668,38012242],"created_at":"2023-10-23T13:42:12Z","created_at_i":1698068532,"num_comments":131,"objectID":"37985489","points":668,"story_id":37985489,"title":"Embeddings: What they are and why they matter","updated_at":"2024-03-28T06:04:50Z","url":"https://simonwillison.net/2023/Oct/23/embeddings/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"udev4096"},"title":{"matchLevel":"none","matchedWords":[],"value":"Open Questions for AI Engineering"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Oct/17/open-questions/"}},"_tags":["story","author_udev4096","story_37917668"],"author":"udev4096","created_at":"2023-10-17T16:32:47Z","created_at_i":1697560367,"num_comments":0,"objectID":"37917668","points":23,"story_id":37917668,"title":"Open Questions for AI Engineering","updated_at":"2023-10-19T18:46:27Z","url":"https://simonwillison.net/2023/Oct/17/open-questions/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Multi-modal prompt injection image attacks against GPT-4V"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Oct/14/multi-modal-prompt-injection/"}},"_tags":["story","author_simonw","story_37877605"],"author":"simonw","children":[37879942,37880169,37881045,37880570,37878805,37881695,37879687,37880003],"created_at":"2023-10-14T02:26:40Z","created_at_i":1697250400,"num_comments":67,"objectID":"37877605","points":222,"story_id":37877605,"title":"Multi-modal prompt injection image attacks against GPT-4V","updated_at":"2023-11-01T20:06:14Z","url":"https://simonwillison.net/2023/Oct/14/multi-modal-prompt-injection/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Things I\u2019ve learned about building CLI tools in Python"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Sep/30/cli-tools-python/"}},"_tags":["story","author_chmaynard","story_37711756"],"author":"chmaynard","created_at":"2023-09-30T00:32:18Z","created_at_i":1696033938,"num_comments":0,"objectID":"37711756","points":5,"story_id":37711756,"title":"Things I\u2019ve learned about building CLI tools in Python","updated_at":"2023-10-18T01:52:50Z","url":"https://simonwillison.net/2023/Sep/30/cli-tools-python/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Geospatial SQL queries in SQLite using TG, SQLite-tg and datasette-SQLite-tg"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/sqlite/sqlite-tg"}},"_tags":["story","author_simonw","story_37649868"],"author":"simonw","children":[37651288],"created_at":"2023-09-25T20:09:11Z","created_at_i":1695672551,"num_comments":1,"objectID":"37649868","points":5,"story_id":37649868,"title":"Geospatial SQL queries in SQLite using TG, SQLite-tg and datasette-SQLite-tg","updated_at":"2023-09-27T07:36:55Z","url":"https://til.simonwillison.net/sqlite/sqlite-tg"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"genericlemon24"},"title":{"matchLevel":"none","matchedWords":[],"value":"CPython Implements and Uses Bloom Filters for String Processing"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2023/Sep/16/how-cpython-implements-and-uses-bloom-filters-for-string-process/#atom-blogmarks"}},"_tags":["story","author_genericlemon24","story_37541681"],"author":"genericlemon24","created_at":"2023-09-17T05:02:20Z","created_at_i":1694926940,"num_comments":0,"objectID":"37541681","points":3,"story_id":37541681,"title":"CPython Implements and Uses Bloom Filters for String Processing","updated_at":"2023-09-17T18:39:05Z","url":"http://simonwillison.net/2023/Sep/16/how-cpython-implements-and-uses-bloom-filters-for-string-process/#atom-blogmarks"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"theptip"},"title":{"matchLevel":"none","matchedWords":[],"value":"Notes from building a blog in Django"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/django/building-a-blog-in-django"}},"_tags":["story","author_theptip","story_37482220"],"author":"theptip","children":[37484192,37484490,37485431,37493428,37486365,37484244,37484033,37485627,37484007,37491813,37518953,37493844,37485503,37485294,37492299,37487921,37484914,37483801,37484709,37490439,37491000,37489363,37484074,37483902,37484675,37483298,37484351,37484322],"created_at":"2023-09-12T14:53:36Z","created_at_i":1694530416,"num_comments":136,"objectID":"37482220","points":214,"story_id":37482220,"title":"Notes from building a blog in Django","updated_at":"2024-03-20T15:13:38Z","url":"https://til.simonwillison.net/django/building-a-blog-in-django"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Summarizing Hacker News Discussion Themes with Claude and LLM"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/claude-hacker-news-themes"}},"_tags":["story","author_simonw","story_37458122"],"author":"simonw","created_at":"2023-09-10T17:42:25Z","created_at_i":1694367745,"num_comments":0,"objectID":"37458122","points":3,"story_id":37458122,"title":"Summarizing Hacker News Discussion Themes with Claude and LLM","updated_at":"2023-09-11T11:57:16Z","url":"https://til.simonwillison.net/llms/claude-hacker-news-themes"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"pieterr"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using SQL to find my best photo of a pelican according to Apple Photos"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/May/21/dogsheep-photos/"}},"_tags":["story","author_pieterr","story_37423081"],"author":"pieterr","created_at":"2023-09-07T18:05:48Z","created_at_i":1694109948,"num_comments":0,"objectID":"37423081","points":1,"story_id":37423081,"title":"Using SQL to find my best photo of a pelican according to Apple Photos","updated_at":"2023-09-07T18:10:14Z","url":"https://simonwillison.net/2020/May/21/dogsheep-photos/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"LLM Python/CLI tool adds support for embeddings"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Sep/4/llm-embeddings/"}},"_tags":["story","author_simonw","story_37384797"],"author":"simonw","children":[37385649,37386002,37385818,37389396,37388667,37385719,37386400,37386558,37386951,37389826,37403577,37389473,37385714],"created_at":"2023-09-04T20:37:49Z","created_at_i":1693859869,"num_comments":46,"objectID":"37384797","points":161,"story_id":37384797,"title":"LLM Python/CLI tool adds support for embeddings","updated_at":"2023-09-12T06:49:48Z","url":"https://simonwillison.net/2023/Sep/4/llm-embeddings/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Making Large Language Models work for you"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Aug/27/wordcamp-llms/"}},"_tags":["story","author_Tomte","story_37283391"],"author":"Tomte","children":[37289794],"created_at":"2023-08-27T15:06:35Z","created_at_i":1693148795,"num_comments":1,"objectID":"37283391","points":38,"story_id":37283391,"title":"Making Large Language Models work for you","updated_at":"2023-10-12T17:09:15Z","url":"https://simonwillison.net/2023/Aug/27/wordcamp-llms/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"atomlib"},"title":{"matchLevel":"none","matchedWords":[],"value":"Downloading partial YouTube videos with FFmpeg"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/macos/downloading-partial-youtube-videos"}},"_tags":["story","author_atomlib","story_37280873"],"author":"atomlib","created_at":"2023-08-27T09:17:28Z","created_at_i":1693127848,"num_comments":0,"objectID":"37280873","points":3,"story_id":37280873,"title":"Downloading partial YouTube videos with FFmpeg","updated_at":"2024-01-13T09:56:19Z","url":"https://til.simonwillison.net/macos/downloading-partial-youtube-videos"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Storing and serving related documents with OpenAI-to-SQLite and embeddings"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/openai-embeddings-related-content"}},"_tags":["story","author_simonw","story_37163465"],"author":"simonw","created_at":"2023-08-17T15:46:27Z","created_at_i":1692287187,"num_comments":0,"objectID":"37163465","points":1,"story_id":37163465,"title":"Storing and serving related documents with OpenAI-to-SQLite and embeddings","updated_at":"2023-09-07T13:48:51Z","url":"https://til.simonwillison.net/llms/openai-embeddings-related-content"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chazeon"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building a Blog in Django"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/django/building-a-blog-in-django"}},"_tags":["story","author_chazeon","story_37137454"],"author":"chazeon","created_at":"2023-08-15T18:24:44Z","created_at_i":1692123884,"num_comments":0,"objectID":"37137454","points":1,"story_id":37137454,"title":"Building a Blog in Django","updated_at":"2023-09-07T13:46:16Z","url":"https://til.simonwillison.net/django/building-a-blog-in-django"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"wrycoder"},"title":{"matchLevel":"none","matchedWords":[],"value":"Catching up with the Cosmopolitan ecosystem"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/cosmopolitan/ecosystem"}},"_tags":["story","author_wrycoder","story_37090181"],"author":"wrycoder","children":[37090253],"created_at":"2023-08-11T15:59:23Z","created_at_i":1691769563,"num_comments":1,"objectID":"37090181","points":1,"story_id":37090181,"title":"Catching up with the Cosmopolitan ecosystem","updated_at":"2023-12-01T21:14:17Z","url":"https://til.simonwillison.net/cosmopolitan/ecosystem"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ekiauhce"},"title":{"matchLevel":"none","matchedWords":[],"value":"Git scraping: track changes over time by scraping to a Git repository (2020)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Oct/9/git-scraping/"}},"_tags":["story","author_ekiauhce","story_37082289"],"author":"ekiauhce","children":[37083019,37083831,37083245,37082878,37085372,37082970,37082964,37087331,37083829,37084003,37086629,37086104,37087695,37084344,37084699,37086610,37084286,37094532,37085201,37084081,37084966],"created_at":"2023-08-10T21:57:24Z","created_at_i":1691704644,"num_comments":66,"objectID":"37082289","points":166,"story_id":37082289,"title":"Git scraping: track changes over time by scraping to a Git repository (2020)","updated_at":"2024-03-19T21:18:03Z","url":"https://simonwillison.net/2020/Oct/9/git-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"stefankuehnel"},"title":{"matchLevel":"none","matchedWords":[],"value":"Git scraping: track changes over time by scraping to a Git repository (2020)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Oct/9/git-scraping/"}},"_tags":["story","author_stefankuehnel","story_37072442"],"author":"stefankuehnel","created_at":"2023-08-10T05:54:47Z","created_at_i":1691646887,"num_comments":0,"objectID":"37072442","points":1,"story_id":37072442,"title":"Git scraping: track changes over time by scraping to a Git repository (2020)","updated_at":"2023-09-07T13:39:51Z","url":"https://simonwillison.net/2020/Oct/9/git-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"How I make annotated presentations"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Aug/6/annotated-presentations/"}},"_tags":["story","author_simonw","story_37024398"],"author":"simonw","children":[37034893,37033051],"created_at":"2023-08-06T17:26:06Z","created_at_i":1691342766,"num_comments":3,"objectID":"37024398","points":41,"story_id":37024398,"title":"How I make annotated presentations","updated_at":"2023-09-07T13:34:56Z","url":"https://simonwillison.net/2023/Aug/6/annotated-presentations/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"benwerd"},"title":{"matchLevel":"none","matchedWords":[],"value":"Catching up on the weird world of LLMs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Aug/3/weird-world-of-llms/"}},"_tags":["story","author_benwerd","story_36994532"],"author":"benwerd","children":[37005319,37030739,37030506,36999568,37002014,37011060,36998970],"created_at":"2023-08-04T01:59:31Z","created_at_i":1691114371,"num_comments":38,"objectID":"36994532","points":195,"story_id":36994532,"title":"Catching up on the weird world of LLMs","updated_at":"2023-12-14T12:13:04Z","url":"https://simonwillison.net/2023/Aug/3/weird-world-of-llms/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Catching up on the weird world of LLMs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Aug/3/weird-world-of-llms/"}},"_tags":["story","author_simonw","story_36988145"],"author":"simonw","created_at":"2023-08-03T16:34:52Z","created_at_i":1691080492,"num_comments":0,"objectID":"36988145","points":3,"story_id":36988145,"title":"Catching up on the weird world of LLMs","updated_at":"2023-09-07T14:13:13Z","url":"https://simonwillison.net/2023/Aug/3/weird-world-of-llms/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"samwillis"},"title":{"matchLevel":"none","matchedWords":[],"value":"Run Llama 2 on your own Mac using LLM and Homebrew"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Aug/1/llama-2-mac/"}},"_tags":["story","author_samwillis","story_36960874"],"author":"samwillis","children":[36961016,36966996,36961005,36961118],"created_at":"2023-08-01T19:03:27Z","created_at_i":1690916607,"num_comments":6,"objectID":"36960874","points":22,"story_id":36960874,"title":"Run Llama 2 on your own Mac using LLM and Homebrew","updated_at":"2023-09-07T14:10:58Z","url":"https://simonwillison.net/2023/Aug/1/llama-2-mac/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"CharlesW"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring the Overture Maps places data using DuckDB, SQLite-utils and Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/overture-maps/overture-maps-parquet"}},"_tags":["story","author_CharlesW","story_36911273"],"author":"CharlesW","children":[37025002],"created_at":"2023-07-28T18:39:36Z","created_at_i":1690569576,"num_comments":1,"objectID":"36911273","points":4,"story_id":36911273,"title":"Exploring the Overture Maps places data using DuckDB, SQLite-utils and Datasette","updated_at":"2023-09-07T14:06:57Z","url":"https://til.simonwillison.net/overture-maps/overture-maps-parquet"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring the Overture Maps places data using DuckDB, SQLite-utils and Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/overture-maps/overture-maps-parquet"}},"_tags":["story","author_simonw","story_36897426"],"author":"simonw","created_at":"2023-07-27T17:46:20Z","created_at_i":1690479980,"num_comments":0,"objectID":"36897426","points":4,"story_id":36897426,"title":"Exploring the Overture Maps places data using DuckDB, SQLite-utils and Datasette","updated_at":"2023-09-07T14:05:51Z","url":"https://til.simonwillison.net/overture-maps/overture-maps-parquet"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"SQLite-utils now supports plugins"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jul/24/sqlite-utils-plugins/"}},"_tags":["story","author_simonw","story_36851204"],"author":"simonw","created_at":"2023-07-24T17:12:39Z","created_at_i":1690218759,"num_comments":0,"objectID":"36851204","points":6,"story_id":36851204,"title":"SQLite-utils now supports plugins","updated_at":"2023-09-07T14:02:03Z","url":"https://simonwillison.net/2023/Jul/24/sqlite-utils-plugins/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"nithinbekal"},"title":{"matchLevel":"none","matchedWords":[],"value":"It doesn\u2019t take much public creativity to stand out as a job candidate"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/17/standing-out/"}},"_tags":["story","author_nithinbekal","story_36843484"],"author":"nithinbekal","children":[36878072,36879329,36875386,36873772,36878707,36873918,36878550,36873726,36873658,36874337,36873699,36873859,36879787,36878362,36844630,36878875,36873880,36875450,36874472,36873905,36875762,36873818,36875134,36874326,36881642,36873858,36874070,36878876,36874051,36873692,36874863,36880169,36875487,36880406,36880112,36876339,36882053,36878979,36877272,36874406,36879139,36874044,36878144,36879143,36878216,36874533,36874122,36878076,36873794,36873967],"created_at":"2023-07-24T05:35:46Z","created_at_i":1690176946,"num_comments":378,"objectID":"36843484","points":280,"story_id":36843484,"title":"It doesn\u2019t take much public creativity to stand out as a job candidate","updated_at":"2024-02-24T09:50:39Z","url":"https://simonwillison.net/2021/Jul/17/standing-out/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Accessing Llama 2 from the command-line with the LLM-replicate plugin"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jul/18/accessing-llama-2/"}},"_tags":["story","author_simonw","story_36778041"],"author":"simonw","children":[36780186,36779271,36779060,36782726,36780204],"created_at":"2023-07-18T19:33:33Z","created_at_i":1689708813,"num_comments":43,"objectID":"36778041","points":200,"story_id":36778041,"title":"Accessing Llama 2 from the command-line with the LLM-replicate plugin","updated_at":"2024-02-24T04:39:23Z","url":"https://simonwillison.net/2023/Jul/18/accessing-llama-2/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"CharlesW"},"title":{"matchLevel":"none","matchedWords":[],"value":"LLM CLI tool now supports self-hosted language models via plugins"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jul/12/llm/"}},"_tags":["story","author_CharlesW","story_36749911"],"author":"CharlesW","children":[36750315],"created_at":"2023-07-16T18:10:30Z","created_at_i":1689531030,"num_comments":1,"objectID":"36749911","points":5,"story_id":36749911,"title":"LLM CLI tool now supports self-hosted language models via plugins","updated_at":"2023-09-07T13:53:04Z","url":"https://simonwillison.net/2023/Jul/12/llm/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using the tree-sitter parser generator with Python"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/tree-sitter"}},"_tags":["story","author_chmaynard","story_36720171"],"author":"chmaynard","created_at":"2023-07-14T06:28:13Z","created_at_i":1689316093,"num_comments":0,"objectID":"36720171","points":4,"story_id":36720171,"title":"Using the tree-sitter parser generator with Python","updated_at":"2023-09-07T13:50:44Z","url":"https://til.simonwillison.net/python/tree-sitter"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Show HN: LLM CLI tool now supports self-hosted language models via plugins"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jul/12/llm/"}},"_tags":["story","author_simonw","story_36695226","show_hn"],"author":"simonw","children":[36695473],"created_at":"2023-07-12T14:39:47Z","created_at_i":1689172787,"num_comments":1,"objectID":"36695226","points":6,"story_id":36695226,"title":"Show HN: LLM CLI tool now supports self-hosted language models via plugins","updated_at":"2023-09-07T13:48:46Z","url":"https://simonwillison.net/2023/Jul/12/llm/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Python packages with pyproject.toml and nothing else"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/pyproject"}},"_tags":["story","author_chmaynard","story_36643532"],"author":"chmaynard","created_at":"2023-07-08T11:55:29Z","created_at_i":1688817329,"num_comments":0,"objectID":"36643532","points":3,"story_id":36643532,"title":"Python packages with pyproject.toml and nothing else","updated_at":"2023-09-07T13:44:41Z","url":"https://til.simonwillison.net/python/pyproject"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"goranmoomin"},"title":{"matchLevel":"none","matchedWords":[],"value":"Symbex: Extract Python functions and classes by wildcard"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jun/18/symbex/"}},"_tags":["story","author_goranmoomin","story_36523507"],"author":"goranmoomin","created_at":"2023-06-29T17:20:46Z","created_at_i":1688059246,"num_comments":0,"objectID":"36523507","points":3,"story_id":36523507,"title":"Symbex: Extract Python functions and classes by wildcard","updated_at":"2023-09-07T13:35:14Z","url":"https://simonwillison.net/2023/Jun/18/symbex/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"swyx"},"title":{"matchLevel":"none","matchedWords":[],"value":"CLI tools hidden in the Python standard library"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/stdlib-cli-tools"}},"_tags":["story","author_swyx","story_36515531"],"author":"swyx","children":[36517749,36516921,36517421,36519308,36518099,36516932,36517860,36517355,36518463,36523327,36516992,36517877,36520350,36518832,36520692,36520486,36519664,36555668,36520912,36517374,36517858],"created_at":"2023-06-29T02:15:16Z","created_at_i":1688004916,"num_comments":154,"objectID":"36515531","points":552,"story_id":36515531,"title":"CLI tools hidden in the Python standard library","updated_at":"2024-03-22T19:44:59Z","url":"https://til.simonwillison.net/python/stdlib-cli-tools"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"marban"},"title":{"matchLevel":"none","matchedWords":[],"value":"Symbex: Search Python code for functions and classes, then pipe them into a LLM"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jun/18/symbex/"}},"_tags":["story","author_marban","story_36394578"],"author":"marban","created_at":"2023-06-19T18:12:00Z","created_at_i":1687198320,"num_comments":0,"objectID":"36394578","points":3,"story_id":36394578,"title":"Symbex: Search Python code for functions and classes, then pipe them into a LLM","updated_at":"2023-09-07T13:24:38Z","url":"https://simonwillison.net/2023/Jun/18/symbex/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"todsacerdoti"},"title":{"matchLevel":"none","matchedWords":[],"value":"Symbex: Search Python code then pipe it into an LLM"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jun/18/symbex/"}},"_tags":["story","author_todsacerdoti","story_36386262"],"author":"todsacerdoti","created_at":"2023-06-19T01:23:06Z","created_at_i":1687137786,"num_comments":0,"objectID":"36386262","points":2,"story_id":36386262,"title":"Symbex: Search Python code then pipe it into an LLM","updated_at":"2023-09-07T13:23:58Z","url":"https://simonwillison.net/2023/Jun/18/symbex/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"madacol"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running OpenAI's large context models using LLM"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/larger-context-openai-models-llm"}},"_tags":["story","author_madacol","story_36334454"],"author":"madacol","created_at":"2023-06-14T23:43:07Z","created_at_i":1686786187,"num_comments":0,"objectID":"36334454","points":1,"story_id":36334454,"title":"Running OpenAI's large context models using LLM","updated_at":"2023-09-07T13:19:20Z","url":"https://til.simonwillison.net/llms/larger-context-openai-models-llm"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Understanding GPT tokenizers"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jun/8/gpt-tokenizers/"}},"_tags":["story","author_simonw","story_36248633"],"author":"simonw","children":[36249869,36251042,36249024,36250954,36249285,36249379,36250330,36252733,36254061,36258201,36250040,36256634,36249266,36279735,36250098,36249195,36251687,36249261,36254644,36259854,36251271,36249668,36249934,36256433,36250697,36256127,36250855],"created_at":"2023-06-08T20:40:30Z","created_at_i":1686256830,"num_comments":130,"objectID":"36248633","points":432,"story_id":36248633,"title":"Understanding GPT tokenizers","updated_at":"2023-10-22T22:17:38Z","url":"https://simonwillison.net/2023/Jun/8/gpt-tokenizers/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"colinprince"},"title":{"matchLevel":"none","matchedWords":[],"value":"ChatGPT should include inline tips"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/30/chatgpt-inline-tips/"}},"_tags":["story","author_colinprince","story_36192479"],"author":"colinprince","created_at":"2023-06-05T04:57:40Z","created_at_i":1685941060,"num_comments":0,"objectID":"36192479","points":2,"story_id":36192479,"title":"ChatGPT should include inline tips","updated_at":"2023-09-07T13:05:52Z","url":"https://simonwillison.net/2023/May/30/chatgpt-inline-tips/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"It\u2019s infuriatingly hard to understand how closed models train on their input"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jun/4/closed-model-training/"}},"_tags":["story","author_simonw","story_36187994"],"author":"simonw","children":[36189657,36189521,36188325,36188527,36188397,36189206,36188117,36188895,36189101,36188352,36188257,36191865,36194733,36189617,36190881,36191568,36189137,36194372,36192928,36190428,36189445],"created_at":"2023-06-04T18:16:40Z","created_at_i":1685902600,"num_comments":218,"objectID":"36187994","points":308,"story_id":36187994,"title":"It\u2019s infuriatingly hard to understand how closed models train on their input","updated_at":"2023-09-28T08:55:28Z","url":"https://simonwillison.net/2023/Jun/4/closed-model-training/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"telotortium"},"title":{"matchLevel":"none","matchedWords":[],"value":"ChatGPT should include inline tips"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/30/chatgpt-inline-tips/"}},"_tags":["story","author_telotortium","story_36167533"],"author":"telotortium","created_at":"2023-06-02T16:48:28Z","created_at_i":1685724508,"num_comments":0,"objectID":"36167533","points":2,"story_id":36167533,"title":"ChatGPT should include inline tips","updated_at":"2023-09-07T13:03:41Z","url":"https://simonwillison.net/2023/May/30/chatgpt-inline-tips/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"ChatGPT should include inline tips"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/30/chatgpt-inline-tips/"}},"_tags":["story","author_simonw","story_36130620"],"author":"simonw","children":[36130684,36130645],"created_at":"2023-05-30T20:53:41Z","created_at_i":1685480021,"num_comments":4,"objectID":"36130620","points":2,"story_id":36130620,"title":"ChatGPT should include inline tips","updated_at":"2023-09-07T13:00:24Z","url":"https://simonwillison.net/2023/May/30/chatgpt-inline-tips/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"scraptor"},"title":{"matchLevel":"none","matchedWords":[],"value":"Lawyer cites fake cases invented by ChatGPT, judge is not amused"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/27/lawyer-chatgpt/"}},"_tags":["story","author_scraptor","story_36097900"],"author":"scraptor","children":[36098028,36098228,36098174,36099181,36098627,36098906,36098261,36098645,36098352,36098407,36098297,36098849,36098140,36099008,36098369,36102110,36100453,36100840,36099152,36103440,36099363,36099670,36098555,36099731,36098311,36100028,36100074,36099803,36099444,36098520,36098815,36099010,36098819,36098565,36098522,36098309,36098319,36101825,36098247,36098744,36102402,36098727,36098324,36098636,36099120,36099592,36100541,36098492,36098704,36098712,36098233,36098232],"created_at":"2023-05-27T20:19:41Z","created_at_i":1685218781,"num_comments":306,"objectID":"36097900","points":347,"story_id":36097900,"title":"Lawyer cites fake cases invented by ChatGPT, judge is not amused","updated_at":"2024-02-29T23:33:32Z","url":"https://simonwillison.net/2023/May/27/lawyer-chatgpt/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"swyx"},"title":{"matchLevel":"none","matchedWords":[],"value":"Mlc-Chat \u2013 RedPajama-Incite-Chat-3B on macOS"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/mlc-chat-redpajama"}},"_tags":["story","author_swyx","story_36035778"],"author":"swyx","created_at":"2023-05-22T19:43:35Z","created_at_i":1684784615,"num_comments":0,"objectID":"36035778","points":4,"story_id":36035778,"title":"Mlc-Chat \u2013 RedPajama-Incite-Chat-3B on macOS","updated_at":"2023-09-07T12:52:14Z","url":"https://til.simonwillison.net/llms/mlc-chat-redpajama"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"CLI tools for working with ChatGPT and other LLMs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/18/cli-tools-for-llms/"}},"_tags":["story","author_simonw","story_35994037"],"author":"simonw","children":[35994446,35994989,35995523,35995003,35994254,35995412,35994968,35994580,36003453,36003868,35994729,35999420,35994757,35995265,35994250,35997245,35996430,35994442,35997419,36000233,36000025,35995871,35998597],"created_at":"2023-05-18T21:05:26Z","created_at_i":1684443926,"num_comments":51,"objectID":"35994037","points":204,"story_id":35994037,"title":"CLI tools for working with ChatGPT and other LLMs","updated_at":"2023-12-21T00:38:15Z","url":"https://simonwillison.net/2023/May/18/cli-tools-for-llms/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"sebg"},"title":{"matchLevel":"none","matchedWords":[],"value":"Prompt injection explained, with video, slides, and a transcript"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/2/prompt-injection-explained/"}},"_tags":["story","author_sebg","story_35929122"],"author":"sebg","children":[35929576,35930039,35932071,35930951,35930090,35932790,35930498,35930066,35931481,35930820,35930021,35932749,35930342,35932680,35930575,35936213,35932233,35929470,35933236,35931913,35932625,35932293,35933031,35929910,35932759,35936070,35932768,35932296,35931723,35929543,35929767,35931343,35931696,35935055,35933483,35930779,35930390,35937633,35935288,35934177],"created_at":"2023-05-13T15:11:11Z","created_at_i":1683990671,"num_comments":175,"objectID":"35929122","points":508,"story_id":35929122,"title":"Prompt injection explained, with video, slides, and a transcript","updated_at":"2024-02-04T05:44:05Z","url":"https://simonwillison.net/2023/May/2/prompt-injection-explained/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"The Dual LLM pattern for building AI assistants that can resist prompt injection"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/25/dual-llm-pattern/"}},"_tags":["story","author_simonw","story_35925758"],"author":"simonw","children":[35942676,35942716,35941361,35941969,35943386,35944032,35941789,35942827,35941541,35942109,35943696,35944683,35942475,35942203,35944715,35941733,35941545,35945495,35944729,35942059,35942116,35943940],"created_at":"2023-05-13T05:08:06Z","created_at_i":1683954486,"num_comments":109,"objectID":"35925758","points":201,"story_id":35925758,"title":"The Dual LLM pattern for building AI assistants that can resist prompt injection","updated_at":"2024-02-07T12:29:15Z","url":"https://simonwillison.net/2023/Apr/25/dual-llm-pattern/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tim_sw"},"title":{"matchLevel":"none","matchedWords":[],"value":"GitHub Copilot Leaked Prompt"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/12/github-copilot-chat-leaked-prompt/"}},"_tags":["story","author_tim_sw","story_35924293"],"author":"tim_sw","children":[35924703],"created_at":"2023-05-13T00:44:53Z","created_at_i":1683938693,"num_comments":4,"objectID":"35924293","points":252,"story_id":35924293,"title":"GitHub Copilot Leaked Prompt","updated_at":"2023-09-07T13:24:00Z","url":"https://simonwillison.net/2023/May/12/github-copilot-chat-leaked-prompt/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"eiiot"},"title":{"matchLevel":"none","matchedWords":[],"value":"Delimiters won\u2019t save you from prompt injection"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/11/delimiters-wont-save-you/"}},"_tags":["story","author_eiiot","story_35911595"],"author":"eiiot","children":[35927009,35926392,35926635,35925948,35926650,35926322,35929345,35927014,35910313,35926235,35926548,35926508,35926032,35925690,35927339,35929145,35926281,35927525,35929061,35926742,35928004,35929292,35926400,35927621,35908183],"created_at":"2023-05-12T03:38:52Z","created_at_i":1683862732,"num_comments":111,"objectID":"35911595","points":213,"story_id":35911595,"title":"Delimiters won\u2019t save you from prompt injection","updated_at":"2023-09-07T13:22:54Z","url":"https://simonwillison.net/2023/May/11/delimiters-wont-save-you/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Delimiters won\u2019t save you from prompt injection"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/11/delimiters-wont-save-you/"}},"_tags":["story","author_simonw","story_35904361"],"author":"simonw","children":[35925676],"created_at":"2023-05-11T16:17:56Z","created_at_i":1683821876,"num_comments":1,"objectID":"35904361","points":18,"story_id":35904361,"title":"Delimiters won\u2019t save you from prompt injection","updated_at":"2023-09-07T13:22:17Z","url":"https://simonwillison.net/2023/May/11/delimiters-wont-save-you/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"lemper"},"title":{"matchLevel":"none","matchedWords":[],"value":"Some Notes on How Deno KV Works on Local Machine"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/deno/deno-kv"}},"_tags":["story","author_lemper","story_35885237"],"author":"lemper","created_at":"2023-05-10T09:05:16Z","created_at_i":1683709516,"num_comments":0,"objectID":"35885237","points":2,"story_id":35885237,"title":"Some Notes on How Deno KV Works on Local Machine","updated_at":"2023-09-07T13:20:40Z","url":"https://til.simonwillison.net/deno/deno-kv"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"rmason"},"title":{"matchLevel":"none","matchedWords":[],"value":"Simon Willison: Deno KV"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/deno/deno-kv?"}},"_tags":["story","author_rmason","story_35834916"],"author":"rmason","created_at":"2023-05-05T20:43:22Z","created_at_i":1683319402,"num_comments":0,"objectID":"35834916","points":5,"story_id":35834916,"title":"Simon Willison: Deno KV","updated_at":"2023-09-07T13:16:02Z","url":"https://til.simonwillison.net/deno/deno-kv?"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"cube2222"},"title":{"matchLevel":"none","matchedWords":[],"value":"Leaked Google document: \u201cWe Have No Moat, And Neither Does OpenAI\u201d"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/4/no-moat/"}},"_tags":["story","author_cube2222","story_35818009"],"author":"cube2222","children":[35818116,35825037],"created_at":"2023-05-04T16:26:33Z","created_at_i":1683217593,"num_comments":5,"objectID":"35818009","points":113,"story_id":35818009,"title":"Leaked Google document: \u201cWe Have No Moat, And Neither Does OpenAI\u201d","updated_at":"2023-09-07T13:14:35Z","url":"https://simonwillison.net/2023/May/4/no-moat/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"sebg"},"title":{"matchLevel":"none","matchedWords":[],"value":"Prompt injection explained, with video, slides, and a transcript"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/2/prompt-injection-explained/"}},"_tags":["story","author_sebg","story_35803564"],"author":"sebg","created_at":"2023-05-03T15:28:35Z","created_at_i":1683127715,"num_comments":0,"objectID":"35803564","points":3,"story_id":35803564,"title":"Prompt injection explained, with video, slides, and a transcript","updated_at":"2023-09-07T13:13:21Z","url":"https://simonwillison.net/2023/May/2/prompt-injection-explained/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"belter"},"title":{"matchLevel":"none","matchedWords":[],"value":"I Don\u2019t Know How to Solve Prompt Injection (2022)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Sep/16/prompt-injection-solutions/"}},"_tags":["story","author_belter","story_35802166"],"author":"belter","created_at":"2023-05-03T13:31:22Z","created_at_i":1683120682,"num_comments":0,"objectID":"35802166","points":2,"story_id":35802166,"title":"I Don\u2019t Know How to Solve Prompt Injection (2022)","updated_at":"2023-09-07T13:13:14Z","url":"https://simonwillison.net/2022/Sep/16/prompt-injection-solutions/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mitjam"},"title":{"matchLevel":"none","matchedWords":[],"value":"Let\u2019s be bear or bunny"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/1/lets-be-bear-or-bunny/"}},"_tags":["story","author_mitjam","story_35798815"],"author":"mitjam","children":[35799078],"created_at":"2023-05-03T06:35:08Z","created_at_i":1683095708,"num_comments":1,"objectID":"35798815","points":1,"story_id":35798815,"title":"Let\u2019s be bear or bunny","updated_at":"2023-09-07T13:12:56Z","url":"https://simonwillison.net/2023/May/1/lets-be-bear-or-bunny/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"bx376"},"title":{"matchLevel":"none","matchedWords":[],"value":"Prompt Injection Explained"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/2/prompt-injection-explained/"}},"_tags":["story","author_bx376","story_35795955"],"author":"bx376","children":[35808109],"created_at":"2023-05-03T00:01:34Z","created_at_i":1683072094,"num_comments":1,"objectID":"35795955","points":8,"story_id":35795955,"title":"Prompt Injection Explained","updated_at":"2023-09-07T13:12:41Z","url":"https://simonwillison.net/2023/May/2/prompt-injection-explained/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"otterwise"},"title":{"matchLevel":"none","matchedWords":[],"value":"Download-esm: a tool for downloading ECMAScript modules"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/2/download-esm/"}},"_tags":["story","author_otterwise","story_35795539"],"author":"otterwise","created_at":"2023-05-02T23:20:16Z","created_at_i":1683069616,"num_comments":0,"objectID":"35795539","points":2,"story_id":35795539,"title":"Download-esm: a tool for downloading ECMAScript modules","updated_at":"2023-09-07T13:12:41Z","url":"https://simonwillison.net/2023/May/2/download-esm/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mgrayson"},"title":{"matchLevel":"none","matchedWords":[],"value":"Download-esm: a tool for downloading ECMAScript modules"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/2/download-esm/"}},"_tags":["story","author_mgrayson","story_35785877"],"author":"mgrayson","created_at":"2023-05-02T11:19:40Z","created_at_i":1683026380,"num_comments":0,"objectID":"35785877","points":5,"story_id":35785877,"title":"Download-esm: a tool for downloading ECMAScript modules","updated_at":"2023-09-07T13:11:50Z","url":"https://simonwillison.net/2023/May/2/download-esm/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"anst"},"title":{"matchLevel":"none","matchedWords":[],"value":"Let's Be Bear or Bunny"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/May/1/lets-be-bear-or-bunny/"}},"_tags":["story","author_anst","story_35784633"],"author":"anst","children":[35785863],"created_at":"2023-05-02T08:02:29Z","created_at_i":1683014549,"num_comments":0,"objectID":"35784633","points":3,"story_id":35784633,"title":"Let's Be Bear or Bunny","updated_at":"2023-09-07T13:11:45Z","url":"https://simonwillison.net/2023/May/1/lets-be-bear-or-bunny/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"iyaja"},"title":{"matchLevel":"none","matchedWords":[],"value":"Expanding ChatGPT Code Interpreter with Python Packages, Deno and Lua"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/code-interpreter-expansions"}},"_tags":["story","author_iyaja","story_35769599"],"author":"iyaja","children":[35772147,35785694],"created_at":"2023-05-01T06:19:28Z","created_at_i":1682921968,"num_comments":3,"objectID":"35769599","points":29,"story_id":35769599,"title":"Expanding ChatGPT Code Interpreter with Python Packages, Deno and Lua","updated_at":"2023-09-07T13:10:28Z","url":"https://til.simonwillison.net/llms/code-interpreter-expansions"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"samwillis"},"title":{"matchLevel":"none","matchedWords":[],"value":"The Deno local key/value store"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/deno/deno-kv"}},"_tags":["story","author_samwillis","story_35750798"],"author":"samwillis","created_at":"2023-04-29T07:17:42Z","created_at_i":1682752662,"num_comments":0,"objectID":"35750798","points":2,"story_id":35750798,"title":"The Deno local key/value store","updated_at":"2023-09-07T13:08:53Z","url":"https://til.simonwillison.net/deno/deno-kv"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tomviner"},"title":{"matchLevel":"none","matchedWords":[],"value":"The Dual LLM pattern for building AI assistants that can resist prompt injection"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/25/dual-llm-pattern/"}},"_tags":["story","author_tomviner","story_35724150"],"author":"tomviner","created_at":"2023-04-27T06:43:42Z","created_at_i":1682577822,"num_comments":0,"objectID":"35724150","points":3,"story_id":35724150,"title":"The Dual LLM pattern for building AI assistants that can resist prompt injection","updated_at":"2023-09-07T13:06:42Z","url":"https://simonwillison.net/2023/Apr/25/dual-llm-pattern/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"The Dual LLM pattern for building AI assistants that can resist prompt injection"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/25/dual-llm-pattern/"}},"_tags":["story","author_simonw","story_35705159"],"author":"simonw","created_at":"2023-04-25T19:07:42Z","created_at_i":1682449662,"num_comments":0,"objectID":"35705159","points":6,"story_id":35705159,"title":"The Dual LLM pattern for building AI assistants that can resist prompt injection","updated_at":"2023-09-07T13:05:09Z","url":"https://simonwillison.net/2023/Apr/25/dual-llm-pattern/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"gstipi"},"title":{"matchLevel":"none","matchedWords":[],"value":"Git scraping: track changes over time by scraping to a Git repository (2020)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Oct/9/git-scraping/"}},"_tags":["story","author_gstipi","story_35690942"],"author":"gstipi","children":[35691127],"created_at":"2023-04-24T17:58:38Z","created_at_i":1682359118,"num_comments":1,"objectID":"35690942","points":5,"story_id":35690942,"title":"Git scraping: track changes over time by scraping to a Git repository (2020)","updated_at":"2023-09-07T13:03:54Z","url":"https://simonwillison.net/2020/Oct/9/git-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"notmysql_"},"title":{"matchLevel":"none","matchedWords":[],"value":"What\u2019s in the RedPajama-Data-1T LLM training set"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/17/redpajama-data/"}},"_tags":["story","author_notmysql_","story_35610297"],"author":"notmysql_","created_at":"2023-04-18T05:29:44Z","created_at_i":1681795784,"num_comments":0,"objectID":"35610297","points":3,"story_id":35610297,"title":"What\u2019s in the RedPajama-Data-1T LLM training set","updated_at":"2023-09-07T12:57:09Z","url":"https://simonwillison.net/2023/Apr/17/redpajama-data/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Web LLM runs the vicuna-7B LLM in the browser and it\u2019s impressive"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/16/web-llm/"}},"_tags":["story","author_simonw","story_35590687"],"author":"simonw","children":[35592604,35592863],"created_at":"2023-04-16T15:16:06Z","created_at_i":1681658166,"num_comments":4,"objectID":"35590687","points":63,"story_id":35590687,"title":"Web LLM runs the vicuna-7B LLM in the browser and it\u2019s impressive","updated_at":"2023-09-07T12:55:29Z","url":"https://simonwillison.net/2023/Apr/16/web-llm/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"iamwil"},"title":{"matchLevel":"none","matchedWords":[],"value":"SQLite-history: tracking changes to SQLite tables using triggers"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/15/sqlite-history/"}},"_tags":["story","author_iamwil","story_35583516"],"author":"iamwil","created_at":"2023-04-15T18:59:40Z","created_at_i":1681585180,"num_comments":0,"objectID":"35583516","points":7,"story_id":35583516,"title":"SQLite-history: tracking changes to SQLite tables using triggers","updated_at":"2023-10-09T18:06:29Z","url":"https://simonwillison.net/2023/Apr/15/sqlite-history/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Prompt injection: what\u2019s the worst that can happen?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/14/worst-that-can-happen/"}},"_tags":["story","author_simonw","story_35572290"],"author":"simonw","children":[35574131,35575186,35575862,35575907,35573631,35574351,35573762,35577019,35575260,35575488,35577536,35575959,35580220,35575656,35575332,35579136,35580000,35572476,35573897,35575540,35579902,35574444,35577377,35592290,35575202,35574931,35575689,35574616,35576795,35575232,35577360,35578921,35577456,35573927,35579178,35576374,35576981,35575317,35576412,35575236,35574269],"created_at":"2023-04-14T17:37:24Z","created_at_i":1681493844,"num_comments":203,"objectID":"35572290","points":462,"story_id":35572290,"title":"Prompt injection: what\u2019s the worst that can happen?","updated_at":"2024-02-12T04:14:18Z","url":"https://simonwillison.net/2023/Apr/14/worst-that-can-happen/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"l2dy"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running Dolly 2.0 on Paperspace"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/dolly-2"}},"_tags":["story","author_l2dy","story_35550530"],"author":"l2dy","children":[35552222,35552415,35559833,35575934,35551821],"created_at":"2023-04-13T03:26:33Z","created_at_i":1681356393,"num_comments":13,"objectID":"35550530","points":73,"story_id":35550530,"title":"Running Dolly 2.0 on Paperspace","updated_at":"2023-11-13T06:12:45Z","url":"https://til.simonwillison.net/llms/dolly-2"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"clairegiordano"},"title":{"matchLevel":"none","matchedWords":[],"value":"Working in public conversation at Path To Citus Con"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/8/working-in-public/"}},"_tags":["story","author_clairegiordano","story_35535897"],"author":"clairegiordano","created_at":"2023-04-12T06:53:01Z","created_at_i":1681282381,"num_comments":0,"objectID":"35535897","points":1,"story_id":35535897,"title":"Working in public conversation at Path To Citus Con","updated_at":"2023-09-07T12:50:58Z","url":"https://simonwillison.net/2023/Apr/8/working-in-public/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"srijan4"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running Python micro-benchmarks using the ChatGPT Code Interpreter alpha"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/12/code-interpreter/"}},"_tags":["story","author_srijan4","story_35534290"],"author":"srijan4","children":[35534595,35535711,35538258,35535541,35535786,35554021,35534923],"created_at":"2023-04-12T02:20:49Z","created_at_i":1681266049,"num_comments":46,"objectID":"35534290","points":65,"story_id":35534290,"title":"Running Python micro-benchmarks using the ChatGPT Code Interpreter alpha","updated_at":"2023-09-07T12:50:53Z","url":"https://simonwillison.net/2023/Apr/12/code-interpreter/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"petercooper"},"title":{"matchLevel":"none","matchedWords":[],"value":"Path to Citus Con: Working in Public"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/8/working-in-public/"}},"_tags":["story","author_petercooper","story_35532337"],"author":"petercooper","created_at":"2023-04-11T22:14:17Z","created_at_i":1681251257,"num_comments":0,"objectID":"35532337","points":1,"story_id":35532337,"title":"Path to Citus Con: Working in Public","updated_at":"2023-09-07T12:50:43Z","url":"https://simonwillison.net/2023/Apr/8/working-in-public/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"duck"},"title":{"matchLevel":"none","matchedWords":[],"value":"Thoughts on AI safety in this era of increasingly powerful open source LLMs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/10/ai-safety/"}},"_tags":["story","author_duck","story_35520836"],"author":"duck","created_at":"2023-04-11T04:28:10Z","created_at_i":1681187290,"num_comments":0,"objectID":"35520836","points":3,"story_id":35520836,"title":"Thoughts on AI safety in this era of increasingly powerful open source LLMs","updated_at":"2023-09-07T12:49:45Z","url":"https://simonwillison.net/2023/Apr/10/ai-safety/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tim_sw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Thoughts on AI safety in this era of increasingly powerful open-source LLMs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/10/ai-safety/"}},"_tags":["story","author_tim_sw","story_35516714"],"author":"tim_sw","created_at":"2023-04-10T19:59:31Z","created_at_i":1681156771,"num_comments":0,"objectID":"35516714","points":3,"story_id":35516714,"title":"Thoughts on AI safety in this era of increasingly powerful open-source LLMs","updated_at":"2023-09-07T12:49:29Z","url":"https://simonwillison.net/2023/Apr/10/ai-safety/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"kiyanwang"},"title":{"matchLevel":"none","matchedWords":[],"value":"GPT-4 for API design research"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/gpt3/gpt4-api-design"}},"_tags":["story","author_kiyanwang","story_35502156"],"author":"kiyanwang","created_at":"2023-04-09T12:37:00Z","created_at_i":1681043820,"num_comments":0,"objectID":"35502156","points":2,"story_id":35502156,"title":"GPT-4 for API design research","updated_at":"2023-09-07T12:48:20Z","url":"https://til.simonwillison.net/gpt3/gpt4-api-design"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"We need to tell people ChatGPT will lie to them, not debate linguistics"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/7/chatgpt-lies/"}},"_tags":["story","author_simonw","story_35483823"],"author":"simonw","children":[35487288,35483913,35486574,35484242,35485030,35487977,35486935,35486846,35486710,35484035,35486757,35483973,35487165,35486868,35488432,35489350,35487014,35490436,35490221,35488745,35489484,35486845,35490652,35490270,35487666,35518799,35485895,35515506,35510882,35486724,35490698,35489165,35488241,35483958,35484088,35486600,35487252,35488283,35486936,35487211,35487986,35487221,35490490,35487004,35488518,35486787,35487749,35487481,35505456,35486780,35491352,35488936,35487226,35487251,35488934,35488674,35487337,35489676,35486479,35488500,35490683,35488559,35485562,35488284,35486178],"created_at":"2023-04-07T16:48:31Z","created_at_i":1680886111,"num_comments":457,"objectID":"35483823","points":546,"story_id":35483823,"title":"We need to tell people ChatGPT will lie to them, not debate linguistics","updated_at":"2024-02-21T22:58:45Z","url":"https://simonwillison.net/2023/Apr/7/chatgpt-lies/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"saeedesmaili"},"title":{"matchLevel":"none","matchedWords":[],"value":"GPT-4 for API design research"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/gpt3/gpt4-api-design"}},"_tags":["story","author_saeedesmaili","story_35478714"],"author":"saeedesmaili","created_at":"2023-04-07T06:24:49Z","created_at_i":1680848689,"num_comments":0,"objectID":"35478714","points":2,"story_id":35478714,"title":"GPT-4 for API design research","updated_at":"2023-09-07T12:46:21Z","url":"https://til.simonwillison.net/gpt3/gpt4-api-design"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"amrrs"},"title":{"matchLevel":"none","matchedWords":[],"value":"GPT-4 for API design research"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/gpt3/gpt4-api-design"}},"_tags":["story","author_amrrs","story_35473840"],"author":"amrrs","created_at":"2023-04-06T20:20:42Z","created_at_i":1680812442,"num_comments":0,"objectID":"35473840","points":4,"story_id":35473840,"title":"GPT-4 for API design research","updated_at":"2023-09-07T12:45:53Z","url":"https://til.simonwillison.net/gpt3/gpt4-api-design"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ghuntley"},"title":{"matchLevel":"none","matchedWords":[],"value":"Weeknotes: A new LLM CLI tool, plus automating my weeknotes and newsletter"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/4/llm/"}},"_tags":["story","author_ghuntley","story_35448033"],"author":"ghuntley","created_at":"2023-04-05T01:19:00Z","created_at_i":1680657540,"num_comments":0,"objectID":"35448033","points":3,"story_id":35448033,"title":"Weeknotes: A new LLM CLI tool, plus automating my weeknotes and newsletter","updated_at":"2023-09-07T12:43:49Z","url":"https://simonwillison.net/2023/Apr/4/llm/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"stevefink"},"title":{"matchLevel":"none","matchedWords":[],"value":"Semi-automating a Substack newsletter with an Observable notebook"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/4/substack-observable/"}},"_tags":["story","author_stevefink","story_35443573"],"author":"stevefink","created_at":"2023-04-04T17:58:59Z","created_at_i":1680631139,"num_comments":0,"objectID":"35443573","points":3,"story_id":35443573,"title":"Semi-automating a Substack newsletter with an Observable notebook","updated_at":"2023-09-07T12:43:25Z","url":"https://simonwillison.net/2023/Apr/4/substack-observable/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ritzaco"},"title":{"matchLevel":"none","matchedWords":[],"value":"In Defense of Prompt Engineering"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/"}},"_tags":["story","author_ritzaco","story_35437401"],"author":"ritzaco","children":[35438721],"created_at":"2023-04-04T10:17:22Z","created_at_i":1680603442,"num_comments":1,"objectID":"35437401","points":9,"story_id":35437401,"title":"In Defense of Prompt Engineering","updated_at":"2023-09-07T12:42:57Z","url":"https://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"saeedesmaili"},"title":{"matchLevel":"none","matchedWords":[],"value":"Reading thermometer temperatures over time from a video"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/googlecloud/video-frame-ocr"}},"_tags":["story","author_saeedesmaili","story_35435979"],"author":"saeedesmaili","children":[35463446,35461436,35461425,35463146,35461695,35461246,35461416,35462171,35462973,35463362],"created_at":"2023-04-04T06:48:21Z","created_at_i":1680590901,"num_comments":18,"objectID":"35435979","points":31,"story_id":35435979,"title":"Reading thermometer temperatures over time from a video","updated_at":"2023-09-07T12:42:48Z","url":"https://til.simonwillison.net/googlecloud/video-frame-ocr"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"stevefink"},"title":{"matchLevel":"none","matchedWords":[],"value":"ChatGPT as a Calculator for Words"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Apr/2/calculator-for-words/"}},"_tags":["story","author_stevefink","story_35412296"],"author":"stevefink","children":[35415786,35415387,35415956,35419048,35419259,35417361,35417316,35415562,35415651,35418583,35416306,35415569,35417093,35416366,35419490,35419855,35419134],"created_at":"2023-04-02T16:29:21Z","created_at_i":1680452961,"num_comments":79,"objectID":"35412296","points":201,"story_id":35412296,"title":"ChatGPT as a Calculator for Words","updated_at":"2023-09-07T12:40:53Z","url":"https://simonwillison.net/2023/Apr/2/calculator-for-words/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"nigamanth"},"title":{"matchLevel":"none","matchedWords":[],"value":"If foxes can learn Ruby, why can\u2019t you?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2004/Feb/20/foxes/"}},"_tags":["story","author_nigamanth","story_35406195"],"author":"nigamanth","created_at":"2023-04-02T01:38:35Z","created_at_i":1680399515,"num_comments":0,"objectID":"35406195","points":3,"story_id":35406195,"title":"If foxes can learn Ruby, why can\u2019t you?","updated_at":"2023-09-07T12:40:24Z","url":"https://simonwillison.net/2004/Feb/20/foxes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"sirteno"},"title":{"matchLevel":"none","matchedWords":[],"value":"Could you train a ChatGPT-beating model for $85k and run it in a browser?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/17/beat-chatgpt-in-a-browser/"}},"_tags":["story","author_sirteno","story_35391115"],"author":"sirteno","children":[35391902,35391469,35398406,35391348,35391451,35392633,35391485,35391468,35393174,35395447,35392367,35392191,35391624,35391264,35391720,35393334,35391279,35399335,35393587,35394569,35393124,35393645,35395069,35393144,35392109,35393605,35392426,35395925,35391505,35397504,35391790,35394212,35392085,35391900,35391391,35391457],"created_at":"2023-03-31T18:21:07Z","created_at_i":1680286867,"num_comments":170,"objectID":"35391115","points":430,"story_id":35391115,"title":"Could you train a ChatGPT-beating model for $85k and run it in a browser?","updated_at":"2023-11-03T21:19:20Z","url":"https://simonwillison.net/2023/Mar/17/beat-chatgpt-in-a-browser/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"duck"},"title":{"matchLevel":"none","matchedWords":[],"value":"AI-enhanced development makes me more ambitious with my projects"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/27/ai-enhanced-development/"}},"_tags":["story","author_duck","story_35382698"],"author":"duck","children":[35383494,35383305,35383901,35384834,35390399,35384603,35383424,35384491,35384310,35383574,35383681,35384092,35384143,35384208,35386726,35383580,35384469,35383636,35388159,35384709,35383833,35383651,35386292,35384200,35384815,35384854,35384018,35383265,35383687,35388295,35384439,35387197,35383411,35383764,35383582,35383224,35384827,35383645,35396380,35383788,35388250,35388372,35384351,35387486,35386152,35385653,35383818,35384531,35383897,35383736,35387263,35384112,35384014,35384333,35389572,35386538,35383657,35387663,35383770,35384787,35443098,35387089,35384028,35386536,35383712,35383435],"created_at":"2023-03-31T04:45:55Z","created_at_i":1680237955,"num_comments":505,"objectID":"35382698","points":702,"story_id":35382698,"title":"AI-enhanced development makes me more ambitious with my projects","updated_at":"2023-12-29T07:41:19Z","url":"https://simonwillison.net/2023/Mar/27/ai-enhanced-development/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ABS"},"title":{"matchLevel":"none","matchedWords":[],"value":"AI-enhanced development makes me more ambitious with my projects"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/27/ai-enhanced-development/"}},"_tags":["story","author_ABS","story_35336863"],"author":"ABS","created_at":"2023-03-28T06:51:18Z","created_at_i":1679986278,"num_comments":0,"objectID":"35336863","points":1,"story_id":35336863,"title":"AI-enhanced development makes me more ambitious with my projects","updated_at":"2023-09-07T12:34:33Z","url":"https://simonwillison.net/2023/Mar/27/ai-enhanced-development/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"AI-enhanced development makes me more ambitious with my projects"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/27/ai-enhanced-development/"}},"_tags":["story","author_simonw","story_35327277"],"author":"simonw","children":[35327381],"created_at":"2023-03-27T14:41:34Z","created_at_i":1679928094,"num_comments":1,"objectID":"35327277","points":5,"story_id":35327277,"title":"AI-enhanced development makes me more ambitious with my projects","updated_at":"2023-09-07T12:33:48Z","url":"https://simonwillison.net/2023/Mar/27/ai-enhanced-development/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"I built a ChatGPT plugin to answer questions about data hosted in Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/24/datasette-chatgpt-plugin/"}},"_tags":["story","author_simonw","story_35290896"],"author":"simonw","children":[35291630],"created_at":"2023-03-24T15:57:56Z","created_at_i":1679673476,"num_comments":3,"objectID":"35290896","points":6,"story_id":35290896,"title":"I built a ChatGPT plugin to answer questions about data hosted in Datasette","updated_at":"2023-09-07T12:30:41Z","url":"https://simonwillison.net/2023/Mar/24/datasette-chatgpt-plugin/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"sebg"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to read Hacker News threads with most recent comments first"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/hacker-news/recent-comments"}},"_tags":["story","author_sebg","story_35282815"],"author":"sebg","children":[35283561,35283796,35286130,35283952,35284308,35283922,35284453,35287835,35283935,35287174,35284915,35289014,35287059,35298975,35283448,35284941,35287100],"created_at":"2023-03-23T23:12:08Z","created_at_i":1679613128,"num_comments":25,"objectID":"35282815","points":130,"story_id":35282815,"title":"How to read Hacker News threads with most recent comments first","updated_at":"2023-09-15T13:00:11Z","url":"https://til.simonwillison.net/hacker-news/recent-comments"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Don\u2019t trust AI to talk accurately about itself: Bard wasn\u2019t trained on Gmail"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/22/dont-trust-ai-to-talk-about-itself/"}},"_tags":["story","author_simonw","story_35256496"],"author":"simonw","children":[35265576,35256568],"created_at":"2023-03-22T03:36:16Z","created_at_i":1679456176,"num_comments":2,"objectID":"35256496","points":5,"story_id":35256496,"title":"Don\u2019t trust AI to talk accurately about itself: Bard wasn\u2019t trained on Gmail","updated_at":"2023-09-07T12:27:52Z","url":"https://simonwillison.net/2023/Mar/22/dont-trust-ai-to-talk-about-itself/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"redocecin"},"title":{"matchLevel":"none","matchedWords":[],"value":"ChatGPT can\u2019t access the internet, even though it looks like it can"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/10/chatgpt-internet-access/"}},"_tags":["story","author_redocecin","story_35244446"],"author":"redocecin","created_at":"2023-03-21T10:28:02Z","created_at_i":1679394482,"num_comments":0,"objectID":"35244446","points":2,"story_id":35244446,"title":"ChatGPT can\u2019t access the internet, even though it looks like it can","updated_at":"2023-09-07T12:26:50Z","url":"https://simonwillison.net/2023/Mar/10/chatgpt-internet-access/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"sebg"},"title":{"matchLevel":"none","matchedWords":[],"value":"In Defense of Prompt Engineering"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/"}},"_tags":["story","author_sebg","story_35236491"],"author":"sebg","created_at":"2023-03-20T18:40:39Z","created_at_i":1679337639,"num_comments":0,"objectID":"35236491","points":2,"story_id":35236491,"title":"In Defense of Prompt Engineering","updated_at":"2023-09-07T12:26:08Z","url":"https://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"nigamanth"},"title":{"matchLevel":"none","matchedWords":[],"value":"Blogging Ain't Easy (2002)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2002/Jun/12/bloggingAintEasy/"}},"_tags":["story","author_nigamanth","story_35205666"],"author":"nigamanth","created_at":"2023-03-18T03:09:39Z","created_at_i":1679108979,"num_comments":0,"objectID":"35205666","points":2,"story_id":35205666,"title":"Blogging Ain't Easy (2002)","updated_at":"2023-09-07T12:23:36Z","url":"https://simonwillison.net/2002/Jun/12/bloggingAintEasy/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"saeedesmaili"},"title":{"matchLevel":"none","matchedWords":[],"value":"Scraping Reddit and writing data to the Datasette write API"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/datasette/reddit-datasette-write"}},"_tags":["story","author_saeedesmaili","story_35203245"],"author":"saeedesmaili","children":[35204771],"created_at":"2023-03-17T21:36:37Z","created_at_i":1679088997,"num_comments":1,"objectID":"35203245","points":5,"story_id":35203245,"title":"Scraping Reddit and writing data to the Datasette write API","updated_at":"2023-09-07T12:23:27Z","url":"https://til.simonwillison.net/datasette/reddit-datasette-write"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"A simple Python implementation of the ReAct pattern for LLMs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/python-react-pattern"}},"_tags":["story","author_simonw","story_35200290"],"author":"simonw","children":[35201791],"created_at":"2023-03-17T17:42:39Z","created_at_i":1679074959,"num_comments":1,"objectID":"35200290","points":2,"story_id":35200290,"title":"A simple Python implementation of the ReAct pattern for LLMs","updated_at":"2023-09-07T12:23:12Z","url":"https://til.simonwillison.net/llms/python-react-pattern"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Could you train a ChatGPT-beating model for $85,000 and run it in a browser?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/17/beat-chatgpt-in-a-browser/"}},"_tags":["story","author_simonw","story_35198592"],"author":"simonw","children":[35206488],"created_at":"2023-03-17T15:45:06Z","created_at_i":1679067906,"num_comments":1,"objectID":"35198592","points":7,"story_id":35198592,"title":"Could you train a ChatGPT-beating model for $85,000 and run it in a browser?","updated_at":"2023-09-07T12:23:03Z","url":"https://simonwillison.net/2023/Mar/17/beat-chatgpt-in-a-browser/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mzs"},"title":{"matchLevel":"none","matchedWords":[],"value":"ChatGPT can\u2019t access the internet, even though it looks like it can"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/10/chatgpt-internet-access/"}},"_tags":["story","author_mzs","story_35172645"],"author":"mzs","created_at":"2023-03-15T18:31:13Z","created_at_i":1678905073,"num_comments":0,"objectID":"35172645","points":1,"story_id":35172645,"title":"ChatGPT can\u2019t access the internet, even though it looks like it can","updated_at":"2023-09-07T12:21:07Z","url":"https://simonwillison.net/2023/Mar/10/chatgpt-internet-access/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Kye"},"title":{"matchLevel":"none","matchedWords":[],"value":"Stanford Alpaca, and the acceleration of on-device LLM development"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/13/alpaca/"}},"_tags":["story","author_Kye","story_35141531"],"author":"Kye","children":[35141904,35141848,35141689,35148304,35142268,35149196,35149103],"created_at":"2023-03-13T19:54:37Z","created_at_i":1678737277,"num_comments":66,"objectID":"35141531","points":222,"story_id":35141531,"title":"Stanford Alpaca, and the acceleration of on-device LLM development","updated_at":"2023-09-07T12:18:39Z","url":"https://simonwillison.net/2023/Mar/13/alpaca/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"b3nji"},"title":{"matchLevel":"none","matchedWords":[],"value":"Spent a time figuring out how to read the Hacker News comments in order"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/hacker-news/recent-comments"}},"_tags":["story","author_b3nji","story_35132960"],"author":"b3nji","children":[35133101],"created_at":"2023-03-13T08:56:31Z","created_at_i":1678697791,"num_comments":1,"objectID":"35132960","points":5,"story_id":35132960,"title":"Spent a time figuring out how to read the Hacker News comments in order","updated_at":"2023-09-07T12:17:58Z","url":"https://til.simonwillison.net/hacker-news/recent-comments"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to read Hacker News threads with most recent comments first"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/hacker-news/recent-comments"}},"_tags":["story","author_simonw","story_35126011"],"author":"simonw","children":[35126107,35126562],"created_at":"2023-03-12T20:43:41Z","created_at_i":1678653821,"num_comments":3,"objectID":"35126011","points":4,"story_id":35126011,"title":"How to read Hacker News threads with most recent comments first","updated_at":"2023-09-07T12:17:33Z","url":"https://til.simonwillison.net/hacker-news/recent-comments"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Large language models are having their Stable Diffusion moment"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/11/llama/"}},"_tags":["story","author_simonw","story_35111646"],"author":"simonw","children":[35112759,35116695,35113597,35112684,35112686,35115151,35114193,35113797,35113452,35113704,35116216,35113700,35113837,35112394,35113720,35113179,35114993,35112210,35113577,35115408,35113272,35117833,35115539,35117646,35114917,35113579,35113458,35117879,35117779,35115425,35112379],"created_at":"2023-03-11T19:19:19Z","created_at_i":1678562359,"num_comments":369,"objectID":"35111646","points":811,"story_id":35111646,"title":"Large language models are having their Stable Diffusion moment","updated_at":"2023-09-07T12:16:27Z","url":"https://simonwillison.net/2023/Mar/11/llama/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"ChatGPT can\u2019t access the internet, even though it looks like it can"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/10/chatgpt-internet-access/"}},"_tags":["story","author_simonw","story_35105794"],"author":"simonw","children":[35105823],"created_at":"2023-03-11T05:42:03Z","created_at_i":1678513323,"num_comments":1,"objectID":"35105794","points":3,"story_id":35105794,"title":"ChatGPT can\u2019t access the internet, even though it looks like it can","updated_at":"2023-09-07T12:16:02Z","url":"https://simonwillison.net/2023/Mar/10/chatgpt-internet-access/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"marban"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running LLaMA 7B on a 64GB M2 MacBook Pro with Llama.cpp"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/llms/llama-7b-m2"}},"_tags":["story","author_marban","story_35105364"],"author":"marban","children":[35107005,35110570,35107953,35109474,35109195,35107548,35108694,35107926,35107795,35107733,35108525,35109367,35108132,35107963,35109491,35106990,35111381],"created_at":"2023-03-11T04:32:22Z","created_at_i":1678509142,"num_comments":76,"objectID":"35105364","points":225,"story_id":35105364,"title":"Running LLaMA 7B on a 64GB M2 MacBook Pro with Llama.cpp","updated_at":"2023-10-25T22:00:49Z","url":"https://til.simonwillison.net/llms/llama-7b-m2"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"I promise ChatGPT can\u2019t access the internet, even though it looks like it can"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Mar/10/chatgpt-internet-access/"}},"_tags":["story","author_simonw","story_35094284"],"author":"simonw","created_at":"2023-03-10T13:51:17Z","created_at_i":1678456277,"num_comments":0,"objectID":"35094284","points":4,"story_id":35094284,"title":"I promise ChatGPT can\u2019t access the internet, even though it looks like it can","updated_at":"2023-09-07T12:15:08Z","url":"https://simonwillison.net/2023/Mar/10/chatgpt-internet-access/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"goranmoomin"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using ChatGPT to write AppleScript, the notoriously read-only language"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/gpt3/chatgpt-applescript"}},"_tags":["story","author_goranmoomin","story_35080406"],"author":"goranmoomin","created_at":"2023-03-09T12:01:27Z","created_at_i":1678363287,"num_comments":0,"objectID":"35080406","points":1,"story_id":35080406,"title":"Using ChatGPT to write AppleScript, the notoriously read-only language","updated_at":"2023-09-07T12:14:05Z","url":"https://til.simonwillison.net/gpt3/chatgpt-applescript"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"samwillis"},"title":{"matchLevel":"none","matchedWords":[],"value":"A simple Python wrapper for the ChatGPT API"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/gpt3/chatgpt-api"}},"_tags":["story","author_samwillis","story_34997454"],"author":"samwillis","created_at":"2023-03-02T16:06:32Z","created_at_i":1677773192,"num_comments":0,"objectID":"34997454","points":2,"story_id":34997454,"title":"A simple Python wrapper for the ChatGPT API","updated_at":"2023-09-07T13:31:21Z","url":"https://til.simonwillison.net/gpt3/chatgpt-api"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"rbanffy"},"title":{"matchLevel":"none","matchedWords":[],"value":"Thoughts and impressions of AI-assisted search from Bing"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Feb/24/impressions-of-bing/"}},"_tags":["story","author_rbanffy","story_34931091"],"author":"rbanffy","created_at":"2023-02-24T22:32:42Z","created_at_i":1677277962,"num_comments":0,"objectID":"34931091","points":4,"story_id":34931091,"title":"Thoughts and impressions of AI-assisted search from Bing","updated_at":"2023-09-07T13:25:40Z","url":"https://simonwillison.net/2023/Feb/24/impressions-of-bing/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"taubek"},"title":{"matchLevel":"none","matchedWords":[],"value":"In Defense of Prompt Engineering"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/"}},"_tags":["story","author_taubek","story_34892549"],"author":"taubek","created_at":"2023-02-22T07:01:52Z","created_at_i":1677049312,"num_comments":0,"objectID":"34892549","points":2,"story_id":34892549,"title":"In Defense of Prompt Engineering","updated_at":"2023-09-07T13:22:11Z","url":"https://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"In Defense of Prompt Engineering"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/"}},"_tags":["story","author_simonw","story_34884822"],"author":"simonw","created_at":"2023-02-21T18:30:37Z","created_at_i":1677004237,"num_comments":0,"objectID":"34884822","points":3,"story_id":34884822,"title":"In Defense of Prompt Engineering","updated_at":"2023-09-07T13:21:29Z","url":"https://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Amorymeltzer"},"title":{"matchLevel":"none","matchedWords":[],"value":"I talked about Bing and tried to explain language models on live TV"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Feb/19/live-tv/"}},"_tags":["story","author_Amorymeltzer","story_34861549"],"author":"Amorymeltzer","created_at":"2023-02-19T20:32:25Z","created_at_i":1676838745,"num_comments":0,"objectID":"34861549","points":2,"story_id":34861549,"title":"I talked about Bing and tried to explain language models on live TV","updated_at":"2023-09-07T13:19:22Z","url":"https://simonwillison.net/2023/Feb/19/live-tv/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Amorymeltzer"},"title":{"matchLevel":"none","matchedWords":[],"value":"Sips: Scriptable Image Processing System"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/macos/sips"}},"_tags":["story","author_Amorymeltzer","story_34849734"],"author":"Amorymeltzer","children":[34850640,34852332,34850585,34850666,34851226,34852365,34850992,34851539,34851351],"created_at":"2023-02-18T18:44:57Z","created_at_i":1676745897,"num_comments":32,"objectID":"34849734","points":192,"story_id":34849734,"title":"Sips: Scriptable Image Processing System","updated_at":"2023-09-07T13:18:13Z","url":"https://til.simonwillison.net/macos/sips"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Analytics: Hacker News v.s. a tweet from Elon Musk"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Feb/17/analytics/"}},"_tags":["story","author_simonw","story_34841382"],"author":"simonw","children":[34842071,34841942,34841910,34842689,34841955,34844916,34842704,34844831,34841979,34846929,34842131,34841959,34846282,34842558,34842758,34842075],"created_at":"2023-02-17T22:18:12Z","created_at_i":1676672292,"num_comments":53,"objectID":"34841382","points":159,"story_id":34841382,"title":"Analytics: Hacker News v.s. a tweet from Elon Musk","updated_at":"2023-12-18T10:16:35Z","url":"https://simonwillison.net/2023/Feb/17/analytics/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Bing: \u201cI will not harm you unless you harm me first\u201d"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Feb/15/bing/"}},"_tags":["story","author_simonw","story_34804874"],"author":"simonw","children":[34804893,34806689,34809885,34805486,34806338,34808793,34806640,34806720,34807940,34807864,34814167,34805857,34805832,34806209,34809835,34808165,34808797,34808849,34807334,34807590,34805675,34809032,34806505,34809165,34809723,34806359,34807035,34812106,34806811,34805644,34806208,34807497,34808955,34817738,34806156,34808358,34809270,34812950,34806975,34808326,34817811,34809790,34807109,34807467,34808482,34811920,34817027,34808461,34806332,34808883,34806846,34815878,34806903,34806736,34806651,34809728,34808314,34805773,34808643,34807474,34805905,34808568,34817011,34818361,34806777,34808997,34806531,34807957,34809918,34808355,34808074,34822284,34808475,34814777,34807712,34820015,34816362,34827264,34820529,34807778,34806447,34807510,34811815,34806552,34816858,34820446,34815761,34819766,34822538,34815129,34823351,34816553,34807454,34809256,34817269,34816768,34810026,34807475,34806916,34806863,34815578,34810160,34816511,34815902,34812410,34808273,34809582,34807573,34809850,34808242,34806143,34807978,34808936,34818323,34807398,34816305,34810175,34815969,34810557,34808581,34821565,34809152,34809097,34807191,34813349,34806763,34817004,34830723,34808496,34808361,34816707,34816934,34815240,34806402,34815124,34808134,34809653,34806043,34820801,34813397,34815032,34806494,34805019,34815241,34808295,34810468,34806606,34815997,34812251,34830335,34808385,34808870,34808086,34810009,34820164,34809696,34818544,34816036,34808319,34807817,34807920,34806038,34809528,34815219,34811618,34807349,34812549,34808184,34808450,34816257,34808459,34813955,34817077,34808558,34807211,34817546,34830236,34809817,34807561,34816998,34822301,34813776,34815488,34814228,34811567,34812819,34806754,34820108,34807612,34814936,34810620,34808540,34810916,34812083,34816866,34808825,34807219,34809650,34807250,34815419,34814900,34810635,34805912,34815524,34809557,34813940,34820223,34815081,34808678,34809857,34809041,34808185,34807220,34810602,34816140,34807172,34828985,34807423,34816122,34808210,34809533,34806429],"created_at":"2023-02-15T15:14:15Z","created_at_i":1676474055,"num_comments":1673,"objectID":"34804874","points":3363,"story_id":34804874,"title":"Bing: \u201cI will not harm you unless you harm me first\u201d","updated_at":"2024-03-25T10:48:24Z","url":"https://simonwillison.net/2023/Feb/15/bing/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring MusicCaps, the training data behind Google\u2019s MusicLM text2music model"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jan/27/exploring-musiccaps/"}},"_tags":["story","author_simonw","story_34552374"],"author":"simonw","created_at":"2023-01-27T21:50:34Z","created_at_i":1674856234,"num_comments":0,"objectID":"34552374","points":1,"story_id":34552374,"title":"Exploring MusicCaps, the training data behind Google\u2019s MusicLM text2music model","updated_at":"2023-09-07T12:49:20Z","url":"https://simonwillison.net/2023/Jan/27/exploring-musiccaps/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"swyx"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to implement Q&A against your docs with GPT3 embeddings and Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jan/13/semantic-search-answers/"}},"_tags":["story","author_swyx","story_34477543"],"author":"swyx","children":[34481260,34480207,34481157,34485270,34481421,34487035,34485554,34484689,34483282,34480083],"created_at":"2023-01-22T14:11:18Z","created_at_i":1674396678,"num_comments":31,"objectID":"34477543","points":164,"story_id":34477543,"title":"How to implement Q&A against your docs with GPT3 embeddings and Datasette","updated_at":"2023-09-07T12:42:58Z","url":"https://simonwillison.net/2023/Jan/13/semantic-search-answers/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"cjg"},"title":{"matchLevel":"none","matchedWords":[],"value":"Implement Q&A against your documentation with GPT3"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jan/13/semantic-search-answers/"}},"_tags":["story","author_cjg","story_34389864"],"author":"cjg","children":[34392533],"created_at":"2023-01-15T14:57:50Z","created_at_i":1673794670,"num_comments":1,"objectID":"34389864","points":2,"story_id":34389864,"title":"Implement Q&A against your documentation with GPT3","updated_at":"2023-09-07T12:35:23Z","url":"https://simonwillison.net/2023/Jan/13/semantic-search-answers/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Semantic search answers: Q&A against documentation with GPT3+OpenAI embeddings"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2023/Jan/13/semantic-search-answers/"}},"_tags":["story","author_simonw","story_34375536"],"author":"simonw","created_at":"2023-01-13T23:51:57Z","created_at_i":1673653917,"num_comments":0,"objectID":"34375536","points":2,"story_id":34375536,"title":"Semantic search answers: Q&A against documentation with GPT3+OpenAI embeddings","updated_at":"2023-09-07T12:34:16Z","url":"https://simonwillison.net/2023/Jan/13/semantic-search-answers/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"DerekBickerton"},"title":{"matchLevel":"none","matchedWords":[],"value":"Is the AI spell-casting metaphor harmful or helpful?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Oct/5/spell-casting/"}},"_tags":["story","author_DerekBickerton","story_34371086"],"author":"DerekBickerton","created_at":"2023-01-13T17:42:17Z","created_at_i":1673631737,"num_comments":0,"objectID":"34371086","points":1,"story_id":34371086,"title":"Is the AI spell-casting metaphor harmful or helpful?","updated_at":"2023-09-07T12:33:57Z","url":"https://simonwillison.net/2022/Oct/5/spell-casting/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Scraping the Sky News Westminster Accounts, a Flourish Application"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/shot-scraper/scraping-flourish"}},"_tags":["story","author_edward","story_34331122"],"author":"edward","created_at":"2023-01-10T20:37:03Z","created_at_i":1673383023,"num_comments":0,"objectID":"34331122","points":1,"story_id":34331122,"title":"Scraping the Sky News Westminster Accounts, a Flourish Application","updated_at":"2023-09-07T12:30:36Z","url":"https://til.simonwillison.net/shot-scraper/scraping-flourish"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"thunderbong"},"title":{"matchLevel":"none","matchedWords":[],"value":"Geopoly in SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/sqlite/geopoly"}},"_tags":["story","author_thunderbong","story_34255831"],"author":"thunderbong","created_at":"2023-01-05T04:08:41Z","created_at_i":1672891721,"num_comments":0,"objectID":"34255831","points":4,"story_id":34255831,"title":"Geopoly in SQLite","updated_at":"2023-09-07T12:24:21Z","url":"https://til.simonwillison.net/sqlite/geopoly"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Querying the GitHub archive with the ClickHouse playground"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/clickhouse/github-explorer"}},"_tags":["story","author_simonw","story_34207883"],"author":"simonw","children":[34209244,34224892,34213657,34212355],"created_at":"2023-01-01T16:45:56Z","created_at_i":1672591556,"num_comments":13,"objectID":"34207883","points":116,"story_id":34207883,"title":"Querying the GitHub archive with the ClickHouse playground","updated_at":"2023-09-07T12:20:08Z","url":"https://til.simonwillison.net/clickhouse/github-explorer"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"fagnerbrack"},"title":{"matchLevel":"none","matchedWords":[],"value":"Software Engineering Practices"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Oct/1/software-engineering-practices#"}},"_tags":["story","author_fagnerbrack","story_34138020"],"author":"fagnerbrack","created_at":"2022-12-26T14:52:14Z","created_at_i":1672066334,"num_comments":0,"objectID":"34138020","points":1,"story_id":34138020,"title":"Software Engineering Practices","updated_at":"2023-09-07T12:14:11Z","url":"https://simonwillison.net/2022/Oct/1/software-engineering-practices#"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette 1.0a2: Upserts and finely grained permissions"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Dec/15/datasette-1a2/"}},"_tags":["story","author_simonw","story_34003252"],"author":"simonw","created_at":"2022-12-15T18:03:07Z","created_at_i":1671127387,"num_comments":0,"objectID":"34003252","points":2,"story_id":34003252,"title":"Datasette 1.0a2: Upserts and finely grained permissions","updated_at":"2023-09-07T12:02:03Z","url":"https://simonwillison.net/2022/Dec/15/datasette-1a2/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"djha-skin"},"title":{"matchLevel":"none","matchedWords":[],"value":"Over-Engineering Secret Santa with Python Cryptography and Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Dec/11/over-engineering-secret-santa/"}},"_tags":["story","author_djha-skin","story_33946214"],"author":"djha-skin","created_at":"2022-12-11T18:58:31Z","created_at_i":1670785111,"num_comments":0,"objectID":"33946214","points":2,"story_id":33946214,"title":"Over-Engineering Secret Santa with Python Cryptography and Datasette","updated_at":"2023-09-07T12:43:28Z","url":"https://simonwillison.net/2022/Dec/11/over-engineering-secret-santa/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Amorymeltzer"},"title":{"matchLevel":"none","matchedWords":[],"value":"Over-Engineering Secret Santa with Python Cryptography and Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Dec/11/over-engineering-secret-santa/"}},"_tags":["story","author_Amorymeltzer","story_33939474"],"author":"Amorymeltzer","created_at":"2022-12-11T02:34:00Z","created_at_i":1670726040,"num_comments":0,"objectID":"33939474","points":11,"story_id":33939474,"title":"Over-Engineering Secret Santa with Python Cryptography and Datasette","updated_at":"2023-09-07T12:42:51Z","url":"https://simonwillison.net/2022/Dec/11/over-engineering-secret-santa/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"sean_lynch"},"title":{"matchLevel":"none","matchedWords":[],"value":"Learning Rust with ChatGPT, Copilot and Advent of Code"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Dec/5/rust-chatgpt-copilot/"}},"_tags":["story","author_sean_lynch","story_33872369"],"author":"sean_lynch","children":[33873417,33872925,33872852,33872382,33873380,33891507,33874679,33873481],"created_at":"2022-12-05T21:47:56Z","created_at_i":1670276876,"num_comments":41,"objectID":"33872369","points":83,"story_id":33872369,"title":"Learning Rust with ChatGPT, Copilot and Advent of Code","updated_at":"2023-09-07T12:36:56Z","url":"https://simonwillison.net/2022/Dec/5/rust-chatgpt-copilot/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"A new AI game: Give me ideas for crimes to do"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Dec/4/give-me-ideas-for-crimes-to-do/"}},"_tags":["story","author_simonw","story_33854385"],"author":"simonw","children":[33855718,33855493,33856078,33857054,33857126,33855847,33855020,33855144,33854925,33856541,33859195,33855154,33860939,33857027,33855370,33854931,33855719,33854880,33856918,33854992,33857230,33860002,33854928,33858241,33858700,33855907,33856341,33859608,33856159,33856154],"created_at":"2022-12-04T15:14:45Z","created_at_i":1670166885,"num_comments":65,"objectID":"33854385","points":106,"story_id":33854385,"title":"A new AI game: Give me ideas for crimes to do","updated_at":"2023-09-19T08:21:22Z","url":"https://simonwillison.net/2022/Dec/4/give-me-ideas-for-crimes-to-do/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette\u2019s new JSON write API: The first alpha of Datasette 1.0"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Dec/2/datasette-write-api/"}},"_tags":["story","author_simonw","story_33838341"],"author":"simonw","children":[33838607,33839107,33839076,33844490,33839894,33844444],"created_at":"2022-12-02T23:23:15Z","created_at_i":1670023395,"num_comments":18,"objectID":"33838341","points":226,"story_id":33838341,"title":"Datasette\u2019s new JSON write API: The first alpha of Datasette 1.0","updated_at":"2023-09-07T12:34:03Z","url":"https://simonwillison.net/2022/Dec/2/datasette-write-api/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"usrme"},"title":{"matchLevel":"none","matchedWords":[],"value":"Coping strategies for the serial project hoarder"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/26/productivity/"}},"_tags":["story","author_usrme","story_33762438"],"author":"usrme","children":[33770328,33772272,33765736,33773151,33771740,33788001,33769869,33773125,33770744,33765585,33771791,33770021,33770350],"created_at":"2022-11-27T12:12:56Z","created_at_i":1669551176,"num_comments":38,"objectID":"33762438","points":224,"story_id":33762438,"title":"Coping strategies for the serial project hoarder","updated_at":"2023-09-07T12:27:45Z","url":"https://simonwillison.net/2022/Nov/26/productivity/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Increase your productivity on personal projects"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/26/productivity/"}},"_tags":["story","author_Tomte","story_33753990"],"author":"Tomte","created_at":"2022-11-26T16:25:38Z","created_at_i":1669479938,"num_comments":0,"objectID":"33753990","points":2,"story_id":33753990,"title":"Increase your productivity on personal projects","updated_at":"2023-09-07T12:27:00Z","url":"https://simonwillison.net/2022/Nov/26/productivity/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Amorymeltzer"},"title":{"matchLevel":"none","matchedWords":[],"value":"Increase your productivity with comprehensive documentation and automated tests"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/26/productivity/"}},"_tags":["story","author_Amorymeltzer","story_33753871"],"author":"Amorymeltzer","created_at":"2022-11-26T16:16:00Z","created_at_i":1669479360,"num_comments":0,"objectID":"33753871","points":3,"story_id":33753871,"title":"Increase your productivity with comprehensive documentation and automated tests","updated_at":"2023-09-07T12:27:00Z","url":"https://simonwillison.net/2022/Nov/26/productivity/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"rahimnathwani"},"title":{"matchLevel":"none","matchedWords":[],"value":"Massively increase your productivity on personal projects with docs and tests"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/26/productivity/"}},"_tags":["story","author_rahimnathwani","story_33753842"],"author":"rahimnathwani","created_at":"2022-11-26T16:13:16Z","created_at_i":1669479196,"num_comments":0,"objectID":"33753842","points":3,"story_id":33753842,"title":"Massively increase your productivity on personal projects with docs and tests","updated_at":"2023-09-07T12:27:00Z","url":"https://simonwillison.net/2022/Nov/26/productivity/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Increased productivity on personal projects with comprehensive docs and tests"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/26/productivity/"}},"_tags":["story","author_simonw","story_33753590"],"author":"simonw","created_at":"2022-11-26T15:51:23Z","created_at_i":1669477883,"num_comments":0,"objectID":"33753590","points":2,"story_id":33753590,"title":"Increased productivity on personal projects with comprehensive docs and tests","updated_at":"2023-09-07T12:27:00Z","url":"https://simonwillison.net/2022/Nov/26/productivity/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"indigodaddy"},"title":{"matchLevel":"none","matchedWords":[],"value":"Deploying Python web apps as AWS Lambda functions"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/awslambda/asgi-mangum"}},"_tags":["story","author_indigodaddy","story_33687843"],"author":"indigodaddy","created_at":"2022-11-21T02:10:16Z","created_at_i":1668996616,"num_comments":0,"objectID":"33687843","points":2,"story_id":33687843,"title":"Deploying Python web apps as AWS Lambda functions","updated_at":"2023-09-07T12:21:32Z","url":"https://til.simonwillison.net/awslambda/asgi-mangum"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Tracking Mastodon user numbers over time with a bucket of tricks"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/20/tracking-mastodon/"}},"_tags":["story","author_edward","story_33679028"],"author":"edward","children":[33679391,33697143,33679734,33679310],"created_at":"2022-11-20T07:19:14Z","created_at_i":1668928754,"num_comments":10,"objectID":"33679028","points":35,"story_id":33679028,"title":"Tracking Mastodon user numbers over time with a bucket of tricks","updated_at":"2023-09-07T12:20:49Z","url":"https://simonwillison.net/2022/Nov/20/tracking-mastodon/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"neilfrndes"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette is 5 today: a call for birthday presents"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/13/datasette-birthday/"}},"_tags":["story","author_neilfrndes","story_33612959"],"author":"neilfrndes","children":[33613177],"created_at":"2022-11-15T18:24:06Z","created_at_i":1668536646,"num_comments":2,"objectID":"33612959","points":5,"story_id":33612959,"title":"Datasette is 5 today: a call for birthday presents","updated_at":"2023-10-01T02:02:38Z","url":"https://simonwillison.net/2022/Nov/13/datasette-birthday/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ghuntley"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette is 5 today: a call for birthday presents"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/13/datasette-birthday/"}},"_tags":["story","author_ghuntley","story_33587293"],"author":"ghuntley","created_at":"2022-11-13T21:00:54Z","created_at_i":1668373254,"num_comments":0,"objectID":"33587293","points":2,"story_id":33587293,"title":"Datasette is 5 today: a call for birthday presents","updated_at":"2023-09-07T12:12:45Z","url":"https://simonwillison.net/2022/Nov/13/datasette-birthday/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"fariszr"},"title":{"matchLevel":"none","matchedWords":[],"value":"Mastodon Is Just Blogs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/8/mastodon-is-just-blogs/"}},"_tags":["story","author_fariszr","story_33520382"],"author":"fariszr","children":[33522539,33524441,33524726,33524701,33525683,33523643,33533482,33526832,33526880,33524377],"created_at":"2022-11-08T15:57:09Z","created_at_i":1667923029,"num_comments":34,"objectID":"33520382","points":69,"story_id":33520382,"title":"Mastodon Is Just Blogs","updated_at":"2023-09-07T12:06:46Z","url":"https://simonwillison.net/2022/Nov/8/mastodon-is-just-blogs/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"What to blog about"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/6/what-to-blog-about/"}},"_tags":["story","author_Tomte","story_33495295"],"author":"Tomte","children":[33499694,33500343,33500832,33495995,33502200,33499677,33495840,33499833,33502017,33502617,33497811,33497876,33498297,33498605,33499067,33496776,33497860,33500744,33503103,33500846,33497970,33498090,33496521,33497728,33496102,33498920,33498001,33498927,33495831,33499166,33495866,33498661],"created_at":"2022-11-06T17:57:08Z","created_at_i":1667757428,"num_comments":90,"objectID":"33495295","points":333,"story_id":33495295,"title":"What to blog about","updated_at":"2023-09-16T05:58:11Z","url":"https://simonwillison.net/2022/Nov/6/what-to-blog-about/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"swyx"},"title":{"matchLevel":"none","matchedWords":[],"value":"It looks like I\u2019m moving to Mastodon"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Nov/5/mastodon/"}},"_tags":["story","author_swyx","story_33478570"],"author":"swyx","children":[33479127,33479538,33479587,33479301,33478899,33479215,33481664,33478912,33479135,33479823,33479371,33478914,33478867,33479658,33479287,33479338,33479282,33479544,33479202,33479421,33479498,33479128,33479353,33483505,33478865,33479343,33480040,33479677,33478816,33480133,33486141,33481836,33479922,33479120,33479921,33479553,33479779,33482959,33479247,33479045,33479868,33479800,33479528,33479424,33480436,33480260,33479068,33479399,33479155,33479224,33478888,33478907,33479547,33478996],"created_at":"2022-11-05T06:33:10Z","created_at_i":1667629990,"num_comments":447,"objectID":"33478570","points":258,"story_id":33478570,"title":"It looks like I\u2019m moving to Mastodon","updated_at":"2023-11-06T08:03:32Z","url":"https://simonwillison.net/2022/Nov/5/mastodon/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"GitHub Pages: The Missing Manual"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/github/github-pages"}},"_tags":["story","author_simonw","story_33416803"],"author":"simonw","created_at":"2022-11-01T04:10:09Z","created_at_i":1667275809,"num_comments":0,"objectID":"33416803","points":4,"story_id":33416803,"title":"GitHub Pages: The Missing Manual","updated_at":"2023-09-07T11:57:12Z","url":"https://til.simonwillison.net/github/github-pages"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"todsacerdoti"},"title":{"matchLevel":"none","matchedWords":[],"value":"The Perfect Commit"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Oct/29/the-perfect-commit/"}},"_tags":["story","author_todsacerdoti","story_33387855"],"author":"todsacerdoti","children":[33388869,33388549,33388180,33388231,33390941,33388680,33388915,33390805,33392027,33392501,33388369,33388631,33389258,33388431,33388172,33391718,33391795,33392833,33392195,33389070,33389740,33387964,33392221,33395480,33393204,33388175,33388700,33390165,33391002,33390033,33396457,33388297,33388318,33389447,33388115],"created_at":"2022-10-29T20:52:54Z","created_at_i":1667076774,"num_comments":219,"objectID":"33387855","points":197,"story_id":33387855,"title":"The Perfect Commit","updated_at":"2023-11-22T02:31:54Z","url":"https://simonwillison.net/2022/Oct/29/the-perfect-commit/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Measuring Traffic During the Half Moon Bay Pumpkin Festival"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Oct/19/measuring-traffic/"}},"_tags":["story","author_simonw","story_33264578"],"author":"simonw","created_at":"2022-10-19T16:32:32Z","created_at_i":1666197152,"num_comments":0,"objectID":"33264578","points":1,"story_id":33264578,"title":"Measuring Traffic During the Half Moon Bay Pumpkin Festival","updated_at":"2023-09-07T11:43:58Z","url":"https://simonwillison.net/2022/Oct/19/measuring-traffic/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"thunderbong"},"title":{"matchLevel":"none","matchedWords":[],"value":"PAGNIs: Probably Are Gonna Need Its (2021)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/1/pagnis/"}},"_tags":["story","author_thunderbong","story_33231335"],"author":"thunderbong","children":[33235310,33237314,33232995,33234504,33233562,33234124,33233730,33234687,33235767,33237794,33233620,33244516,33243344,33236863],"created_at":"2022-10-17T09:18:05Z","created_at_i":1665998285,"num_comments":97,"objectID":"33231335","points":150,"story_id":33231335,"title":"PAGNIs: Probably Are Gonna Need Its (2021)","updated_at":"2023-09-07T11:41:15Z","url":"https://simonwillison.net/2021/Jul/1/pagnis/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"todsacerdoti"},"title":{"matchLevel":"none","matchedWords":[],"value":"Shot-scraper: Automating screenshots for documentation"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Oct/14/automating-screenshots/"}},"_tags":["story","author_todsacerdoti","story_33216789"],"author":"todsacerdoti","children":[33218743,33218349,33221779,33218985,33218438],"created_at":"2022-10-15T17:33:36Z","created_at_i":1665855216,"num_comments":15,"objectID":"33216789","points":63,"story_id":33216789,"title":"Shot-scraper: Automating screenshots for documentation","updated_at":"2023-09-07T11:39:59Z","url":"https://simonwillison.net/2022/Oct/14/automating-screenshots/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"BudaDude"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring the training data behind Stable Diffusion"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Sep/5/laion-aesthetics-weeknotes/"}},"_tags":["story","author_BudaDude","story_33205453"],"author":"BudaDude","created_at":"2022-10-14T16:13:48Z","created_at_i":1665764028,"num_comments":0,"objectID":"33205453","points":2,"story_id":33205453,"title":"Exploring the training data behind Stable Diffusion","updated_at":"2023-09-07T11:39:03Z","url":"https://simonwillison.net/2022/Sep/5/laion-aesthetics-weeknotes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"yaph"},"title":{"matchLevel":"none","matchedWords":[],"value":"Writing pytest tests against tools written with argparse \u2013 Simon Willison\u2019s TILs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/pytest/pytest-argparse"}},"_tags":["story","author_yaph","story_33190167"],"author":"yaph","created_at":"2022-10-13T12:38:58Z","created_at_i":1665664738,"num_comments":0,"objectID":"33190167","points":1,"story_id":33190167,"title":"Writing pytest tests against tools written with argparse \u2013 Simon Willison\u2019s TILs","updated_at":"2023-09-07T11:37:50Z","url":"https://til.simonwillison.net/pytest/pytest-argparse"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Is the AI spell-casting metaphor harmful or helpful?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Oct/5/spell-casting/"}},"_tags":["story","author_simonw","story_33102512"],"author":"simonw","children":[33102696],"created_at":"2022-10-05T23:28:26Z","created_at_i":1665012506,"num_comments":1,"objectID":"33102512","points":2,"story_id":33102512,"title":"Is the AI spell-casting metaphor harmful or helpful?","updated_at":"2023-09-07T11:30:29Z","url":"https://simonwillison.net/2022/Oct/5/spell-casting/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"todsacerdoti"},"title":{"matchLevel":"none","matchedWords":[],"value":"Software Engineering Practices"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Oct/1/software-engineering-practices/"}},"_tags":["story","author_todsacerdoti","story_33051621"],"author":"todsacerdoti","created_at":"2022-10-02T00:47:53Z","created_at_i":1664671673,"num_comments":0,"objectID":"33051621","points":41,"story_id":33051621,"title":"Software Engineering Practices","updated_at":"2023-09-07T11:26:14Z","url":"https://simonwillison.net/2022/Oct/1/software-engineering-practices/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mzs"},"title":{"matchLevel":"none","matchedWords":[],"value":"A tool for capturing captions and transcripts from online videos"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Sep/30/action-transcription/"}},"_tags":["story","author_mzs","story_33035369"],"author":"mzs","children":[33043521,33037801,33035391,33039600,33042958,33052160,33042713,33069833,33037494,33041905,33037189,33038235],"created_at":"2022-09-30T14:31:29Z","created_at_i":1664548289,"num_comments":28,"objectID":"33035369","points":123,"story_id":33035369,"title":"A tool for capturing captions and transcripts from online videos","updated_at":"2023-09-07T11:24:47Z","url":"https://simonwillison.net/2022/Sep/30/action-transcription/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring 10M scraped Shutterstock videos used to train Meta\u2019s Make-A-Video"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Sep/29/webvid/"}},"_tags":["story","author_simonw","story_33025974"],"author":"simonw","created_at":"2022-09-29T19:38:46Z","created_at_i":1664480326,"num_comments":0,"objectID":"33025974","points":6,"story_id":33025974,"title":"Exploring 10M scraped Shutterstock videos used to train Meta\u2019s Make-A-Video","updated_at":"2023-09-07T11:23:56Z","url":"https://simonwillison.net/2022/Sep/29/webvid/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"You can\u2019t solve AI security problems with more AI"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Sep/17/prompt-injection-more-ai/"}},"_tags":["story","author_simonw","story_32882496"],"author":"simonw","children":[32885051,32885177],"created_at":"2022-09-17T23:04:39Z","created_at_i":1663455879,"num_comments":13,"objectID":"32882496","points":21,"story_id":32882496,"title":"You can\u2019t solve AI security problems with more AI","updated_at":"2023-09-07T11:56:16Z","url":"https://simonwillison.net/2022/Sep/17/prompt-injection-more-ai/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"I don\u2019t know how to solve prompt injection"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Sep/16/prompt-injection-solutions/"}},"_tags":["story","author_simonw","story_32868622"],"author":"simonw","created_at":"2022-09-16T16:36:28Z","created_at_i":1663346188,"num_comments":0,"objectID":"32868622","points":7,"story_id":32868622,"title":"I don\u2019t know how to solve prompt injection","updated_at":"2023-09-07T11:54:59Z","url":"https://simonwillison.net/2022/Sep/16/prompt-injection-solutions/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"danhon"},"title":{"matchLevel":"none","matchedWords":[],"value":"Prompt injection attacks against GPT-3"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2022/Sep/12/prompt-injection/#atom-everything"}},"_tags":["story","author_danhon","story_32829227"],"author":"danhon","created_at":"2022-09-13T19:37:42Z","created_at_i":1663097862,"num_comments":0,"objectID":"32829227","points":2,"story_id":32829227,"title":"Prompt injection attacks against GPT-3","updated_at":"2023-09-07T11:51:36Z","url":"http://simonwillison.net/2022/Sep/12/prompt-injection/#atom-everything"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Prompt injection attacks against GPT-3"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Sep/12/prompt-injection/"}},"_tags":["story","author_simonw","story_32817941"],"author":"simonw","children":[32820375,32820643,32820329,32820733,32820331,32820956,32820707,32821709,32820763,32820171,32911778,32882701,32865682,32823605,32830998,32820389,32820918,32820176,32821144,32821913,32884914,32822133,32820901,32820618,32820368,32820355,32820796],"created_at":"2022-09-12T22:25:06Z","created_at_i":1663021506,"num_comments":113,"objectID":"32817941","points":208,"story_id":32817941,"title":"Prompt injection attacks against GPT-3","updated_at":"2023-09-07T11:50:37Z","url":"https://simonwillison.net/2022/Sep/12/prompt-injection/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"indigodaddy"},"title":{"matchLevel":"none","matchedWords":[],"value":"Deploying a Redbean App to Fly"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/fly/redbean-on-fly"}},"_tags":["story","author_indigodaddy","story_32685316"],"author":"indigodaddy","created_at":"2022-09-02T00:49:16Z","created_at_i":1662079756,"num_comments":0,"objectID":"32685316","points":2,"story_id":32685316,"title":"Deploying a Redbean App to Fly","updated_at":"2023-09-07T11:39:54Z","url":"https://til.simonwillison.net/fly/redbean-on-fly"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"todsacerdoti"},"title":{"matchLevel":"none","matchedWords":[],"value":"Notes on the SQLite DuckDB Paper"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Sep/1/sqlite-duckdb-paper/"}},"_tags":["story","author_todsacerdoti","story_32684424"],"author":"todsacerdoti","children":[32685082,32684608,32685878,32687393,32687683,32688809,32685147],"created_at":"2022-09-01T22:52:55Z","created_at_i":1662072775,"num_comments":28,"objectID":"32684424","points":195,"story_id":32684424,"title":"Notes on the SQLite DuckDB Paper","updated_at":"2023-10-10T17:49:49Z","url":"https://simonwillison.net/2022/Sep/1/sqlite-duckdb-paper/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"rmujica"},"title":{"matchLevel":"none","matchedWords":[],"value":"Stable Diffusion is a big deal"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Aug/29/stable-diffusion/"}},"_tags":["story","author_rmujica","story_32650858"],"author":"rmujica","created_at":"2022-08-30T14:23:12Z","created_at_i":1661869392,"num_comments":0,"objectID":"32650858","points":2,"story_id":32650858,"title":"Stable Diffusion is a big deal","updated_at":"2023-09-07T11:37:06Z","url":"https://simonwillison.net/2022/Aug/29/stable-diffusion/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Image generation ethics: Will you be an AI vegan?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Aug/29/stable-diffusion/#ai-vegan"}},"_tags":["story","author_simonw","story_32639643"],"author":"simonw","children":[32639951,32639893,32640028,32639967,32640179,32640519,32640685,32640833,32640678,32640380,32640013,32639963,32640319,32640116,32640073,32640538,32640261,32641707,32640423,32640235,32641026,32640727,32640453,32640699,32640351,32640251,32640326,32641022,32640844,32640786,32641272,32640346,32639945,32642867,32648228,32640277,32639980,32641009,32639992,32640029],"created_at":"2022-08-29T15:48:18Z","created_at_i":1661788098,"num_comments":194,"objectID":"32639643","points":112,"story_id":32639643,"title":"Image generation ethics: Will you be an AI vegan?","updated_at":"2023-09-07T11:36:14Z","url":"https://simonwillison.net/2022/Aug/29/stable-diffusion/#ai-vegan"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Stable Diffusion is a big deal"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Aug/29/stable-diffusion/"}},"_tags":["story","author_edward","story_32636760"],"author":"edward","children":[32636830],"created_at":"2022-08-29T11:13:47Z","created_at_i":1661771627,"num_comments":1,"objectID":"32636760","points":16,"story_id":32636760,"title":"Stable Diffusion is a big deal","updated_at":"2023-09-07T11:35:58Z","url":"https://simonwillison.net/2022/Aug/29/stable-diffusion/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Stable Diffusion is a big deal"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Aug/29/stable-diffusion/"}},"_tags":["story","author_simonw","story_32634074"],"author":"simonw","children":[32658094,32662055,32659850,32657973,32660252,32662063,32658677,32659178,32659249,32659960,32658322,32660577,32660291,32658325,32661988,32658855,32659505,32658456,32658376,32659527,32658406,32658242,32659401,32659634,32661659,32663967,32660339,32664727,32658247,32659470,32659015,32659350,32661621,32659437,32658513,32661016,32662134,32659070,32664449,32661586,32785604,32660324,32658995,32659122,32664388,32658496,32658819,32659460,32671785,32659045,32660522,32658584,32658291,32659218,32660074,32658738],"created_at":"2022-08-29T02:03:19Z","created_at_i":1661738599,"num_comments":471,"objectID":"32634074","points":874,"story_id":32634074,"title":"Stable Diffusion is a big deal","updated_at":"2023-09-07T11:35:49Z","url":"https://simonwillison.net/2022/Aug/29/stable-diffusion/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building a Searchable Archive for the San Francisco Microscopical Society"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Aug/25/sfms-archive/"}},"_tags":["story","author_simonw","story_32597270"],"author":"simonw","children":[32598373],"created_at":"2022-08-25T17:44:43Z","created_at_i":1661449483,"num_comments":1,"objectID":"32597270","points":3,"story_id":32597270,"title":"Building a Searchable Archive for the San Francisco Microscopical Society","updated_at":"2023-09-07T11:32:49Z","url":"https://simonwillison.net/2022/Aug/25/sfms-archive/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Hacking around with the ScotRail audio announcements"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Aug/21/scotrail/"}},"_tags":["story","author_simonw","story_32536808"],"author":"simonw","children":[32538165,32538784,32538618,32538348,32540642,32538436,32542531,32538429,32539461,32539599,32545462,32538812,32600181],"created_at":"2022-08-21T02:10:55Z","created_at_i":1661047855,"num_comments":30,"objectID":"32536808","points":139,"story_id":32536808,"title":"Hacking around with the ScotRail audio announcements","updated_at":"2023-09-07T11:27:58Z","url":"https://simonwillison.net/2022/Aug/21/scotrail/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Plugin Support for Datasette Lite (Datasette in the Browser with WebAssembly)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Aug/17/datasette-lite-plugins/"}},"_tags":["story","author_simonw","story_32500120"],"author":"simonw","created_at":"2022-08-17T18:43:52Z","created_at_i":1660761832,"num_comments":0,"objectID":"32500120","points":2,"story_id":32500120,"title":"Plugin Support for Datasette Lite (Datasette in the Browser with WebAssembly)","updated_at":"2023-09-07T11:24:56Z","url":"https://simonwillison.net/2022/Aug/17/datasette-lite-plugins/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Microsoft Open Source Software Secure Supply Chain Framework Requirements"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Aug/6/secure-supply-chain/"}},"_tags":["story","author_edward","story_32386558"],"author":"edward","created_at":"2022-08-08T15:22:40Z","created_at_i":1659972160,"num_comments":0,"objectID":"32386558","points":3,"story_id":32386558,"title":"Microsoft Open Source Software Secure Supply Chain Framework Requirements","updated_at":"2023-09-07T11:15:43Z","url":"https://simonwillison.net/2022/Aug/6/secure-supply-chain/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"robin_reala"},"title":{"matchLevel":"none","matchedWords":[],"value":"Emulating a big-endian s390x with QEMU"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/docker/emulate-s390x-with-qemu"}},"_tags":["story","author_robin_reala","story_32284661"],"author":"robin_reala","children":[32289014],"created_at":"2022-07-30T06:05:54Z","created_at_i":1659161154,"num_comments":1,"objectID":"32284661","points":7,"story_id":32284661,"title":"Emulating a big-endian s390x with QEMU","updated_at":"2023-09-07T11:07:25Z","url":"https://til.simonwillison.net/docker/emulate-s390x-with-qemu"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"revorad"},"title":{"matchLevel":"none","matchedWords":[],"value":"Struct Endianness in Python"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/struct-endianness"}},"_tags":["story","author_revorad","story_32267008"],"author":"revorad","children":[32269852,32270513,32269346,32270917,32272443],"created_at":"2022-07-28T16:56:50Z","created_at_i":1659027410,"num_comments":7,"objectID":"32267008","points":75,"story_id":32267008,"title":"Struct Endianness in Python","updated_at":"2023-09-07T11:05:59Z","url":"https://til.simonwillison.net/python/struct-endianness"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ghuntley"},"title":{"matchLevel":"none","matchedWords":[],"value":"Weeknotes: Datasette, SQLite-utils, Datasette Desktop"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jul/20/weeknotes/"}},"_tags":["story","author_ghuntley","story_32173700"],"author":"ghuntley","children":[32178011],"created_at":"2022-07-20T23:20:17Z","created_at_i":1658359217,"num_comments":0,"objectID":"32173700","points":29,"story_id":32173700,"title":"Weeknotes: Datasette, SQLite-utils, Datasette Desktop","updated_at":"2023-09-07T10:57:54Z","url":"https://simonwillison.net/2022/Jul/20/weeknotes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"BerislavLopac"},"title":{"matchLevel":"none","matchedWords":[],"value":"Freezing Requirements with Pip-Tools"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/pip-tools"}},"_tags":["story","author_BerislavLopac","story_32105129"],"author":"BerislavLopac","children":[32109931,32106200,32106597,32108074,32106916,32107217,32109074,32108923,32107390],"created_at":"2022-07-15T06:12:15Z","created_at_i":1657865535,"num_comments":57,"objectID":"32105129","points":55,"story_id":32105129,"title":"Freezing Requirements with Pip-Tools","updated_at":"2023-09-07T10:52:21Z","url":"https://til.simonwillison.net/python/pip-tools"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using GPT-3 to explain how code works"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jul/9/gpt-3-explain-code/"}},"_tags":["story","author_simonw","story_32036224"],"author":"simonw","children":[32040257,32040125,32039662,32040778,32041044,32042689,32039770,32039900,32039827,32043393,32041649,32044368,32051880,32039948,32040051,32058305,32043300,32043119,32040706,32043561,32040241,32043217,32042880,32040275,32041577,32042354,32051857,32039893,32042149,32041279],"created_at":"2022-07-09T15:53:35Z","created_at_i":1657382015,"num_comments":147,"objectID":"32036224","points":385,"story_id":32036224,"title":"Using GPT-3 to explain how code works","updated_at":"2023-09-07T10:46:27Z","url":"https://simonwillison.net/2022/Jul/9/gpt-3-explain-code/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Show HN: S3-OCR: Extract text from PDF files stored in an S3 bucket"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jun/30/s3-ocr/"}},"_tags":["story","author_simonw","story_31939094","show_hn"],"author":"simonw","created_at":"2022-06-30T21:50:05Z","created_at_i":1656625805,"num_comments":0,"objectID":"31939094","points":6,"story_id":31939094,"title":"Show HN: S3-OCR: Extract text from PDF files stored in an S3 bucket","updated_at":"2023-09-07T11:54:34Z","url":"https://simonwillison.net/2022/Jun/30/s3-ocr/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"amrrs"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running OCR Against a Scanned PDF with AWS Textract"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/aws/ocr-pdf-textract"}},"_tags":["story","author_amrrs","story_31912171"],"author":"amrrs","created_at":"2022-06-28T19:49:30Z","created_at_i":1656445770,"num_comments":0,"objectID":"31912171","points":2,"story_id":31912171,"title":"Running OCR Against a Scanned PDF with AWS Textract","updated_at":"2023-09-07T11:51:50Z","url":"https://til.simonwillison.net/aws/ocr-pdf-textract"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"todsacerdoti"},"title":{"matchLevel":"none","matchedWords":[],"value":"First impressions of DALL-E, generating images from text"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jun/23/dall-e/"}},"_tags":["story","author_todsacerdoti","story_31861082"],"author":"todsacerdoti","created_at":"2022-06-24T13:00:13Z","created_at_i":1656075613,"num_comments":0,"objectID":"31861082","points":2,"story_id":31861082,"title":"First impressions of DALL-E, generating images from text","updated_at":"2023-09-07T11:45:56Z","url":"https://simonwillison.net/2022/Jun/23/dall-e/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tony-allan"},"title":{"matchLevel":"none","matchedWords":[],"value":"Simon Willison's cool categorised TIL page"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/"}},"_tags":["story","author_tony-allan","story_31831145"],"author":"tony-allan","created_at":"2022-06-22T01:42:29Z","created_at_i":1655862149,"num_comments":0,"objectID":"31831145","points":3,"story_id":31831145,"title":"Simon Willison's cool categorised TIL page","updated_at":"2023-09-07T11:43:16Z","url":"https://til.simonwillison.net/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Brajeshwar"},"title":{"matchLevel":"none","matchedWords":[],"value":"Implementing a \u201cCopy to Clipboard\u201d Button"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/javascript/copy-button"}},"_tags":["story","author_Brajeshwar","story_31825556"],"author":"Brajeshwar","created_at":"2022-06-21T16:06:44Z","created_at_i":1655827604,"num_comments":0,"objectID":"31825556","points":1,"story_id":31825556,"title":"Implementing a \u201cCopy to Clipboard\u201d Button","updated_at":"2023-09-07T11:42:46Z","url":"https://til.simonwillison.net/javascript/copy-button"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"jdblair"},"title":{"matchLevel":"none","matchedWords":[],"value":"One-liner for running queries against CSV files with SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/sqlite/one-line-csv-operations"}},"_tags":["story","author_jdblair","story_31824030"],"author":"jdblair","children":[31824192,31824385,31825093,31824265,31825577,31825071,31825374,31824667,31824506,31825195,31826642,31827714,31825215,31825337,31824197,31825905,31825261,31824731,31825558,31825199,31827820,31828094,31832424,31826397,31825632,31824609,31825464,31827293,31826052,31835669,31824590],"created_at":"2022-06-21T13:59:36Z","created_at_i":1655819976,"num_comments":127,"objectID":"31824030","points":747,"story_id":31824030,"title":"One-liner for running queries against CSV files with SQLite","updated_at":"2024-03-16T22:08:50Z","url":"https://til.simonwillison.net/sqlite/one-line-csv-operations"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"One-liner for running queries against CSV files with SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/sqlite/one-line-csv-operations"}},"_tags":["story","author_simonw","story_31818939"],"author":"simonw","created_at":"2022-06-21T02:03:34Z","created_at_i":1655777014,"num_comments":0,"objectID":"31818939","points":6,"story_id":31818939,"title":"One-liner for running queries against CSV files with SQLite","updated_at":"2023-09-07T11:42:10Z","url":"https://til.simonwillison.net/sqlite/one-line-csv-operations"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"samwillis"},"title":{"matchLevel":"none","matchedWords":[],"value":"Joining CSV files in the browser using Datasette Lite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jun/20/datasette-lite-csvs/"}},"_tags":["story","author_samwillis","story_31816265"],"author":"samwillis","created_at":"2022-06-20T21:30:32Z","created_at_i":1655760632,"num_comments":0,"objectID":"31816265","points":3,"story_id":31816265,"title":"Joining CSV files in the browser using Datasette Lite","updated_at":"2023-09-07T11:41:59Z","url":"https://simonwillison.net/2022/Jun/20/datasette-lite-csvs/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"pcr910303"},"title":{"matchLevel":"none","matchedWords":[],"value":"Bundling binary tools in Python wheels"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/May/23/bundling-binary-tools-in-python-wheels/"}},"_tags":["story","author_pcr910303","story_31776873"],"author":"pcr910303","children":[31780520,31777268,31778004,31778683,31778961,31780416,31777382,31780706,31783720,31779387,31782978],"created_at":"2022-06-17T12:00:43Z","created_at_i":1655467243,"num_comments":32,"objectID":"31776873","points":110,"story_id":31776873,"title":"Bundling binary tools in Python wheels","updated_at":"2023-09-07T11:38:20Z","url":"https://simonwillison.net/2022/May/23/bundling-binary-tools-in-python-wheels/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Twenty years of my blog"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jun/12/twenty-years/"}},"_tags":["story","author_simonw","story_31727464"],"author":"simonw","children":[31729828,31729477,31728336,31732609,31734273,31728825,31729001,31733204,31730242,31737390,31730403,31733174,31730667,31733516,31792334,31733105,31729051],"created_at":"2022-06-13T16:09:15Z","created_at_i":1655136555,"num_comments":23,"objectID":"31727464","points":231,"story_id":31727464,"title":"Twenty years of my blog","updated_at":"2023-09-07T11:33:49Z","url":"https://simonwillison.net/2022/Jun/12/twenty-years/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"fauigerzigerk"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to play with the GPT-3 language model"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jun/5/play-with-gpt3/"}},"_tags":["story","author_fauigerzigerk","story_31712807"],"author":"fauigerzigerk","created_at":"2022-06-12T08:32:53Z","created_at_i":1655022773,"num_comments":0,"objectID":"31712807","points":12,"story_id":31712807,"title":"How to play with the GPT-3 language model","updated_at":"2023-09-07T11:32:31Z","url":"https://simonwillison.net/2022/Jun/5/play-with-gpt3/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"sebg"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to play with the GPT-3 language model"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jun/5/play-with-gpt3/"}},"_tags":["story","author_sebg","story_31641009"],"author":"sebg","created_at":"2022-06-06T14:33:29Z","created_at_i":1654526009,"num_comments":0,"objectID":"31641009","points":2,"story_id":31641009,"title":"How to play with the GPT-3 language model","updated_at":"2023-09-07T11:26:13Z","url":"https://simonwillison.net/2022/Jun/5/play-with-gpt3/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ctoth"},"title":{"matchLevel":"none","matchedWords":[],"value":"A Datasette tutorial written by GPT-3"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/May/31/a-datasette-tutorial-written-by-gpt-3/"}},"_tags":["story","author_ctoth","story_31634527"],"author":"ctoth","created_at":"2022-06-05T20:28:11Z","created_at_i":1654460891,"num_comments":0,"objectID":"31634527","points":2,"story_id":31634527,"title":"A Datasette tutorial written by GPT-3","updated_at":"2023-09-07T11:25:36Z","url":"https://simonwillison.net/2022/May/31/a-datasette-tutorial-written-by-gpt-3/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"pcr910303"},"title":{"matchLevel":"none","matchedWords":[],"value":"A Datasette tutorial written by GPT-3"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/May/31/a-datasette-tutorial-written-by-gpt-3/"}},"_tags":["story","author_pcr910303","story_31617445"],"author":"pcr910303","created_at":"2022-06-04T05:58:36Z","created_at_i":1654322316,"num_comments":0,"objectID":"31617445","points":2,"story_id":31617445,"title":"A Datasette tutorial written by GPT-3","updated_at":"2023-09-07T11:24:06Z","url":"https://simonwillison.net/2022/May/31/a-datasette-tutorial-written-by-gpt-3/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"BerislavLopac"},"title":{"matchLevel":"none","matchedWords":[],"value":"A Datasette tutorial written by GPT-3"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/May/31/a-datasette-tutorial-written-by-gpt-3/"}},"_tags":["story","author_BerislavLopac","story_31579302"],"author":"BerislavLopac","created_at":"2022-06-01T08:01:15Z","created_at_i":1654070475,"num_comments":0,"objectID":"31579302","points":1,"story_id":31579302,"title":"A Datasette tutorial written by GPT-3","updated_at":"2023-09-07T11:20:53Z","url":"https://simonwillison.net/2022/May/31/a-datasette-tutorial-written-by-gpt-3/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"A Datasette tutorial written by GPT-3"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/May/31/a-datasette-tutorial-written-by-gpt-3/"}},"_tags":["story","author_simonw","story_31575999"],"author":"simonw","children":[31576154],"created_at":"2022-05-31T23:08:12Z","created_at_i":1654038492,"num_comments":1,"objectID":"31575999","points":3,"story_id":31575999,"title":"A Datasette tutorial written by GPT-3","updated_at":"2023-09-07T11:20:34Z","url":"https://simonwillison.net/2022/May/31/a-datasette-tutorial-written-by-gpt-3/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Bundling binary tools in Python wheels"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/May/23/bundling-binary-tools-in-python-wheels/"}},"_tags":["story","author_Tomte","story_31480577"],"author":"Tomte","created_at":"2022-05-23T15:50:24Z","created_at_i":1653321024,"num_comments":0,"objectID":"31480577","points":2,"story_id":31480577,"title":"Bundling binary tools in Python wheels","updated_at":"2023-09-07T11:12:18Z","url":"https://simonwillison.net/2022/May/23/bundling-binary-tools-in-python-wheels/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Paint Holding \u2013 reducing the flash of white on same-origin navigations"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/May/22/paint-holding/"}},"_tags":["story","author_edward","story_31466744"],"author":"edward","created_at":"2022-05-22T10:38:04Z","created_at_i":1653215884,"num_comments":0,"objectID":"31466744","points":1,"story_id":31466744,"title":"Paint Holding \u2013 reducing the flash of white on same-origin navigations","updated_at":"2023-09-07T11:11:07Z","url":"https://simonwillison.net/2022/May/22/paint-holding/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette Lite: a server-side Python web application running in a browser"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/May/4/datasette-lite/"}},"_tags":["story","author_simonw","story_31261777"],"author":"simonw","children":[31261902,31264898,31262406,31263387,31263119,31264772,31262250,31263375,31263271,31264814,31265862,31265357,31262098,31270304,31262123],"created_at":"2022-05-04T15:22:52Z","created_at_i":1651677772,"num_comments":34,"objectID":"31261777","points":219,"story_id":31261777,"title":"Datasette Lite: a server-side Python web application running in a browser","updated_at":"2023-09-07T10:52:57Z","url":"https://simonwillison.net/2022/May/4/datasette-lite/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"thunderbong"},"title":{"matchLevel":"none","matchedWords":[],"value":"Executing advanced ALTER TABLE operations in SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Sep/23/sqlite-advanced-alter-table/"}},"_tags":["story","author_thunderbong","story_31252325"],"author":"thunderbong","created_at":"2022-05-03T19:18:47Z","created_at_i":1651605527,"num_comments":0,"objectID":"31252325","points":2,"story_id":31252325,"title":"Executing advanced ALTER TABLE operations in SQLite","updated_at":"2023-09-07T10:52:10Z","url":"https://simonwillison.net/2020/Sep/23/sqlite-advanced-alter-table/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"pcr910303"},"title":{"matchLevel":"none","matchedWords":[],"value":"Speeding up Datasette by removing the GIL"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Apr/29/nogil/"}},"_tags":["story","author_pcr910303","story_31216215"],"author":"pcr910303","children":[31216328],"created_at":"2022-04-30T14:12:54Z","created_at_i":1651327974,"num_comments":1,"objectID":"31216215","points":2,"story_id":31216215,"title":"Speeding up Datasette by removing the GIL","updated_at":"2023-09-07T10:49:07Z","url":"https://simonwillison.net/2022/Apr/29/nogil/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Git scraping, the five minute lightning talk"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Mar/5/git-scraping/"}},"_tags":["story","author_tosh","story_31198325"],"author":"tosh","created_at":"2022-04-28T21:16:23Z","created_at_i":1651180583,"num_comments":0,"objectID":"31198325","points":5,"story_id":31198325,"title":"Git scraping, the five minute lightning talk","updated_at":"2023-09-07T10:47:31Z","url":"https://simonwillison.net/2021/Mar/5/git-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Automatically filing issues when tracked file content changes"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Apr/28/issue-on-changes/"}},"_tags":["story","author_simonw","story_31195431"],"author":"simonw","children":[31201254],"created_at":"2022-04-28T17:29:37Z","created_at_i":1651166977,"num_comments":4,"objectID":"31195431","points":14,"story_id":31195431,"title":"Automatically filing issues when tracked file content changes","updated_at":"2023-09-07T10:47:13Z","url":"https://simonwillison.net/2022/Apr/28/issue-on-changes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"frogger8"},"title":{"matchLevel":"none","matchedWords":[],"value":"Parallel SQL Queries in Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Apr/27/parallel-queries/"}},"_tags":["story","author_frogger8","story_31185496"],"author":"frogger8","created_at":"2022-04-27T20:39:50Z","created_at_i":1651091990,"num_comments":0,"objectID":"31185496","points":1,"story_id":31185496,"title":"Parallel SQL Queries in Datasette","updated_at":"2023-09-07T10:46:22Z","url":"https://simonwillison.net/2022/Apr/27/parallel-queries/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ellieh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Atuin for zsh shell history in SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/macos/atuin"}},"_tags":["story","author_ellieh","story_31177943"],"author":"ellieh","children":[31178014],"created_at":"2022-04-27T09:19:42Z","created_at_i":1651051182,"num_comments":1,"objectID":"31177943","points":4,"story_id":31177943,"title":"Atuin for zsh shell history in SQLite","updated_at":"2023-09-07T10:45:42Z","url":"https://til.simonwillison.net/macos/atuin"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Video introduction to Datasette and SQLite-utils (2021)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Feb/7/video/"}},"_tags":["story","author_Tomte","story_31171654"],"author":"Tomte","created_at":"2022-04-26T19:00:24Z","created_at_i":1650999624,"num_comments":0,"objectID":"31171654","points":1,"story_id":31171654,"title":"Video introduction to Datasette and SQLite-utils (2021)","updated_at":"2023-09-07T10:45:10Z","url":"https://simonwillison.net/2021/Feb/7/video/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Useful tricks with pip install URL and GitHub"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Apr/24/pip-install-github/"}},"_tags":["story","author_Tomte","story_31145624"],"author":"Tomte","created_at":"2022-04-24T16:30:50Z","created_at_i":1650817850,"num_comments":0,"objectID":"31145624","points":2,"story_id":31145624,"title":"Useful tricks with pip install URL and GitHub","updated_at":"2023-09-07T10:42:58Z","url":"https://simonwillison.net/2022/Apr/24/pip-install-github/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Scraping web pages from the command line with shot-scraper"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Mar/14/scraping-web-pages-shot-scraper/"}},"_tags":["story","author_tosh","story_31136456"],"author":"tosh","created_at":"2022-04-23T17:46:11Z","created_at_i":1650735971,"num_comments":0,"objectID":"31136456","points":2,"story_id":31136456,"title":"Scraping web pages from the command line with shot-scraper","updated_at":"2023-09-07T10:42:18Z","url":"https://simonwillison.net/2022/Mar/14/scraping-web-pages-shot-scraper/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Show HN: I built a Covid sewage numbers Twitter bot"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Apr/18/covid-sewage/"}},"_tags":["story","author_simonw","story_31067201","show_hn"],"author":"simonw","children":[31067219,31067979,31068695],"created_at":"2022-04-18T03:50:39Z","created_at_i":1650253839,"num_comments":1,"objectID":"31067201","points":16,"story_id":31067201,"title":"Show HN: I built a Covid sewage numbers Twitter bot","updated_at":"2023-09-07T10:36:24Z","url":"https://simonwillison.net/2022/Apr/18/covid-sewage/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"thunderbong"},"title":{"matchLevel":"none","matchedWords":[],"value":"Executing advanced ALTER TABLE operations in SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Sep/23/sqlite-advanced-alter-table/"}},"_tags":["story","author_thunderbong","story_31043458"],"author":"thunderbong","created_at":"2022-04-15T18:00:48Z","created_at_i":1650045648,"num_comments":0,"objectID":"31043458","points":2,"story_id":31043458,"title":"Executing advanced ALTER TABLE operations in SQLite","updated_at":"2023-09-07T10:34:18Z","url":"https://simonwillison.net/2020/Sep/23/sqlite-advanced-alter-table/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Enabling WAL mode for SQLite database files"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/sqlite/enabling-wal-mode"}},"_tags":["story","author_tosh","story_30910562"],"author":"tosh","children":[30914462],"created_at":"2022-04-04T18:49:36Z","created_at_i":1649098176,"num_comments":1,"objectID":"30910562","points":28,"story_id":30910562,"title":"Enabling WAL mode for SQLite database files","updated_at":"2023-09-07T11:12:58Z","url":"https://til.simonwillison.net/sqlite/enabling-wal-mode"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"The interesting ideas in Datasette (2018)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"}},"_tags":["story","author_Tomte","story_30886723"],"author":"Tomte","children":[30913061,30914888,30912967,30912181,30927315],"created_at":"2022-04-02T08:31:26Z","created_at_i":1648888286,"num_comments":15,"objectID":"30886723","points":86,"story_id":30886723,"title":"The interesting ideas in Datasette (2018)","updated_at":"2023-09-07T11:11:00Z","url":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Extracting web page content using Readability.js and shot-scraper"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/shot-scraper/readability"}},"_tags":["story","author_simonw","story_30795254"],"author":"simonw","children":[30795263,30798079,30811616,30821029],"created_at":"2022-03-24T20:58:58Z","created_at_i":1648155538,"num_comments":5,"objectID":"30795254","points":39,"story_id":30795254,"title":"Extracting web page content using Readability.js and shot-scraper","updated_at":"2023-09-07T11:03:37Z","url":"https://til.simonwillison.net/shot-scraper/readability"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":"I built a GitHub repository template which automates the process of configuring a new repository to take web page screenshots using GitHub Actions.
You can try this out at https://github.com/simonw/shot-scraper-template
Use the https://github.com/simonw/shot-scraper-template/generate interface to create a new repository using that template, and paste the URL that you want to take screenshots of in as the "description" field.
The new repository will then configure itself using GitHub Actions, take the screenshot and save it back to the repo!"},"title":{"matchLevel":"none","matchedWords":[],"value":"Show HN: Instantly create a GitHub repository to take screenshots of a web page"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Mar/14/shot-scraper-template/"}},"_tags":["story","author_simonw","story_30675357","show_hn"],"author":"simonw","children":[30676384,30676014,30681433,30679328,30676182,30682595,30677182,30679758,30676855,30716408,30683381,30683747,30686531,30675372],"created_at":"2022-03-14T17:34:33Z","created_at_i":1647279273,"num_comments":36,"objectID":"30675357","points":214,"story_id":30675357,"story_text":"I built a GitHub repository template which automates the process of configuring a new repository to take web page screenshots using GitHub Actions.
You can try this out at https://github.com/simonw/shot-scraper-template
Use the https://github.com/simonw/shot-scraper-template/generate interface to create a new repository using that template, and paste the URL that you want to take screenshots of in as the "description" field.
The new repository will then configure itself using GitHub Actions, take the screenshot and save it back to the repo!","title":"Show HN: Instantly create a GitHub repository to take screenshots of a web page","updated_at":"2023-09-07T10:53:20Z","url":"https://simonwillison.net/2022/Mar/14/shot-scraper-template/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Scraping web pages from the command-line with shot-scraper"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Mar/14/scraping-web-pages-shot-scraper/"}},"_tags":["story","author_simonw","story_30667588"],"author":"simonw","children":[30676815],"created_at":"2022-03-14T01:33:25Z","created_at_i":1647221605,"num_comments":1,"objectID":"30667588","points":18,"story_id":30667588,"title":"Scraping web pages from the command-line with shot-scraper","updated_at":"2023-09-07T10:52:41Z","url":"https://simonwillison.net/2022/Mar/14/scraping-web-pages-shot-scraper/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"appwiz"},"title":{"matchLevel":"none","matchedWords":[],"value":"Track changes to CLI tools by recording their help output"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Feb/2/help-scraping/"}},"_tags":["story","author_appwiz","story_30658310"],"author":"appwiz","children":[30658349,30660585,30660173],"created_at":"2022-03-13T05:36:13Z","created_at_i":1647149773,"num_comments":6,"objectID":"30658310","points":10,"story_id":30658310,"title":"Track changes to CLI tools by recording their help output","updated_at":"2023-09-07T10:51:58Z","url":"https://simonwillison.net/2022/Feb/2/help-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Shot-scraper: automated screenshots for documentation, built on Playwright"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Mar/10/shot-scraper/"}},"_tags":["story","author_simonw","story_30621802"],"author":"simonw","children":[30623604,30623547,30627417,30623606,30623600],"created_at":"2022-03-10T00:27:02Z","created_at_i":1646872022,"num_comments":12,"objectID":"30621802","points":66,"story_id":30621802,"title":"Shot-scraper: automated screenshots for documentation, built on Playwright","updated_at":"2023-09-07T10:48:57Z","url":"https://simonwillison.net/2022/Mar/10/shot-scraper/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"I invented a \u201cdash encoding\u201d, a new encoding scheme for URL paths"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Mar/5/dash-encoding/"}},"_tags":["story","author_Tomte","story_30572384"],"author":"Tomte","children":[30576250,30574772,30575814,30574653,30575577,30576695,30581144,30575987,30574865],"created_at":"2022-03-05T22:02:50Z","created_at_i":1646517770,"num_comments":22,"objectID":"30572384","points":37,"story_id":30572384,"title":"I invented a \u201cdash encoding\u201d, a new encoding scheme for URL paths","updated_at":"2023-09-07T10:44:55Z","url":"https://simonwillison.net/2022/Mar/5/dash-encoding/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Support open source that you use by paying the maintainers to talk to your team"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Feb/23/support-open-source/"}},"_tags":["story","author_simonw","story_30446039"],"author":"simonw","children":[30446493,30446152,30446491,30446495,30446601,30446287,30446755,30446394,30446512,30446438,30446590,30446635,30446779,30446506,30454365,30446326,30447008,30446405,30446588,30446280],"created_at":"2022-02-23T20:33:06Z","created_at_i":1645648386,"num_comments":64,"objectID":"30446039","points":213,"story_id":30446039,"title":"Support open source that you use by paying the maintainers to talk to your team","updated_at":"2023-09-07T10:34:56Z","url":"https://simonwillison.net/2022/Feb/23/support-open-source/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"Here's the repo: https://github.com/simonw/google-drive-to-sqlite
The README is using a trick I'm increasingly leaning on: parts of that document - the --help output and the example database schema - are automatically generated using Cog: https://nedbatchelder.com/code/cog and https://til.simonwillison.net/python/cog-to-update-help-in-r..."},"title":{"matchLevel":"none","matchedWords":[],"value":"Show HN: Google Drive to SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Feb/20/google-drive-to-sqlite/"}},"_tags":["story","author_simonw","story_30417411","show_hn"],"author":"simonw","children":[30417735,30418100,30418571,30427622,30419589,30417790,30417878,30422321,30424410,30417426,30418068],"created_at":"2022-02-21T16:12:19Z","created_at_i":1645459939,"num_comments":32,"objectID":"30417411","points":305,"story_id":30417411,"story_text":"Here's the repo: https://github.com/simonw/google-drive-to-sqlite
The README is using a trick I'm increasingly leaning on: parts of that document - the --help output and the example database schema - are automatically generated using Cog: https://nedbatchelder.com/code/cog and https://til.simonwillison.net/python/cog-to-update-help-in-r...","title":"Show HN: Google Drive to SQLite","updated_at":"2023-09-07T10:32:36Z","url":"https://simonwillison.net/2022/Feb/20/google-drive-to-sqlite/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using SQLite and Datasette with Fly Volumes"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Feb/15/fly-volumes/"}},"_tags":["story","author_simonw","story_30341885"],"author":"simonw","created_at":"2022-02-15T02:27:17Z","created_at_i":1644892037,"num_comments":0,"objectID":"30341885","points":8,"story_id":30341885,"title":"Using SQLite and Datasette with Fly Volumes","updated_at":"2023-09-07T10:26:32Z","url":"https://simonwillison.net/2022/Feb/15/fly-volumes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Help scraping: track changes to CLI tools by recording their \u2013help using Git"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Feb/2/help-scraping/"}},"_tags":["story","author_edward","story_30225818"],"author":"edward","created_at":"2022-02-05T20:48:46Z","created_at_i":1644094126,"num_comments":0,"objectID":"30225818","points":2,"story_id":30225818,"title":"Help scraping: track changes to CLI tools by recording their \u2013help using Git","updated_at":"2023-09-07T10:16:59Z","url":"https://simonwillison.net/2022/Feb/2/help-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Help scraping: track changes to CLI tools by recording their \u2013help using Git"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Feb/2/help-scraping/"}},"_tags":["story","author_simonw","story_30186110"],"author":"simonw","children":[30187149],"created_at":"2022-02-02T23:51:37Z","created_at_i":1643845897,"num_comments":1,"objectID":"30186110","points":8,"story_id":30186110,"title":"Help scraping: track changes to CLI tools by recording their \u2013help using Git","updated_at":"2023-09-07T10:13:44Z","url":"https://simonwillison.net/2022/Feb/2/help-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"marcobambini"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using SQL to find my best photo of a pelican according to Apple Photos"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/May/21/dogsheep-photos/"}},"_tags":["story","author_marcobambini","story_30178057"],"author":"marcobambini","created_at":"2022-02-02T14:33:04Z","created_at_i":1643812384,"num_comments":0,"objectID":"30178057","points":2,"story_id":30178057,"title":"Using SQL to find my best photo of a pelican according to Apple Photos","updated_at":"2023-09-07T10:13:02Z","url":"https://simonwillison.net/2020/May/21/dogsheep-photos/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"BerislavLopac"},"title":{"matchLevel":"none","matchedWords":[],"value":"Writing Better Release Notes"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jan/31/release-notes/"}},"_tags":["story","author_BerislavLopac","story_30154442"],"author":"BerislavLopac","children":[30157046],"created_at":"2022-01-31T21:13:02Z","created_at_i":1643663582,"num_comments":1,"objectID":"30154442","points":24,"story_id":30154442,"title":"Writing Better Release Notes","updated_at":"2023-09-07T10:10:59Z","url":"https://simonwillison.net/2022/Jan/31/release-notes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"todsacerdoti"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette 0.60: The annotated release notes"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jan/14/datasette-060/"}},"_tags":["story","author_todsacerdoti","story_29984227"],"author":"todsacerdoti","created_at":"2022-01-18T19:15:08Z","created_at_i":1642533308,"num_comments":0,"objectID":"29984227","points":7,"story_id":29984227,"title":"Datasette 0.60: The annotated release notes","updated_at":"2023-09-07T10:40:57Z","url":"https://simonwillison.net/2022/Jan/14/datasette-060/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"thunderbong"},"title":{"matchLevel":"none","matchedWords":[],"value":"What\u2019s New in SQLite-Utils"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jan/11/sqlite-utils/"}},"_tags":["story","author_thunderbong","story_29940362"],"author":"thunderbong","created_at":"2022-01-14T21:00:22Z","created_at_i":1642194022,"num_comments":0,"objectID":"29940362","points":26,"story_id":29940362,"title":"What\u2019s New in SQLite-Utils","updated_at":"2023-09-07T10:37:11Z","url":"https://simonwillison.net/2022/Jan/11/sqlite-utils/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"My process for building a feature"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jan/12/how-i-build-a-feature/"}},"_tags":["story","author_simonw","story_29910776"],"author":"simonw","children":[29932453,29928957,29938931],"created_at":"2022-01-12T18:20:10Z","created_at_i":1642011610,"num_comments":8,"objectID":"29910776","points":100,"story_id":29910776,"title":"My process for building a feature","updated_at":"2023-09-07T10:34:36Z","url":"https://simonwillison.net/2022/Jan/12/how-i-build-a-feature/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"nalgeon"},"title":{"matchLevel":"none","matchedWords":[],"value":"What's New in SQLite-Utils"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jan/11/sqlite-utils/"}},"_tags":["story","author_nalgeon","story_29898140"],"author":"nalgeon","created_at":"2022-01-11T21:22:51Z","created_at_i":1641936171,"num_comments":0,"objectID":"29898140","points":3,"story_id":29898140,"title":"What's New in SQLite-Utils","updated_at":"2023-09-07T10:33:37Z","url":"https://simonwillison.net/2022/Jan/11/sqlite-utils/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"imaurer"},"title":{"matchLevel":"none","matchedWords":[],"value":"Problems once solved by a metaclass can be solved by __init_subclass__"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/init-subclass"}},"_tags":["story","author_imaurer","story_29811154"],"author":"imaurer","children":[29812401,29812158,29811935,29812507,29811957,29811207,29813723,29811804,29811832,29811678,29813331,29812759,29812342,29812658,29813349,29816214,29815796,29815179,29812811,29822034,29814161,29814054,29812551,29820551,29814691,29812343,29812707],"created_at":"2022-01-05T16:35:08Z","created_at_i":1641400508,"num_comments":124,"objectID":"29811154","points":211,"story_id":29811154,"title":"Problems once solved by a metaclass can be solved by __init_subclass__","updated_at":"2024-02-09T12:00:37Z","url":"https://til.simonwillison.net/python/init-subclass"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Taking a Break in Moss Landing"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2022/Jan/4/moss-landing/"}},"_tags":["story","author_chmaynard","story_29802158"],"author":"chmaynard","created_at":"2022-01-04T23:04:40Z","created_at_i":1641337480,"num_comments":0,"objectID":"29802158","points":1,"story_id":29802158,"title":"Taking a Break in Moss Landing","updated_at":"2023-09-07T10:25:16Z","url":"https://simonwillison.net/2022/Jan/4/moss-landing/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Weeknotes: Datasette-Tiddlywiki, Filters_from_request"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Dec/24/datasette-tiddlywiki/"}},"_tags":["story","author_Tomte","story_29671142"],"author":"Tomte","created_at":"2021-12-24T07:11:11Z","created_at_i":1640329871,"num_comments":0,"objectID":"29671142","points":1,"story_id":29671142,"title":"Weeknotes: Datasette-Tiddlywiki, Filters_from_request","updated_at":"2023-09-07T10:13:32Z","url":"https://simonwillison.net/2021/Dec/24/datasette-tiddlywiki/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"jonahbenton"},"title":{"matchLevel":"none","matchedWords":[],"value":"Annotated explanation of David Beazley's dataklasses"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/annotated-dataklasses"}},"_tags":["story","author_jonahbenton","story_29621716"],"author":"jonahbenton","children":[29626656,29641643,29624812,29622249,29622694],"created_at":"2021-12-20T04:59:22Z","created_at_i":1639976362,"num_comments":16,"objectID":"29621716","points":108,"story_id":29621716,"title":"Annotated explanation of David Beazley's dataklasses","updated_at":"2023-09-25T03:08:18Z","url":"https://til.simonwillison.net/python/annotated-dataklasses"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Show HN: git-history, for analyzing scraped data collected using Git and SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Dec/7/git-history/"}},"_tags":["story","author_simonw","story_29479258","show_hn"],"author":"simonw","children":[29480222,29479262,29482326,29482761,29480090,29480795,29480024,29480799],"created_at":"2021-12-07T22:57:24Z","created_at_i":1638917844,"num_comments":19,"objectID":"29479258","points":108,"story_id":29479258,"title":"Show HN: git-history, for analyzing scraped data collected using Git and SQLite","updated_at":"2023-09-07T09:56:59Z","url":"https://simonwillison.net/2021/Dec/7/git-history/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Publishing a Web Component to npm"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/npm/publish-web-component"}},"_tags":["story","author_chmaynard","story_29376191"],"author":"chmaynard","created_at":"2021-11-29T03:54:24Z","created_at_i":1638158064,"num_comments":0,"objectID":"29376191","points":18,"story_id":29376191,"title":"Publishing a Web Component to npm","updated_at":"2023-09-07T09:47:51Z","url":"https://til.simonwillison.net/npm/publish-web-component"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"git-history, a new tool created for a Git scraping workshop"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Nov/15/weeknotes-git-history/"}},"_tags":["story","author_chmaynard","story_29227100"],"author":"chmaynard","created_at":"2021-11-15T13:31:25Z","created_at_i":1636983085,"num_comments":0,"objectID":"29227100","points":3,"story_id":29227100,"title":"git-history, a new tool created for a Git scraping workshop","updated_at":"2023-09-07T09:35:20Z","url":"https://simonwillison.net/2021/Nov/15/weeknotes-git-history/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mariuz"},"title":{"matchLevel":"none","matchedWords":[],"value":"S3-credentials: a tool for creating credentials for S3 buckets"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Nov/3/s3-credentials/"}},"_tags":["story","author_mariuz","story_29141055"],"author":"mariuz","created_at":"2021-11-07T16:50:16Z","created_at_i":1636303816,"num_comments":0,"objectID":"29141055","points":1,"story_id":29141055,"title":"S3-credentials: a tool for creating credentials for S3 buckets","updated_at":"2023-09-07T09:27:56Z","url":"https://simonwillison.net/2021/Nov/3/s3-credentials/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Annotated code for a demo of WebSocket chat in Deno Deploy"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/deno/annotated-deno-deploy-demo"}},"_tags":["story","author_tosh","story_29138078"],"author":"tosh","children":[29141130,29139675],"created_at":"2021-11-07T10:22:37Z","created_at_i":1636280557,"num_comments":3,"objectID":"29138078","points":51,"story_id":29138078,"title":"Annotated code for a demo of WebSocket chat in Deno Deploy","updated_at":"2023-09-07T09:27:42Z","url":"https://til.simonwillison.net/deno/annotated-deno-deploy-demo"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to build, test and publish an open source Python library"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Nov/4/publish-open-source-python-library/"}},"_tags":["story","author_Tomte","story_29116107"],"author":"Tomte","created_at":"2021-11-05T06:37:40Z","created_at_i":1636094260,"num_comments":0,"objectID":"29116107","points":4,"story_id":29116107,"title":"How to build, test and publish an open source Python library","updated_at":"2023-09-07T09:25:51Z","url":"https://simonwillison.net/2021/Nov/4/publish-open-source-python-library/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"vmoore"},"title":{"matchLevel":"none","matchedWords":[],"value":"S3-credentials: a tool for creating credentials for S3 buckets"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Nov/3/s3-credentials/"}},"_tags":["story","author_vmoore","story_29096139"],"author":"vmoore","created_at":"2021-11-03T15:36:43Z","created_at_i":1635953803,"num_comments":0,"objectID":"29096139","points":3,"story_id":29096139,"title":"S3-credentials: a tool for creating credentials for S3 buckets","updated_at":"2023-09-07T09:24:10Z","url":"https://simonwillison.net/2021/Nov/3/s3-credentials/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette 0.59: The annotated release notes"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Oct/19/datasette-059/"}},"_tags":["story","author_edward","story_28915582"],"author":"edward","created_at":"2021-10-19T07:10:09Z","created_at_i":1634627409,"num_comments":0,"objectID":"28915582","points":2,"story_id":28915582,"title":"Datasette 0.59: The annotated release notes","updated_at":"2023-09-07T10:22:29Z","url":"https://simonwillison.net/2021/Oct/19/datasette-059/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Finding and reporting an asyncio bug in Python 3.10"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Oct/9/finding-and-reporting-a-bug/"}},"_tags":["story","author_chmaynard","story_28808497"],"author":"chmaynard","created_at":"2021-10-09T10:15:35Z","created_at_i":1633774535,"num_comments":0,"objectID":"28808497","points":29,"story_id":28808497,"title":"Finding and reporting an asyncio bug in Python 3.10","updated_at":"2023-09-07T10:13:44Z","url":"https://simonwillison.net/2021/Oct/9/finding-and-reporting-a-bug/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Bundling Python inside an Electron app"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/electron/python-inside-electron"}},"_tags":["story","author_chmaynard","story_28468964"],"author":"chmaynard","created_at":"2021-09-09T12:35:25Z","created_at_i":1631190925,"num_comments":0,"objectID":"28468964","points":2,"story_id":28468964,"title":"Bundling Python inside an Electron app","updated_at":"2023-09-07T09:45:48Z","url":"https://til.simonwillison.net/electron/python-inside-electron"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette Desktop\u2013a macOS desktop application for Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Sep/8/datasette-desktop/"}},"_tags":["story","author_Tomte","story_28467517"],"author":"Tomte","created_at":"2021-09-09T08:28:16Z","created_at_i":1631176096,"num_comments":0,"objectID":"28467517","points":2,"story_id":28467517,"title":"Datasette Desktop\u2013a macOS desktop application for Datasette","updated_at":"2023-09-07T09:45:44Z","url":"https://simonwillison.net/2021/Sep/8/datasette-desktop/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"todsacerdoti"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette Desktop\u2013a macOS desktop application for Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Sep/8/datasette-desktop/"}},"_tags":["story","author_todsacerdoti","story_28464481"],"author":"todsacerdoti","children":[28464615],"created_at":"2021-09-08T23:52:06Z","created_at_i":1631145126,"num_comments":1,"objectID":"28464481","points":12,"story_id":28464481,"title":"Datasette Desktop\u2013a macOS desktop application for Datasette","updated_at":"2023-09-07T09:45:29Z","url":"https://simonwillison.net/2021/Sep/8/datasette-desktop/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"amrrs"},"title":{"matchLevel":"none","matchedWords":[],"value":"Signing and notarizing an Electron app for distribution using GitHub Actions"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/electron/sign-notarize-electron-macos"}},"_tags":["story","author_amrrs","story_28462302"],"author":"amrrs","children":[28462581],"created_at":"2021-09-08T20:01:17Z","created_at_i":1631131277,"num_comments":3,"objectID":"28462302","points":2,"story_id":28462302,"title":"Signing and notarizing an Electron app for distribution using GitHub Actions","updated_at":"2024-02-21T00:11:25Z","url":"https://til.simonwillison.net/electron/sign-notarize-electron-macos"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"kiyanwang"},"title":{"matchLevel":"none","matchedWords":[],"value":"Dynamic content for GitHub repo templates using cookiecutter,GitHub Actions"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Aug/28/dynamic-github-repository-templates/"}},"_tags":["story","author_kiyanwang","story_28423790"],"author":"kiyanwang","created_at":"2021-09-05T12:22:36Z","created_at_i":1630844556,"num_comments":0,"objectID":"28423790","points":13,"story_id":28423790,"title":"Dynamic content for GitHub repo templates using cookiecutter,GitHub Actions","updated_at":"2023-09-07T09:42:07Z","url":"https://simonwillison.net/2021/Aug/28/dynamic-github-repository-templates/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building a Desktop Application for Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Aug/30/datasette-app/"}},"_tags":["story","author_Tomte","story_28353065"],"author":"Tomte","children":[28353278,28353801,28354917,28353478,28354785,28354343,28353944,28354505],"created_at":"2021-08-30T05:41:22Z","created_at_i":1630302082,"num_comments":45,"objectID":"28353065","points":101,"story_id":28353065,"title":"Building a Desktop Application for Datasette","updated_at":"2023-09-07T09:36:15Z","url":"https://simonwillison.net/2021/Aug/30/datasette-app/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Dynamic content for GitHub repo templates using cookiecutter and GitHub Actions"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Aug/28/dynamic-github-repository-templates/"}},"_tags":["story","author_simonw","story_28341717"],"author":"simonw","created_at":"2021-08-28T21:34:19Z","created_at_i":1630186459,"num_comments":0,"objectID":"28341717","points":14,"story_id":28341717,"title":"Dynamic content for GitHub repo templates using cookiecutter and GitHub Actions","updated_at":"2023-09-07T09:35:19Z","url":"https://simonwillison.net/2021/Aug/28/dynamic-github-repository-templates/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Video introduction to Datasette and SQLite-utils"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Feb/7/video/"}},"_tags":["story","author_Tomte","story_28266897"],"author":"Tomte","created_at":"2021-08-22T16:35:54Z","created_at_i":1629650154,"num_comments":0,"objectID":"28266897","points":2,"story_id":28266897,"title":"Video introduction to Datasette and SQLite-utils","updated_at":"2023-09-07T09:29:24Z","url":"https://simonwillison.net/2021/Feb/7/video/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Getting my personal Dogsheep up and running again"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Aug/22/weeknotes-dogsheep/"}},"_tags":["story","author_Tomte","story_28263488"],"author":"Tomte","children":[28264146],"created_at":"2021-08-22T06:58:11Z","created_at_i":1629615491,"num_comments":1,"objectID":"28263488","points":37,"story_id":28263488,"title":"Getting my personal Dogsheep up and running again","updated_at":"2023-09-07T09:29:10Z","url":"https://simonwillison.net/2021/Aug/22/weeknotes-dogsheep/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mooreds"},"title":{"matchLevel":"none","matchedWords":[],"value":"Documentation Unit Tests (2018)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Jul/28/documentation-unit-tests/"}},"_tags":["story","author_mooreds","story_28259421"],"author":"mooreds","created_at":"2021-08-21T18:47:11Z","created_at_i":1629571631,"num_comments":0,"objectID":"28259421","points":3,"story_id":28259421,"title":"Documentation Unit Tests (2018)","updated_at":"2023-09-07T09:28:49Z","url":"https://simonwillison.net/2018/Jul/28/documentation-unit-tests/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette on Codespaces"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Aug/14/datasette-on-codespaces/"}},"_tags":["story","author_Tomte","story_28180325"],"author":"Tomte","created_at":"2021-08-14T13:09:30Z","created_at_i":1628946570,"num_comments":0,"objectID":"28180325","points":1,"story_id":28180325,"title":"Datasette on Codespaces","updated_at":"2023-09-07T09:22:26Z","url":"https://simonwillison.net/2021/Aug/14/datasette-on-codespaces/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Find local variables in the traceback for an exception \u2013 Simon Willison\u2019s TILs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/find-local-variables-in-exception-traceback"}},"_tags":["story","author_edward","story_28125777"],"author":"edward","created_at":"2021-08-10T06:45:09Z","created_at_i":1628577909,"num_comments":0,"objectID":"28125777","points":1,"story_id":28125777,"title":"Find local variables in the traceback for an exception \u2013 Simon Willison\u2019s TILs","updated_at":"2023-09-07T09:17:58Z","url":"https://til.simonwillison.net/python/find-local-variables-in-exception-traceback"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Apply conversion functions to data in SQLite columns with the SQLite-utils tool"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Aug/6/sqlite-utils-convert/"}},"_tags":["story","author_edward","story_28093540"],"author":"edward","children":[28094898,28094319],"created_at":"2021-08-06T22:33:02Z","created_at_i":1628289182,"num_comments":2,"objectID":"28093540","points":80,"story_id":28093540,"title":"Apply conversion functions to data in SQLite columns with the SQLite-utils tool","updated_at":"2023-09-07T09:15:27Z","url":"https://simonwillison.net/2021/Aug/6/sqlite-utils-convert/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Apply conversion functions to data in SQLite columns with sqlite-utils"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Aug/6/sqlite-utils-convert/"}},"_tags":["story","author_chmaynard","story_28085350"],"author":"chmaynard","children":[28113699],"created_at":"2021-08-06T10:35:59Z","created_at_i":1628246159,"num_comments":1,"objectID":"28085350","points":15,"story_id":28085350,"title":"Apply conversion functions to data in SQLite columns with sqlite-utils","updated_at":"2023-09-07T09:14:51Z","url":"https://simonwillison.net/2021/Aug/6/sqlite-utils-convert/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"clubdorothe"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring the SameSite cookie attribute for preventing CSRF"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Aug/3/samesite/"}},"_tags":["story","author_clubdorothe","story_28059597"],"author":"clubdorothe","created_at":"2021-08-04T11:04:32Z","created_at_i":1628075072,"num_comments":0,"objectID":"28059597","points":4,"story_id":28059597,"title":"Exploring the SameSite cookie attribute for preventing CSRF","updated_at":"2023-09-07T09:12:51Z","url":"https://simonwillison.net/2021/Aug/3/samesite/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring the SameSite cookie attribute for preventing CSRF"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Aug/3/samesite/"}},"_tags":["story","author_simonw","story_28054292"],"author":"simonw","children":[28092320,28054406,28092943,28092454],"created_at":"2021-08-03T21:11:54Z","created_at_i":1628025114,"num_comments":12,"objectID":"28054292","points":38,"story_id":28054292,"title":"Exploring the SameSite cookie attribute for preventing CSRF","updated_at":"2023-09-07T09:12:28Z","url":"https://simonwillison.net/2021/Aug/3/samesite/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Check Spelling Using Codespell"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/codespell"}},"_tags":["story","author_edward","story_28052721"],"author":"edward","created_at":"2021-08-03T18:51:42Z","created_at_i":1628016702,"num_comments":0,"objectID":"28052721","points":1,"story_id":28052721,"title":"Check Spelling Using Codespell","updated_at":"2023-09-07T09:12:18Z","url":"https://til.simonwillison.net/python/codespell"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Extracting Objects Recursively with Jq"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/jq/extracting-objects-recursively"}},"_tags":["story","author_edward","story_28026712"],"author":"edward","children":[28027491,28027211,28027311,28028820,28027348,28028678,28027278,28030156,28028575,28027240,28027251,28027157,28035786,28028718,28038731,28032143,28028466,28028379,28032001,28028997,28027263,28030793,28028735,28031399,28035840,28031524,28027204,28031258,28027854],"created_at":"2021-08-01T14:59:52Z","created_at_i":1627829992,"num_comments":71,"objectID":"28026712","points":268,"story_id":28026712,"title":"Extracting Objects Recursively with Jq","updated_at":"2023-11-20T22:52:05Z","url":"https://til.simonwillison.net/jq/extracting-objects-recursively"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"The Baked Data architectural pattern"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/28/baked-data/"}},"_tags":["story","author_edward","story_27994393"],"author":"edward","children":[27998933,27996867,27995213,27996014,27996928,27995606,27997841,27995317],"created_at":"2021-07-29T09:07:42Z","created_at_i":1627549662,"num_comments":23,"objectID":"27994393","points":70,"story_id":27994393,"title":"The Baked Data architectural pattern","updated_at":"2023-09-07T09:55:50Z","url":"https://simonwillison.net/2021/Jul/28/baked-data/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"The Baked Data architectural pattern"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/28/baked-data/"}},"_tags":["story","author_simonw","story_27989288"],"author":"simonw","children":[27989421,27990755,27998031],"created_at":"2021-07-28T20:26:50Z","created_at_i":1627504010,"num_comments":3,"objectID":"27989288","points":21,"story_id":27989288,"title":"The Baked Data architectural pattern","updated_at":"2023-09-07T09:55:24Z","url":"https://simonwillison.net/2021/Jul/28/baked-data/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"The interesting ideas in Datasette (2018)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"}},"_tags":["story","author_Tomte","story_27971202"],"author":"Tomte","created_at":"2021-07-27T11:36:40Z","created_at_i":1627385800,"num_comments":0,"objectID":"27971202","points":2,"story_id":27971202,"title":"The interesting ideas in Datasette (2018)","updated_at":"2023-09-07T09:53:58Z","url":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Fun with Unix domain sockets"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/13/unix-domain-sockets/"}},"_tags":["story","author_edward","story_27941108"],"author":"edward","children":[27941552,27941614,27942287,27942112,27944615,27943889,27957559,27947991,27944375,27942033],"created_at":"2021-07-24T14:15:05Z","created_at_i":1627136105,"num_comments":66,"objectID":"27941108","points":212,"story_id":27941108,"title":"Fun with Unix domain sockets","updated_at":"2023-09-10T16:52:14Z","url":"https://simonwillison.net/2021/Jul/13/unix-domain-sockets/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette\u2013an ecosystem of tools for working with small data"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/22/small-data/"}},"_tags":["story","author_edward","story_27923976"],"author":"edward","created_at":"2021-07-22T20:36:14Z","created_at_i":1626986174,"num_comments":0,"objectID":"27923976","points":4,"story_id":27923976,"title":"Datasette\u2013an ecosystem of tools for working with small data","updated_at":"2023-09-07T09:49:57Z","url":"https://simonwillison.net/2021/Jul/22/small-data/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"It doesn't take much public creativity to stand out as a job candidate"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/17/standing-out/"}},"_tags":["story","author_simonw","story_27907151"],"author":"simonw","children":[27926127,27926655,27926206,27927439,27927363,27928640,27926968,27928842,27927112,27928144,27927615,27926142,27930029,27928074,27926118,27925845,27926464,27931065,27931715,27927297,27926195,27926057,27930611,27928039,27927518,27927148,27929060,27925853,27931444,27926194,27929398,27927732,27930088,27928250,27929304,27929292,27929798,27925941,27926046],"created_at":"2021-07-21T14:55:46Z","created_at_i":1626879346,"num_comments":374,"objectID":"27907151","points":386,"story_id":27907151,"title":"It doesn't take much public creativity to stand out as a job candidate","updated_at":"2023-09-07T09:48:40Z","url":"https://simonwillison.net/2021/Jul/17/standing-out/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"It doesn\u2019t take much public creativity to stand out as a candidate"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/17/standing-out/"}},"_tags":["story","author_simonw","story_27867920"],"author":"simonw","children":[27868086],"created_at":"2021-07-17T18:55:02Z","created_at_i":1626548102,"num_comments":3,"objectID":"27867920","points":5,"story_id":27867920,"title":"It doesn\u2019t take much public creativity to stand out as a candidate","updated_at":"2023-09-07T09:45:20Z","url":"https://simonwillison.net/2021/Jul/17/standing-out/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Installing different PostgreSQL server versions in GitHub Actions"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/github-actions/different-postgresql-versions"}},"_tags":["story","author_edward","story_27747890"],"author":"edward","created_at":"2021-07-06T12:58:17Z","created_at_i":1625576297,"num_comments":0,"objectID":"27747890","points":1,"story_id":27747890,"title":"Installing different PostgreSQL server versions in GitHub Actions","updated_at":"2023-09-07T09:35:12Z","url":"https://til.simonwillison.net/github-actions/different-postgresql-versions"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Django SQL Dashboard 1.0"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/6/django-sql-dashboard/"}},"_tags":["story","author_edward","story_27744870"],"author":"edward","children":[27744954,27761444],"created_at":"2021-07-06T06:32:12Z","created_at_i":1625553132,"num_comments":2,"objectID":"27744870","points":37,"story_id":27744870,"title":"Django SQL Dashboard 1.0","updated_at":"2023-09-07T09:34:57Z","url":"https://simonwillison.net/2021/Jul/6/django-sql-dashboard/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"PAGNIs: Probably Are Gonna Need Its"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jul/1/pagnis/"}},"_tags":["story","author_simonw","story_27703299"],"author":"simonw","children":[27706939,27703972,27706921,27703314,27721962],"created_at":"2021-07-01T19:17:59Z","created_at_i":1625167079,"num_comments":15,"objectID":"27703299","points":41,"story_id":27703299,"title":"PAGNIs: Probably Are Gonna Need Its","updated_at":"2023-09-07T09:31:39Z","url":"https://simonwillison.net/2021/Jul/1/pagnis/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"How I learned that returning dozens of MB of JSON works just fine these days"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Apr/26/vaccinate-the-states/"}},"_tags":["story","author_edward","story_27672768"],"author":"edward","created_at":"2021-06-29T07:05:56Z","created_at_i":1624950356,"num_comments":0,"objectID":"27672768","points":2,"story_id":27672768,"title":"How I learned that returning dozens of MB of JSON works just fine these days","updated_at":"2023-09-07T09:29:12Z","url":"https://simonwillison.net/2021/Apr/26/vaccinate-the-states/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Weeknotes: SQLite-utils updates, Datasette and asgi-CSRF, open-sourcing VIAL"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jun/28/weeknotes/"}},"_tags":["story","author_edward","story_27672722"],"author":"edward","created_at":"2021-06-29T06:57:37Z","created_at_i":1624949857,"num_comments":0,"objectID":"27672722","points":2,"story_id":27672722,"title":"Weeknotes: SQLite-utils updates, Datasette and asgi-CSRF, open-sourcing VIAL","updated_at":"2023-09-07T09:29:12Z","url":"https://simonwillison.net/2021/Jun/28/weeknotes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"theptip"},"title":{"matchLevel":"none","matchedWords":[],"value":"Porting VaccinateCA to Django"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Apr/12/porting-vaccinateca-to-django/"}},"_tags":["story","author_theptip","story_27653237"],"author":"theptip","children":[27684953,27684972],"created_at":"2021-06-27T17:07:17Z","created_at_i":1624813637,"num_comments":2,"objectID":"27653237","points":11,"story_id":27653237,"title":"Porting VaccinateCA to Django","updated_at":"2023-09-07T09:27:36Z","url":"https://simonwillison.net/2021/Apr/12/porting-vaccinateca-to-django/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Notes on streaming large API responses"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jun/25/streaming-large-api-responses/"}},"_tags":["story","author_simonw","story_27632949"],"author":"simonw","children":[27651380,27650889,27650024,27650094,27649250,27649505,27649039,27648985,27650344,27650153,27650340,27633318,27649591,27648816,27649296],"created_at":"2021-06-25T16:30:08Z","created_at_i":1624638608,"num_comments":52,"objectID":"27632949","points":131,"story_id":27632949,"title":"Notes on streaming large API responses","updated_at":"2023-09-07T09:25:55Z","url":"https://simonwillison.net/2021/Jun/25/streaming-large-api-responses/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"EntICOnc"},"title":{"matchLevel":"none","matchedWords":[],"value":"Git scraping, the five minute lightning talk"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Mar/5/git-scraping/"}},"_tags":["story","author_EntICOnc","story_27576868"],"author":"EntICOnc","created_at":"2021-06-21T06:38:12Z","created_at_i":1624257492,"num_comments":0,"objectID":"27576868","points":3,"story_id":27576868,"title":"Git scraping, the five minute lightning talk","updated_at":"2023-09-07T09:21:26Z","url":"https://simonwillison.net/2021/Mar/5/git-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Joining CSV and JSON data with an in-memory SQLite database"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jun/19/sqlite-utils-memory/"}},"_tags":["story","author_edward","story_27565482"],"author":"edward","children":[27565587,27567816,27569336,27569695,27568908,27570912],"created_at":"2021-06-19T23:23:53Z","created_at_i":1624145033,"num_comments":32,"objectID":"27565482","points":126,"story_id":27565482,"title":"Joining CSV and JSON data with an in-memory SQLite database","updated_at":"2023-09-07T09:20:36Z","url":"https://simonwillison.net/2021/Jun/19/sqlite-utils-memory/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"pcr910303"},"title":{"matchLevel":"none","matchedWords":[],"value":"Finding CSV files that start with a BOM using ripgrep"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/bash/finding-bom-csv-files-with-ripgrep"}},"_tags":["story","author_pcr910303","story_27324265"],"author":"pcr910303","children":[27324418,27324435,27324442,27325498,27324968,27324922,27325082,27326895],"created_at":"2021-05-29T10:27:35Z","created_at_i":1622284055,"num_comments":54,"objectID":"27324265","points":119,"story_id":27324265,"title":"Finding CSV files that start with a BOM using ripgrep","updated_at":"2023-09-07T09:00:56Z","url":"https://til.simonwillison.net/bash/finding-bom-csv-files-with-ripgrep"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Django SQL Dashboard"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/May/10/django-sql-dashboard/"}},"_tags":["story","author_tosh","story_27107396"],"author":"tosh","children":[27107612],"created_at":"2021-05-10T15:51:43Z","created_at_i":1620661903,"num_comments":1,"objectID":"27107396","points":6,"story_id":27107396,"title":"Django SQL Dashboard","updated_at":"2023-09-07T08:43:42Z","url":"https://simonwillison.net/2021/May/10/django-sql-dashboard/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"One Year of TILs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/May/2/one-year-of-tils/"}},"_tags":["story","author_tosh","story_27017604"],"author":"tosh","children":[27018510,27017966,27018859,27018467,27020530,27018675,27017879,27021388,27046126,27019377,27020048,27021524,27018198,27020876,27020418,27018224],"created_at":"2021-05-02T18:31:20Z","created_at_i":1619980280,"num_comments":53,"objectID":"27017604","points":228,"story_id":27017604,"title":"One Year of TILs","updated_at":"2023-09-07T08:36:17Z","url":"https://simonwillison.net/2021/May/2/one-year-of-tils/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"How I learned that returning dozens of MB of JSON works just fine these days"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Apr/26/vaccinate-the-states/"}},"_tags":["story","author_tosh","story_26946048"],"author":"tosh","created_at":"2021-04-26T18:23:02Z","created_at_i":1619461382,"num_comments":0,"objectID":"26946048","points":3,"story_id":26946048,"title":"How I learned that returning dozens of MB of JSON works just fine these days","updated_at":"2023-09-07T09:10:27Z","url":"https://simonwillison.net/2021/Apr/26/vaccinate-the-states/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"stadeschuldt"},"title":{"matchLevel":"none","matchedWords":[],"value":"Porting VaccinateCA to Django"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Apr/12/porting-vaccinateca-to-django/"}},"_tags":["story","author_stadeschuldt","story_26776883"],"author":"stadeschuldt","created_at":"2021-04-12T07:43:34Z","created_at_i":1618213414,"num_comments":0,"objectID":"26776883","points":8,"story_id":26776883,"title":"Porting VaccinateCA to Django","updated_at":"2023-09-07T08:55:42Z","url":"https://simonwillison.net/2021/Apr/12/porting-vaccinateca-to-django/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"pcr910303"},"title":{"matchLevel":"none","matchedWords":[],"value":"Animated choropleth of vaccinations by US county"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Apr/4/animated-choropleth-of-vaccinations-by-us-county/"}},"_tags":["story","author_pcr910303","story_26687565"],"author":"pcr910303","created_at":"2021-04-04T07:28:13Z","created_at_i":1617521293,"num_comments":0,"objectID":"26687565","points":1,"story_id":26687565,"title":"Animated choropleth of vaccinations by US county","updated_at":"2023-09-07T08:48:11Z","url":"https://simonwillison.net/2021/Apr/4/animated-choropleth-of-vaccinations-by-us-county/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette and Git Scraping at Nicar, VaccinateCA"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Mar/7/weeknotes/"}},"_tags":["story","author_chmaynard","story_26375284"],"author":"chmaynard","created_at":"2021-03-07T12:13:28Z","created_at_i":1615119208,"num_comments":0,"objectID":"26375284","points":1,"story_id":26375284,"title":"Datasette and Git Scraping at Nicar, VaccinateCA","updated_at":"2023-09-07T08:21:45Z","url":"https://simonwillison.net/2021/Mar/7/weeknotes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to run MediaWiki with SQLite on a macOS laptop"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/mediawiki/mediawiki-sqlite-macos"}},"_tags":["story","author_tosh","story_26374330"],"author":"tosh","created_at":"2021-03-07T08:54:39Z","created_at_i":1615107279,"num_comments":0,"objectID":"26374330","points":2,"story_id":26374330,"title":"How to run MediaWiki with SQLite on a macOS laptop","updated_at":"2023-09-07T08:21:40Z","url":"https://til.simonwillison.net/mediawiki/mediawiki-sqlite-macos"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Git scraping, the five minute lightning talk"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Mar/5/git-scraping/"}},"_tags":["story","author_chmaynard","story_26354524"],"author":"chmaynard","created_at":"2021-03-05T08:52:21Z","created_at_i":1614934341,"num_comments":0,"objectID":"26354524","points":3,"story_id":26354524,"title":"Git scraping, the five minute lightning talk","updated_at":"2023-09-07T08:19:58Z","url":"https://simonwillison.net/2021/Mar/5/git-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Open source projects should run office hours"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Feb/19/office-hours/"}},"_tags":["story","author_tosh","story_26351053"],"author":"tosh","children":[26353960,26352231,26351314,26351796,26355749,26352174,26351847,26353697,26351527,26352626,26351287,26354810,26354212,26352693,26351475,26351654,26351533,26353180,26351466,26352002,26352067,26352368,26352166,26353392,26354228,26354730,26351326,26354983,26353893,26358623,26355860,26353549,26351419,26354181,26352420,26358177,26353169,26358358,26358448,26357245,26354056,26354049,26355752,26356893,26356488,26354117,26352053,26351898,26357951,26352696,26356554,26356446,26353156,26354729,26361546,26358659,26356024,26354483,26360164,26352296,26352963,26352744,26357934,26357472,26353144,26368861,26382154,26353848,26357526,26359184,26351768,26354615,26351914],"created_at":"2021-03-05T01:08:49Z","created_at_i":1614906529,"num_comments":266,"objectID":"26351053","points":620,"story_id":26351053,"title":"Open source projects should run office hours","updated_at":"2023-09-07T08:19:42Z","url":"https://simonwillison.net/2021/Feb/19/office-hours/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Cross-Database Queries in SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Feb/21/cross-database-queries/"}},"_tags":["story","author_chmaynard","story_26217754"],"author":"chmaynard","children":[26218442,26221345,26218905,26222251,26220101,26217930,26226232],"created_at":"2021-02-21T22:08:48Z","created_at_i":1613945328,"num_comments":78,"objectID":"26217754","points":197,"story_id":26217754,"title":"Cross-Database Queries in SQLite","updated_at":"2023-09-07T08:08:18Z","url":"https://simonwillison.net/2021/Feb/21/cross-database-queries/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Open source projects should run office hours"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Feb/19/office-hours/"}},"_tags":["story","author_tosh","story_26203825"],"author":"tosh","created_at":"2021-02-20T13:07:46Z","created_at_i":1613826466,"num_comments":0,"objectID":"26203825","points":4,"story_id":26203825,"title":"Open source projects should run office hours","updated_at":"2023-09-07T08:07:10Z","url":"https://simonwillison.net/2021/Feb/19/office-hours/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Open source projects should run office hours"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Feb/19/office-hours/"}},"_tags":["story","author_simonw","story_26198559"],"author":"simonw","created_at":"2021-02-19T21:57:24Z","created_at_i":1613771844,"num_comments":0,"objectID":"26198559","points":3,"story_id":26198559,"title":"Open source projects should run office hours","updated_at":"2023-09-07T08:06:46Z","url":"https://simonwillison.net/2021/Feb/19/office-hours/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Serving map tiles from SQLite with MBTiles and datasette-tiles"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Feb/4/datasette-tiles/"}},"_tags":["story","author_simonw","story_26021423"],"author":"simonw","children":[26021548],"created_at":"2021-02-04T01:18:47Z","created_at_i":1612401527,"num_comments":1,"objectID":"26021423","points":4,"story_id":26021423,"title":"Serving map tiles from SQLite with MBTiles and datasette-tiles","updated_at":"2023-09-07T07:51:10Z","url":"https://simonwillison.net/2021/Feb/4/datasette-tiles/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette 0.54, the annotated release notes"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jan/25/datasette/"}},"_tags":["story","author_simonw","story_25906280"],"author":"simonw","created_at":"2021-01-25T17:50:06Z","created_at_i":1611597006,"num_comments":0,"objectID":"25906280","points":2,"story_id":25906280,"title":"Datasette 0.54, the annotated release notes","updated_at":"2023-09-07T08:58:27Z","url":"https://simonwillison.net/2021/Jan/25/datasette/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Drawing shapes on a map to query a SpatiaLite database"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jan/24/drawing-shapes-spatialite/"}},"_tags":["story","author_simonw","story_25889955"],"author":"simonw","created_at":"2021-01-24T07:01:08Z","created_at_i":1611471668,"num_comments":0,"objectID":"25889955","points":1,"story_id":25889955,"title":"Drawing shapes on a map to query a SpatiaLite database","updated_at":"2023-09-07T08:57:05Z","url":"https://simonwillison.net/2021/Jan/24/drawing-shapes-spatialite/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"APIs from CSS without JavaScript: the datasette-CSS-properties plugin"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jan/7/css-apis-no-javascript/"}},"_tags":["story","author_simonw","story_25677554"],"author":"simonw","children":[25677585],"created_at":"2021-01-07T21:13:31Z","created_at_i":1610054011,"num_comments":1,"objectID":"25677554","points":3,"story_id":25677554,"title":"APIs from CSS without JavaScript: the datasette-CSS-properties plugin","updated_at":"2023-09-07T08:38:44Z","url":"https://simonwillison.net/2021/Jan/7/css-apis-no-javascript/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"atg_abhishek"},"title":{"matchLevel":"none","matchedWords":[],"value":"Packaging a Python script as a standalone binary with PyInstaller"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/packaging-pyinstaller"}},"_tags":["story","author_atg_abhishek","story_25642099"],"author":"atg_abhishek","created_at":"2021-01-05T04:25:57Z","created_at_i":1609820757,"num_comments":0,"objectID":"25642099","points":2,"story_id":25642099,"title":"Packaging a Python script as a standalone binary with PyInstaller","updated_at":"2023-09-07T08:35:36Z","url":"https://til.simonwillison.net/python/packaging-pyinstaller"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Weeknotes: A flurry of not-quite-finished features"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2021/Jan/3/weeknotes/"}},"_tags":["story","author_tosh","story_25620544"],"author":"tosh","created_at":"2021-01-03T08:49:23Z","created_at_i":1609663763,"num_comments":0,"objectID":"25620544","points":2,"story_id":25620544,"title":"Weeknotes: A flurry of not-quite-finished features","updated_at":"2023-09-07T08:33:46Z","url":"https://simonwillison.net/2021/Jan/3/weeknotes/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette Internals"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Dec/27/weeknotes-datasette-internals/"}},"_tags":["story","author_tosh","story_25550002"],"author":"tosh","children":[25567324],"created_at":"2020-12-27T09:51:04Z","created_at_i":1609062664,"num_comments":1,"objectID":"25550002","points":5,"story_id":25550002,"title":"Datasette Internals","updated_at":"2023-09-07T08:28:14Z","url":"https://simonwillison.net/2020/Dec/27/weeknotes-datasette-internals/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette.io, an official project website for Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Dec/13/datasette-io/"}},"_tags":["story","author_tosh","story_25523768"],"author":"tosh","children":[25524139,25524434,25525235,25526645,25527563,25525901,25525108,25524032,25525338,25526905],"created_at":"2020-12-24T00:06:06Z","created_at_i":1608768366,"num_comments":29,"objectID":"25523768","points":208,"story_id":25523768,"title":"Datasette.io, an official project website for Datasette","updated_at":"2023-09-26T06:23:06Z","url":"https://simonwillison.net/2020/Dec/13/datasette-io/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building a Search Engine for Datasette.io"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Dec/19/dogsheep-beta/"}},"_tags":["story","author_tosh","story_25479630"],"author":"tosh","created_at":"2020-12-19T18:15:21Z","created_at_i":1608401721,"num_comments":0,"objectID":"25479630","points":3,"story_id":25479630,"title":"Building a Search Engine for Datasette.io","updated_at":"2023-09-07T08:22:28Z","url":"https://simonwillison.net/2020/Dec/19/dogsheep-beta/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Build v.s. buy: how billing models affect your internal culture"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Dec/13/build-vs-buy/"}},"_tags":["story","author_tosh","story_25408302"],"author":"tosh","created_at":"2020-12-13T17:36:50Z","created_at_i":1607881010,"num_comments":0,"objectID":"25408302","points":3,"story_id":25408302,"title":"Build v.s. buy: how billing models affect your internal culture","updated_at":"2023-09-07T08:16:36Z","url":"https://simonwillison.net/2020/Dec/13/build-vs-buy/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running Python code in a subprocess with a time limit"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/python/subprocess-time-limit"}},"_tags":["story","author_chmaynard","story_25328980"],"author":"chmaynard","created_at":"2020-12-07T03:07:30Z","created_at_i":1607310450,"num_comments":0,"objectID":"25328980","points":1,"story_id":25328980,"title":"Running Python code in a subprocess with a time limit","updated_at":"2023-09-07T08:10:15Z","url":"https://til.simonwillison.net/python/subprocess-time-limit"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette-ripgrep: a regular expression search engine for your source code"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Nov/28/datasette-ripgrep/"}},"_tags":["story","author_tosh","story_25236636"],"author":"tosh","children":[25238468,25238014,25237192,25237208,25237012,25237691,25237299,25237311,25237330,25240684,25237417,25237022,25238225,25236933,25241702],"created_at":"2020-11-28T10:01:36Z","created_at_i":1606557696,"num_comments":60,"objectID":"25236636","points":130,"story_id":25236636,"title":"Datasette-ripgrep: a regular expression search engine for your source code","updated_at":"2023-09-07T08:02:55Z","url":"https://simonwillison.net/2020/Nov/28/datasette-ripgrep/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Personal Data Warehouses: Reclaiming Your Data"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Nov/14/personal-data-warehouses/"}},"_tags":["story","author_simonw","story_25090218"],"author":"simonw","children":[25090446,25090222,25090986,25093146,25090888,25095367,25090675,25090464,25091675,25090762,25090607,25092323,25090476,25092547,25090848,25090839,25091364,25101972,25093275,25090731,25090740],"created_at":"2020-11-14T04:07:15Z","created_at_i":1605326835,"num_comments":59,"objectID":"25090218","points":436,"story_id":25090218,"title":"Personal Data Warehouses: Reclaiming Your Data","updated_at":"2023-09-23T18:40:13Z","url":"https://simonwillison.net/2020/Nov/14/personal-data-warehouses/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to cheat at unit tests with pytest and Black"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Feb/11/cheating-at-unit-tests-pytest-black/"}},"_tags":["story","author_tosh","story_24975316"],"author":"tosh","created_at":"2020-11-03T01:10:14Z","created_at_i":1604365814,"num_comments":0,"objectID":"24975316","points":2,"story_id":24975316,"title":"How to cheat at unit tests with pytest and Black","updated_at":"2023-09-07T08:31:43Z","url":"https://simonwillison.net/2020/Feb/11/cheating-at-unit-tests-pytest-black/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Dropdown Menu with Details Summary"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/til/til/javascript_dropdown-menu-with-details-summary.md"}},"_tags":["story","author_chmaynard","story_24958198"],"author":"chmaynard","created_at":"2020-11-01T09:07:55Z","created_at_i":1604221675,"num_comments":0,"objectID":"24958198","points":2,"story_id":24958198,"title":"Dropdown Menu with Details Summary","updated_at":"2023-09-07T08:30:19Z","url":"https://til.simonwillison.net/til/til/javascript_dropdown-menu-with-details-summary.md"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"atg_abhishek"},"title":{"matchLevel":"none","matchedWords":[],"value":"Decorators with Optional Arguments"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/til/til/python_decorators-with-optional-arguments.md"}},"_tags":["story","author_atg_abhishek","story_24926932"],"author":"atg_abhishek","created_at":"2020-10-29T03:38:50Z","created_at_i":1603942730,"num_comments":0,"objectID":"24926932","points":1,"story_id":24926932,"title":"Decorators with Optional Arguments","updated_at":"2023-09-07T08:27:41Z","url":"https://til.simonwillison.net/til/til/python_decorators-with-optional-arguments.md"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"pcr910303"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building an Evernote to SQLite Exporter"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Oct/16/building-evernote-sqlite-exporter/"}},"_tags":["story","author_pcr910303","story_24891514"],"author":"pcr910303","created_at":"2020-10-26T00:27:55Z","created_at_i":1603672075,"num_comments":0,"objectID":"24891514","points":1,"story_id":24891514,"title":"Building an Evernote to SQLite Exporter","updated_at":"2023-09-07T08:24:48Z","url":"https://simonwillison.net/2020/Oct/16/building-evernote-sqlite-exporter/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"The interesting ideas in Datasette (2018)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"}},"_tags":["story","author_Tomte","story_24827224"],"author":"Tomte","created_at":"2020-10-19T15:27:48Z","created_at_i":1603121268,"num_comments":0,"objectID":"24827224","points":5,"story_id":24827224,"title":"The interesting ideas in Datasette (2018)","updated_at":"2023-09-07T08:19:39Z","url":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"atg_abhishek"},"title":{"matchLevel":"none","matchedWords":[],"value":"Explicit file encodings using click.File"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/til/til/python_click-file-encoding.md"}},"_tags":["story","author_atg_abhishek","story_24815057"],"author":"atg_abhishek","children":[24815555],"created_at":"2020-10-18T02:17:32Z","created_at_i":1602987452,"num_comments":0,"objectID":"24815057","points":1,"story_id":24815057,"title":"Explicit file encodings using click.File","updated_at":"2023-09-07T08:18:42Z","url":"https://til.simonwillison.net/til/til/python_click-file-encoding.md"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building an Evernote to SQLite Exporter"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Oct/16/building-evernote-sqlite-exporter/"}},"_tags":["story","author_simonw","story_24804704"],"author":"simonw","created_at":"2020-10-16T20:27:16Z","created_at_i":1602880036,"num_comments":0,"objectID":"24804704","points":1,"story_id":24804704,"title":"Building an Evernote to SQLite Exporter","updated_at":"2023-09-07T08:17:49Z","url":"https://simonwillison.net/2020/Oct/16/building-evernote-sqlite-exporter/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Tomte"},"title":{"matchLevel":"none","matchedWords":[],"value":"The interesting ideas in Datasette (2018)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"}},"_tags":["story","author_Tomte","story_24801516"],"author":"Tomte","created_at":"2020-10-16T15:05:53Z","created_at_i":1602860753,"num_comments":0,"objectID":"24801516","points":1,"story_id":24801516,"title":"The interesting ideas in Datasette (2018)","updated_at":"2023-09-07T08:17:32Z","url":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Git scraping: track changes over time by scraping to a Git repository"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Oct/9/git-scraping/"}},"_tags":["story","author_simonw","story_24732943"],"author":"simonw","children":[24733266,24734790,24734987,24733556,24733416,24735135,24733572,24733574,24733352,24735377,24736407,24734532,24738107,24736970,24734929,24734436,24733657,24735052,24737135,24733996,24733682,24735945,24735485,24735182,24733362,24733649,24738177,24733579,24739245,24733629,24733815,24735230,24734151],"created_at":"2020-10-09T18:35:42Z","created_at_i":1602268542,"num_comments":95,"objectID":"24732943","points":471,"story_id":24732943,"title":"Git scraping: track changes over time by scraping to a Git repository","updated_at":"2023-10-26T18:02:47Z","url":"https://simonwillison.net/2020/Oct/9/git-scraping/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"goranmoomin"},"title":{"matchLevel":"none","matchedWords":[],"value":"Escaping strings in Bash using !:q"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://til.simonwillison.net/til/til/bash_escaping-a-string.md"}},"_tags":["story","author_goranmoomin","story_24659282"],"author":"goranmoomin","children":[24660297,24659571,24659461,24663038,24660443,24661656,24659685,24669792,24660460,24661070,24664048,24664960,24667929,24660797,24660598,24660130,24662258,24659744,24662061],"created_at":"2020-10-02T05:43:25Z","created_at_i":1601617405,"num_comments":81,"objectID":"24659282","points":482,"story_id":24659282,"title":"Escaping strings in Bash using !:q","updated_at":"2023-09-07T08:05:52Z","url":"https://til.simonwillison.net/til/til/bash_escaping-a-string.md"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"craigkerstiens"},"title":{"matchLevel":"none","matchedWords":[],"value":"Refactoring databases with sqlite-utils extract"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Sep/23/sqlite-utils-extract/"}},"_tags":["story","author_craigkerstiens","story_24568691"],"author":"craigkerstiens","created_at":"2020-09-23T16:17:24Z","created_at_i":1600877844,"num_comments":0,"objectID":"24568691","points":1,"story_id":24568691,"title":"Refactoring databases with sqlite-utils extract","updated_at":"2023-09-07T07:58:15Z","url":"https://simonwillison.net/2020/Sep/23/sqlite-utils-extract/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"chmaynard"},"title":{"matchLevel":"none","matchedWords":[],"value":"Installing Datasette with Homebrew etc."},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Aug/13/weeknotes-datasette-homebrew-graphql/"}},"_tags":["story","author_chmaynard","story_24150312"],"author":"chmaynard","created_at":"2020-08-13T22:24:05Z","created_at_i":1597357445,"num_comments":0,"objectID":"24150312","points":1,"story_id":24150312,"title":"Installing Datasette with Homebrew etc.","updated_at":"2023-09-07T07:22:17Z","url":"https://simonwillison.net/2020/Aug/13/weeknotes-datasette-homebrew-graphql/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"GraphQL in Datasette with the new datasette-GraphQL plugin"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Aug/7/datasette-graphql/"}},"_tags":["story","author_simonw","story_24083604"],"author":"simonw","created_at":"2020-08-07T16:21:26Z","created_at_i":1596817286,"num_comments":0,"objectID":"24083604","points":2,"story_id":24083604,"title":"GraphQL in Datasette with the new datasette-GraphQL plugin","updated_at":"2023-09-07T07:16:22Z","url":"https://simonwillison.net/2020/Aug/7/datasette-graphql/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Simon Willison on Node.js (2009)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2009/Nov/9/node/"}},"_tags":["story","author_tosh","story_23952768"],"author":"tosh","created_at":"2020-07-25T22:05:22Z","created_at_i":1595714722,"num_comments":0,"objectID":"23952768","points":1,"story_id":23952768,"title":"Simon Willison on Node.js (2009)","updated_at":"2023-09-07T07:44:24Z","url":"https://simonwillison.net/2009/Nov/9/node/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"15 years ago today: Introducing Django"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2005/Jul/17/django/"}},"_tags":["story","author_simonw","story_23870526"],"author":"simonw","children":[23898642],"created_at":"2020-07-17T14:00:36Z","created_at_i":1594994436,"num_comments":1,"objectID":"23870526","points":8,"story_id":23870526,"title":"15 years ago today: Introducing Django","updated_at":"2023-09-07T07:37:05Z","url":"https://simonwillison.net/2005/Jul/17/django/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ra7"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building a self-updating profile README for GitHub"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Jul/10/self-updating-profile-readme/"}},"_tags":["story","author_ra7","story_23807881"],"author":"ra7","children":[23809537,23808906,23808563,23808508,23808486,23811013,23811412,23810237,23808356,23811368,23808442,23808540],"created_at":"2020-07-12T01:33:19Z","created_at_i":1594517599,"num_comments":55,"objectID":"23807881","points":326,"story_id":23807881,"title":"Building a self-updating profile README for GitHub","updated_at":"2023-09-07T07:31:19Z","url":"https://simonwillison.net/2020/Jul/10/self-updating-profile-readme/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building a self-updating profile README for GitHub"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Jul/10/self-updating-profile-readme/"}},"_tags":["story","author_simonw","story_23788227"],"author":"simonw","created_at":"2020-07-10T04:44:28Z","created_at_i":1594356268,"num_comments":0,"objectID":"23788227","points":3,"story_id":23788227,"title":"Building a self-updating profile README for GitHub","updated_at":"2023-09-07T07:29:43Z","url":"https://simonwillison.net/2020/Jul/10/self-updating-profile-readme/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"rohmanhakim"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using SQL to find my best photo of a pelican according to Apple Photos"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/May/21/apple-photos-sqlite/"}},"_tags":["story","author_rohmanhakim","story_23378131"],"author":"rohmanhakim","created_at":"2020-06-01T13:24:13Z","created_at_i":1591017853,"num_comments":0,"objectID":"23378131","points":1,"story_id":23378131,"title":"Using SQL to find my best photo of a pelican according to Apple Photos","updated_at":"2023-09-07T06:55:21Z","url":"https://simonwillison.net/2020/May/21/apple-photos-sqlite/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"markx2"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using SQL to find my best photo of a pelican according to Apple Photos"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/May/21/dogsheep-photos/"}},"_tags":["story","author_markx2","story_23271053"],"author":"markx2","children":[23276625,23275967,23275836,23279427,23280468,23279260,23309430,23280631,23280809,23280068,23276704,23277019,23279021,23276482,23275294],"created_at":"2020-05-22T11:45:24Z","created_at_i":1590147924,"num_comments":36,"objectID":"23271053","points":216,"story_id":23271053,"title":"Using SQL to find my best photo of a pelican according to Apple Photos","updated_at":"2023-10-23T19:25:29Z","url":"https://simonwillison.net/2020/May/21/dogsheep-photos/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"tosh"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using SQL to find my best photo of a pelican according to Apple Photos"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/May/21/apple-photos-sqlite/"}},"_tags":["story","author_tosh","story_23264726"],"author":"tosh","created_at":"2020-05-21T20:31:04Z","created_at_i":1590093064,"num_comments":0,"objectID":"23264726","points":3,"story_id":23264726,"title":"Using SQL to find my best photo of a pelican according to Apple Photos","updated_at":"2023-09-07T06:46:07Z","url":"https://simonwillison.net/2020/May/21/apple-photos-sqlite/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Reverse engineering Apple Photos - ML labels, quality scores and more"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/May/21/dogsheep-photos/"}},"_tags":["story","author_simonw","story_23263655"],"author":"simonw","children":[23263947],"created_at":"2020-05-21T19:22:00Z","created_at_i":1590088920,"num_comments":3,"objectID":"23263655","points":3,"story_id":23263655,"title":"Reverse engineering Apple Photos - ML labels, quality scores and more","updated_at":"2023-09-07T06:46:02Z","url":"https://simonwillison.net/2020/May/21/dogsheep-photos/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"pcr910303"},"title":{"matchLevel":"none","matchedWords":[],"value":"Using a self-rewriting README powered by GitHub Actions to track TILs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Apr/20/self-rewriting-readme/"}},"_tags":["story","author_pcr910303","story_22920437"],"author":"pcr910303","children":[22920480,22921744,22920681,22968020,22922697,22927872,22925825,22921547,22921199,22933246,22921966,22923735,22923664,22921205,22920557,22920588,22923506,22921943,22927102,22921593,22922457,22923930],"created_at":"2020-04-20T01:48:30Z","created_at_i":1587347310,"num_comments":31,"objectID":"22920437","points":205,"story_id":22920437,"title":"Using a self-rewriting README powered by GitHub Actions to track TILs","updated_at":"2023-09-07T07:35:40Z","url":"https://simonwillison.net/2020/Apr/20/self-rewriting-readme/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"pcr910303"},"title":{"matchLevel":"none","matchedWords":[],"value":"Super Graph compiles GraphQL to a single SQL query"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Apr/16/how-super-graph-compiles-graphql-single-sql-query/"}},"_tags":["story","author_pcr910303","story_22909914"],"author":"pcr910303","created_at":"2020-04-18T18:27:29Z","created_at_i":1587234449,"num_comments":0,"objectID":"22909914","points":5,"story_id":22909914,"title":"Super Graph compiles GraphQL to a single SQL query","updated_at":"2023-09-07T07:34:47Z","url":"https://simonwillison.net/2020/Apr/16/how-super-graph-compiles-graphql-single-sql-query/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Saying goodbye to Zeit Now v1"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Apr/8/weeknotes-zeit-now-v2/"}},"_tags":["story","author_simonw","story_22810432"],"author":"simonw","created_at":"2020-04-08T05:59:56Z","created_at_i":1586325596,"num_comments":0,"objectID":"22810432","points":2,"story_id":22810432,"title":"Saying goodbye to Zeit Now v1","updated_at":"2023-09-07T07:26:34Z","url":"https://simonwillison.net/2020/Apr/8/weeknotes-zeit-now-v2/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"BerislavLopac"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to cheat at unit tests with pytest and Black"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Feb/11/cheating-at-unit-tests-pytest-black/"}},"_tags":["story","author_BerislavLopac","story_22301086"],"author":"BerislavLopac","created_at":"2020-02-11T18:30:27Z","created_at_i":1581445827,"num_comments":0,"objectID":"22301086","points":1,"story_id":22301086,"title":"How to cheat at unit tests with pytest and Black","updated_at":"2023-09-07T06:43:42Z","url":"https://simonwillison.net/2020/Feb/11/cheating-at-unit-tests-pytest-black/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Deploying a Data API Using GitHub Actions and Cloud Run"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2020/Jan/21/github-actions-cloud-run/"}},"_tags":["story","author_simonw","story_22109453"],"author":"simonw","children":[22109579],"created_at":"2020-01-21T17:59:40Z","created_at_i":1579629580,"num_comments":1,"objectID":"22109453","points":3,"story_id":22109453,"title":"Deploying a Data API Using GitHub Actions and Cloud Run","updated_at":"2023-09-07T06:27:12Z","url":"https://simonwillison.net/2020/Jan/21/github-actions-cloud-run/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edward"},"title":{"matchLevel":"none","matchedWords":[],"value":"Sqlite-utils 2.0: real upserts"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2019/Dec/30/sqlite-utils-2/"}},"_tags":["story","author_edward","story_21911424"],"author":"edward","created_at":"2019-12-30T07:11:57Z","created_at_i":1577689917,"num_comments":0,"objectID":"21911424","points":2,"story_id":21911424,"title":"Sqlite-utils 2.0: real upserts","updated_at":"2023-09-07T21:20:23Z","url":"https://simonwillison.net/2019/Dec/30/sqlite-utils-2/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"fanf2"},"title":{"matchLevel":"none","matchedWords":[],"value":"Niche-Museums.com, Powered by Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2019/Nov/25/niche-museums/"}},"_tags":["story","author_fanf2","story_21693278"],"author":"fanf2","created_at":"2019-12-03T15:43:04Z","created_at_i":1575387784,"num_comments":0,"objectID":"21693278","points":1,"story_id":21693278,"title":"Niche-Museums.com, Powered by Datasette","updated_at":"2023-09-07T20:44:09Z","url":"https://simonwillison.net/2019/Nov/25/niche-museums/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette-atom: Define an Atom feed using a custom SQL query"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2019/Dec/3/datasette-atom/"}},"_tags":["story","author_simonw","story_21690119"],"author":"simonw","children":[21691252,21690128],"created_at":"2019-12-03T05:14:41Z","created_at_i":1575350081,"num_comments":5,"objectID":"21690119","points":51,"story_id":21690119,"title":"Datasette-atom: Define an Atom feed using a custom SQL query","updated_at":"2023-09-07T20:43:40Z","url":"https://simonwillison.net/2019/Dec/3/datasette-atom/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"danso"},"title":{"matchLevel":"none","matchedWords":[],"value":"Tracking PG&E outages by scraping to a Git repo"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2019/Oct/10/pge-outages/"}},"_tags":["story","author_danso","story_21224378"],"author":"danso","children":[21244868,21245028,21244940,21248381,21351637],"created_at":"2019-10-11T13:56:05Z","created_at_i":1570802165,"num_comments":11,"objectID":"21224378","points":85,"story_id":21224378,"title":"Tracking PG&E outages by scraping to a Git repo","updated_at":"2023-09-07T19:05:18Z","url":"https://simonwillison.net/2019/Oct/10/pge-outages/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"djhaskin987"},"title":{"matchLevel":"none","matchedWords":[],"value":"Quoting Paul Ford"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2019/May/15/paul-ford/"}},"_tags":["story","author_djhaskin987","story_19920982"],"author":"djhaskin987","created_at":"2019-05-15T16:25:17Z","created_at_i":1557937517,"num_comments":0,"objectID":"19920982","points":2,"story_id":19920982,"title":"Quoting Paul Ford","updated_at":"2023-09-07T06:09:02Z","url":"https://simonwillison.net/2019/May/15/paul-ford/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Running Datasette on Glitch"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2019/Apr/23/datasette-glitch/"}},"_tags":["story","author_simonw","story_19729449"],"author":"simonw","created_at":"2019-04-23T15:17:21Z","created_at_i":1556032641,"num_comments":0,"objectID":"19729449","points":10,"story_id":19729449,"title":"Running Datasette on Glitch","updated_at":"2023-09-07T05:53:00Z","url":"https://simonwillison.net/2019/Apr/23/datasette-glitch/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"I commissioned an oil painting of Barbra Streisand\u2019s cloned dogs"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2019/Mar/7/oil-painting/"}},"_tags":["story","author_simonw","story_19330326"],"author":"simonw","children":[19330339],"created_at":"2019-03-07T17:58:11Z","created_at_i":1551981491,"num_comments":4,"objectID":"19330326","points":4,"story_id":19330326,"title":"I commissioned an oil painting of Barbra Streisand\u2019s cloned dogs","updated_at":"2023-09-07T05:19:57Z","url":"https://simonwillison.net/2019/Mar/7/oil-painting/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Sqlite-utils: a Python library and CLI tool for building SQLite databases"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2019/Feb/25/sqlite-utils/"}},"_tags":["story","author_simonw","story_19243247"],"author":"simonw","created_at":"2019-02-25T05:32:56Z","created_at_i":1551072776,"num_comments":0,"objectID":"19243247","points":10,"story_id":19243247,"title":"Sqlite-utils: a Python library and CLI tool for building SQLite databases","updated_at":"2023-09-07T05:11:35Z","url":"https://simonwillison.net/2019/Feb/25/sqlite-utils/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Exploring search relevance algorithms with SQLite"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2019/Jan/7/exploring-search-relevance-algorithms-sqlite/"}},"_tags":["story","author_simonw","story_18842607"],"author":"simonw","created_at":"2019-01-07T03:45:15Z","created_at_i":1546832715,"num_comments":0,"objectID":"18842607","points":1,"story_id":18842607,"title":"Exploring search relevance algorithms with SQLite","updated_at":"2023-09-07T04:52:37Z","url":"https://simonwillison.net/2019/Jan/7/exploring-search-relevance-algorithms-sqlite/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"kiyanwang"},"title":{"matchLevel":"none","matchedWords":[],"value":"Zeit 2.0, and building smaller Python Docker images"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Nov/19/smaller-python-docker-images/"}},"_tags":["story","author_kiyanwang","story_18526639"],"author":"kiyanwang","created_at":"2018-11-25T12:43:42Z","created_at_i":1543149822,"num_comments":0,"objectID":"18526639","points":1,"story_id":18526639,"title":"Zeit 2.0, and building smaller Python Docker images","updated_at":"2023-09-07T04:26:56Z","url":"https://simonwillison.net/2018/Nov/19/smaller-python-docker-images/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"craigkerstiens"},"title":{"matchLevel":"none","matchedWords":[],"value":"SQL as an API language"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Oct/4/datasette-ideas/#SQL_as_an_API_language"}},"_tags":["story","author_craigkerstiens","story_18142184"],"author":"craigkerstiens","children":[18144385,18144318,18143270,18143496,18144678,18143692,18146729,18143465,18144839,18144856,18143323,18146433,18144505,18147283,18144688,18143205,18146957,18160740,18146096,18143651,18144097,18145370,18144182,18145277,18147406],"created_at":"2018-10-04T18:09:42Z","created_at_i":1538676582,"num_comments":157,"objectID":"18142184","points":201,"story_id":18142184,"title":"SQL as an API language","updated_at":"2023-09-07T03:56:05Z","url":"https://simonwillison.net/2018/Oct/4/datasette-ideas/#SQL_as_an_API_language"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"The interesting ideas in Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"}},"_tags":["story","author_simonw","story_18141571"],"author":"simonw","children":[18142771,18141592,18143790,18142250,18143218,18144705,18144979],"created_at":"2018-10-04T16:54:29Z","created_at_i":1538672069,"num_comments":11,"objectID":"18141571","points":135,"story_id":18141571,"title":"The interesting ideas in Datasette","updated_at":"2023-09-07T03:56:00Z","url":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"jgalvez"},"title":{"matchLevel":"none","matchedWords":[],"value":"The Interesting Ideas in Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"}},"_tags":["story","author_jgalvez","story_18137733"],"author":"jgalvez","created_at":"2018-10-04T06:46:54Z","created_at_i":1538635614,"num_comments":0,"objectID":"18137733","points":3,"story_id":18137733,"title":"The Interesting Ideas in Datasette","updated_at":"2023-09-07T03:55:44Z","url":"https://simonwillison.net/2018/Oct/4/datasette-ideas/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Analyzing US Election Russian Facebook Ads"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Aug/6/russian-facebook-ads/"}},"_tags":["story","author_simonw","story_17699799"],"author":"simonw","children":[17699812],"created_at":"2018-08-06T17:39:37Z","created_at_i":1533577177,"num_comments":1,"objectID":"17699799","points":4,"story_id":17699799,"title":"Analyzing US Election Russian Facebook Ads","updated_at":"2023-09-07T04:34:13Z","url":"https://simonwillison.net/2018/Aug/6/russian-facebook-ads/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Documentation unit tests"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Jul/28/documentation-unit-tests/"}},"_tags":["story","author_simonw","story_17633692"],"author":"simonw","children":[17633746,17633787],"created_at":"2018-07-28T16:04:25Z","created_at_i":1532793865,"num_comments":2,"objectID":"17633692","points":2,"story_id":17633692,"title":"Documentation unit tests","updated_at":"2023-09-07T04:28:21Z","url":"https://simonwillison.net/2018/Jul/28/documentation-unit-tests/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette Facets: Faceted Browse and a JSON API for any CSV File or SQLite DB"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/May/20/datasette-facets/"}},"_tags":["story","author_simonw","story_17115379"],"author":"simonw","children":[17116099,17117600,17116045,17115909,17115745,17117366,17117092,17117617],"created_at":"2018-05-20T23:56:47Z","created_at_i":1526860607,"num_comments":13,"objectID":"17115379","points":116,"story_id":17115379,"title":"Datasette Facets: Faceted Browse and a JSON API for any CSV File or SQLite DB","updated_at":"2023-09-07T03:42:41Z","url":"https://simonwillison.net/2018/May/20/datasette-facets/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette plugins, and building a clustered map visualization"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Apr/20/datasette-plugins/"}},"_tags":["story","author_simonw","story_16885777"],"author":"simonw","created_at":"2018-04-20T15:49:10Z","created_at_i":1524239350,"num_comments":0,"objectID":"16885777","points":1,"story_id":16885777,"title":"Datasette plugins, and building a clustered map visualization","updated_at":"2023-09-07T04:39:01Z","url":"https://simonwillison.net/2018/Apr/20/datasette-plugins/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"justinph"},"title":{"matchLevel":"none","matchedWords":[],"value":"Analyzing my Twitter followers with Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2018/Jan/28/analyzing-my-twitter-followers/#atom-everything"}},"_tags":["story","author_justinph","story_16251447"],"author":"justinph","created_at":"2018-01-28T14:40:16Z","created_at_i":1517150416,"num_comments":0,"objectID":"16251447","points":2,"story_id":16251447,"title":"Analyzing my Twitter followers with Datasette","updated_at":"2023-09-07T03:44:19Z","url":"http://simonwillison.net/2018/Jan/28/analyzing-my-twitter-followers/#atom-everything"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"Isofarro"},"title":{"matchLevel":"none","matchedWords":[],"value":"Analyzing my Twitter followers with Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Jan/28/analyzing-my-twitter-followers/"}},"_tags":["story","author_Isofarro","story_16250337"],"author":"Isofarro","created_at":"2018-01-28T07:55:56Z","created_at_i":1517126156,"num_comments":0,"objectID":"16250337","points":1,"story_id":16250337,"title":"Analyzing my Twitter followers with Datasette","updated_at":"2023-09-07T03:44:14Z","url":"https://simonwillison.net/2018/Jan/28/analyzing-my-twitter-followers/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Datasette Publish: a web app for publishing CSV files as an online database"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2018/Jan/17/datasette-publish/"}},"_tags":["story","author_simonw","story_16168021"],"author":"simonw","children":[16168033],"created_at":"2018-01-17T14:16:53Z","created_at_i":1516198613,"num_comments":1,"objectID":"16168021","points":24,"story_id":16168021,"title":"Datasette Publish: a web app for publishing CSV files as an online database","updated_at":"2023-09-07T03:37:10Z","url":"https://simonwillison.net/2018/Jan/17/datasette-publish/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Building a Location to Time Zone API with SpatiaLite, OpenStreetMap and Datasette"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2017/Dec/12/building-a-location-time-zone-api/"}},"_tags":["story","author_simonw","story_15906525"],"author":"simonw","children":[15909418],"created_at":"2017-12-12T16:01:51Z","created_at_i":1513094511,"num_comments":1,"objectID":"15906525","points":15,"story_id":15906525,"title":"Building a Location to Time Zone API with SpatiaLite, OpenStreetMap and Datasette","updated_at":"2023-09-07T03:35:59Z","url":"https://simonwillison.net/2017/Dec/12/building-a-location-time-zone-api/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"New in Datasette: filters, foreign keys and search"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2017/Nov/25/new-in-datasette/"}},"_tags":["story","author_simonw","story_15778093"],"author":"simonw","children":[15778478,15778429],"created_at":"2017-11-25T21:29:12Z","created_at_i":1511645352,"num_comments":2,"objectID":"15778093","points":40,"story_id":15778093,"title":"New in Datasette: filters, foreign keys and search","updated_at":"2023-09-07T03:25:17Z","url":"https://simonwillison.net/2017/Nov/25/new-in-datasette/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Show HN: Datasette \u2013 Create and publish an API for SQLite databases"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2017/Nov/13/datasette/"}},"_tags":["story","author_simonw","show_hn","story_15691409"],"author":"simonw","children":[15691431,15691494,15692179,15692472,15693566,15693434,15695796,15691545,15691833,15692125,15691572,15692855,15696065,15696562,15691683,15693040],"created_at":"2017-11-14T00:02:27Z","created_at_i":1510617747,"num_comments":44,"objectID":"15691409","points":269,"story_id":15691409,"title":"Show HN: Datasette \u2013 Create and publish an API for SQLite databases","updated_at":"2023-09-26T06:03:52Z","url":"https://simonwillison.net/2017/Nov/13/datasette/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"How to set up continuous deployment using free hosted tools"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2017/Oct/17/free-continuous-deployment/"}},"_tags":["story","author_simonw","story_15490935"],"author":"simonw","children":[15492343,15492231,15492084,15491598,15491771,15491959,15493228,15491340,15492304,15491362,15491986,15491679,15492277,15495439,15492208,15491566,15492746,15491537,15491848,15491944,15491877,15492100,15496245,15559010,15491338,15491950,15492494,15491606,15498084,15492514,15492113,15491645,15491626],"created_at":"2017-10-17T14:01:22Z","created_at_i":1508248882,"num_comments":88,"objectID":"15490935","points":411,"story_id":15490935,"title":"How to set up continuous deployment using free hosted tools","updated_at":"2023-09-07T03:00:52Z","url":"https://simonwillison.net/2017/Oct/17/free-continuous-deployment/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"avyfain"},"title":{"matchLevel":"none","matchedWords":[],"value":"Deploying an Asynchronous Python Microservice with Sanic and Zeit Now"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2017/Oct/14/async-python-sanic-now/"}},"_tags":["story","author_avyfain","story_15477632"],"author":"avyfain","created_at":"2017-10-15T15:51:24Z","created_at_i":1508082684,"num_comments":0,"objectID":"15477632","points":2,"story_id":15477632,"title":"Deploying an Asynchronous Python Microservice with Sanic and Zeit Now","updated_at":"2023-09-07T02:59:48Z","url":"https://simonwillison.net/2017/Oct/14/async-python-sanic-now/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Deploying an Asynchronous Python Microservice with Sanic and Zeit Now"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2017/Oct/14/async-python-sanic-now/"}},"_tags":["story","author_simonw","story_15474548"],"author":"simonw","created_at":"2017-10-14T21:54:13Z","created_at_i":1508018053,"num_comments":0,"objectID":"15474548","points":3,"story_id":15474548,"title":"Deploying an Asynchronous Python Microservice with Sanic and Zeit Now","updated_at":"2023-09-07T02:59:32Z","url":"https://simonwillison.net/2017/Oct/14/async-python-sanic-now/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"happy-go-lucky"},"title":{"matchLevel":"none","matchedWords":[],"value":"History of the Django web framework described as \u201cdeveloped in a newsroom\u201d"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2010/Aug/24/what-is-the-history/"}},"_tags":["story","author_happy-go-lucky","story_15416570"],"author":"happy-go-lucky","created_at":"2017-10-06T13:24:02Z","created_at_i":1507296242,"num_comments":0,"objectID":"15416570","points":1,"story_id":15416570,"title":"History of the Django web framework described as \u201cdeveloped in a newsroom\u201d","updated_at":"2023-09-07T02:54:50Z","url":"https://simonwillison.net/2010/Aug/24/what-is-the-history/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Implementing faceted search with Django and PostgreSQL"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"https://simonwillison.net/2017/Oct/5/django-postgresql-faceted-search/"}},"_tags":["story","author_simonw","story_15409733"],"author":"simonw","children":[15410674,15411536,15450264,15414650,15412571],"created_at":"2017-10-05T15:05:52Z","created_at_i":1507215952,"num_comments":19,"objectID":"15409733","points":124,"story_id":15409733,"title":"Implementing faceted search with Django and PostgreSQL","updated_at":"2023-09-07T02:54:13Z","url":"https://simonwillison.net/2017/Oct/5/django-postgresql-faceted-search/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"andrevoget"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Redis tutorial"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/static/2010/redis-tutorial/"}},"_tags":["story","author_andrevoget","story_2581225"],"author":"andrevoget","created_at":"2011-05-24T19:29:01Z","created_at_i":1306265341,"num_comments":0,"objectID":"2581225","points":1,"story_id":2581225,"story_text":"","title":"Redis tutorial","updated_at":"2023-09-06T19:52:14Z","url":"http://simonwillison.net/static/2010/redis-tutorial/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ashishb4u"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Pretty Date Input"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/code/js/date-parser/"}},"_tags":["story","author_ashishb4u","story_2066807"],"author":"ashishb4u","children":[2066890,2066922,2066880],"created_at":"2011-01-04T13:24:00Z","created_at_i":1294147440,"num_comments":3,"objectID":"2066807","points":1,"story_id":2066807,"story_text":"","title":"Pretty Date Input","updated_at":"2023-09-06T19:07:15Z","url":"http://simonwillison.net/code/js/date-parser/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mnemonik"},"title":{"matchLevel":"none","matchedWords":[],"value":"What is the history of Django?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2010/Aug/24/quora/"}},"_tags":["story","author_mnemonik","story_1630408"],"author":"mnemonik","children":[1630724,1631149,1630624],"created_at":"2010-08-24T17:15:46Z","created_at_i":1282670146,"num_comments":3,"objectID":"1630408","points":60,"story_id":1630408,"title":"What is the history of Django?","updated_at":"2023-09-06T19:54:37Z","url":"http://simonwillison.net/2010/Aug/24/quora/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Is Facebook's Like button vulnerable to clickjacking by nature?"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2010/Jun/3/likejacking/"}},"_tags":["story","author_simonw","story_1400828"],"author":"simonw","children":[1400829],"created_at":"2010-06-03T09:00:37Z","created_at_i":1275555637,"num_comments":1,"objectID":"1400828","points":2,"story_id":1400828,"story_text":"","title":"Is Facebook's Like button vulnerable to clickjacking by nature?","updated_at":"2023-09-06T19:34:20Z","url":"http://simonwillison.net/2010/Jun/3/likejacking/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Slides and notes from my three hour Redis tutorial"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/static/2010/redis-tutorial/"}},"_tags":["story","author_simonw","story_1293578"],"author":"simonw","children":[1293672,1294463,1293758],"created_at":"2010-04-25T21:38:48Z","created_at_i":1272231528,"num_comments":14,"objectID":"1293578","points":87,"story_id":1293578,"story_text":"","title":"Slides and notes from my three hour Redis tutorial","updated_at":"2023-09-06T19:25:38Z","url":"http://simonwillison.net/static/2010/redis-tutorial/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Questions about the blocking of HTML5, informative answers from W3C participants"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2010/Feb/16/html5/"}},"_tags":["story","author_simonw","story_1131523"],"author":"simonw","children":[1131686,1132036],"created_at":"2010-02-17T14:10:39Z","created_at_i":1266415839,"num_comments":3,"objectID":"1131523","points":10,"story_id":1131523,"story_text":"","title":"Questions about the blocking of HTML5, informative answers from W3C participants","updated_at":"2023-09-06T19:12:16Z","url":"http://simonwillison.net/2010/Feb/16/html5/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"WildlifeNearYou.com - built by 12 hackers on a fort in a week (sort of)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2010/Jan/12/wildlifenearyou/"}},"_tags":["story","author_simonw","story_1049024"],"author":"simonw","children":[1049030,1049692,1049575],"created_at":"2010-01-13T00:35:27Z","created_at_i":1263342927,"num_comments":4,"objectID":"1049024","points":35,"story_id":1049024,"story_text":"","title":"WildlifeNearYou.com - built by 12 hackers on a fort in a week (sort of)","updated_at":"2023-09-06T19:05:19Z","url":"http://simonwillison.net/2010/Jan/12/wildlifenearyou/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mnemonik"},"title":{"matchLevel":"none","matchedWords":[],"value":"Simon Willison: Design and code review requested for Django signed cookies"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2010/Jan/4/codereview/"}},"_tags":["story","author_mnemonik","story_1031500"],"author":"mnemonik","created_at":"2010-01-04T23:57:10Z","created_at_i":1262649430,"num_comments":0,"objectID":"1031500","points":1,"story_id":1031500,"title":"Simon Willison: Design and code review requested for Django signed cookies","updated_at":"2023-09-06T19:03:47Z","url":"http://simonwillison.net/2010/Jan/4/codereview/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mnemonik"},"title":{"matchLevel":"none","matchedWords":[],"value":"Simon Willison: Django | Multiple Databases"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Dec/22/django/"}},"_tags":["story","author_mnemonik","story_1010454"],"author":"mnemonik","children":[1010816,1010604,1010559],"created_at":"2009-12-22T18:41:48Z","created_at_i":1261507308,"num_comments":9,"objectID":"1010454","points":34,"story_id":1010454,"title":"Simon Willison: Django | Multiple Databases","updated_at":"2023-09-06T19:01:58Z","url":"http://simonwillison.net/2009/Dec/22/django/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Lessons I learned building an MPs' expenses crowdsourcing app for the Guardian"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Dec/20/crowdsourcing/"}},"_tags":["story","author_simonw","story_1006054"],"author":"simonw","children":[1006255,1006146,1006067,1006504,1006094],"created_at":"2009-12-20T12:12:25Z","created_at_i":1261311145,"num_comments":32,"objectID":"1006054","points":57,"story_id":1006054,"story_text":"","title":"Lessons I learned building an MPs' expenses crowdsourcing app for the Guardian","updated_at":"2023-09-06T19:01:34Z","url":"http://simonwillison.net/2009/Dec/20/crowdsourcing/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"niels"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"What's coming in Django 1.2 (presentation notes)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/static/2009/djugl-december.html"}},"_tags":["story","author_niels","story_979450"],"author":"niels","created_at":"2009-12-06T12:06:19Z","created_at_i":1260101179,"num_comments":0,"objectID":"979450","points":2,"story_id":979450,"story_text":"","title":"What's coming in Django 1.2 (presentation notes)","updated_at":"2023-09-06T20:17:41Z","url":"http://simonwillison.net/static/2009/djugl-december.html"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Node.js is genuinely exciting"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Nov/23/node/"}},"_tags":["story","author_simonw","story_957266"],"author":"simonw","children":[957321,957955,957301,957352,957603,958870,957474,957705,957341,957421,957398,957671,957988,958681,957429,959332],"created_at":"2009-11-23T12:52:31Z","created_at_i":1258980751,"num_comments":67,"objectID":"957266","points":197,"story_id":957266,"story_text":"","title":"Node.js is genuinely exciting","updated_at":"2023-09-06T20:15:52Z","url":"http://simonwillison.net/2009/Nov/23/node/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Why I like Redis"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Oct/22/redis/"}},"_tags":["story","author_simonw","story_896445"],"author":"simonw","children":[896783,896474,896569,896620,896484,897965,896483,896725],"created_at":"2009-10-22T10:00:00Z","created_at_i":1256205600,"num_comments":46,"objectID":"896445","points":112,"story_id":896445,"story_text":"","title":"Why I like Redis","updated_at":"2023-09-06T20:10:32Z","url":"http://simonwillison.net/2009/Oct/22/redis/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"toni"},"title":{"matchLevel":"none","matchedWords":[],"value":"This shouldn\u2019t be the image of Hack Day"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Oct/19/hackday/"}},"_tags":["story","author_toni","story_891108"],"author":"toni","children":[891460,891356,891876,891184,891222,891158,891330,891283,891272,891247,891344,891511,891166,891378,891844,891174,892180,891292,891609,891377,891160,891338],"created_at":"2009-10-19T21:43:35Z","created_at_i":1255988615,"num_comments":122,"objectID":"891108","points":78,"story_id":891108,"title":"This shouldn\u2019t be the image of Hack Day","updated_at":"2023-09-06T20:10:08Z","url":"http://simonwillison.net/2009/Oct/19/hackday/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Django ponies: Proposals for Django 1.2"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Sep/28/ponies/"}},"_tags":["story","author_simonw","story_849386"],"author":"simonw","children":[850395,849869],"created_at":"2009-09-28T22:35:04Z","created_at_i":1254177304,"num_comments":2,"objectID":"849386","points":54,"story_id":849386,"story_text":"","title":"Django ponies: Proposals for Django 1.2","updated_at":"2023-09-06T20:06:29Z","url":"http://simonwillison.net/2009/Sep/28/ponies/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"edw519"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Hack Day tools for non-developers"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Jul/28/tools/"}},"_tags":["story","author_edw519","story_728135"],"author":"edw519","created_at":"2009-07-28T16:10:18Z","created_at_i":1248797418,"num_comments":0,"objectID":"728135","points":3,"story_id":728135,"story_text":"","title":"Hack Day tools for non-developers","updated_at":"2023-09-06T19:56:31Z","url":"http://simonwillison.net/2009/Jul/28/tools/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mace"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Using crowdsourcing and Django to dig through the expenses of the UK Parliament"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/talks/europython-crowdsourcing/"}},"_tags":["story","author_mace","story_681562"],"author":"mace","children":[681570],"created_at":"2009-06-30T20:56:51Z","created_at_i":1246395411,"num_comments":1,"objectID":"681562","points":2,"story_id":681562,"story_text":"","title":"Using crowdsourcing and Django to dig through the expenses of the UK Parliament","updated_at":"2023-09-06T19:52:41Z","url":"http://simonwillison.net/2009/talks/europython-crowdsourcing/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mcav"},"title":{"matchLevel":"none","matchedWords":[],"value":"Facebook Usernames and OpenID"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Jun/13/thefacebookdebacle/"}},"_tags":["story","author_mcav","story_656287"],"author":"mcav","created_at":"2009-06-13T17:12:30Z","created_at_i":1244913150,"num_comments":0,"objectID":"656287","points":2,"story_id":656287,"title":"Facebook Usernames and OpenID","updated_at":"2023-09-06T19:50:34Z","url":"http://simonwillison.net/2009/Jun/13/thefacebookdebacle/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Djng - a Django powered microframework"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/May/19/djng/"}},"_tags":["story","author_simonw","story_615891"],"author":"simonw","children":[615932,616558,615943,615973,616094],"created_at":"2009-05-18T23:18:15Z","created_at_i":1242688695,"num_comments":19,"objectID":"615891","points":56,"story_id":615891,"story_text":"","title":"Djng - a Django powered microframework","updated_at":"2023-09-06T19:47:16Z","url":"http://simonwillison.net/2009/May/19/djng/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Some notes on the Guardian Open Platform"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Mar/10/openplatform/"}},"_tags":["story","author_simonw","story_509941"],"author":"simonw","children":[510935,510020,510647,510126],"created_at":"2009-03-10T14:33:39Z","created_at_i":1236695619,"num_comments":8,"objectID":"509941","points":24,"story_id":509941,"story_text":"","title":"Some notes on the Guardian Open Platform","updated_at":"2023-09-06T19:38:56Z","url":"http://simonwillison.net/2009/Mar/10/openplatform/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"arthurk"},"title":{"matchLevel":"none","matchedWords":[],"value":"Pragmatism, purity and JSON content types"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Feb/6/json/"}},"_tags":["story","author_arthurk","story_469607"],"author":"arthurk","created_at":"2009-02-06T10:50:46Z","created_at_i":1233917446,"num_comments":0,"objectID":"469607","points":2,"story_id":469607,"title":"Pragmatism, purity and JSON content types","updated_at":"2023-09-06T19:35:49Z","url":"http://simonwillison.net/2009/Feb/6/json/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"danw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Rate limiting with memcached"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Jan/7/ratelimitcache/"}},"_tags":["story","author_danw","story_424126"],"author":"danw","children":[424479,424823],"created_at":"2009-01-07T23:04:23Z","created_at_i":1231369463,"num_comments":4,"objectID":"424126","points":13,"story_id":424126,"title":"Rate limiting with memcached","updated_at":"2023-09-06T19:32:29Z","url":"http://simonwillison.net/2009/Jan/7/ratelimitcache/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"danw"},"title":{"matchLevel":"none","matchedWords":[],"value":"Antipatterns for sale - Discussion on Twitter API phishing and OAuth"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2009/Jan/2/adactio/"}},"_tags":["story","author_danw","story_421801"],"author":"danw","children":[422154],"created_at":"2009-01-06T10:21:47Z","created_at_i":1231237307,"num_comments":1,"objectID":"421801","points":7,"story_id":421801,"title":"Antipatterns for sale - Discussion on Twitter API phishing and OAuth","updated_at":"2023-09-06T19:32:15Z","url":"http://simonwillison.net/2009/Jan/2/adactio/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"danw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Web Security Horror Stories: The Director's Cut"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2008/talks/head-horror/"}},"_tags":["story","author_danw","story_344408"],"author":"danw","created_at":"2008-10-26T17:18:10Z","created_at_i":1225041490,"num_comments":0,"objectID":"344408","points":10,"story_id":344408,"story_text":"","title":"Web Security Horror Stories: The Director's Cut","updated_at":"2023-09-06T19:26:27Z","url":"http://simonwillison.net/2008/talks/head-horror/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"simonw"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Dmigrations - a new migrations system for Django"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2008/Sep/3/dmigrations/"}},"_tags":["story","author_simonw","story_294172"],"author":"simonw","children":[294387],"created_at":"2008-09-03T20:08:59Z","created_at_i":1220472539,"num_comments":1,"objectID":"294172","points":19,"story_id":294172,"story_text":"","title":"Dmigrations - a new migrations system for Django","updated_at":"2023-09-06T19:22:39Z","url":"http://simonwillison.net/2008/Sep/3/dmigrations/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"natrius"},"title":{"matchLevel":"none","matchedWords":[],"value":"Debugging Django"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2008/May/22/debugging/"}},"_tags":["story","author_natrius","story_196759"],"author":"natrius","children":[196845],"created_at":"2008-05-22T01:16:05Z","created_at_i":1211418965,"num_comments":1,"objectID":"196759","points":32,"story_id":196759,"title":"Debugging Django","updated_at":"2023-09-06T19:15:19Z","url":"http://simonwillison.net/2008/May/22/debugging/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"bdfh42"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Unobtrusive JavaScript with jQuery - slide presentation"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/static/2008/xtech/"}},"_tags":["story","author_bdfh42","story_183303"],"author":"bdfh42","children":[184313,183447,184092,184017],"created_at":"2008-05-07T11:43:40Z","created_at_i":1210160620,"num_comments":8,"objectID":"183303","points":25,"story_id":183303,"story_text":"","title":"Unobtrusive JavaScript with jQuery - slide presentation","updated_at":"2023-09-06T19:14:10Z","url":"http://simonwillison.net/static/2008/xtech/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"iamelgringo"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Yahoo!, Flickr, OpenID and Identity Projection"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2008/Jan/7/projection/"}},"_tags":["story","author_iamelgringo","story_95913"],"author":"iamelgringo","created_at":"2008-01-08T10:29:25Z","created_at_i":1199788165,"num_comments":0,"objectID":"95913","points":3,"story_id":95913,"story_text":"","title":"Yahoo!, Flickr, OpenID and Identity Projection","updated_at":"2023-09-06T19:07:37Z","url":"http://simonwillison.net/2008/Jan/7/projection/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"toffer"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Simon Willison: Comet works, and it's easier than you think (server push, instead of Ajax polling)"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2007/Dec/5/comet/"}},"_tags":["story","author_toffer","story_86323"],"author":"toffer","children":[86654,86496],"created_at":"2007-12-05T16:57:27Z","created_at_i":1196873847,"num_comments":2,"objectID":"86323","points":24,"story_id":86323,"story_text":"","title":"Simon Willison: Comet works, and it's easier than you think (server push, instead of Ajax polling)","updated_at":"2023-09-06T19:07:00Z","url":"http://simonwillison.net/2007/Dec/5/comet/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"nickb"},"title":{"matchLevel":"none","matchedWords":[],"value":"Designing for a security breach"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2007/Sep/30/designing/"}},"_tags":["story","author_nickb","story_61926"],"author":"nickb","created_at":"2007-10-02T03:44:38Z","created_at_i":1191296678,"num_comments":0,"objectID":"61926","points":1,"story_id":61926,"title":"Designing for a security breach","updated_at":"2023-09-06T19:05:16Z","url":"http://simonwillison.net/2007/Sep/30/designing/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"nickb"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"jQuery for JavaScript programmers"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2007/Aug/15/jquery/"}},"_tags":["story","author_nickb","story_42569"],"author":"nickb","created_at":"2007-08-15T05:25:38Z","created_at_i":1187155538,"num_comments":0,"objectID":"42569","points":5,"story_id":42569,"story_text":"","title":"jQuery for JavaScript programmers","updated_at":"2023-09-06T19:03:53Z","url":"http://simonwillison.net/2007/Aug/15/jquery/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"joshwa"},"title":{"matchLevel":"none","matchedWords":[],"value":"An OpenID is not an account!"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2007/Jan/10/account/"}},"_tags":["story","author_joshwa","story_1245"],"author":"joshwa","children":[1251,1312],"created_at":"2007-02-26T18:27:13Z","created_at_i":1172514433,"num_comments":6,"objectID":"1245","points":9,"story_id":1245,"title":"An OpenID is not an account!","updated_at":"2023-09-06T19:00:47Z","url":"http://simonwillison.net/2007/Jan/10/account/"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"mattculbreth"},"title":{"matchLevel":"none","matchedWords":[],"value":"Six Things to do with OpenID"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["simonwillison",".","net"],"value":"http://simonwillison.net/2007/Feb/25/six/"}},"_tags":["story","author_mattculbreth","story_1109"],"author":"mattculbreth","created_at":"2007-02-26T02:05:31Z","created_at_i":1172455531,"num_comments":0,"objectID":"1109","points":7,"story_id":1109,"title":"Six Things to do with OpenID","updated_at":"2023-09-06T19:00:47Z","url":"http://simonwillison.net/2007/Feb/25/six/"}],"hitsPerPage":1000,"nbHits":432,"nbPages":1,"page":0,"params":"query=simonwillison.net&restrictSearchableAttributes=url&hitsPerPage=1000&advancedSyntax=true&analyticsTags=backend","processingTimeMS":109,"processingTimingsMS":{"_request":{"roundTrip":14},"afterFetch":{"format":{"highlighting":3,"total":5},"merge":{"total":84},"total":84},"fetch":{"query":11,"scanning":13,"total":24},"total":109},"query":"simonwillison.net","serverTimeMS":115}