The untold experiment of National Syndicalism: When Fascism was the Decay of Socialism
libcom.org/article/untold-expe…

Israeli fire kills 5 #Palestinians in #Gaza, including a baby @palestine

latimes.com/world-nation/story…

#political rant incoming: i despise how people refer to young #people being political aware as a “#woke” movement as if it’s a derogatory term. young people have ALWAYS been at the center of #politics. enough of this #cringe culture bs. you are allowing for #facism to rise!!! young people need to have #sex and do #drugs and be #disruptive again!!! they need to believe in #anarchy and make a FUCKING #CHANGE again!!! enough of acting like a housewife at 18!!!

Just a #reminder that the #US is not a "free #country" as many #patriots and #history teachers would suggest. Our prison system is designed as a loophole to allow for slavery. People are extorted for essential goods and services like healthcare and housing. Workers are exploited and underpaid. The government thinks it has the right to make decisions that interfere with one's bodily autonomy. Anyone who looks Hispanic enough is subject to being kidnapped and taken to a literal concentration camp.

Enigmatick ActivityPub C2S


From its conception, #Enigmatick has leaned heavily on the `inbox` and `outbox` endpoints for client operations. [...]

From its conception, #Enigmatick has leaned heavily on the /inbox and /outbox endpoints for client operations. There are some /api endpoints, but I avoid that were I can shoehorn operations into the #ActivityPub specification and #ActivityStreams vocabulary.

While typical operational activities are fairly well accounted for, administration is a weak point. For example: I haven't identified a clear way to use the currently described mechanisms for an administrative user to pull up and manage instances or actors on a server.

I've relied on CLI tools (e.g., ./enigmatick --help) to manage some of that. And in some cases, I know how to manipulate data in my database, so I haven't worried too much about building tooling. But I'd like to ship something that other folks can use to share in my efforts, so I've been thinking about how to model those activities in an ActivityPub-esque way to use in the Svelte UI.

ActivityPub Messages


To that end, I'm now using Block and Delete activities sent from the client to the server outbox to manage the blocking of instances and purging of data.

<span class="hljs-punctuation">{</span>
  <span class="hljs-attr">"@context"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
    <span class="hljs-string">"https://www.w3.org/ns/activitystreams"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-punctuation">{</span>
      <span class="hljs-attr">"ek"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/ns#"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"Instance"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ek:Instance"</span>
    <span class="hljs-punctuation">}</span>
  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/activities/550e8400-e29b-41d4-a716-446655440000"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"type"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Block"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"actor"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/user/system"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"object"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
    <span class="hljs-attr">"type"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Instance"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://spammy-instance.example"</span>
  <span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>

In practice, my client does not generate the id, but that attribute is generated by the server and the Activity is stored alongside other typically federated activities. These local Block activities are not federated out to other servers; they are intended solely for local server management.

The Block activity is sent as a message signed at the client by a user with administrative privileges on the server. Enigmatick's user authentication is unique (i.e., I use a separate set of encryption keys for client-signing executed by a wasm module in the browser). That can be a topic for a future article.

That the actor is defined as the system Application user is important. That's used by the server to establish the scope of this action as system-wide, not just for a single user. The system actor is discoverable in the nodeinfo metadata.

I'm using a typed object rather than just an id reference. This is so that I can use this same flow for blocking and purging Actor objects (i.e., the type would be Person, Service, or Application).

The purge action is similar, using the Delete activity.

<span class="hljs-punctuation">{</span>
  <span class="hljs-attr">"@context"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
    <span class="hljs-string">"https://www.w3.org/ns/activitystreams"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-punctuation">{</span>
      <span class="hljs-attr">"ek"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/ns#"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"Instance"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ek:Instance"</span>
    <span class="hljs-punctuation">}</span>
  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/activities/550e8400-e29b-41d4-a716-446655440000"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"type"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Delete"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"actor"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/user/system"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"object"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
    <span class="hljs-attr">"type"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Instance"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://spammy-instance.example"</span>
  <span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>

The term, "delete" is a bit of a misnomer in this case as it applies to the instance specifically. The instance will remain, but the objects, activities, and actors associated with that instance will be fully deleted (i.e., not set to Tombstone).

Collection Endpoints


To facilitate the UI operations, I've created two new collection endpoints on my server: /instances and /actors. These endpoints provide typical ActivityPub Collection objects.

<span class="hljs-punctuation">{</span>
  <span class="hljs-attr">"@context"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
    <span class="hljs-string">"https://www.w3.org/ns/activitystreams"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-punctuation">{</span>
      <span class="hljs-attr">"Instance"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ek:Instance"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"activitiesCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ek:activitiesCount"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"actorsCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ek:actorsCount"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"blocked"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ek:blocked"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"ek"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/ns#"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"lastMessageAt"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ek:lastMessageAt"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"objectsCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ek:objectsCount"</span>
    <span class="hljs-punctuation">}</span>
  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"type"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"OrderedCollection"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/instances"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"totalItems"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">7702</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"orderedItems"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
    <span class="hljs-punctuation">{</span>
      <span class="hljs-attr">"type"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Instance"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://example-instance.name"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"blocked"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"created"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2025-12-16T16:56:33Z"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"lastMessageAt"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2025-12-16T16:56:33Z"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"actorsCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"objectsCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"activitiesCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0</span>
    <span class="hljs-punctuation">}</span>
  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"first"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/instances?max=9223372036854775807"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"last"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/instances?min=0"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"next"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/instances?max=1765657395402834"</span>
<span class="hljs-punctuation">}</span>

I've added some extensions in the @context to account for a few non-standard attributes.

That collection is used by the UI.

The Enigmatick instances UI showing the most recently discovered instances from the enigmatick.social server

Collection Discovery


nodeinfo is a common protocol used for discovering information about ActivityPub-speaking servers. I've extended my use of that to facilitate client-discovery of these new endpoints using the metadata object contained in the nodeinfo JSON.

<span class="hljs-attr">"metadata"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
  <span class="hljs-attr">"actor"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/user/system"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"adminActors"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/actors"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"adminInstances"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social/instances"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"domain"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"enigmatick.social"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"url"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://enigmatick.social"</span>
<span class="hljs-punctuation">}</span>

Final Thoughts


As I'm reading through this, I see some opportunities for refinement. I should probably be using OrderedCollectionPage instead of OrderedCollection for my collection endpoints. I'm sure there are other tweaks to be made.

The other day I learnt that enabling syncookies in pf on OpenBSD lights up your server like a Christmas tree. Or in other words, it made the server respond to _every_ incoming tcp syn packet with syn/ack, making the bots scanning the internet think the port was open, even though the final ack would be dropped when rules were then evaluated. This increased scanning by a lot! Or so it seemed to me at least.

The reason for this experimentation was I got to experience what I think was a tiny syn-flood attack, and I was trying things to see what I could do to mitigate on my end.

I'll maybe write more about this after the holidays.

Sensitive content

This entry was edited (37 minutes ago)
in reply to tankenator

@tankenator I am absolutely flabbergasted at how Moe was able to find various events and programs throughout history to pinpoint why blacks, yet again, were unable to act with civility or compassion. It just really is never their fault, according to him.

Curry wasted his precious time going along with that show, and the batshit crazy takes regularly made it onto the NA show.

That was the beginning of the end for me, in terms of listening to NA

The Greatest Fighter Pilot Of WW1 - Frank Luke "The Arizona Balloon Buster" - The Fat Electrician

youtube.com/watch?v=lp5dKs9ytj…

@futurebird Fascinating story. I too worked in the Rare Book Room as an undergraduate. My job was to fetch books from the stacks in back and bring them to the head librarian who would turn pages for the visitor. That back room with the books was very secure. If a book was chained to a shelf then I needed to get the key custodian librarian. Otherwise, I was alone; it was a little unnerving to hear a muttering voice back by the oldest books. I never found the source of the voice.

Have you ever had an uncanny or possibly paranormal experience?

I have.

It happened when I was in undergrad, I had a work-study in the Archivists Office in the rare books section of the library. The library is a classic modern building from the 50s, once ahead of its time, now well behind. The computer system was similar, my college being one of the first to adopt a digital library catalog in the 60s

So, as you can see, this is, in part, a story of a haunted computer terminal. 1/ #threads

This entry was edited (56 minutes ago)
in reply to myrmepropagandist

when I was a kid (starting at maybe 5 or 6), I used to swear every night I'd see a glowing figure watching me from the corner of my room, just inside the door.

For years. Never saw much detail, but I never wanted to look for too long. I slept with my ear covered by the blanket because in my lil child head if my ears were covered and eyes closed, ghosts couldn't get in.

But a part of me always assumed it was just a trick of the light - it was opposite the windows, after all.

But one night a cousin was staying over - she slept in my bed and I on a cot on the floor. Until she woke up SCREAMING about a glowing man staring at her from the same corner I'd always seen it in. I'd never told her (or anyone) about it because I was embarrassed by how scared it made me.

Someone else seeing it didn't help.

Not long after, I ended up moving and never saw it again.

I'm not a believer in the supernatural now, but I still can't come up with a satisfying explanation for that whole experience.

My last long-form essay of the year (there will be a few more book chapters and probably a retrospective article, but this is the last of the heavy analysis). It's about why bad politics is tedious politics, tedious politics is bad politics and how we can insulate ourselves against both:

The politics of tedium | deadS...