ATProto Dashboard(使い方)

By ゆー (@usounds.work)
Published:

ATProto Dashboardを作りました。

https://atpdashboard.usounds.work/

<h1>出来ること</h1> ATProtoではこのWhiteWindの様に独自にCollection(lexicon)を作ることが出来ますが、どの様なCollectionがあるかを知る手段がありませんでした。Bluesky社が管理するlexiconについてはイベントを見ているサイトがいくつかありますが、独自のCollectionについては手段が少なさそうだったので新たに作りました。<br /> 2025年1月17日から収集を開始したので、それ以前のイベントは取得していません。

<h2>Dashboard</h2> 3rd party Collectionの統計が参照できます。

<h2>Browser</h2> 3rd party Collectionをツリー構造で参照できます。

<h1>Dashboardの使い方</h1>

https://atpdashboard.usounds.work/

<h2>設定</h2> <h3>Exclude collections with transaction key</h2> CollectionにトランザクションID(TID)を埋め込むCollectionを集計対象外にします。開発者が検知しているCollectionを意図的に除外しており、検知しているもの以外に発生した場合は都度対応が必要です。

<h2>ヘッドライン</h2> 上の方に数字が並んでいます。 <h3>Total Collections</h2> これまでに収集したCollectionの種類の件数を表示します。72時間以内に新たに作成されたコレクションがあれば、その数字を別に表示します。 <h3>Total Sub Name Spaces</h2> 例えば、私のサービスであればuk.skublur.postとuk.skublur.preferenceの2つのCollectionがあります。<br /> 「uk.skyblur」までが同じなら同じサービスとみなした件数です。当然、io.githubやapp.netlifyなどの汎用サービスのNSIDについては誤検知しますので、実際のサービス名より少し少なくなると思います。 <h3>Total Users</h2> 独自Collectionのレコードを作成したDIDをカウントします。そのサービスの作者ではなく、利用者をカウントします。作者を調べる手段は今のところありません。 <h3>Cursor Delay in Minutes</h3> Collectionに全く関係ありません。この仕組みはバックエンドでJetstreamを使っていますので、Jetstreamの受信に遅延が発生すると、遅れている分数が表示されます。<br /> もし、1日ぐらい遅延している様でしたら、お手数ですが作者までご連絡ください。<br /> <h4>隠し機能</h4> 数字のところをタップすると、ダッシュボードの内容を最新化します。

<h2>グラフ</h2> 24時間単位でのデータを集計して表示します。24時間はリアルタイムで計算しているため、アクセス都度微妙に形が変わります。 <h3>Daily Collections</h2> イベントが発生したCollectionについて、動きがあったCollectionと新しいCollectionを表示します<br /> <h3>Daily Users</h2> イベントを発生させたユーザーについて、動きがあったユーザーと新しいユーザーを表示します<br />

<h2>Collection</h2> Collectionを一覧表示します。

<h3>COLLECTION</h3> 受信したコレクション名です。72時間以内に作成されたコレクションには緑色のバッチがつきます。コレクション名をタップすると、lexicon解決を使ってlexiconの定義を参照出来ます。 <h3>EVENTS</h3> CollectionのCreateイベントが発生した件数を表示します <h3>FIRST INDEXED</h3> 2025年1月17日以降、そのコレクションにおいて一番初めにレコードが作成された時間を表示します <h3>LAST INDEXED</h3> そのコレクションにおいて最新のレコードが作成された時間を表示します <h3>並び替え</h3> ヘッダ部分(COLLECTION、EVENTSなど)をタップすると、その列で並び替えします<br /> FIRST INDEXEDで降順ソートすると、新しいサービスを見つけやすくなるかもしれません。ただし、この仕組みの情報は1月17日から収集していますので、それ以前にレコードがあっても初めてと誤検知します。<br /> <h3>Search</h3> 文字を入力すると、該当するCollectionのみ一覧表示する様になります。

<h1>Browserの使い方</h1>

https://atpdashboard.usounds.work/collection/browser

上の方は検索条件を設定できます。Searchをタップしないと、検索結果には反映されません(チェックボックスを除く) <h2>Search Collections</h2> Collectionの名前で検索できます。 <h2>First Indexed</h2> そのCollectionを最初に検知した日付について、From-Toで検索できます。片方のみの指定も可能です。タイムゾーンの処理が雑なので、誤差が1日程度発生します。 <h2>Last Indexed</h2> そのCollectionを最後に検知した日付について、From-Toで検索できます。片方のみの指定も可能です。タイムゾーンの処理が雑なので、誤差が1日程度発生します。 <h2>Has lexicon</h2> いわゆるLexicon解決が「できるかもしれない」Collectionのみに絞ります。この時点では、DNSレコードのチェックを行なっておらず、かつ、PDSからデータが消えている場合はご検知してバッチが着きます。 <h2>Exclude invalid TLDs</h2> NSIDのLv1がIANAのTLD Listに含まれていないCollectionを検索対象から除外します

<h2>ツリーについて</h2> <h3>フォルダ作成ルール</h3> 下記のルールでフォルダを形成します。 <li>NSIDのLv2は必ずフォルダを作る</li> <li>NSIDのLv3は以降は、小要素が2つ以上ある場合は孫要素のフォルダを作る</li> 例えば <li>community.lexicon.calendar.event</li> <li>community.lexicon.calendar.getActorEvents</li> <li>community.lexicon.calendar.rsvp.local</li> の場合は、community.lexicon.calendarのフォルダに <li>community.lexicon.calendar.event</li> <li>community.lexicon.calendar.getActorEvents</li> <li>community.lexicon.calendar.rsvp</li> の3つが並び、community.lexicon.calendar.rsvpは小要素があるのでフォルダになります。フォルダを開くと、ommunity.lexicon.calendar.rsvp.localの1件のみが表示されます。<br /> 逆に <li>community.lexicon.calendar.rsvp.local</li> しかない場合は、community.lexiconのフォルダのみ作成し、その中にcommunity.lexicon.calendar.rsvp.localのみが表示されます。 <h3>青いバッチ</h3> Lexicon解決が「できるかもしれない」Collectionには、青いバッチがつきます。DNSレコードのチェック結果は反映されませんので、タップしてLexicon解決をお試しいただくと解決に失敗する場合があります。

<h2>今後</h2> APIは勝手に使っていただいて大丈夫ですが、仕様が変わることが想定されますのでご注意ください。<br > 昔の名残でカスタムフィードジェネレーターのデータは溜まっているので、別のダッシュボードで公開予定です。