Ypsilonのバグフィックス版をリリースしました。皆様のご協力のおかげで思ったより早く安定してきたと思います。コメントやバグレポートをお送り頂いた方々に感謝いたしております m(_ _)m
こういったソフトウエアのデバッグは一人では難しいものです。なぜならテスト用のプログラムが偏ったものになるからです。これはプログラマーがそれぞれ自分のコーディングスタイルを持っていることに起因します。「こんな使い方あったのか〜」という発見があり、そしてその中にバグが潜んでいることもしばしばです
最近そんな例に関連する投稿がcomp.lang.schemeにありました。
(define (((f x) y) z) (+ x y z))
というプログラムはR6RS Schemeではエラーにしなければなりません。でも、これが使えると便利そうなんだけど・・・ そういう場合R6RSでは下記のようにポータブルに実現することができます。
(library (define+)
(export (rename (define+ define)))
(import (rnrs))
(define-syntax define+
(syntax-rules ()
((_ (f . args) . body)
(define+ f (lambda args . body)))
((_ var val)
(define var val)))))
(import (define+))
(define (((f x) y) z) (+ x y z))
(define g ((f 1) 2))
(g 3) ;=> 6
でも、私は自分のプログラムではこういう書き方はしません・・・で、この使い方にはバグが潜んでいたわけですね(汗
もしも私が一人でデバッグしていたら、これって何時まで潜んでいたことやら
Read Full Post »
ちょっとご無沙汰しておりましたが、この度「イプシロン(Ypsilon)」という名前のソフトをリリースしました。
これはピンボールを遊ぶためのソフトではなく、ピンボールゲームを作るためのソフトの基盤になるものです。
そうです、アレです、AppleIIで見たアレを作るための最大の難関に挑んだソフトです
イプシロンの概要はこちら。
http://www.littlewingpinball.com/contents/ja/ypsilon.html
こちらはインターネットのスキームのニューズグループに流したリリース情報です。
http://groups.google.com/group/comp.lang.scheme/browse_thread/thread/929af95f9d27ef2c
さて、コンストラクションシステムの開発にはいくつかの要素が必要なのですが、GUIでパーツを配置したりワイヤリングしたりサウンドを関連付けたりといったことは実は簡単なのです。リトルウイングではエンジェルエッグ(1996)からそういったツールを作って使って開発を行っています。しかし問題はピンボールのゲームルールの記述にあります。
本格的なピンボールのルールはかなり複雑で、これをC/C++で間違いなく記述するのはかなり大変です、またGUIで記述するグラフィカルな言語だけでは書ききれないでしょう。さらにリトルウイングではWindows, Mac, 家庭用ゲーム機、ゲームセンター用のゲーム機向けにピンボールを開発することがあるため、それらに共通するコンピュータ言語システムが理想的です。リトルウイングが自社タイトルに使用するシステムとコンストラクションシステムが同じ基盤になってこそシステムに高い信頼性を得られると考えるからです。
そこで独自に言語を実装することを考え、様々な候補の中からScheme言語を選び「イプシロン(Ypsilon)」に着手したのは4年前になります:p
Schemeを選んだのは当初実装が簡単な言語であると考えたこと(これは勘違いでした:p、きちんと全部作るのは大変だと思います)、ガベージコレクション機能があるのでメモリーリークという見つけにくいバグがなくなること、マクロ機能によりピンボール用ドメイン固有言語を作りやすいこと、きちんとした規格仕様書があること(言語の設計からはじめると本末転倒になりそうだから)、などの理由からです。
途切れ途切れに開発していたので4年もかかってしまいましたが、なかなか良いものができたと思っています。これからピンボール向け機能を作り込んで行くという段階ですが、もしSchemeを知っていたり興味がある方は是非試してみてください。すべてのソースコードを含むファイルは下記からダウンロードすることができます。
http://code.google.com/p/ypsilon/
ドメイン固有言語: ウィキペディアhttp://ja.wikipedia.org/に「ドメイン固有言語」の項目があります。
「イプシロン(Ypsilon)」はYoshikatsuの「Y」から取った名前です。わたしは特に車の好きな人ではありません:p
- Fujita
Read Full Post »
Posted in プログラミング雑記, タグ ピンボール プログラミング on 4月 30, 2008 | コメントなし»
コンパイラのwarningは全て消そう!そう思っていた時期が私にもありました。
今はこんな感じです・・・
#pragma warning( disable:4996 )
#pragma warning( disable:4146 )
#pragma warning( disable:4244 )
#pragma warning( disable:4715 )
#pragma warning( disable:4101 )
#pragma warning( disable:4018 )
昔に比べるとコンパイラはずいぶん親切になりました。最近では”compiler internal error”とかのメッセージもめっきり見なくなりました。ちょっと複雑な式をコンパイルしようとするとすぐ出たものですが・・・メモリーが640Kしかなかったんだから仕方ないですね。知らん顔して変なコードを作るやつは最悪ですが
わたしの記憶に残っている好印象のコンパイラですが・・・
1. Optimizing C86
8087のインラインコードを出力するコンパイラとしては最初期のものだと思います。浮動小数計算は圧倒的でした。CGのレンダーを作っていたので必須でした。このコンパイラにはライブラリーのソースコードがおまけについていて、そのおかげで8087の設定変更も簡単でした。他のコンパイラではソースコードは別売りで◯◯万円とかしていたんです。
2. THINK C
トリスタンはTHINK Cで開発しています。これは衝撃的でしたね。IDEの威力を思い知りました。まさにパラダイス!ソースコードを見ながらブレークポイントを設定して、その場でローカル変数一覧が見られるなんて・・・当時は信じられない思いでした。 エディターがマウスオペレーション必須という煩わしさも帳消しでした。
3. Watcom C/C++ 9.5 - 10.1 (Open Watcomになる前です)
Windows3.1用のクリスタルカリバーンのために本多通商(「ぷらっとホーム」になってたかも?)で買いました。Microsoft CとBorland Cのパッケージを見て絶望的になり、ぷらっと寄ったら置いてありました
Watcomはまったく知りませんでしたが、箱に書いてある事は衝撃的でした。32bitのDOSエクステンダーと32bitのWindowsエクステンダーが付属しており、32bitプログラムがWindows3.1で開発及び実行ができるというものです。それでいてMicrosoft CやBorland Cより安かったのです(*輸入品です)話半分と思って買いましたが、使ってみると完成度が非常に高く、おかげでクリスタルカリバーンWindows3.1版を作る事ができましたよ m(_ _)m
後にOS/2はWatcomでコンパイルされているとIBMの後輩に聞いてなるほどと思いました。生成されるコードもすばらしいものでした。(Watcomはx86のコンパイラ作成者にかなり研究されたのではないでしょうか。ある時期にメジャーなコンパイラの生成するコードがWatcomそっくりになりましたので・・・)
つづく・・・
Read Full Post »
Posted in プログラミング雑記, タグ ピンボール プログラミング on 4月 27, 2008 | コメントなし»
解読されない暗号がちょっと話題になっていますね。私も研究室が情報系だったこともあり、ちょっと見てみました。
いろいろなBLOGでも紹介されていますが、ワンタイムパッドという解読されないと証明されてる暗号があります。例えばHELLO->WORLDに暗号化するためにHELLOと同じ長さの乱数を使い、その乱数は一回しか使わないという簡単なものです。これは「木を隠すなら森に隠せ」的に考えるとわかりやすいと思います。WORLD(暗号文)から元のHELLO(平文)を解読する過程ではWORLD->GOHANやWORLD->RAMENなどのそれらしい平文の候補(例えば文章なら意味のある単語)が大量に出てきます。その中にはWORLD->HELLOも出てくるでしょうが、それは他の候補にまったく同じに混じってるだけですから解読者が正解と知る方法はありません。つまり平文が解読者の目前に現れても正解と解らなければいいわけなのです。
例えばある人の名前を暗号化したとしましょう。解読者が平文は「人名」という情報と「全ての人名」の表をコンピュータに入力して乱数を総当たりして解読を試みれば・・・すべての人名が画面に表示されるだけです。これでは解読したとは言えないでしょう。ここで「平文の長さと同じ長さの乱数を一回しか使わない」というのがポイントとなります。同じ乱数を繰り返し使えば見当をつけることが可能となってきますから。
さて、簡単に「乱数」といいますが、実はプログラムでこれを作成するのはかなり面倒です。プログラムだけではどんなにがんばっても「擬似」乱数までです。これは同じプログラムを走らせればいつも同じ乱数を発生するからです(それでは困る場合には、コンピュータ内蔵の時計やCPU内蔵のカウンターや本格的な専用ハードウエアを使います)
ゲームの場合にはユーザーの入力のタイミングという要素がありますから乱数の性能が問題となる局面は少ないのですが、例えば画像のエフェクトなどで1024×1024の100万ピクセルくらいを相手にしたりすると「疑似」の部分が模様となって目に見える事があります。そんな場合には性能のいい乱数発生アルゴリズムを組み込むことがあります。(ちなみにCライブラリの乱数は速度重視のことが多く問題となることが多いです)
スポーツでもランダムな動きというのは簡単そうに見えて実は難しいものですよね
参考:「ワンタイムパッド」「メルセンヌ・ツイスタ」(ウィキペディア)
Read Full Post »
Posted in プログラミング雑記, タグ ピンボール プログラミング on 4月 22, 2008 | コメントなし»
楽園がなくなったのは今にして思えば幸運だったと思う。何かにのめり込むには中学生は早すぎただろうから。
そしてわたしの興味は半導体素子、つまりハードウエアに戻っていった。キーボードは大学生になるまで一度も叩くことは無かった。マシンなかったしね
やがて高校3年生になって進路を決める時が来た。わたしの進路を決めたのは同級生のO君の一言だった。
「藤田〜、コンピュータはどんどん早くなるだろうけど、その後はどうなると思う?これからは通信の時代だよ」
正直いって彼の言葉の意味はよく解らなかった。でもその言葉には不思議な力が感じられた。彼からその名前を聞かなければ電気通信大学に入学することは無かったと思う。ものすごくマイナーだったし(今でもかな:P)
ちなみに彼は電気通信大学の同期入学生。彼の専門は電波通信(電波通信は携帯電話、地デジ、無線LAN、FeliCaとかも含めて非接触/移動体通信には必須の技術)これがNTTドコモが最初のMOVA端末を発売する7年前の話なのだから・・・今更ながらO君の驚くべき先見の明に感謝する m(_ _)m
ちなみに卒業したO君は大きな会社の研究部門に入りましたよ
Read Full Post »
Posted in プログラミング雑記, タグ ピンボール, プログラミング on 4月 16, 2008 | コメントなし»
で、ゲームを作り始めた。
友達はオセロとかスタートレックとか作っていたけど、わたしはリアルタイムなゲームが好きで空中戦ゲームとかを作っていた。家で紙にプログラムを書いておいてショップで打ち込んでデバッグするわけだけど、これが面白くて仕方がない。機体のロールを表現するために行列の勉強をして座標変換をBASICで実装(TK80のBASICは整数しか扱えないのでそれでも結構大変)。でも遅くて使えないので機械語で書き直す。まだまだ遅いので改良。そんなことを繰り返していた。そういうことはかなり熱心に調べたけど、学校のテストにはいいことなかったなあ(笑
まもなく一つの区切りがやってきて楽園は消えてなくなってしまった・・・丁度PC8001が発売されたころだった。
ところで「アトム」だけど、当時「俺はいずれ必ず作る!」と思った人もいるよね。そういった思いがASIMOとかに結実してるのかも・・・見たいな~アトム :)
- Fujita
Read Full Post »
Posted in プログラミング雑記, タグ アトム, ピンボール, プログラミング on 4月 15, 2008 | コメントなし»
思い返してみると、初めてプログラミングをしたのは中学2年生、工学社の雑誌I/Oの懸賞に応募したときです。AppleIIに使われていた6502の機械語の問題で、答えは16進数で書き込むものだったと記憶しています。マイコンどころか40ピンのチップすら実物を見たことがない頃でした。とにかく秋葉原にいってみたかったですねえ。夢いっぱいでした。
その翌年にNECのマイコンショップが学校の近所にできて放課後に足しげく通うようになりました。名簿に名前を書けばだれにでもデモ機のTK80BSを使わせてくれたのです。近隣の中学生が集まってきて楽しかったですね。
そして思いました・・・「これじゃ鉄腕アトムを作るのは無理だ!」(笑
-Fujita
Read Full Post »