この記事は、作業の経過を書いておくことであとで同じようなことをする人の助けになればと思い書いています。経験がある人、もしくは未来人の私は助けてください。
Library Checkerを知っていますか?僕は知っています。
こんにちは。Library Checker(よすぽジャッジと呼んでいます)の言語にRubyを追加しようとして苦戦中です。
よすぽジャッジは競プロに必要なライブラリのテストができるサイトです。
現状、このサイトにはRubyのテスト環境はありません。残念ながら。
おそらくご存知ないと思いますが、私はRubyで競プロをすることに熱を(41.1℃ほども)入れているので、Rubyが使いたいのです。(諦めてRustに乗り換えようかとしていたのですが、Rubyをできるようにすればいいじゃないという私にとっては目からウロコの発想をくれたそすうぽよさんに感謝します)
どうにかRubyができるようにしたいので、がんばります。
とりあえず、先駆者様のプルリクを参考にしてみます。
なんとなくわかったような・・・・。
テスト環境を整えようとします。
problemsをcloneして、READMEを読みつつコマンドを打ってみます。
$ git clone https://github.com/yosupo06/library-checker-problems.git
$ cd library-checker-problems
$ ./generate.py -p unionfind
02:45:36 [INFO] Start unionfind
02:45:36 [INFO] generate params.h
02:45:36 [INFO] Test cases are already generated
02:45:36 [INFO] The checker is already compiled
よさげなのでjudgeをcloneして同様のことをします。
$ git clone https://github.com/yosupo06/library-checker-judge.git
$ cd ../library-checker-judge
$ pip3 install -r requirements.txt
$ ulimit -s unlimited
$ pip3 install termcolor toml psycopg2 psutil grpcio minio
$ sudo apt install postgresql-client libpq-dev python3 python3-dev python3-pip g++ cgroup-tools libcap2-bin
$ ./launch_local.sh
なんかエラーが出たので適当にぐぐって解決できないか試しました。エラーは消えたので覚えてません。
$ curl -OL https://github.com/google/protobuf/releases/download/v3.4.0/protoc-3.4.0-linux-x86_64.zip
unzip protoc-3.4.0-linux-x86_64.zip -d protoc3
$ sudo mv protoc3/bin/* /usr/local/bin/
$ sudo mv protoc3/include/* /usr/local/include/
$ pip3 install -U protobuf
./launch_local.sh
起動できたのでevansとやらを入れて試してみます。
# evans インストール方法 わすれました
$ evans --host localhost --port 50051 api/proto/library_checker.proto
______
| ____|
| |__ __ __ __ _ _ __ ___
| __| \ \ / / / _. | | '_ \ / __|
| |____ \ V / | (_| | | | | | \__ \
|______| \_/ \__,_| |_| |_| |___/
more expressive universal gRPC client
librarychecker.LibraryCheckerService@localhost:50051>
Good Bye :)
evans: deprecated usage, please use sub-commands. see `evans -h` for more details.
いけたっぽい
あとjudge以下のGoも(↓いらないっぽい)
$ cd judge
$ go run main.go judge.go
2020/08/20 03:09:33 local mode
2020/08/20 03:09:33 Connect to API host: localhost:50051
2020/08/20 03:09:34 JudgeName: tzm
2020/08/20 03:09:34 Start Pooling
はい
この端末は開いたままで別の端末を起動して作業します。
どうやらいけたっぽいのでfrontendもやります。
$ git clone https://github.com/yosupo06/library-checker-frontend.git
$ go run . --local
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] Loaded HTML Templates (12):
- login.html
- navbar.html
- problem.html
- ranking.html
- register.html
- submitlist.html
-
- css.html
- help.html
- problemlist.html
- submitinfo.html
- userlist.html
[GIN-debug] GET /public/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (4 handlers)
[GIN-debug] HEAD /public/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (4 handlers)
[GIN-debug] GET /register --> main.registerGet (4 handlers)
[GIN-debug] POST /register --> main.registerPost (4 handlers)
[GIN-debug] GET /login --> main.loginGet (4 handlers)
[GIN-debug] POST /login --> main.loginPost (4 handlers)
[GIN-debug] GET /logout --> main.logoutGet (4 handlers)
[GIN-debug] GET / --> main.problemList (4 handlers)
[GIN-debug] GET /problem/:name --> main.problemInfo (4 handlers)
[GIN-debug] POST /submit --> main.submit (4 handlers)
[GIN-debug] GET /submission/:id --> main.submissionInfo (4 handlers)
[GIN-debug] GET /submissions --> main.submitList (4 handlers)
[GIN-debug] GET /rejudge/:id --> main.getRejudge (4 handlers)
[GIN-debug] GET /ranking --> main.getRanking (4 handlers)
[GIN-debug] GET /help --> main.helpPage (4 handlers)
[GIN-debug] GET /admin/userlist --> main.getUserList (4 handlers)
[GIN-debug] GET /admin/addadmin/:name --> main.getAddAdmin (4 handlers)
[GIN-debug] GET /admin/deladmin/:name --> main.getDelAdmin (4 handlers)
[GIN-debug] Listening and serving HTTP on :8080
いけたのかな?
なんかエラーが出てたので一旦終わってなんかします。
$ cd ../library-checker-judge/judge/executor-rust
$ cargo build --release
適当に全部再起動したらエラーでなくなりました。
ブラウザでlocalhost:8080
を見てみます。
(スクショ撮るの忘れた)問題なんもねーじゃん。
$ cd ../library-checker-problems
$ ./deploy.py
はい。
おやすみなさい
Q. そんな行きあたりばったりで大丈夫か?
A. 大丈夫じゃないが