All AI Posts
Coding Agents That Never Leave?
Neil Haddley • October 18, 2026
If coding agents maintain solutions as well as create them, what are low-code platforms such as Dataverse worth?
Claude Code (Part 16)
Neil Haddley • October 17, 2026
Installing Microsoft's official Dataverse plugin from the Claude marketplace, connecting it to a Dataverse environment, and reading and writing records in plain English
DeepSeek Harness (Part 3)
Neil Haddley • October 16, 2026
A hosted DeepSeek V4 Pro model builds Space Invaders and hands 15 small functions to qwen3-coder:30b subagents running on my Mac: every piece written locally, a playable game in 25 minutes for $0.40, and the two limits I found along the way
Scikit-Learn (Part 20)
Neil Haddley • October 13, 2026
Looking back over nineteen chapters of Hands-On Machine Learning: how models learn, which parts are still current, and what I would do differently
Scikit-Learn (Part 19)
Neil Haddley • October 13, 2026
Training and deploying models at scale: serving a TensorFlow model with Docker over REST and gRPC, updating it live, shrinking it for a phone, and spreading training over several devices
Scikit-Learn (Part 18)
Neil Haddley • October 13, 2026
Reinforcement learning: an agent that learns to balance a pole by trial and error, with policy gradients and deep Q-networks
Scikit-Learn (Part 17)
Neil Haddley • October 13, 2026
Autoencoders, GANs, and diffusion models: networks that squeeze data and rebuild it, and networks that invent new clothing pictures
Scikit-Learn (Part 16)
Neil Haddley • October 13, 2026
Natural language processing with recurrent networks and attention: a Shakespeare character model, movie review sentiment, translation, the Transformer, and pretrained models from Hugging Face
Scikit-Learn (Part 15)
Neil Haddley • October 13, 2026
Processing sequences with recurrent neural networks (RNNs) and CNNs: forecasting daily train ridership, comparing a naive guess, a statistical model, and RNNs, and forecasting several days ahead
Scikit-Learn (Part 14)
Neil Haddley • October 13, 2026
Deep computer vision with convolutional neural networks (CNNs): filters that slide across an image, pooling, a CNN for clothing, a pretrained ResNet, and transfer learning for flowers
Scikit-Learn (Part 13)
Neil Haddley • October 13, 2026
Loading and preprocessing data with TensorFlow: a tf.data pipeline that reads many files, shuffles, and batches, the TFRecord format, and Keras layers that turn raw values into numbers
Scikit-Learn (Part 12)
Neil Haddley • October 13, 2026
Custom models and training with TensorFlow: tensors, automatic slopes with GradientTape, and a training loop written by hand instead of calling fit()
Scikit-Learn (Part 11)
Neil Haddley • October 13, 2026
Training deep neural networks: why deep networks are hard to train, and the starting numbers, activation functions, batch normalization, optimizers, and dropout that make it work
Scikit-Learn (Part 10)
Neil Haddley • October 12, 2026
Neural networks with Keras: a network of 266,610 numbers that learns to recognise clothing, trained by backpropagation, the way large language models are
Scikit-Learn (Part 9)
Neil Haddley • October 12, 2026
Unsupervised learning: finding groups in data that has no labels, with K-Means, DBSCAN, and Gaussian mixtures, and getting far with only 50 labels
Scikit-Learn (Part 8)
Neil Haddley • October 12, 2026
Dimensionality reduction: squeezing 784 pixels into far fewer numbers with PCA, random projection, and manifold learning, while keeping what matters
Scikit-Learn (Part 7)
Neil Haddley • October 12, 2026
Ensemble learning and random forests: many models voting, bagging, boosting, and stacking, and how much better a crowd of models does than any one of them
Scikit-Learn (Part 6)
Neil Haddley • October 12, 2026
Decision trees: a model that asks one question at a time, grown split by split, and why it needs holding back
Scikit-Learn (Part 5)
Neil Haddley • October 12, 2026
Support vector machines: the widest street between two classes, kernels for curved boundaries, and an SVM trained both directly and by gradient descent
Scikit-Learn (Part 4)
Neil Haddley • October 12, 2026
Training linear models: the same line worked out directly and found by gradient descent, then curves, regularization, and logistic regression
Scikit-Learn (Part 3)
Neil Haddley • October 12, 2026
Classification: recognising handwritten digits, and why accuracy alone can mislead, with confusion matrices, precision, and recall
Scikit-Learn (Part 2)
Neil Haddley • October 12, 2026
An end-to-end machine learning project: predicting California house prices, from raw data to a tested model
Scikit-Learn (Part 1)
Neil Haddley • October 12, 2026
Machine Learning with Python
ATtiny85 (Part 2)
Neil Haddley • October 11, 2026
An ATtiny85 that sits in an e-bike's hub-motor speed wire, mirrors the signal below 25 km/h and doubles it above, simulated in Tinkercad with an Arduino Uno as a fake wheel
MiniGPT, grown in code you can read
Neil Haddley • October 11, 2026
An experiment: the code that trains MiniGPT from random numbers, rewritten for people, treating the whole readable model as a black box, with the surprise score and the AdamW nudge written out, and a check against the original
MiniGPT, rewritten to be read
Neil Haddley • October 9, 2026
An experiment: the code that runs my trained MiniGPT model, rewritten for people, with a name for every value, every shape written down, every library call explained, and honest notes where nobody knows why it works
ATtiny85 (Part 1)
Neil Haddley • October 6, 2026
Using Claude Code to program a bare ATtiny85-20PU through a USB Tiny AVR Programmer on an Apple Silicon Mac, after simulating the same circuit in Tinkercad
MiniGPT (Part 7)
Neil Haddley • October 5, 2026
Reading a longer row in the same memory: why attention's cost grows with the square of the row, how a sliding window caps it, why writing the window as a mask saves nothing, and a secret-word test of what a long row is for, and of how far a window really reaches, with a follow-along notebook
MiniGPT (Part 6)
Neil Haddley • October 5, 2026
Learning from a teacher: training a small MiniGPT to copy a bigger model's whole wheel of chances, why the teacher must share the student's pieces, and a tested finding: the most helpful teacher was not the best storyteller, but the one whose wheels the student could copy, with a follow-along notebook
MiniGPT (Part 5)
Neil Haddley • October 5, 2026
The block inside today's small models: four changes Meta made for Llama (RMSNorm, rotary positions, SwiGLU, and shared keys and values), each turned back off in turn to find out which one actually matters, with a follow-along notebook
MiniGPT (Part 4)
Neil Haddley • October 5, 2026
The same machine on a faster engine: rebuilding MiniGPT in Apple's MLX, what one shared pool of memory, lazy calculation, and compiling the training step buy, and a fair race against PyTorch on the same Mac, with a follow-along notebook
MiniGPT (Part 3)
Neil Haddley • October 5, 2026
Why big models do not read one letter at a time: cutting text into pieces with byte-pair encoding, what bigger pieces buy and what they cost, and a fair way to score three tokenisers, with a follow-along workbook
MiniGPT (Part 2)
Neil Haddley • October 5, 2026
How a GPT is grown: retraining my MiniGPT exhibit model from random numbers on a Mac, one guess at a time, and watching every embedding and parameter from the first post appear
MiniGPT (Part 1)
Neil Haddley • October 5, 2026
How a GPT runs: a real trained MiniGPT taken apart while it writes, explained with pictures and a wheel of chances, then traced line by line through Jibin Joseph's notebook code, with the trained model to download and run yourself
Spec-Driven AI Tools (Part 4)
Neil Haddley • September 30, 2026
The comparison: what OpenSpec, Spec-Kit, and BMAD each did with the identical calculator and the identical two feature requests — where they genuinely agreed, where they quietly built different products, what it cost, and where the source article held up against running all three myself
Spec-Driven AI Tools (Part 3)
Neil Haddley • September 30, 2026
Running BMAD's spec-build-review cycle twice on the same calculator and requests OpenSpec and Spec-Kit got: it's the only tool that asked instead of silently deciding, and its automatic three-layer review caught four real bugs before I saw them
Spec-Driven AI Tools (Part 2)
Neil Haddley • September 29, 2026
Running Spec-Kit's constitution-specify-plan-tasks-implement-converge cycle twice on the same calculator and requests OpenSpec got, including a caught integer-truncation bug and a caught math error in its own spec
Spec-Driven AI Tools (Part 1)
Neil Haddley • September 29, 2026
Running OpenSpec's full propose-apply-sync-archive cycle twice, for a Programmer Mode and a Statistics Mode on a plain-JS calculator, to see whether its delta specs really do become a living, accurate source of truth
DeepSeek Harness (Part 2)
Neil Haddley • September 27, 2026
Checking whether DeepSeek Harness's everything-is-a-plugin claim extends to the model itself: pointing it at a local Ollama-served model through a custom OpenAI-compatible provider, with no DeepSeek API key at all
Agent Orchestration (Part 3)
Neil Haddley • September 24, 2026
Finding a real agent through a2a-registry.org, then orchestrating it from a LangGraph graph with a local Ollama model: discover the Agent Card, delegate over A2A, verify the reply against the official source, and pause for human approval
Agent Orchestration (Part 2)
Neil Haddley • September 24, 2026
What the A2A (Agent2Agent) protocol is, how it differs from MCP, and running the official Python helloworld sample end to end — a real agent server, agent card discovery, raw JSON-RPC calls, and both streaming and non-streaming client requests
Agent Orchestration (Part 1)
Neil Haddley • September 24, 2026
Comparing three LangChain multi-agent patterns, subagents, skills and handoffs, on eleven conversations that need a clarifying question or a follow-up, plus a reproducible tool-call crash traced to one specific structural cause
Model Context Protocol (Part 4)
Neil Haddley • September 19, 2026
Connecting Claude Code to Business Central's built-in MCP server
Model Context Protocol (Part 3)
Neil Haddley • September 18, 2026
Building a Retrieval-Augmented Generation stack and finally exposing the search function to Claude Code over MCP
Distillation (Part 2)
Neil Haddley • September 15, 2026
Turning a pretrained base model into a chat model with LoRA on a 64GB Mac Studio, then testing whether a second teacher, DeepSeek, produces a better one than GPT-3.5 did
Distillation (Part 1)
Neil Haddley • September 13, 2026
How DeepSeek stands accused of breaking OpenAI's terms of service.
Claude Code (Part 15)
Neil Haddley • September 4, 2026
Using Claude Code to detect, program, and debug a Arduino TinkerKit LCD Module
Agentic AI for Professionals (Part 4)
Neil Haddley • August 26, 2026
Building a Brief Builder feature into nsw-legal-research-assistant, inspired by Thomson Reuters CoCounsel Legal's newly announced Brief Builder — intake, candid argument proposals, a plain-English NSW Caselaw search a non-specialist would actually type, citation-graph leads pulled straight out of a judgment's own text, and a fourth argument grounded on two authorities it never had to fetch itself
DeepSeek Harness (Part 1)
Neil Haddley • August 23, 2026
Giving DeepSeek Harness a product requirements document and a product design document for a faithful browser recreation of the 1978 Taito Space Invaders, and watching it build the game and then verify its own work
Agentic AI for Professionals (Part 3)
Neil Haddley • August 19, 2026
Giving nsw-legal-research-assistant a real interface and an MCP server exposing the same skill to Claude Code, then running it through the same demo Thomson Reuters used to introduce CoCounsel, live, with real output — grounded Q&A, pinpoint citations, Review, and skill-chaining drafting
Agentic AI for Professionals (Part 2)
Neil Haddley • August 18, 2026
Building the RAG core of a legal research assistant entirely on a 32GB M4 MacBook Air — page-safe chunking, a provider-agnostic LLM layer, and citations that can't be hallucinated
Agentic AI for Professionals (Part 1)
Neil Haddley • August 18, 2026
Using a structured LLM-wiki research process to study Thomson Reuters CoCounsel's architecture, then turning that research into an implementation plan for a simplified legal research assistant
Space Invaders
Neil Haddley • June 19, 2026
Building a Space Invaders clone three ways: OpenCode with Big Pickle, OpenCode with DeepSeek V4 Pro, and Claude Code with Sonnet 4.6
Plants vs. Zombies Clone
Neil Haddley • June 16, 2026
Vibe coding a vanilla JS Plants vs. Zombies clone with Claude Code, complete with Playwright visual regression tests
Local Agent
Neil Haddley • June 14, 2026
A conversational AI assistant for this blog using WebLLM (in-browser) and a self-hosted Ollama server (Hosted, public, HTTPS) as interchangeable backends
Claude Code (Part 14)
Neil Haddley • June 4, 2026
Using the page-line-summary skill in Claude Code to generate a deposition summary from a transcript PDF
Claude Cowork (Part 1)
Neil Haddley • June 4, 2026
Using the page-line-summary skill in Claude Cowork to generate a deposition summary from a transcript PDF
Claude Code (Part 13)
Neil Haddley • June 3, 2026
Building a Claude Code skill that generates Dataverse solution XML for Power Platform
Adding a Custom Topic to the Copilot in a Model-Driven App
Neil Haddley • June 1, 2026
The Copilot panel in a model-driven app is a Copilot Studio agent. I tested what it can and cannot do, then added a custom topic to fill one of the gaps.
Claude Code (Part 12)
Neil Haddley • May 8, 2026
Using the DeepSeek API with Claude Code as a cheap, fast alternative to local models
LLM Wiki
Neil Haddley • April 20, 2026
Building a Claude Code-powered personal knowledge base inspired by Andrej Karpathy's LLM Wiki — ingesting PDFs, emails, and notes into structured wiki pages
Claude Code (Part 11)
Neil Haddley • April 10, 2026
Running Claude Code against a local Ollama model (qwen3-coder:30b) instead of the Anthropic API — no API costs and no data leaving the machine
Paperclip
Neil Haddley • March 28, 2026
Open-source orchestration for zero-human companies
Claude Code (Part 10)
Neil Haddley • March 18, 2026
An AI agent for Dynamics 365 Sales Professional
Azure Foundry
Neil Haddley • March 10, 2026
Creating an AI agent in Azure AI Foundry backed by Azure AI Search with vector embeddings for retrieval-augmented generation (RAG)
Claude Code (Part 9)
Neil Haddley • February 22, 2026
Using an AI coding agent to create an AI coding agent
Power Automate
Neil Haddley • February 17, 2026
Connect Power Automate to Azure AI Foundry
Claude Code (Part 8)
Neil Haddley • February 1, 2026
Building a Scheme-like LISP interpreter with a Jupyter-style notebook UI in pure HTML/CSS/JS — guided entirely by Claude Code from first prompt to deployed app
Claude Code (Part 7)
Neil Haddley • January 26, 2026
Adding the Context7 MCP server to Claude Code to inject real-time, version-specific library docs and reduce stale training data errors
Claude Code (Part 6)
Neil Haddley • January 21, 2026
Creating custom slash commands in .claude/commands/ to package project-specific context and workflows into a single reusable shortcut
Claude Code (Part 5)
Neil Haddley • January 21, 2026
Using Claude Code's Plan Mode (read-only exploration before edits) and Extended Thinking to handle complex tasks more carefully
Claude Code (Part 4)
Neil Haddley • January 21, 2026
Pre-approving trusted shell commands and file operations in Claude Code's settings to stop repetitive permission prompts
Claude Code (Part 3)
Neil Haddley • January 21, 2026
Managing Claude Code's context window with ESC ESC rewind, /compact summarisation, and /clear reset to keep long sessions accurate
Claude Code (Part 2)
Neil Haddley • January 21, 2026
Using CLAUDE.md to give Claude Code persistent memory about your project — setup, conventions, and rules that Claude reads automatically every session
Claude Code (Part 1)
Neil Haddley • January 20, 2026
Getting started with Claude Code — Anthropic's agentic CLI that reads your project files, writes and edits code, and runs commands from a single prompt
Voice Kit (Part 4)
Neil Haddley • December 14, 2025
Automatically Boot your Raspberry Pi 3 into Google Voice Assistant
MLX 1
Neil Haddley • November 6, 2025
Using Apple's MLX framework to run and fine-tune large language models efficiently on Apple Silicon Macs
Voice Kit (Part 3)
Neil Haddley • October 18, 2025
Adding Commands
Voice Kit (Part 2)
Neil Haddley • October 16, 2025
Google Assistant API
Voice Kit (Part 1)
Neil Haddley • October 11, 2025
Raspberry Pi Voice Kit
OpenAI
Neil Haddley • October 3, 2025
Creating custom ChatGPT assistants (GPTs) for specific purposes using OpenAI's GPT builder — no coding required, available with ChatGPT Plus
Copilot Studio Agent Tools
Neil Haddley • September 24, 2025
Connected to Business Central
Model Context Protocol (Part 2)
Neil Haddley • September 21, 2025
Building a Model Context Protocol (MCP) server for Microsoft Business Central from scratch, deploying it to Azure Container Apps over Streamable HTTP, and connecting it to Copilot Studio and LM Studio
Customer Copilot Studio
Neil Haddley • September 20, 2025
Business Central Customer Copilot Using Copilot Studio
Model Context Protocol (Part 1)
Neil Haddley • August 13, 2025
Building a Model Context Protocol (MCP) server from the TypeScript quick start, adding a multiplication tool, testing it with MCP Inspector, and calling it from Visual Studio Code's chat
SharePoint Syntex
Neil Haddley • July 30, 2025
Autofill columns
Internet of Things (Part 3)
Neil Haddley • March 1, 2025
Arduino Nano 33 BLE Sense
Azure AI service
Neil Haddley • February 4, 2025
Using Azure OpenAI Service to access OpenAI's GPT-4 and GPT-3.5 models through the Azure AI Foundry portal
Prompt Flow (Part 6)
Neil Haddley • September 1, 2024
Building a multi-step AI chat workflow in VS Code using Prompt Flow, Semantic Kernel, and Planner
Prompt Flow (Part 5)
Neil Haddley • September 1, 2024
Creating and deploying an AI chat application with Azure Prompt Flow and LangChain in Azure AI Studio
LangChain Agents
Neil Haddley • August 25, 2024
Building LangChain agents that use LLMs as a reasoning engine to choose which tools to call, execute them, and loop until the task is complete
Prompt Flow (Part 4)
Neil Haddley • August 24, 2024
Using Semantic Kernel's planner to automatically orchestrate multiple AI plugins so an agent can combine them to achieve a user's goal
Prompt Flow (Part 3)
Neil Haddley • August 24, 2024
Using Microsoft Semantic Kernel to build a plugin-based AI agent that generates jokes, called from an Azure Prompt Flow node
Prompt Flow (Part 2)
Neil Haddley • June 12, 2024
Running an Azure Prompt Flow application inside a Docker container using the VS Code Prompt Flow extension
Prompt Flow (Part 1)
Neil Haddley • June 11, 2024
Setting up Azure Prompt Flow in VS Code to create and run sample AI applications — compared with LangChain-based alternatives
Business Central (Part 3)
Neil Haddley • May 24, 2024
PromptDialog (Part 3)
Business Central (Part 2)
Neil Haddley • May 24, 2024
Prompt Dialog (Part 2)
Business Central (Part 1)
Neil Haddley • May 24, 2024
Prompt Dialog (Part 1)
Blog Copilot Studio
Neil Haddley • March 24, 2024
Building a Business Central extension that lets BC users query this blog using a Copilot Studio chatbot backed by post content
Custom Copilot Studio
Neil Haddley • March 23, 2024
Customer Copilot
Meta
Neil Haddley • August 5, 2023
Testing local large language models on a laptop using LM Studio — download, run, and chat with Llama and other open-source models without any API keys
Colorization
Neil Haddley • August 3, 2023
colorization.ipynb
LlamaCpp
Neil Haddley • August 3, 2023
Accessing the llama.cpp model from Python
Stable Diffusion
Neil Haddley • August 1, 2023
Generating images from text descriptions using Stable Diffusion via Jupyter Notebook and Hugging Face — a deep learning text-to-image model
Object Detection
Neil Haddley • July 25, 2023
Installing OpenCV on a Raspberry Pi and using Python to build a computer vision object detection pipeline
LangChain (RAG)
Neil Haddley • July 21, 2023
Using LangChain to create a medical report application
Context Injection
Neil Haddley • July 19, 2023
How context injection works in LLM applications — injecting relevant documents, data, and instructions into the model's prompt at runtime for RAG
Sentence Similarity
Neil Haddley • July 19, 2023
Sentence Similarity
Sentiment Analysis
Neil Haddley • July 19, 2023
Sentiment Analysis
Machine Learning (Part 9)
Neil Haddley • June 17, 2022
Training a neural network on the MNIST handwritten digit dataset — 60,000 training and 10,000 test images for image classification with TensorFlow
Machine Learning (Part 8)
Neil Haddley • June 12, 2022
Stealing Baseball Signs
Machine Learning (Part 7)
Neil Haddley • June 11, 2022
Google Cloud Platform
Machine Learning (Part 6)
Neil Haddley • June 11, 2022
Splitting into training and test dataframes
Machine Learning (Part 5)
Neil Haddley • June 11, 2022
Predicting glucose levels from age using a machine learning regression model in Python, starting from an Excel dataset
Machine Learning (Part 4)
Neil Haddley • June 8, 2022
Using Google Colab (Jupyter Notebooks in the cloud) to run machine learning experiments with GPU access and no local setup required
Machine Learning (Part 3)
Neil Haddley • June 5, 2022
Creating models
Machine Learning (Part 2)
Neil Haddley • June 5, 2022
What apps can be written quickly?








