joinmastodon.orgは古参インスタンスを優遇していた

joinmastodon.org は古参インスタンスを優遇していた。さいわいにも今はそうではない。

joinmastodon.org はマストドンの新規ユーザーに向けたランディングページである。2017年5月20日に開設され、9月17日に日本語が追加された。

joinmastodon.org の「インスタンスを選ぶ」セクションにはインスタンスの一覧表がある。この一覧は、かつては instances.social に登録された日時が古い順に並んでいたのだが、11月6日以降はランダムになっている。

私は joinmastodon.org のレポジトリにプルリクエストを送った。Randomize the list of instances #45 がそれである。私の最初の発言は「インスタンスのリストが何らかの意味不明な並び順 (データベースでの物理的な配置?) になっている。ランダムにしよう。」であった。これが9月18日。

このプルリクエストはそのまま放置されたので、10月9日に次のコメントを送った。「インスタンスの一覧表の並び順が固定なのはフェアでないしユーザーフレンドリーでもない。なぜ私たちは常に mastodon.xyz, awoo.space, social.tchncs.de のような固定されたインスタンスを見続けないといけないのか? 」

これに対する反論がTechnowix氏よりあった。「現状と同じように、インスタンスのセキュリティ・安定性・寿命を考慮に入れたい。そのためには instances.social のバックエンドを改良する必要がある。現状はフェアでないかもしれないが、ユーザーから見れば、1ヶ月で閉鎖するかもしれないインスタンスに放り込まれるのは厳しい。」

また、instances.social の作者であるTheKinrar氏からもコメントがあり、instances.social のインスタンス選択ウィザードでも、安定性・セキュリティなどによるフィルタリングを行いたいようだ。

私は10月20日に再反論を試みた。現状でリストに固定されているインスタンスのうち5位と9位は接続が切れており、8位と10位はユーザー登録を受け付けていない。これはすなわち、固定順のリストが必ずしも質が高いわけではないことを意味する。だとしたら、並び順をランダムにする変更をクオリティフィルターの導入後まで待つことは無意味に思われる。

説明が前後するが、joinmastodon.org のインスタンスの一覧表は instances.social のAPIから情報を得ている。

結局のところ、11月5日の変更で、instances.social のAPIに「接続が切れているインスタンスを除く」と「ユーザー登録を受け付けていないインスタンスを除く」パラメーターが追加された。翌11月6日の変更では、このAPIを利用して、接続が切れているインスタンスとユーザー登録を受け付けていないインスタンスを除いたうえで、ランダムな順番でインスタンスの一覧を表示するようになった。

現在はそうではないが、joinmastodon.org の「インスタンスを選ぶ」セクションの一覧表は、instances.social での登録が古い順であった。それがフェアでないと指摘を受けてからも、開発者らはフェアであることよりも、実績のある古参インスタンスを優遇することを選んだ。

日本語圏ではマストドンのインスタンスの一覧が乱立しているが、海外にはこのような文化がないらしく、長らく instances.social に集約されていた。2017年11月になってようやく、joinmastodon.org のインスタンス一覧が日本語圏の水準に追いついたと言える。いずれにせよ、2017年11月以降の状況においては、かつて日本語圏で乱立したインスタンスの一覧を維持する必要はなく、joinmastodon.org と instances.social の改良に協力すれば事足りるであろう。

広告

マストドンとプレロマの両方に対応したプログラムを書く

マストドンプレロマはAPIに互換性があるので、マストドンのAPIを叩くプログラムはプレロマに対してもほとんどそのまま動く。とはいえ、両者には微妙な非互換があるので、少々の修正が必要かもしれない。

/api/v1/instance の uri

/api/v1/instance で返る JSON の uri 要素には微妙な違いがある。マストドンでは example.com のようなドメイン名が得られるが、プレロマでは https://example.com のように完全な URL が得られる。これはプレロマに理があるので、マストドンにプルリクを送るべきだろう。

/api/v1/timelines/public?local=true の limit

/api/v1/timelines/public?local=true はローカルタイムラインを取得する API である。認証不要でアクセスできるのが便利なので、私の書くプログラムではこの API ばかり使っている。

この API は limit=40 のような引数を追加することで、一度に取得するトゥートの数を増減することができる。完全なパスは /api/v1/timelines/public?local=true&limit=40 のようになる。一度に取得できるトゥートの数は、マストドンではデフォルトで 20、limit 引数を指定すれば最大 40 である。これに対して、プレロマは limit 引数を無視して常に 20 トゥートを返す。

トゥートの ID の規則

トゥートの ID は、マストドン 2.0 以降とそれ以前とで異なっている。マストドン 1.x 系では、トゥートの ID は 1 から始まる連番で、JSON では浮動小数点数で表される。マストドン 2.x 系のトゥートの ID は、264 よりは小さい巨大な自然数の連番で、JSON では文字列で表現される。

プレロマのトゥートの ID は古いマストドンに近く、1 から始まる連番である。ここで注意が必要なのが、プレロマの API の引数に巨大な (2147483647 よりも大きい) ID を渡すとエラーになるということである。このような巨大な ID はマストドン 2.x では普通に発生し得る。

トゥートの本文が HTML かプレーンテキストか

API を通して得られるトゥートの本文は、マストドンでは HTML、プレロマではプレーンテキストである。アプリケーションによっては、この違いを吸収する必要があるだろう。

マストドン関連ウェブアプリケーション: 本当に役に立つのはこれだけ

マストドン(Mastodon)ユーザなら利用したい!Mastodonを便利にするWEBサービスという先行研究があるものの、内容が古くなってきたので、現在の状況に合った記事を作るべきだろう。

マストドン カスタム絵文字でお絵かきツール

カスタム絵文字を大量にならべて絵を描くためのウェブアプリケーション。長いきつねを作るのに便利。

特に theboss.tech はカスタム絵文字に関する独自機能が充実しているので、「カスタム絵文字でお絵かきツール」とtheboss.techを組み合わせると最強になれる。具体的には、誰でもカスタム絵文字を追加できる、他のインスタンスから流れてきた絵文字が自動的に追加される、絵文字が隙間なく詰めて表示される、などの独自機能が導入されている。

ギリメカラ トゥート絶対全消しするマン

グーグル先生で「マストドン トゥート 全削除」とかで検索してもノイズが多すぎて辿り着けないので、ここにリンクを貼る。象に関連するマニアックな神様の名前を取ってきてるところもオタクっぽくて良い。

宣伝

あとは自分のウェブアプリケーションを宣伝すると、マストドン推奨ユーザーリスト流速順マストドンインスタンス一覧を作ったので見てほしい。後者は零細インスタンス巡りに便利だと思う。インスタンスごとに謎の文化があるので、ちょっとした旅行気分が楽しめる。

アイコンとスクリーンネームが全員同じになるマストドンインスタンスを作った

このブログの読者にとって「マストドンインスタンスを作った」は冗長だと思うが、ググラビリティのためにこのタイトルにした。

2.distsn.org というマストドンインスタンスがあり、ゲストアカウントを開放したはいいものの連投荒らしに負けて撤回するなどがあった。こうなったら雰囲気だけでも匿名っぽくなればいいやということで、スクリーンネームとアイコンを強制的に全員同じにすることにした。

暴力でやっていけばいいときはそうすべきで、ここで暴力とはSQLを直接叩くことを意味する。具体的には anonymous というふざけた名前のスクリプトを書き、postgres ユーザーの crontab に追加する。間隔はとりあえず5分にした。

スクリーンネームはインスタンスの名称 (site_title) を取ってくる。なぜか前後に謎のゴミが付くが気にしないことにしよう。インスタンスの名称は誰もが編集できるようにしてあるから、鯖管の独裁を避けられる。

アイコン (avatar) については、単に未設定の状態を強制するだけである。デフォルトのアイコンをココミネココナさんにする変更を入れてあるが、他のインスタンスでは (‘∀`) という顔文字に見えているだろう。

あとは「プロフィールを編集」画面のアイコンとスクリーンネームを変更する部分を殺す。完成。

自我というかパーソナリティがほとんど可視化されない状態でトゥートするのは本当に快適で、謎の高揚感がある。ある意味では、Tor やゲストアカウントよりも匿名らしさがあるものが出現した気がする。

追記 タイムラインにusernameを表示しないようにする変更と、タイムラインでスクリーンネームにマウスポインターがホバーしたときusernameがポップアップしないようにする変更を入れたので、さらに自我が消滅した。

インスタンスの名称と説明文を書き換えたユーザーを晒す

異常なマストドンインスタンス 2.distsn.org では一般ユーザーがインスタンス名称と説明文を変更できるのですが、空文字列を設定して去っていく荒らしが発生したので、インスタンスの名称と説明文を書き換えたユーザーを晒すことにしました。

カスタム利用規約 (terms) を使う予定がないので、サイト設定を変更したユーザーの username を保存することに転用します。これは /app/controllers/admin/settings_controller.rb をいじくってなんとかします。あとは /app/presenters/instance_presenter.rb に site_description_and_author メソッドを生やし、それを about ページと about/more ページで表示するようにします。

本質的にはこの差分を見ればいいです。終了。

ゲストアカウントは連投に弱い (それはそう)

kaban.m.to と md.distsn.org では平穏であったゲストアカウントですが、2.distsn.org ではついに破滅しました。あれは連投に負ける。

技術的にはIPアドレスでブロックするとかreCAPTCHAを解かせるとか方法はありそうだけど、プログラミング能力が有限なのですぐにはできない。

メールアドレス不要でユーザー登録できるのと、インスタンスの名称と説明文を変更できるのは引き続きやっていきます。あと、カスタム絵文字を鯖管でなくても追加できます。ユーザー数偽装はやめました。

一般ユーザーがインスタンス名称と説明文を変更できるマストドンインスタンスを作った (ついでに登録ユーザー数偽装も)

md.distsn.org という異常なマストドンインスタンスがあり、これまでユーザー数偽装メールアドレス不要なユーザー登録ゲストアカウントをやってきた。今回はインスタンスの名称と説明文を一般ユーザーが変更できるようにする。

まず、設定画面の「サイト設定」画面を「管理」から「設定」に移動する。これは /config/navigation.rb をいじればよい。この状態で一般ユーザーが「サイト設定」画面を開くとトップページに飛ばされるので、さらに /app/controllers/admin/settings_controller.rb を変更する。SettingsController クラスは BaseController クラスから派生しており、BaseController クラスには

before_action :require_admin!

という余計なコードが含まれているので、SettingsController クラスを BaseController クラスではなく ApplicationController クラスから派生するようにする。あと、念のため SettingsController クラスに

layout admin

を追記する。これで一般ユーザーが「サイト設定」画面を開くことができるようになった。

ついでに、登録ユーザー数偽装を一般ユーザーに開放してしまおう。カスタム利用規約は使う予定がないので、こいつを潰してユーザー数の設定に転用する。具体的には /app/presenters/instance_presenter.rb を変更するだけだ。

これが何の役に立つのかはまったく不明だが、そもそもマストドンが何かの役に立ったことがあるだろうか?