parker higgins dot net

Even more public (sub-)domains

I was surprised and delighted by the pick-up to my little host-finding script this last week, but I had to crank the surprise-and-delight meter up a notch today when Ed Summers messaged me on Mastodon to let me know that he’d done a bunch of cool work polishing and packaging that script. That description is a little generous, too: Really, Ed came in and made a real project out of a pretty thin idea, and I’m very grateful for it.

So now! “public_domains” is live and even available on on PyPi for pip installation, and the new version improves on my idea in a bunch of ways. whois checking, which had been a bit flaky and required a bunch of network connections, is now optional, improved, and has a progress bar. And just today, Ed added the ability to search Project Gutenberg for a title and check for possible hosts in the first matching result. Very fun.

As an aside, keen observers may note that the my previous post on this topic was the first blog post I’d put up here in years. In the meantime, too, I’ve done some behind the scenes work such as moving this site from Wordpress to Jekyll.

I’d already been giving some thought to relaunching this site to catalog my thoughts and work in a place of my own, and that feeling has been deepened as Twitter is under whatever tumult it’s currently facing. I have to say, somebody like Ed coming along and building on a bit like this really feels like the best-case scenario, and a fun throwback to earlier blogging days. We’re back!

Public (sub-)domains

The tremendous influx of traffic to Mastodon got me thinking that it might finally be time to set up my own instance, and how-to posts from Jacob and Simon have only increased that interest. But as a little branding excercise, and especially if I want to offer accounts to a few close friends, surely I could do something a little more fun than just my first and last name.

Many Mastodon instances are on subdomains, and since the early days weirder new-style TLDs have been de rigueur. (The flagship has always been at a .social!) So I set out to find three-word phrases where the third word is a 4+-letter top-level domain, using as my first source text Moby Dick.

The results were great! The script I wrote output all possible options, which I then spot-checked to see which were available, but I’ve since updated the script to do a quick whois check to see if the domain is already registered. (whois support is a little spotty for some of the weirder domains, so many are inconclusive, but I was surprised at some of the good ones available.) As of right now, here are some possible instances available for registration:


Wouldn’t those all be great places to call your home in the fediverse?

Normally I would wonder to myself if this kind of thought experiment is cool but this time I feel like I’ve got external validation in the form of the reaction to this thread on Mastodon, which has also been great. Somebody even bought the domain on the strength of the find.

People responded with some cool possible instance names from The Great Gatsby, Frankenstein, White Noise, the King James Bible and more. Really fun.

The little Python script that finds these uses NLTK to tokenize big text files first into sentences and then, within sentences, into words. Then it checks to see if there are three long-ish words in a row where the third one is on a list of TLDs. Since posting that script on Mastodon yesterday, I’ve updated it with the built-in whois check as well.

As of now, I’m still tooting from a boring old (well-run!) general purpose instance, though who knows… with available, maybe I will move soon.

New Rossword puzzle

Sorry I Haven’t Posted for a while!

I do of course intend to return to the blog, yadda yadda, lots of updates to share. One quick thing that merits an update today is that I’ve co-constructed a crossword puzzle with Ross Trudeau over at Rossword Puzzles. Go check it out.

Ross is a mentor to many in the crossword world, and I’m lucky to have weaseled my way into that cohort through being friends with him. We also (and this should be the subject of another blog post! The inspiration is returning, see!) host a regular Twitch stream called Cursewords Live, which involves a lot of solving puzzles in my cursewords software.

Ross and I previously co-constructed a Universal Sunday puzzle (available as a PDF) published on January 10 this year.

1923 zine and website launch

Towards the beginning of this year I ran a Kickstarter campaign for a monthly zine of archival material from the year 1923.

That year has some copyright and public domain significance. For twenty years following the 1998 Copyright Term Extension Act, 1922 was the most recent publication year for which a given work could be categorically determined to be in the public domain. That made “1922 and earlier” a common category for digitized databases of older works. On January 1, that border advanced for the first time in two decades, and the zine is something of a celebration of that fact.


The zines sold out quickly—I only intended to offer a hundred subscriptions, which were snapped up in about two hours—and so I added a “digital subscription” option. That meant I would have to figure out how to distribute the zines digitally too, but I was probably going to want to do that anyhow.

I sent out and posted (for backers only) the first two issues together after the campaign closed in the beginning of February. This week I sent out and posted the third issue, and so I’ve removed the “paywall” for the first two.

Which means: you can now check out the January and Feburary issues of 1923 at

This has been a big endeavor for me, and I’ve had to learn a lot about a tiny area of publishing and fulfillment.

In the coming days I’m going to publish some notes about my zine-creating process, which I think is sort of idiosyncratic but may also be instructional. I’ve written a few scripts and one-liners to ease the process, and I’d love if those ended up being helpful to other zine makers!

Introducing: cursewords, a crossword puzzle solving interface for the terminal

I’m releasing new software today for solving crossword puzzles in the terminal. cursewords is a small Python program to open, navigate, and solve puzzles stored as .puz files. If you’re a Mac or Linux user, you can install it today by running pip3 install --user cursewords in your terminal, and then use the cursewords command to open a .puz file on your computer.

In case you’re not a crossword nerd: the .puz file was developed for popular solving software called AcrossLite, and it remains the most popular format for transmitting crosswords online, from independent creators all the way up to the New York Times.

cursewords in action on my terminal

In fact, many independent puzzle creators only distribute their puzzles as digital files. For example, I subscribe to a handful of excellent puzzle outlets—American Values Club, The Inkubator, Crossword Nation, Fireball Crosswords—that don’t offer an online solver or an app like the Times does. As a Linux user, I didn’t have a lot of options to open them: AcrossLite isn’t compatible, Web-based solutions have their limitations, and beyond that, I wanted to be able to introduce fun features like a “downs only” mode that hides the across clues. (You can try it: running cursewordswith the --downs-only flag activates this very challenging mode.)

But also, I liked the challenge of writing my own software as a way of thinking more about how crosswords are built and how we hold them in our head for navigation. I also love the retro-computing aesthetic that comes with terminal applications, and—while I think this is the first ever terminal crossword client—that it’s mostly based on tech that has remained unchanged for decades. In that way I’ve likened it to efforts to, say, imagine what a car built with first-century technology would look like: it’s not necessarily the most useful or the best, but it’s instructive (and in my case, actually works)!

As the name may suggest, cursewords relies on a famed programming library called curses that helps to build text-based user interfaces. It is also heavily indebted to a curses wrapper called blessed, and a library called puz that reads and writes .puz files.

If you’re interested in cursewords, please give it a try and let me know how it works for you. I’ve been very interested in how to solve this problem for over a month now and I am excited to talk about it more publicly.