{"id":5735,"date":"2025-12-16T21:55:20","date_gmt":"2025-12-16T21:55:20","guid":{"rendered":"https:\/\/dalelane.co.uk\/blog\/?p=5735"},"modified":"2026-03-14T21:19:31","modified_gmt":"2026-03-14T21:19:31","slug":"2025-in-writing-wordpress","status":"publish","type":"post","link":"https:\/\/dalelane.co.uk\/blog\/?p=5735","title":{"rendered":"2025 in writing (WordPress)"},"content":{"rendered":"<p>Looking back over what I&#8217;ve put on <a href=\"https:\/\/dalelane.co.uk\/blog\">dalelane.co.uk<\/a> this year&#8230; I wrote twenty-six posts.<\/p>\n<p>Not as many as I&#8217;d hoped&#8230; I want to try and write a little more in 2026.<\/p>\n<h3>Machine Learning for Kids<\/h3>\n<p>Four were about <a href=\"https:\/\/machinelearningforkids.co.uk\">Machine Learning for Kids<\/a>:<\/p>\n<div style=\"display: flex; flex-direction: row; flex-wrap: wrap; text-align: left;\">\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5538\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/ml4kllm.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Exploring Language Models in Scratch with Machine Learning for Kids <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5669\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/qwen-low.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Introducing LLM benchmarks using Scratch <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5719\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/clubscon.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Introducing Generative AI into Code Clubs <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5463\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/shoebox.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> \u201cShoebox\u201d: an artificial intelligence history project <\/a> <\/div>\n<\/div>\n<h3>Kafka<\/h3>\n<p>Seventeen posts were about Kafka, Flink, or something else event-driven:<\/p>\n<div style=\"display: flex; flex-direction: row; flex-wrap: wrap; text-align: left;\">\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5560\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/grafana.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Visualising Apache Kafka events in Grafana <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5518\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/mm2smt.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Using MirrorMaker 2 for simple stream processing <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5612\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/ebike.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Using time series models with IBM Event Automation <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5580\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/placeholder.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Using annotations to store info about Kafka topics in Strimzi <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5483\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/otel.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Understanding event processing behaviour with OpenTelemetry <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5656\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/asyncapi.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> What are we missing in AsyncAPI? <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5477\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/alerts.jpg?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Turning noise into actionable alerts using Flink <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5594\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/apicurio-small.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> How to use kafka-console-consumer.sh to view the contents of Apache Avro-encoded events <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5505\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/placeholder.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Running OpenMessaging benchmarks on your Kafka cluster <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5659\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/techxchange-2025.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Event-driven sessions at IBM TechXchange 2025 <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5678\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/kafkaai.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> From Event Streams to Smart Streams : Powering AI \/ ML with your Kafka topics <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5682\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/kafkaai2.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Using AI to augment event stream processing <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5686\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/kafkaai3.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Triggering agentic AI from event streams <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5692\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/kafkaai4.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Using event streams to provide real-time context for agentic AI <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5699\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/kafkaai5.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Using streams of events to train machine learning models <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5706\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/kafkaai6.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> AI patterns in event driven architectures <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5713\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/placeholder.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Flink SQL aggregate functions <\/a> <\/div>\n<\/div>\n<h3>Personal<\/h3>\n<p>And I wrote five other posts to share other projects and random ideas.<\/p>\n<div style=\"display: flex; flex-direction: row; flex-wrap: wrap; text-align: left;\">\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5570\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/npx.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> npx dalelane <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5723\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/maverick.jpg?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Maverick Dark Castle <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5552\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/goodreads-screenshot.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> A break in Devon <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5633\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/maze.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> Fun things to do with Strava <\/a> <\/div>\n<div style=\"max-width: 215px; width: 100%; margin: 5px;\"> <a href=\"https:\/\/dalelane.co.uk\/blog\/?p=5603\"> <img decoding=\"async\" src=\"https:\/\/images.dalelane.co.uk\/2025-12-16-blogposts\/placeholder.png?raw=true\" style=\"border: thin black solid; width: 100%;\"\/> A mid-year (non-work) checkpoint <\/a> <\/div>\n<\/div>\n<h3>Statistics<\/h3>\n<p>As this is the year of vibe coding, I <a href=\"https:\/\/github.com\/dalelane\/wordpress-year-in-review\/blob\/main\/prompt.md?plain=1\">asked Claude to create visualisations<\/a> for some of the data from my WordPress database.<\/p>\n<p>It generated <strong><a style=\"font-size: 1.1em;\" href=\"https:\/\/dalelane.github.io\/wordpress-year-in-review\/\">dalelane.github.io\/wordpress-year-in-review<\/a><\/strong><\/p>\n<p>Other than a couple of tweaks to index.html, I&#8217;ve uploaded this as-is &#8211; in the spirit of vibe coding I didn&#8217;t even read the JS and CSS that was generated. I&#8217;ve not done this before&#8230; it&#8217;s a weird  feeling!<\/p>\n<p><!--more--><iframe src=\"https:\/\/dalelane.github.io\/wordpress-year-in-review\/\" style=\"width: 100%; height: 800px;\"><br \/>\n<\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Looking back over what I&#8217;ve put on dalelane.co.uk this year&#8230; I wrote twenty-six posts. Not as many as I&#8217;d hoped&#8230; I want to try and write a little more in 2026. Machine Learning for Kids Four were about Machine Learning for Kids: Exploring Language Models in Scratch with Machine Learning for Kids Introducing LLM benchmarks [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[613],"class_list":["post-5735","post","type-post","status-publish","format-standard","hentry","category-misc","tag-2025-year-in-review"],"_links":{"self":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5735"}],"version-history":[{"count":1,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5735\/revisions"}],"predecessor-version":[{"id":5883,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5735\/revisions\/5883"}],"wp:attachment":[{"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dalelane.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}