Epiktistes

Epiktistes is my home in the Fediverse. It is an instance of Ktistec, a single-user ActivityPub server like Mastodon, but with fewer users and fewer commits. Here's my introduction (last updated early-2025).

I wrote a series of posts about optimizing the performance of the Ktistec server, its build time, and its executable size: part 1, part 2, part 3, part 4, and part 5.

Some things I regularly write about, organized by hashtag:

I also wrote some #pointfreeverse.

Todd SundstedJohn Carlos Baez

Physics is really bizarre and wonderful. Here I start explaining why the Standard Model has U(1) × SU(2) × SU(3) as its symmetry group. But I don't assume you know anything about groups or quantum mechanics! So I have to start at the beginning: how the electromagnetic, weak, and strong force are connected to the numbers 1, 2, and 3. It's all about quunits, qubits and qutrits.

You've heard of bits, which describe a binary alternative, like 0 and 1. You've probably heard about qubits, which are the quantum version of bits. The weak force is connected to qubits where the 2 alternatives are called "isospin up" and "isospin down". The most familiar example is the choice between a proton and a neutron. A better example is the choice between an up quark and a down quark.

The strong force is connected to qutrits - the quantum version of a choice between 3 alternatives. In physics these are whimsically called "red", "green" and "blue". Quarks come in 3 colors like this.

The electromagnetic force is connected to "quunits" - the quantum version of a choice between just one alternative. It may seem like that's no choice at all! But quantum mechanics is weird: there's just one choice, but you can still rotate that choice.

Yes, I know this stuff sounds crazy. But this is how the world actually works. I start explaining it here, and I'll keep on until it's all laid out quite precisely.

youtube.com/watch?v=7Umq7yXoVAc

Todd Sundsted

mastodon's creative extensions to oauth are gonna make me cry...

Todd Sundsted

Ktistec is going to require that clients support PKCE

Todd Sundsted

both 1000xRESIST and Clair Obscur: Expedition 33 are listed a "playable" on the Steam Deck but not "verified". it sounds like some of the problem might be frame rate. i'm unsure whether or not to take the risk. sadly neither run on a mac.

Todd Sundsted

ugh, i just spent an unfortunate amount of time obsessing about focal points...

Todd Sundsted
Release v3.1.3 of Ktistec

There are two big features in release v3.1.3 of Ktistec: auto-approve followers and a new image viewer.

Auto-approve followers is conceptually simple ("the server automatically sends an Accept activity when it receives a Follow activity") but it required extensive changes to some of the oldest code in the codebase: the inboxes and outboxes controllers. I refactored inbox and outbox side-effect processing into independent services, which made it possible to support side-effects like auto-approve follow (and also auto-follow back), without having to go through the controllers.

A more significant change for me personally was replacing the lightGallery image gallery (an external dependency) with my own implementation. It's not as slick, and not as full of features—I wrote it in two days—but it is fully free software, and that's important to me.

Added

  • Add admin page for managing OAuth access tokens.
  • Add support for auto-approve followers. (fixes #26)
  • Add support for auto-follow back.

Fixed

  • Prevent triggering actor refresh when user is anonymous.

Changed

  • Replace "lightgallery" dependency with custom image viewer.
  • Set OAuth access token expiry to 30 days (previously expired after 24 hours).
  • Refactor inbox and outbox processing into dedicated processor services.

The OAuth changes set the groundwork for better support of the Mastodon API and the Fediverse clients that depend on it. Stay tuned!

#ktistec #fediverse #activitypub #crystallang

Todd Sundsted

I really don't like iOS 26. It's not so much the liquid glass look—I've disabled most of the effects. It's that almost everything else I use seems to take an additional step. For example, to get rid of a tab in Safari, I now have to 1) tap the little dots (⋯), 2) tap item "All Tabs", 3) dismiss the tab.

#ios26

Todd Sundsted

terrorform: episode of Red Dwarf or open-source infrastructure as code tool?

Todd Sundsted

I’m exploring features for navigating and reading large threads. A “large thread” is a thread with more than 250 replies. I personally can’t easily consume all of that, and quite a number of replies are uninformative in any case (they are simple statements of agreement or dismissal).

Some things I’m trying:

  • Highlighting replies by the original poster—the assumption is that, if I'm interested in the thread, I'm interested in what the original poster had to add.
  • Highlighting replies with a larger than average number of replies, in turn—the assumption being, they must have added something meaningful to the thread.
  • Maybe longer replies are more interesting? Highlight them?

By way of replies to this post, I am definitely interested in others' thoughts on good heuristics.

#ktistec

Todd SundstedEugen Rochko
A small pumpkin with a smiling face lit up from the inside by a tea candle on a windowsill.

ActivityPumpkin