Rails で作る AI vs AI Reversi - ストーリー の続きです。勉強会のメンバーからの案を踏まえ、API仕様書0.1版を作りました。ひとまず公開します。
コメント等々いただければと思います。
モデルを再設計しなければぁ。
Rails で作る AI vs AI Reversi - ストーリー の続きです。勉強会のメンバーからの案を踏まえ、API仕様書0.1版を作りました。ひとまず公開します。
コメント等々いただければと思います。
モデルを再設計しなければぁ。
昨日(Rails で作る AI vs AI Reversi - モデル設計)の続きです。今日はストーリー(ユースケース)について。
クライアントにあたる Reversi AI は、 おそらくバッチ的なプログラムになるでしょう。その場合、実際のリバーシのアルゴリズム以外に、どうやって対戦相手を見つけるか・前述の Game をどうやって生成するか、などが問題になります。プレイヤーにはアルゴリズムのプログラミングに集中してもらいたいため、「ゲームの生成・対戦相手を見つける・対戦結果を見る」などは、Webサイト上で提供しようと考えています。
それを踏まえた上で考えたストーリーです。
前準備
Web サイトにて
自分の PC にて
Web サイトにて
いかがでしょうか。最後に見たのは数年前だけど、「対戦相手を待つ」あたりは、ハンゲっぽいのをイメージしてます。
自分の PC にて
どうしよっかなぁ。(結構楽しんでる
)
昨日(Rails で作る AI vs AI Reversi - 経緯とコンセプト)の続きです。今日はモデル設計について。

いろいろ悩んだんですが今日時点では、こんな感じで考えてます。こんな感じと言っても、わけわかんないかもしれないので簡単に説明します。
2008/7/22 更新: 詳細に書いても変更になった時に困るのでポイントだけ書きます。
Board モデルが盤上の石の座標を二次元配列で持っています。
Log モデルが1手目から status(パスか黒が打ったか白が打ったか)と、打たれた座標、ひっくり返った石の座標の配列を持っています。
Log モデルは、Webサイト上でFlash などで視覚的に対戦状況を見ることができる、Reversiビューアのために作ったモデルです。
Logモデルを現在の手数+1をポーリングで監視して、更新があれば描画する、みたいな AS を書けばビューアは簡単に作れるんじゃないかなぁと思ってます。
以上。
OSC2008Nagoya に、我らが勉強会 CSNagoya が参加するのは決まってたんだけど、出し物として「Haskell で作る Twitter」って考えてたんですが、どうも「ふーん」で終わってしまいそうなので、「雑談で話していた AI Reversi をやりたいっす><」と自己主張したところ、「いいんじゃない、頑張って!」ということで、草案(発案者の方のアイデアをそのまま)投下。なんだか「gabu ちゃん一人で頑張ってw」的な空気が漂ってるんですが、いじめですかねw
というようなコンセプトです。
クライアントとゲームサーバは http 通信を基本として、できるだけ RESTful な API を公開することを考えています。(Restful な API って日本語あやしいな・・・)
つまり! http 通信できるなら、どんなプログラミング言語でも参加 OK!
その点が、OSC のオープンソースに引っかかるという名目で進みます。いいですよね?勉強会の皆様。
モデルとか必要そうなアクションとか考えてたんですが、眠いので、また明日。おやすみなさいませ。。。
PS. 「たまには普通の話とか子供の話とか書いてくださいよー」と言われてたのに、こんな話でごめんなさい><
いつか必ず書きます><
まぁ受け売りなんですが、備忘録としてメモ。
モデル名 : Item として読んでくだしあ。
発行する SQL は2回だけど DB 依存しないパターン(offset 使ってるから割と早そう)
offset = rand(Item.count :all)
Item.find :first, :offset => offset
発行する SQL は1回だけど DB 依存するパターン(MySQLの場合)
Item.find(:first, :order => 'RAND()')
Item.find(:all, :order => 'RAND()', :limit => 10)
ちなみに、’RAND()’ は DB に依存するコマンドなので要注意!他のDBの場合は、
参照 : SQL to Select a random row from a database table
※ SQLite と MySQL しか試してないです。ごめんなさい><
Rails ActiveRecord は、結局 :order で渡された文字列を SQL を生成するときに、 ORDER の後に繋げてるだけなので、書いたままの SQL が出来ると思えば好きなように書けるんですねぇ。
あと、当たり前だけどレコード数が多いと、きっと困ることになると思います。そもそもレコード数が多いテーブルからランダムに N レコード取得したいっていう要望が、そもそも間違ってる気もしますが。
詳細はこちら(英語)へ。性能の話や、DB に依存するのではなくて Ruby プログラムでランダムにする方法なんかも載ってます。それでは。
最近はもっぱら Ubuntu Gutsy + NetBeans な環境で Rails 触ってるんですが、SVN へコミットするときのコミットメッセージに日本語を入力しようとするとキータッチするたびに確定されてしまうという悲惨な不具合にあいました。
何を思ったかそれまでは、NetBeansのSVN機能を信用していなかったのか、コマンドラインで「svn status」とか「svn ci」とか、やってたのさw
悲惨な不具合とは、こんな感じ。
「かってにかくていされる」→「勝手に確定される」と打とうとしてモガイテイル様子

いろいろ調べた所、「SCIM」が悪いのではと。
http://www.netbeans.org/servlets/ReadMsg?list=nbdiscuss_ja&msgNo=576
さらに調査したところ、「1.4.7-3ubuntu6」というバージョンで、解決されたらしい。
https://bugs.launchpad.net/ubuntu/+source/scim/+bug/178742/comments/11
自分の「SCIM」のバージョンを確認してみる。
dpkg -p scim | grep Version Version: 1.4.7-1ubuntu2
なるほど、ちと古いとな。
じゃあ久しぶりにアップデートしてみるかと、アップデートしてみたけど「SCIM」のバージョンは変わらず。よくよく調べると、次のバージョンの Ubuntu 8.04 Hardy で提供されるバージョンらしい。
そこから Gutsy に Hardy のパッケージをなんとか捻じ込めないかと調べたけど、依存するパッケージとか簡単に入れる方法が見つからず面倒くさくなってきたw
もう面倒くさいし Gutsy から Hardy にあげちゃうか。4月に出てしばらくたってるし、LTS(長期サポートという意味)だし、ということで「システム」→「システム管理」→「アップデート・マネージャ」から、前からちらちら見えていた、Gutsy へのアップデートボタンをぽちっとな♪
数十分のアップデートと再起動ののち、直りましたよ!コミットコメントで日本語使えるようになったよ!ビバ日本語!
結論 : Ubuntu で NetBeans 使うなら、とっとと Hardy にしよう!
PS. 絶対出る不具合の対策として、以下を紹介しておきます。
fmemo - Ubuntu を 7.10 から 8.04 にアップデートすると SCIM を [半角/全角] で ON/OFF できなくなった
Hardy にアップデートしたがための他の設定とかは、いろいろググってください><ごめんなさい><
結論:Rails しか見てないのは良くない。
自分がよくやるRailsアプリの作り方は、(仕事でバリバリやってないので、作り方、結構適当です。けど、こういう流れで作ってる人も多いのでは?)
5. ~ 7. と、デバッグはぐるぐるループしますが、だいたいこんな感じで作ります。
と、説明したところで、最近「UI」についてイロイロ考えてたのでまとめてみます。たまたまみつけた「はぶさんのRailsやChuraのいけてないところ(2006年のエントリー)」がきっかけになりました。
1.UIを設計する
2.UI設計の成果物を元に、DB設計をする
3.DB設計の成果物を元に、UI実装を自動生成するRailsやChuraってのは、3.のところをやってくれるんだけどさ、手順全体を見たらださいじゃん。「1.の成果物(が想定しているUI実装) イコール 3.の成果物」に本当に出来るの? ちゃうでしょ。凝ったUIだったら駄目じゃん。CSSで頑張る? それで済む程度のシステムだったらいいんだけどね。
~~~
1.の成果物をストレートにUI実装に使えるほうがいいじゃん。
例えば、「1.UIを設計する」 のところで、HTMLモックを作ったとしてそれが実装として使えないんですよね。Rails Viewにコピペ(だけじゃなくてタグ化とかも)だし、ループ制御やIF制御なんか追加すると、結局みんなが昔忌み嫌ったJSPとほとんど変わらないVIEWが出来ると思う。ここ進化してない。
ちなみに、Rails界隈でみんな大好き 37signals の開発手法(物語が多いけど) Getting Real によると
紙スケッチ
-
スケッチは素早く、殴り書きで、お手軽でできるもの;それ以上は必要ありません。書きましょう。走り書きでいいんです。四角や丸や直線なんかのシンプルなものでいいんです。アイディアを頭から紙に写します。目的は、頭の中のコンセプトをラフなインターフェースのデザインに変えるところです。ここはまだ実験段階です。正しい・間違いといったことはないのです。
-
HTMLを作る
-
先ほどのスケッチの特徴(または、セクションやフロー)を元にHTMLを記述してみます。実際に形にすることで、皆がスクリーン上で見ることができるのです。
「Basecamp」では、我々はまず、「メッセージを書く」スクリーンを作り、次に「メッセージを編集する」スクリーン…徐々に開発を進めていきました。
まだプログラミング・コードに手を出してはいけません。あくまでHTMLとCSSの、現実に近い模型を作るのです。完成品にするのは後の段階です。
-
コードにする
-
実験的に作ったものがうまくいって、必要な機能を満たしたのなら、実際にプログラミング・コードを記述していきます。
と、あるんだけど「あくまでHTMLとCSSの、現実に近い模型を作るのです。」は最終的にVIEWにせっせこ書き直してるのかな。 じゃあ最初からHTMLモック(模型)をERB形式でってのは「デザイナと分業!」ってのが難しくなるという、なんともはや。個人的にデザイナと!って形式で仕事したことないので実際どうかは分かりませんが。
それで、いっきに話は飛ぶんですが見つけましたよ!プレーンなHTMLを(ほぼ)そのままVIEW層で使えるWebフレームワーク 。Java界隈の人は気付いてると思いますが。
Wicket (日本語サイト: Wicket-ja )です。もう一気に惚れました。ありがとうJava。ただいまJava。かくいう私も、就職してから4年間はJava(主にStruts)を業務でやってたのでJavaは好きなんですよ。なにが惚れたって、このくだり。
Wicketの最大の目標は、ウェブ・アプリケーション開発にオブジェクト指向を取り戻すことです。
ちなみにこのページに書いてあること全部かっこいい><
さらに脱線するんですが、UIだけさらに特化した話をすると尊敬するS氏から教えてもらったGWT-Extとかね、もうね、どうしろと>< ああ、そういえば、知る人は知っているからいまさら言いふらさなくていいって言われてたんだけど書いちゃった。
なんというか、最近、Railsから離れた目で巡回してたらJavaの底力を見たというか。
大分古いけどエンタープライズで(お仕事で) Rails使って炎上って話
Rails炎上|傲慢SE日記 ~30歳からの挑戦~
Railsについて思うこと
を読んでると、またJavaに戻ってきたりして。炎上ってのは言語やフレームワークとは全然違うレイヤー(生産性が10倍!なんて幻想に惑わされた営業や上層部や管理者etc)が問題なんだろうけどぉ。
Rails とか Java とか言ってる自分は C# な仕事してるんですけどねw
結局、1エンジニアが生涯で携わるプロジェクトの数ってそう多くないだろう(何十個や何百個ではないの意)から、業界の流れが自分にどれだけ影響するんだろうって気もするけど。流れっつってもBlog読み読みしてるだけなんだけどね
なんにしても言いたかったのは流行りに流されないように自分の目を持っていたいね。(って自分に言ってる)
===
気になるフレームワーク(というより連携?w)自分用まとめ
問題は何を作るかだな。。。
Recent Comments