Insultron2000 is here to serve!

It was a rainy, chilly day this past Sunday. I had been meaning to work on Picodon. But I was feeling low enthusiasm for that project. So, I spun my Wheel of Side Projects. It landed on “ActivityPub insult bot”–a similar theme but it felt like something I could actually get working in a day. So, Insultron2000 was born!

Insultron2000 only does vaguely Shakespearean insults, but it is learning.

I’ve also had “ActivityPub Lambda” on my maybe do list for awhile now. All the pieces are there in Amazon Web Services for a decent, low-maintenance ActivityPub node:

CloudFront can do SSL, caching, and use my own subdomain. An API gateway can handle all the inbox & outbox parts of ActivityPub via Lambda functions. SQS can take care of the delivery work queue by feeding jobs to functions. CloudWatch alarms can trigger periodic scheduled functions. And then, there’s DynamoDB and S3 for storing & publishing data.

While not as neglect-able as a fully static web site, AWS seems to be cheap at hobby scale and easy to let lie fallow when I get bored with the project. By speaking ActivityPub directly, I don’t need to maintain a fediverse server like Mastodon or Pleroma. I don’t need to rely or impose on anyone else’s community server. It’s very light. I’ll be watching to see how the bill on this thing shakes out, but I expect it to cost pennies per year.

I’m also hoping to refine this thing to be more generic. Push the ActivityPub machinery into the background. Support a simple local API for implementing future bots. Maybe reduce per-project code down to a single file with hooks for events and helpers for interacting with the fediverse.

This could even make it easier to stand up a single-user (or few-user) ActivityPub node. That’s also problem space at which Picodon is aimed: Lowering the trouble & cost of fediverse participation. The main difference with Picodon is living on Glitch. Being there should mean that it’s easier (and more fun?) to remix your own version of it. Conversely, AWS is kind of a slog for tinkering. I mean, Ironically, AWS felt more fun this weekend–but I chalk that up to novelty vs fatigue.

I’ve also got some notions to see how much of this thing I can push into static hosting. Not the inbox / outbox endpoints that expect POST requests, of course. But, the ActivityStream objects and collections can be served up from a static S3 bucket or similar. Since everything in the ActivityPub protocol is generally addressable via arbitrary URLs like a good REST service, I should be able to gin up a somewhat generic service that could be dropped into an otherwise static site not unlike Disqus for comments.

Anyway, I could delve into more technical specifics here, but I think I’ll wrap up for now. If you’re interested, come follow along at my GitHub repo.

And if you’re up for a dumb insult, drop a mention to on the fediverse!

Embracing stasis to get unstuck

One of the reasons I stopped using WordPress was that I didn’t trust myself to leave code running in the cloud. I have a habit of wandering away and leaving things unpatched & bitrotting for years. If only for that reason, a baked-not-fried personal web feels more responsible.

I switched from WordPress to Jekyll. But, since then, staring down a pile of Markdown files has felt like a limiter on my already diminished writing output. I thought using my favorite text editor would be comfortable & fun. I’ve realized that coding-me and writing-me are different. Many affordances for programming are death-by-paper-cut for prosing.

Lately, I’ve done one of three things with ideas for writing:

  • Spew the raw idea directly onto Twitter
  • Write it down in my paper journal and keep it to myself
  • Promise myself to wrestle with Vim and blog machinery to refine the idea into a Proper Article

The mental drag of #3 converts every post into a Project. There’s little room for medium-sized things I might have published in the past. To counter this, I’d like to lower the friction between my head, the words, and the web.

So. WordPress. It’s been awhile. Gutenberg seems to jibe with how I’ve been thinking about web writing: Streams of components. Prose broken up with headings and images. A pull-quote or two. Some code samples and interactive widgets. Hell, maybe an embedded arcade game emulation from The Internet Archive.

In years past, trying WordPress & Gutenberg called for a weekend spent converting all the things I’ve written so far to use the New Shiny as the Sole Instantiation of my Online Presence.

I’ve done this several times: From Movable Type to WordPress to Blosxom to PyBlosxom to WordPress to Jekyll to WordPress to my own DIY thing that taught me how to use Gulp. (Remember Gulp? So 24 months ago.) I’ve managed to keep a decade of writing intact as I moved the corpus between each of those systems. Kind of an achievement, I guess.

Maybe it’s thanks to my career experience in the marketing side of web dev. It felt wrong to build anything but a cohesive monolith with a consistent brand identity and user experience. We were always refreshing and redesigning and never letting anything stay the way it was for long.

I kind of hate that I ever did it that way for my own stuff. It’s not like I’m paying myself or even really learning much this way. This time I’ve decided to just start a new publication. Leave the old stuff be until I feel like messing with it again.

And, it’s not like I don’t already have plenty of publications out here on the web, anyway.

That brings me to some criteria of how my publications should work, going forward:

  • Offer cool URIs that don’t change!
  • Live under a domain name that I control.
  • Live on the cheapest, dumbest web hosting.
  • Survive the obsolescence or disappearance of the authoring software.
  • Endure decades of complete neglect.

Standardizing on static websites can satisfy all these things. A few of my publications could use a one-time URL-breaking change to my own domains. And then there are things like Mastodon, which require active web services to keep working. Still, ideally, these are the things to shoot for.

So, I’ve been playing with WordPress by installing it on the Synology NAS in my office. The thing you’re reading right now is a static website produced via the Simply Static plugin. I push the files out to Amazon S3 via some quick-and-dirty shell scripting. I’m thinking I’ll write more about this rig in a future post.

This place looks different than the publication where I wrote my last big thing. I’m telling myself this is okay. Maybe I’ll try something like Ghost for the next thing I write: Ghost does things with blocks & cards now, too, so that’s interesting. That would look different and live on its own sub-domain, too. I’m telling myself that this is also okay.

So, to sum up: By letting things I’ve made go static, I can shed encumbrances to try new things. And I want to try new things to see if I can remove limiters on my writing.

And why do I want to write more on the web? Well, that’s probably a notion for another post.

When Yak Shaving is The Point

I’ve been working on some side projects lately. I feel good about that. But, I usually don’t finish them. I feel bad about that. I always feel bad about that. This tends to kills my motivation.

Also, I keep thinking that on one of these projects, I’ll pull together a “Les Orchard Standard Boilerplate” with all my favorite things configured for my next project. But, almost every time, I throw together a new mix of language, frameworks, and modules that seems about as valid as my choices on other previous projects. From a certain perspective, this seems wasteful.

Maybe I shouldn’t be so hard on myself. It’s not like I have nothing to show for this work. In fact, I think I’ve finally realized something obvious: This is my favorite way to stay current. That these side projects stop short of useful is beside the point. This is how I get experience applying recent frameworks and techniques, driven by scratching my own itches and following serial enthusiasms.

And though learning for its own sake is fun, I’ve found that my side projects end up beingĀ  leading indicators: The thing I played with a month ago comes in handy for next week’s work project. (And I do tend to finish my work projects, since I’ve got a team and a boss and a mission and a paycheck encouraging my focus.)

Of course, sometimes I worry that this is just an intersection of confirmation bias and Stockholm syndrome: I often decide what stack to use for my projects at work. So, I could just be picking the things I’ve found most recently shiny. You know, I have made regrettable technology choices over the years.

I’m aware of this trap, though. So, I guess there’s another reason why I shake up the stack on every side project: I’m trying to keep myself from getting stuck on any particular combination. I’m trying to keep an open mind for possible benefits in the alternatives.

That brings me to the phrase that got stuck in my head this week: Yak shaving is the point. It’s not a distraction or a waste of time. It’s the yak shaving that sharpens the saw.

Okay now I’m mixing metaphors or idioms or whatever, but it makes sense to me at least!