Todd Sundsted
Todd Sundsted
toddsundsted@epiktistes.com
Better dead than bored.
Introductionepiktistes.com/introduction
GitHubgithub.com/toddsundsted/ktistec
Pronounshe/him
๐ŸŒŽSector 001
Todd Sundsted
Release v3.2.3 of Ktistec

Release v3.2.3 of Ktistec includes two big features:

  • FEP-1b12 Group federation
    Improved federation with Lemmy and other forum-type servers. Ktistec supports community and thread follow/unfollow, as well as up-vote/like (down-vote/dislike is supported but there is no visual affordance for that yet).
  • FEP-9098 Custom emojis
    Support for viewing custom emoji in posts and on actor profiles. Ktistec does not yet support custom emoji creation and management.

The full changelog:

Added

  • Support for viewing custom emoji in posts and on actor profiles.
  • Actor type (Person, Group, etc.) overlay badges on actor panels.
  • Colored fallback avatars for actors without icons.
  • Support for robots.txt.

Fixed

  • Federation with Lemmy and other servers that support FEP-1b12.
    • Shared inbox support for local actors.
    • Serialization of Undo includes the undone activity.
    • Serialization of Like and Dislike does not.
  • Notify only once for an object's first received activity.

Changed

  • Accumulate metrics by hour for finer granularity.
  • Clean up presentation of public followers/following pages.

The next release will include support for Mastodon polls (FEP-9967).

#ktistec #crystallang #activitypub #fediverse

Todd SundstedJayVii

Since all my websites and web-tools use the phenomenal #SimpleCSS framework, I thought it would also make sense to create a theme for #ktistec using those exact colours. Of course, this is also available from my ktistec-tweaks, next to the old purpleish-theme, which I had before.

Also new is the separation of the card-style post theming, which is also shown in the screenshot below, in its own CSS file.

Image description: Screenshot of my Fediverse profile, which is cut straight in the middle. The left side shows the dark mode with orange-yellow highlights, the right side shows bright mode with blue highlights.
Todd Sundsted

A while back, I posted about creating a Forth-inspired programming language that uses emoji as words (functions) and said that I would post the source code. I keep my wordโ€”this weekend I cleaned up the code and published it.

I've built a tool that transpiles emoji source code into either Crystal or Python, and then builds and runs the transpiled source.

Here's the solution to Project Euler Problem 1, with comments so that you can more easily follow the flow:

๐Ÿ’ญ Project Euler Problem 1:
๐Ÿ’ญ Find the sum of all the multiples of 3 or 5 below 1000 => 233168

๐Ÿ’ญ Define a word to check if a number is divisible by 3 or 5
๐Ÿ“–โ“                    ๐Ÿ’ญ Stack: ( n -- bool )
  ๐Ÿ“š                    ๐Ÿ’ญ Duplicate n for two tests
  ๐Ÿ”ข3 ๐Ÿ”€ ๐Ÿ”ข0 ๐ŸŸฐ          ๐Ÿ’ญ (n%3==0)
  ๐Ÿ”„
  ๐Ÿ”ข5 ๐Ÿ”€ ๐Ÿ”ข0 ๐ŸŸฐ          ๐Ÿ’ญ (n%5==0)
  โšก                    ๐Ÿ’ญ (n%3==0 OR n%5==0)
๐Ÿ“•

๐Ÿ’ญ Declare variables
๐Ÿ“ฆ ๐Ÿ’ฏ                   ๐Ÿ’ญ sum variable
๐Ÿ“ฆ ๐Ÿงฎ                   ๐Ÿ’ญ counter variable

๐Ÿ’ญ Initialize variables
๐Ÿ”ข0 ๐Ÿ’พ ๐Ÿ’ฏ               ๐Ÿ’ญ sum = 0
๐Ÿ”ข1 ๐Ÿ’พ ๐Ÿงฎ               ๐Ÿ’ญ counter = 1

๐Ÿ’ญ Loop from 1 to 999 (inclusive)
๐Ÿ”
  ๐Ÿ’ญ Get counter and check if divisible by 3 or 5
  ๐Ÿ“ค ๐Ÿงฎ                 ๐Ÿ’ญ counter
  ๐Ÿ“š โ“                 ๐Ÿ’ญ counter bool

  ๐Ÿ‘
    ๐Ÿ’ญ If divisible, add counter to sum
    ๐Ÿ“ค ๐Ÿ’ฏ โž• ๐Ÿ’พ ๐Ÿ’ฏ       ๐Ÿ’ญ sum = sum + counter
  ๐Ÿ”š

  ๐Ÿ’ญ Increment counter
  ๐Ÿ“ค ๐Ÿงฎ ๐Ÿ”ข1 โž• ๐Ÿ’พ ๐Ÿงฎ     ๐Ÿ’ญ counter = counter + 1

  ๐Ÿ’ญ Test exit condition: counter > 999
  ๐Ÿ“ค ๐Ÿงฎ ๐Ÿ”ข999 โฌ†๏ธ
๐Ÿ”š

๐Ÿ’ญ Print the result
๐Ÿ“ค ๐Ÿ’ฏ ๐Ÿ˜€

Forth is fun because it is so easy to create a simple implementation of the language. It's also very very terse, which makes the emoji-nature of a project like this shine through. Here's the program above with emoji digits, fewer alphanumerics, and less whitespace:

๐Ÿ’ญ Project Euler Problem 1

๐Ÿ“–โ“ ๐Ÿ“š 3๏ธโƒฃ๐Ÿ”€0๏ธโƒฃ๐ŸŸฐ๐Ÿ”„5๏ธโƒฃ๐Ÿ”€0๏ธโƒฃ๐ŸŸฐโšก ๐Ÿ“•

๐Ÿ“ฆ๐Ÿ’ฏ
๐Ÿ“ฆ๐Ÿงฎ

0๏ธโƒฃ ๐Ÿ’พ๐Ÿ’ฏ
1๏ธโƒฃ ๐Ÿ’พ๐Ÿงฎ
๐Ÿ”
  ๐Ÿ“ค๐Ÿงฎ๐Ÿ“š
  โ“๐Ÿ‘๐Ÿ“ค๐Ÿ’ฏโž•๐Ÿ’พ๐Ÿ’ฏ๐Ÿ”š
  ๐Ÿ“ค๐Ÿงฎ1๏ธโƒฃโž•๐Ÿ’พ๐Ÿงฎ
  ๐Ÿ“ค๐Ÿงฎ๐Ÿ”ข999โฌ†๏ธ
๐Ÿ”š

๐Ÿ“ค๐Ÿ’ฏ ๐Ÿ˜€

The project README has more detail on the language features if you're interested.

#emoji #forth #esolang

Todd Sundsted

I've improved federation support for Lemmy and other servers that support FEP-1b12 Group Federation.

I had to increase the number of available file descriptors on my personal server 4x because of the resultant inbound volume of ActivityPub activities! I liked a federated post and DOSed my server.

#ktistec #activitypub #fediverse

Todd Sundsted
Release v3.2.2 of Ktistec

The big feature in release v3.2.2 of Ktistec is pinned posts with support for the Mastodon Featured Posts collection. Federation works both waysโ€”pin a post on Ktistec and it will show up as a pinned post on Mastodon and vice versa. When you refresh an actor profile, Ktistec also fetches and updates the actor's pinned posts. This is another small step in the direction of supporting all features that Mastodon-compatible client applications expect to access via the API. It's also useful in its own right.

The other major feature, which I posted a short video demonstrating here, is X-Ray Mode. X-Ray Mode is a developer and power-user tool for inspecting ActivityPub JSON-LD representations of actors, objects, and other content. Pressing Ctrl+Shift+X on any page displays the data behind the pageโ€”like an x-ray. You can:

  • Cached Version: View the local JSON-LD representation stored in the Ktistec database
  • Remote Version: Fetch and view the original JSON-LD representation from the source server
  • Navigation: Click on any ActivityPub IRI to navigate to that object
  • History: Use Alt+Left and Alt+Right to navigate through your viewing history

This feature is useful for debugging federation issues, understanding ActivityPub structures, and verifying how content is stored and represented.

Here's the full changelog for the release:

Added

  • Support for pinned posts and the Mastodon "featured posts" collection.
  • X-Ray Mode for viewing and navigating JSON-LD resource (actor, object, etc.) representations.
  • Back links on thread pages for easier navigation. (fixes #1)
  • License page for LibreJS compliance. (fixes #127)
  • Highlighting of recently fetched hashtagged posts.

Changed

  • Improved presentation of audio and video media.
  • Refactored theming/styling implementation.

The next release will focus on smaller features and bug fixes.

Enjoy!

#ktistec #crystallang #activitypub #fediverse

Todd Sundstedmozilla.ai

The recording of Davide Eynardโ€™s (@mala) โ€œBuild Your Own Timeline Algorithmโ€ talk from SFSCON is now live.

In the session, Davide walks through how to build a local, customizable timeline algorithm using Mastodon.py, llamafile, and marimo.

Watch the full video: sfscon.it/talks/build-your-own

Todd Sundsted

Joining my first D&D 2024 campaign tonight. Leaning toward playing a Sorcerer. I haven't paid even the slightest bit of attention to the evolution of the new rules, so I'm interested to see how it feels...

#dnd #dnd2024

Todd Sundsted

would a "more from this actor" button be helpful on #ktistec? the use case is 1) navigate to an actor you're thinking of following, 2) click on "more from this actor" to fetch ~10 additional, recent posts. is there another feature that would be more useful?

Todd Sundsted

I've streamlined theme development in Ktistec. The theming system uses a hierarchy of CSS custom properties and fallbacks. Theme authors can customize a theme at multiple levels:

Base Colors Only

Define only base colors like --text-primary, --bg-primary, --bg-input, --semantic-primary, etc. Derived colors will auto-generate using color-mix formulas. For example:

:root { --semantic-primary: #ffa500; }

From this one line, theme-appropriate colors like --bg-accent-code, --anchor-color, etc. auto-generate.

Base Colors Plus Derived Colors

Define base colors and derived colors. Derived colors use custom values when defined. Undefined derived colors auto-generate. For example:

:root {
    --text-primary: #333;
    --text-primary-2: #ff0000;  /* red for this specific shade */
}

Given this theme, derived shades like --text-primary-1, --text-primary-3, and --text-primary-4 auto-generate. --text-primary-2 is red.

The simplest possible interesting theme redefines the primary semantic color. The single line above (in Base Colors Only) would result in the following, with button color, link color, disabled, selected, and hover states all derived automatically:

screenshot of the setting page with the primary semantic color defined

These changes will be in the upcoming release. Existing themes will continue to work, as is.

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted