2006年 02月08日(Wed) [長年日記]
_ [アヴァロン]千年の王
フィギュアの発送通知が届いた。と言っても平日は家にいないので、手元に届くのは土曜日の予定。あとは一応単品売りしてる店を押さえておきたいな。もしかして千年の王2枚目が欲しくなる可能性もあるから。
_ [ツッコミレス]M's行った事あるんだ
そういえば私は巫女茶屋しか行った事がないな。つーかM'sは人が一杯で入れる気もしないが。そういえばM'sはアヴァ研のみやびたんとか氷屋氏が行きたがってたような。
それはともかく何故にこんなに人気なんだメイドさんマスター適性テスト。みんなメイドスキーなのか。そうなのか。
あとひま〜の氏はたまにはSkype立ち上げような。
_ [ツッコミレス]うーん、大漁だw
珍しいかどうかは順位と偏差値見れば分かるかと。最近の事情は知らないけど。
とりあえず言えることはウチに報告があった中でキミが最高のスコアを叩き出しているという事だけだw 大体周りを持ち出しても「類は友を呼ぶ」を証明してるだけなので何の弁解にもならない罠w
とりあえずメイドスキーなキミには最近名古屋に出来たメイドさんとボードゲームとかで遊ぶゲームスペースの潜入調査を命ず*1。イシュ氏とか連れてっていいからw
*1 情報提供:くね氏
_ [プログラム]Javascriptでハマる(失敗編)
Javascriptは最近さわり始めたばかりな上、C++やJavaのようなクラスベースのオブジェクト指向言語ではない*1ので、いろんな所で躓きます。
で、先日ハマった話。まあ実際の例を挙げると長くなりすぎるので、少し簡略化した例を(以下はprototype.jsを使う事が前提)。
例えばJavascriptでObserverパターンなんかを実装してみようとします。Observerパターンといえば代表的なのはModel/Viewなのでそれっぽいものを作ってみましょう。
まずはSubject(被験者)の方を実装。いわゆるカウンターというやつで、countUpが呼ばれる毎にObserverへ通知するようになっています。
var Counter = Class.create(); Counter.prototype = { initialize: function() { this.count = 0; this.observers = new Array(); }, countUp: function() { this.count++; this.notifyObservers(); }, addObserver: function(observer) { this.observers.push(observer); }, notifyObservers: function() { for(i = 0; i < this.observers.length; i++) { this.observers[i].update(this); } } };
次にObserver(観察者)。
var AlertView = Class.create(); AlertView.prototype = { initialize: function() {}, update: function(obj) { alert(obj.count); } };
これはupdateが呼ばれると警告ダイアログに表示するタイプ。Observerが一つじゃ寂しいからもう一つ作りましょう。
var ElementView = Class.create(); ElementView.prototype = { initialize: function(id) { this.id = id; }, update: function(obj) { $(this.id).innerHTML = obj.count; } };
こちらは指定したidを持つエレメントに表示するタイプ。
var a = new AlertView(); var b = new ElementView('count'); var c = new Counter(); c.addObserver(a); c.addObserver(b);
後は上のようにそれぞれのインスタンスを作成してCounterにObserverを登録します。
上のコードをtest.jsという一つのファイルに纏めて、あとは実行用のHTMLを用意しましょう。ボタンをクリックする度、countUpが呼び出されます。
<html> <script type="text/javascript" src="./prototype.js" charset="UTF-8"></script> <script type="text/javascript" src="./test.js" charset="UTF-8"></script> <div id='count'>0</div> <input type='button' value='count up' onclick='c.countUp()' /> </html>
実際の例はこちら。一応IEとFirefoxで検証済み。
全然ハマった話じゃありませんね。本題はこれからです。
その後、ふとprototype.jsについて調べてみると、prototype.jsではArrayが拡張されていてeachが使える事が判明します。
という事は、notifyObserversの部分は以下のように書けるはず。
notifyObservers: function() { this.observers.each( function(value, index) { value.update(this); } ); }
で、実際notifyObserversを上のように置き換えるとさっぱり動かなくなってしまったという次第。何故でしょう?
…長くなったので続き(解決編)は明日。
*1 プロトタイプベースのオブジェクト指向言語。ここでは詳しい解説は割愛します。
_ [その他]「 」バトン
キーワードバトンってヤツですか? 歌人氏から回ってきました(mixi)。お題は「さーりゃん先輩」。いや、割と困るんですが(^^;
Q1・PCまたは本棚に入っている「さーりゃん先輩」は?
PC版のToHeart2しかありませんって。つーかささらはグッズとかあんまり無いですからねぇ。ゲーセンの景品とか早く出しやがれ。
Q2・今妄想している「さーりゃん先輩」は?
ミルファシナリオとかシルファシナリオとかは妄想しましたが…。それってささら関係ないし。うーん、うーん。…あ、そうだ。次のファンディスクにミルファシナリオを!って何を言ってるんだ俺は。
え? もちろんささら大好きですよ? まだ全キャラやってないから暫定首位ですが。つか次のフルアニに隠しキャラでこっそりささら入れてください。もちスク水メイドで。色は白。
Q3・最初に出会った「さーりゃん先輩」は?
普通にPC版の説明書ですが何か? 買うと決めた瞬間から外部の情報は完全シャットアウトする性質なので。
Q4・特別な思い入れのある「さーりゃん先輩」は?
こういう質問はせめて2週目やってからが良かったなぁ。つーか資料少ないよ、ささら。設定画2ページしかないってどういう事? パニックライブラリにも出てこないしさ…いじいじ。
思い入れのあるシーンならやっぱりラストの○○ですか? ネタバレで書けねぇよ。○○ネタ好きなんですよね。結局失敗するタイプが。成功したら本当の幸せじゃないような気になるから失敗は必須。これぐらい書けばやった人は分かるよね?ね?
Q5・最後にバトンを回したい5人とそれぞれのお題は?
特に回さない。あー「さーりゃん」について語りたい人は(ツッコミ入れて)ご自由に持ってってください。
そうそう忘れてた。オダワラハコネ氏の「ささらとまーりゃんのあれ」見かけた方は確保しといて下さい。とらとか行く暇ねぇよ。
スク水メイドで・・・白って・・・さらりと凄い事をいいますね・・・。