Azhdarchid

I'm Bruno Dias, a São Paulo-based designer (systems, narrative, mechanics) and writer working in video games. Azhdarchid (named after the family of large pterosaurs) is my personal blog; I also have a more professional landing page at brunodias.dev.

You may know me from such video games as Where the Water Tastes Like Wine, Neo Cab, Pathologic 2 and 3, or Fallen London—you can see my full credits on MobyGames. I also edit the Game Narrative Reader, a link anthology of great essays about video game narrative design on the web.

For my sins, you can find me on Bluesky (@brunodias.dev) and on the Fediverse (@bruno@azhdarchid.online). For my cinema sins, I'm also on Letterboxd (notbrunoagain).

Recent Posts

Jump to full post list

I did end up building a (very dumb) solution to making it faster to write small posts.

I did end up building a (very dumb) solution to making it faster to write small posts.

I did end up building a (very dumb) solution to making it faster to write small posts. It's a shell script called posthog.sh which:

  1. Opens a temp file in vim
  2. If I saved the file, asks if I want it to be a note or a full post and auto-generates some basic front matter
  3. Opens the front matter as a temp file in vim so I can edit it if to add tags, etc
  4. Generates the actual post as a file, commits it, and pushes the commit so the site gets rebuilt on the server.

In my imo you should never do something smart when something stupid will do.

A ★★★½ review of Lights in the Dusk

A ★★★½ review of Lights in the Dusk
The poster for Lights in the Dusk (2006

Reviewed by Bruno Dias

2006 · ★★★½

At one point in this movie, Kati Outinen—the star of some of Kaurismäki's early films back in the late eighties, including the incredible and incredibly depressing Match Factory Girl—shows up for a brief cameo playing a glowering cashier at a miserable Helsinki supermarket. This is such a feel-bad movie that seeing her felt like a ray of goddamn sunshine.

A recurring theme for Kaurismäki is characters trying to scrape away the subtext of their relationships; approaching what they want with complete bluntness, as if they don't have time for flirting or skirting the issue. Here, this dynamic is a weapon. It's a noir without the ambiguity; you see exactly what Maria Järvenhelmi's reluctant femme fatale is doing, the entire way.

And on the other side of that, the sad-sack protagonist (Janne Hyytiäinen) sees it too. No one in this movie has any illusions about it; it's like they've seen the movie before, and they're living through a recurrence that reduces the events of their lives to mere facts.

Real brick of a movie. Three and a half stars.

A ★★★½ review of I Hired a Contract Killer

A ★★★½ review of I Hired a Contract Killer
The poster for I Hired a Contract Killer (1990

Reviewed by Bruno Dias

1990 · ★★★½

This feels like a difficult transition; whereas before in Match Factory Girl, Ariel, and Shadows in Paradise, Kaurismäki was working with a group of actors who seemed so perfectly and completely in tune with his sensibilities, here everyone seems to be coming at the challenge from a slightly off-kilter angle.

Kaurismäki is stretching in a lot of ways; he's depicting a setting that's new to him, he's casting actors who are new to him, he's working in a language he hadn't done a full feature in before. It's all ultimately in service of watching Jean-Pierre Léaud build a character scene by scene, slowly finding things for his shattered salaryman to hold on to for (very literally) dear life.

Still a great watch; Léaud is of course incredible here, but so is relative unknown Margi Clarke and long-tenured English character actor Kenneth Colley (you may recognize him as one of sundry imperial officers in Star Wars). And as always, Kaurismäki has this incredible property of holding your attention with a movie that feels almost unyielding in its quietness so that he can catch you entirely off-guard with a joke or a moment of unexpected tenderness.

Very glad to have seen this in a theater!

Better microblogging and mesoblogging.

Better microblogging and mesoblogging.

In my last couple of posts I've talked about my desire to support "micro" and "meso" blogging more effectively; ie make it easier for me to post things that aren't necessarily full essays.

I've gone ahead and added a new class of content to Azhdarchid that I call "notes"; notes are like posts, except they're untitled by default and shown differently on the front page. I'm still feeding them into the RSS feed, and I've built a little automated tool to make writing and publishing these more easy.

Reinventing a Fourth Website Piecemeal and from First Principles Using Junk Found Lying on the Side of the Road

I have concepts of a website.

Obviously I've been thinking about blog and the IndieWeb a lot these days. We are not very far from the two year anniversary of Cohost shutting down; maybe I'm thinking about how to build some of that social experience up again brick by brick, using the web as a substrate rather than a silo (or a federation of silos, which is the approach some others have been taking).

For me personally, the core design that made Cohost so valuable was a particular mix of features that enabled:

  • Full-spectrum posting; Cohost felt suited to and supported well everything from <140 character microblogs to long essays to media posting. In particular, it was extremely good at what I'd call "mesoblogging," posts in the 500-800 word range which are a poor fit both for traditional essayistic blogging and microblogging platforms. This is really what I miss the most.
    • Posts on Cohost could have titles, but did not have to; the posting interface essentially scaled gracefully in complexity from "typing some words into a box and hitting send" to "fully formatted writing with subheads, tags, metadata, etc" and nothing got lost in the shuffle.
    • A static-website blog like this one is perfectly good for essay posting, but the simplicity win of this kind of setup does mean that you miss on the conveniences of a CMS interface that takes away, for example, the work adding date of publication information to a post.
  • Replies and comments as distinct first-class entities. I think they occupy vastly different niches, and I think the ability to choose between responding with or without rebroadcasting
    • Funnily enough, webmentions as I just added them runs counter to Cohost's original design—the site very deliberately did not create backlinks on replies; you could see who had replied to you but their replies were not findable from your post. This meant that if someone was being dogpiled in replies (something that the site's OP-then-reply design already discourages relative to Twitter's quoter-then-OP model) there was no centralized place where people could go to find the dogpile and join in. I think right now at least, the risks that Cohost was designed to mitigate aren't really there with indie web, so the backlinks are valuable...
    • But commments as their own distinct entity still have value, because sometimes you want to remark on something without rebroadcasting it!

I am thinking a lot about how to achieve similar things using those open web tools within the constraints of a static-website (or "JAMstack") setup. I don't really want to go back to any kind of service that has a CMS; using Eleventy is just too nice in terms of the control that it gives me over templates and the long-term portability and safety of the material, which does not in any way live in an opaque database but rather in the filesystem on my computer (backed up in several places) where it belongs.

I like the concept of Micropub but I also like the static website workflow, and it occurs to me that it'd be pretty easy to build an adapter of sorts as just a server that ingests Micropub POST data and spits out git commits (which are, de facto, the standard for "publishing" posts on a Jekyll or Eleventy website). You could run this on an actual server or just as a local-machine daemon that adapts desktop micropub clients to a static website project. I know such a thing exists for Jekyll already, though a particular difficulty with these tools is that (as far as I can tell) micropub clients expect to spit out HTML, and what I'd want to eventually land in the git repo is in fact well-formatted markdown. I don't think that's intractable, though, and tools like Pandoc exist which can "un-render" Markdown.

It is possible however that I'm overthinking this terribly and the solution I really want is a shell script that 1. opens an ephemeral vim session, like the one you get to write a commit message 2. turns whatever I type into that session into an untitled post dated to now and asks if I want to immediately post it or save as a draft.

On the other half of what I'm thinking about: webmentions only provide the "reply" half of the reply/comment duality, and with comments I feel a bit more stuck. I would love it if something like Comentario existed, but set up to use IndieAuth as its only authentication method.

Authentication systems are the annoying hurdle of operating a blog with a comment system. Obviously having distinct "user accounts" adds complexity, but having to have a distinct account on the blog of every person you read and comment on is itself impractical. Traditional email/password login, besides not being terribly secure, requires a server somewhere that can send email—and sending email is itself an incredibly annoying task, because the email system is so choked with spam that we've kind of landed on an internet where we only let a single-digit number of major providers really send email.

Comentario itself supports Oauth with a few different services, but I think that's not good enough. IndieAuth is; it's a stable long-term solution. There's no need for the consumers of authentication to know or care about which providers of authentication are available, which means that you are not essentially maintaining your authentication system's usefulness against the ongoing churn of the internet. Using URLs as identities has some inherent anti-spam properties; domain names are simply a more limited commodity than email accounts, and they have a public verification mechanism baked in. Such a comment system wouldn't even need an admin password or any kind of secrets at all—you could log on to the admin panel by simply logging in with the domain name of the website itself. I believe other people have built similar setups as one-offs, but this is something that really is begging for a turnkey solution that occupies the same "slap this webcomponent on your template" niche as Comentario or Disqus.

Ultimately I am enjoying this exercise in trying to reconstract a good version of the social media web as essentially a hot-rodded, self-built project, even if I eventually hit a wall with how close I can approximate that experience.

Azhdarchid now supports Webmentions

Surely my presence is what will make this web standard truly take off.

As per my last post, I am now in full control of this blog's faculties. A big motivation here was to start working towards incorporating various IndieWeb features, generally at my own pace and with my own considerations for how I want things to work.

The first step in that direction is having some support for webmentions, which really means "doing several distinct things that, together, constitute participation in an ecosystem that we call webmentions as a gestalt entity." Webmentions really are just a way of notifying a website that you linked to it—if you're old enough to know what a "pingback" is, webmentions are basically pingbacks but hopefully perhaps without the problems that plagued that system.[1]

Theoretically, you can just add a little metadata to your website page templates that points to an API endpoint that can receive webmentions (which is provided as a service by Webmention.io). You can then just treat webmentions as notifications you can see on that service.

But in practice, you want some way to display webmentions on your website, so that you can "close the loop" as it were. It's easy to treat webmentions just as private notifications, but it's nicer to be able to show them off! I need the social proof that people like and approve of the things I write!

I decided to set this up in a fairly "relaxed" way. This blog is a static website built with Eleventy; I have it set up so that it's automatically built on a server, rather than building it on my machine and uploading it somewhere to be hosted. When that build step happens, it fetches webmention data from Webmention.io and incorporates it into the static pages. This will happen whenever I update the blog by hand, but I also have a cron job[2] running to auto-rebuild the blog every six hours, which means that new webmentions should eventually appear without human intervention. This is in a sense a very dumb way to do things but in another, higher sense it's a very smart way to do things; I'd call this the "slow social" if I was able to purchase the domain name slow.social, which sadly I am not. "Sometime in the next six hours" is, I think, a very reasonable timeframe for comments to appear on the blog.[3]

For my own implementation I heavily referenced Reilly Spitzfaden's post on the subject, A Quick Guide to Everything I Know about Webmentions. Reilly used Eleventy to build her website, so a lot of the code she shares I was able to directly adapt. Natalie (nex3) also had a useful conceptual writeup on her own blog, which is really a more focused follow-up to her longer essay A Sociable Web. What I have working so far is very simple but the nice thing about all this piecemeal "microformat" stuff is how incremental you can be with it... I do not think the whole "indieweb" concept functions if the demand is that you have to monolithically implement every aspect of the system all at once or it falls apart!

As for sending webmentions, well, uh. After this blog post finishes building I am just going to use curl to send the relevant ones. There's an existing package of command-line tools for sending webmentions but alas they are written in Python and I am spiritually opposed to ever typing pip install into a terminal.

Anyway, ultimately: you are now on the hook to webmention me, ideally this post specifically, so I don't look like a fool. Thanks in advance!


  1. In truth it's unclear to me what, if any, anti-spam mechanism exists for webmentions. If nothing else, I think webmentions can't be used as a DDoS amplification tool? ↩︎

  2. Technically it's a Forgejo runner, but anything you can configure with */30 9-17 * * 1-5 style syntax is a "cron job", to me. ↩︎

  3. In practice, I think the Nice Way To Do This is to statically fetch most webmentions and then use client-side javascript to backfill more recent ones. I also think long-term you probably want to store older webmentions in their original json representation in the git repo along with the website, meaning that you're not demanding so much from webmention.io's database because you can only fetch stuff that is newer than the most recent one you have already stored. Both of these are optimizations for a putative future where I really am getting a lot of webmentions on the regular, though. ↩︎

All Posts