posts
2026
- Attention Was Always the Bottleneck (AI)
- Make Sure You Spend Time With Tech You Enjoy
- Observations Around Prominent Programmer Sentiment and AI
- The skills I think we might gain (AI)
- Introducing the g9n blog
- Introducing Agent Kanban
- AS Notes - VS Code Notes, Docs and Wikilink Markdown Editing
- You Need Deterministic Gates for Probabilistic AI Agents
- Fixing AGENT / LLM Context Decay in VS Code with Git Worktrees
- Introducing VS Code Agent Kanban: Task Management for the AI-Assisted Developer
- VS Code Kingfisher Extension: Colour Your VS Code Windows Without Breaking Your Team's Settings
- Debugging a SQLite WASM Heap Fragmentation Bug in a VS Code Extension
- An Effective AI Agent Pattern: Plan, Tasks, Implementation
- Building a Light Weight Personal MCP Server for Google Data
- AS Notes: Turn VS Code Into Your Personal Knowledge Management System (PKMS)
- OpenClaw: Running a Secure, Capable, Low Cost Claw (with Hetzner, Tailscale, Discord and Zapier MCP)
- Local LLM Setup on Windows with Ollama and LM Studio (Lenovo ThinkPad P1 Gen 4 with a RTX A3000)
- Building a (Bad) Local AI Coding Agent Harness from Scratch
- A Timeline of Interesting Takes on Agentic AI Use in Software Engineering
- A Centralised Approach to AI / LLM Agent Instruction Using Git Submodules
2025
- .NET 10 and NuGet Audit: Identifying Root Packages for Vulnerable Transitive Dependencies
- Setting up Google Antigravity (Coming from VSCode)
- VSCode tasks.json - capturing NuGet Package Vulnerability Warnings
- .NET 10 - File Based Apps Demonstration (C# Scripting)
- Building Reusable UI Components with Svelte 5 Custom Elements
- New (Free) Favicon / Icon Generator Available on appsoftware.com
- Open Source Tools and Web Utilities from App Software Ltd
2022
- Hackers, Painters and Kanban for Software as a Creative Process
- Maintaining a Blog with Jekyll, GitHub Pages and GitHub Codespaces
- Managing Code Snippets Using Logseq
- API Versioning and Basic UI Authentication with OpenAPI (Swagger Swashbuckle) in .NET Core 6
- A Rough Guide to Building a Retro Pie Bar Top Arcade Game Machine
- A Custom Workflow to Publish from Obsidian to Blot.im
- Using GitHub to Host Images
- Uploading Directly to S3 from Client Using Pre-Signed URLs (JavaScript, .NET)
2021
- Converting Enum Types By Value in C#
- How to wrap a TypeScript JS callback with async await
- How to create a deep copy of an object in JavaScript, TypeScript
- Implementing Microsoft.Extensions.Logging.ILogger with NLog
- Sanitizing HTML in .NET Core
- A Utility Class for Finding Database Deadlocks in .NET Applications