This action will delete this post on this instance and on all federated instances, and it cannot be undone. Are you certain you want to delete this post?
This action will delete this post on this instance and on all federated instances, and it cannot be undone. Are you certain you want to delete this post?
This action will block this actor and hide all of their past and future posts. Are you certain you want to block this actor?
This action will block this object. Are you certain you want to block this object?
Are you sure you want to delete the OAuth client [Client Name]? This action cannot be undone and will revoke all access tokens for this client.
Are you sure you want to revoke the OAuth token [Token ID]? This action cannot be undone and will immediately revoke access for this token.
| Introduction | https://epiktistes.com/introduction |
|---|---|
| GitHub | https://github.com/toddsundsted/ktistec |
| Pronouns | he/him |
| 🌎 | Sector 001 |

TIL
The … (the Unicode ellipsis character) works as both a Crystal Language macro and method name, as in:
macro …(str, n)
Ktistec::Util.render_as_text_and_truncate({{str}}, {{n}})
endWhich can be used in a view template as:
= … preview, 120
I'm not saying you should. I'm saying you can.

the kingdom was lost for want of a path attribute in a cookie... 😡

I love a good discussion, but navigating large threads is difficult, and filtering the dross to find the silver and gold is tedious. I am working on thread analytics and an improved thread header to make it easier to identify the interesting bits and to quickly navigate to them.
Here's a peek:

In addition to top contributors, the thread header now includes a timeline histogram showing periods of engagement, and a table of contents with notable branches and direct links to those branches.
This feature is still under development, so expect changes and refinements before the next release.

Okay, my analysis is complete! Here are the core changes to Ktistec required for Mastodon API compatibility:
code_challenge parameter) ensures that an authorization code can only be exchanged by the client that initiated the OAuth request.client_credentials grant type: The client_credentials grant type is used to grant a client app-level access without requiring user authentication. Mastodon requires this for some of its "public" API endpoints. This necessitates a change to the database schema to allow a null account id in the client secrets table.created_at timestamp property: Mastodon requires a non-standard created_at property in the body of the /oauth/token endpoint response instead of (in addition to) the standard expires_in property.resource parameter: This is honestly a bug on my part.The only thing here that gives me heartburn is that PKCE is not required.

Physics is really bizarre and wonderful. Here I start explaining why the Standard Model has U(1) × SU(2) × SU(3) as its symmetry group. But I don't assume you know anything about groups or quantum mechanics! So I have to start at the beginning: how the electromagnetic, weak, and strong force are connected to the numbers 1, 2, and 3. It's all about quunits, qubits and qutrits.
You've heard of bits, which describe a binary alternative, like 0 and 1. You've probably heard about qubits, which are the quantum version of bits. The weak force is connected to qubits where the 2 alternatives are called "isospin up" and "isospin down". The most familiar example is the choice between a proton and a neutron. A better example is the choice between an up quark and a down quark.
The strong force is connected to qutrits - the quantum version of a choice between 3 alternatives. In physics these are whimsically called "red", "green" and "blue". Quarks come in 3 colors like this.
The electromagnetic force is connected to "quunits" - the quantum version of a choice between just one alternative. It may seem like that's no choice at all! But quantum mechanics is weird: there's just one choice, but you can still rotate that choice.
Yes, I know this stuff sounds crazy. But this is how the world actually works. I start explaining it here, and I'll keep on until it's all laid out quite precisely.

mastodon's creative extensions to oauth are gonna make me cry...

Ktistec is going to require that clients support PKCE

both 1000xRESIST and Clair Obscur: Expedition 33 are listed a "playable" on the Steam Deck but not "verified". it sounds like some of the problem might be frame rate. i'm unsure whether or not to take the risk. sadly neither run on a mac.

ugh, i just spent an unfortunate amount of time obsessing about focal points...

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
Fixed
Changed
The OAuth changes set the groundwork for better support of the Mastodon API and the Fediverse clients that depend on it. Stay tuned!