文章: mala
- 2025-01-20 初稿
- 2025-01-23 いくつかの補足と自分の過去のprivateでの言及のおまけ
- 気が向いたら、追記するかもしれない
{-# LANGUAGE StrictData, DerivingVia, OverloadedRecordDot #-} | |
{- | |
(compiled with GHC 9.4.2) | |
-} | |
{- | |
HEADS UP | |
this is an example implementation of a non-trivial type system using bidirectional type checking. | |
it is... |
I've commented a few times about some issues I see with the scalability of ActivityPub - the protocol behind the Fediverse and its best-known implementation Mastodon. A couple of folks have asked for more elaboration, so ... here it is.
First, let me add some disclaimers and warnings. I haven't devoted a lot of time to looking at ActivityPub, so there might be some things I've misunderstood about it. On the other hand, I've brought bigger systems - similar node counts and orders of magnitude more activity per node - from broken to working well based on less study of the protocols involved. So if you want to correct particular misconceptions, that's great. Thank you in advance. If you want to turn this into an appeal to authority and say that I'm wrong only because I haven't developed a full ActivityPub implementation or worked on it for X years ... GTFO.
What is ActivityPub? It's an HTTP- and JSON-based protocol for exchanging information about "activities". An activity could be many things.
{ | |
"layout": { | |
"id": "com.apple.keylayout.Colemak", | |
"localizedName": "Colemak", | |
"lang": "en" | |
}, | |
"rawMapping": { | |
"KeyA": { | |
"value": "a", | |
"valueIsDeadKey": false, |
augroup plugin-POWER-mode | |
autocmd! | |
autocmd TextChangedI * call s:shake() | |
autocmd CursorHold,CursorHoldI * call s:restore_pos() | |
augroup END | |
set updatetime=100 | |
let s:seed = 0 | |
function! s:rand() abort |
diff --git a/file.c b/file.c | |
index 6faa5a3..e3af329 100644 | |
--- a/file.c | |
+++ b/file.c | |
@@ -1,26 +1,25 @@ | |
#include <stdio.h> | |
-// Frobs foo heartily | |
-int frobnitz(int foo) | |
+int fib(int n) |