The poetics of TTRPGs

I have often expressed, in a pseudo-jest of oversimplification, that I prefer novellas to novels, short stories to novellas, and poems to short stories. I have always been more drawn to the meditative experience of an impossibly-concise framework than the contemplative experience that length and breadth brings. That isn’t to argue that either experience is objectively better, more difficult to create, nor more serious or worthy of being canonized as art – I, myself, personally just find something extremely satisfying in art that I can hold in a single breath. That oxygenates my blood and travels throughout me.

At Gen Con this year1, I had the opportunity to play Alex Robert’s For the Queen, a short, card-based, no-dice-no-masters TTRPG. The basic gist is that all of the players are on a journey in wartime with their queen, and characters and narratives unfold as players answer questions prompted by the deck of cards. You don’t really need a table, you don’t need to write anything. It’s an incredibly distilled essence of roleplaying. The experience soaked into me, stuck in my mind. A week later, I was trying to figure out why, and how, and it occurred to me that the game is a poem.

My mind repeatedly wandered to another game that I love, that similarly demands I pore over its delicacy: The Quiet Year by Avery Alder. The Quiet Year is also free of masters, and also deck-based2. Cards lay out events that happen during a given season, and players use these events to draw a map that tells the story of a community. Two common themes between these games are cards and lack of a master, but I don’t think either of those elements specifically makes a game a poem. Cards prompting events are randomized, but it’s not the chaotic, make-or-break randomness of chucking a D20 at your GM. An egalitarian system free of masters adds an odd aura of intimacy within the group. They’re poetic elements, certainly, but that’s kind of like saying that in literature, everything that rhymes or
looks like
this
is apoem(period)

And certainly, there are a bunch of formalized rules that we can scrutinize and calculate and determine that aha! A given piece of written or spoken word simply must be a poem! But that’s clearly not what I mean, and I don’t know that it’s productive to try to break down countless elements and rule sets to establish an encyclopedic guide as to whether or not a given TTRPG will give me this lingering satiety. To me, it’s simply about feeling, much of which I believe comes from crossing boundaries, challenging expectations, and doing it all with the crash of shocking brevity.

Let’s talk about a game I haven’t actually played, Orc Stabr by Liam Ginty and Gabriel Komisar3. Fitting on a single sheet, it is a simple game (though a game made more traditional by way of both dice and masters). I suspect it is a fairly quick game, but again… I have not played it. Aside from the game itself, however, there was an additional experience layered onto it, a bit of a metagame if you will. It was launched on Kickstarter, and all of the materials for it were written from the perspective of its orc designer, Limm Ghomizar. Backers could get a full sheet of paper, or a hand-torn half-sheet of paper, encouraging them to find other backers to form a full, playable sheet with. Every sheet had something custom done to it – crayon doodles, recipes, custom rules, handprints, all manner of weird things that simply served to make each copy human, personal, and unique. Seeing folks post about their copies when they received them and just knowing that everyone was getting some different bit of weird was an act of art in itself. And that had that lingering feeling of something once, seemingly rigid, being shattered in the medium.

Clever means of introducing interactivity to narratives have always existed outside what we understand and refer to as gaming. Things like Fluxus’ event scores, the Theatre of the Oppressed, Choose Your Own Adventure novels. Community storytelling has always been a thing, and presumably ‘interactive storytelling, but with rules’ is not a particularly novel concept either. It’s almost certainly unfair, then, to presume that there’s really anything new about what feels like a Gygaxian mold being broken. But I do feel like I’m seeing more and more of this sort of thing being done very intentionally in a space dominated by long-campaign, dice-laden, hack’n’slash systems. There’s a vibrancy to the sense of art and emotion that is being put into games, and that I think seethes through the players of these games.

And that, to me, is poetry.


  1. I wrote a post about Gen Con that I’m unlikely to publish, it was more for the sake of diarism. Suffice it to say that my anxiety toward travel and planning made it difficult, but that it was a fun, wonderfully queer time, and I had some very positive new experiences. ↩︎
  2. The Quiet Year technically has dice, but they’re essentially used as counters. The game also runs several hours. It’s heavier than For the Queen, for sure, which I think gets to my point well… Trying to nail down some exacting set of qualifications is futile. ↩︎
  3. I am friends with the folks behind Orc Stabr, and scribbled on quite a few copies of the game myself. I may have more invested in the experience I describe because of that, but I’m not being compensated to speak kindly of it. Just a lil disclaimer. ↩︎

WTPDF: Role Mapping

PDF 1.7 supports a limited number of standard tags, limited enough that I can freely list them here: Document, Part, Article, Section, Division, Block quotation, Caption, Table of Contents (TOC), TOC item, Index, Paragraph, Heading, six hierarchical Heading levels, List, List item, List item body, Label, Table, Table row, Table header cell, Table data cell, Table header row group, Table body row group, Table footer row group, Span, Quotation, Note, Reference, Bibliography entry, Code, Link, Annotation, Figure, Formula, and Form. There are also Nonstructural1 elements and Private elements, though these are a bit more niche in use, as well as Ruby (with three additional child tags) and Warichu (with two) for Japanese and Chinese language documents. Forty-nine standard tags. Open up a file from, say, Excel, however, and you’ll find tags such as Workbook and Worksheet, in a perfectly valid document.

Enter role-mapping, a rather straightforward mechanism that allows you to create any tag and have it take on the role of any other tag. So, one can map Turkey to Heading Level 2 (<H2>), and place content inside of Turkey tags which will then be read as though they were regular Heading Level 2 tags. Some tools which export to more flexible formats like XML may leave these intact, but in general it is safe to assume that the new tag is, for all intents and purposes, the tag it’s been mapped to.

This becomes important for folks doing accessibility (and other tagged PDF) work for a few reasons. First of all, on large/complex documents, one can easily create their own tags to help with organization, all while mapping them to standard tags that make sense to the outside world. In the first paragraph of this post, I mentioned the other reason that it’s important to (at least) know about their existence – various PDF exporters will use them. If you’re doing any work with tags in PDF, it is vital to know what these nonstandard tags ‘really’ are. Often I disagree with what an exporter has assigned a role to, and instead of redoing every tag, one can simply reassign the role. Finally, only in an absolute pinch, if a document has been authored in some screwy sort of way, say, every paragraph was tagged <H6> because the person who created it liked the aesthetic of that style in Word, standard tags can also be assigned different roles. You can make Heading Level 6 behave like a paragraph instead. You absolutely should not unless you have some kind of time crunch and no better option, but that band-aid is there.

In Acrobat, the Role Map can be viewed and edited from ‘Edit Role Map…’ in the contextual menu of the Tags panel.


  1. Nonstructural elements (<NonStruct>) still contain tagged content and will still be picked up by assistive tech, etc. The nonstructural bit simply means that the tag has no semantic meaning. This, combined with role maps, can be useful for organizing tags without changing the structure – e.g. mapping <Chapter1>, <Chapter2>, etc. to <NonStruct>. ↩︎

Changing and updating the brhfl dot com template

It’s been a while since we had a good meta post here, which makes for a good excuse to perform a major overhaul on my template. In seriousness, this has been a long time coming. For starters, my site wouldn’t render on versions of Hugo past 0.47.1. While not a huge deal to keep old copies around, it only becomes more work as the versions roll by. None of the changes that I’ve made to support Hugo should have any visible effect on the site. But I’ve also been meaning to play around with revamping the navigation at the top. I was using this hacked-together ‘drawer’ type system to hide and reveal the categories, archive, and et cetera sections. I have preserved an archived copy of the home page with the old template intact for demonstration purposes. But I’m not doing that anymore, and let’s start there.

Ditching the drawers

When I set out to design this blog, the drawers were an aesthetic choice that I was very happy with. Archive links by month, a long list of categories… these things were immediately available, yet hidden away. A visitor didn’t need to know that it would open like a drawer, they just needed to know that clicking ‘categories’ would get them to the categories somehow. In a lot of ways this a case of murdering my darlings, and I may revisit the drawers in the future, but for now I think this is the right way to go.

I knew from the beginning that the drawers were not ideal for accessibility. I have a ‘skip’ link in place, but if a screen-reader user did end up in the navigation section (whether by choice or not), all of those lists were still there in their entirety. The paradigm of hiding individual drawers did not carry over. And while I tried to figure out how best to fix this on several occasions, I never came up with anything suitable. While I’m sure this could have been fixed, it is no longer necessary.

Removing the drawers also removes my only dependence on JavaScript and jQuery. As of now, jQuery is only loaded when a post loads a JS file. I don’t necessarily hate jQuery as much as some folks do, but it was a dependence that was there for basically one little gimmick. Similar to the accessibility angle, the site now renders beautifully in lynx:

←←←                                                          brhfl.com (p1 of 7)
   Skip to main content

                                   brhfl.com

     * about
     * categories
     * archive
     * series
     * et cetera
     __________________________________________________________________

Changing and updating the brhfl dot com template

   bri hefele, 2019-06-25, hugo, meta

   It’s been a while since we had a good meta post here, which makes for a
   good excuse to perform a major overhaul on my template. In seriousness,
   this has been a long time coming. For starters, my site wouldn’t render

The point that really pushed me in this direction, however, was speed. Everything here is lightweight static HTML, and everything loads fast. With a 1 second open time on the drawers for aesthetic effect, the load time of a page just listing all the categories is as fast or faster. It may not be as sexy as the drawer gimmick, but moving to simple, dedicated pages is fast, functional, and allows me to play with formatting a little bit. For example, the categories drawer listed them alphabetically; I updated the categories page to have lists sorted both alphabetically and by post count. This page always existed, but you either had to know it was there or have JS disabled. It previously only had the list sorted by post count.

On the to-do list is to flesh out the et cetera page a bit more. I’ve promoted ‘series’ out of there and into the top nav itself, and have demoted my flickr page to et cetera. Not that I’m not proud of my photography or anything, but it felt a bit odd having an external link so prominently showcased. Series on this site have become a nice organizational method as well, and I’m happy to have them in the top nav.

Updating to support new Hugo versions

I occasionally regret building this thing in Hugo. The documentation is extremely hit-or-miss, the devs are quite dismissive, and they seem to live in their own little world when it comes to feature changes. The fatal error I was having was known by (at least) one of the developers to be breaking sites – it was due to a change in Go, and he raised it as an issue with that team. Yet finding any documentation on why this change affected Hugo users or how to fix it was… impossible.

The problem was that I was doing something along the lines of $value, .Page. This was never valid, it just happened to work. And that I and others somehow all came across this method of assigning variables suggests that either official documentation or tutorials once showed it. This stopped working in Go 1.11 and thus Hugo 0.48, tossing out the not-terribly-helpful fatal error: range can only initialize variables. The proper way to do this is $value := .Page, or if an index is needed, $index, $value := .Page.

Aside from that fatal error, some very useful things have been deprecated, which have been a pain to work around. For instance, this incredibly unhelpful note from the 0.55.0 changelog:

preserveTaxonomyNames configuration option is removed. Use .Page.Title.

I don’t know why URLizing (lowercasing, hyphenating, among other things) taxonomy names was ever even the default. Supposedly it was ‘by design’, but the dev links to this meaningless issue as some sort of explanation or discussion, of which it is neither. That decision was bad enough, but removing the config option to keep taxonomy names as you wrote them is patently absurd to me. So, in a ton of places like the series and category pages, I had to rewrite $taxonomy.Name to $taxonomy.Page.Title, and where I was comparing a given post’s series to the list of all series (to list all of that series’ posts in a given post’s footer), I now had to .Params.series | urlize in order to make sure it would match the absurd new format. It is entirely possible that I missed something.

I guess having everything’s name URLized does fix one of my complaints – alphabetizing was case sensitive before, so I basically had to keep all of my categories, etc., lowercase. Hack of a way to solve that, but it’s a nice side effect. I will likely go through and appropriately case my categories at some point. Also on the todo list is cleaning up a handful of warnings Hugo is throwing at me – more stuff being deprecated, huzzah.

One more accessibility note

Unrelated to template changes, but relevant for a meta post: a reader shot me an email rightfully complaining that one of my longer posts wasn’t broken up into subsections with headers. I fixed that post, and a few others as well. One nice thing about a system like Hugo is that I can just feed every raw file into wc and get a big ol’ list which I can sort to get a general idea of which of my posts are long. I know I have very small readership numbers here, but that isn’t a great excuse for letting things slip when it comes to accessibility. I’m going to try to have a better feel for the scope of posts and break them up when necessary. And of course, as mentioned, the template changes I’ve implemented should prove beneficial in an accessibility context as well.


Acrobat: The disparity of tagging methods

Prompted both by troubleshooting a comrade’s accessibility work (related to this short RPG collection which you should absolutely check out!) and a recent instance of tags in a work document turning to random bytes, I thought it might be valuable to briefly go over the three main ways to tag elements in a tagged PDF in Adobe Acrobat. Ultimately they should all do the same thing, but because it’s an Adobe product, they all come with their own unique quirks.

It’s worth noting that tags are one of a handful of structural components in a PDF. While they are probably the most important for accessibility, they need to play nicely with the structure at play at the Content level. While slightly irrelevant to this discussion, it’s also worth a reminder that tagged PDF in PDF 1.71 is described in §10.7, pg. 841; standard tags described in §10.7.3, pg. 898.

Simply retagging things in the Tags panel

This is the safest bet, but it assumes that a: the document is already tagged (just incorrectly), and b: the items that need to be retagged are already grouped properly at the container level. If the document is untagged, and no source is available from which to generate a(n improperly, even) tagged document, then the Accessibility menu has an option to ‘Add Tags to Document’. I would only do this on a backup copy, and would give the document a good once-over to make sure fixing its decisions isn’t more work than starting from scratch with one of the two options below. On short documents, starting from scratch is often quicker, I find. On longer or more complicated ones, not so much.

At any rate, changing tags in the Tags panel is generally quite quick, especially with a working knowledge of what the standard tags actually are. There aren’t a ton of obvious keyboard shortcuts, but a while back I wrote about important ones that help me speed through the process. While items that need to be broken up at the container level need a different approach, it is worth keeping in mind that often several containers will have ended up in one tag, and these can freely be moved about.

The key advantage to this method, aside from speed, is that it does not touch things as far as the Content panel is concerned. This is very important; it means you’re only fixing stuff in one panel instead of hopping back and forth between two (which can generally be achieved quickly with the respective panel’s ‘Show in [other] Panel’ option, but still).

The Touch Up Reading Order tool

A graphical approach wherein one rectangularly wraps objects and tags them via dialog box or contextual menu, this tool has the added benefit of theoretically reordering the reading order of things. Reading order in PDF is complicated, and based on Content order and Tag order. The Touch Up Reading Order tool affects the Content order, which means it moves stuff around on the Z plane. If you have background items like solid blocks of color, using the Touch Up Reading Order tool on text above it is likely to hide it underneath. Then you need to reorder these elements manually in the Content panel.

Other than that, it generally works well. If you’re dealing with straightforward text that doesn’t overlap any graphical elements, you’re unlikely to run into issues with this tool. Even if I’m not using it, I generally leave this mode selected so I can get an overview of what’s tagged as what on the page itself.

Using this tool on an untagged document was what caused the aforementioned random bytes issue. The document came from Publisher, most of the bytes were non-printing. I suspect it was an encoding error. Even though tagging the document this way would have been quicker, it was unusable because of this issue. Generating tags with the ‘Add Tags to Document’ tool did not cause this problem, and I was even able to use the Touch Up Reading Order tool to fix some table issues after everything already had a base tag created. I don’t know how common this problem is (I’ve only experienced it a few times and only with documents from Publisher), but I think it’s worth noting.

Select text in document, choose ‘Create Tag from Selection’ from dropdown menu in Tags panel

This is kind of my last resort if neither of the other strategies work, or if using the Touch Up Reading Order tool would cause too much additional reordering in the Content panel. Aside from being a bit slow and clunky, this tends to cause a problem wherein it starts duplicating and nesting containers in the Content panel. Despite the tags (in the Tags panel) being correct, this still seems to cause issues when interfacing with screen readers, so generally some manual reordering of things is necessary in the Content panel. What it doesn’t seem to get wrong is reordering objects in the same way that the Touch Up Reading Order tool does, tossing text behind graphics and the like.


  1. PDF 1.7 was the first release as an ISO standard. Adobe keeps doing their own shit, and now the PDF Association has kept the motion going with PDF 2. Adobe is still working off of PDF 1.7, adding proprietary garbage onto this standard, presumably because opening the format up was a complete farce to them. PDF 2, while a good standard, faces difficulty with adoption, by my observations. Despite being an ISO standard, PDF 1.7 is available for free PDF, and I implore everyone working with the format to read the key bits of this document. ↩︎

(Retro) Single-board computers

Single-board computers from the early microcomputing era have always fascinated me. Oft-unhoused machines resembling motherboards with calculator-esque keypads and a handful of seven-segment LEDs for a display1, their purpose was to train prospective engineers on the operations of new microprocessors like the Intel 8080 and MOS 6502. Some, like MOS’s KIM-1 were quite affordable, and gave hobbyists a platform to learn on, experiment with, and build up into something bigger.

The KIM-1 is, to me, the archetypal single-board. Initially released by MOS and kept in production by Commodore, it had a six-digit display, 23-key input pad, 6502 processor, and a pair of 6530 RIOT chips. MOS pioneered manufacturing technology that allowed for a far higher yield of chips than competitors, making the KIM-1 a device that hobbyists could actually afford. I would love to acquire one, but unfortunately they are not nearly as affordable these days, often fetching around $1,000 at auction. Humorously, clones like the SYM-1 that were far more expensive when they were released are not nearly as collectable and sell at more reasonable rates. Even these are a bit pricy, however, and you never know if they’ll arrive operable. If they do, it’s a crapshoot how long that will remain true.

Other notable single-boards like the Science of Cambridge (Sinclair) MK14 and the Ferguson Big Board rarely even show up on eBay. The MK14 is another unit that I would absolutely love to own – I have a soft spot for Clive Sinclair’s wild cost-cut creations. This seems extremely unlikely, however, leaving me to resort to emulation. Likewise for the KIM-1, a good emulator humorously exists for the Commodore 64.

History has a way of repeating itself, I suppose, and I think a lot of that retro hobbyist experience lives on in tiny modern single-board computers like the Raspberry Pi and Arduino. I’m glad these exist, I’d be happy to use one if I had a specific need, but they don’t particularly interest me from a recreational computing perspective. Given that these modern descendants don’t scratch that itch, and the rarity and uncertainty of vintage units, I was very excited to recently stumble across Thai engineer Wichit Sirichote’s various single-board kits for classic microprocessors. Built examples are available on eBay. The usual suspects are there: 8080, 8088, 8086, Z80, 68008, 6502; some odd ducks as well like the CDP1802.

I have ordered, and plan to write about the cheapest offering: the 8051 which sells in built form for $85, shipped from Thailand. The 8051 was an Intel creation for embedded/industrial systems, and is an unfamiliar architecture for me. If it all works out how I hope it will, I wouldn’t mind acquiring the 6502, Z80, CDP1802 and/or one of the 808xs. I’d love to see a version using the SC/MP (as used in the Cambridge MK14), but I’m not sure there are any modern clones available2. For now, I will do some recreational experiments with the 8051, perhaps hitting a code golf challenge or two. While this can’t be quite the same as unboxing a KIM-1, I love that somebody is making these machines. And not just one or two, but like… a bunch. Recreational computing lives.


  1. I guess machines like the Commodore 64 were technically single-board, lacking internal expansion mechanisms. But I’ve only really heard people referring to the training devices as such. ↩︎
  2. I’ve done a small amount of searching, and… there don’t seem to be. And original chips fetch $$$ at auction. Which is a real shame, because the SC/MP was a very early chip that supported, in some sense, multiple processors. That would be very, very neat to fuck with. ↩︎