AtCoder Problems のパクリアプリ CF Problems を作りました
概要
AtCoder Problems
を模倣して CF Problems
という Web Application を作りました.
(2021-07-07追記) 衝突を避けるためにサイト名を Codeforces Problems
に改名しました.
はじめに
AtCoder Problems
の Codeforces
版みたいな Web Application があったら良いなと思っていたのですが, これまでのところ私の観測する範囲では存在していませんでした.
(2021-07-07追記) あとでちゃんと探したらありました.
- Contest Mania
- https://tom0727.github.io/cf-problems/
- このブログ書いた後に出来たサイト
そして, ちょうど Web フロントエンドの勉強をしたいということもあり良い機会だと思って作りました. 下記に示すリンクから作ったものを見ることが出来ます.
Codeforces は Codeforces API
という API を公開しているので今回はこれを利用しました.
開発の際は AtCoder Problems
と yukicoder problems
のコードを参考にさせてもらいました.
宇宙ツイッタラーX (@kenkoooo) さん, iiljj さん, その他のコントリビューターの皆さんに感謝してます.
CF Problems とは?
CF Problems
は Codeforces API
を利用して Codeforces
の問題およびユーザー情報を本家とは違う形で表示するフロントエンドツールです.
AtCoder Problems
っぽいものを目指して作りましたが, 実装が面倒あるいは Codeforces API
のみでは不可能だった機能を省きました.
まず. ページが Table
と User
の2種類しかありません. List
は面倒だったので省きました. (今後やる気があれば実装するかもしれません)
それぞれのページの外観は以下の画像が示す通りです.
Table
ページの外観
User
ページの外観
AtCoder Problems
に寄せた外観であることが確認できます.
既知の問題点
CF Problems
には現時点で把握しているだけでも以下のような問題点があります.
- 本来表示されて欲しい問題が Table ページに表示されないことがある.
例えば直近では Codeforces Round #700 (Div. 2)
のC問題以降が Table で表示されていません.
これは Codeforces API
の仕様なのでフロントエンド側で対処するのは難しそうです.
なので当分あるいは永遠に改善されないと思います.
(2021-07-07追記) GitHub Actions でクローラを定期実行することでこの問題は解決しました.
issue URL : Div1 と Div2 の併設回で共通で出題されている問題がテーブルページにおいてどちらか一方にしか表示されない · Issue #1 · kira924age/CodeforcesProblems · GitHub
- Dark Theme で Table を Chrome 系のブラウザで表示すると右に謎の白い線が入る
以下の画像に示すとおり謎の白い線が Table に右側に表示されています. CSS を色々いじったのですが消えてくれないです. ちなみに FireFox ではなぜか表示されません. 意味不明です.
(2021-09-12追記) 何もしてないのに今見たら手元の環境では治ってました. ブラウザ (Chrome) のバグだったのかも?
- コードが雑
これは機能的な問題ではないのですが, コードがとても雑です.
Web フロントエンド初心者が雑に書いたものなのでそれはそうです.
具体的に言うと, TypeScript の型定義をサボって any
を多用した,
エラーハンドリングをサボった, などがあります.
コードが雑なので把握していないバグが潜んでいる可能性は非常に高いです.
汚いコードは下記の GitHub のリポジトリから見ることが出来ます.
使用したツール
最後にアプリケーションを作る上で利用したツールを書いておきます.
- React
- JavaScript の View ライブラリです
- https://github.com/facebook/react
- Create React App
- ワンライナーで環境構築をしてくれる便利なやつです
- https://github.com/facebook/create-react-app
- ant-design
- 自称世界で2番目に人気のある React UI Library です
- https://github.com/ant-design/ant-design
- recharts
- React 向けのグラフ描画ライブラリです
- https://github.com/recharts/recharts
- nivo
@nivo/calendar
を使って Heatmap を実装しました- https://github.com/plouc/nivo
- react-router
- ルーティング (ここでは状態 と URL を紐付けるの意) するために使いました
- https://github.com/ReactTraining/react-router
- react-toggle
- toggle (切り替え) 機能を手軽に実装するために使いました
- https://github.com/aaronshaf/react-toggle
- react-helmet
- theme の切り替え機能を実装するために使いました
- https://github.com/nfl/react-helmet
- react-collapse
- collapse (折りたたみ) 機能を手軽に実装するために使いました
- https://github.com/nkbt/react-collapse
- drawio-desktop
- Codeforces っぽいロゴを作成するのに使いました
- https://github.com/jgraph/drawio-desktop
- Favicon Generator
- Favicon を作成するのに使いました
- https://favicon.io/favicon-generator/
- Codeforces API
- GitHub Pages
- GitHub Actions
- クローラの定期実行やデプロイの自動化をするために使いました.
- Public Repository なら制限無しで無料で使えてお得
- Go