高専プロコン2015競技部門練習場を作りました
つくりました
4日ぐらいがりがり作りました。
さくらインターネットのレンタルサーバ(ライトプラン)でpythonのcgiが動かせると聞いて、何か作ってみたいなと思ってたんですが、そういえば今年の高専プロコンの練習場ないなと思い、よし作ってやろうと思い立ってから1週間ほどで完成しました。
認証トークンがソースにベタ書きされているところがあったり、使っているライブラリのライセンスを整理したりしたらソース公開するかもしれません。
大変だったところとか
ライトプランで作ったんですが、sshできないのが致命的。ローカルで開発していざ乗っけてみると500ばっかり。
twitter連携しよう!と思い立ったがoauth系のライブラリをインストールすることすらできず。virtualenvもsshできないから作りにくいしで、結局自前で書いたんですがめんどくさかった。1日かかった。勉強にはなりました。
pythonのbottleというwebフレームワークはすごく軽量で、cgiで動かすことも想定されているのでわりとさっくり動きました。
ただprintデバッグしていたところがcgiで動かすとレスポンスヘッダに混入してしまって、Apacheに怒られて500になってはまるとか。
さくらのレンタルサーバのapacheではmod_deflateが使えないらしく自分でgzipしてあげないといけない(対応してくれー)。
作って乗っけてみるまでわからなかったんですが、cgi遅いですね(毎回全部実行されるので当然か)。静的ページを生成しておいてそれを返すだけにしてあげればよかった。
解答のシミュレーションにはC++で書いたコードがあったのでそれを使いまわしたんですが、C++のソースコードをftpでサーバに配置し、これをcgiからコンパイルしてバイナリを作るということをしました。
サーバに乗っているgccが4.2とか化石みたいなコンパイラで、-std=c++11というオプションすら無くて絶望しかけた。
clangが入っていた(これも古い)のでこちらを使いました。gccに比べたらrange-based-forも使えたし。std::moveがなかったりで一部修正したらちゃんとコンパイルできました。
解答のビジュアライザとしてcolunさんの汎用ビジュアライザを使わせてもらいました。すごく便利です。僕の中でマラソンマッチ必携のツールですね。 java版ばかり使っていましたが、js版のほうが圧倒的に早いしリロードもブラウザでリロードするだけで済むのでこりゃ便利だ。