第D8回 状態遷移図を書け!(ハレル図でハレルヤ!?) 01/03/15
そんなこんなで、私の会社名は「有限会社 やねう企画」になったのです。書籍を買って、領収書を書いてもらったら、「やねお企画」だとか「やぬう企画」だとか、「ヤネウ規格」だとか、よくわからん字を書かれ続けるというなんとも勘弁して欲しい状況なのです。
まあそれはともかく、会社用の郵便受けも買ってきました。これについては住所の届け出は不要だそうです。郵便ってのは、その住所に郵便受けさえ置いて名前を書いておけばそこに入れてくれるんです。えらいアナログチックなもんなんやなー。たとえば、麻薬の受け渡しに、一日だけ人んちの前に郵便受けこっそり置いて、その住所宛に送る奴とかおったらどうすんねんな…などとわけのわからん妄想にひたりながら郵便ポストを眺めていると電話がかかってきた。
「師匠〜。ひどいじゃないですか〜」
ぎょえ。な、な、な、なんでお前、電話してこれんねん。
「なんでって、ボクの電話、番号拒否してたでしょう?師匠のホームページ見たんですよ。ほやから、妹の携帯から掛けてるんですよ」
えっ。俺のページ見たの?ありゃりゃ…。
「そしたら、私のこと、あることあること書いてあるじゃないですか!」
あることあることだったらいいんでないの?(笑)
「ないことも書いてくださいよ〜。あることないこと書いて初めてバランスがとれるんですよ。あれじゃあまるで私、女装が大好きな変態コスプレ野郎じゃないですか!」
それって、俺が悪いんか…?
「あのね。師匠は、人のこと馬鹿にしすぎなんですよ。悪い部分ばっかりめざとく見つけて書いてある。わかりやすく言えば、地球に厳しいんですよ。厳しさ指数で言うたらだいたい5,000ヘクトパスカルぐらいになりますね。カレーでゆうたら30倍激辛カレーなんですよ」
何がわかりやすいんや?何を言ってるのかさっぱりわからんぞ。
「たとえば、2月16日に本屋に並んで『ちょびっツ』の初回限定版マウスパッド付き850円を手に入れるような全身、脂ぎった乙女座生まれの中肉中背の血液型A型の男のことを馬鹿にするでしょう?」
そんな具体的に言われても…。
そもそも乙女座生まれの中肉中背の血液型A型って誰のことやねん…。
「違うんですよ。その態度が馬鹿にしてるって言うんですよ。たとえば、『デジきゃらっとファンタジー』を予約するにょ!って言ってる射手座生まれの不潔そうな血液型O型のロンゲのひょろ長い男のことを馬鹿にしてる」
いや、馬鹿にはしてないけど…。そんな具体的に言われても誰のことやら…。
「心のなかで、俺は、もうそんなんとっくに卒業したんやって思ってるところはあるでしょ?」
まあ、それはあるかもな。
「甘いんですよ。甘い。メイプルシロップの比やないですよ。サッカリンの300倍は甘いですよ。甘すぎて1粒食べたら300メートルは走れますわ。わっはっはっ。だいたいねー、師匠は卒業なんか出来てないんですよ。出席日数ぜんぜん足らんのですよ。夏休みにも登校日があって、その日も出やんと卒業なんか出来へんのですよ。風邪ひいたときは、医師の診断書を提出せな欠席としては認められへんのですよ。ほやから、ごほごほ言いながら病院行って、余計風邪悪化させながらも診断書だけ書いてもらってくるんですよ。学生に有給なんかないんですよ。でけへんかったら、なんべんでも留年ですよ。学校に金はろてんのはこっちやのに、なんたる殿様商売なんざんしょか!学校なめたらあかんですよ。鍵を職員室に取りに行くのが面倒だったから教室の下の狭い小窓からこっそり入って埃まみれになって後ろのドアの鍵を開けて他のみんなが入れるようにしてやって英雄気分に浸っていられるのも束の間、あとで先生にどっから入ったかとか聞かれて正直に答えたら、戸締りちゃんとせーっちゅってゴツンとゲンコツですよ。そこの戸締りせーへんかったん、俺ちゃうっちゅーのに!」
何を言いたいのかさっぱりわからん!
「ほやから、卒業なんてまだ1億年は早いっちゅうことですよ。師匠なんか、貨幣でゆうたらでっかい石ころのお金ごろごろ転がして歩いて、ギャーっと大声出したらそれ固まって降ってくる時代ですよ。オラウータンが葡萄踏んで酒造ってる時代ですよ」
そんな時代ないっちゅーに!だいたい、いまどきのお子様は『はじめ人間ギャートルズ』なんて知らんでしょうに…。
「比喩ですよ。比喩。師匠は知らんでしょうから教えてあげますけどね、専門用語で言うところのロボトミーってやつですよ」
…?? ロボトミーって、頭に電極指すやつとちゃうの?なんか前頭葉つぶして神経切断するとか言う…。
「ちゃいますよ。比喩を英語で。何て言うんでしたっけ?」
メタファー?
「ちがう」
違わへんてば。比喩は、メタファー。
「ちがいますよ。僕が求めているやつとぜんぜん違う。客のニーズに合った商品を提供できずして何が客商売や!」
客商売ちがうってば(笑)
そんなに疑うんなら辞書引いてみたらええねん。比喩はメタファー。
「師匠は、僕のことを馬鹿にしてんですか。僕はこう見えても偏差値75の難関国立大出てるんですよ。エリートコース猫まっしぐらなんですよ!にゃお〜ん」
にゃお〜んて言われてもやな(笑)
「だから、師匠が何と言おうと、比喩はロボトミーですよ」
いや、ひょっとして換喩のことゆうてんか?換喩は、メトニミー(metonymy)やけど。
「そうですよ。それですよ。もう!師匠てば、お茶目さんっ!!」
……(やねうらお、しばし沈黙)……
……(二人、しばし沈黙)……
……(二人、ずっと沈黙)……
ガチャン!
とりあえず、電話を黙って切り、この番号を番号拒否する以外、やねうらおにできることは無かったのである。願わくはもう彼から電話がかかってきませんように。彼がうちのホームページ見て、yaneSDK2ndの掲示板とかに間違って女装のこととか書きませんように。ゲーマーズとかで彼とばったり遭いませんように。今日の夢に出てきませんように。勝手に家に押しかけてきませんように。真夜中のコンビニで遭いませんように。どこかのイベント会場で出会いませんように。さまざまなことを、ひたすら神に祈るやねうらおであった…。
はてさて。今回は、状態遷移図について考えることにします。
状態遷移クラスについての実装は…、επιστημη(えぴすてーめー)氏の「オブジェクト指向的日常」PP.78〜100にあるので、そちらでも見てもらえればいいんですが、はっきり言ってそんな本格的なものはいらんのですよ。断言してもいいですが、こんなものが必要になることはまず有り得ないのです。
しかし、考えかたは凄く重要なんです。なぜなら、implicitに(暗黙に)、こういう概念を使わなければプログラムできないからです。
ちょっと例をあげてみましょう。WAFFLEから春に出る、『蒼き大地』というノベルゲームがありまして、初プレイ(1回目クリアするまで)は、女の子のメガネ有りモードなんです。2回目のプレーでは、メガネ無しモード。3回目のプレー以降は、メガネ有りモードになるという仕様です。
単純にはクリア回数をインクリメンタルカウンタにしておけば良いと思われるかも知れません。しかし、それでは失敗です。
なぜなら、1度クリアしたあと、クリア寸前のところでセーブしておいたデータでやりなおし、クリアすると、2回クリアしたことになってしまいます。よって、途中ロードは無効として、ゲームスタートから始めたものをカウントしなくてはなりません。
ところで、1度クリアしたあと、途中ロードしたデータで始めると、メガネ無しで良いのでしょうか?これも、そのゲームをスタートさせたのは、初プレイの時点なので、メガネ有りでないといけないでしょう。ということは、クリアカウント(ゲームを何度クリアしたか)は、システムフラグ(ゲーム全体で1つだけ持っている)に保存して、ゲームフラグ(ロード/セーブする数だけパラレルに存在する)には、ゲームスタートのときに、そのクリアカウントをシステムフラグからコピーしてきて、ゲーム中にメガネ有り/無しにするかの決定は、そのゲームフラグ内のクリアカウントを参照するようにしなくてはなりません。
そこまではいいのですが、ゲームクリアしたときに、ゲームフラグのクリアカウントから、システムフラグのクリアカウントに反映させなければなりません。その反映のさせかたなのですが、この部分のプログラムをあるプログラマはこう書くでしょう。
SystemFlag.ClearCount = GameFlag.ClearCount; |
もちろん、これでは失敗です。2回クリアして(=3回目のプレーなのでメガネ有り)、初回のセーブデータ(=メガネ有り)でクリアすると、この代入式により、システムフラグのクリアカウントは2、すなわち、メガネ無しになってしまいます。これは企画者の意図するものではありません。
何を言いたいかわかりにくい人のために、まとめましょう。状態遷移を箇条書きにすれば、こうなります。
・ゲームフラグのクリアカウントが0でクリアして、システムフラグのクリアカウントが0ならばそれを1に。
・ゲームフラグのクリアカウントが1でクリアして、システムフラグのクリアカウントが1ならばそれを2に。
・それ以外はシステムフラグは変化させない。
もちろん、これを刺激⇒応答だとか、外部入力⇒状態遷移だとか、そういうモデルを用いて、
switch(GameFlag.ClearCount) { case 0 : System.ClearCount.Pluse(0,1); break; // 0ならば1に状態遷移する刺激 case 1 : System.ClearCount.Pluse(1,2); break; // 1ならば2に状態遷移する刺激 }; |
というスタイルでコーディングすることは出来るでしょう。
しかし、それはあまり重要なことではないのです。上のようなPluseメンバ関数を用意しなくとも、
if ( System.ClearCount==0) System.ClearCount = 1; |
とすれば済むことです。たいていのプログラムでは、現在の状態を保持するために、この手の状態変数をintで持ってたりします。(クラスは必要ありません。intで十分です) そのそれぞれの数字がどんな意味を持つのか、きっちり明確にしておかなければデバッグするのが困難になります。
実は、状態遷移図を頭のなかで書いた時点で9割がた、作業は済んでいるのです。この例で言えば、上の緑の文字で書いた状態遷移を書いた時点で、作業はほぼ終了しているのです。それをプログラムとして書くことはたいした作業では無いのです。(よっぽど大規模な状態遷移表が用意されていて、かつ、高速なインパルス応答が必要だから高速動作する状態遷移クラスが必要だ、というのなら全く別の話ですが)
素人プログラマの問題は、この状態という考え方を頭のなかにおかずにプログラムしようとしたり、あるいは、きっちりとした状態遷移図を頭のなかで書かず、すべての状態・組み合わせについて検証しないまま感覚でプログラムしてしまうことにあります。
プロの世界では、こういうのは、ケアレスミスとして笑って済まされる問題ではありません。ソフトウェアにバグが出れば、損害賠償・違約金など現実的な問題が浮上してきます。うっかりしていた、では済まされないのです。また、それぞれの状態において、この刺激について反応する必要があるのか?というように、状態×刺激の組み合わせをすべて挙げればいいだけですから、組み合わせ爆発が生じない範囲においては、それはケアレスミスでさえないのです。そのことをしっかり肝に銘じておかなくてはならないでしょう。
第D9回 ゲームで使うタイマについて(ゲームにタイマ精度なんて必要なんか!?) 01/03/20
正直に告白しておこう。
先日、173万のキリ番を自分で踏んでしまったのだ。なにげにカウンタ見たら下4桁に0がそろっていた。こんな経験初めてである。いままで、100万ヒット踏みましたとかメールで言われても、それがどないやねんと内心思っていたが、こんなに嬉しいとは知らなかった。あまりにも嬉しいので自分にご褒美とばかり欲しかったプログラミング本を10冊ほどまとめて自分の会社の経費で買ってきたぐらいだ。何を隠そう自分で踏んだキリ番としては、37564(皆殺し)以来である。この37564はキリ番なんか?という突っ込みは不可。いや、その他に踏んだキリ番としては、424242(死に死に死に)もあるぞ。これがキリ番か?などという突っ込みはもはや無用であろう。ちゅーか、そんな番号ばっかりなんでオレに踏ますねん!とプロバイダであるsun-internetに抗議文章を送ろうかと思ったぐらいだ。それ以来、やねうらおのなかでは、キリ番とは、地雷と同意語になっていたのだ。キリ番、踏むな!踏んだら死ぬぞ。そう思いながらなるべくキリ番を踏まないように耐え忍ぶこと2年間。
ついにやったよ親父!170万。踏んだよ!ゼロが4つも並んでるよ!何?100万ヒットより並んでいるゼロの数が少ないって?じゃかましい!他人の100万ヒットより自分の173万ヒット!じゃい。ゼロが4つも並んでいるのを見た瞬間、全身の血液がキ◎タマを通って逆流するのを感じたよ。天井の木目から白い顔のおばさんがたくさん出てきて一斉に、にやっと笑っていたよ。
ああ恐ろしい。踏むだけで一瞬にしてオレの人間性まで木っ端みじんこに崩壊してしまうとは、キリ番とは、まさに地雷。 他人が踏んでもこれっぽっちも嬉しくないのに自分が踏むとこんなに楽しいとは…いまわかったぜ他人の不幸は蜜の味とは、このことか!とその時、本気で思った。そう思ってから1時間後ぐらいに気づいたのだが、わかったぜと思ったことはまったくの錯覚であった。何が他人の不幸は蜜の味なんや?などと、そのことに気づくのに1時間もかかるほど舞い上がっていたのである。
そんなことを考えながら、今日は、独身主婦を自称する女性と仕事の打ち合わせをしてきた。独身主婦というのが何なのかは知らない。「ちょべり主婦〜」、「マジうざ主婦すぎ」、など、意味不明の日本語をしゃべられたらどうしようかと憂鬱になりながら待ち合わせ場所へと向かった。
期待に反して彼女は何のことは無い普通の女性だった。しゃべりかたも普通だった。ただ、一つ違うところがあるとすれば、彼女は帰りにお米屋に立ち寄ったかと思うと20キロのお米を買い込み、それをひょいひょいと片手で軽々と持ちあげて自転車で持ち帰ってしまったということだ。
20キロですよ。20キロ。20キロバイトではないですよ。20キログラムですよ。(わかっとるっちゅーに!) 2キログラムではありませんよ。20キログラムですよ。(しつこいっちゅーに!)
その後姿を見て思わずやねうらおは、「ちょべり主婦〜」とか叫んだのでした。^^;
さてさて。
今回は、Win32のタイマについて書きます。ゲームで使うタイマは、普通、GetTickCountかtimeGetTimeを使います。よくtimeGetTimeは精度はいいけど遅いから使うなとか言われることもあります。第D6回で情報提供をいただいたマフティさんと話していて、そんな話題になりました。
しかし、60FPSのゲームで、そのコマ落ちに対して動きを調整するためにタイマ関数を呼び出すとしても、基本的には1秒間にタイマ関数は描画回数分しか呼び出さない(各描画フレーム毎に1回、GetTickCountかtimeGetTimeするだけ)わけで、ちょっとぐらい遅くてもいいと思うのです。
とは言うものの、それがどれくらい遅いものなのか、一応知ってはおいたほうがいいかも知れません。
私のマシン(Duron700MHz)で1千万回テストしたところ、GetTickCountは180ms,timeGetTimeは1552msでした。単純には10倍近く差がありますが(環境によっては、もっと大きな差になります)、1秒間に100回呼び出したところで0.15msであって、こんなものは完全に無視できるオーダーです。
これがどういう実装になっているのかまでは知りませんが、タイマの精度というのは、上げれば上げるほど取得に時間がかかるという一般則があるようです。私は、物理学で出てきたプランク定数のようなものだと思ってます。
ということは、あのDirectMusicのMasterClockならばどうか?とか興味のあるところです。恐ろしく遅いんでしょうか…?
// --- CTimer,CMsgDlgはyaneSDK2ndのクラス IReferenceClock *ppReferenceClock; GetIDirectMusic( )->GetMasterClock(NULL,&ppReferenceClock); REFERENCE_TIME time; CTimer tt; tt.Reset( ); for(int i=0;i<100000;i++){ ppReferenceClock->GetTime(&time); } CHAR buf[256]; ::wsprintf(buf,"time = %d ",tt.Get( )); CMsgDlg( ).Out("Result",buf); |
1千万回まわしてたら、最初暴走したのかと思ったんですよ。でも違ったんですよ、これ。10万回にしてみてわかったのですが、10万回で2564msもかかってるんです。つまり、timeGetTimeの165倍!GetTickCountの1424倍!ですよ。おいおい、とか思いますね。しかし、1回の実行に要する時間は0.02564ms。おそらくは無視できるオーダーです。しかし、取得に0.02msもかかれば、当然、0.1msぐらいしか精度は無いことになります。そもそもtimeGetTimeですら、timeBeginPeriodで設定されすれば1msというのは保証されていますし、1桁精度アップするのに165倍も時間がかかるっちゅーのは、なんなんでしょうか(笑)
まあ、そんなわけで、60FPS程度で動いているゲームごときに本当にそんな高精度タイマが必要かというと、めっちゃ疑問です。timeGetTimeどころか、GetTickCountでもいいぐらいのところに、本当にDirectMusicのマスタクロックを使うほどの価値があるのか…というと、おそらくNo!でしょう。
ちゅーか、この測定結果ほんまに正しいんやろな?(汗)
第DA回 Javaの仮想マシンコードの最適化について(JavaVMは世界を救うか?) 01/03/26
やねうらおは、休みの日は過密スケジュールである。たとえば本日、25日は、朝の8時に知り合いが遊びに来て、そのあと、10時から、Visual Arts系のスクリプタの人と日本橋で会って、そのあと14時からOSM村瀬さんと会って、そのあと、某社の社長のN氏と17時に会って、そのあと自宅に帰ってきて、20時に弟子が来ると言っていたのにドタキャンしたために、ポップンの全国スコアラーのKEN氏を引き連れ、また日本橋まで出向き、ポップンのアニメロ2号をやってきたのである。メインストリート前でやってると、KEN氏がエキスパートヒロインコースの自己ベストを大きく更新したと大騒ぎになった。インターネットランキングは終了しているが、どうも全国スコアらしい。えらい現場を見てしまった^^;
何か遊んでるのか仕事してるのかわからん生活ですけど、一応、毎日が月曜日である。
まあ、スケジュールのことは、どうでもいいんですけど、問題はその中に出てくる、某社の社長のN氏なのです。以前、トップページで紹介した、「ぶちキャラット」も彼のネタなのです。で、そのとき、彼に言われて思ったのですが、このページは、ひょっとして非常に痛いページなんでしょうか?(笑)
だいたいやねぇ、ここにしても日々の高尚なプログラミングによって世界一のプログラマを目指す(目指すだけよ。このへんには突っ込みを入れないように(笑))やねうらおの努力と思考の軌跡とも言うべき比類なきプログラミング日記のはずが、
最強の検索エンジンgoogleにて、
「女装 やねうらお」
とかで検索に引っかかるような最低、最悪なホームページになってしまっていたんですよ!
これ見たとき、初め、唖然としましたねー。ついでに、このキーワードでひっかかった他のページを見ると…あちゃー講演会のことまだ書いてあるよ…。いまとなっては、めっちゃ恥ずかしいんですけど。私、いつからそんなに有名になってしまったんでしょうか(笑) というか、あの学祭が有名なんですね、きっと。まあ、講演会は過ぎたることなので忘れるとしましょう。
そして、まあ、500歩ほど譲って、やねうらおをキーワードに入れて、このページが引っかかるのは仕方ないとしましょう。そりゃあ、ひっかかるでしょうよ。やねうらおって文字列は自分で山ほど書いてんだから。しかし、N氏の指摘によりますと
「アングラ ピンクローター エロ ロリータ」
でも引っかかると…。
おい待てや!なんで、これでひっかかるねん!!
これを見たとき、やねうらおの中で何かが壊れる音がしました。
さらに、続いてN氏のレポートによりますと、
「女装 浣腸 幼女」
おいおい。これもひっかかるんかよ…!!しかもナンバーワンでヒットすんなや!!
これを見たとき、やねうらおの中で何かが砕け散るような音がしました。
いままで築いてきたガラスの高層建築が音を立てて崩れていくのを感じました。
たぶん、頭蓋骨の後ろのほうの骨が木っ端みじんこになったのでしょう。
仮に、やねうらおの一生が10cmのロウソクで表現されるのだとしたら、この一撃で一気に3cmは短くなったでしょう。
おまけに、N氏のレポートによりますと、
「浣腸マニア 下着泥棒」
なんと、うちのページしか引っかかりません。(汗)
なんと、うちのページしか引っかかりません。(汗)
なんと、うちのページしか引っかかりません。(汗)
オレの命の蝋燭、風前のトモシビ。
下手すると、今月、消えるかも(汗)
という気分なのです。
誰がこんなページにしたんでしょう。
...
...奴か
...やはり奴か..
...奴なのか!
あの変態女装コスプレのせいか!!
ひょっとして、最近ヒット数また増えてきてると思ったら全国のそれ系の人達から熱い熱い視線を注がれていたのでしょうか。
嫌です
嫌すぎます
そう言えば、先日は、こんなメールが来ました。
少し恥ずかしいけど、やねうらおさんならわかってもらえると 思うので打ち明けます。私は、女装子さんが大好きな17才の 学生(♀)です。 やねうらおさんのページで書かれている女装好きのお友達のことが とても気になります。よかったら紹介してもらえないでしょうか。 (中略) やねうらおさんのページが女装子さんのポータルサイトになることを 願っています ではではっ☆ |
> やねうらおさんならわかってもらえる
わかりません。
>よかったら紹介してもらえないでしょうか。
紹介して欲しいならします。いらないと言っても紹介します。
> やねうらおさんのページが女装子さんのポータルサイトになることを
なりません
> やねうらおさんならわかってもらえる
ちっともわかりません。なんでわかると思うんですか。
>よかったら紹介してもらえないでしょうか。
1円スタートの最低落札価格なしでお譲りします。
入金確認後、着払いにてお送りします。
なお、このオークションは早期終了する場合があります。
> やねうらおさんのページが女装子さんのポータルサイトになることを
ありえません
> やねうらおさんならわかってもらえる
もう許してください。いくら払えば許してもらえますか。
>よかったら紹介してもらえないでしょうか。
事情が事情ですんで返品不可。ノンクレームでお願いします。
> やねうらおさんのページが女装子さんのポータルサイトになることを
ちゃうてゆうてるやろ!!このボケぇ!!
(`皿´)=●)`ъ')・:'.,.
あのーですね…。
はっきり言っときますが、いくらネタとして死ぬほどおいしかろうが、女装子さんが大好きな17才の学生(♀)さんとか、嫁さんに隠れて下着女装している38歳のおじさんとか、セーラ服で女装しながら髪の毛を引っ張られ、胸を鷲掴みにされながらバックでお尻の穴を犯されるのが大好きな18歳の少年とか、そんな人たちからの熱い熱い応援メールは一切いらんのですよ!!そういうページじゃないんですよ!(笑)
お前ら、金輪際、メール送ってくんな〜!!
ついでだからメールについて言わせてもらいますけど、こないだゲーセンでIIDX(ビーマニ)をやろうと並んでたんですよ。
そしたら、前に並んでた高校生の二人組が、なんかパソコン版のビートマニア関連の話をしてるんですよ。
なんか、やな予感がしながらも耳を傾けていると、
「ああ、知ってる知ってる。やねうらおの奴だろ。あれ、オレの連れだぜ!?」
へー、そうなんや。私、あなたのこと見たこと無いんですけど。へーそうなんや。ちゅーか、お前誰やねん!私がホトケの生まれ変わりでなかったら、後ろから刺し殺されていたぞ。ボクタチ、やねうらおがお釈迦様の生まれ変わりでよかったね(笑)とか思いましたよ。誰がお前の連れやねん!くそ〜。
ちゅーか、ひょっとすると、この高校生、メールで話したことある人かも知れないんですけど、私の記憶には無いのです。たぶん、良くて一回ぐらいしか返事返してないはず。メール一回返事返しただけで会ったことも無いのに「オレの連れ」にされたら、たまらんちあ。お前誰にょ!(笑)って感じだ。
ふーう。なんか、疲れた。すっかり命のロウソクが消えそうになった。残り1cmぐらいしか無いかも(汗)
いや、そういう内容以外の、常識的なメールなら、なんだっていいんですよ。もらって嬉しくないメールはありません。Win32のプログラムわからんから教えてくださいってメールもよく来ますけど、オレはプログラミング110番かよ!とか思いながらも親切に答えてるし、DirectXほにゃららのことがわかりませんってメールもよく来ますけど、オレは無料講師ヤネンライダーかよ!とか思いながらも懇切丁寧に解説してますし、お前のSDK使ってやってるから、さっさとほにゃらら機能をつけろって言うメールにも、お前何様よ!?とか思いながらも誠心誠意応えてるし、BM98のサザエさんが解凍できませんとか、盗撮マニアの暗号化されているのが解読できませんとか、大手の仕事を何かやってると聞いたんですけど教えてくださいだとか…、まともな応援メールとかは、けーへんのかい!(笑)
いや、とどのつまり、メールは何でもいいからもらえると嬉しいのですよ。ただ、命のロウソクが短くなりそうな奴はやめてくらはい^^;
はてさて。今回は、前回のタイマー関数のおさらいから行きます。
弟子リンクで紹介している葉迩倭さんからのレポートにこんな文面があったんですよ。
timeGetSystemTimeとかいう謎の関数もありましたけど、 timeGetTimeの1.5倍くらい時間がかかったので却下でした。 |
えっ!?そうなん??確かに測定してみたら、timeGetTimeが速いんですよ。翔泳社の『Windows95APIバイブル3』のP.899にtimeGetSystemTimeの説明として、「Wndows起動後のシステム時間をミリ秒で取得します。この関数の機能はtimeGetTime( )と同じですが、オーバーヘッドは少なくなっています」ってあるのを鵜呑みにしてた…。何も少なくなってない。というか、timeGetTimeより仕様が複雑なので、オーバーヘッドが発生するのは当然だが、発生するオーバーヘッドは少なめにおさえてありますという意味なのか?こんな日本語わかるかぁ!!また騙された!くそー翔泳社め。だもんで、yaneSDK2ndをこっそり修正^^;
そのあと、JavaのVM(仮想マシン)の仕様書を見てたんです。オブジェクト指向言語の中核ともなるべきJavaの仮想マシンは、なかなか良く出来ています。これ、Sunのホームページ上に英語のドキュメントがあるんですけど、訳本は8,500円+税もするんですよ。高いんです。でもせっかくだから買っちゃいました。てへへ。(弱いなぁ>オレ)
JavaのVMはバイトコードで成り立っています。ついでに言えば、スタックフレームに何やかや置きます。配列にアクセスするのならば、配列の参照とインデックスをスタックに積んでそのあと、要素のアクセスしなさいという命令を実行すると、配列の参照とインデックスは、スタック上から消えて、要素の値が(スタック上に)返ってきます。つまりは、スタック上で、あらゆる操作をするんです。即値代入もいったん値をスタックに積みます。
もう何を言いたいかわかっていただけましたね。
遅いんです。
iアプリをカリカリとプログラム(503iのエミュレータがあるんで仕事でちょっとやってます)していて思うんですが、エミュレータは速いですが、実機は死ぬほど遅いんです。まあ、今後、速度については改善されて行くと思いますが、VMの仕様上、どうしようもなく遅いんです。確かに、このVMをネイティブコードで実行するCPUは作りやすいと思います。SH3とかの普通のRISCチップの命令セットに近いものがあるので、作れるんだろうな、というのぐらいは素人のやねうらおにもわかります。また、iアプリが遅いのはVMの仕様だけの問題では無いという気もします。
ただ、スタックに毎度積んでアクセスして遅くならないわけが無いと思うのです。仮に、これをネイティブコードに変換するHotSpotのような技術(HotSpotは処理の集中している部分をプロファイルして最適化するのでちょっと趣旨は違いますが)について考えてみるとします。
命令に対して、一対一にネイティブコードに変換して行っても、あまり速くならないんです。命令はもともと1バイトですから、ジャンプテーブルでデコードしているわけで、そこが速くなってもそれほどでも無いと思うのです。yaneuraoGameScriptでネイティブコードへの変換を実装した経験から言わせてもらえれば、まあ、せいぜい2倍と言ったところでしょう。
ではどうするのか?一番効果的なのは、スタックに積むのをやめて、それらを変数に割り当てる最適化を行なうことです。よく考えたら、これはそんなに難しいことではないと思うのです。その昔、コンパイラの最適化が甘い時代に、アセンブラ⇒C言語変換がかなりの精度で行なえるツールが出回りましたが、あれと同じ発想でOKです。VMのコードをちょっと細工して、スタック上で処理しないコードへと書き換える。これが肝心です。これは出来ます。そのへんを丁寧に行なってやり、C言語のソースを吐くようにします。そのあとVCとかでコンパイルすれば、もとのコードの5倍は速くなると思うんです。
というように、私のオブジェクト指向スクリプトも、JavaライクなVM用のコードをいったん吐いて、それをインタプリタ的に実行する機能と、そこからC言語のソースを吐かせてのre-compileをサポートしようと思っています。まあ、それはそれほど難しくないです。
あと、掲示板のほうで、Narushima Hironoriさんが、JavaやRubyのような(オブジェクト指向)言語があるのに、いまさら新しいオブジェクト指向言語を作ってどうするのですか?というような質問が寄せられていました。文面からは、別に悪意があるのではなく、やねうらおが貴重な時間を裂いて作るほどの価値があるのか?という、私に対する気遣いのようなものが読み取れます。正直言って、この質問を見て、実は2、3日悩んでいました。
プログラミング言語を作るって、えらく敷居が高くなったんだなと思いました。たとえば、C言語なんですが、言語セットのなかに、ファイル操作だとか、数学関数だとか、そういう言語機能としては非本質的なライブラリ部分までを含めて、定義されています。これは、もちろん当時の時代背景を考えれば仕方ないことだと思うのですが、いまとなっては、どうかな、という気がするのです。そういう言語のありかたはおかしいんじゃないかと思うんです。
ライブラリはTck/Tkのように別で用意されていて、言語は誰にでも気軽に作れるのが理想です。ついでに言えば、Javaのような緻密に設計されたVMと、VM⇒ネイティブコードトランスレーターは既に用意されているのが理想です。そうすれば、1週間もあれば誰でも自分のオリジナル言語を作れるはずです。
言語設計とライブラリ設計とはまったく別の範疇なのです。ところが、C#にしてもJavaにしてもビジネス戦略として、ライブラリを分離して使えるようにしようとはしない。あれを分離せずして、何のためのCOMなんですか?と言いたい。だから、言語にはライブラリがついてくるのは当たり前だと思われているし、わざわざ言語を作るだなんて、使うユーザーに負担をかけるだけの意味の無い行為だと思われる。違うと思うんです。言語セットは本質的にはライブラリを含むべきではない。使うユーザーもその言語の新たな構文を覚えるだけ(で、ライブラリは従来のものを使う)だから、それほどの負担では無い。それが言語設計のあるべき姿なのです。
しかし、現実的に使える標準化されたライブラリが用意されていないために、その部分が非常に不透明なのです。
そこで、ゲーム用ならば、少なくともyaneSDK2ndが使えるんではないかと思ったのです。yaneSDK2ndのそれぞれのクラスをCOM風に書き直して自由にimport出来る仕組みを作る。そうすれば、私のオブジェクト指向スクリプト(や、他の人が作ったオリジナル言語)から、自由に私のライブラリを呼び出すことが出来る。少なくとも、ゲームで必要となるほとんどの機能はyaneSDK2ndは備えています。近々ネットワークをサポートする気もありますし、年内には3Dもサポートします。
つまり、私がオブジェクト指向言語を作る意義は、以下のようになるのです。
1.JavaライクなVMを提供する
2.JavaライクなVM⇒C言語へのトランスレーターを提供する
3.yaneSDK2ndをCOM風に書き直し、他の言語実装者が利用できる形で提供する
4.安全で高速なオブジェクト指向言語を提供する
もちろん、1〜4は、完全にロイヤリティフリー(いかなる使用も完全にタダ)で提供されるものです。また、3.の実装過程において、第三者もライブラリに追加/拡張を行なえる可能性も生まれてきます。
ついでに言わせてもらえれば、ちまたのオブジェクト指向言語(C++,Java)というのは、私の考えているプログラミング言語パラダイムからすれば、やや古いんです。目指しているのは、決してオブジェクト指向言語ではないんです。ただ、明確な形というのは実際に作ってみないことにはわからない部分もあって、そのへんの実験も兼ねて新しい言語を作りたいなーとか考えています。
話してるうちに規模がでかくなってきたんで、しばらく時間はかかりそうですが(笑)
第DB回 Javaの仮想マシンコードの最適化について2(JavaVMは世界を救う!!) 01/04/02
みなさん、聞いてください!!ついに昨日、来てしまったんですよ!やねうらおにとって、忌むべき対象というか、諸悪の根源というか、ハルマゲドンというか、ビッグバンというかが!!昨日、この文章アップしようと思って用意してたんですけど、気づいたら4月1日。あかん〜、あまりにアンビリーバボーな話なので、いまアップしたら、完全に嘘やと思われると思い、急遽、4月2日にアップするに至ったんですよ。それほどの災いの種と言うか…。
ピンポ〜ンって、家のインターホンが鳴ったときから既に悪い予感はしてました。おそるおそる、玄関のドアをあけると…なんと例の変態女装コスプレが、何食わぬ顔をしてそこに突っ立っているではありませんか!!
あ痛たたた〜。何しに来よってんや!!こいつ!!まあ、彼はふつうの格好してましたけどね。スカートははいてませんでした。ふつうの格好。それだけが救いでしたね。というか、救いはそれだけでした(汗)
前回、彼の妹の携帯の番号も番号拒否したから、復讐しに来たに違いありません。やねうらおは、身構えながら向こうの出方を待つのでした。
「師匠、金入ったんで、ちょっとメシでもおごってあげましょか」
なんや?なんや?おごってくれるの?砒素入りお好み焼きとか、青酸入り毒物カレーとかそんなん?
「そんなこと言うと、あとで後悔しますよ。いまねー、お金、いっぱい持ってるんですよ。わはははは」(と言って財布のなかを見せる)
な、ななな、なんやこれ!! この親不孝もん!人様に迷惑かけることだけはすんなてあれほどゆうといたのに…。あんたのおかあちゃんこれ見たら、泣くで。
「ちゃいますよ。師匠は知らんでしょうけどね、インターネッコさえあれば、金なんてなんぼでも儲かるんですよ」
インターネッコ??根っこなんか?
どうやって儲けるねん?教えてもらおやないか。
「まあ、メシでも食いながらご説明しますわ」
(と言って、彼の車で近くのイタリア料理屋まで行くことになる)
「師匠は、阿呆やなぁ。インターネッコで稼ぐなんて、めっちゃ簡単やのに。師匠は、コンピュータ会社の社長としてとてもとても恥ずかしいですぞ!インターネッコは、金の成る木やのに」
にゃるほど。そうかも知れん。ちょっと、それを教えてもらおやないか。
「師匠は知らんと思いますけどね、オークションのページってのがあるんですよ」
ふむふむ。
「師匠はそういうの詳しくないから知らんと思いますけどね、やっほ〜オークションとか、そういうところが穴場なんですよ」
あの〜。つかぬことをお伺いしますが、もしかして、やっほ〜というのは、Yahooのことでしょうか…?穴場っちゅーか、ヤフオクなんか、誰でも知ってるっちゅーか…。(汗)
「それでね、やっほ〜オークションで売れたんですよ!コスプレ服が大量に!!ミシンゴトゴトした甲斐がありました。阿呆ですよ、奴ら!阿呆!」
何よ?阿呆て??
「だってね、師匠、1着が、平均で3万5千円ですよ!3万5千円。一番高いやつなんか、5万ですよ!5万!ひひひ。これを馬鹿と言わずに何と言うんでしょうか!馬鹿ですよ!マジで買うかーとか思いましたよ。最初、5千円で始めて、2万の値段がついたときには、ははーん。こいつら全員、ひやかしやなと思いましたよ。みんなして、俺んこと馬鹿してんやろとか思いましたよ。でも、最後、落札したやつらに入金先の口座番号書いてメールしたら、次の日に全員ちゃんと入金しとるんですよ」
阿呆阿呆ゆうたんなよー。
だいたいなー、それ買った人たちにしても、それを作った、あんたにだけは言われたくないと思ってるやろて。
「そういうたかて、入金されてるの見て、もう呆然自失ですよ。お母ちゃんが、実はお父ちゃんだった!ちゅうほどビックリしましたよ。あんなびっくりしたん、ブロンズパロットが惜しまれつつ閉店になってしもて以来ですよ。ブロンズパロットには、赤と緑と青の3種類の制服があって、やっと3種類そろったから、ブロンズパロットごっこと称して、そのブロンズパロットの制服着てブロンズパロットに遊びに行こうと思ってたのに、いきなり閉店するなっちゅーねん!みたいな」
何がブロンズパロットごっこやねん!
それ、ブロンズパロット側にしてみたら、えらい迷惑な話やがな(笑)
きっと、君みたいな奴がブロンズパロットごっこするから潰れてしもたんとちゃうの?(笑)
「それでね、自分の口座見てね、マジかー、5万円で買うかー、こいつーとか思いましたよ。奴らは、お金を何やと思ってんでしょうか。だいたいねー、1万円のお金なんてもんが、どうやってもうかると思ってんですか。1万円ですよ、1万円。ボクもねー、親によく言われましたよ。1円のお金も大切にしなさいって。それこそ、お百姓さんが、180日もかけて作ってるんですからね…」
えっ?お百姓さんが1円作ってるの?? お百姓さんは造幣局かえ??
「ああ、お米ですかね。180日は。お米」
そんなん間違えへんっちゅーに!何ゆうてんねんな、お前(笑)
「それで、20着ほど売ってきたんですよ。あっさり売れましたよ。当方、ミシン歴10年以上!ロックミシン使用!ですからね」
ふーん。まあ、ロックミシンが何だかは知らんけど(笑)
しかし、君はなんでせっかく作ったコスプレ服、売ってしもたん?
「前にもゆうたと思いますけどねー、もともと、ボクはねー、コスプレなんかしたくなかったんですよ。そもそも妹が悪いんですよ」
ほう…。妹がどうしたて?
「ゆうてへんかったかと思いますけどね、妹がね、超有名なコスプレイヤーなんですよ。なんか良くは知らんのですけど、インターネッコか何かでコスプレサイトみたいなんやっとるみたいなんですけどね、オフ会とかやったら、何十人と男きよるんですよ!駅の近くで偶然、妹が男引き連れて歩いてるん見たんですけどね、女ひとりに男50人とかですよ。んなもん、ハーレムじゃないですか!しかも、妹は、そのときセンチメンタルグラフィティのコスプレしとるんですよ。その周りを取り囲む50人のむさ苦しい野郎どもですよ。で、そいつら集合写真とかとってやがるんですよ。しかも鼻たれオタクっぽい奴ばっかで、全員デジカメ持っとおるんですよ。かわるがわる撮影会ですよ。それこそ、きつきつのかつかつですよ。現代の地獄絵図、まさにここにあり!ですよ」
まあ、そういうこともあるやろな。
「それにね、妹のコスプレっちゅーのが、また女装コスプレばっかりなんですよ」
何??妹だから、女装っちゅーか、普通のコスプレでしょ?
「いや、女キャラのコスプレばっかなんですよ。専門用語で言うところの、メスキャラってやつですよ」
別にいいんでないの?何がおかしいの?
「わかってないですねー。胸とかはだけてるんですよ!ヴァンパイヤハンターのモリマンとかですよ」
ひょっとして、モリマンて…モリガンのことでしょうか^^;
「明らかに男を誘ってるんですよ。それでいて、撮影会とか行って、カメラマンにパンチラ要求されたら、猛烈に怒って途中で帰ってきよるんですよ」
そりゃ怒るでしょうよ。
「んなもん、To Heartのマルチとか、エロゲーのキャラとかのコスプレしてるくせに、ぱんつひとつ見せへんってどういうこと?って思いますよ。ボクに言わせたら、君は、見せたいの?見せたくないの?って、そんな感じですよ」
そんな感じなんか?(笑) 全然、論点がちゃうような気がするけどなぁ…。
まあ、前置きはええねんけど、なんで君はコスプレするに至ったわけ?
「その妹がね、毎回イベントごとに違うキャラのコスプレしとるんですよ。その数、少なくとも3桁にはなってるはずですよ。ある日、妹が勝手にボクの大切にしてたデジタルハンディーカムを持ち出してね。それ壊しやがったんですよ。液晶のとこ割りやがったんですよ。えらい腹たってね、なんで勝手にオレのハンディーカム持ち出すねん!何に使ってん!って、ぽっぺたぴしぱし問い詰めたんですよ。そなもん、20数万したのに、勝手に持ち出されて潰されたらかなわんですわ」
まあな。
「そしたら、さめざめ泣き出しよったんですよ。妹が泣いてるん見たんなんてもう10年ぶりぐらいですよ。小学校のとき飼ってた豚のピグモンちゃんが死んだとき以来ですわ」
ピ、ピグモンちゃん?それ、ウルトラマンに出てくる怪獣やがな!!
「豚やから、ピッグで、ピグモンちゃんですわ。英語もでけへん人は、これやから困りますわ。わはははは」
………。
「それでね、そのピグモンちゃんがある冬の寒い日に学校から帰ってきたら死んでたんですわ。ぶひ、とも言わんようなってしもてたんですわ。いみじくも、その日、妹は車に轢かれかけとったんですわ。もうあと一歩前におったらトラックにあたし跳ねられてた、てゆうてました。それで、ピグモンちゃんが自分の身代わりになったんやゆうて、妹の奴、えらい泣きよってね。自分が死んだら、ピグモンちゃんは帰ってくるんかな?ゆうて、泣きながらボクのこと上目遣いに見よったんですわ。だから言ってやりました」
ふむ。
「お前が死んだところで、ピグモンちゃんはもう戻ってけーへんねん。泣きたかったら今日は泣いてもええ。ほやけど、お前は、ピグモンちゃんの分まで生きろ!って」
ええ、兄貴やがな!ヽ(´▽`)ノ
「そうでしょ。ちょっとは見直したでしょ」
ま、まあな。
「妹のやつ、しばらく泣いてました。彼女が泣き終わってから、二人でピグモンちゃんを裏庭に穴掘って埋めてやったんですわ。そのとき、あたし、もう、何があっても泣かへんって言いよったんですわ」
ふむ。
「爺っちゃんの名にかけて!」
………。
「まちがいまちがい。ピグモンちゃんに誓って!ですわ。」
………。
「そんな妹が泣きよる、ゆうたらよっぽどのことなんですよ。そやから、お前どうしてん、オレの大事なハンディカム壊したん、理由によっちゃ、許したらんことも無いと言ったんです。何に使ってん?って聞いたんですよ。そしたら、カードキャプター桜の知世ちゃんのコスプレの小道具に使った、友達から頼まれて期待を裏切りたくなかったから断るに断れなかったと言いよったんですよ」
ふむふむ。
「なんやと?!コスプレの小道具なんかに使ってオレのハンディカム壊したやと?!そう思いましたよ。しょーもない言い訳すんな!とか思いましたよ。ボクは、全身の血がたぎるのを感じましたよ。あれほどカーっとなったん生まれて始めてですよ」
まあ、いくら兄妹でも勝手に人のもん持ち出して壊したらあかんわな。でも頼まれたら断られへん妹さんの優しさってやつをわかってやらんとあかんな。
「ちゃいますよ。ボクが言いたいのは、そんなことやないんですよ」
は?
「妹よ、お前が知世ちゃんのコスやるんやったら、俺が桜ちゃんのコスをやる!そう思ったんですよ!これは、兄貴として、負けてられへん、とそう思ったんですよ」
負けとけ!!
超有名コスプレイヤーの妹とコスプレで対等に張り合わんでええ!!
しかも女装コスプレで!!
「いや、兄貴としての威厳を保つためにも、負けてられへん、とそう思ったんですよ」
女装コスプレで、威厳が保てるかいな!
(`皿´)=●)`ъ')・:'.,.
相手はオフ会で50人のファン(?)を引き連れて歩く超有名コスプレイヤーやで!!
勝てる見込みはゼロパーセント。いや、むしろマイナス!!
そこは素直に負けとけ!
いまからでも遅くない。お兄ちゃんの負けや、ごめん、てゆうとけ!
「まー、妹と一緒にコスプレするために桜ちゃんのコスプレ服を作るに至ったんですよ。それがすべての始まりなんですよ」
なんか、わかったような、わからんような話やなぁ。それで、一着売って、なんぼぐらいもうかってんの?
「えっとねー、だいたいオークションではこういうキャラものは1着3万円前後の値段がつくんですよ。オリジナルのは、半分ぐらいの値段になります。ボクの作ったメイド服とか、自信作やったんですが、ブラウスとギャザースカート、エプロン、ケープ、首飾り、付け袖、ロリータ帽、ギャザーペチコートの8点セットでたった2万ぽっちでした」
ふーん。
「逆にね、キャラモノはバブリーなんですよ。それも人気のキャラだとなおさらバブリーなんですよ。CCさくらの一番高かったのが5万ちょっとの値段がついたんですよ。5万ですよ!こんなんに5万も出すかーっちゅー感じですよ。それこそお百姓さんが180日かけて」
お百姓さんは、関係ないゆうてるやろ!!
「ああそうでした。でも、5万ですよ。ホンマ、びっくりしましたわ。マジかよーって思いました。でも口座にきちんと入金されてるんですよ。このままどっか遠いところに逃げたろか、とか思いましたよ」
5万じゃあ遠くまで逃げられへんでしょうに(笑)
で、ぶっちゃけた話、いくら儲かるのよ?
「だいたい、ボクのコスプレ衣装は、材料費が1万5千円〜2万円ですよ。レースとかフリルとかリボンとか湯水のごとく使いますからね。時間も、そこそこかかりますよ。小道具からケロちゃんのぬいぐるみまで作りますからねー。材料買いに車で1日じゅう奔走しますし、ボクの場合、きっちりパターンから起こしますんで、そこで丸1日潰れて、ミシンごとごとやってる時間が1着あたりだいたい30時間。自給700円で計算しても、実労50時間はかかってますから、3万5千円。だいたいトータルで言えば1着あたり6万ぐらいになりますかね」
赤字やん!!
思いっきり赤字やん!!
一番高く売れた5万円でもまだ赤字やん!!
売れば売るほど赤字やん!!
ドリキャスも真っ青かよ!!
「いや、ボクの作った服を気に入って着てくれるコスプレ好きの女の子とかやったら、別にタダであげてもいいんですよ。お金の問題やないんですよ」
何、急にええ人になってんねんな、お前(笑)
さっきまで、奴ら阿呆や阿呆やゆうてたやろ!奴らが阿呆やったら、それを大量に作って大量に赤字で売って、儲かったと思ってメシを奢りに来てるあんたは、キング オブ 阿呆、略してアホキンやがな!
「師匠、そう言いはりますけどね、確かにボクはアホキンかも知れないですけどね、いまのこのご時世に1万円のお金がどうやって儲かる言いますの。それこそ、お百姓さんが180日もかけて」
お百姓さんは、ちゃうてゆうてるやろ!!
(`皿´)=●)`ъ')・:'.,.
「せやから、お金なんてそう簡単に儲からへんのですわ」
インターネッコで稼ぐのはめっちゃ簡単とちごたんかいな!
(`皿´)=●)`ъ')・:'.,.
「どこの世界に、そんな簡単な金儲けがありますのん。そんなんあるんやったらこっちが教えて欲しいですわ」
インターネッコさえあれば金なんてなんぼでも儲かるんとちごたんかいな!
(`皿´)=●)`ъ')・:'.,.
「金の成る木があるでなし」
インターネッコは金の成る木とちごたんかいな!
(`皿´)=●)`ъ')・:'.,.
「それこそ、お百姓さんが」
お百姓さんは、ちゃうてゆうてるやろ!!しつこいな、このボケェ!
(`皿´)=●)`ъ')・:'.,.
「とりあえず今日はボクが奢りますからそれで許してください」
そんな大赤字の人に奢っていらんがな!
自分の分は自分で出すわ!
食事もとりあえずは終了して、彼の車にて、ひとこと。
それから、さっき、一瞬でも君のことええ兄貴やと思ったん、ひょっとすると、まったくの勘違いっかも知れん…。あとで、もっぺんよく考えなおしてみるわ。
(つづく)
前置きが長くなりましたが(笑)、プログラムの日記なので、一応、プログラムの話をします^^
まず、鈴希さんのほうから、こんなレポートが届いていますんで、ご紹介します。(サンクス!>鈴希さん)
やねさん、Prototype パターンってよく書いてますが、なんか違うと思います。 たとえば第C9回です。覚えちゃいないと思うのでテキトーに引用すると、 > 私は以前、これをPrototypeパターンと呼び、(中略) > また、自分の集約しているオブジェクトを > (内部的に)初期化し、外部からのメッセージはすべて > その集約オブジェクトに委譲すると言う意味でPrototypeパターンだと > 言ったのですが、作成動機が Prototypeパターンとは少し異なります。 とのことですが、これってProxy パターンじゃないですか? RSP でこの話が出てきた時のやねさんの動機は、C9回の > 私の目的はポインタによる管理から逃れることです。言い換えれば、 > 面倒な初期化作業、解放作業から逃れることです。 から、2段階初期化と解放作業から逃れることと読み取れます。 そしてやねさんの提示した解決方法は、スマートポインタの一種と言えます。 オブジェクトへの参照に串を差して機能を付加するというのは 典型的な Proxy パターンであり、実際にやねさんが書いた 実装方法も Proxy パターンの一般的な実装方法と同じです。 と、書いた後で例の Erich Gamma 氏のデザインパターン本を見てみたら、 なぜか動機の欄には遅延初期化しか書いてませんね。 Proxy の章全体を読んでもらえばわかると思いますが、 遅延初期化は動機の1つの例でしかありません。 どうもあの本は言葉が妙なところがアレですね。 |
これは、その通りです。どうも、私はErichi本のPrototypeパターンのサンプルのプログラムを誤解していたようです。それから、
「第B4回 VirtualProtectってなんやったんや」 についてですが、apyon-ukyon さんのお便りで > まあ、スタック上に確保しないで静的にとったならば初期化時に > きちんと確保されるので未使用でも呼び出せますが。 となっていて、やねさんも > 早速Windows2000で確認したところ、確かにその通りでした。ということは、 > 実行属性なんて関係なくて(笑)、自分のプロセスに属するメモリならば > どこでも実行できるということのようです。 と書かれてますが、それは x86, MIPS, PowerPC, Alpha では ハードウェアで execution 属性をサポートしていない為、 execution と read は同じように扱われ、 読めるところならどこでも実行できる状態になっているからです。 他のプロセッサだと、実行属性がないと実行できない可能性があるので、 一応 VirtualProtect はしておいた方が良いと言えます。 SPARC を調べてみたら、保護属性は実装系依存っぽい みたいなことが書いてありそうな雰囲気バッチリでした。 ただ、誰が SPARC で Windows を動かすのかという問題はあります。 というか、機械語コード直書きの時点で x86 以外では動かないんで、 今回は全然気にしなくていい話です。 でも、IA64がどうなるか分からないし、一応知っといた方がいいかと。 |
だそうです。にゃるほど。にゃるほど。
で、今回の本題。JavaのVM(Virtual Machine:仮想マシン)は本当に遅いのかを考えていたのです。
簡単に、JavaVMの仕様についてご説明します。まず、主として計算はスタック上で行なう、スタックアーキテクチャです。それから、Javaのローカル変数用に、ローカル変数配列というものを想定されており、その位置を0から始まる番号で指定できます。そのインデックスが1ならば4バイト目、2ならば8バイト目というように、アクセスは必ず4バイト単位です。このため、ローカル変数はbyte型であろうと4バイト取ります。逆に、double型ならば、2つ分の記憶容量を確保します。また、byteに対する演算命令が弱いため、byteの加算はintで加算をしたのちにbyteに切り詰めるような命令を置きます。
それはともかく、これをJIT(Just In Time)でコンパイルするとして、ローカル変数配列も同時にスタック上に配置する実装にしても構いません。というか、普通は、そうするでしょう。そして変数をレジスタ割付の最適化をしようと考えたとき、ローカル変数配列の部分は、無理に最適化しなくとも、このスタックに定数を積んだり、スタック上で何らかの演算したりする部分だけでもレジスタ割付すれば十分高速だと思うのです。具体的には、
void spin( ) { int i; for (i=0;i<100;i++) { } } をJavaコンパイラは、以下のようにコンパイルします。 Method void spin( ) 0 iconst_0 1 istore_1 2 goto 8 5 iinc 1 1 8 iload_1 9 bipush 100 11 if_icmplt 5 14 return |
左端の数字は、何バイトのコードであるかを意味します。バイトマシンなので、たいてい1バイトです。goto 8は、8バイト目(iload_1)にジャンプしなさいということです。
素直に、これをアセンブラに直すと、iconst_0は、0をスタックに積む命令であり、istor_1は、スタックから一つ取り出して、それをローカル変数配列の1つ目に格納する命令なので、スタック操作が入ります。これは、明らかな無駄です。iload_1はローカル変数配列の1つ目をスタックに積む命令で、bipushはバイト定数をスタックに積む命令、if_icmpltは、スタックに積まれた2数を比較する命令なんです。
これを最適化するために、ひとつの方法としては、上のようなiconst〜istoreやiload_1〜bipush〜if_icmpltというようなセットにして使う命令を認識して、スタックを使わずに実行するようなコードにすることです。これは、簡単でお手軽なわりには、それなりの効果があがります。本格的にやるならば、このようなスタック上の操作については可能な限り、レジスタ割付すべきです。(レジスタ割付のアルゴリズムについてはA.V.Aho著『コンパイラ II 』を参照のこと)
とは言っても、それほどまじめにやらなくても(どうせ関数呼び出しを行なうようなコードを書くと、その部分で、レジスタ割り当てしていたのを破棄しないといけないので)いいような気がします。あと、スタックフレームはどうせL1キャッシュに入るのだから、レジスタとほぼ対等のスピードでアクセスできるという気もします。
だもんで、そのへんの問題はあまり深刻になる必要もないかなということで、JavaVMの命令セットを斜め読みすれば、基本的な命令ならば1命令がだいたいPentiumの1命令になるだろう、という感じです。そういう意味では、JITコンパイルでも、基本演算等についてはかなり速いコードになるような気もします。
JavaVMのアーキテクチャに戻りましょう。C++で言う仮想関数テーブルは、コンスタントプールというのが用意されています。それは、仮想関数ポインタだけでなく、そのクラス内で使っている定数等もそこから取り出されることになっています。
ということはですね、(やるかどうかは別として)クラス内で使っている定数もvirtualに出来るということですよ。とは言っても使い道がいまいち思いつかないのですが^^; RTTIぐらいですかね。
で、どうしてJavaVMにこだわるかと言うと、自分で言語を作るとき、仮想マシンがどうしても必要になって、そいつ用の命令セットをあれこれ考えたり、人に説明したりするのが非常に面倒だから、仮想マシンの仕様は基本的にJavaVMそのままでもええんとちがうの?とか思ったんですよ。
アルゴリズムに対しては特許を取れないので、JavaVMは特許的に保護はされていないはずなので、まあ「JavaVM風」というのは、何ら問題は無いはずです。
それとは別に、新しい言語を開発すると、かならず必要になるのがデバッグ環境です。Visual Studioとは言わなくとも、エディット〜ビルド〜デバッグトレース出来るような環境が欲しいです。いまさらmakefileなんか書きたくありません。とは言っても、それはとても大変なことです。エディットは秀丸等のテキストエディタで代用するとして、ビルドも、まあ、このフォルダにあるファイル全部コンパイルするねん!とかそういう仕様にしてしまえば不要という気もしますが、デバッグトレースだけは何とかならんもんでしょうか…。
任意のところで停止させて、変数のwatchがしたいんです。しかしこれって、JavaVMに準拠させて、かつデバッグシンボルを埋めれば、Javaのデバッガが使えるんでしょうか?それとも実行ファイルを生成してVisual Studio用のデバッグシンボルを吐いたほうが良いんでしょうか?いや、それともいったんC++のソースを吐いて…、、、
などと考えると、もう泥沼です(笑)
まあ、Debugなんてもんは、キーボード押したときに変数がデバッグウィンドゥにでも出てくればそれでいいや。あと気が向いたらシンボルデバッガーでも作るかーなどとわかったようなわからんような結論に達し、あれこれ悩んでいても仕方がないと思ったのですよ。そうだ。負けるな、やねうらお!ゆけゆけ、やねうらお!明日には明日の風が吹く!!
(つづくなんてことはないよね、これ)
【JavaVM参考リンク】
VM関係のことは、ここから辿るともっとも早いだろう。
JavaVM上でさまざまな言語を実装しようという試み。英語だけど読む価値はあるかな^^;
JavaVMとは直接関係ないが、JITタイプのJavaVMを実装したい人は参考にすべき。近年稀に見る良書。(ちょっと高いけど)
ところで、アジソンウェスレイから出てる『The
Java仮想マシン仕様』という本(8,500円+税)は買わないように。近々、第二版が半額ぐらいの価格で出るようだ。この本、買って損した^^;
第DC回 パターン言語入門(デザインパターンを卒業したら..?) 01/07/26
デザインパターンを卒業したら、とりあえず、お勧めしたいのが、これ!
この写真に写っているさくら祭りですがなやっぱしさくらたん萌え現役をしりぞいたとは言えまだまださくらたんで一日2回は抜けま「プログラムデザインのためのパターン言語」細谷竜一・中山裕子監訳/ソフトバンク
パブリッシング/ISBN4-7973-1439-7 ¥4,600です。デザインパターンを勉強した人向けの本で、汎用設計パターン、分散・並行化設計パターン、組織・工程パターンという、従来のデザインパターンから一歩抜け出した内容となっています。この分散・並行化設計パターンについて、マルチスレッド(現代プログラミングの大きな主題でしょう)と関連して、いくつか書きたいこともあるのですが、今回は時間が無いので割愛します。
どうでもいいことなんですが、私の環境では、いつのまにかディフォルトでjpgがPhotoEditorに関連付けられているのです。しかし、こいつ、バグっていて、全画面でしか起動しなくなってしまってどうしたものかと困っていたら、こんなの見つけました..
http://www.microsoft.com/JAPAN/support/kb/articles/J052/6/23.htm
うーむ、バグですか、、バグで思い出したんですが、アプリケーションが終了後、タスクバーに何も表示されていないタスクが表示されることってありませんか?あれ、ずっと原因を探るためにリモートデバッグ
http://www.microsoft.com/japan/developer/library/vccore/_core_debugging_remote_applications.htm
とかして悩んでいたんですが(パソコン2台をLANでつないでる人は是非利用すべし)、ついに原因を発見しました!
http://www.microsoft.com/JAPAN/support/kb/articles/JP214/6/55.HTM
これでは無いでしょうか、、(;´Д`) 上のところから引用しますと、
解決方法この動作に遭遇した場合、この問題を解決するには、ウィンドウのスタイルをリセットするか、アプリケーションのメイン ウィンドウの処理で、WM_CLOSE または WM_DESTROY の中で、SW_HIDE をパラメタにして ShowWindow を呼び出します。 状況この動作は仕様です。 |
へー、、そうなんや、、仕様なんや、、仕様、、まあ、、いまさらWindowsのドタコな仕様にどうこう言っても仕方ないのですが、、、そんなことぐらいオンラインヘルプに書いとけ!!ぶっ殺すぞ!こんな腐れ仕様のOS作ってんじゃねーよ!こちとら休日返上でリモートデバッグしとんじゃい!何が仕様やねんハゲんな!Windowsプログラミングって、何かと大変ですよね^^;
追記。('01/07/28) 正しくは、ウィンドゥの状態を標準に戻さずに終了すると、この 現象が起きるそうだ。(この現象が確認できる環境が手元に 無いので、やねうらおは未確認) つまり、 ウィンドウの状態を最大化から標準に戻すときのアニメーションが 見苦しいためSW_HIDEで、隠して、そのあと、ウィンドゥスタイルを ノーマル(WS_POPUPとかでええんかな?)に戻せば良いらしい..。 というか、そうしないと、依然として消えずにタスクバー上に残る ことがあるらしいです..。 うむむ、、・・・マイクロソフトさん、「この動作は仕様です」と言うなら 仕様ぐらい正確かつ明確にドキュメンテーションして欲しいと思う 次第であります。 |
そういや、yaneSDK2ndですが、みはえるさんのサイトに、YNUユーザーズグループというのが出来ました^^; 紹介が遅れてすんません、、面白いので引用します:
YNUユーザーズグループとは? |
YNUは、やねうらおセンスに共感した人間達によって構成される、お気楽極楽を信念とするユーザーズグループである。プログラム、コンピューターの知識は問わず、面白い人間はそれだけでグループの一員となる。
YNUは略称であり、正式名称は以下の通りである。
“Yaneurao is Not Unix(訳:やねうらおはUNIXではない>あたりまえやろヽ(`Д´)ノ)”
訳も顔文字も含めて正式名称なので注意。全く意味はない。もちろん再帰による言葉遊びですらない。
ちなみに「ワイエヌユー」と読むのだが、なんか語感が「やねう」に似ているけどやはり関係ない。
YNUに所属する人間は以下の会則に従わねばならない。
YNU会則
会則1
YNUユーザーズグループ会員(以下“会員”)は、自分の知識をひけらかすこと無く、また無知を恥じ得る事無く、お互いに協力惜しまず、スーパープログラマーを目指し日々切磋琢磨することを誓う。
会則2
会員はいついかなるときもユーモアのセンスを忘れてはならない。仮にやねうらおに対する暴言を発見しても、その10倍のギャグで応酬しなければならない。
会則3
会員が2名以上集った場合、その場を「オフ会」と定義する。ただし、男性と女性のペアによるオフ会は、誤解を招く恐れがあるので、もう一人男性をオフ会に加えるのが望ましい(女性を加えるのがより望ましいことは疑い無いが、腹が立つので認めない物とする)
会則4
オフ会に女性が含まれる場合、男性は彼女をめぐって血で血をあらそう泥仕合をしたあげく、女性が引きまくってオフ会に来なくなったからと言って、最終的にストーカーと化して人生にピリオドを打ってはならない。
会則5(2001/5/26追加)
会員は「でじ子」、あるいはその時世における「萌え」なキャラをこよなく愛さねばならない。
会則6(2001/5/26追加)
会員は「にょ」、あるいはその時世における「萌え」な言葉をこよなく愛し、また活用せねばならない。
会則n−2
会則は必要に応じて、会則n-3以前に追加される。
会則n−1
会則の追加、修正、削除については、会員の3分の2の同意を必要とする。
会則n
何者も会員になることは出来ない。
会則:特殊1
ただし、以上の会則について、管理責任者は超法規的権限を持つので、この限りではない。
会則:特殊2
みはえるを管理責任者とする。
……一応言っておきますけど、ジョークですからね^^;。
とりあえず管理者権限で、このサイトに入らした方は「このサイトにいる間だけ」YNU会員になれます(笑)。
ちゅーことで、YNUネタは、このサイト以外では使わないようにして下さいませ(笑)。
ちなみに会則は、ベイカーストリートイレギュラーズの会則をうろ覚えでパロディにしてます^^。
だそうです。時間が来てしまいましたので、今回はこのへんで。
第DD回 魅惑のマルチブート環境(Win95/98/NT/2000...) 01/09/20
そういや、検索してるときに引っかかったんですが、「くろっくはちお気に入りな日記の更新時刻取得ページ」
で、このページが(笑) とても嬉しいんですが、まだ完全に日記サイトになったわけではございません。(なんや?隙を見て日記サイトにするかのような口ぶりは..) 何にせよ、ご覧頂きましてありがとうございます。
そういや、2次元の表現として、あるじさんところの、つきのはしずくのFLASHムービーなんか、見ていたんですが、
http://www2.odn.ne.jp/rg/index2.html
2次元(affine変換+半透明)だけでも、うまいことやれば、結構いろいろ出来るもんですね..。ここまで来れば芸術のような気もしますが(笑) 興味のある人は、是非見てください。
さてさて、先月は、サガプラネッツ様の『恋愛CHU!』のファンディスクの仕事をバイト君に任せていたんですが、いくつか確認したいことが出て来て、テストマシーンが必要になったのです。
せっかくなので、奮発して、やふオクでマシンを買いました。PentiumPro200 + HDD 2.1GB + 96MB + NICなマシン(キーボード/マウス抜き)が1万円もしたんですよ。(注:やねうらおは貧乏です) せっかく、1万円も出したんだから(注:やねう企画も貧乏かも知れません)、使い尽くしてやろうと Win95/98/98SE/ME/NT4.0/2000をインストールしてマルチブートが出来たら、いいかなと思ったのです。
もともと、Turbo Linuxが入っていたのですが、これを消すことに..Win95でFDISKをかけると...うっ、消えない!これでは何のために1万円も出して(注:やねうらお家も貧乏かも知れません)、高いマシンを買ったのかわかりゃしない。とりあえずWindows2000のCDをCD-ROMブートして、フォーマットしてしまう。これで、FATでのフォーマット完了。インストールしてる最中にCD−ROMのイジェクトボタンを押して、エラー終了させ、再起動。
そのあと、Win98の起動ディスクを入れて、FDISKでパーティションを切りなおし、Win95から順番にインストール。Win95のあとWin98はインストール出来ないことを思い出し、結局、Win95 / NT4.0 / Win2000を入れることにしました。
しかし、Win95 ⇒ Win2000 ⇒ NT4.0と入れると、Win2000が起動しなくなった。そ、、そうか、、WinNT4.0のあとWin2000を入れるためには、ServicePackを当ててないといかんわけで、、うーむ、HDDを初期化して、また入れなおし。Win95 ⇒ NT4.0 + サービスパック ⇒ Win2000。今度は無事インストール出来たのだが、そのあと、WinNTのネットワークドライバをインストールしたところ、ログオン画面で「 このコマンドを実行するのに必要な領域がサーバに確保できませんでした」とのありがたいお達しが..。サーバーのサービスを開始できないので、ネットワークの共有もできない状態に、、、ちみちみ、、ちょ、ちょっと、、困るよ、、1万円も出して(注:やねうらおは学生アルバイトさんより貧乏かも知れません)、買ったマシンが、これくらいのことで動かなくなられたんでは..!
しかし、サービスパックは、ネットワークドライバ等を入れてから適用しなければならなかったことを思い出し、サービスパックだけ再度適用。LAN上の他のコンピュータ名が見えなかったので、NetBEUIプロトコルをインストール。これで無事完了。めでたくWin95/NT4.0/Win2000マシンが完成したのであります。
でも、生のWin95と、DirectXを入れたWin95とか、そういうテストもしたくなったので、結局そのあと、「システムセレクター」をやふオクで2千円で購入。これを使えば、簡単にWin95/95+DirectX3/98/SE/ME/NT4.0/2000/Linuxとか、そういう共存できるんですよ。パーティションのリサイズも一瞬で出来るし、、うむむ、、最初からこれ使っておけばよかった..。
まあ、それで、Win95で実行してみてわかったことは、まずWindowのリージョン周りの処理が違うということです。Win98以降ならば::DeleteObjectしてもウィンドゥにリージョンは記憶されているのに、Win95ではそのコピーを作成していないため、リージョンの残像が残るのです。よって、ウィンドゥを別のリージョンへ変形させたいような場合、先行して次のリージョンを作成してSelectObjectし、そのあと旧リージョンを削除するという、ちょっとまわりくどいプログラムが必要なのです。
あと、ウィンドゥメッセージの来かたが、細かいところで違います。まあ、あまり考えても頭が痛くなるだけなので、そのへんは、まあいいや、と追求することを断念。yaneSDK2ndは、描画エンジンはほとんど自前で持っていますんで、OS間のWindowsAPIの仕様格差に悩まされたことはあまり無いんですが(DirectXは、OS間で動作が異なるというのはあまり無いですし。ビデオカードのドライバ依存だとかいうのはときどきありますが)、やはり、こういうの見てると頭が痛くなります。
ちなみに、このときテストしていたのは、スクリーンセーバーのプログラムだったんですが、Win2000だと、画面のプロパティ⇒スクリーンセーバーのところに出てくる表示は、実行ファイルのなかにそこに表示したい文字列をリソース(IDS_DESCRIPTION)として埋め込んでおけば良いようですが、Win95/98では、その機能は無く、実行ファイル名がそのまま表示されます。この、参考ページとして、東海分室をあげておきます。
あと、マウスの右クリックで出てくるポップアップメニュー(コンテキストメニュー)の内容が変更されない。調べてみると、GetMenuItemInfo関数がいかんようです。ちゅーかね、MSDNのオンラインマニュアルには、こっち使えって書いてあるやん?ところが、実際のところ、Win95で動くようにするためには、古いAPI、すなわち、GetMenuStateやらGetMenuStringやらCheckMenuItemを使わないといけないわけですよ。Mircosoftは、Win95のサポートを打ち切っていますから、Win95のことなんかちっとも考えていなくて、それらをオンラインマニュアルから削除しようと躍起になってたりするんです。LoadIconは、LoadImageを使えって書いてあるし、VkKeyScanは、VkKeyScanExを使えだとか。
DirectXにしたってそうです。やねうらおは、NT4.0をサポートするために、いまだにDirectX3のマニュアルを見なければならないんですが、先日、出先で、DirectX3のマニュアルを見ようと思ったんですが、ノーパソに入ってなくて、ちょうどそこはインターネットには接続できる環境だったんで、マイクロソフトのサイトに見に行ったんですが、んなもん、見あたらねぇ!!というか、マイクロソフトさん、最新のDirectX8以外は、サポートする気、ナッシングですか..。どうして、本家本元のマイクロソフトがサポートをする気がないWin95やら、DirectX3やらを、たかだか弱小メーカー(やねう企画のことね)で趣味程度にプログラムしてる私がサポートし続けないといけないのか、はなはだ疑問なんですがっ!!
まあ、それは良いとしましょう。うむむ、、きっちり動くものにしようと思うと、スクリーンセーバーも楽では無いと実感した次第であります。(とか書くと、またどこぞの掲示板で「やねうらおはスクリーンセーバーも作れないんだってよ(藁)」とか書かれるんでしょうけど、黙れ虫けら厨房ども!お前ら何も作れないくせにぐだぐだぬかすな!文句あんなら自分の作ったソフトとそのソースをまず俺に見せてから言え!あらゆるご批判に甘受する次第であります。< この態度のどこが甘受としんじゃい..ヽ(`Д´)ノ)
第DE回 FPSを正しく維持する方法(そんなん書いたっけ?) 01/11/24
わたくし、やねうらおは、あまりよそ様の掲示板を見たりはしないのですが(見るからには書き込みます)、ときどき、何かで検索していると、ある技術系の掲示板がヒットしたりしまして、そのなかでどなたかがWindowsのプログラム(ゲーム)で、一定の描画フレーム数(FPS:Frames Per Second)を保つには、どうすれば良いのか、という書き込みをされていたんですよ。面白そうなので、しばらくブックマークをつけて、じーーっと見させていただいていたんです。そしたら、心優しいどなたかが、それならどこそこのページが参考になるよって書き込んだページ、それがBM98’s ROOMのトップページだったんです(笑) ちょ、、ちょ、、ちょっと待ってください^^;; このページのどこを見れば良いんでしょうか。確かに、そういう内容の記事を、以前にこのコーナーに少し書いたような気もしますし、yaneSDK2ndのCFPSTimerの実装を見れば、どうすればという部分はわかるかも知れませんが、どかーんとトップページを紹介されてもですね..普通の人なら、どこにそんなん書いてあるんや?とまず思うでしょう。そして、ああ、ここか、と運良くトップページには別名「コンピュータなんでも日記帳」と書いてあるにもかかわらず、このコーナーを見つけるかも知れない。しかし、そこに繰り広げられているのは、変態女装コスプレ君の馬鹿話だったりした日には、やねうらおの人格まで疑われ兼ねません。(別にいいんだけどな..) 一体、うちのホームページは、いつからせきらら太陽になってしまったと言うんでしょうか。いや、なんとなく憧れるので、せきらら太陽みたく改装してみたい気もしますが(笑)
それはともかくですね、まあ、Windowsで、フレームレートを維持する問題ならば、よっしんさんのページ(吉田研究所@世田谷)が参考になります。以前、私、そこの内容にちょっと突っ込みを入れさせていただきましたが(笑) よっしんさんは、超連射68Kの作者さんです。
ところで、しばらく、このコーナーをお休みさせていただいていたのは、訳があるのですよ。決して、ネタが無かったわけでは無いのです。第DB回の変態女装コスプレ君の話をアップした翌日に、その勢いで続きを書いたものの、あまりにネタが痛すぎるため、読み返してみて、幾ばくかの躊躇いを感じ、足踏みしていたのです。しかし、熱い熱い声援メールをいただくにつれ、何とかこれを公開し、この痛みを読者の方々と分かち合わねばならないのではないかと思うに至ったわけですよ。(← というか、俺の痛み、思い知れ、みたいな感じですかな^^;)
というわけで、続きのはじまり、はじまり〜。
変態コスプレ野郎の車のなかで、やねうらおは、しばらく外を見つめていた..。
まさか、こいつ、赤字で大量にコスプレ服を売って、それで作った金で、メシをおごるためだけに来たのだろうか?
だとすれば、こいつは、案外、いい奴なのだろうか?
いやいや、そんなことは無い。こいつは..こいつは..。いままでだって散々、俺のことを..。会社を興したときだって、お祝いと称して、ひどい嫌がらせをしに来やがった..。やねうらおは、そのときのことを回想していた..。
あれは、去年の年末、呼びもしなのに、どこから嗅ぎつけたのかゴミ袋を漁る薄汚いノラ犬のよろしく、うちの忘年会に勝手に現れて好き放題言いやがった..。
「師匠、来て差し上げましたよ!遠路はるばる!僕がおらんと、宴会がはじまらんでしょ!」
いや、来て欲しいなんてひとことも言ってないし。おまけに宴会はすでに始まっとったんやけどな..それも滞りなく。お前、一体、何しに来てん?
「師匠はね、なんか会社を興しはったらしいけど、どっぷり漬かって漬かりきらんことには、ゲームなんか作られへんっちゅうことですよ。それをちょっとアドバイスして差し上げようかなと思いましてね」
ほう…。
「実はね、100万本は売れるゲームのアイデアを持ってきてあげたんですよ。ファイナルファンタジーなんか目やないですよ!どどーんと、豪華客船にでも乗った気分で居てください!」
ほんまか!どんなんや?それやったら、少しぐらい聞こうやないか。
「まず、美少女ゲームだからって、主人公を男にするでしょう。そして、そいつが女の子と出会う。で、エッチする。こんなんダメなんですよ。ありきたりなんですよ。誰でも書けるんですよ」
誰でも書けないって(笑)
「そんなシナリオは、エロゲー少しやってみて、感動した馬鹿が俺もこんなゲーム作ってみよかなーとか自分の才能がてんで無いことも忘れ、幼稚園児の作文のようなシナリオをぶちかますありがちな無能鼻くそシナリオライターのシナリオなんですよ。わかりますか?」
めちゃくちゃ言いはりますな..
「だからまず、主人公は、特に設定しないんですよ。別に誰だっていいからです。たとえば、マリオの姉が出てきて賞金の1000万円獲得を目指すクイズ、マリオ姉(ねえ)やんで構わない。それくらい主人公の匿名性の高いゲームで十分です」
マリオ姉やんで構わないって言われても..マリオの姉って一体、誰ですの?(笑)
おまけに、そのクイズ名、どこかで聞いたことがあるような気がするんですけど..。^^;
「作らないと後悔しますよー。何せ、100万本は軽いですからね。何度も言うように豪華客船の乗ったつもりで居てください。ともかく、主人公は別に、正体不明のままでいいんです。最後になっても、自分は誰だったかわからない。それでいいんです。主人公はプレイヤー自身なんですから」
ふむふむ。
「プレイヤーは、強いて言えば、風の前の塵(チリ)に同じ」
意味がいまいちよくわからんのですけど。
「それでね。その世界では女の子は、土に球根植えて水まいといたら1週間ほどで出てくるんです。それを脱穀して、精米したら、ほら妹のできあがりですよ。お兄ちゃんっ!大好き!って、なついてきよる」
あの〜。世界観の説明が始まったばかりだと思うんですが、言ってることがさっぱりわからないんですけど…。
「さっぱりわからないのは、師匠の問題意識が低いからです。いまの若者に欠けているのは、何ですか?」
何ですか、、って、言われても、、、何なんやろ?
「愛とか家族の絆ですか?他人を思いやる心ですか?苦しんでいる人を労わる気持ちですか?そんなんデンデン違うんですよ」
ほほ〜。そうなんや。デンデン違うんや?(笑)
そしたら、いまの若者に欠けてるものって、なんやねん?教えてよ。
「師匠は、だいたい問題意識が低すぎます。人はね、物語のなかに、身を置かなければ生きていけないのです。それは、カミュやドフトエフスキー読めばわかります。どうせ、頭の悪い師匠には何を言われているか、ちそぷそかそぷそでしょうけど」
最後の、ちそぷそかそぷそってのだけが、何を言われているのか、ちんぷんかんぷんなんですけど..。早口言葉?^^;
「物語はね、なにも洗練された複雑で上等な物語である必要は無いのです。文学の香りも必要ないのです。むしろ、粗暴で単純であるほうが望ましいのです。さらに言えば、出来るだけジャンク(がらくた)のほうが、いいのです。人々の多くは、ああでありながら同時にこうでもありうるという総合的・重層的な物語を受け入れることに、もはや疲れ果てているのです」
いつもは、ただの事務系会社員だが、アフターファイブには、モンスターボールでポケモンゲットだぜ!なんて話は、あかんっちゅーことか?
「そうです。そういう表現の多重化のなかに身を置くことが出来なくなったからこそ、人々は進んで自我を投げ出そうとしているのです。村上春樹も、アンダーグラウンドのなかでそう語ってます。だから、与えられる物語はひとつの<記号>としての単純な物語で十分なのです」
ふむふむ。
「まだわからない?」
うむむ..わからん。ごめんなさい、、もう少し詳しく教えてください。
「つまりね、物語とはお話なんですよ。お話とは、倫理でも論理でもない。まして哲学でもない。それは、言ってみれば、師匠が見つづけてる夢、なんですよ。師匠は、あるいは気づいていないかも知れない。ですが、師匠は息をするのと同じように、間断なくそのお話の夢を見ているんです。つまりね、人間ってのは、自我を支える自分という一貫した物語を必要とするのです。そして、もう一つ言えることは、そういう、物語が他者と共時体験をおこなうための重要な秘密の鍵であり、安全弁なのです」
ふむふむ。
「だから、万人が必要としているのは..言うまでもありません。この一貫した物語..すなわち、、もう何かおわかりになりましたね」
いいやー。全然、わかりません。教えてください。
「もー!!師匠は、やる気あるんですか!問題意識が低すぎるんですよ。そんなことだから、100万本売れるソフトが作れないんですよ。教えて欲しけりゃ、頭さげて懇願しなさい!」
すみません。私の勉強不足です。無知蒙昧な、わたくしめにご教授戴ければ幸いです。
「よろしい。私も鬼では無いから、教えてさしあげましょうよ。答え、妹ですよ。万人が必要としているのは、お兄ちゃんって言って、抱きついてくる可愛い可愛い妹ですよ」
...。
それは何をどう見ればそういう結論になるわけや?それこそ、ちそぷそかそぷそや..
「師匠は、妹が欲しくないんですか!それも赤ん坊のときから知ってるキナ臭い妹ではなくて純粋培養でいきなり現れた妹ですよ。お兄ちゃんって言って、ぱんつ見せながら擦り寄ってくるんですよ」
いや、ぱんつ見せながら擦り寄ってこられても(笑)
「嘘いいなさんな。妹欲しい。師匠は妹が欲しい。妹、いもうと、妹〜!○(≧x≦)oバンバン」
そんな、駄々っ子になられてもやな..まあ、いたらええかな、とは思うけどさ。
「そうでしょ。それも、インスタントな妹が欲しいんでしょ。年下だから自分の言うことをおとなしく聞いてくれるだろうという年齢的ハイエラルキーを制度的に組み入れなければ1対1の関係さえも構築できないほどに病んでいるんですよ。まともな大人の女性だと気遣いしなければならないし、そもそも相手にもしてもらえないような人間的不具と人格欠損と性格障害と対人恐怖症を抱えている口ベタでどもり症で神経性ストレス胃炎を抱えている師匠には、生身の人間では、それが関係性を持てる精一杯のラインなんですよ。さもなくば、等身大ダッチワイフぐらいにしか相手にしてもらえないですからね。所詮、オリエント工業の等身大ダッチに、コスプレ服やらスクール水着やら何やら着させて抱いてるのが師匠には、お似合いなんですよ。げはははは」
なんか、ひどい言われようやな…。
適当に相槌打ってるだけで、人間性までボロクソに批判されたんって4年前のプリミエールの森さん、以来やわ..。
誰が性格障害や、誰が人格欠損じゃヽ(`Д´)ノ
「なんですの?プリミエールの森さんて」
なんか、美術商のキャッチセールスの女の子でな、新卒で、彼女は22やったわけよ。まだ働き始めて3ヶ月やゆうてた。言うなれば、私より、ひとまわり小さい、ひよっこみたいなもんやがな。そのひよっこが、私の勤務先の会社に電話してきて、ご旅行に興味ありますか〜♪とか、旅行がとっても安くなりますよーとか、言いやがって、会ってお話がしたいゆうもんやから、会社終わってから、どんなかなーと思って会いに行ったのよ。そしたら、からふね屋で延々と3時間世間話をしたあと、美術品買えへんかー言う話になって、適当に相槌打ってたら、なんかもう120万の絵を買うことになってて、そんなん買われへん!ゆうたら、そりゃもう凄い剣幕で「こんなんぐらい買えんであなたまともな大人ですかー?」とか「そんなだから、彼女できないんですよ」、「私ならそんな甲斐性も無い人とは結婚できません」だとか、捲くし立てられて、そりゃもう、言いたい放題やで。誰がお前みたいな糞生意気な洟垂れしょんべん女と結婚するか、ゆうねん!ワシ、当時、彼女おった、ゆうねん!そりゃもう、私の繊細でナイーブな、ゆで卵の黄身の部分のようなガラス細工のような精密なハートに、お子様ランチの日の丸の旗のようなものが、ぐさぐさと50本ほど刺さったのよ!私のゆで卵、めった刺し事件ですよ!自分よりひとまわり小さい、ひよっこになんでそこまで言われるかな!おそるべし、ひよっこ!ひよっこ、あなどることなかれ!ひよっこアナドレナリン!アナドレナリンひよっこ!
「何ゆうてはりますの!そんなん、ボクと関係ありませんやん!?」
ちゃうがな!君も、テキトーに相槌打ってるだけで、わてのことボロクソ言うやんか!もーさっきのんで、日の丸の旗が30本は刺さったね。
「だって妹欲しいんでしょ?それもインスタントな妹」
まあ、おったらええとは思うけど…。
「そうでしょ。師匠は妹欲しい。インスタントな妹が欲しい。いまどきの言葉で言えば、e−sisterですよ。e−sister。」
instantはiで始まると思うけど…。
「ちゃいますよ。このeは、いま流行りのインター根っこのeですよ」
インター根っこはどうだか知らんけど、少なくともインターネット(internet)はiで始まると思んだけど…。まあ、いいけどな。
「こら、そこ、人の揚げ足ばっかりとらない!私の足はタコじゃないだから、揚げない揚げない!」
それ一体、どういう返しやねん..。タコじゃないんだから揚げない揚げないって…(笑)
「ともかく言うとおりにやれば、100万本は堅いんですよ」
ほんまかいな、、
「クイズマリオ姉やんで、ふぁいなるあそさー?」
ふぁいなるあそさー、ゆわれても..そんなゲーム作らへんてば!ヽ(`Д´)ノ
「じゃあ、ワリオの妹が出てくる、クイズワリオ妹やんで、ふぁいなるあそさー?」
ワリオいもやんってなんやねん。どこの言葉?
「ライフラインを使いますか?オーディエンスに尋ねることが出来ます」
うむ、、そしたら、あの、、ひとつだけ聞いていいかな..。自分、最初にゆった、豪華客船にでも乗った気分での、豪華客船て、もしかして..
「もちろんタイタニックですよ!」
・・・
・・・・・
やっぱりな..あれ、最後、沈んだっちゅーねん..。
(つづく)