Archives
2024
2023
Generating character names with AI tools
Downloadable macOS Typefaces
Some notes from finally learning PowerShell
DOM input
events
Manticore 2.0
That dumb Apple Messages button
2022
The future of Manticore
Creating synthetic hi-hat's from bitcrusher aliasing
Stompbox footswitches
My 2021 in Tabletop RPGs, and looking ahead to 2022
2021
Setting up conflict cards for Burning Wheel games on Roll 20
Pedalboard update for DI recording
Some brief notes about how I'm using my guitar pedalboard for DI recording
What The Rulebook Didn’t Include: Gumshoe
Hexagonal grids
Burning Wheel: help and FoRKs with beginner’s luck
My 2020 in tabletop RPGs and goals for 2021
2020
Wizard’s tower floorplan
Shaun Hayworth on advancing situation in Burning Wheel
A Gumshoe Drives hack
A rule variant for Gumshoe to make drives more significant.
Zombie World first impressions
Sundry thoughts on the Zombie World RPG after a single play session.
An Indie Games Reading Club Reading List
Paul Beakley’s The Indie Games Reading Club is a staggering resource for role-playing gamers filled with useful content. But where to start? Consider this a possible path into the archives.
Burning Wheel conflict action cards
Gaming ambitions for 2020
2019
Gumshoe: an overlooked feature of spends
Trail of Cthulhu with pushes
An overview of character mechanics that need to be resolved when adapting Trail of Cthulhu to use Pushes from the Yellow King RPG.
Gumshoe: encoding genre with abilities
Gumshoe: adjudicating interpersonal skills
Gumshoe: antagonist spends
A look at the math and narrative ramifications of spending antagonist pool points in the Gumshoe RPG systems.
Gumshoe: What is competence?
Gumshoe: the investigative to general ability exchange rate
Gumshoe: the kernel of the game
This is the first post in a series looking at the Gumshoe role-playing game system.
The Gutter Prayer
Reading queue
Trilemma Adventures Compendium kickstarter
Fate Accelerated Edition index card character sheet
Trail of Cthulhu: Shanghai Bullets
Actual play notes for Shanghai Bullets.
b
, a bug tracker extension for Mercurial
How to use variable fonts in the real world
Gumshoe’s sense trouble ability
Burning Wheel GM Apprenticeship
Yellow King: Starting with a Classic
The Yellow King Role-Playing Game
A review of sorts of The Yellow King Roleplaying Game. If you have never played a tabletop role-playing game but been curious, check this game out.
Cleaning a stomp box footswitch
Mercurial and Git
Routing around Git with the hg-git bridge.
2018
Three albums from 2018
necessary-evil
maintainer change
JSON Feed types and utils for node.js
A dark mode less mixin
A small less mixin to abstract dealing with dark mode in stylesheets.
A generic function to forward events
Making a Boss FS-6 substitute
Notes from making a DIY remote footswitch for a Boss pedal.
Choosing properties for property-based testing
Fall of Delta Green Lethality rules
macOS typography shortcuts on Windows
macOS has nice keyboard shortcuts for a number of common typographic characters that are a pain to type on Windows. Here’s a method to simulate it.
Obscura
Villainous motivations in Cthulhu games
Field lenses in TypeScript
“Just…” thinking
Trail or Call of Cthulhu?
With two great marquee Cthulhu role-playing games available, how do you decide which is right choice for your game?
When to use varargs
Observations on implement functions with variadic arguments.
The Dying of St Margaret’s, again
ORM objects and system layering
String tension and pick thickness
A small observation about the interaction of picks and strings on guitar.
Don’t use obsolete
attributes for internal code
Leveraging Pick
to simplify testing
Using some of the advanced types in TypeScript to deal with large interfaces outside of your control.
A minimal TypeScript dependency injector
A barebones dependency injection function that takes advantage of TypeScripts’s mapped types, and Promises.
Classes for structure, plain objects for data
An Idiom from Clojure applied to TypeScript.
Projects in need of homes
Crafting Interpreters
A ten second song
2017
A speaker cabinet project
Notes and photos from building a speaker cab for electric guitar.
2016
Accessing Local Storage from a Web Worker
A quick how-to to work around the limitations on accessing LocalStorage from within a Web Worker instance.
ANN: Manticore 0.5-beta1 released
Manticore 0.5-beta1 has been released, with an overhauled codebase, and a number of small UI improvements.
Structured messaging followup
Short version: prefer interface extension over type aliases for structured message types.
Structured messages with TypeScript
Exploring how to use newer features of the TypeScript type system to work with structured messages in the browser.
Black boxes for guitar
In which I confess to giving up the tube amp snobbery.
2015
Calibrating expectations
Directors Handbook: Opposition Forces
More of the Dracula Dossier Director’s Handbook: Edom, Dracula, and others.
Directors Handbook: The 1894 Network
Continuing to read through the Dracula Dossier Director’s Handbook. This time the 1894 network and their descendants.
Directors Handbook: Eyes Only Briefing and Opening the Dossier
Initial thoughts on the first two sections of the Director’s Handbook for The Dracula Dossier.
The Dracula Dossier
First thoughts, and a reading order, for The Dracula Dossier for Night‘s Black Agents
ANN: Manticore 0.4 released
Manticore 0.4 has been released, with the ability to select specific monsters instead of using the filters.
2014
Adventure game implementations
A rabbit hole about classic adventure game implementations.
Enterprise
On features of enterprise software.
.powerpoint
Introducing Manticore
Announcing Manticore, an web app for generating encounters for the 13th Age roleplaying game.
13th Age character creation
My weekly gaming group has begun playing 13th Age. This article contains some thoughts on the game’s character creation process.
Mouse Guard RPG 2nd edition coming
The Mouse Guard RPG is getting reprinted with a revised edition of the rules.
Clojure/West 2014 talks for web developers
Clojure/West is full of great talks. Here are three that web developers in Clojure should watch.
13th Age‘s most practical innovation
An initial reflection on ideas introduced in 13th Age.
Garage Band amp sims
A grab bag of thoughts on using Garage Band for recording guitar direct.
2013
Triggering CSS transitions on new elements
A work around to ensure that CSS transitions trigger for newly added DOM elements.
The Mouse Guard RPG scenario structure
Luke Crane and David Petersen’s Mouse Guard RPG introduces the concept of separate GM and player turns. This article takes a look at the ramifications of these turns in play.
The smallest visible increments
A TypeScript & alt JS grab bag
Various and sundry observations about altJS languages, with a focus on TypeScript.
Modeling union types using only functions
The lambda calculus is the basis for functional programming. Church's encodings in the untyped lambda calculus show an interesting pattern that parallels union types in languages like Haskell. Here I try to show how these discriminated union types can be implemented using only javascript functions.
ANN: Color.js 1.0
color.js
, my color management library for JavaScript, has hit 1.0.
A clarification
duck-wrapping types
Duck-wrapping
If it doesn't quack like a duck, wrap it in a duck. Or don't.
In which parables are quoted
I steal from Phil Hagelberg's IRC comments again.
Wisdom from The Mountain Witch
Collected resources for Timothy Kleinert's wonderful small press RPG The Mountain Witch.
Static types are great, but I don't use them in practise
In which I foolishly chip into a long standing nerd debate.
Summer reading
Brief comments on books read over the summer break.
Project templates
Leveraging Leiningen templates for great starting out experiences.
2012
The right abstraction
In which Phil Hagelberg comments on abstraction.
The Clojure web stack and the CRUD stack
Why it is my opinion that Clojure is better off with out a CRUD web framework.
ANN: necessary-evil 2.0.0
Necessary-Evil, the Clojure XML-RPC library has reached version 2.
Reconsidering the relevance of design patterns
Design patterns fell out of favour in the last five or so years. I think there is still some value in them.
Fuzz
Fuzz is the classic broken up guitar sound. To my ears it can't be beaten.
Reversible and composable routes?
Unanswered about defining routes in web applications
Silver screen Cthulhu
An assortment of thoughts about Shadows Over Filmland for the Trail of Cthulhu RPG.
Templates are functions
An article that looks at templates in web development in the context of pure functions and functional programming.
Night's Black Agents: Vampires
A worked example of an alien vampire type for the spy-thriller role-playing game Night's Black Agents by Kenneth Hite.
Night's Black Agents
A review of vampire spy-thriller role-playing game Night's Black Agents by Kenneth Hite.
Prometheus
Some (spoiler filled) thoughts on Ridley Scott's film Prometheus.
Another redesign
The Dying of St Margaret’s
A review of Graham Walmsley’s first purist scenario for Trail of Cthulhu.
Knife sharpening
A professional knows when to sharpen their tools.
Configuration middleware
This article looks at how Ring middleware and dynamic binding presents a powerful tool for controlling configuration in Clojure web apps.
Fiction (read recently)
Bullet point summaries of various fiction I have read recently.
2011
ANN: An improved Clojure brush for Syntax Highlighter
Introducing a new Clojure brush for the Syntax Highlighter javascript library.
Simple L‑system generation
A simple but functional implementation of L-Systems in Clojure.
The Apocalypse Machine
A detailed review of The Apocalypse Machine, Graham Walmsley's post apocalypse setting toolkit for Trail of Cthulhu.
Ready‑made customization
Comprehensions continued
Trevor Burnham's reply to my critique of Coffeescripts comprehensions.
CoffeeScript comprehensions are broken
An examination of List Comprehensions in several languages, how Coffeescript's ‘comprehension’ semantics differ from the common case, and limitations that arise.
The Book of the Smoke
A review of Pelgrane Press's companion to the campaign frame The Bookhounds of London for players and keepers.
Prefix < and >
Bookhounds of London
A review of Bookhounds of London, a campaign frame for Trail of Cthulhu by Kenneth Hite.
A brief overview of the Clojure web stack
Ring is the foundation of web programming in Clojure. It has a broad ecosystem of libraries that fullfil many different roles in the web stack. This article introduces the fundamental concepts of Ring as well as four major libraries, and explains common idioms to help you get started quickly.
Parsers generating parsers
Following my introduction to fnparse
, this article looks at how more common functional programming tools can be leveraged to make parsers that output new parsers.
Start parsing in Clojure: fnparse
Parser combinators are a powerful way of expressing complex parsers as first class operations in a language with first class functions. This tutorial introduces one such library, fnparse
, for Clojure.
Error monads revisited
An error monad in Clojure
2010
ANN: Necessary-Evil
Necessary-Evil is an XML RPC library for Clojure.
SVG maps with Cairo and Mapnik
Using open source technology and data to render maps.
Impedance mismatch with CouchDB
Some observations, both positive and negative, from using CouchDB to build this site.
Turn Coat
The Strain
The Curse of Chalion
Hellboy: Masks and Monsters
Mutant City Blues
Spook Country
Shadows over Filmland
A Colour out of Space
Brief notes of H.P. Lovecraft's classic sci-fi horror tale.
The Dance in the Blood
The Amazing Screw-on Head and Other Curious Objects
Du jour
Chronicles of the Black Company
Short notes on Glen Cooks early Black Company stories.
Intermission
Stack
A stack of books.
Monads: redux
Thoughts on the appropriateness of monads in Clojure.
Ghosts in the machine
Following on from looking at state monads in the context of Clojure, this article looks at variations that add different forms of state-m
of non-determinism.
Welcome to the machine
A close look at how the state monad is implemented and used in Clojure.
A couple of lists
Further comparisons between Python and Clojure.
On iteration
How Python's view of iteration lead me to Clojure.
2009
Functions of functions
iPod rejects
Some factorial refactorings
Unmythic
Some problems I have with a lot of fantasy fiction.
The Haunting: Terms
In my recap of The Haunting I mentioned some terms that were new to people outside small press gaming circles at the time. This post explains some of them.
The Haunting
Notes on having running the classic Call of Cthulhu scenarion The Haunting.
Comments, revisited
Two two
A better blog
My thinking on how I could put together a blog that I would actually enjoy maintaining.