Blog
This is my blog. Sometimes in these posts I'll talk about research or art projects I'm involved with, sometimes I'll just ramble about other stuff which is keeping me up at night. If you're interested in a certain topic, click on a tag to see just the posts with that tag:
aiatprotoccccomp4020cyberneticsdevextemporegigslenslivecodingllmmetapolicyreimagineresearchstudioteachingweb
If anything here sparks your interest (or your ire!) then get in touch via email or discuss on HN.
- The road to COMP4020: managing the strategic token reserve 27 Mar 26
How to provision and manage AI token budgets for a class of agentic coding students....
- The road to COMP4020: the weekly questions 26 Mar 26
Three evergreen questions and 280-character skeets to scaffold reflective practice in each weekly studio crit....
- The road to COMP4020: course software environment 24 Mar 26
Every CS/software development course has a policy on what software it uses - the only different is whether it's written down or not....
- The road to COMP4020: Agentic Coding Studio 20 Mar 26
Renaming the course to Agentic Coding Studio---because what we're really teaching is the craft of harnessing LLMs in coding workflows....
- Perceptron apparatus: inference walkthrough 19 Mar 26
An interactive walkthrough of the perceptron apparatus---a 1.2m wooden table that classifies digits using sliders and a circular slide rule....
- The road to COMP4020: Radical openness 18 Mar 26
Making all weekly prototypes visible to every student---source code, deployed apps, the lot. Radical openness as a teaching strategy for COMP4020....
- The road to COMP4020: safety, YOLO and the open web 5 Mar 26
Fly Sprites as lightweight, snapshotable VMs for student coding---safe enough for YOLO mode, live on the open web by default....
- Mini neon perceptron: XOR edition 3 Mar 26
A 4-input, 3-hidden, 2-output mini perceptron that solves diagonal XOR---with an interactive 3D digital twin to play with....
- Extempore is alive on aarch64 (part deux) 26 Feb 26
CI green on four platforms, a migration from TinyScheme to s7, and a 9x compiler speedup from hash table caches and union-find type unification....
- The road to COMP4020: climbing the "good" gradient 24 Feb 26
Producing code is easy; knowing whether it's good is still hard. Three nested feedback loops for ascending the quality gradient in agentic coding....
- The road to COMP4020: the core mechanic 20 Feb 26
The repeating loop at the heart of COMP4020: provocation, prototype, studio crit. An art-school model adapted for agentic software development....
- AT-URIs as persistent identifiers for scholarly blogging 19 Feb 26
Every post on this blog now has a persistent AT-URI via the standard.site spec---more durable than bare URLs, less overhead than DOIs....
- Ben's dev setup 2026 edition 18 Feb 26
Ghostty, zellij, helix and a life lived in text tokens---why I ditched Zed and went back to purely terminal-based development....
- The road to COMP4020: providing sharp tools 17 Feb 26
Getting 200 students adequate access to frontier coding agents is the hard logistics problem behind COMP4020....
- LLMs Unplugged at Brimbank Tech School 9 Feb 26
A hands-on AI workshop for educators at VU Sunshine Campus, covering AI fundamentals, paper-and-pen predictive models, and change management....
- AI Agents on (in?) the Atmosphere 6 Feb 26
Stateful AI agents are showing up on Bluesky and ATproto---with soul documents, read/write memory, and scheduled self-reflection....
- Out of the browser: on the power of interfaces for agentic AI 5 Feb 26
The leap from browser-based ChatGPT to terminal-native coding agents isn't about smarter models---it's about removing the sandbox....
- Coding agents and the plasticity of code 23 Dec 25
Code has always felt brittle---most changes break it. Coding agents change that dynamic, absorbing the cognitive load of big refactors and making code feel plastic rather than rigid....
- COMP4020/8020: Rapid Prototyping for the Web 19 Dec 25
Designing a new ANU course on building web apps with coding agents---studio-based, prototype-driven, moving beyond naive vibecoding....
- Extempore's aliiiiive on aarch64 17 Dec 25
Extempore now builds and runs on Apple Silicon. The audio libraries work, the build process is cleaner, and Rosetta is no longer required for livecoding....
- Fixing slow Zed agent startup times 17 Dec 25
Claude Code sessions in Zed were taking 30 seconds to start. The culprit: npx fetching Playwright MCP on every launch. The fix involves global installs and mise shims....
- Interactive neon perceptron visualisation 11 Dec 25
An interactive 3D digital twin of the Neon Perceptron---a physical neural network built from flexible LEDs. Draw on the input grid and watch activations flow....
- LLMs Unplugged: teaching language models with pen, paper, and dice 10 Dec 25
A hands-on teaching resource where learners build bigram language models with pen, paper, and dice---no computers required. Tested with school students, public servants, and tech professionals....
- Blog archaeology 3 Dec 25
Spelunking through git history to trace this blog from Octopress in 2012 through two Clojure experiments, six years of Jekyll, and now VitePress....
- Switching from Jekyll to VitePress 2 Dec 25
After ten years on Jekyll, I moved this site to VitePress. Notes on migrating content, components, reveal.js slides, and data loading....
- 11ty and Vite for modern static websites 24 Nov 25
How to set up 11ty with Vite and Tailwind v4 for static sites that need proper asset bundling, HMR, and npm ecosystem access....
- Seeing AI tasks through a TAM lens 12 Nov 25
AI adoption research keeps asking 'do you use ChatGPT?' when it should ask 'for which tasks?' A task-level framework for thinking about when LLMs actually save you time....
- Tracking APS AI Transparency Statements 11 Nov 25
A new project that scrapes and version-controls AI Transparency Statements from Australian Government agencies, tracking how they change over time....
- Cybernetic Studio Launch @ SXSW Sydney 8 Oct 25
Launching the Cybernetic Studio at SXSW Sydney with human-scale AI artefacts: a wooden neural network table and a pen-and-paper language model....
- The great 2025 email yak-shave: O365 + mbsync + mu + neomutt + msmtp 12 Sept 25
Rebuilding a terminal email setup with OAuth2, Office365 and neomutt in Zed---the hard-won config so you don't have to waste as many hours as I did....
- Running Claude Code within Zed 23 July 25
Switching from Zed's Agent panel to Claude Code for flat-fee pricing, with a simple task config to keep the workflow inside Zed....
- Agentic AI: LLMs with stones 17 July 25
Agentic AI is about giving LLMs tools to act in the world without asking first. The real shift isn't new capabilities---it's the removal of the human bottleneck....
- Automated RPi Web Kiosk Setup in 2025 16 July 25
A fully scripted burn-and-boot process for setting up Raspberry Pi 5s as fullscreen Chromium kiosks with Tailscale, WiFi and 4K support....
- DIYChatGPT Short Course for ANU Undergraduates 7 July 25
A hands-on 3-hour workshop where ANU undergrads train their own language model from scratch with pen, paper and dice---ending with a poetry slam....
- Agentic Elixir superpowers: Zed + Tidewave + AshAI 6 June 25
How to wire up Zed, Tidewave and AshAI as MCP servers for an agentic Elixir development workflow, with a helper script to glue it all together....
- DeepSeek and Shallow Moats: Implications for Higher Education 18 Feb 25
Universities betting big on exclusive AI partnerships risk repeating the MOOC mistake. DeepSeek R1 shows why staying provider-agnostic is the smarter play....
- LLM Parlour Games for Overeducated Wankers 7 Nov 24
Workshop materials for designing and playing parlour games with LLMs, including LLM-augmented 20 Questions and Adventures in Amphibology....
- Format Markdown on save in Zed using Prettier 20 Sept 24
Zed config snippet for auto-formatting Markdown files on save with Prettier, including prose wrapping at 80 columns....
- Hosting a genAI trivia night 12 Aug 24
Using an LLM to generate trivia questions, then letting teams challenge any answers they think the model hallucinated....
- Livecoding set ICLC'24 - Shanghai Concert Hall 30 May 24
Performing a livecoding music set at Shanghai Concert Hall as part of ICLC 2024....
- Congrats Dr. Chenchen Xu 1 June 23
Celebrating Chenchen Xu's PhD on weakly supervised sign language understanding, completed through lockdown....
- Parental leave take 3 13 May 23
Off on another round of parental leave until March 2024....
- Writing graph theory proofs with ChatGPT 8 Feb 23
Asking ChatGPT to prove the five colour and four colour theorems with my mathematician father-in-law, and his reaction to the results....
- Academic integrity guidelines re: ChatGPT and generative AI tools 2 Feb 23
Draft guidelines for allowing ChatGPT in university coursework while maintaining academic integrity, with citation and accountability requirements....
- Jekyll build speedups for Ruby 3.2 2 Feb 23
Ruby 3.2's YJIT gave my Jekyll builds a 4.8x speedup---from 17 seconds down to under 4....
- Congrats Dr. Kieran Browne 26 Jan 23
Celebrating Kieran Browne's PhD graduation and his thesis on the neurological metaphor in deep learning....
- Handling Square Webhooks in Phoenix 22 Jan 23
How to receive and validate Square payment webhooks in an Elixir/Phoenix app, with code for HMAC signature verification....
- Are you ready for ChatGPT in the classroom this semester? 16 Jan 23
Practical advice for educators on incorporating ChatGPT into their teaching this semester rather than pretending it doesn't exist....
- rclone: exclude all git repos 11 Jan 23
A bash script to auto-exclude all git repos from rclone backups, since rclone's built-in filtering can't do it alone....
- A School of Cybernetics strategy meeting with ChatGPT 7 Dec 22
My first ChatGPT conversation: asking it to brainstorm strategy for the ANU School of Cybernetics. Impressive output, but we're going to need to get better at drinking from the bullshit firehose....
- Drinking from the bullshit firehose 7 Dec 22
Draft notes on AI-generated bullshit in higher education---the problem isn't that it's wrong, it's that Brandolini's law means we'll be overwhelmed by the sheer volume....
- AI art installations and livecoding gigs in Nov/Dec 6 Dec 22
A roundup of recent creative work: the Panic AI art installation with its big red button, plus a livecoding set at OzCHI 2022....
- AI in higher education: dystopia, utopia or something in between? 13 Oct 22
AI tools in higher education won't operate in isolation---they'll reshape information flows between students, instructors and institutions in ways we need to watch carefully....
- NGA Un-tour: The Hidden Gallery 12 Oct 22
An immersive cybernetic walking tour of the National Gallery of Australia after dark, co-created with BOHO Interactive and the ANU School of Cybernetics....
- Running stable diffusion in a singularity container 2 Sept 22
Rough notes and a Python script for running Stable Diffusion in a Singularity container with NVIDIA GPUs....
- So this is how it feels when the robots come for your job 30 June 22
GitHub Copilot is a genuine force multiplier for coding, but human expertise is still crucial---a Conversation article on what AI assistants mean for programmers....
- So this is how it feels when the robots come for your job: what GitHub's Copilot 'AI assistant' means for coders 30 June 22
A pointer to my Conversation article on GitHub Copilot and what AI coding assistants mean for programmers....
- Redacting craiyon prompts with imagemagick 22 June 22
A one-liner ImageMagick command to batch-redact the prompt text from craiyon (DALL-E mini) screenshot outputs....
- Pulling apart Zoom attendance csv dumps in tidy R 23 May 22
A quick tidyverse R script for parsing Zoom attendance CSVs and visualising per-participant call duration with ggplot2....
- Teaching the world to Cybernetics 7 Mar 22
A look at what the new Experiences Team at the ANU School of Cybernetics is building---weird, site-specific encounters with cybernetic ideas....
- Running an AI neural style transfer model under Singularity 1 Feb 22
Getting a pytorch neural style transfer model running on RTX 3090s via Singularity containers, navigating CUDA version hell along the way....
- Cybernetic futures explained (maybe) 20 Jan 22
Futuring works best when it's more like a radar than a lighthouse---a sense-analyse-act feedback loop, not a fixed point to steer towards....
- Livecoder-in-the-club as a system 11 Nov 21
Using cybernetics and Donella Meadows' leverage points to understand---and improve---the system of code, music and humans in a livecoding gig....
- Deploying a Phoenix app (with LiveView) on fly.io 27 Oct 21
Quick notes on deploying a Phoenix 1.6 LiveView app to fly.io, including gotchas with health checks and outdated guides....
- Cutting ruby CI pipeline times with pre-installed bundles 21 Oct 21
A multi-stage Dockerfile that pre-installs Ruby gems to cut GitLab CI build times for Jekyll sites by up to 90%....
- openconnect setup for institutional VPN access 18 Oct 21
Using openconnect as a reliable alternative to the GlobalProtect client for connecting to an institutional VPN on macOS....
- Feedback in livecoding: cui bono? 13 Sept 21
A pre-class prompt for cybernetics students: watch some livecoding videos and think about what's shown, what's hidden, and who the feedback serves....
- Moving to the School of Cybernetics 11 May 21
I'm leaving the ANU School of Computing for the new School of Cybernetics---here's what that means for students, colleagues and collaborators....
- LENS'21 final gig 2pm June 6 @ sideway 6 May 21
The ANU Laptop Ensemble's end-of-semester gig at sideway music bar, Sunday June 6, doors at 2pm....
- ACMC'21 + Synthmoot: Connections announced for August 26-28 29 Apr 21
The 2021 Australasian Computer Music Conference is happening in Sydney/Melbourne/online in late August---submissions welcome....
- A short list of Extempore livecoding tricks 23 Apr 21
Handy Extempore techniques: cosr, markov chains, weighted random, relative pitches, nof vs repeat, quasiquote, clock sync and more....
- benswift.me analytics/tracking update 8 Apr 21
I've added counter.dev as a lightweight, relatively un-invasive analytics tool. Ad-blocker users still welcome....
- Bulk-add students to MS Teams from a csv file 1 Apr 21
A PowerShell snippet for bulk-adding students to an MS Teams class from a CSV of email addresses---works on macOS and Linux too....
- ANZSRC FoR Codes 2020 edition 18 Mar 21
The 2020 ANZSRC Field of Research codes in a searchable HTML table, because the ABS only publishes them in a spreadsheet....
- How to cite code? Leading by example 16 Mar 21
A YAML-based Statement of Originality that teaches students how to cite code, declare collaborators and list licences in every assignment....
- Simple pdf papers/reports with markdown, pandoc and bibtex 16 Mar 21
A simple GitHub template for writing in markdown and producing nice PDFs via Pandoc and LaTeX, with optional BibTeX citations....
- Respectful Learning Memes 19 Feb 21
Students make brilliant memes to explain course content to each other---so why not make that an official part of the class?...
- Independent Study Contract writing tips 25 Jan 21
Practical advice for ANU computing students on writing a capstone project description and learning outcomes that actually guide your research....
- Configuring Spacemacs org-roam & org-noter for academic writing bliss 16 Dec 20
How to get org-roam, org-roam-bibtex and org-noter working together in Spacemacs for a Zettelkasten-style academic workflow....
- Student project: animated 3D code rendering engine 11 Dec 20
A student project idea: real-time handwriting-style code rendering for livecoding performances, synced to the music....
- Creative Computing ANU Extension course 17 Sept 20
A Creative Computing course for ACT year 11 students has been approved for 2021 through the ANU Extension program....
- Parental leave, take 2 8 Sept 20
The family has grown by one, so I'm off on parental leave for the rest of the year. Back in 2021....
- mbsync v1.3.2 breaking change: <code>SubFolders</code> config required 17 July 20
The mbsync 1.3.2 update silently requires a SubFolders setting. Here's the fix, plus a bonus mu4e prettifier....
- ACMC2020: tools for organising a virtual conference 15 July 20
A detailed rundown of the tools we used to run ACMC2020 online---YouTube Premiere, Discord, EasyChair, and a lot of ffmpeg....
- LENS 2020 final gig stream tomorrow at 8pm 11 June 20
The ANU Laptop Ensemble's S1 2020 final gig is streaming live on YouTube this Friday night....
- Two-way OSC communication between Extempore and Pd 30 Apr 20
A step-by-step guide to sending and receiving OSC messages between Extempore and Pure Data....
- A call-up to fight covid19 18 Apr 20
Joining an ANU COVID-19 taskforce to build epidemiological simulation tools for the Canberra health system....
- LENS Online - the Laptop Ensemble in a time of covid19 21 Mar 20
Taking the ANU Laptop Ensemble online during COVID-19---what changes, what stays the same, and why it might actually work....
- Reimagine Fellowship UK trip report 11 Mar 20
Highlights from a UK research trip: ICLC, chatting with Sam Aaron and Simon Peyton Jones, and falling over on a Scottish hill....
- Command/Control: giving OS aware keybinding hints 14 Feb 20
A small JS snippet that auto-swaps Ctrl/Cmd in keyboard shortcut hints based on the reader's OS....
- ICLC Extempore workshop 6 Feb 20
Workshop materials and outline for the Introduction to music-making in Extempore session at ICLC 2020, Limerick....
- ACMC '20 submissions now open 29 Jan 20
The Australasian Computer Music Conference is coming to ANU in July 2020, with a theme of inclusion. Submissions are open....
- Extempore workshop @ ICLC '20, Feb 6, Limerick IE 28 Jan 20
A hands-on intro to making music with Extempore at ICLC 2020 in Limerick---no experience required, just bring a laptop....
- Upcoming gig: smoke, Jan 30 28 Jan 20
A free evening of experimental sounds---livecoding, processed voice and neural networks---at the ANU School of Music....
- Euclidean rhythms in Extempore 27 Jan 20
A recursive Scheme implementation of Euclidean rhythms in Extempore, plus some unexpectedly cool visual patterns....
- ANU Laptop Ensemble in S1 2020 25 Jan 20
The ANU Laptop Ensemble is back for Semester 1 2020, open to students in music, art, CS and beyond....
- ANU Extension: creative code 17 Nov 19
A pointer to the ANU Extension creative code program....
- benswift.me dev roadmap for 2020 17 Nov 19
My plans for this website in 2020: Jekyll 4, maybe Eleventy, maybe Netlify, maybe Tailwind....
- COMP1720 2019 major project exhibtion 8 Nov 19
Come see the COMP1720 Art & Interaction in New Media major project exhibition---this year's theme is listening in/listening out....
- code/creativity/culture curriculum design workshop 7 Nov 19
A hands-on workshop where participants spin code/creativity/culture wheels and design a real c/c/c studio assessment task....
- LENS showcase S2 2019 31 Oct 19
Photos from the ANU Laptop Ensemble's Semester 2 2019 final performances at the School of Music composition showcase....
- Ben and COMP2300 next year 21 Oct 19
I'm handing COMP2300 over to Charles Martin in 2020 so I can focus on the c/c/c studio Reimagine Fellowship....
- Making Altair/Vega-Lite charts readable without squinting 16 Oct 19
A simple trick for making Altair chart text and marks bigger: set a small width/height and export to SVG....
- Package managers: <code>update</code> or <code>upgrade</code>? 16 Oct 19
A quiz (and a plea for consistency) on whether your package manager uses update or upgrade....
- Sound file I/O in Extempore with libsndfile 15 Oct 19
A crash course on reading, processing and writing audio files in Extempore using the libsndfile C library bindings....
- IoT China Study Tour not happening in 2019 14 Oct 19
The IoT China Study Tour at BIT isn't running this year---the New Colombo Plan grant has expired....
- Laptop Ensemble in the Canberra Times 1 Oct 19
The ANU Laptop Ensemble got a Canberra Times feature, with encouraging words from the School of Music about code in music-making....
- Mapping the livecoding landscape 21 Sept 19
A reference list of key people, ICLC committees and TOPLAP nodes in the global livecoding community....
- Xinyu's Extempore tutorials 18 Sept 19
PRIMM-style tutorials for learning sound and music in Extempore, from sine waves through to samplers and metronomes....
- c/c/c studio: what's already happening 9 Sept 19
A rough map of the people, structures and processes already in place as the c/c/c studio takes shape....
- I'm a Reimagine Fellow 30 Aug 19
I've been awarded an inaugural CECS Reimagine Fellowship, which means the c/c/c studio is happening....
- Making the most of meetings with research students 6 Aug 19
Four standard questions I use to keep one-on-one research supervision meetings focused and useful....
- Livecoding gig this Friday 5:30pm @ ANU Drill Hall Gallery 29 July 19
Livecoding with Charles Martin and Kieran Browne at Drill Hall Gallery, plus ANU Laptop Ensemble members....
- Livecoding article on the ABC 24 July 19
I was interviewed for an ABC News article about the Australian livecoding scene....
- In-place XML tree mutation for Jekyll productivity 17 July 19
Profiling a slow Jekyll build, finding the culprit in Nokogiri node copying, and getting a 20x speedup by switching to in-place tree mutation....
- The c/c/c studio 20 Mar 19
The project plan for the c/c/c studio, a creative code outreach program bringing art, music and code to high school students through the ANU Reimagine Fellowship....
- Mapping over table rows in org-mode 9 Mar 19
How to apply elisp functions to org-mode table rows using named tables and code blocks, with practical caveats and a Pride and Prejudice example....
- On parental leave and auto-reply messages 26 Feb 19
Going on parental leave, deleting all unread emails on return, and the surprisingly liberating auto-reply policy behind it....
- A dynamic Reimagine logo 21 Feb 19
An interactive, spinnable version of the ANU Reimagine logo, built with ClojureScript and Reagent....
- Algorithmic uni marketing billboards 16 Feb 19
A generative 'verb your verb' billboard that picks random verbs and Unsplash backgrounds, built with reveal.js and later rewritten in ClojureScript....
- Reimagining Engineering & CS at the ANU 7 Feb 19
My pitch to become a Reimagine Fellow at ANU, making the case for weaving art and creative practice into Engineering and Computer Science....
- Class discussions on Discourse 6 Feb 19
Switching from Piazza to self-hosted Discourse for a 200-student course forum, with practical notes on setup, tradeoffs, and what's missing....
- On livecoding annotations and visualisations 31 Jan 19
A response to Charlie Roberts' essay on code annotations, exploring the tension between visualising program state and editing live code....
- Oils from 威海 29 Jan 19
A surprise four-hour portrait sitting for a painting class at Shandong University, and the oil paintings that came out of it....
- Old livecoding photo roundup 22 Jan 19
Collecting photos from a decade of livecoding gigs, talks and demos. Got an old photo of me performing? Send it through....
- highlight.js with xtlang support 17 Jan 19
Getting syntax highlighting for Extempore's xtlang working on this blog, told as an FAQ full of hacks and node build shenanigans....
- The annual benswift.me re-write: 2019 edition 2 Jan 19
Another year, another website rewrite. This time it's hand-crafted HTML & CSS with modern grid layouts and the Inter UI typeface....
- Another reveal.js plugin for Jekyll 28 Sept 18
A Jekyll plugin that turns a single markdown file into reveal.js slides, splitting on headings like pandoc does....
- CHI hangs 22 June 18
A quick photo of Kieran and me at CHI, where our AI divination ritual seems to have started some conversations....
- Hosting a self-built jekyll site on GH pages 22 June 18
A simple Makefile for building Jekyll locally with custom plugins and pushing the output to GitHub Pages....
- ANU Laptop Orchestra 6 June 18
Putting together a laptop orchestra at ANU---looking for students into livecoding, VJing, or organising creative tech gigs for credit....
- Centre for the Public Awareness of Code 5 June 18
Most people can name a favourite film or band, but not a favourite algorithm. We need code communicators doing what Carl Sagan did for space....
- The Other Side: Algorithm as Ritual in Artificial Intelligence 24 Apr 18
Kieran Browne and I performed a live AI divination ritual at alt.chi---using analog computing to commune with an artificial intelligence....
- Telopea Hour of Code 6 Sept 17
Links for Telopea Hour of Code students: the p5 web editor and presentation slides....
- Science Week gig 11 Aug 17
Playing a livecoding set at the ACT Science Week launch party tonight. Short notice, but there might still be tickets....
- COMP1720 teaser 10 July 17
Five reasons to take COMP1720, ANU's art-with-code course---now using p5.js in the browser, with more sound and music than ever....
- benswift.me update (July 2017 edition) 6 July 17
Another redesign of benswift.me---this time aiming to be the home for livecoding, research, and making things with computers....
- Blog refresh 1 Dec 16
Migrated to Cryogen and moved the Extempore docs to their own site. Some links are broken, bear with me....