■ [Bullet]: YGS2K で動く BulletML
今ごろ気付きました。 やっぱ Windows のダイアログで選べると便利ね。 script/gamestart.c の
tama = bml_run(&tf,&tx,&ty,jx,jy); //BulletMLrun()
は
tama = bml_run(&tf,&tx,&ty,sx,sy); //BulletMLrun()
なのかな。
そういえば、 弾幕やさんのほう、 どんどん増やしていただいていて嬉しいんですけど、 グループ分けどうしようかねえ。
まあ方針定めるまでは三つ目ということで。 ご連絡頂ければ随時グループ名は追加します。
■ [Misc]: ファイルの整理しました
Vector が色々と置いてくれたので、 こっちのファイルは容量制限回避と負荷軽減のために消しさりました。 ありがたいことです。 無いような気がしますけど、リンク切れや取れないファイルがありましたら、 ご報告いただければ幸い。
■ [Update]: bogoYAML は YAML に改悪を加える
YAML ってそれなりに使ったんですけど 使わないっていうか邪魔な機能が結構多いなーとか 思ってたんですけどそんなこと無いですかね。 ということで雑な YAML for D を作りました。
一応 YAMLデータを D 言語ネイティブな配列と連想配列に変換できるのがウリ。 D 言語でのテンプレートメタプログラミングのサンプルにもなるんじゃないかと。 D 言語の template は普通に強力だと思いました。 コンパイル爆速だし。型演繹がすごく欲しい。
■ [Update]: libBulletML for D と d_cpp
ABAさんに rand は設定できないとダメだ、ということと、 alias bit bool はいらんということを指摘を受け、 ごもっとも、と修正。
管理するファイルが増えるとややこしくて涙が出てくるので、 弾幕 360度の方で libBulletML for D も同時配布ということにさせて下さい。
SWIG使うことも考えたんですけど 動いてるものをいじりたくない Windowsいじりたくない とヘタレな理由でやめました。 しかし今後 C++ を使いたい人は SWIG を使った方が絶対に良いでしょう。
■ [Misc]: そのた
紹介しました。 こいつら俺らよりプログラム書いとるやんけ、 などと驚かれたりしてましたけど、 私は恥ずかしながら hidekiiさん(で良いのでしょうか)の 偉業を知らんかったわけで、 僕も英語圏の人に日本のサイトを教えてもらうとは思いませんでした。 hidekiiさんごめんなさい。
> Why don't you post on the newsgroup more often?
うぐ。
これ、私じゃないかなあ。 右の人じゃなくて左の旧エスプの上二つは。 だとすると後三つは同一人物だった記憶があるので、 別に 人気があるわけじゃないかも。
ラスキルスキスキル・テルマンデケッシスピアサギスウィケムウィオ・ス・ティンプリ スキルマ・エリス・テース・ス 命を捨てて毒を遠くにはじき飛ばす [もう一度]
同じアルゴリズムじゃダメか… これ。 資料。ありがとうございます。 単語に意味が付与されてるからマジメにやったら面白そうだな。 でも原作に興味無いから意味ないね。
Makefile.win32 を付けたり、 ちょっとした修正をしたり、 インチキ英語で説明を書いたり。
■ [Program]: もろもろ
D presence on the far east なるスレッドを見て発作的に 日本のリソースリンク in 英語 を作ったんですけど、こんなもんでしょうか。 ていうかこういうものこそ Wikiを使った方が良いのかも。 でもあそこ使うと table の左っかわの日本語混じっちゃうしねえ。 特に文句や意見が無ければ news に post しちゃいます。
リンクといえば BulletML とかそのへんの リンク。
D で property がサポートされたわけですけど、
int len = strlen = "hoge";
なんて書けるのは不気味だな。 まあんなことするな、ってことか。
SWIG for D を 使ってみた。 凄いです。こんなに速く d_cpp が obsolete になるとは。
あるいは barrage 360 deg. といいます。 弾幕ビューアーです。ゲームじゃないです。
D 言語でいろいろするサンプルといった趣が強いので、 ものとしては実にやる気のない作りです。
スクリーンセーバーにしようと思ってたんですけど、 めんどうだし、私を含めて誰も実際に使いはしないだろうと思ってやめました。 俺は使うぜ、みたいなことを言って下さる人が一人でもいれば考えます。
d_cpp と libBulletML は追ってこちらの変更に追従させます。
騒いでた問題はどうしようもなくつまらん問題でした。 まあ glu32.lib が無いのが問題なんですけど、まあいずれ作ります。
glut.d を作りました。 あと SDL を問題の焦点から外したかったので SDL の tutorial を glut に訳したものを glut.d のサンプルとして。 これでもまだ Win32 では Access Violation…
opengl.d, openglu.d って extern(Windows) とか import windows とか、 そもそも gl.d, glu.d じゃないとか気になるなあ。
■ [Bullet]: BulletNotML
早々と XML 手書きは見限って SOX で書いてる私ですけど、 こっちの方が良さげだな…と思いました。 ちょっと思ったのはこういう独自仕様の言語が そのまま luaスクリプトになってたりすると面白いんじゃないかと。
ちょっと使ってみました。 SOX よりいくらか速く書けた感じ。 しかもネストが浅くて見やすい。 emacs の java mode でインデントも OK。 さて、多少問題が。 action を持たない bullet が作れない(気がする)のと、 - で始まる数字を許してくれない(たぶん)。
> diff BulletNotML.notavacc ~/src/java/bulletnotml-src/parser/BulletNotML.notavacc 56c56,58 < Bullet { "bullet" label:IDENTIFIER? Direction? Speed? action } --- > Bullet { "bullet" label:IDENTIFIER? Direction? Speed? action } > > bullet { "bullet" ";" } 62c64 < Fire { "fire" label:IDENTIFIER? Direction? Speed? ( Bullet | BulletRef ) } --- > Fire { "fire" label:IDENTIFIER? Direction? Speed? ( Bullet | BulletRef | bullet ) } 106a109 > | "-" IntegerLiteral
なんかあまりキレイな解決じゃない気がするけどこれでなおった。 それと数字が頭文字の label がダメっぽいのも気になる。 あまりメンテされる気が無いそうなので、 もう少し使ってみてからまとめてご報告するのが良いかな…
あとはもっと徹底的に省略できると嬉しいかな。 repeat での action とか、changeDirection の direction など。
いやだー。 これみたい。症状酷似しすぎ。 リプライを見るに、VC のデバッグモードで起きる。 ある程度動かすと起きる。 環境によって動作は変わる。 安全だとわかってる Access Violation なんてリリースビルドで無視しちゃえ。 とのこと。
さて、どうしよう… こいつをムシするには phobos の deh.c を書き変えれば良さげ。 それかそもそも発生しない状態(リリースビルド相当の状態)に すればいいんだろうけど…結構面倒そうだ。 なにせ deh.c には
/*** From Digital Mars C runtime library ***/
なんて文字が燦然と。これって多分ソース無いよね。
とりあえず libBulletML のサンプルにはなるし、 Linux では動くし、置いとくかな。 くやしいからもいっこスクリーンショット。 自機視点緋蜂。わけわからん。
■ [Program]: D メモ
libBulletML for D がちゃと使えるかの検証のために作ったものが、 Linux では こんな感じ。 (サイト容量がいよいよアレなので超低品質jpg)
で、Win に移動しようとするとはまりまくったのでメモ。
dmc。 ダメ。 libBulletML コンパイルできない。修正めんどうそう。
同じ OMFなら…と、Borland C++。 ダメ。 Borland C++ 独自の __turboFloat なんていう感じのシンボルがいくつか。 これを Borland C++ のライブラリから引っ張って来ようとすると 他のシンボルが多重定義になってダメ。
仕方が無いので、ilink32 でとりあえず dll を作って、 implib でインポートライブラリ作ってリンク。 test_bulletml.d はリンク、実行できた。
でも こっちはダメ。 いろいろやってみると画像処理を全部コメントアウトすれば動く。 libBulletML & 回避機関は無罪。
link axis+bulletss+camera+charactor+cpuinput+mymath+padinput,,,user32+bulletml+SDL+opengl32+glu32+cpu+kernel32/noi;
なんてやると ABAさんのおっしゃる通り、 glu32.lib が不正だと言われるんで glu32.dll から implib。 opengl32.lib も最初のアンダーバーが付いてないシンボルを持ってるようで、 うまくリンクできないから opengl32.dll から implib。
で、リンクして実行するとすぐ落ちちゃう。 SDL-doc の OpenGL のサンプルの D版 でも症状が同じだから GL の問題な気がするけど…
それはそれとして、libBulletML for D は間違いなく dll も配布すべきだと思いました。今度整理します。
あともう一つ、d_cpp は def ファイルも perl で生成して、 それ使って dll 作るような経路が良さそうな気もしました。
■ [Update]: libBulletML for D
アイアイサー。といっても 元々 libBulletML と回避機関を D で使いたいから ごにょごにょしてたわけなんですけど。
回避機関は接続部が雑もいいとこなんで苦労しそうなんで、 こちらを先にやってみました。テストは実に不十分です。
実用物に適用してみることによって、 d_cpp のダメなところがわかったので、 こちらも修正してあります。
libBulletML も parser に渡す引数が std::string => const char* に変化しています。 これはちょうどこのあたりで VC の DLL のデバッグビルド版で 問題を報告して頂いているので、 動作確認の後、C++ 版の方も追随させ、統合する予定です。
■ [Update]: D 始めました。 - C++クラスライブラリを使う
ああー疲れた。 永遠恋人 C++ を D から使うためのモノ。
まだ Windows環境でテストしてませんし、 インターフェイス、機能もイマイチと言えばイマイチ。 いつもどおり、ご意見ご指摘んなもん既にあるよなど、くだされば嬉しいです。
役者は揃った。私的に。
> make clean all rm -f *.o cpp_test cpp_inter.d g++ -g -c cpp.cc perl create_d_import.pl cpp.cc cpp_inter.d dmd -g -c cpp_test.d gcc -g cpp.o cpp_test.o -o cpp_test -lphobos -lpthread -lm
なんか凄い make 光景だと思った。
■ [Program]: D Strings vs C++ Strings
うわーいはやいマンセー。
などと、言うはずもなく。 いかがわしいベンチっすねえ…
たぶん C++ プログラムのボトルネックはファイル読み込みと map。 このベンチで言えることは、「dmc では rdbuf は高速な実行ができない」 「map と hash_map なら hash が速い」なんていうこと位かと。 ページの内容と bench の内容は無関係。
つうわけで ちょちょいといじって、比較。 あと const 外しはマズかろうとか、hash_map 使うのは反則だろうとか、 icc使うのかよ、とかあるけど、まあ気にしない。
> icc -O3 -o wccpp1 wccpp1.cc
さて、
> time perl -e 'for ($i=0;$i<100;$i++){system("./wc alice30.txt >/dev/null")}' perl -e 'for ($i=0;$i<100;$i++){system("./wc alice30.txt >/dev/null")}' 4.96s user 0.71s system 93% cpu 6.042 total > time perl -e 'for ($i=0;$i<100;$i++){system("./wccpp1 alice30.txt >/dev/null")}' perl -e 'for ($i=0;$i<100;$i++){system("./wccpp1 alice30.txt >/dev/null")}' 4.60s user 0.77s system 100% cpu 5.363 total
まあこの結果においても、このベンチは何の役にも立たんと思います。 少なくとも String の比較として適切ではないでしょう。
後日 dmc についても調べてみて、 文句の一つも言ってみようかな。
ただまあ、D が速いのは事実なんですけどね。
しかし C++ で現実的にファイルを全部高速に stringに読む方法って何だろう。
FILE* fp = fopen(argv[i], "r"); fseek(fp, 0, SEEK_END); int len = ftell(fp); fseek(fp, 0, SEEK_SET); std::string input(len, '\0'); fread(const_cast<char*>(input.c_str()), 1, len, fp);
これはヒドすぎるよなあ…
■ [Misc]: 城II
いまごろクリア。 23億3400万。死亡4回うち二回はボムのための自殺。ボム10発使用。残2ボム0。 明日には忘れているだろうデータなのでメモ。
散々既出なんだろうけど、なんかなあ、と思いました。
■ [Update]: libBulletML
VC で落ちちゃう問題をご指摘頂いたので修正。 さらに VC 用のプロジェクトファイルも頂いたので追加。 nakさんありがとうございます。 VC ユーザ以外には関係ありません。
最近細々したことばかりやってるねえ。 ところで libbulletml-0.0.2 というのはどこにあるんだろう…
こいつは何かの役に立つかもしれないし一応晒しておこう… VC と他の STL でコンパチな auto_ptr::reset と auto_ptr::release 相当。
久しぶりに VC 触ったけど本当にこれ使って 1年間バイトでキャドキャドしてたのかと 不思議になる位よくわからなかった。
縁あって触ってるんですけど… うーんアスペクト思考には魅かれるものがあるけどこの処理系とか… まあ研究目的…
Robocode でもういっこロボットを書こう書こうと思ってるんですけど、 普通の Java じゃやる気起こらんから気になってたんだけど。 AspectJ を見てみようかな。
■ [Misc]: ここの整理。
をしました。SDL-KB を今さら消して、 D の関数部の雑翻訳を今さら消し、 コネタの suread を消しました。 それぞれ Zinniaさん引き取って頂いたのとご指摘ありがとうございました。 K.INABAさん素晴しい翻訳ありがとうございました。
あと zaurus 用の gnuplot を正式に公開。 もうちょっとマジメにやろうと思ってたんですけど、ダルくて。
小ネタはいいですねえ。 ですので、細々と書いてた小ネタをまとめておく場所を作りました。
最近はアンテナをこさえてたんですけど、 タイムリーに同時期に開発されてたっぽい K.INABA さんの とあまりの違いっぷり。 こちらは Ruby から system 文で perl だの wget だの w3m だの diff だのを動かしまくるひどいものです… ソースの行数も十倍以上差があるようで。
■ [Program]: SDL_image_j2k
なぜか知りませんが、jpeg2000 を調べてみた。 で、なぜかは知りませんが、 SDL_image_j2k。 こちら で libj2k を入手されたし。 j2k ファイルなんて無いよう、という方のために、 サンプル。 ちなみに rate 落としまくりで 480x640 でたったの 994バイト。
■ [Program]: D - foreach
きたね。
そういや、ABAさんのおっしゃっていた interfaceまわりの不具合って こっちの Bugs Fixed の三つめ だと思ったんだけどうちではうまく動かなかったんで保留してました。 Win32 だとどうなのか試してみよう…
■ [Misc]: 忘れてました。
白い弾幕くんを昨日あたりこっそりバグフィックスしました。
それとは関係ない話で、 最近ちょくちょく WinXP で動かんぞ報告を受けるんですけど、 手元で再現できた試しが無いのでよくわからんのです。 何か決定的な要因やらヒントをご存知の方がおりましたら教えて下さいませ。 一瞬画面が出た後で落ちるらしいんですけど…
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。