site mascot

matt's web log black flag emoji

About Projects Contact
Chat room Discord server (external link)
Masto Mastodon (external link)
feed Atom feed (external link)

Index: 2019 2018

You should play Hypnospace Outlaw

March 18, 2019

Not writing a review, because I don't know if I can explain why Hypnospace Outlaw is great without spoiling it, but I 100% recommend it. My GOTY so far. If you look at the description and screenshots and think it looks like something you'd want to play, I guarantee you won't be disappointed.


March 15, 2019

The three randomizers (named colors, video game names, and demon names) have been added to the projects page.

A flaw with my CMS

March 13, 2019

Oops. I realized that there's a problem with my blog format. Permalinks... uh... aren't permanent. In the RSS feed I've been linking to each entry's "permalink" on the homepage, and (even if I waited until 2020 before I archive the front page) eventually those links won't work anymore. So, change of plans. The homepage will only show the most recent 5 entries. All 2019 entries will go on the 2019 index page, just like the 2018 index. Those links should stick around forever, assuming I don't post so much content in a year that I have to break a page up into multiple parts or risk destroying someone's bandwidth and CPU (somehow I doubt this is likely.) The homepage will just be a preview of the current year's index. I hate having a big list of links at the top of the most recent content, but I don't know how else to arrange it without... ugh... columns. I suppose having a slug at the end of each entry which links back to the top makes it tolerable, it just looks really ugly and not clean. Maybe I should make a CSS button that shows or hides the index, but I don't want to rely too much on fancy CSS tricks. Oh well, this works for now. You may also notice that I prettied up some other stuff. Each entry is now separated by a dividing line, and instead of a browser tooltip, mousing over a header link makes (permalink) appear off to the side, which should make the purpose of the link more obvious. Also, header/permalinks are no longer underlined. I think underlines are an important visual cue for when something's a link, but having the header of an article look so similar to links within the article felt wrong. It's the same color as the other links, and it's underlined/changes color/shows a tooltip when you hover over it, so I think that's a good compromise.

Living a 1.0 life

March 13, 2019

The 1.0 release of a piece of software should stand on its own as a functional, useful program that's as bug-free as the developer can possibly get it. If it never gets another update, it's still useful, in perpetuity, at least until another program comes along that does it better. Any release beyond 1.0, including bug fixes and new features, should not impede a user of the 1.0 software in any way. They should be able to go on using the software as they always have. They should be able to ignore the new features, or not update at all if they don't want them. If they DO update, the transition should be seamless. Any new functionality should be additive, not transformative, and ESPECIALLY not destructive, unless a feature of the program was catastrophically flawed in some way, and needs to be patched out temporarily or permanently to avoid putting the user at risk. I use a RSS reader for Windows called Feeddemon. It's the most functional program of its type I've ever used. The final version of the program is 4.5, and it was released in 2013. The website warns you that the program's no longer being updated, as if that's a fundamentally bad thing, and it drives me bananas. Finishing a program is GOOD. A final release is GOOD. I never have to worry about the program auto-updating and breaking my workflow. I don't have to worry about the developers stripping out functionality because they decide users don't want it anymore. I don't have to worry about it being fucking disrupted. I'm going to keep using Feeddemon forever, or at least as long as I use an OS it'll run on. It's as close to perfect as a piece of software can get. It's okay to say something's finished. No artist or creator is 100% happy with what they make. No novelist is happy with the final edit of their book. When a painter looks at their work hanging in a gallery, all they can see are the flaws. If you don't stop yourself, you can refine and polish a thing forever. Let it go. It's okay. Learn from it. Use what you've learned when you make the next thing. There's an insidious philosophy in software development that's creeping into other types of work: that once you put something out there, it's a failure if it's not constantly changing. With digital distribution, other types of data are looking more like software. We can download patches for our ebooks. Games, once a relatively stable type of software, are becoming massive, unwieldy masses of broken code constantly being poked and stretched into a shape resembling a whole. Everything is a service. For all we know, silent changes are being made to videos we watch on Netflix all the time. How would we know? No one has a copy of the original. The best thing we have is humans' notoriously shoddy memory. Amazon made headlines a few years ago when they removed copies of 1984 from Kindles because of some licensing snafu, a move everyone recognized as ironically Orwellian. We called them out, we yelled about it, but this has become the norm. Kindles by design are supposed to be connected to the Amazon servers whenever you turn them on, and they silently replace the books on your device with different versions. What's being changed? Probably just typos, OCR errors, formatting bugs, but who can say for sure? This is the new normal. Our phones update automatically, killing features that we once used, rendering software we paid for unusable. People shrug. That's the price of progress. Apple and Samsung release software updates for their phones that intentionally hamstring old hardware. People shrug. Who cares? They get a new phone every two years anyway. They get a slap on the wrist. Yawn. 5 million dollars. A fraction of a fraction of a fraction of a percent of their net worth. They're going to keep doing it, of course. People feeling like their old phones are bad is a core tenet of their religion/business model. Meanwhile, phones have reached a point where they're good enough for most people, new features are mostly meaningless, and what new technologies are being advertised are mostly absurd, often to the detriment of current functionality (like putting a giant hole in the screen.) But it's too late now. You can't put this beast back in its cage. It's out, and it's hungry, and it's going to devour everything. Apple has to keep selling new phones every two years. Not only that, they have to sell even more phones than they sold last time. Every phone has to do record-breaking numbers, and they'll make sure you buy one, by any means necessary. So yeah. Finish your project. Be happy with its imperfection. It's good for the planet and good for your soul. Change is good, but not the exclusion of everything else. If you become obsessed with always doing more, making it better, iterating and disrupting, the anxiety will eat you alive.

Mr. Teal: new comic package

March 12, 2019

A new comic package is available on the Mr. Teal project page: Listening to 11.975 MHz. I also cleaned up the comic packages section a bit, made it easier to see which packages were part of which comic, and added content warnings where I felt they'd be helpful.

Skewed priorities

March 9, 2019

30,000 people in the US die in traffic accidents every year. Every study in the world confirms that cities with more robust public transit have fewer traffic fatalities. And yet Americans are fine with ten 9/11s a year as long as they don't have to look at any scary poor people.

New syndication option

March 6, 2019

The site I was using to auto-syndicate blog updates was being wonky - it seemed to be changing the date on every entry to whatever the date of the most recent entry was, which I don't know how that would behave if someone was actually subscribed to it. So I decided to switch to a non-automated but also non-broken solution: I signed up for an account on, a specialized mastodon instance for bots and general-purpose users which I thought would be appropriate for this sort of thing. The feed link in the navigation bar has been updated to the atom feed, which you can plug into your syndication platform of choice, or of course you can just follow the account from your Mastodon or other activitypub-powered social media account (although be advised that this action is not anonymous.) I still need to figure out how to make a script that parses the front page and generates a syndication file automatically, but this should do until then. It's not seamless, and I'm sure I'll occasionally forget to update the bot when I post an entry, but I'm already logged into mastodon all the time anyway, so quickly switching accounts and posting a link shouldn't be too much of an ask, ADHD willing.

Mr. Teal 1.9.2 released

March 5, 2019

A new version of Mr. Teal is available on its project page. I added support for annotations with line breaks. Previously, all line breaks were ignored and including them would result in ugly run-on sentences. Now they're displayed, but because line breaks aren't treated as text for the purpose of drawing the background, this can make them difficult to read while the comic is displayed. This is why I also added a new command; you can press B to view the alt text and image information by itself on a solid black background. You can then use the arrows to navigate to the next or previous image as usual, or press any key to return to the comic. I think it's possible to extend the text background to the line breaks (or at least fudge it) but until I figure it out this seemed to be the best workaround. I also finally added a help screen, so you can press H or ? while you're viewing an image to see the keyboard commands. I made it a little more obvious what setting a directory as default does, and I changed the key to return to the main menu to the escape key. (Why did I pick L??) Also did a little housekeeping. Source is no longer on github, mostly because it's such a small project I don't want to deal with git. Plus it's been so long that I totally forgot how to use it. Cleaned up some outdated URLs and version numbers, updated the readme, and replaced whatever license I had in there with the unlicense. Finally, I added a new comic to the packages section: Pixel, a comic by Chris Dlugosz that ran on and off from 2002 to 2012. The idiosyncratic style of the commentary is what prompted me to figure out how to handle multi-line text files to begin with. I wish I had figured this out when I added Opplopolis, since what I ended up with is kind of an ugly compromise. I'll have to go back and re-do those at some point.

Review: The Wizard's Lair

February 15, 2019

Recommended ✔ Original review $2.99 on steam £1.99 on itch (DRM-free, includes steam key) This recommendation comes with a big caveat: as other reviews have pointed out, there's no "rest" command, so the only way to get your health back if you don't have any potions is by repeatedly mashing the "wait" button or walking back and forth, which would take several minutes and make the game unbearably tedious in the later levels when you have a ton of health. I used the free program JoyToKey to map one of the buttons on my controller to press the "wait" button 30 times a second, and this allows you to get health back at a reasonable rate. This function should be in the game, but I'm glad I was able to find a way around this problem, because other than that, I really like it. It's a short-ish minimalistic roguelike - I finished it in 8 hours (5 hours on Steam, 3 hours with the version, which is identical but doesn't have those hot cheevos) which for the asking price is totally fine. It's pretty chill, and there's not a lot to the combat, but I found exploring the levels, discovering things and figuring out strategies consistently rewarding. The game I'd most compare it to is Fatal Labyrinth on the Genesis, which is my favorite roguelike, but this game's even more streamlined - there aren't even any ranged combat options, no rings to equip, no magic wands. Combat is essentially just math - the enemies have almost no variation other than their damage numbers, so it just comes down to whether you have the equipment and stats to deal with them, and if not, whether you have scrolls and potions that can help. It's about as basic as an RPG can get. Despite this, I found it a pleasant experience. It's a good game to kick back and play while you relax and listen to some podcasts. If you're looking for a minimal roguelike RPG you can play with a controller, and you're willing to install JoyToKey, and you like games you can play with a podcast or stream on in the background, this is well worth the $3 asking price.

I'm not reading the wiki

February 12, 2019

If I'm interested in a game but I'm having trouble in it, and I look for help, and the most common advice I see is "read the wiki", I'm no longer interested in playing it. A wiki isn't a substitute for a manual or tutorial. A game that offloads the responsibility of teaching onto the community isn't a game I want to play. Why do we write manuals? To make sure the player has enough information. A good manual gives the player the tools they need to learn how to play the game on their own. It's not there to tell them everything. A big part of playing games is discovery, and when it comes to what you tell the player and what you let them discover on their own, it's crucial to find the right balance; you want the player to feel empowered to learn and discover without feeling frustrated at the mental roadblocks they face on the way. Imagine you really like the game Myst, and you recommend it to a friend, and your friend starts playing it on your recommendation, and your friend can't really make heads or tails of it, so they report back to you and say they're not having fun, and ask if you have any advice. You'd ask them what part they're stuck on, what they're not understanding, and try to give them some general pointers, work with them, emphasise things they maybe hadn't been considering. Help them look at things in a new light. You love Myst, and you want your friend to have a good experience with it, so you try to guide them as best you can. What you wouldn't do is give them a link to gamefaqs and say "Oh, read the walkthrough, that'll tell you what to do." Because you know that's not a good experience. That's more information than they should have. When a player reads the wiki, they're not getting the carefully curated guide that would be in a manual or tutorial, they're getting an unfiltered dump truck of whatever the existing player base wants them to know. And like any passionate internet fanbase, the amount of information they want to share is "all of it". They're excited to share their discoveries with anyone willing to listen, which robs the curious player of the joy of discovery that made the community fall in love with the game in the first place. A wiki is a valuable tool for players who want it, but I don't want it. I want a little noob nudge in the right direction, not an express ticket to Pwnertown.


February 10, 2019

When I changed my site to a blog-first layout, some of my non-blog projects were made inaccessible. Some of these have now been restored on the projects page.

An accidental joke

January 28, 2019

On one old episode of The Simpsons, Homer, the safety inspector at a nuclear power plant, had to suddenly look busy when the boss came into the room, so he jumped out of his chair, pointed at one of his co-workers, and instructed him to "be more safe!" Then, for contrast, he looked at another of his co-workers and said "safe enough." Since I always watched with closed captioning, I caught something most people probably missed: the captioners misheard Homer's second line, and instead of "safe enough", they captioned it as "safen up". At the time, I thought this would have ruined the joke for anyone who wasn't listening or couldn't listen to the dialogue; to me, the joke was the juxtaposition between the two co-workers, both of who were standing around doing nothing, and the totally arbitrary decision that one of them needed to be more safe, but the other one was adequately safe. I thought it was a little sad that somone who was hard-of-hearing would have missed out on that, and I was sure the line would have fallen flat. But now, I think "safen up" has its own appeal. "Safen" is a pretty funny word. The act of becoming more safe. Safening. I have a kid on the way so I safened all my electrical outlets. It's a word you use when you have no idea what you're doing, when you have only a vague sense of what does or doesn't make something safe. That's pretty good by itself. But it also juxtaposes nicely with "be more safe" in a different way: instead of deciding arbitrarily which co-worker needed to be more safe and which one was safe enough, he determined that BOTH of them needed to be more safe; scrambling to come up with something different to say for the second case, he said the same thing, except more poorly, and using a word that probably isn't real. I dunno, there's something to it. I wonder how I would have reacted if I didn't hear the dialogue and "safen up" was my only experience with it. I bet I would have laughed just as much. Edit: as usual, every word of every episode of The Simpsons has been picked apart again and again, and the debate re: the actual line still rages on. Argue all you want; the words that he says are "safe enough", despite appearing as "safen up" in both the closed captions and DVD subtitles. You'll have to show me a script or confirmation from one of the writers that "safen up" is the actual line before I'll believe it, and if that's the case, then we can chalk the confusion up to a bad line read by Dan Castellaneta.

Lost e-mails (update)

January 27, 2019

Update: e-mail situation fixed. Communications can resume as normal. Additionally, I realized that the site doesn't look THAT bad on mobile, so instead of having a mobile view option I just added some PHP that detects if you're on a mobile device and tweaks the layout accordingly.

Lost e-mails

January 26, 2019

When I registered this domain, the e-mail settings didn't change over, because hover's control panel is a useless piece of shit javascript blob that for whatever reason isn't accepting the change. As a result, I lost a a week of e-mail. I'm sorry. I'm going to migrate everything off hover, but in the meantime, if you sent me anything since monday, please send it again. The contact form is working again, or you can send it to rather than the address listed on the contact page. I'm very sorry.

Blog exclusive: VVVVVV level sneak peek

January 23, 2019

Thanks for reading my blog! It probably means you're interested in stuff I make. I haven't finished making anything in awhile, but I've been putting a lot of work into a VVVVVV player level over the last few weeks, and I thought maybe giving a little preview will motivate me to continue. It's a little different from most player-created VVVVVV levels - rather than being concerned with difficult platforming challenges (there are a couple, but they're not too bad) the main focus is on exploration and dumb jokes. It's called Abscondemonium, and it's a fun little trinket hunt in which you're robbing a bank. You can download the file here (right-click and save,) and play it in either your purchased copy of VVVVVV, or use the totally free and totally awesome Make and Play edition. The way you import levels depends on the platform, so download the appropriate version for your computer and follow the instructions. (On windows you probably want to put it in the c:\Users\[name]\Documents\VVVVVV folder.)

A new home

January 21, 2019

If you're reading this, hopefully you're aware that the blog has a new name and a new URL. I'd been wanting to move away from using my name as the domain name for awhile, mostly because I don't like it and don't really identify with it, but also just in case I ever need to say it aloud, it's a little easier to understand and remember because it's actual words. I had recently begun using the Blue Lander as my avatar over on cybrespace, and I thought it'd be funny to see if was available and cheap, and it was. I guess it's still not a phrase that rolls off the tongue or anything, but it's better than before. The transition went pretty smoothly, no issues getting the TLS sorted out like the last time I tried this. The old domain should be forwarding here soon, just going to take a bit for all the DNS to update. So yeah, new coat of paint, same gripping content as before!

Tape talk

January 18, 2019

When artists sell cassette tapes on Bandcamp, I wonder whether it's an actual analog recording, or if they're just recording the digital files to tape. "What does it matter? You wouldn't be able to tell the difference." Oh, I know, it's just. It's kind of silly to get a physical cassette tape if it's going to be exactly the same as the FLAC files I can download. Like, what would be the point? "What would be the point of doing it any other way if you couldn't tell the difference?" I mean... you know, sure, listening to tapes when there are way more convenient options is inherently silly. I know that. It's not a rational thing in the first place. That's why no one sells tapes anymore. But if someone was GOING to sell tapes, wouldn't you think that means they care enough about it to go all the way? Like, they're probably nostalgic for analog music the same as me, so wouldn't they want to do it right? "You know the chances they didn't record digitally in the first place are close to zero, right?" W... what do you mean? There are still analog multi-track recorders... "Yeah, and a good one is going to be super expensive and way harder to use than a computer. You really think an independent solo artist selling tapes on Bandcamp is going to have access to that?" But... if there's no analog recording, then selling a tape really is just a pointless gimmick. "Wouldn't it be a pointless gimmick anyway, if you wouldn't be able to tell the difference?" But... but I like tapes. "Why?" ...shut up, me.

How do I RSS?

January 17, 2019

Okay, things are looking good. Got some PHP going for the menus, got a mobile mode working (which is just the page with no CSS, because trying to make a website layout that looks good on both computers and mobile devices without javascript is basically impossible. Best to just have no style information at all and let the phone figure out how to deal with it.) The only thing Hugo was doing for me that I can't do myself, at least so far, is create an RSS/XML/Atom/JSON/XHTML feed for people to subscribe to and see updates in their blog reading software of choice. I'm using a site called Politepol to generate a feed based on my HTML tags, and when it works it works, but it seems to not work about three quarters of the time. If you're reading this and you can help me figure out how to do this (or tell me what the difference between RSS, XML, Atom, JSON and XHTML is, seriously they all look exactly the same) then please drop me a line.

Mario ideas

January 16, 2019

Okay, so the concept of "lives" shouldn't exist, obviously. That's one thing Odyssey did right. But you still need a good reason to collect coins, so:

Some super power-up ideas, off the top of my head:

I like this a lot better actually

January 8, 2019

Every blog entry having its own page added a veneer of importance I wasn't comfortable with for many of my entries. Sure, it's useful for linking to a specific entry instead of just a wall of text, but being diligent about permalinks should accomplish the same thing. I'd much rather have all of the entries for a year all glommed together. It makes me feel better about just shitting out a totally garbage thought and calling it a post. Lucky you! This entry is a test to see if I can use pre tags to format text with linebreaks instead of having to use p tags or br tags everywhere. That was always my least favorite thing about html. It disrupts the writing process to have to pause to insert tags every time I want to start a new paragraph. I remember the pre tag not really being suitable for this sort of thing, since it would have weird behavior like not respecting page width and running off into the bounds, but maybe now that CSS is a thing I can use that to whip the pre tag into shape.

Okay, it's not a new blog...

January 8, 2019's an old blog with a much easier workflow. The idea is that composing a new blog entry is as simple as opening the index.html file, adding the new entry at the top and hitting save. I want to at least have permalinks for every entry, which makes things a lot uglier. I hate it. I hate having to wrap every paragraph in a dumb p tag. I hate having to make sure I copy and paste the date/title/permalink code in the right place. I hate having to manually place the "top" button. But for now I think this is the solution that presents the smallest barrier to entry re: actually writing. I don't have to load up a command line utility and generate a page and upload it to the right placee and make sure the media files are in the same place. Everything in one folder. No muss, no fuss. End of the year comes around, I take everything and dump it all into a 2019 folder. If we're still around. Still, I really wish I just had a big "write a blog" button on my desktop I could push and it pops up a box and fills in the date and has a box that says "title" and a box that says "post" and I just write it and click post and it all just happens. You know what had that? Livejournal. Livejournal was pretty rad, once upon a time. But I can't just someone else's infrastructure. And this seems like the best solution for now. seems interesting, but as far as I can tell there's no way to adjust things like background color and font size, and you need javascript to post, and the post itself has javascript on it. There's, which is my favorite minimal text-sharing platform, but there's no way to edit, or have a collection of links, or any kind of continuity. Good for one-shot text shares, but not suitable for a blog. As far as I can tell, the type of blog I want doesn't exist. Ah well, this will do for the moment.

New Year, New Blog

January 8, 2019

I like hugo but it's too much of a pain in the ass to go through the whole process of generating a single static page for each and every entry. What's the need? It's not like I post that many images, and when I do, it's usually not large. A single page with all of my entries for 2018 would almost certainly be under a megabyte, at least after I thumbnail-ized the occasional large image I posted. That's like a quarter the size of the average javascript blob, so I don't know why I'm worried. Old content has a bunch of broken links now, but I'll clean it up later.

It Copied Right 2019 | Privacy Policy