fediverse

28 posts

Todd Sundsted@toddsundsted@epiktistes.com
·

I shipped back-end support for algorithmic feeds in the last release. In this release I shipped front-end support. The feature needs testing and polish, so it's still not possible to navigate to the feeds editor, but if you know where to look, you can try it 😉.

"Algorithmic feeds" currently means support for custom hashtag, mention, and keyword feeds (e.g everything that mentions "" and "" but not "x" or "facebook").

Here's the full changelog:

Added

  • Front-end support for user-defined algorithmic feeds.
  • Allow editing optional properties on published posts.
  • Support undoing a dislike.

Fixed

  • Handle concurrent duplicate inbox delivery.
  • Don't apply custom themes on the drafts and posts pages.
  • Adapt duration units in thread analysis.
  • Restore the spinning loader.

Changed

  • Restrict theme overrides to color and reduce reliance on !important.
  • Render the homepage description in a basic segment.

Removed

  • The deliver_to state and the recipients fallback.

In the next release, algorithmic feeds get wired into the navigation!

Replies0boosts0likes
André Menrath@linos@graz.social
·

There now is a poll plugin for that has full support.

Since a few minutes it is finally officially available on WordPress.org.

wordpress.org/plugins/polls-fo

Thanks to @nlnet and @NGIZero for support the initial development of this piece of software. And thanks to @pfefferle for his ongoing work on the WordPress ActivityPub plugin @activitypub.blog !

I am happy to receive reviews and am ready to fix stuff in case issues should arise!

Replies1boost0likes
harib_murshidi@harib_murshidi@mastodon.social
·

@MrLovenstein I am seeing your stuff on many places outside and inside the and most of the time people are editing out your they chop away (edit out) your 'name' 😩

Replies0boosts0likes
Todd Sundsted@toddsundsted@epiktistes.com
·

There are two significant new additions in release v3.8.0 of ktistec.

First, the actor cards on the followed/following pages show relevant actor status. On the followed page, it tells you how long it has been since that actor published an activity (create, announce, like, etc.) that was sent to your server. It's a proxy for how active they are (or are not). On the following page, it tells you how long it has been since you have been able to send to that server. It's a proxy for whether that server is reachable or that actor is still alive.

Second, the backend for user-defined algorithmic feeds is in place, along with a keyword/hashtag/mention feeds implementation. You can't set up a feed via the user-interface, but the feeds work if you set one up directly in the database—which is how I've been previewing them. I plan to release the frontend next week.

Here's the full changelog:

Added

  • Display activity status on actor cards.
  • Back-end support for user-defined algorithmic feeds.
  • Apply community-relayed moderator deletes received as a Group's wrapped Announce.
  • Follow a web page's rel="alternate" link when searching.

Fixed

  • Avoid loading entire has_many collections when constructing child records.
  • Evaluate the same-origin fetch gate against an embedded node's own identifier.
  • Accept a delete of an uncached object or actor without verification.
  • Catch MIME::Multipart::Error in local file-upload handling.
  • Map malformed request-body parse failures to Bad Request.

Replies0boosts0likes
Dr. Victoria Grinberg@vicgrinberg@mastodon.social
·

Btw., if you poop on the simple things (food, hobbies, fun experiences, photos of pets or flowers, that kind of stuff...) I or people I like enjoy and share here, it's an instant block.

There is little enough happiness in this world (and in the ), so the only way to deal with folks who stomp it down even more is throwing them out of the conversation.

Replies1boost0likes
Todd Sundsted@toddsundsted@epiktistes.com
·

the backend for ktistec algorithmic feeds just landed in commit 627c9292.

it's a proof-of-concept implementation of hashtag-mention-keyword feeds popular in other servers with any/all/none clauses—not very algorithmic but it gets the plumbing right and tested. it builds on top of the materialized views support i implemented a few releases ago.

Replies0boosts0likes
Todd Sundsted@toddsundsted@epiktistes.com
·

i'm sure inline json-ld contexts with server extensions seem like the wrong thing, but they're preferable to identical copies of the same context hosted externally and served by a dozen or more instances of a server or family of servers.

i could be persuaded to change my mind if a server allowed meaningful customization. but if a server is publishing a canonical vocabulary of extensions for that server, it should be hosted in a single, well-know location.

Replies0boosts0likes
Todd Sundsted@toddsundsted@epiktistes.com
·

I started to work on algorithmic feeds but was side-tracked by interoperability work. No complaints. It turned out to be a productive detour.

Here's the full changelog for release v3.7.0 of Ktistec:

Added

  • Support FEP-2c59: Discovery of a Webfinger address from an ActivityPub actor.
  • Support ActivityPub Update activities for actor profile changes.

Fixed

  • Disambiguate reblog IDs from status IDs. (fixes #151)
  • Correct the quote_policy mapping to public/nobody values.
  • Ignore malformed pagination parameters instead of raising.
  • Treat "cannot be reconnected" errors as connection failures.
  • Infer a media attachment's type when mediaType is missing.
  • Faster, case-insensitive, actor username lookups.
  • Faster statuses_count using an approximate count.

Changed

  • Resolve JSON-LD contexts by matching their digest against a bundled copy.

The first version of algorithmic feeds won't be very algorithmic—it will let you create a feed that filters by keywords, hashtags, and mentions. That covers a lot of ground for me personally, and lays the groundwork for future enhancements.

Replies0boosts0likes
Todd Sundsted@toddsundsted@epiktistes.com
·

It is said that there are only two hard things in computer science: cache invalidation and naming things. The story goes: you have something that is expensive to compute, so you compute it once and then you cache it and use the cached value in the future. But the inputs to that computation change, and so the cached value grows stale. You have to decide when and how to recompute that value.

In Ktistec, presenting accurate tag counts is expensive because not every tagged post counts. Posts are deleted, actors are blocked. My own drafts don't count, but when they're published they do. A post tagged with the same hashtag more than once, must count as one. And tag cardinality is not uniform: has hundreds of thousands of posts, others have one or two. Even with indexes, there is no single query that counts all cases in an acceptable amount of time.

So I reached for a cache, counted once and then cached the count. Because I didn't want to maintain adjustments from every place in the code that changed something that touched the count, I settled for eventual consistency and recomputed counts after every server restart.

As it turns out, that's not good enough. On a server with reasonable traffic, an event that affects some tag's count happens every few hours. Days or weeks later there is significant drift. Worse, the implementation didn't recompute on first read, it recomputed on first write (a new tagged object arrives).

This release fixes all that. Counts are still eventually consistent, but all counts are recomputed in a regular background task, so they really are eventually consistent, and care was taken in constructing the query to minimize database (read) locking to ~100-200msec.

Is it better? Yes! Is it perfect? Probably not. Cache invalidation is hard.

Here's the full changelog for this release:

Added

  • Background task to reconcile tag statistics.

Fixed

  • Prevent model hook callbacks from interleaving.
  • Add spacing between content and the sticky footer.

Changed

  • Replace Semantic UI with Fomantic UI.
  • Cache the PURL and GoToSocial JSON-LD contexts.
  • Reduce database lock time when reconciling tags.
  • Block npm dependency install scripts.

Removed

  • The unused idx_relationships_type database index.

In the next release, I'm going to fix a few bugs in the Mastodon-compatible API. These require an internal redesign, so I've held off until a few other things were out of the way. And I'm turning my attention to reading and better tools for surfacing and finding interesting content.

Replies0boosts0likes
Todd Sundsted@toddsundsted@epiktistes.com
·

I really enjoy optimization. Release v3.5.0 of Ktistec doesn't drop significant new features, but it does deliver a ~15% smaller executable and significantly faster queries on anonymous endpoints. The two are intertwined.

The size reduction comes from replacing a poorly designed, custom rules engine with a materialized view layer that uses SQL to define membership in a collection. The rules engine worked well enough but required a lot of supporting code to present rules as a DSL (Domain Specific Language) over the domain objects in ktistec. The driving realization was that SQL is a DSL and membership in a collection is just a query and domain objects are just rows. Voilà!

Query performance improvements came from using this new view layer to materialize two very popular but expensive-to-query views: the instance's public timeline and public hashtag pages. Because both are public pages they receive more traffic than internal pages.

The problem with the original queries was that performance was not uniform. Querying for posts with popular tags was okay. Querying for posts with sparse tags was very slow. I could have added more indexes, but that's its own cost. After the change, endpoints all respond in a consistent ~10msec timeframe and the CPU barely registers when a crawler hits. (I don't want to make things easier for bots, but I don't want to pay a tax for their activity either—ask me about my new nginx configuration.)

Here is the full changelog:

Added

  • Lightweight probe endpoint for authenticated sessions.
  • max-id and min-id pagination links on web pages.

Fixed

  • Correct the notifications collection's JSON representation.
  • Accept both single-value and array forms of JSON-LD properties.
  • Handle variation in schema.org property mapping.

Changed

  • Faster timeline, public, hashtag, and notification collections.
  • Adjust the layout of actor profile properties.

Removed

  • The school dependency; replaced by activity processors and materialized views.
  • The openssl_ext dependency; vendored in.

There are still a few slow queries. In the next release I'm going to see if I can get everything under 10msec, and maybe release a new feature, too. 🚀

Replies0boosts0likes
Mastodon@Mastodon@mastodon.social
·

4.6 is here! It's been a long time in the works, but it's finally ready. In this release, we're introducing Collections—a way to share curated collections of profiles to help old and new users discover more of the . We're also updating the look of profiles, alongside many quality of life and accessibility improvements. Read more here:

blog.joinmastodon.org/2026/06/

Replies2boosts0likes
Jan Penfrat@ilumium@eupolicy.social
·

This week I spoke to a room full of non-techy NGO people and for the first time there were more folks with than accounts in the room 🎉

Replies1boost0likes
Mastodon@Mastodon@mastodon.social
·

Following the @EUCommission Tech Sovereignty and Open Source Strategy (and Mastodon’s direct mention within it!) announced this week…

Our team is proud to have signed and contributed to the drafting of the European Social Stack Open Declaration alongside our peers in the and : @anewsocial, @eurosky.social, @newsmast, Save Social, and @swf.

We are a movement, and stronger together.

Read the declaration, add your signature, and share: european.social/

Replies1boost0likes
Todd Sundsted@toddsundsted@epiktistes.com
·

This release fixes a small number of bugs found in recent releases.

The full changelog:

Fixed

  • Prevent runaway recursion when handling filtered posts.
  • Ensure profile header and header_static images are always present.
  • Render the inline replies collection for local objects.
  • Exclude blocked actors from object statistics and notifications.

Changed

  • Return 410 Gone instead of 404 Not Found for missing actors.

Removed

  • Tag counts on public pages.

This release fixes a hard-to-exploit but potentially server-crashing bug. If you're running v3.3.9 or v3.4.0, you should upgrade.

Replies0boosts0likes
Tom Stafford@tomstafford@mastodon.online
·

Fedizens! Please send me your favourite meme which shows something important about the

I'll go first:

Replies1boost0likes
micr0@micr0@wetdry.world
·

funding check-in <3

the account i use for project costs (altbot, wellness-ping, fuzzies.wtf, colo, vps, email) is running low again.

i keep that money separate from my personal money on purpose, so running these free services doesn't quietly come out of my own pocket like it used to. it's at the point where i'd rather say something than just absorb it.

all of it is free, open source, no ads, no data selling. if it's been useful and you can spare anything, one-time or recurring, it really helps. and if not, a boost does too <33

github.com/sponsors/micr0-dev
ko-fi.com/micr0byte

(github is the preferred way, since it avoid's paypal and stripe fee's, but I also get if you do not like microslop!)

Replies1boost0likes
Mastodon@Mastodon@mastodon.social
·

We’re kicking off a new series: Community Spotlights.

Through these stories, we celebrate the people who make the a wonderful place to connect.

Our first subjects are @Tzipporah & @Yehuda, the grandfather & grandkid duo that admin , a server focused on building community with Native/Indigenous people, other BIPOC (Black, Indigenous, & People of Colour) people, and allies.

blog.joinmastodon.org/2026/05/

Replies1boost0likes
ElbowsUpforDigitalSovereignty@ElbowsUpforDigitalSovereignty@thecanadian.social
·

RE: thecanadian.social/@ElbowsUpfo

Later today, after I shake off the lingering effects of a vacation, we will be announcing a contest where you can win your very own AND 2 excellent books from champions. Yes, there is effort required to adopt one of these peach coloured cuties because this incredible value is worth working for.

Stay tuned...

Replies1boost0likes
Fedilab Apps@apps@toot.fedilab.app
·

source code is now available on .

codeberg.org/tom79/Fedle

It is a daily word game for the that currently supports English and French.

I added a small doc explaining how to submit a new language, which will be automated by a bot once validated.

See
codeberg.org/tom79/Fedle/src/b

Fedle is really new in the Fediverse but you're more than welcome to join the game. Keep sharing :)

Main account: @Fedle

Replies1boost0likes