41554 blogs · [ { "id": "01a0e4f1-90ca-73c2-b37e-04bf9206f0de", "title": "Prerendering Javascript Powered Webpages Using Cloudflare Workers", "url": "https://blog.ouseful.info/2026/09/25/prerendering-javascript-powered-webpages-using-cloudflare-workers/", "published_at": "2026-09-25T17:16:07+00:00" }, { "id": "01a08751-d87a-73ab-a827-853dcc404869", "title": "Moving to Cloudflare DNS", "url": "https://blog.ouseful.info/2026/09/09/moving-to-cloudflare-dns/", "published_at": "2026-09-09T15:42:38+00:00" }, { "id": "01a08751-d87a-73ab-a827-853dcc5f0927", "title": "False GenAI Claims", "url": "https://blog.ouseful.info/2026/02/08/false-genai-claims/", "published_at": "2026-02-08T21:53:34+00:00" }, { "id": "01a08751-d87a-73ab-a827-853dccd22b75", "title": "Elsewhere…", "url": "https://blog.ouseful.info/2026/01/05/elsewhere/", "published_at": "2026-01-05T10:43:05+00:00" }, { "id": "01a08751-d87a-73ab-a827-853dcd03fb50", "title": "If you must…", "url": "https://blog.ouseful.info/2025/12/01/if-you-must/", "published_at": "2025-12-01T15:31:13+00:00" }, { "id": "01a08751-d87a-73ab-a827-853dcdcde246", "title": "Onto Amazon with some Island Tales storynotes", "url": "https://blog.ouseful.info/2025/10/28/onto-amazon-with-some-island-tales-storynotes/", "published_at": "2025-10-28T17:41:46+00:00" }, { "id": "01a08751-d87a-73ab-a827-853dce2483ce", "title": "Running containers on Mac without Docker", "url": "https://blog.ouseful.info/2025/10/06/running-containers-on-mac-without-docker/", "published_at": "2025-10-06T10:23:21+00:00" }, { "id": "01a08751-d87a-73ab-a827-853dce3c2a42", "title": "AI shortcuts to nowhere…", "url": "https://blog.ouseful.info/2025/10/01/ai-shortcuts-to-nowhere/", "published_at": "2025-10-01T15:20:54+00:00" }, { "id": "01a08751-d87a-73ab-a827-853dce6969a4", "title": "Moving to quarto and LaTeX…", "url": "https://blog.ouseful.info/2025/09/23/moving-to-quarto-and-latex/", "published_at": "2025-09-23T11:21:28+00:00" }, { "id": "01a08751-d87b-7075-ad87-f69e13116df2", "title": "A new website, built with Hugo", "url": "https://blog.ouseful.info/2025/08/27/a-new-website-built-with-hugo/", "published_at": "2025-08-27T11:15:48+00:00" }, { "id": "01a08751-d87b-7075-ad87-f69e1369a84d", "title": "Makes me laugh every time…", "url": "https://blog.ouseful.info/2025/07/30/makes-me-lauch-every-time/", "published_at": "2025-07-30T14:57:55+00:00" }, { "id": "01a0e4f6-2510-72de-a5a8-f96f1da8c1c8", "title": "The Coming of the Confabulai…", "url": "https://blog.ouseful.info/2025/07/29/confabulai/", "published_at": "2025-07-29T13:41:10+00:00" }, { "id": "01a0e4f6-2510-72de-a5a8-f96f1dbb9e90", "title": "From Search to genAI…", "url": "https://blog.ouseful.info/2025/07/29/from-search-to-ai/", "published_at": "2025-07-29T13:36:57+00:00" }, { "id": "01a0e4f6-2510-72de-a5a8-f96f1e995079", "title": "Movin’ on…", "url": "https://blog.ouseful.info/2025/07/22/movin-on/", "published_at": "2025-07-22T23:44:12+00:00" }, { "id": "01a0e4f6-2510-72de-a5a8-f96f1f1c3f4b", "title": "The Only Work AI Does is to Produce Hot Air…", "url": "https://blog.ouseful.info/2025/07/21/the-only-work-ai-does-is-to-produce-hot-air/", "published_at": "2025-07-21T10:38:22+00:00" }, { "id": "01a0e4f6-2510-72de-a5a8-f96f1ff25fb5", "title": "Do the genAI companies have patent portfolios? And other protective rights? And do they enforce them?", "url": "https://blog.ouseful.info/2025/07/16/do-the-genai-companies-have-patent-portfolios-and-other-protective-rights-and-do-they-enforce-them/", "published_at": "2025-07-16T11:15:22+00:00" }, { "id": "01a0e4f6-2510-72de-a5a8-f96f20081999", "title": "AI Bundling, or Jack Shit", "url": "https://blog.ouseful.info/2025/07/11/ai-bundling-or-jack-shit/", "published_at": "2025-07-11T10:43:33+00:00" }, { "id": "01a0e4f6-2510-72de-a5a8-f96f20f7621c", "title": "Learning in Public", "url": "https://blog.ouseful.info/2025/07/11/learning-in-public/", "published_at": "2025-07-11T10:16:02+00:00" }, { "id": "01a0e4f6-2510-72de-a5a8-f96f21bc60db", "title": "ZombAI", "url": "https://blog.ouseful.info/2025/07/07/zombai/", "published_at": "2025-07-07T14:47:08+00:00" }, { "id": "01a0e4f6-2510-72de-a5a8-f96f226c1962", "title": "Remembering the null reaction to universal web search in HE, and noting the contrast in the response to GenAI", "url": "https://blog.ouseful.info/2025/07/07/remembering-the-null-reaction-to-universal-web-search-in-he-and-noting-the-contrast-in-the-response-to-genai/", "published_at": "2025-07-07T12:20:35+00:00" }, { "id": "01a0e50b-094a-7325-b0c5-f67fd62e75ba", "title": "Built in wrongness…", "url": "https://blog.ouseful.info/2025/06/30/built-in-wrongness/", "published_at": "2025-06-30T12:55:02+00:00" }, { "id": "01a0e50b-094a-7325-b0c5-f67fd72d5b96", "title": "Updating Teaching Materials in Sympathy with Assessment Requirements, (py)Test Based Learning, et al.", "url": "https://blog.ouseful.info/2025/06/02/updating-teaching-materials-in-sympathy-with-assessment-requirements-pytest-based-learning-et-al/", "published_at": "2025-06-02T11:29:54+00:00" }, { "id": "01a0e50b-094a-7325-b0c5-f67fd7b6bc12", "title": "Festival Season", "url": "https://blog.ouseful.info/2025/05/18/festival-season/", "published_at": "2025-05-18T18:03:02+00:00" }, { "id": "01a0e50b-094a-7325-b0c5-f67fd877247d", "title": "Generative Linguistic Programming", "url": "https://blog.ouseful.info/2025/05/14/generative-linguistic-programming/", "published_at": "2025-05-14T11:59:25+00:00" }, { "id": "01a0e50b-094b-70e5-8390-2a2cfe34c916", "title": "Browsers are just gonna keep on getting bigger until they eat your machine…", "url": "https://blog.ouseful.info/2025/05/08/browsers-are-just-gonna-keep-on-getting-bigger-until-they-eat-your-machine/", "published_at": "2025-05-08T10:13:45+00:00" }, { "id": "01a0e50b-094b-70e5-8390-2a2cfe75d03b", "title": "Pondering AnyHeadlessWasmWidget —  Headless Application Packaging for Jupyter, Marimo, VS Code Notebooks, Shiny Live etc.", "url": "https://blog.ouseful.info/2025/03/13/pondering-anyheadlesswasmwidget-headless-application-packaging-for-jupyter-marimon-vs-code-notebooks-shiny-live-etc/", "published_at": "2025-03-13T10:35:26+00:00" }, { "id": "01a0e50b-094b-70e5-8390-2a2cfecdeae4", "title": "If Your Users Are Doing This a Lot, Build an API", "url": "https://blog.ouseful.info/2025/03/10/if-your-users-are-doing-this-a-lot-build-an-api/", "published_at": "2025-03-10T18:06:36+00:00" }, { "id": "01a0e50b-094b-70e5-8390-2a2cffb92902", "title": "Getting an Answer is Not the Same as Coming to an Understanding", "url": "https://blog.ouseful.info/2025/03/05/coming-to-an-understanding-is-not-the-same-as-getting-an-answer/", "published_at": "2025-03-05T13:31:55+00:00" }, { "id": "01a0e50b-094b-70e5-8390-2a2d00277ee3", "title": "AI Chat Agents… sigh…", "url": "https://blog.ouseful.info/2025/02/27/ai-chat-agents-sigh/", "published_at": "2025-02-27T11:00:09+00:00" }, { "id": "01a0e50b-094b-70e5-8390-2a2d002a160c", "title": "Getting Lost In LLM-Supported Coding", "url": "https://blog.ouseful.info/2025/02/26/getting-lost-in-llm-supported-coding/", "published_at": "2025-02-26T13:58:39+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9eeead0f6", "title": "Visualising SQL db schema diagrams using eralchemy and graphviz wasm", "url": "https://blog.ouseful.info/2025/02/24/visualising-sql-db-schema-diagrams-using-eralchemy-and-graphviz-wasm/", "published_at": "2025-02-24T17:01:29+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9efd5430d", "title": "Living Documents, Personal Software", "url": "https://blog.ouseful.info/2025/02/05/living-documents-personal-software/", "published_at": "2025-02-05T12:21:00+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9f0884c6a", "title": "Go Team Lords…", "url": "https://blog.ouseful.info/2025/01/30/go-team-lords/", "published_at": "2025-01-30T13:59:01+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9f14274e2", "title": "Visualising Reactive Dependencies in ShinyLive Python Application", "url": "https://blog.ouseful.info/2025/01/29/visualising-reactive-dependencies-in-shinylive-python-application/", "published_at": "2025-01-29T09:28:22+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9f1830e71", "title": "Whose Learning Journey Is It Anyway?", "url": "https://blog.ouseful.info/2025/01/28/whose-learning-journey-is-it-anyway/", "published_at": "2025-01-28T13:58:51+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9f2054315", "title": "Tinkering with In-Browser ShinyLive Python (Pyodide) Dashboards", "url": "https://blog.ouseful.info/2025/01/22/tinkering-with-in-browser-shinylive-python-pyodide-dashboards/", "published_at": "2025-01-22T15:05:16+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9f2b0b814", "title": "Migrating to Quarto", "url": "https://blog.ouseful.info/2025/01/20/migrating-to-quarto/", "published_at": "2025-01-20T18:01:57+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9f2cb94c3", "title": "Linking to, and highlighting sections in, web pages", "url": "https://blog.ouseful.info/2025/01/20/linking-to-and-highlighting-sections-in-web-pages/", "published_at": "2025-01-20T10:52:02+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9f399b3ea", "title": "Splitting the Display of Wide pandas Dataframes Over Several Narrower dataframes", "url": "https://blog.ouseful.info/2025/01/16/splitting-wide-pandas-dataframes-over-several-narrower-dataframes/", "published_at": "2025-01-16T11:29:21+00:00" }, { "id": "01a0e51d-072c-709b-90d0-1bb9f424dd61", "title": "Using fastf1 F1 data analysis package in JupyterLite", "url": "https://blog.ouseful.info/2025/01/13/using-fastf1-f1-data-analysis-package-in-jupyterlite/", "published_at": "2025-01-13T15:47:46+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d414f60d", "title": "GenAI, Derivative Works and the Creative Industries", "url": "https://blog.ouseful.info/2024/12/20/genai-derivative-works-and-the-creative-industries/", "published_at": "2024-12-20T00:28:07+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d4c871aa", "title": "GenAI: Does it help if we give students the answers to assessment questions…", "url": "https://blog.ouseful.info/2024/12/18/genai-does-it-help-if-we-give-students-the-answers-to-assessment-questions/", "published_at": "2024-12-18T12:14:00+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d5bfcb84", "title": "SmolLM2 Jupyter anywidget with optional structured output, almost…", "url": "https://blog.ouseful.info/2024/12/05/smollm2-jupyter-anywidget-with-optional-structured-output-almost/", "published_at": "2024-12-05T12:27:41+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d6b7f862", "title": "ONS Robot Journalism Editor", "url": "https://blog.ouseful.info/2024/11/28/ons-robot-journalism-editor/", "published_at": "2024-11-28T10:38:39+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d7b76133", "title": "Parliamentary Register of Interests", "url": "https://blog.ouseful.info/2024/11/27/parliamentary-register-of-interest/", "published_at": "2024-11-27T12:10:20+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d7bff5a3", "title": "Fragments: Vulnerable adults, AIs with Personality Disorders, etc", "url": "https://blog.ouseful.info/2024/11/27/fragments-vulnerable-adults-ais-with-personality-disorders-etc/", "published_at": "2024-11-27T11:52:22+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d880a57c", "title": "Bundling a JupyterLite App for the Desktop Using Flask and Pyinstaller", "url": "https://blog.ouseful.info/2024/11/25/bundling-a-jupyterlite-app-for-the-desktop-using-flask-and-pyinstaller/", "published_at": "2024-11-25T18:17:35+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d8f4d6f3", "title": "Gen AI as a producer of “goods … which are of little worth”…", "url": "https://blog.ouseful.info/2024/11/25/gen-ai-as-a-producer-of-goods-which-are-of-little-worth/", "published_at": "2024-11-25T13:58:37+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d9027865", "title": "Using my Jupyter anywidget wasm wrappers in marimo", "url": "https://blog.ouseful.info/2024/11/20/using-my-jupyter-anywidget-wasm-wrappers-in-marimo/", "published_at": "2024-11-20T12:03:30+00:00" }, { "id": "01a0e52a-73f5-7373-8da1-dfe8d9d389aa", "title": "MusicXML Renderer for JupyterLab Extension using OpenSheetMusicDisplay (OSMD)", "url": "https://blog.ouseful.info/2024/11/20/musicxml-renderer-for-jupterlab-extension/", "published_at": "2024-11-20T11:06:45+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c3200b3e95cb", "title": "Notes on Supporting Interactive Computational Needs of Students in Secure Environments", "url": "https://blog.ouseful.info/2024/11/08/notes-on-supporting-interactive-computational-needs-of-students-in-secure-environments/", "published_at": "2024-11-08T14:16:21+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c3200bfa5850", "title": "Database import / export and blocking waits in pglite Jupyter anywidget", "url": "https://blog.ouseful.info/2024/09/13/database-import-export-and-blocking-waits-in-pglite-jupyter-anywidget/", "published_at": "2024-09-13T11:19:06+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c3200cc1c595", "title": "Blocking waits on the Python side for updates from Jupyter anywidget Javascript UI Code", "url": "https://blog.ouseful.info/2024/09/05/blocking-waits-for-updates-from-jupyter-anywidget/", "published_at": "2024-09-05T16:17:18+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c3200db25ee0", "title": "Shiny New Toy", "url": "https://blog.ouseful.info/2024/09/05/shiny-new-toy/", "published_at": "2024-09-05T13:19:48+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c3200dfa357b", "title": "Idly wondering: webR reticulate using pyodide in the browser?", "url": "https://blog.ouseful.info/2024/09/03/idly-wondering-webr-reticulate-using-pyodide-in-the-browser/", "published_at": "2024-09-03T08:39:40+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c3200e12a7d5", "title": "Fragment: OU materials added to UKGov / DfE Tech Bro Datastore", "url": "https://blog.ouseful.info/2024/09/02/fragment-ou-materials-added-to-ukgov-tech-bro-datastore/", "published_at": "2024-09-02T11:42:42+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c3200e4f3f58", "title": "Accessing window.ai in-browser Gemini LLM via Jupyter anywidget in Chrome Canary", "url": "https://blog.ouseful.info/2024/09/01/accessing-window-ai-in-browser-gemini-llm-via-jupyter-anywidget-in-chrome-canary/", "published_at": "2024-09-01T14:23:04+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c3200ec4362d", "title": "Getting started with window.ai in Chrome Canary — in browser Gemini LLM", "url": "https://blog.ouseful.info/2024/09/01/getting-started-with-window-ai-in-chrome-canary-in-browser-gemini-llm/", "published_at": "2024-09-01T10:55:56+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c3200f26e135", "title": "Fragment — Graphiviz dot diagram scripts from images using Claude.ai", "url": "https://blog.ouseful.info/2024/08/22/fragment-graphiviz-dot-diagram-scripts-from-images-using-claude-ai/", "published_at": "2024-08-22T08:57:59+00:00" }, { "id": "01a0e540-85ef-7081-87b5-c320101ec3c5", "title": "Fragment — JupyterLite in VLE", "url": "https://blog.ouseful.info/2024/08/14/fragment-jupyterlite-in-vle/", "published_at": "2024-08-14T13:31:09+00:00" }, { "id": "01a0e55d-58ad-7355-82c6-27b52cc9053e", "title": "Fragment — Jupyter Graphviz Wasm anywidget magic", "url": "https://blog.ouseful.info/2024/08/14/fragment-jupyter-graphviz-wasm-anywidget-magic/", "published_at": "2024-08-14T12:28:29+00:00" }, { "id": "01a0e55d-58ae-72f9-ada1-1b3afcfe2049", "title": "Jupyter tesseract/pdfjs anywidget — Wasm browser-assist sideloaded OCR for Python environments", "url": "https://blog.ouseful.info/2024/08/14/jupyter-tesseract-pdfjs-anywidget-sideloaded-ocr-for-python-environments/", "published_at": "2024-08-14T09:29:39+00:00" }, { "id": "01a0e55d-58ae-72f9-ada1-1b3afd41ddde", "title": "Making a start on building wasm-R packages for a possible wasm-R / JupyterLite distribution", "url": "https://blog.ouseful.info/2024/08/13/making-a-start-on-building-wasm-r-packages-for-a-possible-wasm-r-jupyterlite-distribution/", "published_at": "2024-08-13T22:29:30+00:00" }, { "id": "01a0e55d-58ae-72f9-ada1-1b3afe20f394", "title": "Quick Notes on DuckDB in JupyterLite", "url": "https://blog.ouseful.info/2024/08/13/quick-notes-on-duckdb-in-jupyterlite/", "published_at": "2024-08-13T09:57:13+00:00" }, { "id": "01a0e55d-58ae-72f9-ada1-1b3afef781b4", "title": "OCR Text Extraction in Claude – extracts text from memory rather than document…", "url": "https://blog.ouseful.info/2024/08/11/test-extraction-in-claude-extracts-text-from-memory-rather-than-document/", "published_at": "2024-08-11T11:44:27+00:00" }, { "id": "01a0e55d-58ae-72f9-ada1-1b3affc27bba", "title": "pglite (WASM Postgres) anywidget in Jupyter Notebooks", "url": "https://blog.ouseful.info/2024/08/08/pglite-wasm-postgres-anywidget-in-jupyter-notebooks/", "published_at": "2024-08-08T14:15:48+00:00" }, { "id": "01a0e55d-58ae-72f9-ada1-1b3b002fd388", "title": "Trying out anywidget – ipywidget helper tool for wrapping Javascript & Typescript applications", "url": "https://blog.ouseful.info/2024/07/30/trying-out-anywidget-ipywidget-helper-tool-for-wrapping-javascript-typescript-applications/", "published_at": "2024-07-30T14:53:24+00:00" }, { "id": "01a0e55d-58ae-72f9-ada1-1b3b012029fd", "title": "More matplotlib etc alt text notes… or not, as the case may be…", "url": "https://blog.ouseful.info/2024/07/16/more-matplotlib-etc-alt-text-notes-or-not-as-the-case-may-be/", "published_at": "2024-07-16T15:37:33+00:00" }, { "id": "01a0e55d-58ae-72f9-ada1-1b3b0218bd7c", "title": "Baking Alt Text Data into seaborn Charts", "url": "https://blog.ouseful.info/2024/07/16/baking-alt-text-data-into-seaborn-charts/", "published_at": "2024-07-16T12:28:28+00:00" }, { "id": "01a0e55d-58ae-72f9-ada1-1b3b021daf58", "title": "Seaborn Chart Types Metadata", "url": "https://blog.ouseful.info/2024/07/16/seaborn-chart-types-metadata/", "published_at": "2024-07-16T11:11:52+00:00" } ] posts Claim your blog
Back to blog.ouseful.info
Blog · corpus.blog/blogs/blog.ouseful.info/posts

blog.ouseful.info

blog.ouseful.info

2026

2025

2024