古代メキシコ展
トーハクこと東京国立博物館で開催中の古代メキシコ展に行ってきた。
テオティワカン、アステカ、マヤ文明の出土品の展示で、目玉は赤の女王というミイラ。
相変わらずトーハクの展示は迫力だったなあ。見ていてまったく飽きないし、時間が足りない。
神々の犠牲があって成り立っている、という世界観?
なので生贄を捧げることになってたらしい。
にしても、神さまってのは人間につきものなんだなあ。
科学博物館でもペルー展(インカ)をやってるということで行ってみたけど、こちらは小さなコーナーで正直拍子抜け。
だけど、こっちは常設がスゲー。今さらながらびっくりした。
江戸時代あたりの日本は時間が一定じゃなく、季節ごと夜日中ごとで違ってたなんて、この歳になって初めて知った。
昼と夜、春夏秋冬で時間の流れかたが違うというのは、感覚的にはこっちが正しい時間のような気もする。
で、それをはかるための時計作りに心血を注いでいたという胸熱な展開もあったらしい。
今なんどきだい?という問いかけが実はかなり意味深だったんだなあ(え?
上野公園って、そこにある全部の展示と動物園まで見て回ると3泊でも足りないんじゃないかな。
で、ホテル代を払ってでも全部回る価値はありそう。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ActivityPubを使ってFediverseにたどり着く
いや、なんのこっちゃだけど。
2023年、ツイッター亡き後の世界となった。ネット空間には祖国を奪われた難民たちで溢れかえり…というB級サイバーパンクSFの設定。
そこで再評価されることになった、実は古より存在するFediverseというネットの連合空間。ActivityPubという共通の言語で繋がるネット世界、ということになった。
てことで、「いっちょかみ」できるかなあ、とここ数日あれこれ検索しまくって試して、とりあえずmastdonで検索して仲間として検索結果に出るところまではたどり着いた。
最小限のActivityPub、いわゆるお一人様で、もちろん喋ることもフォローなどアクションをすることもできない。ただ、連合空間に顔を出した、だけなんだけど。
「mastodonなどに認識してもらえる」のがまずはゴールだったんで、ここまでやったことをメモ。
(すべてはネットで検索して得られたもので、先人たちに大感謝)
ActivityPubに参加するため用意するもの
サーバーやドメインをもっていることが前提。わたしはいつものlolipopサーバー。
どうやら以下の4つがあればActivityPubに顔を出すことはできる、っぽい。
nodeinfo(json)
サーバーの情報、でいいのかな。ここにGETでアクセスされて、ウチはactivitypubやってますよ、ユーザーは1人ですけどね、というのを返す。
{
"openRegistrations": false,
"protocols": [
"activitypub"
],
"software": {
"name": "tokoroten",
"version": "0.1.0"
},
"usage": {
"users": {
"total": 1
}
},
"version": "2.1"
}
host-meta(xml)
webfingerのURLを返す。uriは検索対象のユーザー名の文字列に置換される。
<?xml version="1.0"?>
<XRD xmlns="https://docs.oasis-open.org/ns/xri/xrd-1.0">
<Link rel="lrdd" type="application/xrd+xml" template="https://tokoroten.doncaha.net/.well-known/webfinger?resource={uri}" />
</XRD>
webfinger(json)
host-metaで得られたwebfingerのURLにGETでアクセスされるのでユーザー情報のエンドポイントを返す。
{
"subject": "acct:t2aki@tokoroten.doncha.net",
"links": [
{
"rel": "self",
"type": "application/activity+json",
"href": "https://tokoroten.doncha.net/t2aki"
}
]
}
actor(json)
webfingerで取得したユーザーのURLにアクセスするとこの情報を返す。
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1"
],
"id": "https://tokoroten.doncha.net/t2aki",
"type": "Person",
"url": "https://tokoroten.doncha.net/t2aki",
"inbox": "https://tokoroten.doncha.net/t2aki/inbox",
"outbox": "https://tokoroten.doncha.net/t2aki/outbox",
"followers": "https://tokoroten.doncha.net/t2aki/followers",
"following": "https://tokoroten.doncha.net/t2aki/following",
"name": "t2aki",
"preferredUsername": "t2aki",
"summary": "@t2aki@tokoroten.doncha.net",
"icon": {
"type": "Image",
"mediaType": "image/jpeg",
"url": "https://tokoroten.doncha.net/images/prof-image.jpg"
},
"pubKicKey": {
"id": "https://tokoroten.doncha.net/t2aki#main-key",
"owner": "https://tokoroten.doncha.net/t2aki",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\n略==\n-----END PUBLIC KEY-----",
"type": "Key"
}
}
nodeinfoやhost-metaはわかってないまま設置。
たぶん、webfingerでユーザー情報のURLを返して、そのURLにアクセスするとユーザー情報を得ることができますよ、というやりとりがあればまずは第一関門突破だと思われる。
HTTPでリクエストの投げ合いをして相互理解を深める。WEBの基本。
と、わかったようなことを書いたけど、ここにいたるまでハマりまくった。
サイトの構成をどうすればいいのか、そもそもそこから。
結論。考える必要はまったくなかった。
ActivitiyPubはディレクトリ構造とか拘束しないというか全然関係ない。全部jsonやxmlの設定ファイルでリクエストに返答できればいいだけだった。
アクセスされて、ActivityPubを構成するファイルを返す時のヘッダは以下がMUST
Content-Type: application/activity+json; charset=utf-8
てことは動的にヘッダをつけて返答する必要があるのか、ということで、スクリプトで対応。そのために.htaccessのrewriteruleで振り分けることにした。※1
.htaccess
RewriteEngine On
RewriteCond %{QUERY_STRING} ^resource=(.*)$
RewriteRule webfinger.* script-finger%1 [L]
RewriteRule nodeinfo/2\.1$ script-nodeinfo [L]
RewriteRule host-meta$ script-hostmeta [L]
RewriteRule t2aki$ script-actor [L]
ここでのハマり。
apacheのrewriteruleはそのままだと「クエリを含まない」
fingerはresourceというクエリをつけてやってくる。そのクエリが分からないんじゃ何を求められてるのかわからない。それを解決するにはRewriteCondでクエリを判定させてやれば良い、てことにたどり着くのに2時間弱。
この先、フォローしたり投稿したりするには公開鍵秘密鍵で署名する必要があって、わたしの脳みそで理解できるレベルではない。そもそもlolipopではCrypt::OpenSSL::RSAのモジュールが使えないのでないものねだり。
手元、ローカルで作って手作業で鍵を作ってリクエストを投げる、ということを考えるしかなさそう。それもHTTPのヘッダ構成を調べる必要があって、高いハードルを見上げすぎて首を痛めるレベル。
とはいえ、せっかくだし、もう少し頑張ってみるかなあ。
※1
検索していてビックリしたのが静的ファイルだけでActivityPub実装してるかたいらっしゃった。
NetlifyとSupabaseでほぼ静的なActivityPubサーバ
今回まででとても参考になったサイト
Fediverse入門―非中央集権型SNSサーバを作ろう!
田舎の昼のサイレンbotをActivityPubで実装する(マストドンにアカウントを認識してもらう編)
ActivityPubの実装についてのメモ
本当に助かりました。多謝!!!
さっそく、ひとり言掲示板 「ところてんx10」 が役に立った、ぞ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ひとり言掲示板:ところてんx10
ひとり言、メモ用掲示板を作ってみた。
・保存するのは100個まで。
・画像投稿はできない。
・検索機能はない。
・カテゴリづけもない。
・表示順は日付の新しいもの順だけ。
・一度書いたものを編集、削除することはできない。
投稿できるのはテキストだけ。
テキストの文字数制限はたしか80KBぐらいまでにしたのでけっこう長めのものも書き込める。
というなんかめちゃくちゃ手抜きのスクリプト。
一応RDFというかRSSは取得できるようにしてみたけど、これはおまけ。
スクリプト的には。公開はしてないけど、すでにメモ代わりのひとり言掲示板みたいなものは作って今も使っていて、ほぼそれの流用で、そこから検索機能やあれこれ機能を削っただけのシロモノ。
その、今すでに使ってるメモは、発注納品締切とか、スーパーでの買い物、ポケモンの対戦結果、医者、内科や歯医者、目医者の予約とかとか。
ほんとのメモ、めっちゃ個人的な備忘録。そんなものを公開の場に出すワケにもいかないし、そもそもそんなものわたし以外のひとには意味も価値もない。
ひとり言というなら、そのメモで勝手にやってりゃええやろ、というのはもっともな話。
とはいえ。
ツイッターにほとほと愛想が尽きて、みけさんもいないとなると、snsを利用することもない。
なので、この雑記帖に引きこもるぞー!てのは少し前に言ったけど、なかなか雑記帖に書くようなボリュームのネタもない。
なので、雑記帖の元ネタになりそうなことをメモする場所にしようかと。
それでも、今のその非公開のメモとやらでやってりゃええんとちゃうんか、は変わりないんだけどね。
人通りのほとんどないここ、辺境とはいえ、公開する、ひと目につく可能性があると、それを意識することになる。
少しはマシなもの、誰かにとって有用なものが出てくる、かもしれない。
底辺とはいえ、いちおう出版社で編集なんてのをやってた昭和平成の頃、痛感したのが、ひと目に晒してナンボ、ということ。ひと目に晒すことで面白いものになるというのは事実で真実。
そんなひとり言掲示板、せっかくだからちょっと考えて名前もつけた。
「ところてんx10」
ところてん式に古いものから押し出されてなくなっていく。
保持するのは100だけ。てことで「ところTENx10」という寒いおやじギャグをドヤ顔。
「ところてんx10」
てのはともかく、みけさんがいなくなると、時間を持て余すんでスクリプトをいじる時間に当ててるだけっちゃだけのそれだけの話でもあるなあ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」