Fediverseの辺境で秘密基地
この記事は Fediverse Advent Calender 2023 (第三会場)18日目の記事です。
Fediverseというネットの連合空間、ActivityPubという共通の言葉を喋るサーバー群というのが面白そうで「いっちょかみ」してみました。以下は、その時々の経緯というか思ったことの垂れ流しエントリとなります。
ちなみに、還暦過ぎのポンコツで、話が無駄にだらだら長いのはご容赦ください。
■レンタルサーバーとperlでおひとり様
MastodonやMisskeyをインストールして運用管理するスキルはわたしにはないので、自分のできる範囲、最小限のActivityPubサーバーをperlで自作実装しました。
レンタルサーバーとドメイン、perlがあれば、それ以外に新しく必要なものはなくて、このブログなど今まで使ってるロリポップのライトプランの環境で十分でした。
試しながら少しずつ実装していったんですが、おひとり様サーバーは、たぶんみんな大好き「秘密基地」ごっこ。
いちいち面白くて、すっかりハマりました。空いた時間のほとんどを費やしてます。
■おひとり様サーバーとして必要なことは2つ
・Fediverseの仲間入り、アカウントとして認識されること
・ActivityPubの決まりごと通りにGETやPOSTなど、リクエストのキャッチボールができること
■Fediverseにわたしが来た!
すみません。言ってみたかっただけです。
7月12日。Fediverseからアカウントとして認識されました。
何をどうすりゃいいのかまったくわからない状態からだったので、グーグル先生に聞きまくりです。
nodeinfo(json)
host-meta(xml)
webfinger(json)
actor.json(json)
以上4つのファイルを用意すればいいという話だったのでサーバーに設置。
今回作った自分のアカウント「@t2aki@tokoroten.doncha.net」をMastodonで検索してみたら、アカウントとして認識されました。
ただ無言で顔を出しただけなんですが、これで念願のFediverse仲間入り!です。
■ActivityPubおひとり様サーバー最低限の実装
アカウントとして認識されたら、後はActivityPubの決まりごとをちゃんとキャッチボールできればOKです…とか言って、これもまったくわかってなくて「そこからかよ!?」の状態でした。
リクエストのキャッチボールを始めるにはHTTP Signatureが必須になります。
(このリクエストはわたしが投げたものですよ、というのを保証するサイン・署名みたいなもの、という理解で大丈夫かな)
ところが、レンタルサーバーのロリポップでは署名のために一般的に良く使われているらしい「Crypt::OpenSSL::RSA」というperlのモジュールがない。つまり、Signature、署名ができない、ので立ち往生。
しかたなく、ローカルのPCに「Crypt::OpenSSL::RSA」をインストールして、PCのコマンドラインから投稿を送信することにしました。
7月26日。右往左往しながらも、Fediverseからアカウントとして認識されて、HTTP署名付きで投稿ができるようになりました。
発信専用と割り切ればこれでひとつゴール達成ということでしょう。
この時点でこのアカウントのフォロー/フォロワーはほかのサーバーに登録した自分のアカウントだけですが。
しばらくローカルPCからの発信専用でやってたんですが、WEB上で作業が完結した方が手間もなく気楽だし、また、ほかのひとの投稿をこのサーバーで読めないのは物足りなくなりました。
…というか。送信するのはローカルPCから、ほかのひとの投稿を読むのはMastodonのクライアントを立ち上げて、というのはやっぱり面倒くさいです。
ふたたびグーグル先生にお願いしたところ、署名するために必要な、PurePerlの(perlだけで実装されている、ユーザーレベルでインストール可能な)Cryptモジュールを見つけたので、ロリポップにインストールしました。
このperlだけで署名できるモジュールの作者さんには感謝するばかりです。
8月22日。HTTP Signatureを解決することで、やっとリクエストの送受信、キャッチボールができるようになりました。最低限の構成ですが、おひとり様ActivityPubサーバーということで大丈夫でしょうか。
■おひとり様サーバーのタイムライン
【ローカルタイムライン】
サーバーに登録しているユーザーの投稿が流れるタイムライン。
おひとり様なのでわたし一人の壁打ちタイムラインです。Fediverseに投げ込むには一意のIDが必要で、投稿へのURLもそれをもとに生成します。そのためにデータベースを使うのが手っ取り早いし、以前から使ってる自分メモ用の掲示板を改築して流用しました。
【ホームタイムライン】
フォローした人たちの投稿が流れ込んでくるタイムライン。
ここは考えなきゃいけないことがいろいろありました。
その1.
まず大前提として
「ひと様のデータは持たない、抱え込みたくない」
わたしのショボいスキルと還暦過ぎたポンコツの体力だと何があるかわからないので、リスク回避が最優先です。
その2.
タイムラインというからには「投稿は流れて消えていく」
流されてしまったものは見ない、アクセスしてたまたまその時その場にあるものを見るモノだということですね。
「袖すり合うも多生の縁」です。
ということで、こちらはデータベースも使わず、保存する投稿は、上限20個、保存期間最長1日。それ以上は古いものからところてん式に押し出されて削除、遡ることができないタイムラインということにしました。
(保存するNoteは宛先がPublic指定されているもの・わたし宛Mention投稿。それ以外は破棄)
そもそもホームタイムラインを見るにはログインが必要で、おひとり様サーバーでログインできるのはわたしひとり、見ることができるのはわたしだけです。
自分の使い方として、twitterもFacebookもそうですが、スクロールして遡るのはせいぜい2〜3画面だったので、上限20個保存ぐらいでも問題はありません。
アクセスしない間も、飛んでくるリクエストをcronで処理することにしたので、わたしが知らないうちに流れてきて、知らないうちに消えていく投稿の方が圧倒的に多い状態です。
SNSとの距離感はこのぐらいでちょうどいいんじゃないかと思ってます。
■タイムラインの育成、フォロー・フォロワー
なにはなくとも、まずフォローをして繋がらないと始まりません。
最初は、すでに登録して参加している別サーバーの別アカウントでフォローしているひとたちを、このおひとり様サーバーから少しずつフォローしました。
(聞いたこともない変な野良サーバーということもあってか、403や401で弾かれてすべてはフォローできませんでしたが)
こちらでフォローをしていくことで、ほかのひとの投稿を流し込んで読めるようになりました。
おひとり様サーバーでタイムラインを作ってると、フォロー/フォロワーでいうと、いかにフォローするのが大切かというのを実感します。
タイムラインというのは、盆栽とか本棚とかと同じ「よく育ってくれましたねえ」の世界。
twitterやFacebookだとフォローを見つけるのもそんなに大変でもないんですが、連合サーバー群だとなかなか難しくて、いくつかのサーバーにアンテナを張って少しずつこちらのタイムラインに持ってくるしかなくて。地引網でどばっと攫うのと、釣り竿を垂らして一本釣りするのと。それがまた面白いんですが。
サーバーごとの特徴があって、他のサーバーのアカウントをフォローして投稿の流入経路をひとつ増やすだけで、それまでになかった投稿が流れるタイムラインになります。
せっかくなので、いろんなサーバーをフォローしたいと思ってます。
(今ではフォローしているひとのブースト経由で他サーバーの様子も垣間見えるので、フォローを探すのもほとんどこのホームタイムライン経由になっています)
twitterなんかだとフォロワー数でのマウント合戦が見られますが、タイムラインの面白さは、フォロワーの数ではなくて、どれだけフォローしてるか、でしょう。
■おひとり様サーバーという名の秘密基地
ActivityPubという共通の言葉で繋がっているので、登録するサーバーに拘る必要はありません。どのサーバーにいても他のサーバーをフォローできる、繋がって広がるのがFediverseの特徴・メリットです。
…とはいえ、いろんなサーバー、それも個性的・特徴的なサーバーがたくさんあって、どのサーバーにしていいのか悩んでしまいますよね。
それなら、おひとり様サーバーを立ち上げて、そこを起点・窓口にActivityPubを喋っていろんなサーバーのアカウントをフォローしてFediverseに参加してみよう、そんなのが自分で作れたら面白そう、というのが始まりでした。
Activityを1つ実装するたびに、これってどうして必要?これは何か理由があるよね?など、いろいろ考えて、自分で決めて自分で作る手作り秘密基地です。
目の前にある20個だけでそれ以上は遡れないし検索もできないホームタイムラインは、穏やかに過ごせるもんだなあ、と眺めてます。
自分のために自分で作った場所というのはストレスフリーで居心地が良くて入り浸り状態。すっかりログインすることがなくなったtwitterやFacebookを見ていた時以上の時間をここで過ごすようになりました。
Fediverse空間のどこかでお会いすることがありましたら、どうぞよろしくお願いします。
だいたい映画、小説、アニメなどについて垂れ流してます。
鬼太郎誕生スゲー、復讐の記憶やべえ、トム クルーズおかしいだろ、やっぱルブランのアルセーヌ・ルパンだわ、など語彙力に問題のある投稿を見かけたら、それはたぶんわたしです。
ちなみに。
『鬼太郎誕生 ゲゲゲの謎』と『復讐の記憶』はわたしが今年映画館で観た映画でベスト。
この2本とも、おひとり様サーバーに流れてきた投稿で知った・気づいた作品です。フォローしたひとたちのおかげです。ほんとウチのおひとり様サーバーのタイムラインは「よく育ってくれました」(自画自賛)
■おひとり様サーバーを作るのに参考にさせていただいたサイト。
・まさに、このひと言。
「Webhook的に ActivityPub に投稿する実装を作った」
オープンな仕様 ActivityPub の力を借りて自前実装で他の実装とつながれる体験は心躍るものがあり
・perlでActivityPubサーバーを立ち上げるならこちらにすべてがあります。
「Fediverse入門―非中央集権型SNSサーバを作ろう!」
・静的ファイルだけでActivityPubサーバー構築。こちらの具体例が参考になりました。
「NetlifyとSupabaseでほぼ静的なActivityPubサーバ」
・こちらを発端としてActivityPub実装についてのサイトを辿りました。
「田舎の昼のサイレンbotをActivityPubで実装する(マストドンにアカウントを認識してもらう編)」
・レンタルサーバーとperlのCryptモジュール
「ロリポップ!レンタルサーバー」
「Crypt-Perl-0.38」
■蛇足というか手前味噌というか
わたしのActivityPub自作実装について。
「おひとり様ActivityPubサーバー自作実装メモ」
Follow、Like、Announce、Attachment、Hashtagなどを少しずつ実装した時の具体的なメモをまとめてます(関連する各エントリは 「ActivityPub」 というタグづけしてます)
ActivityPubの共通言語として飛び交うJsonの具体的な例を残すようにしてますので、何かのお役にたてれば幸いです。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
GBLシーズン13でACE到達
ポケモンGOの対人戦GOバトルリーグ。12月2日からスタートしたシーズン13でACEに到達。ランク20になって、レート戦にはいるんだけど、初期レートは1912。レジェンドという最高ランクに行くような上手いひとは初期レートがすでに2000超。最初からACEなので、1912という初期レートからおわかりのように、わたしは底辺クラス。
レート2000、称号のACEを目指して右往左往七転八倒が始まる。
今季は使い慣れてるパーティのメンバー、ていうかエースの技がナーフ、弱体化されたこともあって苦戦しまくった。初期レートが出たのがスーパーリーグというレギュレーションの終盤。負けがこんで1800台にまで落ちて抜け出せず、12/16からハイパーリーグというレギュレーションに切り替わって悶絶しながらようやっとACEに到達。
前シーズン12は、仕事で体力がヘロヘロな時を除いて、ほぼフルセット参戦できたのが収穫で、場数を踏む、というのは本当にだいじだなあ、と痛感した。
ネットや動画配信でみて真似をしてたのが、相手パーティをメモして対戦成績をつける、というやつ。どの記事、配信者も勝つためにはメモをつけよう!というんで、やってたけど、わたしには向いてなかった。
勝ってりゃいいけど、負けがこんでても記録。これはメンタル直撃というやつで、小心者のわたしには無理、というか、それだけでGBLに参戦する気がなくなって、メモをつけるようにしていたシーズン11まではレート戦にはいって、一戦ごとのレートの上下にそれこそ一喜一憂。どっと疲れるだけで、レート戦になってから対戦ボタンを押すのが億劫になって、対戦数は激減するようになっていた。
なもんで、前シーズンの12からはいちいち一戦ごとでメモを取るのは止め。参戦ごとの勝敗とその結果のレートをメモするだけにした。メモそのものが要らんだろとも思ったんだけど、何も記録がないのは寂しいんで、勝敗数だけはメモするようにした。なんの参考にならないけどね。
こうしたらけっこう気楽なもんで、シーズン12は対戦数が、たぶん初の1000超、場数を踏んだ数が飛躍的に伸びた。
対人戦だし、勝てば面白いし、負ければつまらないのは当然だけど、対戦数が少ないのはそれ以前の話。遊べてないんじゃゲームとしてどうなの、てことだなあ。
え?まだやってるの?とか言われることが多いポケモンGOだけど。
スマホを覗き込んで画面タップ、くるくる指を回してるひとは相変わらずみかけるし、ジムの近くではグループでレイドをやってるシルバー、PTA、無職、学生さんたちを見かけるし、これにプラスして電車の中で指を動かしてる人がいるんでつい覗いたら対人戦の真っ最中だったり。
ポケモンGOはまだまだ旬ですなあ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
22980円のノートパソコンvivobook購入
急遽必要に迫られて買ったASUSのノートパソコンVivobook。
サイバーマンデーもあって、22980円という噓みたいな値段でびっくり。
Windows10HOMEのノートパソコンが今時のスマホより安いのだ。
通常の32800円でも十分安過ぎる。
サイバーマンデーでさらに安くなって22980円のノートパソコンだ。
型番W203M
CPU Celeron N4000 1.10GHz
メモリ 4G
HDD 32G
OS WINDOWS10(64bit)HOME Sモード
ディスプレイ 11.6インチ
解像度 1366x768
バッテリ 最長15時間
アマゾンの詳細ページ→ https://amzn.to/2EtkRHZ
注意するところが2つ。
その1
載ってるOS、WINDOWS10HOMEの「Sモード」というやつ
このままだとWINDOWS STOREからしかアプリをインストールできない。WINDOWS STOREにないアプリは使えないということ。
解除は簡単だった、ような気がする。
アプリをインストールしようとしたら、Sモードを解除しますか?てなダイアログが表示されたのでそこでWINDOWS STOREのアップグレードをしたらSモードが解除された、と思う。
…というのも、別の要因でWINDOWS10を設定からクリーンインストールしなおしたので、その結果Sモードじゃなくなった、のかもしれない。
ごたくはともかく、
Sモードのままでは使いものにならないので解除必須。
その2
スペックを見てわかる通り、HDD(ストレージ)が32Gしかない。
これじゃ今時フツーにギガ単位で容量を使うアプリをインストールしてしまうと、あっという間にHDDがいっぱいになってしまって、WINDOWSのアップデートすらできなくなってしまう。
そこで、やっぱり急遽秋葉原に行ってマイクロSDカード128Gを購入(3750円也)
その一部を仮想ディスクにして、アプリはそこにインストール。また、各種データもSDカードに保存するように設定した。
WINDOWS10では、そのためのソフトを別途用意することなく、デフォルトで仮想ディスク機能があったので助かった。
「ディスクの管理」からSDカードに仮想ディスクを設定する。
仮想ディスクはファイルシステムをNTFSで設定する必要があった。それに気づかず、exFATでフォーマットしてしまったのでやり直しその1。
仮想ディスクの作成は時間がかかることに気づかず、仮想ディスクを作成中だというのに別操作をしてしまったりSDカードを抜き差ししてしまったりしたのでやり直しその2。
特にその2が致命的で、うまく認識してくれなくなったので、上記したWINDOWSのクリーンインストールからやり直すハメになってしまった。
無事、仮想ディスクが作成・認識できて必要と思われるアプリをインストールしてしばらく使った状態のストレージ状況が以下。Cドライブの残りが7G程度。仮想ディスクにインストールしてなきゃパンクしていた。
また、デフォルトの保存先などをCドライブ以外、SDカードに設定できるので、アプリのインストール先やデータ保存先をすべてSDカードに設定した。
てことで、格安ノートパソコンVivobookにSDカード(仮想ディスク)は必須。
使い勝手だけど。
これがもう3万円しないノートパソコンとは思えないサクサク感。快適のひと言。
64ビット版だし、メモリも4G載ってるからだろうか。グラフィックもたぶん問題ない。
アドビのフォトショップとイラストレーター(無償版)もレスポンスに問題なく使える。
エクセル、ワードも同じく今まで通り普通に使える。
エディタ(vim)もperlも、epubcheckのためのjavaも普通に使えて、電子書籍制作環境のできあがりとなった。
kindleも紀伊國屋kinoppyもサクサク動作する。
キーボートのキー間隔やキータッチもミスタッチすることなく使えるレベルで見た目以上に良い感触だ。タッチパッドはもともと苦手なのでマウスを利用している。
1kgを切っていて軽くて薄くて、持ち運びも楽勝。
…ただ、樹脂製というか大阪でいうところのいかにも「プラッチック」なので、耐久性には期待できないかな。
でも、この値段でこの性能、感触だ。壊れた時のためにもう2台ぐらい確保しておいてもいいと思う。ASUSはすげー。
ていうか、こいつはほんと全力おススメできる。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
音声付き電子書籍の作り方【7】【制作編】音声ファイルを作る
【制作編】音声ファイルを作る
コマンドプロンプト、ターミナルをeasy_epubフォルダで開いてキーボードでコマンドを入力します。
Mac
コマンド:
perl say_mac_m4a.pl
perl[半角空白(Space)]say_mac_m4a.pl[Enter]
textフォルダに入っている本文のID名を含んだファイル名で、音声ファイルを作っています。
音声ファイルは「_voice」フォルダの空だった「multimedia」フォルダに作られます。
WINDOWS
コマンド:
perl say_haruka.pl
perl[半角空白(Space)]say_haruka.pl[Enter]
textフォルダに入っている本文のID名を含んだファイル名で、音声ファイルを作成します。
合成音声「Haruka」はWAVEファイルで保存されるので、ffmpegでm4aファイルに変換しています。
音声ファイルは「_voice」フォルダの空だった「multimedia」フォルダに作られます。
ここまではスクリプトで自動処理ですが、音声の校正・修正はひとつずつ耳で確認しながらの作業となります。
・エディタで「_voice」フォルダにある「_span_split.txt」を開きます。
・ファインダー(Mac)、エクスプローラー(WINDOWS)で「_voice」フォルダの中の「multimedia」フォルダを開きます。
Quicktimeなどで音声を再生して確認してください。
ファイル名の「say_contents000_1」の部分が_span_split.txtのIDなので、どのファイルがどの文章の音声なのかは、IDで確認できます。
WINDOWSのHarukaは「say_contents000_3」の「ロシアのある大きな町であったことだ」を「ろしあのあるおおきなちょうであったことだ」と、「町」を「ちょう」と読んでいます。この場合「まち」が正しいのでエディタで修正しましょう。
誤)「ロシアのある大きな町であったことだ」
正)「ロシアのある大きなまちであったことだ」
修正をしたら音声ファイルを作り直します。全部作り直してもいいですが、ひとつずつ作り直すこともできます。
コマンド:
perl say_haruka.pl say_contents000_3
perl[半角空白(Space)]say_haruka.pl[半角空白(Space)]say_contents000_3[Enter]
「perl say_haruka.pl 」に続けて文のIDを入力します(※Macのsay_mac_m4a.plも同じです)
また「say_contents000_23」の「すみっこのはこにこしかけて」を「すみっこのわこにこしかけて」と「はこ」の「は」を「わ」と読んでいます。このような場合は「はこ」を「ハコ」とカタカナに修正すると「わこ」ではなく「はこ」と読みます。
コマンド:
perl say_haruka.pl say_contents000_23
perl say_haruka.pl say_contents000_3
がコマンドプロンプトに出ます。BSキーで「3」を削除して「23」と入力すれば、いちいち全部キーボード入力しなくて済みます。
この音声の校正・修正作業が、音声付き電子書籍制作でもっとも重要で時間のかかるところです。
読み間違いにはクセのようなものがあって、OtoyaもHarukaもよくできる子たちですが、音読なのか訓読みなのか、文脈で読みが違う文(以後「いご」「いこう」)や、人名地名、当て字など判定できずに読み間違うことが多いようです。
また、読み上げ文に、本文にはない句読点を入れることで正しく読んだり、イントネーションの多少の調整もできます。
修正しているうちになんとなくクセがわかって、校正・修正作業の効率はあがってきます。
こうして音声の校正・修正をした「_span_split.txt」はバックアップとして別のフォルダに保存しておきましょう。
音声付き電子書籍が完成した後に間違いに気づいてやり直し、というような場合、あらためて作られた「_span_split.txt」に、バックアップとしてとっておいた「_span_split.txt」を上書きすれば、音声の校正をイチからやり直すこともありません(本文原稿が変わらない場合)
音声付き電子書籍の作り方【8】「【制作編】音声付きEPUB3電子書籍の完成」に続く。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
iBookstoreでブックをプレゼント!
iBookstoreでブック(本)をひとにプレゼントできる!ということでちょっと試してみた。
この機能はゲームや音楽ではすでにあったらしく特に目新しいものではないということだけど、わたしは今回初めて知ったのでどういう手順なのか確認のメモ。
iBookstoreでプレゼントしようと思う本のページで「このブックを贈る」を選ぶ。
贈り先のメールアドレスとメッセージを入力。いつ贈るのか選択もできる。
テーマを選択って?と思いつつ適当に選んでみた。
ギフトを確認する画面。宛先と差出人、メッセージ、贈るアイテムや値段が確認できる。
上の画面で「ギフトを購入」するとIDとパスワードの入力が求められる。※この画面にきて初めて購入することになる。
IDとパスワードを入力するとギフトを贈りましたという確認&完了画面。
先方にはこんなメールが届く。テーマの選択というのはここで使われるのか…。さすが林檎、しゃらくさいことをする。
「今すぐコードを使う」をクリックするとiTunesStoreに飛んで、そこでクーポンコードを入力するとプレゼントした本がダウンロードされる。
実際、どういう使われ方をするのか今ひとつぴんとこないんだけど。
本というのは「をを、こりゃすげー面白かったぁー!」となったらひとに勧めたくなるものだし、「ん?この設定はあいつ好きそうだな」とやっぱりひとに勧めたくなるもので、貸し借り回し読みで広がっていく部分も大きいと思う。
プレゼントと貸し借りはちょっと違うんだけど、こういうことからでも広がりが少し出てくると面白いよね。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
待っててもひとは集まらないのだ
「創作文芸 見本誌会場 HappyReading」に登録を募るため、twitterのダイレクトメールを利用してみた。
サイトはそれなりにできた、と自画自賛したところで、しょせん器を作っただけ。
肝腎なのは中身。
ぼーっと待ってても登録が増えるわけではないので、知り合いにお願いすることから始めて、現時点で8サークル18冊の登録をもらった。少しずつだけど、数が集まり始めると、見ていて楽しい。
ITだWEBだ、とサービスがいくつも立ち上がってるけど、どれもこれもしょせんただの器。よくできた器を作ったところで、中身がなければしょうがないし、中身が揃ったからといって器がエライと勘違いしちゃいけない。
中身を揃えるためには器のクオリティなどあまり重要ではない。たぶん。
選挙というか議員さまたち、地元のイベントに顔を出し、冠婚葬祭も欠かさない。たとえとしていいのか微妙だけど、結局こういった地道な「人づきあい」が大切なんだよなあ。きっと。
てことで、 創作文芸 見本誌会場 HappyReading では、絶賛見本誌募集中!小説同人誌の最初の関門。まず手にとってもらって中身を見てもらうために、立ち読みのテキストを用意してサイトに掲載しませんか!?
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」