カテゴリー: lightpub

  • activitypub 実装メモ

    Rust crate activitypub_federation を使用

    問題
    Misskey 宛にメンション付きのノートを送信すると UnrecoverableError: skip: failed to resolve user になる
    原因
    ユーザー情報を返すエンドポイントの Content-Type が application/activity+jsonになっていなかった

  • Lightpub を作っています

    Lightpub という ActivityPub 準拠の分散 SNS を開発しています。

    特徴は以下の通りです。

    • UI がシンプル
    • フロントエンドが軽い
    • Plain text のほか、Markdown や LaTeX 記法で投稿できる
    • サーバーが軽い (たぶん)

    とにかくサーバー、クライアント側の要件を小さくすることを目的に開発しています。機能はシンプルでいいから、とにかくよわよわのサーバーやクライアントで動かしたいという私みたいな人がターゲットです。

    Mastodon や Misskey, Pleroma と連合できることを確認しています。現在は実験的にインスタンスを立てて運用しています。→ https://exp3.lightpub.tinax.work/client/user/@tinaxd

    今年の2月か3月ぐらいに MIT ライセンスでOSSとして公開する予定です。Done is better than perfect ということで、まずは慣れている Node.js でサクサク開発を進めましたが、最小限のリソース消費で動くようにGoかRustで書き直すつもりです。

    フロントエンドは Bootstrap, htmx, alpine.js を使って書いています。HTMX は最近登場したライブラリで、html タグにアトリビュートを追加することで様々な ajax リクエストを飛ばせるようになるライブラリです。js をほとんど書かなくてよくなるので、UI が複雑ではない場合にはかなり便利なライブラリです。おすすめ。

    これから ActivityPub の自作実装をするぞという人向けに、役に立つサイトをいくつかリストしておきます。

    • https://www.w3.org/TR/activitypub/
      まず最初に見ることになるであろう、ActivityPub の仕様書です。
    • https://www.w3.org/TR/activitystreams-core/
      これも仕様書です。連合する際に必要となる語彙について書かれています。
    • https://activitypub.academy
      Mastodon のテスト用インスタンスです。Mastodon を開発用に改変していて、送受信した json-ld の中身を見れる機能などが追加されています。Federation のテストに非常に役に立ちました。
    • https://www.w3.org/wiki/ActivityPub/Primer
      ActivityPub 実装のヒントがいろいろ書かれています。仕様書では定義されていない一般的な慣習 (例えば、投稿範囲を Activity Streams 内でどう表現するかなど) がわかります。

    Fediverse Reactions