What is Hackers' Pub?

Hackers' Pub is a place for software engineers to share their knowledge and experience with each other. It's also an ActivityPub-enabled social network, so you can follow your favorite hackers in the fediverse and get their latest posts in your feed.

1
1
0
0
0
0
0
0
0

오늘은 티알이라네 처음하는 룰로 한다네
LAST TRAIN TO BREMEN
브레멘행 마지막 열차

13년 전 악마와 계약한 4명의 음악가의 마지막(이 되기 위해 서로 지지고 볶고 폭로하고 싸우는 진상극?)을 다루는 룰인 듯
2025 에니상 최고의 게임 후보에 올랐던 작품이라고 해서 기대 중
https://seaexcursion.itch.io/bremen

0
0
0
1
1
0
3
1
0
1
0
0
0
3
0

RE: social.coop/@scottjenson/11594

I'm getting strong support on this: very basic, server side data, which has NOTHING to do with the user (e.g. no IP) can be analyzed (not stored!)

Yes, corporations abused data collection, but this trauma taught us the wrong lesson: analysis is not evil, abusing data collection is. But people continue to have knee jerk reactions to this, creating strawmen that don't exist.

FOSS can be open and transparent. We can prove that trust. Let's *want* to find good, safe, transparent ways to do this.

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

深夜懺悔,我不自覺中幹了批鬥了臭老九的事情。年輕時做過太多蠢事傷害到太多人了。其中一件是,大一必修國文課,還得上一些八股的課程,老師是那種傳統的老頭子,看似有點開明愛說笑,但又很堅持原則的那種。不知怎地,老師辦理一個匿名投票要我們陳述意見。我當時基於一種挑釁?好玩?的心態在紙條上寫了:「你這個腐朽至極的傢伙,教這些陳年舊事有什麼用?」

諷刺的是,我自己還是讀文學相關的科系的。

老師讀了苦笑,只是淡淡地說:「這種言論,對我這種老練的來說聽了是沒關係,但是對其他老師可就不一定了。」看得出來他心理一定很不好受。

只有當我自己也實際當過老師的位置後,才知道要面對這種學生的惡意是多麼地不容易。因此,我這裡只能懊悔地說,老師對不起。

0
0
0
0
1
0

iori: MastodonやMisskeyと連携できるブログをリリースした

kosui @kosui@blog.kosui.me

kosui

ioriについて

ActivityPubを部分的にサポートするioriは、自分のためのナレッジ管理サービスとして開発した。

現代では様々なブログサービスやナレッジ共有サービスが存在するが、どれもいつか滅びてしまうリスクを抱えている。

それは仕方がないことだが、自分が得た知識や情報がある日突然アクセスできなくなるのは避けたい。

そこで、ioriでは自分で情報のフローをコントロールできることを重視し、ActivityPubを通じて自由な形式でナレッジが共有できるように設計した。

特定のサービスのレコメンド機能に依存せず、読者が自分の好きなサービスから情報を取得できることを目指している。


kosui

ioriとHono

ioriはHonoとFedifyを利用して構築されており、TypeScriptで書かれている。

元々は hono/jsx を使用してテンプレートエンジンのようにJSXを使うSSRアプリケーションとして実装していたが、インタラクティブなタイムラインのUIを実現するために、一部のUIはReactに置き換えた。

Honoの魅力の一つとして、このように「小さく始めて、大胆に拡張する」ことが容易である点が挙げられる。最初はシンプルなSSRアプリケーションとして始め、フロントエンドとバックエンドがどのような接合点を持つべきか設計の道筋が見えた段階でReactへ移行できるのは非常に便利だ。


kosui

ioriとFedify

ioriがActivityPubをサポートできているのは、間違いなくFedifyのおかげである。

自分でActivityPubの仕様を一から実装しようとしたことはこれまでに何度もあるが、以下の問題にぶつかり、いつも挫折してきた。

  • データモデリングの対象が広範囲に及ぶ
    • Vocabularyが多岐にわたる
    • オブジェクトタイプやアクタータイプが多い
  • ネットワーク通信の仕様が複雑
    • HTTPシグネチャチャの実装
    • JSON-LDのコンテキスト解決

私が本当に提供したいのはナレッジ管理サービスであり、ActivityPubの実装ではない。Fedifyはこれらの複雑さを抽象化し、開発者がビジネスロジックに集中できるようにしてくれる。


kosui

ioriの機能

ioriは個人向けのマイクロブログとして、必要十分な機能を実装している。

Fediverse連携

MastodonやMisskey、Fedibird、Pleroma などのFediverseプラットフォームから、ioriのアカウントをフォローできる。逆に、ioriからリモートのアカウントをフォローすることも可能だ。いいねやリポストもActivityPubを通じて双方向にやり取りされる。

一部のActivityPub実装で対応している絵文字リアクションもサポートしている。一方で、投票機能などはioriが解決したい関心事には不要と判断し、実装していない。

Markdown

投稿はMarkdownで書ける。コードブロックはShikiを使ったシンタックスハイライトに対応しており、ダークモード時は自動でテーマが切り替わる。技術ブログとして使うなら欠かせない機能だ。

記事機能

複数の投稿をスレッドとしてまとめ、1つの記事として公開できる。この記事自体もその機能を使って書いている。ActivityPubの Article オブジェクトとして配信されるため、Fediverseからも閲覧可能だ。

Web Push通知

フォローやいいね、絵文字リアクションがあったときに、ブラウザのプッシュ通知を受け取れる。VAPID認証を使った標準的なWeb Push APIで実装している。

OGP画像の自動生成

記事にはsatoriを使ってOGP画像を動的に生成している。日本語フォント(Noto Sans JP)に対応しており、SNSでシェアしたときにタイトルがきれいに表示される。


kosui

開発中に直面した課題

ioriの開発で最も苦戦したのは、HTTP署名と認証まわりだった。

ActivityPubと認証の関係

ActivityPub仕様は認証について明示的に規定していない。これは設計上の欠陥ではなく、意図的な選択だ。W3Cの仕様書では、認証メカニズムについて「No particular mechanism for verification is authoritatively specified」と述べられている。

分散システムでは、各サーバーが独自のポリシーを持つ。認証方式を仕様で強制すると、新しい実装の参入障壁が高くなり、エコシステムの多様性が失われる。代わりに、コミュニティが実際の運用に基づいて慣習的なプロファイルを発展させてきた。

現在、ほぼ全ての実装系がHTTP Signaturesをサポートしている。これはSWICG(Social Web Incubator Community Group)が文書化を進めているが、現時点では公式仕様ではない。


kosui

Authorized Fetch(Secure Mode)

Mastodonの一部サーバーは「Authorized Fetch」モードを有効にしている。HTTP署名のないリクエストをすべて拒否するモードだ。

この機能が生まれた背景には、ActivityPubの構造的な課題がある。Mastodon Issue #9849では「ActivityPub's dirty secret」として、オブジェクトが作成者の意図しない形で漏洩する複数の経路が指摘されている。ユーザーは自分のデータがどのサーバーに共有されるかを完全にコントロールしたいが、認証なしのオブジェクトフェッチを許可するとそれが難しくなる。

Authorized Fetchは完全なセキュリティソリューションではない。Issue #18353の議論では、「ブロック対象のサーバーから他のサーバー経由でリクエストを迂回する技術も存在する」といった限界が指摘されている。それでも、悪意あるアクターへの障壁を高める効果はある。

ioriがAuthorized Fetchを有効にしているサーバーからActivityを受信する際、送信元アクター情報を取得しようとすると401エラーが返ってきた。解決策として「インスタンスアクター」パターンを実装した。

インスタンスアクターとは、サーバー自体を表す専用のアクター(Applicationオブジェクト)だ。Mastodon Issue #10453で議論され、2019年に実装された。すべての取得リクエストへの署名、リレー機能、連合レポートなどに使用される。

// 個人inboxではユーザーの鍵を使用、共有inboxではインスタンスアクターの鍵を使用
const documentLoader = await ctx.getDocumentLoader({
  identifier: ctx.recipient ?? INSTANCE_ACTOR_IDENTIFIER,
});

kosui

インスタンスアクター識別子の罠

最初、インスタンスアクターの識別子に~actorを使っていた。ところがMastodonからフォローしようとすると422 Unprocessable Entityが返ってくる。

原因はMastodonのaccount.rbで定義されているUSERNAME_RE正規表現だ。リモートユーザーのバリデーションに使われるこの正規表現は、チルダを許可していない。リモートサーバーがioriのインスタンスアクターをフェッチしようとした際、preferredUsernameのバリデーションで弾かれていた。

Issue #10453の議論では「preferredUsernameはMastodon互換である必要がある」「ドットを含むユーザー名はリモートユーザーには許可されている」と指摘されている。

// チルダはMastodonで使えない
// export const INSTANCE_ACTOR_IDENTIFIER = '~actor';

// Sharkey/Misskeyフォークで使われているパターンに変更
export const INSTANCE_ACTOR_IDENTIFIER = 'instance.actor';

kosui

JSON-LD名前空間の問題

MastodonからのActivityを処理しようとすると、JSON-LDの解析でエラーが発生した。

jsonld.InvalidUrl: Dereferencing a URL did not result in a valid JSON-LD object.
url: 'http://joinmastodon.org/ns',
cause: FetchError: HTTP 404

Mastodonは http://joinmastodon.org/ns# をJSON-LD名前空間として使用しているが、このURLは実際のJSON-LDコンテキストドキュメントを返さない。これはHacker Newsのスレッドで「fake namespace」と指摘されている。

この問題の背景には、JSON-LDコンテキストの配信に関する歴史がある。Issue #9411によると、Mastodonは以前、共通のJSON-LDコンテキストをバンドルしていた。しかしコミットd40ef112で削除された。「わずかなRAMの節約」が理由だったが、外部サーバー(w3id.org/identity/v1など)がダウンした際にキャッシュを持たないインスタンスが機能停止に陥る問題が発生した。

解決策として、カスタムコンテキストローダーを実装し、問題のある名前空間をローカルで事前定義した。

const PRELOADED_CONTEXTS: Record<string, object> = {
  'http://joinmastodon.org/ns': {
    '@context': {
      'toot': 'http://joinmastodon.org/ns#',
      'Emoji': 'toot:Emoji',
      'featured': { '@id': 'toot:featured', '@type': '@id' },
      'discoverable': 'toot:discoverable',
      // ... 他のMastodon固有の語彙
    },
  },
  'http://litepub.social/ns': {
    '@context': {
      'litepub': 'http://litepub.social/ns#',
      'EmojiReact': 'litepub:EmojiReact',
    },
  },
};
Read more →
0
0
1

今朝の朝日新聞広島総合版に載っていた、在日朝鮮人被爆者の記事を教えてもらう。

「被爆から数日後、臨時救護所ができたと聞き、母と訪ねると、入口でこう告げられた。
「朝鮮人につける薬はない。あっちに行け」……」

執筆は武田肇記者。WEB記事になっていないようなのでスクショで紹介。

朝日新聞2026年1月24日付広島総合版掲載、「朝鮮にルーツ なぜヒロシマに 大竹市 姜周泰さん(86)」
0
0
0
0
0
0
0
0
0
1