So of course I set out to make my own text adventure game! The Plot of the Phantom was a Zork-alike dungeon crawl with plenty of hide-and-seek puzzle quests for objects required to advance the game (e.g. to open a door, you needed to find the key, which was in the bucket at the bottom of the well, but you needed to find a rope first, etc.). I spent most of the summer working on it, only to be flummoxed when the game completely consumed the 64K (expanded!) of RAM available. A year or so later I got involved in my high school's theatre program and started learning how to play electric guitar, and programming didn't feel that important anymore. So the floppy disks went into a box along with the computer and peripherals and it sat my parent's house until one day it was sold and that was that.
Let's now time-travel to the future a bit. It's 2018, and I've somehow gotten myself a career in software engineering, despite getting D's in maths and a BA in English that took five years to complete. I'm on a leave of absence, and I'm poking around Playfic marveling at the thousands of text adventure games written by hobbyists. This is how I learn about the existence of Inform 7, a modern programming language for creating text adventures ("interactive fiction" in today's parlance) that run on ported versions of the original Infocom software.
So I have an idea.
The The Plot of the Phantom code was gone, but I still had the original notebook of maps and objects. How fun would it be to recreate the game using the same virtual machine that Infocom used to create Zork? Well, not fun enough at the time I guess, because I quickly forgot about it after my leave ended.
But then: COVID. Stuck working from home, protests everywhere, wildfires turing the sky orange, a terrible election year. I needed something to escape, and that's when I pulled out that notebook started tinkering with Inform 7. I hadn't written down everything so it took some time to remember how some of the rooms and puzzles worked. I did some editing, removing some rooms, getting rid of scoring and treasure hunting, and — important! — changing the ending to be a lot less violent (I blame 80s action movies).
As I went about recreating my minature world, the backstory started to become...meta. The original version didn't actually have a story arc, you just had to get from one end of the dungeon to the other. Today the game has some references to the kid I was in 1984, and in some ways is a bit autobiographical. There are some new objects to examine and puzzles to explore, but the new game is largely what it was back then.
Large Language Muddle. I feel this. But I think there's an obvious collary: the people pushing AI this way don't care about craft, expertise, or "the journey." They care that there's a product to sell, and quality is very often an afterthought.
Just a QR Code. Generate a QR code for anything, right in the browser, no internet connection needed!
Tauri 2.0. An alternative to Electron for building cross-platform applications.
changedetection.io. Old-school web page monitoring for things like retail restocking, price changes, page defacement, etc. There's also a managed version, for money.
Hands are hard to draw! So I drew a bunch of them. One hand for every day in May, posted to BlueSky with the hashtag #MayoDeManos. I'm not certain I improved so much as confirmed that my style has plateaued. If I ever do this again I'll focus on simplified, less rendered hands and more poses of hands holding objects.
My inbox received a one-two punch in the form of notices that beloved Mozilla-owned read-it-later app Pocket and educational coding playground Glitch would be shutting down. More accurately, Glitch is discontinuing app hosting, and what remains to be seen is what Glitch will become without it.
Free/cheap web services come and go, but losing these two is harsh. I've used Pocket to collect stuff for years for my "Pocket Lint" series of link posts. Glitch will be missed as a free/cheap way to host a website, app, or "link in bio" page while learning how to do so.
It was, also, a cool place to host an ExpressJS + SQLite app that didn't need to be available 24/7. For the past twelve months I've been working off and on on a handful of low-traffic, indieweb-oriented CRUD apps that were designed to be chucked onto a platform like Glitch and embedded into any website, even those without a backend. Among them: a classic blog commenting widget, a webmentions service, and — mmm, savory irony! — a read-it-later link collection app to replace Pocket. Ha!
In the meantime, I've migrated my link-collecting from Pocket to Linkding, hosted for cheap at PikaPods. As for my Glitch projects, they're on hold until I can find another app host to deploy on.
If you have a recommendation, leave a comment on this post, which is using my aforementioned blog commenting app — developed and hosted at Glitch!
The Neat Gallery! image gallery generator now has the ability to support and preserve ALT text for thumbnail images with a simple metadata file that it generates for you in advance. Fill out this file and Neat Gallery! will insert your ALT text into the gallery HTML the next time you run the script.
A month ago I was idly swiping through IG Stories and was presented an ad for an upcoming rock show. I usually just ignore ads but the tiny snippet of audio — like Deftones, but gentler — grabbed me immediately.
Unfortunately I couldn't remember the artist's name the next day. I went searching through my Instagram history and could find no evidence that I had seen it. I had neglected to bookmark it (it was an ad!) and the ad itself wasn't for the band but the show, so it's likely that the promoter or venue or whatever was the actual source. That said, I did "rewind" the ad repeatedly to listen. Why couldn't I find a history of this? Why is it the one time I was interested in an IG ad enough to interact with it, there's no trace of it later?
I clicked on a Facebook Reel once and Facebook showed me baby elephant videos for three months, jfc.
Anyway, almost a week later the same ad got served to me again and this time I jumped on it: Scarlet House.
It's so hard to find new music that appeals to me the way this artist does, and it just annoys the hell out of me that even when the algorithms work they're still broken in some other way. So I am sharing this with you: Scarlet House is incredible, and there's a whole genre of zoomergazebands that are channeling gothy, MBV-era 90s alt-rock. Now you know.
Later this week the Neat Hobby! Newsletter crew will get a new eight-page comic called "From The Shallows," a work I'm especially proud of. There's also going to be a free "deluxe edition" which includes a downloadable color PDF of the comic, concept art, animation, and the complete formatted script.
Join us and you can grab this too! Or you can wait until I release it (the comic only, not the deluxe stuff) to the public later this year.
I'm still tinkering with my Neat Gallery! script which is a good excuse to post more photos. A soon-to-be-released version of this gallery script should include a way to create and preserve captions and alt text.
Please enjoy this collection of shots from last autumn, which includes an excursion to the Big Four Ice Caves (a melting portion of glacier that resides in a perpetual shade pocket — you do NOT want to enter the caves, and we didn't), various corn maze and farm visits, and lots of trees showing off their colors.
Why can’t HTML alone do includes? - The author showcases a neat old-school trick using a self-deleting <iframe>. Good discussion in the comments (spoiler: it's the security).
Is telling a model to "not hallucinate" absurd? - the author and (most) commenters believe that iterative prompt tuning and less reliance on external information can lessen hallucinations. Fair, but I don't get how a system that is designed to give you a reply, any reply, based on weighted probability can ever be 100% trusted not to just make stuff up. It's like telling dice to be less random!
Eject Disk - "A manifesto for everyone stuck in the system that keeps crashing you."
ffmpeg for Artists - "A cookbook of handy examples I myself use to easily create videos for social media, websites, etcetera."
JS Operator Lookup - Enter a JavaScript operator to learn more about it.
cron-job.org - A free service that can run scripts and invoke webhooks on a schedule. Useful for making a service request, triggering a website build, etc.
Every so often I'll want to post something here that I'm pretty sure will break feed readers. Some feed readers will scrub out things like JavaScript, style rules, and iframe elements in order to repackage them in an aesthetically-pleasing way or to remove content that might be considered dangerous. In any case there's a chance that my blog post might appear as a broken mess of images and text once a feed reader strips out any supporting markup.
My last post about easy image galleries is one such post, so I cooked up a way to specify content be hidden from feeds altogether. This 11ty filter will replace any element with the class feed-exclude with a link to the post instead.
So if a post contains something like this:
<p class="feed-exclude">Here is some content that might wreak havoc in a feed reader!</p>
...it'll be replaced with this in the RSS feed:
<p>(<a href="https://example.com/url/to/post">Visit the website to see this content.</a>)</p>
This filter also works on content enclosed in <feed-exclude> tags. I don't recommend that approach because it unnecessarily changes your document structure, but it can be useful if you want to exclude a large block of content.