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 Sundsted

is it the expectation that atomic should be used for all class level variables now?

#crystallang

Todd Sundsted

I have a workflow where I “move” (cherry pick) commits from an R&D branch to the main branch and then rebase the original branch on top of main. Today I learned that this works even if the moved commits are still present on the original branch. Git detects their presence in the history and doesn’t try to add them a second time, which is what I was afraid would happen!

#til

Todd Sundsted
Release v3.3.3 of Ktistec

I have started work on a Mastodon-compatible API layer intended to support the many Mastodon front-ends available. It is incomplete and requires an explicit build flag to enable, but what's there (the main timeline) already works with the official Mastodon app, Tusky, and Phanpy.

Here's the full changelog:

Fixed

  • Editor focus now stays in the editor after the first draft is saved. (fixes #139)
  • Filter settings instructions. (fixes #135)

Changed

  • Improved consistency of mini button colors.

As always, check out the full diff for the complete details.

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted
Release v3.3.2 of Ktistec

This small release focused on two big deliverables: support for the latest version of Crystal and fixes for a few delivery issues.

Previous releases supported a wide range of Crystal Language versions, but ran into problems with version 1.17.x and beyond due to breaking changes in the standard library. This release works on 1.19.1 but also requires at least 1.19.1.

This release also fixes a bug, present since mid-2020 when HTTP signatures were first added, that resulted in signatures some fediverse servers wouldn't accept. Mastodon did, but with the proliferation of new ActivityPub servers, I increasingly encountered servers that did not.

Here's the full changelog:

Fixed

  • HTTP signature keyId now includes #main-key fragment.
  • IRI matching during dereferencing.
  • Broken down-detection for actors.

Changed

  • Fall back to Activity Streams context if supplied context is empty.
  • Deliver to personal inbox if delivery to shared inbox fails.

It's always good to stay up-to-date on releases. But if your platform doesn't yet support 1.19.1, I've also released a parallel branch that still runs on 1.16.3 and earlier. I'll maintain that branch for the next few releases to give everyone time to upgrade.

#ktistec #crystallang #activitypub #fediverse

Todd SundstedJayVii

My never ending quest to redefine my news reading habits have fallen back to old school newspaper reading, but with a twist!

Using a pretty cool RSS aggregator that writes into templates of arbitrary formats in combination with some RegEx foo and a full-page scraper, I am now able to read "newspaper" every morning either on the phone, PC or ebook reader and be done with it for the rest of the day.

I realised that I fall into the habit of checking news constantly, even when using classic RSS readers for it. During my test-flights in the past week, this hacky project appears to work-for-me(TM)

Git-Repository of "Zeitung", a news aggregator in newspaper style as HTML/PDF/EPUB

Todd Sundsted

I’ve adopted the Oxford comma, but damn my mind struggles with the syntax.

Todd Sundsted

I think I’m going to work on a Mastodon-compatible API next. I did all the hard work figuring out what I need to change months ago so this should be smooth. I’m happy with the existing #ktistec UI but there is a lot of interesting work on the client side that I’d like to sample.

FWIW, I’m not opposed to C2S—Ktistec comes with a lot of the necessary abstractions. But I feel like my users, myself included, will get more bang out a Mastodon-compatible API. (But change my mind!)

Todd Sundsted
Release v3.3.1 of Ktistec

The latest release of Ktistec addresses the shortcomings of the previous release that became apparent after using quote posts in production for a few days. So far, there have been no major bugs, but there was room for improvement.

Here's the full changelog.

Added

  • Federation documentation (FEDERATION.md).
  • Visibility (private or direct) icon in object summary.
  • Object social activity details include dislikes.
  • "quotes-me" theming class for objects.
  • Notification for quote posts.
  • MCP integration for quote posts.

Changed

  • Renamed NodeInfo siteName to more standard nodeName.
  • Increased hard-coded limits for actor attachments and pinned collections.

Fixed

  • Displaying quoted posts in draft view.
  • Visual indication of nested quotes in object view.

I added a FEDERATION.md document to the project. This is documentation required by FEP-67ff on "information necessary for achieving interoperability with a federated service". The document describes, at a high level, what federation protocols and standards Ktistec currently supports.

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted

it would make me very happy if more people on the fediverse, especially those that see themselves as pillars of progressivism, treat others with a little more grace and thoughtfulness.

(I’m not advocating for being nice to fascists. I’m asking you to be nice to people here who share 99.9% of your values and differ on that one thing.)

Todd Sundsted

RE: epiktistes.com/objects/VeS-8Wd

nodeinfo fixed in 3b56d2a6
FEDERATION.md added in cb3ef061

Todd Sundsted

working on writing FEDERATION.md i already found one easily fixable deviation (siteName instead of nodeName in nodeinfo).

#ktistec #ActivityPub #Fediverse