« June 2000 | Main | August 2000 »

プログラミング

プロジェクトS

仕事で作っているPhotoshopプラグインのプレビューを拡大縮小できるように機能追加。色々追加するとどんどんソースが入り組んでくる。むう、やっぱC++でオブジェクトでゴーって感じにすべきだったか?なんかC++って、言語仕様が複雑すぎて嫌いなんだよな(理解できてないと素直に言えって)。 なお、Windowsへの移植を容易にするため、ユーザーインターフェースにADM(Adobe Dialog Manager)を使う事になった。これはAdobeの主なソフトに組み込まれたプラットホーム非依存なUIライブラリなんだけど、かなりいい感じである。ダイアログの表示、コントロールの操作、ToolTipの表示から、エディットフィールドの数値に自動的に単位をつけるようなことも可能である。ADM自体は、最近のAdobeのソフトが採用しているドック型式のフローティングパレットもサポートしているのだが、なぜかPhotoshopで使えるのはModalDialogだけ。パレット使えるとかなり応用範囲が広がるのだが……思うにPhotoshop6.0あたりでは使えるようになるんじゃないかしらん?で、ADM自体、わりと最近用意された仕組みなので、APIがバージョンによってかなり変わってるし、そもそもPhotoshop5.0以降でないと使えない(Photoshopでは、ADM自体がプラグインとして用意されている。プラグインフォルダの中に「ADM プラグイン」というファイルがあるはずである)。というわけで、ADMを使うと言う時点で、Photoshop4.0はサポート対象外っていうか、絶対動かない。 なお、Photoshop 5.5 SDK付属のADM関連ファイルを調べると、リサイズ可能なダイアログが使えるようになっているし、角度入力用のダイアルコントロールなどもあるようだが、これは5.5での追加機能なので、5.0で使えるようにする場合は使用できない(うちのPhotoshopは5.0.2なので、検証すら出来ない)。しょうがないので、リサイズ可能ではない、ただのMovable Modal Dialogにむりやりリサイズさせる機能を組み込む。

Javaとか

ところで、なんでJavaってネイティブコード吐くようにしないのかなあ。「どこでも動く」を満たさないとJavaじゃないってのはあるかもしんないけど、Javaと文法が同じ別の言語ですってのじゃだめなのかしらん?そういうニーズってないのかなあ。MacOS以外のプラットホームでは十分サクサク動くからそんなのいらんって事?そうなのかも。 仕事のため、CodeWarrierをインストールしたら、JavaのRADツールが入っていた。仕事とは関係ないが、興味があったのでちょっと試してみる。でもなんか全体に重ったるくて使いにくい。Javaアプリケーションを作って起動すると、ウインドウが出るまで数十秒かかる。しばらくの間、ウインドウが出ないのでなんか間違ったのかと思い、すぐに終了してしまっていた。使えるかこんなもの??

MacOS X

MacOS Xのパブリックベータは九月に配付されるらしい。うちの環境は動作対象外だが、動けばめっけ物という感じで挑戦してみてもいいかも。パブリックベータには、Interface Builder/Project Builder等、NeXT生まれの開発環境はついてくるのだろうか。Objective-Cというのもちょっと使ってみたいなあ。CodeWarrierには、「これからはラプソディだよ〜ん」とAppleがフカシこいてた時にでっち上げたC/C++のObjective-Cサポートがあるが、これ、68Kでしか使えない欠陥品だしな(ランタイムの68Kアセンブラで書いている部分をちょっといじればなんとかなるのかしらん?)。

| | Comments (1) | TrackBack (0)

StorageFighter その後

G3カードとの相性が悪いと言うので外していたマザーボードキャッシュを戻す事で安定したかに見えたSTFだが、果たしてそれでよかったのか?というわけで、その後の話

上記の環境で、自作のPhotoshopプラグインがフリーズしやすい事に気づいた。当然普通ならバグだと思うのだが、徹底的に見直してもバグらしきものは発見できない。フリーズする条件は、MacOSの仮想記憶をONにした上で、馬鹿でかい画像データにフィルタをかける事。仮想記憶OFFだとフリーズしない。デバッガでヒープをチェックすると、ヒープが壊れているどころではなく、ヒープをチェックしようとしたデバッガが特定の変なアドレスにアクセスしようとしてエラーになっている事が多い。これが仮想記憶空間の最後のアドレスなのだ。こりゃページング処理が転けてるよなあ。ポインタに書き込むコード等で、NULLや-1にアクセスしている部分はないし。いろいろトラップかけてみたら、Photoshopのホストコールバックである、AdvanceState()関数の中で落ちている。この関数は、メモリが足りない場合、画像の一部をメモリに読み込み、今まで読み込んでいた部分をディスクにスワップする物なのだ。OSの仮想記憶がONになっていると、この時にまあ大概OSの方のスワッピングも起こってしまう。下手をすると、メモリ上にあるとPhotoshopが思っているデータが実際にはファイル上にあり、それをPhotoshopがディスクに書き出すためにわざわざディスクから読み込むなんてことが凄い勢いで起こる。というわけで、通常Photoshopを使う場合OSの仮想記憶は切るのが鉄則になっている。まあ、そこをあえてPhotoshopには酷な条件でやっているわけだが、本来こういう事をやっても、激烈に遅くなる事はあっても、クラッシュすることはないはずなのだ。
いろいろ調べてみると、仮想記憶を切る他に、起動後にマザーボードのキャッシュを無効にする事でもクラッシュをさける事ができるようだ。そもそも、CPUに1MBものバックサイドキャッシュがついているのだから、本来ボード上の256KBしかないキャッシュは足を引張るだけなのだ。もともとこいつはオリジナルのPowerPC 604/132と一緒に動作するように作られていて、スピードの速いアクセラレータの類いと同時使用すると不安定要因になると言われている。しかし、起動時にはこのキャッシュがONになっていないと、ほぼ確実に起動途中でクラッシュする。
PowerLogixが配布しているG3/G4 Cache Profilerを使用すると、起動した後でCPUのバックサイドキャッシュや、マザーボードキャッシュの設定を変えられる。しかもこいつはAppleScriptで制御可能なのだ(なんでこんなものがって感じではある)。そこで、Chache Profilerを起動して、マザーボードキャッシュを無効にし、終了するスクリプトを書いて、起動項目フォルダに放り込んでみた。これによって、起動時はキャッシュONで、起動した後で自動的にOFFになる。
どうやらなんとかなりそうかな。ちなみに、使用したスクリプトは以下の通り。


tell application "G3/G4 Cache Profiler 1.3"
set enabled of Motherboard Cache 1 to false
quit
end tell

| | Comments (0) | TrackBack (0)

« June 2000 | Main | August 2000 »