C/Python developer. Interested in Apache, WSGI, Python web hosting, Jupyter/JupyterHub, Kubernetes, OpenShift, Docker and Platform as a Service (PaaS).

Sydney, Australia
Joined September 2010
Python 3.15 has a new sampling profiler, Tachyon. I wrote 21 hands-on JupyterLab workshops to learn it myself, and they are now ready for anyone to do. Launch on Binder, nothing to install. What I learnt, and why I wrote them: grahamdumpleton.me/posts/202…
2
3
322
New post: Writing a workshop for JupyterLab. Building a small pytest workshop with jupyterlab-workshop from nothing: manifest, pages, actions, checks that gate progress, an isolated Python environment, lint and self-test. grahamdumpleton.me/posts/202…
109
New post introducing jupyterlab-workshop, a JupyterLab extension for guided interactive workshops. Instructions in a side panel, clickable actions that drive the session, checks on what you did. Runs anywhere JupyterLab does, mybinder included. grahamdumpleton.me/posts/202…
1
229
Are developer workshops still relevant when anyone can ask an AI? My PyCon AU 2026 talk, summarised. Reading and doing are different things, AI makes content correct but not teachable, and why I released 24 wrapture workshops anyway. grahamdumpleton.me/posts/202…
1
1
147
wrapture is now at 1.0.0b1 and the API is settled. Time for people to try it on real code and report back. New post with all the links: ten posts so far, the instrumentation packages, the docs, and 24 workshops you can run in your browser on mybinder. grahamdumpleton.me/posts/202…
103
New post: OpenTelemetry export in wrapture. One config table, and the events that printed a tree become spans in a backend, with one trace id shared by the trace files, the outbound headers and the exported spans across two services. grahamdumpleton.me/posts/202…
104
New post: tracing Flask with wrapture. One config entry, one tree per HTTP request, and the failing request says both that it answered 500 and that a KeyError was the reason, even though Flask swallowed it. grahamdumpleton.me/posts/202…
102
New post: zero-code tracing with wrapture. The bindings move into a TOML file next to the project and the program runs untouched, via the runner or injected through autowrapt. The trace streams to JSON Lines, ready for jq. grahamdumpleton.me/posts/202…
1
117
New post, starting a series on the tracing side of wrapture. The same bindings the tests used, with a sink instead of a timeline, and a running program narrates itself: real arguments, real results, the declined card marked where it happened. grahamdumpleton.me/posts/202…
1
216
New post: beyond callables in wrapture. Attributes, env vars, settings dicts, registry entries and generators, each patched as a binding with one lifecycle, including the question nothing else can see asked: did the consumer abandon the generator halfway? grahamdumpleton.me/posts/202…
1
107
New post: phased behaviour in wrapture. Testing retries, circuit breakers and polling loops with a collaborator that changes behaviour mid-test: on a count, a condition, an exhausted sequence, or a signal from the test itself. grahamdumpleton.me/posts/202…
109
New post: recording calls with wrapture. What the timeline and tape record, and how a test reads it back. Worked through on a resource leak, where the failure is an absence and only a record of what did happen can catch it. grahamdumpleton.me/posts/202…
105
Saw that @simonw gave me a callout for a new package I have been working on. Got me wondering now whether an instrumentation package for agent packages like langchain, or model training harnesses would be useful thing to create. simonwillison.net/2026/Aug/3…
1
1
191
So LangChain seems to already having its own observability tools, so maybe not.
44
Introducing wrapture: a new Python package built on wrapt for monkey patching, testing against the real call graph, and tracing a running app without touching its code. Written by an AI under my direction, which was half the point. grahamdumpleton.me/posts/202…
1
3
739
Tried using the Claude browser extension to review an Educates workshop by having it navigate the workshop in the browser, not just read source files. It clicks through pages, triggers actions, and gives you an honest review. Wrote up what I found. grahamdumpleton.me/posts/202…
130
Interactive training platforms shouldn't be someone else's SaaS that could vanish tomorrow. Educates is open source and self-hosted - deploy it wherever you want, from your laptop to production Kubernetes. Three CLI commands to a running workshop. grahamdumpleton.me/posts/202…
119