高専プロコン2015競技部門練習場を作りました

つくりました

高専プロコン2015競技部門練習場

4日ぐらいがりがり作りました。

さくらインターネットレンタルサーバ(ライトプラン)でpythoncgiが動かせると聞いて、何か作ってみたいなと思ってたんですが、そういえば今年の高専プロコンの練習場ないなと思い、よし作ってやろうと思い立ってから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版のほうが圧倒的に早いしリロードもブラウザでリロードするだけで済むのでこりゃ便利だ。