更新履歴兼雑記 2003年08月分

since: 2003-08-01 update: 2003-09-01 count:
最新のものはこちら
Aug 28, 2003

[Update]: 白い弾幕くん

紫月飴さんにバグの指摘を頂いたので修正。 かなりびびるバグでした。なんでこんなことになったんだろう…

連絡を頂いた時は絶対 SDL_kanji_f1b だと思ったんですけど。 なんでバグがないんだろう…

忘れてましたけど、 天狐を見ればわかる通り、 author というタグが出現してます。 group だけでは作者が特定できんのでアレだな… と思ったのでなんとなく入れてみました。 現状何にも使ってませんが、ひょっとしたら使うようになるかもしれません。 形式としては <author>作者を表す任意文字列</author> という感じです。 古い弾幕にわざわざ入れてもらう必要はありません。

[Update]: D 始めました。

気が向いたのと必要に差し迫られたので、 ポーティングな作業に SDL_gfx 一式と SDL_sound を追加。 (not checked) と書いてあるやつは実行チェックしてません。


Aug 27, 2003

[Update]: 白い弾幕くん

グループに交通安全Xオリジナル、東方、エスプガルーダロケテを追加。 ついでに色々整理しました。 東方の方は許可取らずに弾幕のグループ名変えちゃいました。 もしご覧になっていて、問題あればご連絡を下さい。

フォントの操作を SDL_kanji_f1b に移行。

総数254とのことですが、 凄い量弾幕を頂いていてありがたいこってす。 で、 なるほど(03/08/24より)と思い、感想なんぞ書いてたんですが、 なんかまとまらんのでそれはまた別の話として、

ヘンな弾幕とかは全く気にせず入れて下さって結構です。 難しすぎ、簡単すぎも無問題。 極端な話、 これあげてもらっても結構。 基本的な方針として、昔っからこれは弾幕ビューアであって、 ゲームではないと認識してまして、 などと言いつつも、 頂いた弾幕を難易度調整していた時期があったりしたんですが、 それってのは何故かスコトラとかやってる人がいたんで、 ゲームとして一応難易度調整しておこうと思ったりしてたからです。 弾幕やさん作ってノーマルに影響が出ない弾幕を登録してもらう ってスタイルにしたのは難易度とか気にしないで 作ってもらおうという意図もあったりした気もします。 そのへんの意思表示のために OKGなんていう rank調整すらしてないムチャな弾幕を作ったんですが、 よく考えればそう書きゃ良かったですね。アホか。 ちなみに OKG は避けれなくも無いです。

[Update]: SDL_kanji_f1b

VC やら BCC やら icc やら kylix やら NetBSD で動作確認したので。 SDL_kanji_rle っていう名称はどう考えてもおかしかったのでやめました。 SDL_kanji は SDL_kanji_bdf とすると対称性ができて良いなと思っています。

[Program]: D のはなし。

長くなりそうだからツッコミを使うのは放棄。

配列初期化の件。 {} って こっちの初期化に使うはずなんで、 ドキュメントがおかしげかと。

Exception。 Exception よりは Error を使う方が良い気がします。 next とかいうメンバ持ってるから、 エラーを複数所持したりするつもりなんですかね。 あと msg で取るよりは toString, print メソッドが良いかと。 ちなみに phobos の object.d を見ました。 ドキュメントされてるかどうかは知りません。

ガベコレ対策全くしてないや… new してそのままなオブジェクトが結構ある…ダメダメ。 ガベコレの速度が気になるようなものを ガベコレのある言語で書いたことないからなあ。

[Book]: Ada, C, Pascal 言語の比較と評価

図書館で借りました。 いろんな人の論文集。

無謀にもD言語≒Adaを主張してみるページ の主張を理解せんとしたわけです。 Ada ってホントにデカいんですね… 部分型だとか単位解析とか、本当に必要なんかい。

部分型。

subtype STORIES is INTEGER range 1..8;

単位解析。

L, W, H: FLOAT {feet};
A: FLOAT {feet^2};
V: FLOAT {feet^3};

で、D言語≒Ada だと思ったかというと… 確かにかなり多くの機能が D に注入されているのは納得。 (C++ + Java + C#) / 6 + Ada / 4 + Eiffel / 12 + α 位でどうだろう。

本自体は… Kernighan の「なぜ私は Pascal が嫌いか」が有名らしい。 訳がわかりにくいのか、言葉が整備されてない時代だったのか、 全体的に今ひとつわかりにくい。 「通常のライブラリ」って standard library の訳?とか。


Aug 24, 2003

[Update]: D 始めました。

ポーティングな作業 なる項目を追加。 サルも おだてりゃ木に登るんで、 SDL_image, SDL_ttf, smpeg もやりました。 実のところ、自動でやるのは大変だろうけど手動でやるのは簡単なんです。 SDL_gfx, SDL_sound, SDL_kanji, SDL_kanji_rle 位は 自分的に必要なんでやると思います。 気が向いたら SDL_net, SDL_gui, SGE あたり? SGE は C++ 混じってやがるからどうなるか知らない。

先日のパッチを採用してもらいました。 lua.d をコンパイルしようとすると lauxlib.d で 定義されている luaL_ref が見つからなくて コンパイルできないって問題がありまして、 これは lua 自体の問題だと思うんだよな… C ではマクロだからいざ使わなければ 問題にならないから放置されてんだろうな。 まあ相談ですね。英語で。しんどい。


Aug 23, 2003

[Program]: SDL_kanji_rle

素晴しいおしごとのつまみ喰い。 結構サイズ減るなーと感動したんですが、 私的には 2D/3D 両方に出力したいので 2D 版をこさえました。 gl_kanji と同じフォントデータで使えます。

ソースは SDL_kanji を流用していると思いきや、 かなり遅げなレンダ処理を書き直したり、 データの持ち方が全然変わったりしてまして、 …つまり、ロクにテストされてません。 そのあたりのいろんなチェックと、 SDL_kanji といえば NetBSD なのでそちらでのチェックを したあとまともにリリースします。

さて、SDL_mixer & SDL_sound の目指している地点のように、 入力のしかた (bdf, f1b, ...)、 内部的なデータの持ち方、 出力のしかた (SDL_Surface, GL, ...)、 の接続を抽象化して組み合わせたらさぞかっこよかろうとは思いますが、 やりません、できません。

[Program]: D言語でしょう…

D はいいよー光線出し担当です。 そう、ゲーム屋こそ D。たぶん。 まだガベコレの挙動とか見てないんでそれだけ不安ですが。

で、 SDL_mixer.d。 自動的にこれ作るのは結構骨が折れると思います。たぶん。 ついでに、 playmus.d。 標準出力に音量を出すおまけつき。 コールバックがちゃんと使えるかどうかチェックしただけです。

ていうか SDL のバインディング位なら全部 D の インポートライブラリ作ろうと思っています…

[Misc]:

すばらしい。こんなことできるのね。 お子さんがいらっしゃることは 薄々気付いてましたとも。

なる ほど読もう

白い弾幕くんと bpo が次の TechWin に載るとか。 zfc がリナザウの本に載るとか。


Aug 15, 2003

[Program]: Lua-D など、D よしなし

Lua-D をほげほげやっとるんですが、 本家様のはちょっといいかげんみたいです。 まず現行のコンパイラではコンパイルが通らない、 ってのはちょこちょこいじったらいいとして、 lua_register の挙動がチェックされてないと思うんです。

// dfunc.d
import stream;
import string;

typedef void (*F) (int);

extern (C) {
        void ff(F f);
}

void f(int i) {
        stdout.writeLine("hoge" ~ string.toString(i));
}

int main() {
        ff(f);
        return 0;
}
/* cfunc.c */
typedef void (*F) (int);

void ff(F f) {
        f(1);
}

なんて書くと、

> dmd -c dfunc.d
> cc -c cfunc.c
> cc -o dfunc cfunc.o dfunc.o -lphobos -lpthread
> ./dfunc
hoge134517024

と、C から D linkage の関数はまともには呼べません。 解決するには typedef と関数 f を C linkage に押し込めれば OK。 で、Lua-D はそうなっとらんのではまったはまった。

で、今までやったことの パッチ。 もうちょっと様子を見てから本家に報告してみると良いかもと 思っていますが、newsgroup を見てないんで既出かどうかチェックしないと。

D はいい感じですよ。 とりあえず C++ 屋にはたまらんコンパイル速度です。

i@u wrk/cave/src> cat **/*.d | wc            # ソースの行数を
   2744    7904   60348
i@u wrk/cave/src> time make > /dev/null      # コンパイル+リンク速度
make > /dev/null  2.49s user 0.32s system 83% cpu 3.359 total
i@u wrk/cave/src> rm cave                    # 実行ファイルだけ消して…
i@u wrk/cave/src> time make > /dev/null      # リンク速度だけ
make > /dev/null  1.40s user 0.11s system 100% cpu 1.497 total

つうわけで 2800行が 1秒。 このソースは bpo を地道に D 化しているもので、 書いてる内容の密度はそんなに変わらんはずです。

libBulletML の自分で書いた部分は 2300行程なんですが、 同じ環境で 33秒かかってるみたいです。 C++、特に g++ が遅すぎるという話もありますが。

あんまり速いんで ttyrec りました

なんか不思議な希望に燃えてコーディングするような 元気が湧いてこない状態なので、 ダメダメなゲームになることが約束されている 自機が弾幕を発射するゲームを雑に作ってます。 D & Lua で。 こんなの。 cave という実行ファイル名は謎ですが。

あ、あと、 SDL_gfxPrimitives.d

D で SDL とそのまわり、OpenGL、Lua なんかが 普通に動かせるようになってきてて嬉しいんですが、 なんか微妙に欠けてる感じもします。 double linked list がたぶん無いとか。

ダルくて支離滅裂。まあいずれちゃんとまとめます。

[Misc]: libBulletML とか

メール頂いてまだおかしいと気付きました。すいません。 一応ちょこっといじりましたが、未確認です。 今 Windows 触れないんで触れるようになったらなんとかします。


Aug 09, 2003

[Bullet]: エスプガルーダとかの続き

ああいっぱい弾幕書いたな、と。 今週は20個の弾幕が 弾幕やさんに登録されたらしい。 平和記念日のある週に何をしておるか、と。

ところで タテハ(右)って、 サイキックフォース2012のウェンディに似てませんか。 比較するのにいい絵が無いなあ… こちらのピンクの髪の人。 あまり似てないシーンだけど。 しかし地味キャラウェンディの出現率が異常に高いページだな。

そうそう、昨日でかける前に リナザウ用 BulletML エディタを 作ったんですが、 悲惨なインターフェイス。 もちろん実際には使いませんでした。 眠いと何するかわからんな。 とうてい続きを作る気が起きない。 te ってボタンが謎。ちなみに何も起きない。

ABAさんに libbulletml の中身がヒドいとご指摘頂いたので修正しました。


Aug 08, 2003

[Bullet]: エスプガルーダ

今日もバイトあるしそろそろ寝るかと朝6時頃に思ったすぐ後に ロケテ情報を見つけたんで行ってきました。 眠い。

一応気付いたこと。

んじゃあ、弾幕でも再現します。

弾幕やさんに黙々とアップします。 めんどいのは避けて6つ程。高速弾ばっかり。 おやすみなさい。


Aug 07, 2003

[Update]: libBulletML

ずっと放置してた問題をちょこっと解決。

たぶん敵が発生してから最初のフレームの挙動が変わっている気がします。 発生したそのターンはたぶん何もしません。

あとは VC6 のダメダメ auto_ptr に対応したはず。 一生懸命 DECLSPEC を付けて回ったので VC で DLL も作れるはず。

ライセンスについて、GPL ってそういうライセンスなんだー と思うようなマヌケな勘違いがあると気付いたのはずいぶんと前にも関わらず、 今までずっとさぼってたんですが、ふとしたきっかけで今回リリースし直しました。 今後は修正BSDライセンスということでお願いします。

[Misc]: ライセンス

てなライセンスが欲しいのです。 小さな引用はご自由に。 私の作業がメインじゃないプログラムに使う場合はソース見せるんなら何でも良し。 私の作業をちょこっと改造しただけのものや再配布は完全に同条件で配れ。 と。

しかし、まあ、ライセンスってのは普通ソースコード単体に対してじゃなくて、 プログラムに対して行われるものだからムリっぽい。 そもそも倍程度ってそのくらい?っていう話も欝陶しかろう…

まあ深く考えなくても、自分のソースが使われるようなことも滅多に無いし、 だからまあ、FSF好きだしね、と GPL2 と何にでも書いています。

GPLの

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

を適用して、README あたりに、 GPL です、でも10章に従って条件を緩和します。 これこれの場合はそれそれな使い方をしても構いません。 とか書けばいいのかな。


Aug 04, 2003

[Update]: 白い弾幕くん

lua を用いた bml ファイル中に ] を記述すると syntaxエラー扱いになってしまうというバグを 大原さんに指摘して頂きましたので修正しました。

弾幕やさん経由で結構弾幕が増えています。 登録して頂いている方々に感謝します。 あと、あそこに登録したものはリアルタイムにパッケージに反映されますんで、 まとめて落としたい場合はパッケージの方を落として頂ければ良いかと。

弾幕やさんの方、ふとコメントしたくなることとかあるから コメント機能でも付けようかと思ってますが、本当にやるかは知りません。

1.5.2位の時にふと気になって雑に調べたもの。

・ソースコード  
ぼく 14000行
lua 9000行
boost 5500行
tinyxml 2300行

・だんまく
ぼく 8870行
大原さん 7000行
おたくツーさん 2500行
ABAさん 1600行
紫月飴さん 1500行
たまもくろすさん 530行

[Program]: OpenGL with vertex shader

メモ。

vertex shader ってのは座標と色を受けとって、 表示する時の座標と色に変換して返す処理、ってなもの。 デフォルトではモデリング変換して、光があったら光あてて色計算して、 ってことをしてくれるんですが、小細工をしたい場合があるとか無いとか。 で、オリジナルの処理に差し替えれるらしい。 DirectX は 8 から。OpenGL は ARB拡張と NV拡張で。 僕が触りたいのは OpenGL & ARB拡張。 まあ一番広い環境 (OS, ビデオカード) で動きそうですし。

vertex shader はアセンブラで書いて OpenGL 経由でビデオカードに渡す。 そのへんの API は Cg + OpenGL プログラミング で十分わかった。

アセンブラは嫌だから高級言語を作ってくれたのが Cg。 NVIDIA が提唱してるってことで、NVIDIAのカード以外では あまし良くなかったりしそう、とか勝手に思ってたけど勘違いの模様。

Cg の利用法は二種類。 cgGL プレフィックスで始まるような API を駆使して、 Cg からアセンブラへの変換を実行時に行うやり方が一つ。 このへんは [t-pot] PROGRAMMINGが素晴しかったです。

もう一つは Cg コンパイラ cgc を用いて前もって OpenGL ARB拡張用のアセンブラコードを作っておいて それを OpenGL の ARB拡張 API から呼び出すやり方。 こっちのやり方では vertex shader にパラメータが渡せない (Cg内のシンボルがどのレジスタに割り当てられてるかがわからんから) と NVIDIA の資料には書いてあったんですが、 Cg + OpenGL プログラミング を見たら Cg 側にシンボルに対して使うレジスタを 指定することによってできるみたいでした。

あとはなんといっても、 NVIDIAのサイト。 ここから Cg_Users_Manual_JP をもらいました。

[Misc]: 魔法と占いとか

はい。 ホイミはホイミの効果が出て、ホイミメラだとちゃんと合成した効果が出て、 単語ごとに一意な効果が出るような作りにして、 入力は markov chain だろうがユーザ入力だろうが かまわない、って方が面白いと思ったんですが、 まあ、面倒だったので…

あれ作った後にふと思ったんですが、 ていうかあまり関係無い話なんですが、 よくほげほげ度チェックみたいな質問に答えたら ほげほげ指数を計算してくれる CGI がありますけど、 あれって狙って作ればソーシャルエンジニアリングに使える気が。

0-100% までの指標なら Yes-No クエスチョンなら 6問まで、 三択なら 4問分の回答を結果の数字に情報を持たせられますし、 同時に複数の指標を計ってるフリをして複数値を出すとか、 小数を使うとかすれば、結果から全ての問題の答えを 一意に逆算できるようにするのはいとも簡単なわけで、 後はきわどい質問を盛り込んだチェックを作って、 無邪気に私はほげほげ度 52% でした、なんて報告している人を見て、 お前、○○かよ、ゲラゲラ、と影でほくそ笑めば OK。

て、いうか、IP で大体わかるか…

zcat  log/* | perl -ne 'if (/(http:\/\/.*?antenna[^\s]*\/)/ || /(http:\/\/a.hatena[^\s]*)\//) { print "$1\n"} ' | sort | uniq
# の結果を適当に編集して…
a.hatena.ne.jp/ABA
a.hatena.ne.jp/Dycoon
a.hatena.ne.jp/Godkeep
a.hatena.ne.jp/MDA
a.hatena.ne.jp/atty
a.hatena.ne.jp/guttyon
a.hatena.ne.jp/i9N
a.hatena.ne.jp/izuru
a.hatena.ne.jp/kzys
a.hatena.ne.jp/luvtechno
a.hatena.ne.jp/matakimika
a.hatena.ne.jp/noboruhi
a.hatena.ne.jp/omo
a.hatena.ne.jp/page
a.hatena.ne.jp/sgur
a.hatena.ne.jp/shinichiro_h
a.hatena.ne.jp/snagai
a.hatena.ne.jp/t_ragnass
a.hatena.ne.jp/taka-hr
a.hatena.ne.jp/yns
gonypage.ddo.jp/antenna/
www.dodgson.org/antenna/1/
www.sakura4u.net/antenna/
www.tees.ne.jp/~sin-x/antenna/

補足されてるアンテナ、っていうのがよくあるけど、 あれの意図とかがよくわからなかったんで、 自分でも調べてみたけどよくわからなかった。


home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h