AtCoderResultNotifier - AtCoderの提出結果を通知するUserScriptを作成しました
beta版AtCoderサイトにおいて,Waiting Judgeとなっていた提出の結果を通知するUserScriptを作成しました.
その名もAtCoderResultNotifierです.
注意事項
インストールの前に注意すべきことをいくつか述べておきます.
- このスクリプトはAtCoderのbeta版サイトでのみ動作します.
(URLの初めがhttps://beta.atcoder.jpで始まるところです)
(コンテストでの使用は自己責任でお願いします!)
インストール方法
- お使いのブラウザでTampermonkeyをインストールします
(その他UserScriptマネージャーでも動作するはずですが未確認です) - このリンクからAtCoderResultNotifierをインストールします
[2018-08-17 追記] AtCoderResultNotifier_WJCollecter は AtCoderResultNotifier にマージされました.お手数ですがお使いのUserScriptマネージャより AtCoderResultNotifier_WJCollecter を削除してください.
これでインストール完了です.
正しくインストールされていれば,beta版AtCoderサイトでソートコードを提出して少し待つとACやWAなどの通知がポップアップされるはずです.
仕様など
- WJとなった提出を提出一覧から取得し,beta.atcoder.jp以下で通知を行います.
- 通知ウィンドウをクリックするとその通知を消すことが出来ます.
- WJとなっている提出情報はlocalStorage(ブラウザ側)に保存されます.
(そのため各コンテストごとにドメインが異なる旧サイトでは難しいです…) - 提出一覧での表示が[WJ],[処理ケース数/全ケース数],[WR]のときWJとして以降確認を行い,それ以外の場合は通知を行います.
(そのため[1/10 TLE]などの時点で通知を行いますが,最終的に[WA]である可能性もあります) - WJである提出を確認する間隔は3.5秒です.
(beta版AtCoderの提出一覧ページと同じ) - WJである提出の現在のジャッジ状況を調べるときは公式で用意されているjsonを叩いています.
- WJのデータがない場合はjsonを取得しにいかないためサーバーへの負荷も抑えられているはずです.
- WJのデータを保持しておく期間は10分です.
(提出から結果が出るまで10分以上はかからないはず…) - 最後にアクティブになったウィンドウでのみ通知を行います.
また,非アクティブになってから動作し続ける期間は5分です.
今後の予定?
- 質問も通知する機能 … 区別のために表示方法を変えて提示すると良いかも
- 部分点への対応 … 部分点があるコンテストにおいて,WAだが部分点を得ている場合の表示などをしっかり
- 通知ウィンドウの表示方法の調整 … 現状では問題文と被ってしまうため,それが邪魔になる場合は画面最上部など邪魔にならない位置へ移動するなど
- 旧AtCoderサイトへの対応 … ただlocalStorageはドメインごとに保存するためコンテスト間を超えての通知は難しい,ドメイン間を超えて動作も出来るがセキュリティ上問題があるかも
最後にアクティブだったウィンドウの固有IDを保存しておくことで非アクティブになってからも数分間動作するようにしてるんだけど,
— satanic@競プロ🔥 (@satanic0258) 2018年8月16日
動作するタブA,B,関係ないタブCを用意して,
Aをクリック→Bをクリックしてソース提出→Cをクリック→Bを削除
としたらAで通知が来ないことがわかった
↑の対応(結構特殊ケースなので対応するかは微妙なところ)
最後に
Twitterでアドバイスをくださったtatsumackさん,chokudaiさんありがとうございます!
JavaScriptの知識が全然ないまま見よう見まねで作ってみたクオリティなので,もしかしたらコードを見て「ここはこう書くともっとシンプルだよ!」「その関数は古いからコレを使うといいよ!」などあるかもしれません.
その時は是非ご教授ください><
その他改善案などもTwitter等でリプを下さるとうれしいです!