ActivityPubでoutboxの実装
ActivityPubを通じて、Fediverse連合空間にユーザーアカウントとして認識してもらえるようになった。
次はウチのつぶやきというか投稿を拾ってもらえる、たとえばMastodonでtokorotenのコンテンツを表示してもらえるのが目標。
そのためには適切なoutboxを用意する必要がある。
よくわかってないけど、outboxてのは、これまでの行動、投稿のログ、という理解で大丈夫かな。outboxのtypeはOrderedCollectionがMUSTとされていて、たぶん順番も見られるんだろう。
あ。今さらだけど、わたしはど素人なので、見様見真似。間違った情報を垂れ流すことが多くてすみません。先に謝っておきます。
/actor/outbox
へのアクセスに対してこれまで投稿履歴を返す。
create(投稿)したnote(発言)とそれらを取得するためのurlなどの情報が羅列されたjson。
こんな感じだろうと思われる(大雑把)
「投稿」を「投稿しました」で包んで、そいつを順番に並べたものがoutboxという箱になる。
実際に配置したのが以下のoutbox。
といっても、お約束、決まり事通りに並べて作ってるだけなので、手数はともかく、それほど難しいものではない。
{"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://tokoroten.doncha.net/t2aki/outbox",
"summary": "outbox of t2aki@tokoroten.doncha.net",
"type": "OrderedCollection",
"totalItems": 2,
"orderedItems": [{
"type": "Create",
"id": "https://tokoroten.doncha.net/t2aki/activity/00054-20230717",
"url": "https://tokoroten.doncha.net/t2aki/activity/00054-20230717",
"published": "2023-07-17T12:45:08Z",
"actor": "https://tokoroten.doncha.net/t2aki",
"to": ["https://www.w3.org/ns/activitystreams#Public", "https://tokoroten.doncha.net/t2aki/followers"],
"object": {
"type": "Note",
"id": "https://tokoroten.doncha.net/t2aki/items/00054-20230717",
"url": "https://tokoroten.doncha.net/t2aki/items/00054-20230717",
"published": "2023-07-17T12:45:08Z",
"to": ["https://www.w3.org/ns/activitystreams#Public", "htps://tokoroten.doncha.net/t2aki/followers"],
"attributedTo": "https://tokoroten.doncha.net/t2aki",
"content": "[2023/07/17 12:45]\u003cbr /\u003elog取得のサブルーチンはpostとgetでちょっといじらないとダメやな。帰ったら仕込む"
}
}, {
"type": "Create",
"id": "https://tokoroten.doncha.net/t2aki/activity/00053-20230717",
"url": "https://tokoroten.doncha.net/t2aki/activity/00053-20230717",
"published": "2023-07-17T11:37:47Z",
"actor": "https://tokoroten.doncha.net/t2aki",
"to": ["https://www.w3.org/ns/activitystreams#Public", "https://tokoroten.doncha.net/t2aki/followers"],
"object": {
"type": "Note",
"id": "https://tokoroten.doncha.net/t2aki/items/00053-20230717",
"url": "https://tokoroten.doncha.net/t2aki/items/00053-20230717",
"published": "2023-07-17T11:37:47Z",
"to": ["https://www.w3.org/ns/activitystreams#Public", "https://tokoroten.doncha.net/t2aki/followers"],
"attributedTo": "https://tokoroten.doncha.net/t2aki",
"content": "[2023/07/17 11:37]\u003cbr /\u003e他のアカウントのoutboxをみて、そこにあるnoteのURLを叩くとHTMLページが開くんだけど、なんでや。jsonが返ってくるんじゃなかったっけ。HTTPのヘッダを覗いてもjsonじゃなくてフツーのHTMLを返してるぞ。こちらのリクエストに応じてjsonをHTMLに変換してたりするのかな。謎だらけ。"
}
}]}
typeがNoteとなっているブロックが投稿内容で、このNoteが基本となっている。
idとurlは投稿内容へのリンク。このNoteのjsonを返す。
publishedは日付。JSTだから+9とか必要かもしれないけど、とりあえず。
attributedToは投稿者。
toはお約束事。
typeがCreateのブロックがNoteのブロックをobjectに包んでいる。
idとurlのリンクはこのCreateのjsonを返す。今日時点、返すのがこのブロックでいいのか謎。とりあえず。
各要素はNoteと同じなので以下略。
そのCreateブロックを順番に並べてoutboxの完成。
前回設定したwebfingerとactor.jsonで、マストドンで「t2aki@tokoroten.doncha.net」を検索するとユーザーアカウントとして認識される。
「他のサーバーの以前の投稿は表示されません」と記載されている状態。
今回outboxを設定したので、個々のNoteのリンクをマストドンで検索するとtokorotenの投稿がマストドンで表示される。
検索して一度表示されると、ユーザーアカウント表示の下にも表示されるようになった。
たぶん、検索して結果が返ってきたことで、このマストドンサーバーにキャッシュされたのかな。
ただ、やはり謎は深くて。
謎その1)
ユーザーアカウント画面の下の「リモートで表示」というリンクを開くと、わたしのactor.jsonが表示される。ほかのひとの「リモートで表示」を開くとマストドンで開いたり、やっぱりactor.jsonが返ってきたりいろいろ。
リモートで表示とは、マストドンの別サーバーだったら意図通りに開くけど、マストドンじゃないサーバーだったらjsonをそのまま開くということになってるんだろか。
謎その2)
mastodonやmisskeyのoutboxはNoteを包んだCreateブロックを持たずにfirstやlastといったリンクを返すだけだったりするんだけど、これはありなのか。
ActivityPub w3c.org
↑ここがActivityPubの本家本元(?)
頑張って読むしかないんだろうけど、爺さんにはつらいぞ、英語。
そして、やはりRSAで署名したPOSTをどこかに投げないことには始まらない。
これについてはレンタルサーバーにモジュールがないのでほぼ諦め。ローカルで作ってスクリプトで投げる、ぐらいしか思いつかないしなあ。
とはいえ、ごそごそスクリプトを考えるのは爺さんのボケ防止にちょうどいいパズルゲームでもあるなあ。
ちなみに。元ネタの「 ところてんx10 」はほぼ毎日たわごと並べてるので、RSSリーダーにでも登録していただけると更新をお届けできます。
すげー今さらのRSSとか!
[07/19 11:17:32]
謎その1は解決。
HTTP_ACCEPTを見て判別。jsonを要求されてたらjson、そうじゃなければHTMLを返してた。さっそくウチも導入。やっぱ生のjsonが返ってくるとびっくりするからなあ。
https://gihyo.jp/dev/serial/01/perl-hackers-hub/005902
AS2以外の形式の情報を返すこと(コンテントネゴシエーション)も認められています。これを利用して、同じURLでも、ActivityPubの情報を要求された場合はAS2形式の情報を、それ以外の場合はHTML形式での情報を返すようにしています。
[08/04 10:40:12]
publishedの日付問題。
飛んでくるPOSTというかjsonを見ると、JSTだけど+900やJSTという表記がなくて標準時になってる。
localtimeじゃなくてgmtimeを使えば良かった
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
EPUBは微妙だなあ
CSSってわけじゃないし、縦書き表示とか禁則処理とか決まってないし。
EPUBを基本として、リーダーが各自勝手な独自拡張で縦書き表示を実現する、という感じになっていくんだろうか。でも、それじゃ無駄な労力が増えるだけじゃないのか。
てことで、一発芸の縦書き表示はうまくいかなかった。
下町飲酒会駄文支部 日野裕太郎 の立ち読みとかtwitterの縦書き表示で使ってる縦書き表示のHTMLとCSSは、FireFoxのEPUBリーダーだと意図通りの縦書き表示だけど、iPod touch のstanzaではぐちゃぐちゃ。
マークアップの規則、というか、タグというか、統一したものを決めてほしい。うーん、残念。
EPUBに日本語対応、というか縦書きを求めるのは無理なのか。それならもうPDFでいいんじゃないか。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ディープな八百屋
亀有の激安八百屋。地元のスーパーオオヤマとイイ勝負、らしい。
Zorki-4 Industar-22 CENTURIA200
仕事がらみが慌しくあれこれ面倒なことに。
もう、とにかく、腐れエクセルには1mmも触りたくない。
機械にできることは機械にやらせりゃええんだ。てことで、perlでスクリプトを何本か書いて、ついでにグラフ機能もブラウザ経由(cgiにして)OpenChartsFreeで表示するようにあれこれ画策。エクセルの無味乾燥なグラフと違って、OpenChartsFreeのグラフはFlashで演出つきだし、CGIでオペレーションもできる。時系列で並ぶ数字を眺めるだけじゃピンとこないけど、グラフで見えるようにすると分かる、ような気がする。
まだまだ、糞エクセルを触らなきゃいけない状況があるので、perlのスクリプトで置き換えないと。…コピペだの、カラムに決まったものを入れるのにいちいち手作業だの、やってられん。
世の中に氾濫する腐りきったエクセルと、それにまつわる作業コスト。本当にそれが必要なのか、ちゃんと考えたほうが良くないか。うううむ。エクセルには、イラつくムカつく。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
巻き込まれる
いやあ。すげー話だ。
景気のいい花火をブチあげて4月に分社化して、先週の金曜に引越して事務所開きの乾杯をしたと思ったら、翌週の今日、早々事務所解約。具体的なことを書くとなにかとまずいので伏せておくけど、思いつきで始めて、思い通りにならないからと止めてしまうって、企業人としてどうなんだろう。社会貢献とか継続成長性とか。上場したくてしょうがないみたいだから、計画倒産にはしないだろうけど、どうすんだろ。休眠会社にしちゃうのかな。
妙なものに巻き込まれてしまった、という感想でいいのかな。
とはいえ、この一年で、いい勉強させてもらった。
perlとかCGIでは遊んでたけど、仕事で使ったのは今回だし、サーバーのインストール・運用なんてのも仕事にしたのは初めてだった。
来月以降はまた職探しやな。WEBの便利屋とかってできればいいんだけど、営業力がなぁ…。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
地方小都市
予定もなかったんだけど、なんとなく急遽松戸とか柏とか、都内近郊地方都市に行ってみた。…うううむ、利用してるひとには申し訳ないがどちらもビミョーな街だなぁ。北方とか大沢の小説の舞台になりそうではあるけど、頻繁に行こうという感じの街じゃなかった。駅ビルにしても統一感がなく、いかにも増改築を繰り返してたまたまできあがっております、といった風情でエレベーター、エスカレーターひとつ取ってみても乗り継ぎがまともじゃないし、売り場もバラバラ。
とりあえず、松戸駅前には吉祥寺にあった半兵衛があったんで、そこにだけは通ってもいいかなとも。ふたりで三時間超いて飲み食いして満腹になり7000円ちょいというのは吉祥寺も同じで懐にとてもやさしいじゃありませんか。
なもんで、とくに収穫もないいちんち(松戸ブックオフで「真夜中の死線」を105円再購入したぐらい)ただひたすら暑くて、これから夏に向けてさらに暑くなるんだなぁといううっとーしー認識を新たにしただけのいちんちだった。
明日からはまた職安に通ってはやいとこなんとかしなければなりません。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
週末を過ごしてます。
昨日はやっぱり刺身盛り合わせとか自家製さつま揚げで日本酒。
今日は起きて早々に「アンダーワールド」吸血鬼vs狼男の単純な勧善懲悪モノかと思いきや、ちょっとびっくりの連続。こりゃいいっす。
後から思うと伏線はりっぱなしの投げっぱなしモノなんだけど、これは「あり」だ。気楽に舐めてかかってたらとんでもない重層構造の物語が設定されていて、さらに描写されるディテールが問答無用にかっちょええ・スタイリッシュ。
ウエイズリー・スナイプスのブレイドなんてのを話題にするヒマがあったら、こっちをとりあげろっての。…って全米一位取ってるし十分か。予定されてるという続編も楽しみ、かも。
うううむ。オタク心わしづかみの傑作でありました。
で、その後成り行きで有楽町で飲んで、帰ってきたら、地元小金井駅で救急隊員が横たわった白髪のおじさんに懸命の心臓マッサージに出くわしてみる。遠巻きにした野次馬どもの空気も重く、どうやらうまくないらしい。うううう、とそそくさその場を離れたけれど、バスを降りたら夜空に上がる花火になんかむなしいものを感じる夏の夜。
あしたは中央線が麻痺する予定なのでウチで死んでるしかなさそうだし。。。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」