<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Dan Clayton&apos;s Blog</title><description>A simple software blog.</description><link>https://blog.danielclayton.co.uk/</link><item><title>Docker build caching in CI (for multi-stage builds)</title><link>https://blog.danielclayton.co.uk/posts/gitlab-ci-docker-build-caching/</link><guid isPermaLink="true">https://blog.danielclayton.co.uk/posts/gitlab-ci-docker-build-caching/</guid><description>How and why to set up registry build caching in CI, with a GitLab example</description><pubDate>Tue, 01 Jul 2025 17:00:00 GMT</pubDate></item><item><title>How Does Ollama&apos;s Structured Outputs Work?</title><link>https://blog.danielclayton.co.uk/posts/ollama-structured-outputs/</link><guid isPermaLink="true">https://blog.danielclayton.co.uk/posts/ollama-structured-outputs/</guid><description>Digging into what Ollama is doing under the hood to produce structured outputs</description><pubDate>Mon, 09 Dec 2024 17:15:00 GMT</pubDate></item><item><title>Relevant XKCD? - Testing Multimodal Retrieval</title><link>https://blog.danielclayton.co.uk/posts/relevant-xkcd-multimodal-retrieval/</link><guid isPermaLink="true">https://blog.danielclayton.co.uk/posts/relevant-xkcd-multimodal-retrieval/</guid><description>Embedding XKCDs with nomic-embed-vision-v1.5 (and retrieving them with DuckDB)</description><pubDate>Fri, 06 Dec 2024 17:30:00 GMT</pubDate></item><item><title>Preventing Overlapping Data in PostgreSQL - What Goes Into an Exclusion Constraint</title><link>https://blog.danielclayton.co.uk/posts/overlapping-data-postgres-exclusion-constraints/</link><guid isPermaLink="true">https://blog.danielclayton.co.uk/posts/overlapping-data-postgres-exclusion-constraints/</guid><description>How can you prevent overlapping date ranges? Exclusion constraints do it at the database layer</description><pubDate>Sun, 20 Oct 2024 17:30:00 GMT</pubDate></item><item><title>Quick CSV to SQLite with DuckDB</title><link>https://blog.danielclayton.co.uk/posts/csv-to-sqlite-with-duckdb/</link><guid isPermaLink="true">https://blog.danielclayton.co.uk/posts/csv-to-sqlite-with-duckdb/</guid><description>Quickly creating SQLite databases with DuckDB, without writing schemas</description><pubDate>Mon, 30 Sep 2024 17:45:00 GMT</pubDate></item><item><title>Psycopg Database Connections with FastAPI</title><link>https://blog.danielclayton.co.uk/posts/database-connections-with-fastapi/</link><guid isPermaLink="true">https://blog.danielclayton.co.uk/posts/database-connections-with-fastapi/</guid><description>Sharing database connections between requests with FastAPI</description><pubDate>Sun, 28 Jul 2024 17:30:00 GMT</pubDate></item><item><title>Refactoring list logic using Python sets</title><link>https://blog.danielclayton.co.uk/posts/refactoring-list-logic-with-python-sets/</link><guid isPermaLink="true">https://blog.danielclayton.co.uk/posts/refactoring-list-logic-with-python-sets/</guid><description>Replacing loops and ifs with Python sets for a speedup and better readability.</description><pubDate>Fri, 24 Nov 2023 17:00:00 GMT</pubDate></item><item><title>Starting a new Python project - an opinionated starter guide</title><link>https://blog.danielclayton.co.uk/posts/starting-a-new-python-project/</link><guid isPermaLink="true">https://blog.danielclayton.co.uk/posts/starting-a-new-python-project/</guid><description>An opinionated mini-guide to setup a new Python project from scratch with *most* of the tooling you will need.</description><pubDate>Thu, 02 Nov 2023 17:30:00 GMT</pubDate></item></channel></rss>