#ktistec 160 hashtags

Todd Sundsted

ktistec now supports both @-mentions and #-hashtags.

commits 4118ec6 through 1bdcf12 consist of an embarrassing amount of yak-shaving, and that's not the whole of it. commits 3346865 through dfc00d2 were necessary to make those changes work. and most of the work to surmount the first problems i ran into were actually fixed with commit 258e2d3, but i didn't realize that and make the change until quite late in the game. so it goes.

#ktistec #yakshaving

Todd Sundsted
typeahead

i'm happy with how typeahead now works in ktistec. it took a surprising amount of effort to get it to feel right.

#ktistec

Todd Sundsted

commits 52d849d through 8cd8f3b implement draft posts, a feature that makes it easier to use ktistec to compose longer posts. one big change in the set of changes is support for incremental edits and saves of posts, as they are being written. this change also gets us very close to federated updates to published posts—a feature that mastodon, unfortunately, only supports for polls.

#ktistec

Todd Sundsted

i've released more enhancements to ktistec. i'm still working toward an mvp—functionality any socially-oriented activitypub server should implement. recent commits added replies counts to the social signals exposed to the user, and updated the home page to display local activity to anonymous users.

next up: draft posts

#ktistec

Todd Sundsted

"Many Small Queries Are Efficient In SQLite"
https://www.sqlite.org/np1queryprob.html

in fact, many small queries can be slightly faster than a single, more complex query, based on testing i'm doing on ktistec. the difference is small—10-15 msec for a complex page on average.

#ktistec

Todd Sundsted

i ask the engineers i work with to spent 25-50% of their time refactoring before adding new features. these commits are exactly that—six days of cleaning up and small fixes.

i'm working toward a smarter timeline—one that uses social signals and some heuristics to prioritize content since i typically follow too many people/topics/things.

#ktistec

Todd Sundsted

commits 2ce62db...86822f5 implement support for typical social signals, like share/boost and like.

i got one like

performing and visualizing simple interactions are table stakes for socializing in the fediverse, so it's an important milestone. i got one like. i want more! 😉

if you're a fan of the crystal programming language check out ktistec. if you're brave enough to try it, i'd love feedback!

#ktistec

Todd Sundsted

lessons

  1. asterite is correct. named tuples in crystal are seemingly attractive (compile-time type checking of keys and values) but quickly become a trainwreck as the compiler specializes every method receiving them (passing/receiving **options is definitely a code smell). every possible permutation of keys and values is a new type and results in a  specialized copy of a method, increasing build time and executable size.
  2. crystal + sqlite continue to perform well. i recently released code that computes and displays social signals like boosts/shares and likes as part of the content in the timeline. even though counts are aggregated on the fly, rendering is still brisk—about 780msec to fetch and render 1000 posts from the main timeline.

#ktistec

Todd Sundsted

The last large piece of missing functionality leading up to a Ktistec release candidate is complete.

Ktistec now runs scheduled tasks in a separate fiber. In particular, ActivityPub message delivery now happens in the background, which makes posting snappier.

Other new features:

  • Remote follows
  • Warning prompts before dangerous activities (deleting posts)
  • Many bug fixes

#ktistec

Todd Sundsted

Running Ktistec the First Time

One of Ktistec's design goals is to make installation and configuration as easy as possible. Rather than multiple supporting data store services, Ktistec uses Sqlite. The database, along with uploaded images, are stored on disk, for easy setup (and, more importantly, backup).

When you run Ktistec the first time, you'll set up the instance, and then you'll set up the primary account.

specify the host name and site name

Ktistec needs to know the name of its permanent home on the internet. The host name is part of the identity of every account on the instance. My identity is "toddsundsted@epiktistes.com"—other federated hosts, and users, send messages and other content to me at "epiktistes.com". (This means you'll need a domain of your own, too.) Give the instance a site name and submit.

create an account

Once you name the instance, you create the primary account. Ktistec current supports only one account. This is intentional—another one of Ktistec's design goals is to promote a more fully distributed fediverse. A fediverse with a handful of large, multiuser services isn't a whole lot better than the world we had before, imo. (But don't worry—secondary accounts are on the roadmap.)

At a minimum, you need to specify the username and the password of the account. You can use a single character for the username, but you'll need six characters that include both letters, numbers and symbols for the password. Display name and summary are optional.

home

Once those two steps are done, you're online!

#ktistec