TopCoderの学習記録アプリ「するめダイアリー」を作った
最近競技プログラミングにハマりまして、本家ブログの更新ができずにいました。
半年以上ぶりの更新です。
TopCoder部のブログには既に書いた*1のですが、Google App Engineを用いて
TopCoderの学習記録アプリを作りました。
本エントリは制作物の簡単な紹介と、メイキングの解説記事になります。
TopCoder*2って?
オンラインで参加できるプログラミング大会の一種で、
- 制限時間内に解法が決まっている問題を3つ解く「Single Round Match(略してSRM)」
- ヒューリスティクスな解法が要求される、二週間の長丁場「Marathon Match(略してMM)」
などの種目があります。アメリカのラスベガスで世界大会*3も開催されてたりします。
SRMは月二回、MMは月一回ぐらいのペースであります。
これは何をするものか?
SRMの問題を公式サイト*4からクロールしてデータベースにためておき、
問題の難易度、カテゴリごとに検索できるようにしました。
そして、「解いた問題」「解いてない問題」をコードと一緒に記録できます。
さらに、解いた問題をブログ形式に書き出せるようにしました。
以下のスクリーンショットを見ていただければ雰囲気は分かっていただけるかと。
どうやって作ったの?
URLから分かるように、Google App Engine(Python版)をつかいました。
Google App Engine用のPythonフレームワークとして、tipfy*5を使ってます。
tipfyは気軽に使えてオススメですが、日本語の解説記事があまり無いので
次回エントリで簡単なチュートリアルを書きたいと思います。
エディタはTextMate*6を使いました。(MacBookで開発してます)
有料ですがEclipseより軽いし多機能だし便利です。
感想
楽だった点
GAEでの開発だったので、
- ボタン一発で本番環境にデプロイできる
- データベースの管理ツールが用意されている
点が良かったです。
苦労した点
Python版に限らないのですが、データベース周りの制限がきついです。
例えば、
- クエリにOR、JOINが使えない
- 一度に取って来れるデータは1000件まで
- 条件によってはソートが効かない
などなど。
なので、一度個別に取ってきたデータをつなげてORを無理矢理実装したり、
わざとテーブルを非正規化してJOINを使わなくてすむようにしたりしました。
詳しい開発の話
長くなるのでまた後程。
まとめ
みんなTopCoderに参加すればいいと思うよ。
そしてするめダイアリーへの登録も忘れずに!