■ [Update]: 白い弾幕くんをひっそりとバグフィックスしました。
おたくツーさんご報告ありがとうございました。
■ [Program]: 逃避 メモ ひとつめ - bullet/barrage lua/language
Lua 側からデータを渡したいわけですけど、 Lua のスタックとかいじるのしんどいので、 できる限りテーブルで C と連絡するとかしたくない。 Lua で OO っぽいことをしても C++ なんかの OO と 直接マッピングされるわけでも無いので便利くない。 C++ の場合 luabind があるけど、D つかってるし。
それにスクリプトはプログラマ以外の人も書けるのが理想ですし。 趣味で作ってる分にはどうせ プログラマ==スクリプタ なんであまり関係無いけど。 まあ 嬉しい誤算 もあるわけで。
で、OpenGL みたいな state machine な設計はどうか。
blType(ZAKO) blName("zako") blLife(10) for i = 1, 3 do fire(0, 3) end
シンプルだし、実装しやすいし、効率も悪くなさそう。
■ [Program]: 逃避 メモ ふたつめ - 現実 vs 理想
AspectJ おもしろい。 C から C++ の iostream だけつまみ喰いしたりできるように、 基本は Java でちょっとだけ AOP つまみ喰い (有名な例ではクラスを横断する Log 出力部分のモジュール化とか) みたいな使い方もできるのが良いと思う。
MJ とは好対照かと。 AspectJ では AOP は OOP を補佐する感じで、 MJ では OOP と AOP は等価位の重みか。 AspectJ は Java に hook をかける感じ、 MJ はプロジェクトを完全に Aspect で分類するから設計に強く影響する。 AspectJ は Java互換強く、 MJ は互換性がかなり弱い。 AspectJ は実装が安定、MJ 不安定。 AspectJ は IDE などの環境が充実、MJ は荒野。 現状では AspectJ はクラス解析できず、 MJ はできるのは数少ない MJ の強みかも。
最後のは例外として、 AspectJ は現実的、MJ は夢見がち。 D と C++ & boost に近い関係な印象。 もちろんそんなに綺麗に二分できるわけでもなく、 Java なんかはバランスをとっている感じなんだろうか。
以上しったかぶりなので眉に唾をお付け下さいませ。
■ [Program]: 逃避 メモ みっつめ - マルチパラダイム vs シングルパラダイム
Io おもしろい。prototype-based (以下 POP)。 何がすごいってマイナーパラダイムの言語って 普通(偏見) 実用性は乏しいのに、 ioDesktop なるパッケージは OpenGL, Audio, FreeType, Image, Movie, Compression なんていうゲーム作れと言わんばかりの内容。 sample も豊富。 NeHe を rewrite したりとか、気合い入りすぎ。 Self が Sparc と OSX でしか動かん(たぶん) のとは大違い。
クラスとオブジェクトの区別がなくて、 Object オブジェクト(class じゃない) を コピーして新しいオブジェクトを作り、 そのコピーしたものに動的にメソッドをいくらか追加して、 (OOP で言うところのクラス作り) その新しいオブジェクトをコピーして (OOP で言うところの new) 使うのです。 うまく説明できないけどあまり説明する気もない、メモだから。 サンプル。いい世界観。
SmallTalk はクラスとオブジェクトしか無いけど、 POP ではオブジェクトしかない。 ミニマルな OOP の実現。
POP は非常に汎用的な機構ではあるけど、 AOP の目的であるところの差分プログラミングも実現できる。 ここでまた好対照。 POP は first class object を厳選し、 それをとても汎用化して自己拡張可能な機構にすることによって、 個々のパラダイムを同時に解決する。 AspectJ や MJ は個々のパラダイムそのものを言語レベルで強力にサポート。
SmallTalk, Lua, Scheme vs. C++, Perl, OCaml って感じかな… クラスとオブジェクトしかない SmallTalk、 table だけで OOP もやっちゃう Lua、 マクロが強いんですかよく知りません Scheme。 巨大マルチパラダイム言語 C++、 予約語はある程度の数が必要と Larry さんも言ってる Perl、 関数型なのに OOP もサポートしちゃいました?(よく知りません) OCaml。 どっちが好みかな。
C++ は言語レベルでサポートするパラダイムが非常に多いけど、 自己拡張性もとても強い、無茶な言語。
以上もしったかぶりなので眉に唾をお付け下さいませ。
■ [Misc]: MacOSX とぼく
OSX で実行できない(10月27日おまけ) のか… ARE とか Noiz2sa とか rRootage が動くってことは 私が一方的にへぼいというのがなんとも。 Solaris で動いたはずなんでエンディアンは 一応大丈夫なんだろうけど、どこで落ちてるんだろ。 まあ遅くとも これが実現されればコンパイルしてみることになるでしょう…
しかし boost-dev 本当に読んでないな… 最新情報は Let's boost を頼るが吉かと。
ICFP の 全順位発表に今ごろ気付いたんですけど、 これで 20位 というのはわりと驚き。 あと Gokuri すごいな… google のも頑張ってくだされ。
フラウンホーファーとマリオはもうダメになったらしい。 ここに書くことによって次回試した人ががっかりするのですよ…
あと、自己紹介を置いてみました。
■ [Update]: 白い弾幕くん-1.5.5
暇が少しできたので、久しぶりに。 ちょこちょことバグフィックスなどを。 今回いろいろやったので逆に作っちゃったバグがあるかもしれないので、 その場合ご連絡頂ければありがたいです。
この場合のバグというのは、 どんなことをしようが何も言わずに落ちたらバグ。 予想外の挙動を示したらバグ。 というような基準で考えています。 今のところ、 不可能な画面サイズ指定で落ちる場合がある (エラーを返すんじゃなくてそのまま落ちるので回避できません) のと、 ヘンなファイル (拡張子が bml, lua, xml, act のどれでも無い) を指定して実行すると落ちるのがバグと言えると思います。 ていうか後者は回避できるんだからしろと。
最近 Lua弾幕に凄いのが増えてきて、 自機が弾撃っちゃうような弾幕(というのか)を見るにいたって、 ちょっとでも文法間違えるといきなり落っこちるような状況では 大変だろうなと思ったのでちゃんとエラーメッセージを出すように。 ていうかもっとはやくやれという感が強いです。
画面サイズころころ変わるのウザいよ、ごもっとも。 というわけで変わらない方をデフォルトに。 SetVideoMode を二度呼ぶと落ちたりする環境もあるかもしれず、 ひょっとしたら今まで落ちていた環境でも動くかもしれず。 もし今まで動かなかった人で動くようになっていたら教えて下さいませ。 そういや Linux & XFree86 だと画面サイズが合っていない状況で フルスクリーンにしちゃうと落ちちゃうけどどうしようもないな…
bmlファイルで存在しないグループ名が指定された場合、 userグループとして扱うようにしました。 新しいグループを作りたい人は勝手に名乗って下さい。 三つ程度そのグループのファイルが集まったらグループ名を追加します。
リプレイ時にスペースで落ちるのは昔の Boost.lexical_cast の問題。
Windows版にしばらく最適化オプション付けてなかったかも、 というマヌケな状態。 速くなってたらすいません。それが本来の姿です。
追記: デフォルトで画面最大になってないじゃん、と気付いたので修正しました。
■ [Misc]: そういや
Solaris on Sparc でもビルドできてました。 とリンクしとけば一人か二人くらいは Win バイナリ利用者の流入が見込めるかも… ならリンクの文言をもう少し選べよと思いました。 ちなみに端末には GL のハードウェアは無いわけで、実行はできませんでした。 (なんかテクスチャ作ってるあたりで落ちました) よってビッグエンディアンで動くかはわかりませんでした。実に意味なし。
さらにそういや、 音から旗生成するパッチ を作ったことを思い出しましたがこれは本当にゴミです。 終了時に落ちるし。0.3 に対するものだし。 ただまあ、音のパルスが来たタイミングを教えるライブラリとかを作れば なにかと重宝するかもなーと思ったのでした。
■ [Program]: 主に D のことなど
これに対して Fixed! ってメールを頂いたんですけど、 news に投げられなかったのは何故だろう…
Unicode の identifier って欲しいんでしょうか。 よくわかってないんですけど、 なんで Unicode と ShiftJIS のマッピングが欲しいんだろう…
implicit instantiation のはなし。
D news:909(Walter)んなもんいらんよ。
D news:7678(Walter)理由はね…実際問題ややこしくなるんよ。
D news:7693(Walter)そうそう、シンボル名が無茶苦茶にもなるんよ。
D news:15856(Other)std::make_pair を、std::max をくれー。そーだそーだ。…反応無し
D news:16951(Other)何故そんなに嫌いなさるのか教えてくれんかの?そーだ。…反応無し
絶望的だなー。自分で勝手に実装できないかな…
■ [Misc]: ゼロマリオとか
コネタの volume を消しました。 aumix というコマンドに気付いたからです。やっぱあるじゃん。
面白い試み見つけたんで ちょっと頭ひねったら一発で 見つけた。 1490点。 二つ目 はずれ。 800点。 2520点。 906点。 1170点。■ [Wheel]: graphviz と Hiki でサイトマップ
全部はっつけるとでかいので一部だけ。 ソース。 ダメダメな出来栄え。無茶な大きさになるのです。 一応クリッカブルマップになっていてリンクを辿れたりします (けど僕はそんな機能いらない)。 でもそのクリッカブルマップはずれまくっています (けど僕は使わないから気にしない)。 ていうか僕はこんなプラグインいらない。 そろそろ img タグ 10回は使った気がします。
■ [Wheel]: graphviz と Hiki
思うところあって 画像生成は一回しか行わない mimetex.rbを作りました。 mimetex というディレクトリを hiki.cgi の層に掘る必要があります。
んで、一回しか生成しないならそれなりに重い処理もアリだなーと思って、 最近個人的に関わりの強い Graphviz プラグインを。 dot.rb。 出力は以下のような感じ。
ごめんなさい。上下逆。 ごめんなさい。Graphviz をまだ日本語化してません。 ごめんなさい。やる気ないプラグインです。 dot というディレクトリが必要。 入力は以下の通り。
{{dot('class_tree', 'Uranau -> Juu; Uranau -> Kuti; Mise -> Uranau; Mise -> Madare; Hiroi -> Madare; Hiroi -> Mu')}}
次回予告: Graphviz でサイトマップ (予定は未定)
しかし Hiki はいいですね。まだよくわかってませんけど。 html 手書きはいい加減辛いと感じてるんで rd 使ってみたりしたんですけど、 拡張できない(たぶん)のがどうにもきつく感じてました。 Hiki みたいに拡張できる rd は無いものか。 ていうか Hiki の出力エンジンをひっこぬけば良いのかな?
■ [Wheel]: mimetex と Hiki
mimetex の存在を Zinniaさんに教えてもらいました。幸せすぎ。
一応プラグインの ソース。 上の絵は mimetex の方を黒背景に白字にする改造も施してあります。
■ [Misc]: D の sin についての意味不明なメモとか
速いっす。
■ [Program]: D のハッシュのベンチマーク
このへん見て、 itoa のベンチですかと思って、 しばらくしても誰も検証せんので自分でやりました。 ハッシュのベンチといえば Tietewさんのおしごと が素晴しかった記憶があったので、 それと 比較しました。 なぜか rd を使ってみる。
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。