41554 blogs · [ { "id": "01a08c57-04d3-7326-a06b-fdaeff59371f", "title": "A prompt pattern for working an epic to completion", "url": "https://tom-dickson.com/blog/epic-goal-prompt-pattern/", "published_at": "2026-08-09T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf094660f6", "title": "Building My Own AI-Native Cloudflare Hosted Project Management Tool", "url": "https://tom-dickson.com/blog/projektor-mcp-issue-tracker-cloudflare-workers/", "published_at": "2026-08-06T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0bf8220d", "title": "Guess the mark: a Solent racing-marks quiz", "url": "https://tom-dickson.com/blog/solent-racing-mark-quiz/", "published_at": "2026-06-10T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaefb730cef", "title": "Bermuda sailing forecasts", "url": "https://tom-dickson.com/blog/bermuda-sailing-forecasts/", "published_at": "2026-05-23T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0ed85a39", "title": "From workout planning to a Typst package", "url": "https://tom-dickson.com/blog/typst-calendar-package/", "published_at": "2026-05-22T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf102124b6", "title": "Wing foil sizing from first principles", "url": "https://tom-dickson.com/blog/wing-foil-sizing/", "published_at": "2026-05-18T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaefd5ae9b5", "title": "Context Is All You Need: How Self-Improving Agents Learn From Their Mistakes", "url": "https://tom-dickson.com/blog/context-self-improving-agents/", "published_at": "2026-02-05T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf018126d8", "title": "Building a Knowledge Graph for My Blog", "url": "https://tom-dickson.com/blog/knowledge-graph/", "published_at": "2026-01-12T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf076e6f52", "title": "OWASP Top 10 for LLMs Applied to Defence Use Cases", "url": "https://tom-dickson.com/blog/owasp-llm-defence-use-cases/", "published_at": "2026-01-08T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0124fa28", "title": "JSP 936 Compliance Checklist for AI Suppliers", "url": "https://tom-dickson.com/blog/jsp936-compliance-checklist/", "published_at": "2026-01-04T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0d342842", "title": "Teaching Claude to Edit Like The Economist", "url": "https://tom-dickson.com/blog/teaching-claude-economist-style/", "published_at": "2025-12-30T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaefc4140e8", "title": "Decorating Christmas Trees with Group Theory", "url": "https://tom-dickson.com/blog/christmas-tree-bauble-group-theory/", "published_at": "2025-12-06T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0aedf97c", "title": "Building a Semantic Blog Post Clustering System", "url": "https://tom-dickson.com/blog/semantic-blog-clustering/", "published_at": "2025-11-30T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0e1f4641", "title": "Solving Terni Lapilli: A 2000-Year-Old Game", "url": "https://tom-dickson.com/blog/trias-game-investigation/", "published_at": "2025-11-05T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0cfa972b", "title": "A Nobel-winning model says most UK SaaS startups aren't viable. Here's a calculator that shows why.", "url": "https://tom-dickson.com/blog/startup-viability-calculator/", "published_at": "2025-10-22T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0bbcea5d", "title": "Understanding Ship Deceleration: Interactive Calculator and Mathematical Methods", "url": "https://tom-dickson.com/blog/ship-deceleration-calculation/", "published_at": "2025-09-10T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaeffd2b7d0", "title": "From Naval Warfare to the Grimdark", "url": "https://tom-dickson.com/blog/from-naval-warfare-to-the-grimdark/", "published_at": "2025-07-31T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0fb7520d", "title": "Demonstrating handling Python errors with reproducible scripts", "url": "https://tom-dickson.com/blog/uv-pep723-errors/", "published_at": "2024-11-24T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0fd8cae8", "title": "Quickly checking Python dependencies", "url": "https://tom-dickson.com/blog/uv-python-dep-check/", "published_at": "2024-11-17T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf059a7fea", "title": "Adding goatcounter analytics to a Next.js website", "url": "https://tom-dickson.com/blog/nextjs-goatcounter/", "published_at": "2024-11-09T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf00633c26", "title": "Debugging GKE GPU configuration", "url": "https://tom-dickson.com/blog/gke-gpu-drivers/", "published_at": "2024-08-19T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf04af17b7", "title": "LLMs on the command line", "url": "https://tom-dickson.com/blog/llm-on-cl/", "published_at": "2024-08-10T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0a286567", "title": "Sailing navigation in the Solent", "url": "https://tom-dickson.com/blog/sailing-navigation-solent/", "published_at": "2024-07-26T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf071f7576", "title": "Calling Tensorflow models in Scala", "url": "https://tom-dickson.com/blog/onnx-interface-scala/", "published_at": "2023-10-15T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf003c7c60", "title": "How to use GitHub Actions to update a Jekyll blog", "url": "https://tom-dickson.com/blog/gh-action-blog-update/", "published_at": "2023-10-08T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaefe7f9dde", "title": "How to perform Metaprogramming in Scala", "url": "https://tom-dickson.com/blog/create-case-class/", "published_at": "2023-09-30T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0bea0056", "title": "How to write tests in Postgres", "url": "https://tom-dickson.com/blog/simple-postgresql-testing/", "published_at": "2022-01-15T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf03b67da7", "title": "Org-mode and Terraform", "url": "https://tom-dickson.com/blog/literate-emacs-terraform/", "published_at": "2021-12-29T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf02f32e95", "title": "Org-mode and SQL", "url": "https://tom-dickson.com/blog/literate-emacs-sql/", "published_at": "2021-12-27T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf07b75138", "title": "How to Safely Upsert DataFrames into Postgres", "url": "https://tom-dickson.com/blog/postgres-dataframe-upsert/", "published_at": "2021-08-09T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaefc61034f", "title": "Classifying data with Python", "url": "https://tom-dickson.com/blog/classifying-with-python/", "published_at": "2021-08-03T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaefe36b104", "title": "Calculating covariance matrices with Python", "url": "https://tom-dickson.com/blog/covariance-python/", "published_at": "2021-07-27T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf09df4fc9", "title": "How to reduce the memory used by Pandas DataFrames", "url": "https://tom-dickson.com/blog/reduce_memory_usage/", "published_at": "2021-07-03T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0c968437", "title": "Useful Postgres techniques", "url": "https://tom-dickson.com/blog/sql-overview/", "published_at": "2021-02-26T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf08838329", "title": "When should you use the JSONB type in Postgres?", "url": "https://tom-dickson.com/blog/postgres-jsonb-posts/", "published_at": "2020-10-10T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf01b31bf6", "title": "Learning about data science", "url": "https://tom-dickson.com/blog/learning-data-science/", "published_at": "2020-06-07T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf095fea6d", "title": "Reconstructing a point set from a Euclidean Distance Matrix", "url": "https://tom-dickson.com/blog/reconstructing-point-sets/", "published_at": "2020-05-10T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf050b7829", "title": "A review of Matrix Methods in Data Analysis", "url": "https://tom-dickson.com/blog/matrix-methods-review/", "published_at": "2020-05-05T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf01ede8ef", "title": "How to practice for coding interviews", "url": "https://tom-dickson.com/blog/learning-to-code/", "published_at": "2020-04-24T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf063af277", "title": "Numerical Linear Algebra Cookbook", "url": "https://tom-dickson.com/blog/numerical-linear-algebra/", "published_at": "2020-04-17T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf02e51857", "title": "Linear Algebra for Data Science Cookbook", "url": "https://tom-dickson.com/blog/linear-algebra-crib/", "published_at": "2020-04-10T00:00:00+00:00" }, { "id": "01a08c57-04d3-7326-a06b-fdaf0f015128", "title": "Uncertainty analysis literature review", "url": "https://tom-dickson.com/blog/uncertainty-sensitivity-analysis/", "published_at": "2020-02-26T00:00:00+00:00" } ] posts Claim your blog
Back to Tom Dickson's blog
Blog · corpus.blog/blogs/tom-dickson.com/posts

Tom Dickson's blog

tom-dickson.com

2026

2025

2024

2023

2022

2021

2020