This post details a Bash script that runs a TDD loop where an LLM is iteratively used to write Python application code to make a fixed set of tests pass. Similar things have been done before1; this script merely demonstrates that such things can be done simply by stitching together open-source LLM tools. Tooling The script uses two commands from Simon Willison: llm — a command line interface for interacting with Large Language Models (LLMs).| David Winterbottom
A reference of how I have things configured.| codeinthehole.com
Two recommendations for using Copilot effectively.| codeinthehole.com
Using OpenAI and some simple scripting to generate artful pull requests| codeinthehole.com
A Git scraper that tracks Ocado product prices.| codeinthehole.com
Using GPT3 to generate poems from your Git history.| codeinthehole.com
A memorable dialogue from David Mitchell's 2014 book.| codeinthehole.com
A few how-to guides on auditing 1Password team accounts.| codeinthehole.com
A list of test anti-patterns that lead to flakiness.| codeinthehole.com
Record your explanations somewhere permanent.| codeinthehole.com
A useful `cnoremap` for Python development.| codeinthehole.com
A note to self.| codeinthehole.com
Using dynamic blocks to implement a maintenance mode.| codeinthehole.com
HCL allows comments, which is useful.| codeinthehole.com
A super-useful Vim mapping for grabbing Github URLs.| codeinthehole.com
Topics: code smells, pop-culture, blogging and work habits.| codeinthehole.com
Some collected tips from over the years.| codeinthehole.com
Topics: development, tools and effective teams.| codeinthehole.com
The nouns of your Vim thought stream.| codeinthehole.com
A series of short stories.| codeinthehole.com
It can generate unnecessary database operations.| codeinthehole.com
The simplest way to run both in a project.| codeinthehole.com
A common, frustrating problem.| codeinthehole.com
Write-up of a painful morning.| codeinthehole.com
The overarching principle for writing maintainable code.| codeinthehole.com
Using the API to pull simple reports.| codeinthehole.com
Working notes based on reviewing several thousand pull requests.| codeinthehole.com
Some quick ways to hide the clutter.| codeinthehole.com
A note-to-self on avoiding DST issues when joining between tables.| codeinthehole.com
A curated collection of words-of-the-day.| codeinthehole.com
A Sentry tip from the Octopus Energy tech blog.| codeinthehole.com
A tongue-in-cheek list.| codeinthehole.com
Two tips for better debugging of Bash scripts.| codeinthehole.com
Two gotchas that I wasted time on.| codeinthehole.com
An easy way to remember the order arguments get injected.| codeinthehole.com
A useful metaphor for the maintainability of a codebase.| codeinthehole.com
Using the Github API to quickly jump to a PR detail page.| codeinthehole.com
Another note-to-self on how to use JQ.| codeinthehole.com
A podcast on django-oscar.| codeinthehole.com
This is really just a reference on how to combine JQ's select filters.| codeinthehole.com
Programmers lie constantly.| codeinthehole.com
Migrating a Django site to Hugo.| codeinthehole.com
A post on the Octopus Energy tech blog| codeinthehole.com
A post on the new Octopus Energy tech blog| codeinthehole.com
A modern, high-tech energy supplier| codeinthehole.com
A simple heuristic for preferring the imperative mood| codeinthehole.com
Quick tip on tweaking the output of psql| codeinthehole.com
Slightly useful tip for SSHing onto EC2 instances| codeinthehole.com
A new owner| codeinthehole.com
Quick tip on avoiding accidental data loss| codeinthehole.com
A simple Travis test to avoid frustration| codeinthehole.com
Using postmkvirtualenv to prime postactivate| codeinthehole.com
A simple how-to for feeding Django metrics into Zabbix| codeinthehole.com
Git aliases for grabbing Github links| codeinthehole.com
Using CI to avoid pain for new team members| codeinthehole.com
Lightning-fast :grep searching in Vim| codeinthehole.com
A plan for 2014| codeinthehole.com
Git tips for writing release notes| codeinthehole.com
Another note-to-self| codeinthehole.com
Commit message pedantry taken to a new level| codeinthehole.com
Harder than it should be| codeinthehole.com
Matching the RFC using Nose's test generators| codeinthehole.com
Using a setting to control where file logs go| codeinthehole.com
Radio buttons can be tamed| codeinthehole.com
Shiny badges using crate.io| codeinthehole.com
Cleaning up after yourself| codeinthehole.com
A decorator for the testing puritan| codeinthehole.com
Because I have to look this up every time| codeinthehole.com
A better workflow using Hub| codeinthehole.com
Using 'USING' to cast correctly| codeinthehole.com
The recommended way of debugging SQL problems| codeinthehole.com
A pithy footnote from SICP| codeinthehole.com
Notes from an internal git workshop| codeinthehole.com
Allowing external parties to sFTP securely| codeinthehole.com
Superior functional tests for Django| codeinthehole.com
A simple caching library that uses Celery to refresh stage cache items| codeinthehole.com
Using models for audit and clarity| codeinthehole.com
Using macros to automate the boring stuff| codeinthehole.com
No more embarrassing emails from example.com| codeinthehole.com
Encoded slashes have a hard time getting through to Django| codeinthehole.com
An immutable URL class designed for easy inspection and manipulation| codeinthehole.com
Using 'extra_tags' to flag up HTML-safe messages| codeinthehole.com
Scratching a CSV itch| codeinthehole.com
A rare sighting of the 'reload' function in the wild| codeinthehole.com
Using dynamic imports to leverage Django's localflavor| codeinthehole.com
Using Python to fetch and convert YouTube videos for syncing to iPhone| codeinthehole.com
Yet another git tips article| codeinthehole.com
Two talks from the Python stream| codeinthehole.com
Spoofing a HTTPS request using the Django test client| codeinthehole.com
South provides a better way| codeinthehole.com
Using Fabric with git-flow| codeinthehole.com
MySQL's DNS lookups can cause serious problems| codeinthehole.com
Keeping your tabs organised| codeinthehole.com
A simple module for making XPath assertions| codeinthehole.com
Yet another RST blog| codeinthehole.com
This doesn't stick in my head| codeinthehole.com
Always get the latest version| codeinthehole.com
Undocumented option required to avoid STDERR| codeinthehole.com
Use the source| codeinthehole.com
A reference post of Vim's lists and tips on using them effectively.| codeinthehole.com