<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Tom Dickson&apos;s blog</title><description>A blog about programming, mathematics, data science, and software engineering by Tom Dickson</description><link>https://tom-dickson.com/</link><item><title>Decorating Christmas Trees with Group Theory</title><link>https://tom-dickson.com/blog/christmas-tree-bauble-group-theory/</link><guid isPermaLink="true">https://tom-dickson.com/blog/christmas-tree-bauble-group-theory/</guid><description>Applying Burnside&apos;s lemma and Polyna&apos;s enumeration theorem to quantify the number of patterns I can choose to arrange the baubles on my Christmas tree.</description><pubDate>Sat, 06 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Classifying data with Python</title><link>https://tom-dickson.com/blog/classifying-with-python/</link><guid isPermaLink="true">https://tom-dickson.com/blog/classifying-with-python/</guid><description>Using scikit-learn and some Python features to set up a machine learning pipeline to quantify the efficiency of different classifers for classifying the movement of a stock price.</description><pubDate>Tue, 03 Aug 2021 00:00:00 GMT</pubDate></item><item><title>Context Is All You Need: How Self-Improving Agents Learn From Their Mistakes</title><link>https://tom-dickson.com/blog/context-self-improving-agents/</link><guid isPermaLink="true">https://tom-dickson.com/blog/context-self-improving-agents/</guid><description>Most AI agents are stateless. They solve problems, forget everything, and start fresh. Self-improving agents flip this model by accumulating context across sessions. This post explores context as the central abstraction that makes cross-session learning possible.</description><pubDate>Thu, 05 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Calculating covariance matrices with Python</title><link>https://tom-dickson.com/blog/covariance-python/</link><guid isPermaLink="true">https://tom-dickson.com/blog/covariance-python/</guid><description>I wanted to use lower level linear algebra constructs in Python to calculate a covariance matrix.</description><pubDate>Tue, 27 Jul 2021 00:00:00 GMT</pubDate></item><item><title>How to perform Metaprogramming in Scala</title><link>https://tom-dickson.com/blog/create-case-class/</link><guid isPermaLink="true">https://tom-dickson.com/blog/create-case-class/</guid><description>I explain how to perform metaprogramming in Scala using Scalameta to generate case classes based on a dataset schema defined in a CSV file. I detail the process of transforming schema information into an Abstract Syntax Tree (AST) to create valid Scala code automatically, illustrating the solution with various code snippets.</description><pubDate>Sat, 30 Sep 2023 00:00:00 GMT</pubDate></item><item><title>From Naval Warfare to the Grimdark</title><link>https://tom-dickson.com/blog/from-naval-warfare-to-the-grimdark/</link><guid isPermaLink="true">https://tom-dickson.com/blog/from-naval-warfare-to-the-grimdark/</guid><description>I adapted a naval combat model to Warhammer 40k and built interactive calculators using iterative expected values, Markov chains, and Monte Carlo simulation. Monte Carlo wins for accuracy, but Markov chains reveal the probability distributions that expected values hide.</description><pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate></item><item><title>How to use GitHub Actions to update a Jekyll blog</title><link>https://tom-dickson.com/blog/gh-action-blog-update/</link><guid isPermaLink="true">https://tom-dickson.com/blog/gh-action-blog-update/</guid><description>In this blog post, I explain how I implemented a GitHub Actions workflow to automate the updating of my Jekyll blog by building it and transferring files to my Droplet using `rsync`. I configured the workflow to trigger on pushes to the `gh-actions` branch and on pull requests to the main branch, ensuring efficient testing and deployment of changes.</description><pubDate>Sun, 08 Oct 2023 00:00:00 GMT</pubDate></item><item><title>Debugging GKE GPU configuration</title><link>https://tom-dickson.com/blog/gke-gpu-drivers/</link><guid isPermaLink="true">https://tom-dickson.com/blog/gke-gpu-drivers/</guid><description>Troubleshooting GPU configuration on GKE can be painful. I explain how to troubleshoot GPU configuration issues in Google Kubernetes Engine (GKE) when running PyTorch workloads, emphasizing the importance of ensuring compatibility between Nvidia drivers, CUDA, and PyTorch. I outline a systematic approach to debug and verify that the GPU is recognized within the container and that PyTorch can access the GPU resources correctly.</description><pubDate>Mon, 19 Aug 2024 00:00:00 GMT</pubDate></item><item><title>JSP 936 Compliance Checklist for AI Suppliers</title><link>https://tom-dickson.com/blog/jsp936-compliance-checklist/</link><guid isPermaLink="true">https://tom-dickson.com/blog/jsp936-compliance-checklist/</guid><description>A practical guide to the MOD&apos;s Dependable AI directive. This post distils the 32-page policy document into concrete requirements that suppliers must meet today, covering ethical principles, data standards, lifecycle documentation, and approval pathways.</description><pubDate>Sun, 04 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Building a Knowledge Graph for My Blog</title><link>https://tom-dickson.com/blog/knowledge-graph/</link><guid isPermaLink="true">https://tom-dickson.com/blog/knowledge-graph/</guid><description>How I built an interactive knowledge graph connecting blog posts through semantic similarity and shared tags. A deep dive into embeddings, NER, and D3 force-directed layouts.</description><pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Knowledge recall</title><link>https://tom-dickson.com/blog/knowledge/</link><guid isPermaLink="true">https://tom-dickson.com/blog/knowledge/</guid><description>I&apos;ve implemented a process for recording the things I learn in the form of questions and answers, using the active recall technique. I document how I use the latex exam class to generate worksheets with and without the answers.</description><pubDate>Sun, 26 Nov 2023 00:00:00 GMT</pubDate></item><item><title>Learning about data science</title><link>https://tom-dickson.com/blog/learning-data-science/</link><guid isPermaLink="true">https://tom-dickson.com/blog/learning-data-science/</guid><description>Useful resources for learning about data science.</description><pubDate>Sun, 07 Jun 2020 00:00:00 GMT</pubDate></item><item><title>How to practice for coding interviews</title><link>https://tom-dickson.com/blog/learning-to-code/</link><guid isPermaLink="true">https://tom-dickson.com/blog/learning-to-code/</guid><description>Some resources that I use to practice for passing coding interviews.</description><pubDate>Fri, 24 Apr 2020 00:00:00 GMT</pubDate></item><item><title>Linear Algebra for Data Science Cookbook</title><link>https://tom-dickson.com/blog/linear-algebra-crib/</link><guid isPermaLink="true">https://tom-dickson.com/blog/linear-algebra-crib/</guid><description>A review of mathematical concepts helpful for data science.</description><pubDate>Fri, 10 Apr 2020 00:00:00 GMT</pubDate></item><item><title>Org-mode and SQL</title><link>https://tom-dickson.com/blog/literate-emacs-sql/</link><guid isPermaLink="true">https://tom-dickson.com/blog/literate-emacs-sql/</guid><description>Literate programming with org-mode and sql.</description><pubDate>Mon, 27 Dec 2021 00:00:00 GMT</pubDate></item><item><title>Org-mode and Terraform</title><link>https://tom-dickson.com/blog/literate-emacs-terraform/</link><guid isPermaLink="true">https://tom-dickson.com/blog/literate-emacs-terraform/</guid><description>Using org mode to generate documentation and infrastructure.</description><pubDate>Wed, 29 Dec 2021 00:00:00 GMT</pubDate></item><item><title>LLMs on the command line</title><link>https://tom-dickson.com/blog/llm-on-cl/</link><guid isPermaLink="true">https://tom-dickson.com/blog/llm-on-cl/</guid><description>I&apos;ve integrated Large Language Models (LLMs) into my workflows to automate developer activities. This improves my understanding of their capabilities. I provide practical use cases, including code review, file summarization, web page content extraction, and even analyzing running processes, illustrating the diverse applications of LLMs in my daily tasks.</description><pubDate>Sat, 10 Aug 2024 00:00:00 GMT</pubDate></item><item><title>A review of Matrix Methods in Data Analysis</title><link>https://tom-dickson.com/blog/matrix-methods-review/</link><guid isPermaLink="true">https://tom-dickson.com/blog/matrix-methods-review/</guid><description>A review of the MIT 18.065 Spring 2018 opencourseware course, instructed by Gilbert Strang.</description><pubDate>Tue, 05 May 2020 00:00:00 GMT</pubDate></item><item><title>Adding goatcounter analytics to a Next.js website</title><link>https://tom-dickson.com/blog/nextjs-goatcounter/</link><guid isPermaLink="true">https://tom-dickson.com/blog/nextjs-goatcounter/</guid><description>How to add goatcounter analytics to a Next.js website.</description><pubDate>Sat, 09 Nov 2024 00:00:00 GMT</pubDate></item><item><title>Numerical Linear Algebra Cookbook</title><link>https://tom-dickson.com/blog/numerical-linear-algebra/</link><guid isPermaLink="true">https://tom-dickson.com/blog/numerical-linear-algebra/</guid><description>A review of numerical linear algebra for machine learning.</description><pubDate>Fri, 17 Apr 2020 00:00:00 GMT</pubDate></item><item><title>Calling Tensorflow models in Scala</title><link>https://tom-dickson.com/blog/onnx-interface-scala/</link><guid isPermaLink="true">https://tom-dickson.com/blog/onnx-interface-scala/</guid><description>I demonstrate how to serve a TensorFlow model from Scala by serializing it to the ONNX format, allowing it to be utilized through the Java ONNX runtime. I provide a step-by-step guide on exporting a model and implementing the necessary logic in Scala to invoke it, highlighting key considerations and potential next steps for further development.</description><pubDate>Sun, 15 Oct 2023 00:00:00 GMT</pubDate></item><item><title>OWASP Top 10 for LLMs Applied to Defence Use Cases</title><link>https://tom-dickson.com/blog/owasp-llm-defence-use-cases/</link><guid isPermaLink="true">https://tom-dickson.com/blog/owasp-llm-defence-use-cases/</guid><description>The OWASP Top 10 for LLMs focuses on commercial applications. This post maps each vulnerability to concrete military scenarios and shows how JSP 936 requirements address each risk.</description><pubDate>Thu, 08 Jan 2026 00:00:00 GMT</pubDate></item><item><title>How to Safely Upsert DataFrames into Postgres</title><link>https://tom-dickson.com/blog/postgres-dataframe-upsert/</link><guid isPermaLink="true">https://tom-dickson.com/blog/postgres-dataframe-upsert/</guid><description>I share a Python script that safely upserts Pandas DataFrames into a Postgres database using psycopg2, highlighting the importance of handling potential SQL injection risks. I explain the process of constructing SQL statements to manage inserts and updates based on specified constraints, while utilizing the `execute_batch` function for efficient batch processing.</description><pubDate>Mon, 09 Aug 2021 00:00:00 GMT</pubDate></item><item><title>When should you use the JSONB type in Postgres?</title><link>https://tom-dickson.com/blog/postgres-jsonb-posts/</link><guid isPermaLink="true">https://tom-dickson.com/blog/postgres-jsonb-posts/</guid><description>A review of different sources on when JSONB is suitable for use.</description><pubDate>Sat, 10 Oct 2020 00:00:00 GMT</pubDate></item><item><title>Reconstructing a point set from a Euclidean Distance Matrix</title><link>https://tom-dickson.com/blog/reconstructing-point-sets/</link><guid isPermaLink="true">https://tom-dickson.com/blog/reconstructing-point-sets/</guid><description>Recovering point locations from vectors.</description><pubDate>Sun, 10 May 2020 00:00:00 GMT</pubDate></item><item><title>How to reduce the memory used by Pandas DataFrames</title><link>https://tom-dickson.com/blog/reduce_memory_usage/</link><guid isPermaLink="true">https://tom-dickson.com/blog/reduce_memory_usage/</guid><description>A script illustrating how the memory usage of a pandas DataFrame can be reduced through altering data types.</description><pubDate>Sat, 03 Jul 2021 00:00:00 GMT</pubDate></item><item><title>Sailing navigation in the Solent</title><link>https://tom-dickson.com/blog/sailing-navigation-solent/</link><guid isPermaLink="true">https://tom-dickson.com/blog/sailing-navigation-solent/</guid><description>Useful resources for sailing, specifically in the Solent.</description><pubDate>Fri, 26 Jul 2024 00:00:00 GMT</pubDate></item><item><title>Building a Semantic Blog Post Clustering System</title><link>https://tom-dickson.com/blog/semantic-blog-clustering/</link><guid isPermaLink="true">https://tom-dickson.com/blog/semantic-blog-clustering/</guid><description>I implemented an automated system to find related blog posts using embeddings and k-means clustering. The system runs at build time, using semantic similarity to group posts by topic and generate intelligent recommendations without any runtime overhead.</description><pubDate>Sun, 30 Nov 2025 00:00:00 GMT</pubDate></item><item><title>Understanding Ship Deceleration: Interactive Calculator and Mathematical Methods</title><link>https://tom-dickson.com/blog/ship-deceleration-calculation/</link><guid isPermaLink="true">https://tom-dickson.com/blog/ship-deceleration-calculation/</guid><description>How long does it take a ship to stop? I built an interactive calculator and worked through the hydrodynamics from first principles. Without friction brakes, we can see that hull form and propulsion type dominate stopping performance.</description><pubDate>Wed, 10 Sep 2025 00:00:00 GMT</pubDate></item><item><title>How to write tests in Postgres</title><link>https://tom-dickson.com/blog/simple-postgresql-testing/</link><guid isPermaLink="true">https://tom-dickson.com/blog/simple-postgresql-testing/</guid><description>Writing simple tests in Postgres without requiring extra dependencies.</description><pubDate>Sat, 15 Jan 2022 00:00:00 GMT</pubDate></item><item><title>Useful Postgres techniques</title><link>https://tom-dickson.com/blog/sql-overview/</link><guid isPermaLink="true">https://tom-dickson.com/blog/sql-overview/</guid><description>Some notes on useful SQL commands and when they might be useful.</description><pubDate>Fri, 26 Feb 2021 00:00:00 GMT</pubDate></item><item><title>Evaluating Startup Ideas with Economic Theory</title><link>https://tom-dickson.com/blog/startup-viability-calculator/</link><guid isPermaLink="true">https://tom-dickson.com/blog/startup-viability-calculator/</guid><description>Using the Aghion-Howitt model from endogenous growth theory, this post presents an interactive calculator to evaluate startup viability. The calculator considers startup costs and market dynamics to compute expected value given competitive threats. Based on UK numbers but easily adapted for other regions.</description><pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Teaching Claude to Edit Like The Economist</title><link>https://tom-dickson.com/blog/teaching-claude-economist-style/</link><guid isPermaLink="true">https://tom-dickson.com/blog/teaching-claude-economist-style/</guid><description>I built a Claude Code plugin that applies The Economist&apos;s editorial standards to writing. It detects weasel words, fixes passive voice, and maintains dialect consistency - and it works across all my projects.</description><pubDate>Tue, 30 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Solving Terni Lapilli: A 2000-Year-Old Game</title><link>https://tom-dickson.com/blog/trias-game-investigation/</link><guid isPermaLink="true">https://tom-dickson.com/blog/trias-game-investigation/</guid><description>I investigate how it&apos;s possible to apply optimisation techniques and group theory to the ancient game of Terni Lapilli. Terni Lapilli is a version of tic-tac-toe, and like tic-tac-toe it&apos;s possible to model optimal decision making. I used this analysis to explore various areas of mathematics I hadn&apos;t encountered yet, like group theory.</description><pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate></item><item><title>Uncertainty analysis literature review</title><link>https://tom-dickson.com/blog/uncertainty-sensitivity-analysis/</link><guid isPermaLink="true">https://tom-dickson.com/blog/uncertainty-sensitivity-analysis/</guid><description>A review of the literature on uncertainty and sensitivity analysis when applied to optimisation models.</description><pubDate>Wed, 26 Feb 2020 00:00:00 GMT</pubDate></item><item><title>Demonstrating handling Python errors with reproducible scripts</title><link>https://tom-dickson.com/blog/uv-pep723-errors/</link><guid isPermaLink="true">https://tom-dickson.com/blog/uv-pep723-errors/</guid><description>This article demonstrates how to enhance Python error handling using the traceback module while leveraging uv&apos;s support for PEP 723 to create reproducible scripts. It provides practical examples of how to move beyond basic ValueError implementations to include stack traces in error messages, making debugging and error handling more informative in production environments.</description><pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate></item><item><title>Quickly checking Python dependencies</title><link>https://tom-dickson.com/blog/uv-python-dep-check/</link><guid isPermaLink="true">https://tom-dickson.com/blog/uv-python-dep-check/</guid><description>A short snippet for using `uv` to iterate on changing Python project dependencies.</description><pubDate>Sun, 17 Nov 2024 00:00:00 GMT</pubDate></item></channel></rss>