Run scripts in a vite project with vite-node
Maybe the easiest way to run a TypeScript program with Node.js
vite-node
Maybe the easiest way to run a TypeScript program with Node.js
grid
and scoped component styles. Tools like Svelte and Astro scoped component styles by default, which has some interesting interactions with CSS concepts like grid
.
Reverse proxying websockets on an existing path requires catching handle by filtering on the Connection and Upgrade headers.
jj
after 3 months Three months in, and jj
is living up to the promise.
It seems counterintuitive, but I think scanners are harder than parsers to implement correctly .
readline
based UI sweetspot Use readline
and a simple recursive descent parser to make powerful personal tools with nice UI.
Return to Monkey Island is a mixed bag of nostalgia, UI improvements, and another terrible Ron Gilbert ending.
Raise a few seedlings faster in cooler climates with a freezer bag.
Steam cloud sync breaks when iCloud Private Relay is enabled.
jj
is a git compatibile version control tool looks promising.
Some ideas on effectively using generative AI tools to make resources for tabletop roleplaying games.
Apple licenses more high quality fonts than the ones that are installed by default. Here's how to install them, and some highlights.
A grab bag of things that make powershell easier to use.
input
events The DOM has a dedicated event—input
—for text entry.
Notes on updating the Manticore encounter generator for 13th age to the second edition draft rules, and switching to Svelte.
“Recipient has silenced notifications. Notify anyway!” – Get in the sea, button.
Considering the future of the Manticore app for 13th age, now that a second edition is on the way.
Synthesis novel hi-hat with bitcrushing and resampling.
Notes on repairing some 3P2T foot switches.
Some brief notes about how I'm using my guitar pedalboard for DI recording
Two articles about Gumshoe I wrote for the Indie Game Reading Club.
A rule variant for Gumshoe to make drives more significant.
Sundry thoughts on the Zombie World RPG after a single play session.
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.
An overview of character mechanics that need to be resolved when adapting Trail of Cthulhu to use Pushes from the Yellow King RPG.
A look at the math and narrative ramifications of spending antagonist pool points in the Gumshoe RPG systems.
This is the first post in a series looking at the Gumshoe role-playing game system.
Actual play notes for Shanghai Bullets.
b
, a bug tracker extension for Mercurial Judd Karlman outlines a setup for a gaming group to learn Burning Wheel.
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.
Double throw, triple pole mechanical switches have an annoyingly common failure mode. Here's how to fix one.
Routing around Git with the hg-git bridge.
necessary-evil
maintainer change A small less mixin to abstract dealing with dark mode in stylesheets.
Notes from making a DIY remote footswitch for a Boss pedal.
Rule clarification for Fall of Delta Green
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.
With two great marquee Cthulhu role-playing games available, how do you decide which is right choice for your game?
Observations on implement functions with variadic arguments.
Notes on running one of the best published adventures for Trail of Cthulhu, a second time.
A small observation about the interaction of picks and strings on guitar.
obsolete
attributes for internal code Pick
to simplify testing Using some of the advanced types in TypeScript to deal with large interfaces outside of your control.
A barebones dependency injection function that takes advantage of TypeScripts’s mapped types, and Promises.
An Idiom from Clojure applied to TypeScript.
Some notes on making a metal pastiche for a podcast.
Notes and photos from building a speaker cab for electric guitar.
A quick how-to to work around the limitations on accessing LocalStorage from within a Web Worker instance.
Manticore 0.5-beta1 has been released, with an overhauled codebase, and a number of small UI improvements.
Short version: prefer interface extension over type aliases for structured message types.
Exploring how to use newer features of the TypeScript type system to work with structured messages in the browser.
In which I confess to giving up the tube amp snobbery.
Preparation for a new Star Wars movie.
More of the Dracula Dossier Director’s Handbook: Edom, Dracula, and others.
Continuing to read through the Dracula Dossier Director’s Handbook. This time the 1894 network and their descendants.
Initial thoughts on the first two sections of the Director’s Handbook for The Dracula Dossier.
First thoughts, and a reading order, for The Dracula Dossier for Night‘s Black Agents
Manticore 0.4 has been released, with the ability to select specific monsters instead of using the filters.
A rabbit hole about classic adventure game implementations.
On features of enterprise software.
A complaint about scrolljacking.
Announcing Manticore, an web app for generating encounters for the 13th Age roleplaying game.
My weekly gaming group has begun playing 13th Age. This article contains some thoughts on the game’s character creation process.
The Mouse Guard RPG is getting reprinted with a revised edition of the rules.
Clojure/West is full of great talks. Here are three that web developers in Clojure should watch.
An initial reflection on ideas introduced in 13th Age.
A grab bag of thoughts on using Garage Band for recording guitar direct.
A work around to ensure that CSS transitions trigger for newly added DOM elements.
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.
Various and sundry observations about altJS languages, with a focus on TypeScript.
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.
color.js
1.0 color.js
, my color management library for JavaScript, has hit 1.0.
duck-wrapping types
If it doesn't quack like a duck, wrap it in a duck. Or don't.
I steal from Phil Hagelberg's IRC comments again.
Collected resources for Timothy Kleinert's wonderful small press RPG The Mountain Witch.
Brief comments on books read over the summer break.
Leveraging Leiningen templates for great starting out experiences.
In which Phil Hagelberg comments on abstraction.
Why it is my opinion that Clojure is better off with out a CRUD web framework.
necessary-evil
2.0.0 Necessary-Evil, the Clojure XML-RPC library has reached version 2.
Design patterns fell out of favour in the last five or so years. I think there is still some value in them.
Fuzz is the classic broken up guitar sound. To my ears it can't be beaten.
Unanswered about defining routes in web applications
An assortment of thoughts about Shadows Over Filmland for the Trail of Cthulhu RPG.
An article that looks at templates in web development in the context of pure functions and functional programming.
A worked example of an alien vampire type for the spy-thriller role-playing game Night's Black Agents by Kenneth Hite.
A review of vampire spy-thriller role-playing game Night's Black Agents by Kenneth Hite.
Some (spoiler filled) thoughts on Ridley Scott's film Prometheus.
A review of Graham Walmsley’s first purist scenario for Trail of Cthulhu.
A professional knows when to sharpen their tools.
This article looks at how Ring middleware and dynamic binding presents a powerful tool for controlling configuration in Clojure web apps.
Bullet point summaries of various fiction I have read recently.
Introducing a new Clojure brush for the Syntax Highlighter javascript library.
A simple but functional implementation of L-Systems in Clojure.
A review of The Apocalypse Machine, Graham Walmsley's post apocalypse setting toolkit for Trail of Cthulhu.
Trevor Burnham's reply to my critique of Coffeescripts comprehensions.
An examination of List Comprehensions in several languages, how Coffeescript's ‘comprehension’ semantics differ from the common case, and limitations that arise.
A review of Pelgrane Press's companion to the campaign frame The Bookhounds of London for players and keepers.
A review of Bookhounds of London, a campaign frame for Trail of Cthulhu by Kenneth Hite.
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.
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.
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.
necessary-evil
Necessary-Evil is an XML RPC library for Clojure.
Using open source technology and data to render maps.
Some observations, both positive and negative, from using CouchDB to build this site.
Brief notes of H.P. Lovecraft's classic sci-fi horror tale.
A note on a new implemenation.
Short notes on Glen Cooks early Black Company stories.
The to-read pile as of September, 2010
Thoughts on the appropriateness of monads in Clojure.
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.
A close look at how the state monad is implemented and used in Clojure.
Further comparisons between Python and Clojure.
How Python's view of iteration lead me to Clojure.
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.
Notes on having running the classic Call of Cthulhu scenarion The Haunting.
My thinking on how I could put together a blog that I would actually enjoy maintaining.