日記

10月 1日 (火)

1. だらだら

今日は客先が創業記念日だかなんだかでお休みです。いい客です^^

が、特に何をするでもなく、家事やらなんやらで1日が終わってしまいました。むぅ。

10月 2日 (水)

1. 毒ガス禁止令

会社の帰りにアキバへ。ふらふら歩いていて気づいたんですが、今日のアキバはいつもと何かが違います。なんとなく、歩きやすいような・・・

それもそのはず。10月から千代田区では歩きタバコ禁止条例が施行されたんでしたね。そういえば、タバコ吸って悪臭と毒ガスを撒き散らし、火のついた危険物を振り回しながら歩いてるニコチン中毒者はほとんどいません。非常に気分が良いですね。快適です。まぁ、本当はこれが普通なんですけど。こういう条例なら歓迎します。早いとこ、全国でやって欲しいです。

1.1. サントラ

VM JAPANのパワーアップキットを購入。そのときに知ったんですが、AIRのサントラが発売されたらしいです。店内のあちこちにポスターが貼ってありました。売り切れてましたけど。何で今ごろ出るんでしょ?

2. パワーアップキット

帰って早速インストール。・・・ダメです。本体(VM JAPAN)のインストーラが、レジストリをちゃんと設定してくれなかったらしく、「VM JAPAN がインストールされていません」などとぬかします。ふざけんな。

まぁ、レジストリといってもたいした事ないです。インストーラのスクリプトを見ながら、適当に値を追加したら動きました。

  \HKEY_CURRENT_USER\Software\Falcom\Fsetup\VMJ = 本体インストール先
  \HKEY_CURRENT_USER\Software\Falcom\Fsetup\VMJP = 追加キットインストール先

2.1. パワーアップ

インストール終了後、早速プレイ。とりあえずシナリオモードをやってみましたが、難易度もパワーアップしている模様。こちらが極端に有利なマップがなくなっているようです。CPUもちょっとずる賢くなってるような・・・

4戦ほど交えて中断。トーナメントモードとやらをやってみました(イージーでキクカ)。このモードのマップは最初から幻魔が何体か配置されており、それらをどう生かすかがキーになります。しかし、キクカでプレイしたのが間違いだったというべきか・・・

楽勝。いやまぁ、「キクカだから」なんですけど。最初から幻魔がいるってことは、それに何体か援護をつけてイクサヒメ。あとはゴリ押しです。これだけで勝てちゃいます。最初から10体以上いるマップだと、「初手 イクサヒメ」でも問題なし。圧倒的です。

クリアしたら、マサカドとメルレットが加わりました。

10月 3日 (木)

1. 開発メモ

perlで数値表現妥当性チェック。-.1415とか、10.をOKにする(それぞれ -0.1415 ,10.0)。指数表現にも対応する(2.5e-7とか)。こんなんでいいんだろうか?

sub isDigit {
	my $x = $_[0];
	my $rc = 1;
	my ($pat1, $pat2) = ('^[\+\-]?\.?\d+$', '^[\+\-]?\d+\.?\d*$');
	my ($epat1, $epat2) = ('^[\+\-]?\.?\d+[eE](.+)$', '^[\+\-]?\d+\.?\d*[eE](.+)$');

	if (!($x =~ /$pat1/) && !($x =~ /$pat2/)) {
		if (!($x =~ /$epat1/) && !($x =~ /$epat2/)) {
			$rc = 0;
		} elsif (!($1 =~ /$pat1/) && !($1 =~ /$pat2/)) {
			$rc = 0;
		}
	}

	return $rc;
}

10月 5日 (土)

1. トーナメント

VM JAPAN PUK トーナメントモード(ノーマル)、メルレットでやってみましたが、ラストのメルレット戦でどうしても勝てませんでした。がっくし。キクカでやったら楽勝でしたけど。

10月 6日 (日)

1. 勝てない

VM JAPAN PUK のSNキクカ。紀伊日ノ御崎(VS シュレン)で止まりました。これ、どうやって勝てと?

イクサヒメ使うほどの術力はないし、魔晶石は全体的に敵側に寄ってるし、だいたいマップのほとんどが水で、相手がシュレンじゃ分が悪すぎます。試しにCOMどうしでやらせてみましたが、やっぱり勝負になりませんでした。

2. 勝てた

キクカはあきらめて、SNシュレンで再スタート。序盤がちょっときついですが(キクカよりはマシ)、比較的スムーズに進みます。紀伊日ノ御崎もあっさりクリア。キャラどうしの相性ってのもありますけど、あまりにもギャップが・・・

3. 商品名

近所のドラッグストアで、エチケット袋を売っていました。

ご気分が悪いときに
エチケット袋
ゲロゲロ

・・・わかりやすいというか、なんというか・・・

10月 7日 (月)

1. 雨

朝、降るか止むか微妙なラインだったので、傘を持って出社しましたが、地下鉄を出ると雨どころかカラリと晴れてました。おかげで傘が無用の長物に。嫌がらせですか?

2. 美技

VM JAPAN PUK、SNシュレン、出雲(VS シャダイ)戦。相変わらず青側有利なマップですが、偶然か、あっさり勝つことができました。

  • 赤ユキナゴ 攻撃 → 青テイクン
  • ・・・
  • 赤ユキナゴ 退転 → 青テイクン
  • 青テイクン 術封じ → 青シャダイ
  • 赤シュレン 攻撃 → 青テイクン(消滅)

決着までトータル所要時間5時間10分。こう美しく決まると気分がいいです。VMの醍醐味。

10月 9日 (水)

1. CSV

私の席の後ろのほうで、中高年社員数名が、机を囲んで難しい顔をしています。たぶん、ほかのチームの人たちです。ちょいとそば耳を立ててみましょう(ていうか、聞こえてくる)。

「データをカンマで区切っているので、データにカンマが・・・」
「ダブルクォートとカンマが並んだデータがあると・・・」
「SJIS漢字コードの2バイト目がダブルクォートと同じ値だったときに・・・」

ああ、やってるやってる(笑)他人事じゃないんですけど、笑っちゃいますね。データにカンマとダブルクォートが含まれるのに、CSV3形式(データを全てダブルクォートで括るCSV)を採用するなんて、完全に設計ミスか要件確認ミスでしょう。

ちなみに、来月カットオーバー(笑)

2. じゃぱん

VM JAPAN PUK、SNシュレンクリア。前半はきつかったですが、後半は比較的サクサク進めました。

そういや、相手マスター瞬殺技(バグ技)は、今回使えないみたいです。

10月 10日 (木)

1. 一覧

HTML簡易リファレンスに全要素一覧を追加。どの要素がどの文書型にあるか、一目でわかるようになりました。あと、各要素の属性にメタデータ(非推奨、簡単な説明など)を持たせました。

かなりそれらしくなってきたか?

2. GD

VM JAPANのエンディングの画像、割と気に入っているので、とりあえず静止画キャプチャしておきました。全部で28枚(幻魔の数)あります。

さて、これらの静止画から要る部分だけを切り出したいので、その手のツールをいろいろ探してみたのですが、なかなか良いものが見つかりません。画面に収まりきらないと切り出せないとか、あるサイズを超えて切り出そうとすると異常終了したりだとか、位置・サイズではなく、分割数しか指定できないとか、etc...

しょうがないから自分で作ることにしました。

  • Windows C : コンパイラがない
  • UNIX C : グラフィックライブラリの扱い方がわからん
  • perl, jperl : グラフィックの扱い方知らん

・・・むう。残るは PHP + GD くらいしか思いつきません。ということでGD 1.8.4のインストール。が、しかし・・・

GDはうまくいったはずです。PHPのConfigureも、然るべきオプションをつけてやり直したのですが、ImageCreateFromPng関数呼び出しで、何度やっても ''Undefined function'' と怒られてしまいます。あう〜 なんで〜

あ、キャプチャするときに範囲指定しとけばよかった?

10月 11日 (金)

1. meta

HTML簡易リファレンスの文字実体参照にメタデータ(説明書き)を持たせました。全部DTDコメントのパクリですけど。

1.1. module based XHTML

あと、XHTML 1.1を追加。って書くと簡単そうですが、こいつのDTDがまたえらいクセモノでして、DTDが数十ファイルに分割されています。''module base'' の名は伊達じゃありません。再帰的なINCLUDEの嵐で、ENTITYの解析・展開だけでものすごい処理時間が(Athlon 1.4GHz / jperl で約2秒も!)かかってしまいます。アルゴリズムを改善すれば、もっと短縮できそうな気もしますけど、私の腕じゃちょっと・・・(滅)

10月 12日 (土)

1. 住基ネット

10月 14日 (月)

1. ティーカップ

私がよく行くサイトで、TeaCupの掲示板を使っているところがいくつかあります。無料/有料掲示板で有名なアレですね。

今日、某サイトのTeaCup掲示板にアクセスしたら、アクセス制限を食らってしまいました。dionドメインからのアクセスをシャットアウトしているみたいです(現在は回復)。TeaCupのシステム状況と、アクセス制限食らったときのメッセージを要約すると、dionドメインを使用している人が違反行為をしたからだとか。

以下、全文引用(ていうか、コピー)

dionドメインからのアクセス制限解除のお知らせ 投稿者:info  投稿日:10月14日(月)22時52分53秒

善意でご利用中の皆様には大変ご不便をおかけいたしましたが、teacupコミュニティに対し、継続して度重なる違反行為をされる方に対し、プロバイダのご協力により、本人確認を実施し、直接ご本人より、「二度と同様の行為を行わない」誓約を得て解決といたしました。

今後も当コミュニティの存続に関わるような違反行為には断固とした対応を行う予定です。また、多くの参加者への迷惑行為は、弊社への営業妨害にもあたりますので、数百万円規模の損害賠償の対象となることもありえます。

是非、円滑で楽しいコミュニティ運営にご協力ください。

だって。いきなりdionユーザを全員締め出しておいて、事後報告だけですか?違反者に対して断固たる措置をとるのは当然としても、無関係なユーザに対して謝罪するどころか、脅迫じみてません?ユーザの印象がめちゃめちゃ悪くなる書き方ですね、これ。

1.1. 文字化け

なんか気に入らないからもっと書いてやる(笑)

理不尽な締め出しを食らった時に、TeaCupのFAQを見てたら、文字化けに関する記述がありました。

主なブラウザは、ページの最初の1文字目の漢字コードでコード種別を自動認識しますので、「タイトル」や「サブタイトル」の1文字目を他の文字に変更してみてください。

え? 素直にHTTPヘッダかMETA要素で指定すりゃいいだけのような気がしますけど?(http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/charset.html#h-5.2.2)そういやTeaCupの掲示板て、ときどき文字化けしますね。

掲示板上で、お一人のみが文字化けする場合には、その方とTeaCupの提供するサービスとの相性の問題があり得ます。特定のプロバイダとTeaCupとの接続回線に問題がある等の場合がそれです。

出ました「相性」。ソフトウェアの世界では、大抵「バグ」が「欠陥仕様」のどちらかですね。ハードウェアだと、電気信号の電圧とか、立ち上(下)がりのタイミングとか、デューティ比の微妙な違いなんかで信号を誤認しちゃう、そんな感じだったような。

それはおいといて、回線と文字化けって関係あるんでしょうか?回線状態が悪くてデータ落ちが発生してるとか?そりゃ確かに問題だ(笑)

10月 15日 (火)

1. 初歩のラジオ(嘘)

某友人がらじおぞんでというシューティングを紹介してくれたので、早速プレイ。

めちゃめちゃかっこいいです。・・・けど、避けられるんですか、これ?1面からものすごい弾幕です。あからさまに殺しにきます。「敵弾回避」という行為が無力に思えてなりません。ラスボス(image 89kB)なんか、もう凄いことに。ちなみに、40以上ミスしてます。

だいたい、エンディング(image 206kB)が難しいゲームなんて、初体験ですよ。

怒首領蜂がちょっぴりかわいく見えました。

10月 17日 (木)

1. 戻ってこない

あるプログラムを実行すると、いくら待っても処理が戻ってこない、調べてくれ、とのこと。データ数が多い(3万くらい)から、少しくらいはしょうがないんですが、ほかの環境では2〜3分で終わるのに、特定の環境だけ数時間かかるとか。データ量は同じくらいなんですけど。

OracleというRDBMSを使っていて、遅いとしたら多分ここでしょう。重そうなSELECT文を抜き出してきて、直に流してみます。

・・・ビンゴ!2時間待っても返ってきません。数万件単位のテーブルを5〜6個くらい使ってるやつで、 UNION ALL数個で連結してて、かなりやっかいです(UNION だったら死亡確定やな・・・)。ほかの環境では10秒程度で結果が出るんですけどね。

実行計画を見てみましたが、複雑すぎてようわからん(^^;でもこれだけが頼りなんで、うんうん唸りながら眺めてると、巨大なテーブルをフルスキャンしてる部分があります。インデックスも使ってません。んー???なんでこんな計画立ててるんだ???まさか!?

・・・またもやビンゴ!テーブルの統計情報が間違っていました。実際のレコードが3万件以上あるくせに、統計情報は''1件''となっていました。Oracleは、「1件しかないんだったら、フルスキャンしても平気だよな」として計画立てますから、それが実は3万件もあった日にゃあ、ねぇ。

というわけで、統計情報を取り直してもらったら、2時間待っても戻ってこなかったクエリーが、わずか8秒で戻ってくるようになりました。

10月 18日 (金)

1. 画像処理

久しぶりに画像処理に手を出してみました。学生時代は、プレステとかサターンの画像&音声データぶっこ抜きとか、吸出しとか、抽出とかやってましたね。どれもいっしょ・・・つーか、それは「処理」じゃないです。

今日のお題は「Javaでアフィン変換」。2次元座標系で回したり拡大したりという、あれです。でも、まっとうな3×3行列なんぞ使いません。2×2行列で、回転と拡大だけ。平行移動とかシャーリング変換はやりません。わかんないから(笑)あと、形状も矩形オンリーつーことで(弱っ)

JDK付属のAffineTransformっていうクラスを使えば変換自体はできると思うんですが、どーせヒマですから、描画処理も含めて自分で作っちゃいました。

結論。とりあえずできたぞ、と(ォ

アルゴリズムは変換の定石(?)どおり、変換後の領域から逆行列を使って変換元を調べる、という方法です。これだと拡大比が大きいときに重くなりますが、演算誤差によるピクセル落ちを防ぐことができます。

三角関数は全て下駄履かせた整数テーブルで処理。この方が純粋なMathクラスより1〜2割速いです。その他、変換後イメージの走査効率を上げてみたりしました。

それでも所詮Javaですから、速度的には問題アリアリです。複数のオブジェクトをリアルタイムに変換する(ゲームとか)のはちと厳しいです。当たり判定処理や、オブジェクトの動的生成なんかも必要ですからね(←何か企んでる?)

1.1. 三角関数テーブル

以前(かなり前だ)ゲーム作ろうとしたときに、逆正接(arctangent)をテーブル化したのを思い出しました。異なる2キャラ間の向きを算出するときに、逆正接を使ったんです。こういうのはブレゼンハムとかDDAの方が一般的かもしれませんけど、逆正接の方が単純でわかりやすいということで。

せっかく思い出したんで、古いソースコード(C++)を引っ張り出してきて、JavaとCで実装しなおしました。処理速度を測定した結果、Java(Windows, CPU:Athlon XP) だとテーブル化した方が、Math.atan(double)より4割くらい速いです。C(Linux, CPU:K6-II)だと atan(double) より1〜2割速いです。タイミングがシビアなゲームの場合、多少はアドバンテージになるかもしれません。

10月 20日 (日)

1. Linux

え、似非・・・がーん(^^;

まぁ、確かにUnixと呼ぶのはちょっと抵抗があります。一応「POSIX準拠のUnix互換」ってことになってるんですけどね。って、「互換」かよオイ(笑)X68000Pro/ProII が「68互換機」と呼ばれていたのを思い出します(?)

1.1. BSD

BSDってどうなんでしょうねぇ。ちょっと(表面だけ)しか触ったことないので何ともいえないです。いや、だからといってLinux使いこなしてるわけでもないですが。

メインは自宅サーバ(Linux)なんですが、さくらインターネットのサーバを間借りしてまして、そこのOSがFreeBSDなんです。たまにこのサーバ(外部。どこにあるんだろう?)から、自宅のサーバを攻撃してみたり。ファイアウォールの動作確認とか、セキュリティチェックに使います。うーん、その程度か。ていうか、それじゃBSDである必要はないですね。

機会があれば自宅にもBSD系をインストールしてみようかなー、と思ってます。別に何に使うでもなく、ただ、いろんなものに触れておきたい、それだけ。

・・・X68K + NetBSD・・・(マテ)

2. ぞんで

らじおぞんでのエンディングクレジットのみ、延々とプレイ。サルのように繰り返し、ようやく「真祐」でノーミスノーボムクリア。パターンを見切ればなんとかなりますね。ポイントは近接攻撃ハイロウレイザです。敵機出現と同時に画面外に追い出し、弾を撃たせないようにするという、消極的ながら積極的な戦法。

10月 22日 (火)

1. ぞんで

らじおぞんでのエンディング。「真祐」、「余空」ともにノーダメージノーボムクリア。すばらしいです。このステージ(?)だけはリプレイが記録されないのが残念です。

10月 23日 (水)

1. 雪

この歌がこんなに難しいとは思いませんでした。意外とリズムが複雑で・・・

とりあえず、タイミング完璧(?)版(Shift_JIS)。Winamp +「何か」で調整しています。メッセージ表示速度は最速です。

ついでにりりくすPlayerに対応した歌詞コンバータも作成してみました。作成時間わずか3分。即興プログラムですけど、まぁOKでしょう。

Gucchi's Lyrics Plug-In

10月 24日 (木)

1. 歌詞

うーん、さすが2ちゃんねる。いや、さすがというか、なんというか。

2. ぐるぐるうねうね

Javaで波打ち変換と回転変換をやってみました。リアルタイムで変換をかけると、Athlon 1.4GHz でも目に見えて処理落ちします。まぁ、画像サイズにもよりますけど。

とりあえず、2オブジェクト(256 * 240 pixels)で。

うねうね〜

10月 25日 (金)

1. りりか

ルビ表現に対応してみましたが、正規化の仕様が若干複雑になってしまいました。できるだけシンプルなのを目指していただけに、ちょっと不本意です。実装に響きますし。ルビは厄介ですね。

10月 26日 (土)

1. りりか

英語の歌詞カードを書いてみました。書いてていきなり発覚したのが、単語のグルーピングが予想以上にうざいということ。日本語の歌詞を楽に書くことしか考えてませんでした。空白文字区切りで自動的にグルーピングさせる機構を考えたほうがいいかもしれません。でも複雑になるしなぁ・・・

2. アニメ

Javaでスプライト。アニメーション機能付スプライトクラスを作成してみました。やはりスプライトたるもの、アニメーションしなくては。

次はスプライトマネージャ、かなぁ。

10月 27日 (日)

1. だらだら

アキバへ・・・行こうと思ってたんですが、洗濯やら掃除やらやってるうちに行く気がなくなってきました。特に買うものがあるでもなし。古本探しくらいですかねぇ。

10月 29日 (火)

1. 防火壁

友人のサイト「松浦リッチ研究所」で面白いことやってますね。 BSD + DHCP + NAPT な人向けです。例にWinMXを使ってるあたりが何とも(笑)

設定スクリプト見ると、フィルタリングの設定にipfw使ってますね。FreeBSDとかの「まっとうな」UNIX(除 似非UNIX)だと、 IP Filter 使うのかなーと思ってました。ipfwも現役なんでしょうか? いや、BSDはよく知らんのですが・・・

そういや、うちのファイアウォールもなんとかせにゃなぁ。

2. X68K

http://salad.2ch.net/pc/kako/971/971321486.html

つい読みふけってしまいました。TURBOさんって、亡くなってたんですね。初耳・・・江藤氏といい、祝氏といい・・・X68Kを盛り上げてきた、有能な方々を失うのは寂しいです。合掌。

2.1. New-X

はてさて、どうなることやらPower-Xプロジェクト。

シャープがX68Kから手を引いたために、New-Xが日の目を見ることはなく、零式計画は満開製作所が撤退したおかげで、事実上消滅したようなものでした。Power-Xが3度目の正直となるか、それとも2度あることは・・・?

10月 30日 (水)

1. じゃばじゃば

Java(applet)でスプライトを扱うのは、無謀な気がしないでもないのですが・・・

iアプリで怒首領プチなんてのもあるくらいだし、何とかなるかもしれません。なんともならなかったら、そのときはそのときで。

10月 31日 (木)

1. 脱 アプレット

アプレットを使うと、画像や音楽を簡単に扱えて楽なんですけど、その分いろいろと制限もあるわけでして・・・

1.1. Image

Applet使えば画像ファイルのロードは楽勝です。メソッド1発。これで取得できるのはImageオブジェクトなんですが、これがまた、使えないのなんのって。ピクセル配列を取得するのにも一苦労ですし、画像サイズを取得するにはImageObserverインターフェースを渡してやらなきゃいけません。ImageObserverの実装で手ごろなのはAppletですから、アプレットで扱う分にはどうにかなります。が、アプレットを使わずに、となると、もうお手上げです。

ざっとAPIリファレンス(J2SDK1.3)を見たところ、ほかにイメージを扱えそうなのはswingくらいです。BufferedImageなんてのもありますが、これはこれで役立たず。継承して拡張しようと思いましたが、BufferedImageのソースを見ると、酷い作りをしています。重要なインスタンス変数の多くがprivate宣言されてるくせに、アクセサがほとんどないです。これじゃ拡張性など全く望めませんね。

アプレット使えば確かに楽なんですが、こいつに頼ってしまうと後々制約を引きずってしまう(Appletがないと何もできなくなる)ので、脱アプレットを図っていたのですが、有効策が見つからず・・・

結局、画像ファイルのロードはToolKitで行い、画像サイズ取得部分だけ瞬間的にswingのImageIconに頼ることに。シクシク・・・J2SDK1.4では改善されてるのでしょうか?

1.2. Sound

アプレット使えば・・・なんですけど、脱アプレットということで、APIリファレンスをあさってみました。javax.soundパッケージなのは確かなんですが、なんかクラスとインターフェースが山のようにあります。いくら読んでも、どれが何をするものなのやらさっぱりわかりません。だだ再生したいだけなのに・・・

埒があかないのでWWWで検索(便利〜)。MIDIもサンプリング音声(auやWAVE)も、再生するだけでもかなり面倒な手続きが必要なようです。サウンドなんて、もともとOSやデバドラ、ハードウェアと強く結びついてるものですから、 ''write once run anywhare'' なJavaにしてみれば、多くの中間レイヤーが必要なのはわかります。わかりますけど、もうちょっと何とかならんものかと。

まぁとりあえず、SMFとWAVEの再生は成功しました。SMFはなんだかテンポが不安定ですが・・・謎。あと、WindowsのMIDIデバイスをYAMAHA SXG50 Driverにすると、なぜか音が出ません。Microsoft GS Wavetable SW Synthにすると出るんですが。これまた謎。

複数のリソースを同時に再生するとなると、この構造上、おそらくマルチスレッド処理になるでしょう(再生中、終了などの状態を、こちらが監視していないといけないっぽい)。ボリュームやパン調整なんかはなんとかなりそうなので、後回しですね。