#ktistec 160 hashtags

Todd Sundsted

I ended up with a solution that exaggerates the focal point offset from center to try to get more of the image around the focal point inside the container:

def normalized_focal_point
  return nil unless has_focal_point?
  x, y = focal_point.not_nil!
  norm_x = x / 2 + 0.5      # normalized x = x / 2 + 0.5
  norm_y = -y / 2 + 0.5     # normalized y = -y / 2 + 0.5 (y inverted)
  # push the focal point toward the edges so that more of the focused image is in view
  {
    exaggerate(norm_x),
    exaggerate(norm_y)
  }
end

private def exaggerate(value, strength = 0.75)
  centered = value - 0.5
  exaggerated = centered.sign * (centered.abs ** strength)
  (exaggerated + 0.5).clamp(0.0, 1.0)
end

Reading up on object-position and its use for focal point support in Mastodon and looking at examples in practice it doesn’t seem like the existing implemented approach works well (link). I'm open to better ways to do this, and I welcome course correction if I'm heading in the wrong direction.

#ktistec #activitypub

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’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 Sundsted
Release v3.1.2 of Ktistec

I'm working on federation issues.

👻 Release v3.1.2 of Ktistec improves support for Lemmy and community servers like it that distribute content by wrapping it in Announce activities (FEP-1b12: Group federation support). Ktistec also supports the audience property, although support for that was removed from Lemmy earlier this year.

🎃 This release also adds support for delivering to shared inboxes, which are widely supported by other ActivityPub servers. Despite being federated, the Fediverse is not highly distributed, and this optimization can reduce outbound delivery traffic by 10-20x.

Added

  • Support for the Dislike activity.
  • Support for the audience property on activities and objects.
  • Support for delivery to shared inboxes.
  • Support for full-width hash signs in hashtags (e.g. #日本語) commonly used in Japanese and other Asian languages.

Fixed

  • Strip HTML from object summaries rather than escaping it.
  • Properly unwrap Lemmy-style Announce activities.

Changed

  • Destroy discarded drafts instead of deleting them.

Enjoy!

#ktistec #fediverse #activitypub #crystallang

Todd Sundsted

i'm too lazy to read a thread with 420+ replies so i'm building a little tool using the #ktistec API that will summarize that thread for me.

time to just read the thread: probably 15 minutes. time to build the little tool: well i started on it an hour ago and...

#LazinessIsAVirtue

Todd Sundsted

i added better support for delivering to shared inboxes in #ktistec. kind of lame, but this post is how i'm testing it...

Todd Sundsted

I'm also interested in feedback on the support I added for RSS feeds.

#ktistec #rss

Todd Sundsted
Release v3.1.1 of Ktistec

Vacations are wonderful. It is a privilege to be able to travel without worry. It's also wonderful to be home, and to have the time to work on projects I care about. With those thoughts in mind, I present release v3.1.1 of Ktistec, an ActivityPub server written in the Crystal programming language!

This release is a mixed bag of small features and improvements:

Added

  • Auto-link URLs in posts. (fixes #24)
  • Support searching by actor username. (fixes #102)
  • Support hourly granularity in metrics charts.

Fixed

  • Mark actor as down if refresh fails.
  • Remove draft posts from the everything collection.
  • Ignore charts with no points in the date range.
  • Ensure HTTP::Client instances are closed.

I added support for multiple users at the beginning of the month. I'm very interested in feedback on how that's working out for anyone using it.

#ktistec #fediverse #activitypub #crystallang

Todd Sundsted
Release v3.1.0 of Ktistec

This release of Ktistec merges the main_3.x branch into the main branch.

Managing two branches, and two releases, was a lot of work. And sometimes changes were lost in the shuffle, like:

Added

  • Add a small banner to highlight "offline" status.
  • Support YAML MCP prompts and hot-reloading.

I have about a dozen more features and fixes that are ready for the next release, but to keep things simple, I'm doing the merge first, in its own commit.

#ktistec #fediverse #activitypub #crystallang

Todd Sundsted

wondering what’s the easiest thing around that can quickly take a video and transcribe the audio? ideally in a way that I could add a “transcribe” button to #ktistec. i appreciate the benefits of video but it’s not the format i’m looking to consume most of the time.