あかさたの最近の仕事
2007-12-17 04:02 :
C# でリフレクションを利用して、Convention over Configuration を実装してみた

私は趣味で Rmake という RPG 作成ソフトを開発しています。このソフトを開発する際に使っている手法を紹介します。
続きを読む
Posted by あかさた(編集)
2007-03-08 06:37 :
Ruby.NET Compiler を触ってみた

Ruby プログラムを .NET Framework 2.0 上で動作する DLL/EXE に変換する Ruby.NET Compiler ソフトウェアがあります。気になったのでちょっと調べてみました。
本記事は、Gardens Point Ruby.NET Compiler Beta Release(February 2007)に対応しています。
■ 知りたいこと
・ 既存の Ruby ライブラリが使えるか
・ 既存の .NET ライブラリが使えるか
・ 既存のアプリケーションに組み込めるか
・ ライセンスは使いやすいか
・ 安定度はどれくらいか
・ 開発は活発か
■ 調査結果
・ 既存の Ruby ライブラリが使えるか
実装していないようです。実装予定があるかどうかも不明です。
・ 既存の .NET ライブラリが使えるか
次のリリースで対応する(したい)ようです。
・ 既存のアプリに組み込めるか
ちゃんとコードは追っていませんが、高い頻度で動的に書き換えるのはパフォーマンス的にネックになりそう(※)ですが、それほどでなければ大丈夫そうです。
※ コンパイラであるためです。ただ、IronPython もコンパイル可能でわりと動的に書き換えてもそれほどパフォーマンスでネックにはならないので、このツールもこなれてくれば大丈夫ではないかなと楽観しています。IronPython を組み込む際は、ランタイムのロード時間のほうが問題になりました(IronPython というよりは .NET 系全般の問題)。ゲームとかリアルタイム性が必要なアプリの場合は、ランタイムを呼び出すタイミングをコントロールする必要があります。
(IronPython では、WinXP/P4 2.8GHz/1GB の PC で秒間 50 フレームで HelloWorld をパースさせたら CPU 使用率が 100% になった <- あたりまえ^^;)
コンパイラなので、既存のアプリに組み込むことは想定に入っていないのか、プログラミングインタフェースは、まだ整理されていないように見えました。IronPython のように 1 行で組み込むというわけにはいかないという印象を受けました。
・ ライセンスは使いやすいか
BSD ライセンスに近い印象を受けました。このページの Licensing という箇所を参照してください。以下の内容が書かれています。というわけで結構使いやすいのではないかと思っています。
続きを読む
Posted by あかさた(編集)
2007-02-08 10:27 :
コーディング・スタイルが混ざってしまう

最近、C# と Ruby と JavaScript を使っているせいか、コーディング・スタイルが混ざります。つまり、JavaScript なのに Ruby の作法で書いてしまったり。これまでも、複数の言語を併用することは多かったと思うのですが、コーディング・スタイルが混ざるなんてあまりなかったのですが。(^^;
# しばらく仕事でコーディングしていなかったせいかな。
Ruby の場合(メソッド):
update_attributes
Java/JavaScript の場合(メソッド):
updateAttributes()
C# の場合(メソッド):
UpdateAttributes()
どうも、Ruby の書き方が気持ち良いらしく、JavaScript でも Ruby のような書き方をしてしまうことが多くあります。不思議と、C# で他の言語の書き方になってしまうことはありませんでした。
そろそろしっかりとしたコードを書くように心がけなくては。
Posted by あかさた(編集)
2007-02-03 11:52 :
文字列の比較

JavaScript で文字列の比較を行うにはどうしたら良いのか気になったので調べました。
JavaScript
s1 == s2
プログラミング言語を変えるとき、どうしても神経質になるのが文字列の比較です。メジャーな言語によって推奨される方法が異なるのです。
Java(参照の比較は == を使う)
s1.equals(s2)
C#
(C# は Java スタイルでも良いが、こちらを参照せよ。)s1 == s2
Ruby(参照の比較は equal? を使う。)
s1 == s2
C/C++(参照というかアドレスの比較は == を使う。)
strcmp(s1, s2) == 0
Delphi(参照というかアドレスの比較は @s1 = @s2 ・・・だっけ???)
s1 = s2
・・・誰か統一してくれ!
Posted by あかさた(編集)
2007-01-28 16:12 :
C# で mixin をしたいとき

今日は Rmake のマップエディタのリファクタリングを実施していました。マップエディタを作成する際、マップの描画を行わなくてはなりません。マップの描画機能は、エディタ向けの描画クラスとゲーム向けの描画クラスを準備していますが、処理内容に重複(※)が多く、明らかにコードクローンになっています。そこで、一つにまとめられないか考えていました。
※ 差分を説明すると、ゲームの場合は、キャラクタや文章表示用のウィンドウなどを描画しなくてはならず、エディタの場合はマス目ごとの設定値(例:エンカウント率など)などを描画しなくてはなりません。
結局、C# の Partial 型を使って一つにまとめました。本当は、描画パターンをコンポーネント化して、Ruby みたいに実行時に mixin したいところなんですけど。Seasar とか使えばできそうな気もしているけど、小さなアプリなのでそういう大仰なものを入れたくないとか考えたりして。
Posted by あかさた(編集)
