41554 blogs · [ { "id": "01a08790-2586-72bd-b7b1-5e3f4666515b", "title": "Agent Patterns: Memory, Tools, Scheduling", "url": "https://www.jonatkinson.co.uk/blog/agent-patterns/", "published_at": "2026-08-26T12:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f46669397", "title": "The anti-AI position has an information problem", "url": "https://www.jonatkinson.co.uk/blog/anti-ai-information-problem/", "published_at": "2026-04-29T12:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f46dc7d00", "title": "The Hypocrisy of Agentic Coding Critics", "url": "https://www.jonatkinson.co.uk/blog/hypocrisy-of-llm-coding-critics/", "published_at": "2026-03-26T12:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f46ec3294", "title": "Nobody buys software from Intel", "url": "https://www.jonatkinson.co.uk/blog/nobody-buys-software-from-intel/", "published_at": "2026-02-05T12:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f471a858b", "title": "Developing Good Engineering Taste", "url": "https://www.jonatkinson.co.uk/blog/good-taste/", "published_at": "2026-01-14T13:45:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4803503f", "title": "Building Momentum with LLM Coding", "url": "https://www.jonatkinson.co.uk/blog/llm-coding-flywheel/", "published_at": "2025-12-11T12:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4876a869", "title": "GitHub's spec-kit and the cloud agent endgame", "url": "https://www.jonatkinson.co.uk/blog/github-spec-kit-ambitions/", "published_at": "2025-10-23T14:30:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4882bbee", "title": "How I use Claude Code", "url": "https://www.jonatkinson.co.uk/blog/how-i-use-claude-code/", "published_at": "2025-06-25T09:06:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f48f4f735", "title": "notion-to-json", "url": "https://www.jonatkinson.co.uk/blog/notion-to-json/", "published_at": "2025-06-18T19:08:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f49f09c6e", "title": "mastodon-to-bluesky", "url": "https://www.jonatkinson.co.uk/blog/mastodon-to-bluesky/", "published_at": "2025-06-14T14:34:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4a086b31", "title": "Good practice is good for LLMs too", "url": "https://www.jonatkinson.co.uk/blog/good-practice-is-good-for-llms-too/", "published_at": "2025-06-08T20:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4aec66ff", "title": "Codex, Jules, and Claude Code comparison", "url": "https://www.jonatkinson.co.uk/blog/codex-jules-claude-comparison/", "published_at": "2025-05-23T09:28:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4bb30bd3", "title": "Four Bubbles I've Lived Through, With One Exception", "url": "https://www.jonatkinson.co.uk/blog/four-bubbles/", "published_at": "2025-04-29T15:30:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4c376695", "title": "Trust but Verify: Sensible Ways to Use LLMs in Production", "url": "https://www.jonatkinson.co.uk/blog/trust-but-verify/", "published_at": "2025-04-26T11:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4c620b6e", "title": "The MCP Servers I Actually Use", "url": "https://www.jonatkinson.co.uk/blog/mcp-servers-im-using/", "published_at": "2025-04-22T08:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4d3475d7", "title": "The future of digital agencies", "url": "https://www.jonatkinson.co.uk/blog/the-future-of-agencies/", "published_at": "2025-04-16T12:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4dce418f", "title": "Preparing Django documentation for LLMs", "url": "https://www.jonatkinson.co.uk/blog/preparing-django-documentation-for-llm/", "published_at": "2025-02-21T10:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4eb3863e", "title": "Setting up Matrix Synapse on Fedora", "url": "https://www.jonatkinson.co.uk/blog/matrix-synapse-setup-on-fedora/", "published_at": "2025-02-18T18:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4ef268f6", "title": "A Cline prompt for codebase analysis and feature extraction", "url": "https://www.jonatkinson.co.uk/blog/cline-prompt-code-analysis/", "published_at": "2024-11-20T08:28:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4f205eec", "title": "My Claude Artifact Prompt", "url": "https://www.jonatkinson.co.uk/blog/my-claude-artifact-prompt/", "published_at": "2024-11-12T18:10:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4f86a968", "title": "Fingerprint Authentication on a Lenovo Z13 and Fedora 40", "url": "https://www.jonatkinson.co.uk/blog/fingerprint-authentication-lenovo-z1-fedora-40/", "published_at": "2024-10-27T09:01:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f4f92c8ff", "title": "New in Python 3.13: SQLite support in dbm", "url": "https://www.jonatkinson.co.uk/blog/python-313-dbm-sqlite/", "published_at": "2024-10-07T16:30:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f507590d4", "title": "Django Carbon Measurement Notes", "url": "https://www.jonatkinson.co.uk/blog/django-carbon-measurement-notes/", "published_at": "2024-10-07T10:15:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f511565d9", "title": "Using ruff for everything in VSCode", "url": "https://www.jonatkinson.co.uk/blog/vscode-ruff-everything/", "published_at": "2024-10-03T10:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f51806915", "title": "Automatic, persistent autoreload in iPython", "url": "https://www.jonatkinson.co.uk/blog/automatic-code-reload-ipython/", "published_at": "2024-10-02T10:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5194ea48", "title": "A minimal Django application", "url": "https://www.jonatkinson.co.uk/blog/minimal-django-application/", "published_at": "2024-09-18T10:28:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f522d3ed9", "title": "Logging git commits with a git hook", "url": "https://www.jonatkinson.co.uk/blog/log-git-commits-hook/", "published_at": "2024-09-09T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f52ccd333", "title": "Conventional Commits Git Hook", "url": "https://www.jonatkinson.co.uk/blog/conventional-commits-hook/", "published_at": "2023-05-03T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f53136883", "title": "How I Do 1-2-1 Meetings", "url": "https://www.jonatkinson.co.uk/blog/how-i-do-121-meetings/", "published_at": "2023-02-28T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f53e027f8", "title": "Link Roundup #6", "url": "https://www.jonatkinson.co.uk/blog/link-roundup-6/", "published_at": "2023-02-20T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f54cd268d", "title": "Link Roundup #5", "url": "https://www.jonatkinson.co.uk/blog/link-roundup-5/", "published_at": "2023-02-12T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f55b894fd", "title": "Link Roundup #4", "url": "https://www.jonatkinson.co.uk/blog/link-roundup-4/", "published_at": "2023-02-01T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f569d6a4d", "title": "Hiring Correctly", "url": "https://www.jonatkinson.co.uk/blog/hiring-correctly/", "published_at": "2023-01-27T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f576b618f", "title": "Link Roundup #3", "url": "https://www.jonatkinson.co.uk/blog/link-roundup-3/", "published_at": "2023-01-20T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f57fc1279", "title": "Link Roundup #2", "url": "https://www.jonatkinson.co.uk/blog/link-roundup-2/", "published_at": "2023-01-13T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f58682964", "title": "Link Roundup #1", "url": "https://www.jonatkinson.co.uk/blog/link-roundup-1/", "published_at": "2023-01-05T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f595b2bf4", "title": "A game a week #3", "url": "https://www.jonatkinson.co.uk/blog/game-a-week-3/", "published_at": "2021-03-28T00:00:01+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f59c26c2e", "title": "A game a week #2", "url": "https://www.jonatkinson.co.uk/blog/game-a-week-2/", "published_at": "2021-03-19T00:00:01+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5ab2f9f7", "title": "A game a week #1", "url": "https://www.jonatkinson.co.uk/blog/game-a-week-1/", "published_at": "2021-03-14T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5af54a48", "title": "Listing all Django URLs in a project", "url": "https://www.jonatkinson.co.uk/blog/list-all-django-urls/", "published_at": "2021-02-16T07:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5bbf44f9", "title": "Parallel Rsync", "url": "https://www.jonatkinson.co.uk/blog/parallel-rsync/", "published_at": "2021-01-17T11:15:39+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5c5f5551", "title": "Dokku Cheatsheet", "url": "https://www.jonatkinson.co.uk/blog/dokku-cheatsheet/", "published_at": "2020-07-12T16:09:06+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5d44c7b6", "title": "Github Marketplace Endgame", "url": "https://www.jonatkinson.co.uk/blog/github-marketplace/", "published_at": "2020-07-02T17:46:06+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5df2ec81", "title": "Digital Workshop", "url": "https://www.jonatkinson.co.uk/blog/digital-workshop/", "published_at": "2020-06-24T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5e236d29", "title": "Serverless Thoughts #2", "url": "https://www.jonatkinson.co.uk/blog/serverless-thoughts-2/", "published_at": "2020-06-23T09:30:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5f2348b5", "title": "Serverless Thoughts #1", "url": "https://www.jonatkinson.co.uk/blog/serverless-thoughts-1/", "published_at": "2020-06-22T09:30:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5f50469f", "title": "Creating a new email user with `postfix` on Void", "url": "https://www.jonatkinson.co.uk/blog/new-postfix-user/", "published_at": "2020-01-28T12:20:23+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5f5de08b", "title": "User services with `runit` on Void Linux", "url": "https://www.jonatkinson.co.uk/blog/user-service-runit-void/", "published_at": "2019-11-23T16:51:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f5ffe9ca9", "title": "Thinkpad X230/X220 keyboard swap", "url": "https://www.jonatkinson.co.uk/blog/thinkpad-x230-x220-keyboard/", "published_at": "2019-11-15T11:15:39+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f600c4acf", "title": "Bringing up KVM on Arch", "url": "https://www.jonatkinson.co.uk/blog/kvm-on-arch/", "published_at": "2019-11-08T19:19:42+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f60d2cd3e", "title": "TabNine on FreeBSD", "url": "https://www.jonatkinson.co.uk/blog/tabnine-on-freebsd/", "published_at": "2019-11-05T12:24:36+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f6197da4f", "title": "The simplest pulseaudio installation on Arch", "url": "https://www.jonatkinson.co.uk/blog/simple-pulseaudio/", "published_at": "2019-08-20T10:44:11+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f62500794", "title": "Distributed compilation with distcc on Arch", "url": "https://www.jonatkinson.co.uk/blog/distcc-arch/", "published_at": "2019-06-13T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f627abe2e", "title": "Syncing Gmail with mbsync", "url": "https://www.jonatkinson.co.uk/blog/gmail-mbsync/", "published_at": "2019-05-14T12:18:34+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f62edb679", "title": "Thinkpad x230 fingerprint reader on Arch Linux", "url": "https://www.jonatkinson.co.uk/blog/thinkpad-x230-fingerprint-reader/", "published_at": "2019-05-11T11:15:39+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f63873caa", "title": "Installing Arch On a Vultr VPS", "url": "https://www.jonatkinson.co.uk/blog/installing-arch-on-a-vultr-vps/", "published_at": "2019-05-06T00:00:00+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f63f01312", "title": "Automatically --set-upstream when pushing a new branch", "url": "https://www.jonatkinson.co.uk/blog/automatically-set-upstream-when-pushing/", "published_at": "2019-04-08T17:46:06+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f64ab0b8f", "title": "Remembering Rob Edwards", "url": "https://www.jonatkinson.co.uk/blog/remembering-rob-edwards/", "published_at": "2019-02-07T15:56:03+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f64eb0469", "title": "QBasic Development", "url": "https://www.jonatkinson.co.uk/blog/qbasic/", "published_at": "2019-01-27T20:08:53+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f65013fbf", "title": "Setting up wee-slack", "url": "https://www.jonatkinson.co.uk/blog/setting-up-wee-slack-weechat/", "published_at": "2018-12-21T12:24:36+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f6593e2e5", "title": "Remote Working Roundtable", "url": "https://www.jonatkinson.co.uk/blog/remote-working-roundtable/", "published_at": "2018-12-21T12:23:46+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f65fc510a", "title": "Personal VPN Setup", "url": "https://www.jonatkinson.co.uk/blog/personal-vpn-setup/", "published_at": "2018-12-21T12:21:27+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f661ed8e8", "title": "Recursively updating S3 bucket permissions", "url": "https://www.jonatkinson.co.uk/blog/recursively-updating-s3-bucket-permission/", "published_at": "2018-12-21T12:20:59+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f6704a3ab", "title": "Listing ElasticBeanstalk applications with the aws CLI tool.", "url": "https://www.jonatkinson.co.uk/blog/listing-elasticbeanstalk-applications-with-aws-cli/", "published_at": "2018-12-21T12:20:23+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f679542a1", "title": "How To Fire Someone", "url": "https://www.jonatkinson.co.uk/blog/how-to-fire-someone/", "published_at": "2018-12-21T12:19:42+00:00" }, { "id": "01a08790-2586-72bd-b7b1-5e3f680a336e", "title": "Django coverage reports without unit tests", "url": "https://www.jonatkinson.co.uk/blog/django-coverage-reports-without-unit-tests/", "published_at": "2018-12-21T00:00:00+00:00" } ] posts Claim your blog
Back to jonatkinson.co.uk
Blog · corpus.blog/blogs/jonatkinson.co.uk/posts

jonatkinson.co.uk

jonatkinson.co.uk

2026

2025

2024

2023

2021

2020

2019

2018