訂正と追記
追記A: 「ハッシュタグタイムラインのany/all/none指定」項を訂正しました。(2019/12/03 17:29)
訂正B: 「ハッシュタグタイムラインのany/all/none指定」項を削除しました。(2019/12/07 11:34)

こんにちは、Cutls Pです。これは、分散SNS Advent Calendar 2019の12月3日の記事です。

昨日は「アンケート調査によるFediverse意識調査」(by Keizou Wakabayashi)でした。
母数がどうのとか回答層の偏りがどうのとか難しい(気軽に答えられない)とかいろいろ言われてますが、
そもそも回答層の偏りに関してはローカル中心のユーザーにこのアンケートに関するトゥートをリーチさせることは不可能なので…

いい意味での「意識の高い」人たちによる十分有意な意識調査だと思います。300人も集まってるんだし。
もっとラフで答えやすいアンケートにすべきだったとかいう人もいるようですが、
ラフなアンケートは質問もラフにせざるを得ないし、当然回答もラフなものになります。

とりあえずAPI!WebUI実装は後!

WebUIはMastodonの顔という人が多くいます。正しいとは思いますが、だからといってMastodonの全てをWebUIで行えるというわけでもありません。

WebUIもあなたが使ってるサードパーティのMastdonアプリケーションもどちらもクライアントの1種であり、全てAPIを通して(設定画面除く)データをやりとりしています。つまり、WebUIに新しい機能が生やすということはAPIを作って、そのあとWebUIをいじって、とやることであり、面倒です。

この記事では、APIはあるのにWebUIにはない機能を紹介します。

時間指定投稿(予約投稿)

これはそのうちUIも作るよって言われてるやつです。POST /api/v1/statusesscheduled_atをISO 8601くっつければ予約できます。5分以上置かないといけません。これは、5分毎に次の5分間に予約されてるトゥートは無いかな?って確認して、そのあとキューに入れてその時を待つという感じの実装なのでしょうがないです。

GET /api/v1/scheduled_statusesでその一覧を取得できます。
PUT /api/v1/scheduled_statuses/:idscheduled_atを変更できます。
DELETE /api/v1/scheduled_statuses/:idで削除できます。

サードパーティクライアントはSubway TooterやTheDeskが対応しているが、TheDeskは投稿しかできない(日時の変更や削除が無理)
FediPlanというWebアプリもある。

アンケートの投票が終わるまで票数を隠すかどうか

そもそも、WebUIは投票するまで票数がわかりませんが、本来はこれで指定できます。アンケートのpoll[hide_totals]にboolean値を設定します。指定された投稿は「合計票数」と「投票人数」(複数選択肢がOKのアンケートもあるので、この2つは一致しないことがある)のみ開示され、各選択肢に何票入ったかは終了までわからないようになります。

通知のアカウントごとの絞り込み

GET /api/v1/notificationsaccount_idを指定します。そのアカウントからの通知のみを表示できます。

全トゥート絶対ふぁぼるマンで通知TLが意味をなさないことがあるので、個人的にはこの逆があればと思うんですが(一部サードパーティクライアントはクライアント側処理でやってます)

公開範囲を指定してブースト

使いこなしてる猛者募集中ブーストはトゥートの形態の一つとみなすのはMastodonだろうがTwitter(リツイート)だろうが同じで、
ブーストがトゥートならブーストにも公開範囲があってもいいだろうということでつきましたこの機能。

同じように公開と未収載とフォロワー限定と選べる(ダイレクトは意味ないし)のはいいが、ブーストの公開と未収載の差ってなんだって気がします。
普通の投稿なら連合やローカルタイムラインに流すかどうかという決定的な違いがあったけど、ブーストはもとから流れてこないし。わからん。誰か教えてください。

普通にフォロワー限定にすると、非ログインユーザーが自分のプロフィールを覗いたときそのブーストは表示されません。BT言及をフォロ限でやりたいときに使える?

タイムラインのマーカーの取得

ホームタイムラインと通知タイムラインでどこまで読んだかを記録しておけます。ローカルや連合には使えません。

GET /api/v1/markersで取得、POST /api/v1/markersで送信します。

家ではPC、外ではスマホでシームレスな廃人Mastodonライフを送ることができるはずですが、あまり普及していません。
というのも対応クライアントがWebUIとTheDeskしかないからで、またWebUIはマーカーの取得を搭載していないからです。

Pixiv FANBOX (無料で読めます)にいろいろ書きました。
ここでSubway Tooter作者の方もおっしゃっているように、WebUIの現在の実装にいろいろ難があるからです。ブラウザという制限上仕方ないところとも言えますが…

マーカーの送信タイミングについて上の記事から引用します。

WebUI
離脱時。たまに編集とかした後タブを閉じるときに「このページ離れるよ。保存されないデータがあるかも知れん。それでもいい?」って聞かれることがある。あの感じでそのページを離脱するときに好きな処理を入れることができるが、それを利用してマーカーを送信するようだ。
しかし、タブ開きっぱなしで散歩に行くこともあるだろうし、これだけでは不十分だろうという反対意見がある。
TheDesk
離脱時と最小化時そして放置時。(ただしデフォルトではマーカー機能はオフになっている。)ウィンドウを閉じるときにちょっとまって…って表示されるダイアログを出しながら最大3秒待つようになっている。3秒以内に送信が完了したらその時点で終了し、3秒後にまだ完了していなければ強制終了になる。
放置時の判定はマウスを動かさずに60秒経ったとき。
放置しても保存されるのでWebUIよりは最小化時があるのでマシだろうが、これも最適解かと言われると怪しい。(まずそういう判定ができるのはネイティブアプリケーションだけかな)

これの登録や削除、一覧の取得はAPI経由でもできるようになっています。

(番外編)時間指定は細かくできる

時間指定投稿は、API上では絶対時間で指定するため、1分単位での指定が可能です。
アンケートの終了時間やフィルターの有効期限は、API上では秒単位で指定するため、1秒単位での設定が可能です。

(番外編)時間を出してくれない

たまに「あなたはMastodonをはじめてn日です!」みたいなトゥートが流れてくることがありますが、それは
アカウントのcreated_at(作成日時)を見ているだけのことで、一部サードパーティクライアントには
これを標準で表示する機能があります。

また、連合するディレクトリの追加に合わせてlast_status_atというのができました。
これは最後にトゥートした日時を返すもので、WebUIでもディレクトリには使われています。
もちろん他の場面でも使えるので、これまた一部のサードパーティクライアントは出すようになっています。

名称

たとえば、「連合タイムライン」が「連合タイムライン」と呼ぶのはなぜかという問いには、それは公式クライアントであるWebUIがそう言ってるからとしか答えようがありません。

上の機能はWebUIには無いけど日本語名誰が付けたん?って聞かれると、「俺がそう読んでるから」としか言いようがありません。
つまり、日本語名は未定です。一般に、もし上の機能がWebUIについたら、まず英語で表記されるUIができて、それが翻訳プラットフォーム
であるCrowdinに追加され、そこで審議されます。そういうことになってるんです。

例えば「時間指定投稿(予約投稿)」について、Subway Tooterは「予約投稿」、TheDeskは「時間指定投稿」という名前を使っています。
どちらが正解というわけでもありませんね。

以上です。書き終えた段階で読み返しすらせずにPublishします。ごめんなさい。

明日のアドカレは!

おひとりさまが分散SNSのサーバーを維持する動機」(by 8mitsu)です!

自分もおひとりさましだしてもう半年ちょっとになりますが、やはり何と言われようとおひとりさまインスタンス(サーバー)を維持するというのは、
ハッカーの戯れでもなんでもなく、能動的なアクションです。「おひとりさまはいいぞ」と言うとどこか
「以下(以上が正しいかもしれない)極度分散主義者が理想論を述べています」的なムードになりがちなんですよね。(あと数行書いたのですが誰のアドカレかわからなくなるので消しました。)