SYMMETRICBRAINSWEB

last updated 2006/05/13

NetHack3Dのページはこちら。(Site of NetHack3D are here.)

INFO:新サーバ&新回線移行終了してます。設定の変更点などはこちらを参照してください(暫定版)

2006 06 13

MEMO:NetBSD Localeにja_JP.UTF-8が無い場合。

locale -a でja_JP.UTF-8が出てこない場合、en_US.UTF-8を元に作ることができる。

# cd /usr/share/locale/
ソースをとってくる。
# ftp ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/locale/ctype/en_US.UTF-8.src
# mkdir ja_JP.UTF-8
# mklocale < en_US.UTF-8.src > ja_JP.UTF-8/LC_CTYPE
locale -a でja_JP.UTF-8ができていることを確認。
setenv LANG ja_JP.UTF-8 や export LANG=ja_JP.UTF-8としてユーザ言語環境をUTF-8にする。
そのままだとutf-8なファイル名が表示できないのでlsにエイリアスを設定する
alias ls='ls -Fw'
など。PAGERはlvがおすすめ。jmanを入れてる場合もeucのままでだいじょぶ。

2006 05 13

エムエックスソフトインテリ金庫

Apacheでは、設定次第でhttpエラーの表示を個別のHTMLに指定できるんですが、うちのサーバ(sbrain.org)では404、403、401エラーなどなどのドキュメントを別に作ってあります。もう10年くらい同じ物を使い続けているので、作りなおそっかな。とおもい、ドキュメント見直してみたところ、401エラー(認証エラー)のドキュメントに小咄が仕込んでありました。昔の俺は何を考えていたのか…。割とおもしろかったので興味のある方は見てみてください。

http://www.sbrain.org/errors/401.html

2005 11 21 NetHack3D

さすがにモデルが立体アルファベットと最低限のマップだけってのも3Dやる人間としてどうかと思ったので、ユニークネームくらいはそれっぽいの作ろうと思ってモデリングに着手。ここまではまあよかった。

モデルを階層化できるようになったことだし、アニメーションがパーティクルとY軸回転だけってのも映像に関わってる人間としてどーかと思ったので、キーフレームを持ってアニメーションできるようにしてみた。まだリニア補完しかできないけど、(数学は高1で数Iをやったきりさわってない文系まっしぐらな私には他の補完方法とかできなくはないんだろうけどめんどい)

これでスケルタルアニメーションはできるようになった。というか、なってしまったというか・・・

データを作るのも自分だってことをうっかり忘れてたというか・・

恐ろしいほどに作業量激増。(しかもモーション付けがソースコードに座標と差分をちまちまと手入力というマゾっぽさ。)

そしてOS10.4.3になったらnvidiaドライバの不具合だかなんだかでMacで使ってる3Dソフトの描画が軒並みおかしくなるというおまけ付き。じゃあ3Dの作業は全部Winで・・とおもったらwinマシンの方は暖房器具のせいで電力不足に陥って不安定になるという、なにかの呪いじゃないかと思える状況になったのですげえ燃えます。

2005 11 18 NetHack3D

モデルの描画まわりをかなり変更してみました。Viewで描画してたのをモデルクラスの方に追いやったおかげで子オブジェクトを階層で持てるようになり、ある程度のアニメーションはできるようになりそうです。

できるようになったついでにパーティクルエミッターを追加してみたりして。だんだんらしくなってきたかなぁ

2005 11 16 NetHack3D

とりあえずアルファ版として仮公開です。

http://www.sbrain.org/nethack3d/

からどうぞ。

2005 11 09 NetHack3D

とりあえず動き回れるようにはなりました。モデル形式は読み込みやすい.objに決めて、ローダーも実装したので、後はバリバリとモデリング・・・と、これが結構めんどくさい。ムービー作る時と違っていろいろ気にしなくちゃいけないことが多いです。3Dゲームとか、みんなよく作るなぁ・・としみじみ感じました。

2005 10 30 NetHack3D

NetHack3Dだけど、OpenGLの方は、モデルデータの形式を決めかねてるのでちょっと停滞中。

そのかわり、ファイル名関係をUTF8で書き出せるようにしたり、今までダミー表示だったタイルがらみをきっちり表示させたりと、細々したところをきちんと実装しました。(後やろうと思っててやってないのは、ポート専用のオプションの保存と読み込みとnibのローカライズくらいかな。)

タイル表示はNSBitmapImageRepの

- (void)getPixel:atX:y

と、

- (void)setPixel:atX:y

メソッドを使って1枚のTIFFから切り出してみました。この、ピクセルバイトの読み出しと書き込みってなんかすごい基本的な機能っぽく思えるんだけど、余裕でOS10.4以降のメソッドなのね。

なにしろ自前マシンがTiger乗ってるのしかないので何も気にせずTiger以降専用メソッド使いまくってます。

そろそろ公開用のページも準備しないとなぁ・・・。

2005 10 28

おおざっぱオブジェクト指向という読み物を追加しました。

2005 10 26

http://plusd.itmedia.co.jp/pcupdate/articles/0510/26/news124.html

タカラ、ぐっとくるじゃない。

2005 10 25 NetHack3D (2005 11/1 太字部分追加修正。 11/2さらに修正)

着々と進んでます。moveloop()のアレは、結局

- (void)nh3dEventHandleLoopWithMask:(unsigned int)mask
{

NSEvent *event;

NSDate *date = nil;

while (keyUpdated == NO) {

if (date != nil)
[date release];

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

date = [NSDate dateWithTimeIntervalSinceNow:0.1];

event = [NSApp nextEventMatchingMask:mask
untilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]

untilDate:date

inMode:NSDefaultRunLoopMode
dequeue:YES];

if (event) {

switch ([event type]) {//// いろいろ判定処理・・・・有効な判定ならKeyUpdatedフラグにYESを指定してループを抜けます。

default :
[NSApp sendEvent:event];

[pool release];

continue;

}
}
[pool release];

}
}

という風にやって解決。イベントマスクのmaskは呼び出し側で

unsigned int mask = ( NSLeftMouseDownMask |
NSKeyDownMask |
NSApplicationDefinedMask);

とかやって指定します。判定処理にもよるけど、NSAnyEventMaskを指定して全部のイベントを拾うようにしておくのが無難っぽいです。default: 節で判定に漏れたeventはNSAppに投げ返して、continueでループの最初に戻ります。

(判定の中でも、メイン処理は進めたくないけどViewの更新はしたいとかの場合はこの手でいけます)

はまりポイントはuntilDate:の時間指定で、[NSDate distantFuture]とかで無限待ちにしてしまうと、MainMenuの選択をしたとき、MainMenuの選択やらなにやらはイベントとして登録されないため、マウス動かしたりしてなにかイベント起こさないと次に進んでくれずワンテンポ遅れるような感じになりますので注意。(気づかなかったんだよ・・・おかげでMenuのNotificationを受け取って、そのメソッド中でダミーイベント作って送ったりとかいろいろ変なことしてしまった。勉強にはなりましたが!!)

あと前のコードだと激しくリークします・・・(11/1追加)

さらに修正です・・。11/1のやり方だと2重解放を起こしちゃう可能性が高いです。(autoreleaseなオブジェクトをreleaseしてるから。)アレでうまくいってしまった場合はAutoreleasepoolのネストのどこかで、Autoreleasepoolの解放漏れをしてる可能性が高いです。(うちがまさにそうでした。)

正解は、めんどくさく思うけどループ内できっちりAutoReleasepoolを作ることしかないみたい。continueやbreakでループを抜けたり戻ったりする前には必ず[pool release];でオートリリースプールを解放します。

OpenGLのほうもNSOpenGLViewをそのままIBで配置してしまったため初期化メソッドが呼ばれてなかったり(でも中途半端に表示はできるのでこれも気づくのが遅れた・・)など紆余曲折を経ましたが何とかうまくいきそう。

ただ、アレだ。うちのメイン3Dアプリがアニマスなのでどうやってデータを持っていこうか悩んでます。(アニマスのデータって位置情報のサイズがでかいのだよね。はじめ表示させた時見切れまくってなにか失敗したのかと思った。)

 

2005 10 16 NetHack3D

問題だったところのうち1.のinit_errorを解決。Makefileはよくよく見たはずなのですが、やっぱりXCODEに取り込んだ際に見落としがあったようで・・(CWだとMakefileを読み込んでプロジェクト作成できたらしい。最終的には手動で直さなくてはいけないとしても、もうちょいなんかサポートあっても罰は当たらないのにと思う)

1が解決したらあら不思議。3 4(05.10.17修正)も解決しました。2のselect_menuの受け渡し処理は、絶対ポインタがらみでうちがよくわかってないからだと思いこんでたのですが、なんのことはなく、for文の条件式が間違ってただけというオチ。(05.10.17追加)3.の[event characters]は、[event charactersIgnoringModifiers]を使えばモデファイアを無視してキャラだけ返してくれることが解ったので解決。

思いこみとは恐ろしいモノですぐ目の前に正解があるのに気づかない事態に落ち込むことになります。まさに南泉猫斬の世界ですね。

そんなこんなで、ふと気づくとPortとして要求されている仕様では、あとはMenu表示時のショートカットを残すのみとなりました。これもすぐできそうなので、一通りの基本的な実装は今日中に終われそうです。

あとはいよいよ3Dを名乗るゆえんたるOpenGL部分の作成に取りかかることに。Cocoaに関しては、ドキュメントがないないといいつつも、HMDTさんやCocoaはやっぱり!さん、後忘れてならない日本語訳リファレンスをおいてくださっているoomori.comさんのように大変ためになる情報を集めてくれているサイトがあったりして探すと結構充実してるのですが、OpenGLはどうなんだろうなぁ・・書店に行った際ほとんど見かけなかったのでちょい不安です。

あとは速度アップや使い勝手の作り込みもしていかないと・・。とくにコマンドショートカットにかんしてはMacの流儀からは大きくはずれてるので、どこまで削るか、はたまた削らずそのままいくかとむずかしいですね。

あああ、大問題忘れてた。moveloop()との兼ね合いですが、このままだとやっぱいろいろ問題がありそう。(よくよく考えるとmoveloopにいきっぱなしでRunLoopに戻ってないわけでautoreleseとかクラスメソッドで作られたオブジェクトとかその辺の始末がずーーーっとついてないという怖いことになる・・・)

Windows版のportを見たら自前でmoveloop作ってるっぽいので、自前で作っちゃうのもアリなのかなって言う気もしてきてますが・・・

2005 10 14 NetHack3D

懸念だったmoveloop()との兼ね合いだけど、何とかなりました。かなり泥臭い方法だけど他のいい方法がまだまだ解らない。でも、これでとりあえずは遊べる状態になりました。(おかげで進行速度が遅れます)

んで現在の問題点。まだまだいっぱいあるのだけど、優先順位的には

1. initprob error がobj13,i426で発生するのをどうにかする。←これ最初からなんだけど何だろなぁ;;

2. select_menuの受け渡し処理 いまいちよくわかってません。

3. Altキー+文字の入力処理。[event characters]で受け取るとalt押しのキャラクタが受け渡されちゃう。キーコード見ることになるのかなぁ・・・

4. Map表示か、マップ作成のどっちかでたまに出てるnilvalueForUndefinedKey:]:をどーにかする。これ根が深そうで結構鬱です。

5. sheetのツヤツヤの処理。HDMTさんのとこのヒントのおかげで-(void *)_sheetEffectっていう隠しメソッドが表示直前の描画処理の時に呼ばれてるのが解ったのだけどいかんせん(void *)なだけに何が渡ってるのか解らない。当たりだけつけて後回しに…。

2005 10 11 NetHack3D

コーディングに行き詰まった時にビジュアル面を煮詰めてます。現在こんな感じ。

コードの方は、3Dダンジョン表示のためのディレクション処理を実装。割とうまくいったかも。とりあえず今のとこの問題はシートの出し入れの時のツヤツヤを消す方法がわかんないのと、CocoaのKey入力処理とNetHackのmoveloop()との兼ね合いをどうとるか。特に後者のほうはどーしたもんだ状態でこまってます。できるだけNetHackのPortingの作法どーりに作ってるのだけど、そうなると手続き型のキー入力処理にならざるを得ないわけで、メインウインドウをモーダルな状態にしないといけないって言うことになっちゃってゲゲェ。

nextEventMatchingMask: を使うと全部のイベント処理を書かなくちゃならないし、NSModalSession session = [NSApp beginModalSessionForWindow:[NSApp mainWindow]]をつかうと、わりといい感じにはなるのだけど、モーダル状態なだけに今度はメニューが使えなくなっちゃう。と、結構困りもの。マルチスレッドにするのは恐ろしすぎるし・・むー。どうしよう。みんなこういう時はどうしてるのだろう?

2005 10 08 

過去の仕事を整理してたら

単純にプレイヤーとなってしまった現在のパーソナルコンピュータからはあまり感じられなくなってしまったが、使うことと作ることが同義であったかつてのコンピュータ達を手にした時には、お腹の底にぐぐっと力が入って「これは今までにない凄いことができる」と感じる感覚が、そのマシンの前に立った全員に、確かにあったのだ。
                    BNN社刊・DesignPlex99年7月号.特集・表現としてのプログラムより・拙文
なんてことを書いてたのをみつけました。
いまのMacにはXCODEという開発環境が標準でついてきます。となると、自分で書いた手前、これを無視するわけにいかず
どーせいじるなら徹底的にやるかい。という流れになるのはごく自然なことです(ことですったら!)
てことでQt版でお茶を濁したりせず、こんなのを作り始める羽目になったのでした。
はじめは五里霧中でしたが、だいぶ形になってきたよ!いやあ、やっぱたのしいわ!

2005 07 17

Qt版jNethackですが、とりあえずのところこんな感じに・・・

2005 07 12

un*x系OSにとってカーネルの次に大事と言われるローグ系アプリNethackの日本語版jNetHackをOSX(Tiger)のX11用にコンパイルしましたので手順のメモを追加しておきます。

2005 06 14 ¥と\

そろそろこの形式も見づらくなってきた気がしますが、そもそも最初からこんなにつらつら書きつづける気はなかったわけで、きちんと設計しとかないと後で困ったときにはもう手遅れになりがちなものです。それでもこんな個人サイトなら困り具合もタカの知れたもので、せいぜい私がちょっとめんどくさい思いをすれば片が付いちゃうのだけど、規格とかになっちゃうと困り具合も違ってきます。なので、すごくきちんと考えに考え抜いて作ってるはず…はずなのだけど、実際には「この文字が入りきらないからこれを無かったことにして上書きしちゃえ」とか「これとこれが形が似てるから同じ字ってことにしちゃいましょう」とか「字が足りないからこっちの部品とこっちの部品をくっつけて一個の字と言うことでひとつよろしく!」等という、考えに考えすぎて寝不足のあげく朦朧としてたか、考えに考えまくってストレスの為に酒浸りとなり一升瓶5本は開けた状態で認可したのか、とにかく、裁定した人たちの健康と正気を心配したくなるような規格がごろごろとしていて、実際にそれを使わせられているわけです。まあ、何が言いたいのかと言いますと「OSXのターミナルで\(バックスラッシュ)が入力デキネエヨ!!!」と。実際のとこは入力モードをU.S.にすることで入力できたのですが、ATOKの半角英数モードやことえりからだともう何が何やらで…エンコードASCIIでY(半角大文字のワイ)なんていう、どこをどうしたらそんな字が入るのだって言う結果になったりして、健康と正気に不安のある規格をフォローするために、健康と正気が不安になるくらいの作業を込めたOSができ、健康と正気が不安のままなアプリが散在したままのPCを使って、健康と正気が不安にさらされるユーザーがいるという、ああ、最近ドミノ倒し記録挑戦する番組ってみないなぁ。という気分にさせられる事態。\を¥で上書きしちゃったひとの実名がもしわかったら、数世紀先まで名が残ると思う。

2005 06 12 Altivec

例のニュース発表後ちらりほらりとIntel採用でMacが高速化するって言うご意見がWEB上で散見されるわけですが、ほんとかね…という気分。というのも以前参加していたRC5を解析しちゃうぞプロジェクト(意訳)ではこんな結果になってる訳でして(*表示させたいCPUをチェックしてグラフ表示。PowerPCが2傾向あるのはAltivecの有無だったかな(G3とG4))、現行のRC5プロジェクトでも似た傾向にあるっぽいです。これみるとめだつのがPowerPCWithAltivecのクロックあたり演算性能の高さとIntelの頼りなさ。カタログ上の数字のでかさでごまかせるローエンドはいいとして、実際にかかった時間をシビアにみられるハイエンドを置き換えるだけの力があるのかどうか…とはいえ、余裕でタンパク質が固まる温度を超えてお茶がおいしく出る温度になっちゃうG5をみてると、3GHzオーバしたら水が沸騰するなあ…とも。(まあ、Intelの新製品も似たような感じっぽいけど。)

2005 06 09 最近の「ついてない」

実はMac環境アップにあわせて個人用にもAdobeのCreativeSuiteを買った訳なのですが、なんかつい最近CS2が発表になりまして、まあ当然というかうちに届いたパッケージには無償アップグレードシールがついてないわけでして、AdobeとAppleに問い合わせたところふつうに有償アップグレードになるとのことでして、たった7日の差で¥10万円の差が出たわけでして…ええと、それで…誰かなぐさめてください…

2005 06. 07

ええと、ついに正式発表の様子です。G5買ったばかりのタイミングでこの発表というのがまさに鬼っ子コレクターの面目躍如!!(せつない)ちまたで言われているアプリの互換性とかに関しては、またNeXTSTEP時代のようになるだけだと思うので、少なくともCocoaアプリに関してはあんまり心配いらないと思います。昔みたいな感じだったらコンパイル時にそのCPUのスイッチ足すだけでできちゃうだろうし。でも、Carbonとかクラシック系はどうなるかはわからないなぁ・・。開発環境が配られたみたいなのでその辺様子見ながらでしょうか。ただ、なんでこの時期にAMDじゃなくてIntelかってのが…PentiumMを除いて64bitCPUもDualCoreもやられっぱなしなような気がするのですが…

2005 06.06

うちの環境だと、手持ちのお気に入りのキーボードは軒並みファンクションキーが無く、切り替え機でWin/Mac環境で使ったりするときにいろいろ困っております。そこでかねてからずっとファンクションキーつきのテンキーパッドとか探していたのですが(既知だったのはApple Adjustable Keyboardに付属のテンキーパッドで、これはF1〜F15までついてました。でも、アレデカイし、レアだし・・)そこで発見したのがコレ!!→KB-32U-CS。システムサポート社製のUSBテンキーパッドです。メカニカルスイッチ採用でレーザ印字…おお、いいかも。F12までついてるKB34Uと言うモデルもあるようです。コレだ、これだよ!!ついに目的達成か!?オープン価格ということで市場価格を調べてみます。PC-SUCCESSさんで取り扱ってるようです。。。。ええと…¥61,598・・・アレ、見間違いかな。「販売価格 ¥61,598」orz...知らなかった・・・テンキーパッドってすごい高いのね。まだまだ道はとおそうです・・

2005 06.03 

MEMO:PowerMacG5のHDD静音化

うちのG5はプリインストHDDがウエスタンデジタル製のWD2500JDというやつでした。スペック表見たところ流体軸受けでAAM対応であったのですが、ケースがアルミな上穴あき過ぎなのでアクセス音がどうにもうるさい。なんか鈴虫鳴いてるみたいな音もする。PC/AT機なら迷わずスマドラにつっこみたいところなのですがG5ってあんなでかいのに5インチベイが全くないため不可能。3.5インチの方は特殊ねじでスライドさせる構造のため、吸音材を挟み込む手も使えません。いちおう特殊ねじにゴムワッシャを挟み込んでみたものの全く役立たず。物理方向で手がなくなったため(あっさりしすぎな気もしますが、G5、驚いたことにファンの設置部分や光学ドライブのマウント部分など最初からすべてゴムマウントだったり、共振しそうなアクリル板のところにはゴムで押さえがついてたりと、出荷状態で物理振動対策はほぼ万全だったのです。唯一あったのびしろがHDDマウントねじ関連だったのですが・・・(だれかあの形状のシリコンねじでも作ってくれないかな)方向変換します。

ハイスペックマシンということで、HDDもAAMはサポートしてるものの、おそらくはパフォーマンスよりに設定されているはずと読んでAAMのセッティングをすることにします。が、OS9時代のAAM設定ツールであったMacAAMはOS9起動できないため使えず。WDのユーティリティはWINDOWSとDOS用しかないため(うちのWIN環境はS-ATAじゃないし・・)これもだめ。ということで、久々にOpenFirmwareをいじくることにしました。command+option+O+Fを押したまま起動してOpenFirmware起動、以下のコマンドを打ち込みます。

0 0 0 here 428000 , ef , 4000 1 apply ata-command hd .

Enterおして戻り値に0がくればOKです。ちなみに16進数で80(最も静か)〜FE(最大パフォーマンス)の範囲で指定できます。2台目とか設定したい場合は最後のhdのところを指定したいのに変えてください。(AAMサポートしてるHDDならメーカー問わずいけるはずです)

設定後mac-bootでブートします。…結果は…大成功。ガッコンガッコンいってたアクセス音がかなり静かになりました。チーチーいってた鈴虫みたいな音も無くなってるようです。後は電源ファンの音が少し気になるくらいで、何とか我慢できる範囲に収まりました。

2005 06.03

Mac環境を604ex350MHzからDual2.3G5に移行。(またずいぶん放置してたね・・)それに伴ってセッティングメモなど残しておきます。

せつなさ満載でお届けするSYMMERICWEBはリンク許可を求められた場合不許可します。リンク希望の方は勝手にリンクしてくださいますようお願い申し上げます。