作業予定
作業
仕様の策定
- 課題として作るものを決める。7枚麻雀と麻雀の成績管理との直和をとれば簡単なゲーム CGI になるというのはどうか。前者のみなら、わざわざ Google App Engine を使うまでもない。まずは後者から始め、余裕があったらゲーム部分を作るようにしよう。
作業
- クエリ結果の配列に対するループが簡単に実装できた。if などの制御構造もあるらしい。
- ある程度は Django (← なんて発音するの?) を使えるようにならなければならない。テンプレートのマニュアルとリファレンスを読む。
- あんまり複雑なロジックはテンプレートで実装できない。たとえばデータの値の範囲に応じて色を変えるような場合は、Python コード側でデータモデルに属性を追加し、それに応じて HTML 要素の class を指定してあげるのがよいようだ。
- スタイルシートも簡単。テンプレートにしたがってスタイルシートを切り替えたりするので、静的ファイルも小さいパーツに分割しておいた方がよさそう。
設計関係
- Model View Controller - Wikipediaなどを読んだ。最もざっくりとまとめると、入力と処理と出力とを分離するということでよいだろうか。最近の自分が書いたコードを見ると、main メソッドが output(process(input())) みたいになっていることがある。それぞれを異なるオブジェクトに頼めばよい?
- VとCとの結合が少し強めになるのは仕方ない。下に述べる出力例ごとに google.appengine.ext.webapp.RequestHandler を継承したクラスを作り、get() で入力フォーム (これにはログインだけの単純なものもある) の表示を、post() で入力を Model に渡す部分とレンダリングを、それぞれ担当するようにしたらどうか。もうちょっときちんとやるにはこの機能をそれぞれ委譲するのかな。
- 個人で開発する小さなシステムだが、用件定義とか外部設計くらいはきちんとやるべきだろうと思ってシステム開発のノウハウを読む。
システムの目的
- 麻雀 (に限らなくてもよいが) に関する (主に成績の) データを管理する。
- 取得 (入力) できるデータは限られている。それを分析して「有用なレポート」を引き出す (出力する) ことが目的であるが、具体的な目標があるわけではない。まずは「有用なレポート」の候補を出そう。
用語の定義
- コミュニティ: 麻雀サークルや麻雀店。自分だけで使う分には唯一であると仮定してよいが、より柔軟なものとするために複数の存在を仮定する。
入力
- 各ゲームの行われたコミュニティ(ID)・日付・参加したプレイヤー(ID)・各プレイヤーの評価 (順位・得点など; コミュニティによって異なる)。
出力例
- Cを定数として、各プレイヤーに対して、各コミュニティで自分が参加したうち第 [iC..(i+1)C) ゲームの合計成績。
- 同、第 [0..∞) ゲームの合計成績。
- 各プレイヤーのコミュニティ内レーティング。
- 各プレイヤーの総合レーティング (well-defined な仕様にできるとは思えないが)。
- 各プレイヤーが各コミュニティでゲームに参加する日付と成績の分布 (曜日特性・1日あたり回数の分布・勝敗とゲーム回数との相関など)。
- 各プレイヤーの組が各コミュニティでゲームに参加する日付と成績の分布 (何曜日にはいつも同卓して一方的に勝っている、など)。
課題
- 設計に関する資料がほしい。Webサイトでも書籍でも。今まで我流だったので、プログラムに機能を追加するたびに大規模な構造の変更をしてきた。
コメント
- O'Reilly の GAE 本を注文しました。届くまで今しばらくお待ちあれ -- TA 森 (2011-10-31 16:09:59)
- ありがとうございます! -- 大堀 (2011-11-04 14:38:39)
最終更新:2011年11月04日 14:39