HorliX/Horos

HorliX 開発の経緯を知る人は、HorliX を紹介するにあたってよく HorliX/Horos などと表記する。
HorliX が Horos の fork だからなのだが、では、HorliX が Horos の改変を全て取り込んでいたかというとそんなことはなく、ほとんどの改変は取り込んでいなかった。

代表的なものが roi-color-rotation-UI で、大元のアイアディアやソースコード自体の提供が Hiroaki-Inomata/air-h-128k-il 名義でなされたにも関わらず、Horos の凝ったコードを取り込むことはしなかった。
Horos のコードの方が見栄えがいいので、周囲は「なんで?」と思っていたのだが、最近になってその理由がわかってきた。
新しいコードが生成する保存形式では他アプリへの互換性も後方互換性も無くしてしまうから、というのがその理由だろう。

大抵のビューアでは、ROI を DICOM SR というフォーマットで記録する。
Horos もそうなのだが、SR の内部的に独自形式を使っていて他のアプリでは読めない。ここでさらに独自の情報を加えてしまうと、古いバージョンの Horos でもこの情報が読めない。
これではなんのための改変なのかわからない。
HorliX 開発陣が選択したのは、この改変を取り込まないこと、つまり、動作時にのみ ROI の色がくるくる変わるだけで、色情報そのものは保管しないこと、だった。
確かにこうしておけば、アプリ間の互換性そのものは保たれる。その後、改変するにしても作業の見通しがいい。

ああ、そういうことだったんですかと答え合わせさせてもらった気分です。

ataraxia
ANN2b

(追記)これ書こうか書くまいか迷っていたんだが、思い切って書くと、群馬大の dicom viewer の紹介ページがひどい。
ダイコムに関与する開発者・研究者目線で言うと Horos や miele は、ほぼ完全に「使えない」ソフトだ。
ROI の計測データやセグメンテーションの結果が、他のアプリに移行できないのだから、まともな解析用途に使えるわけがない。
閲覧するだけならいいではないかと思いはするが、それでもさすがに「OpenGL に依存するために deprecated な機能を使っている」ことくらいは明記すべきだろう。
群馬大医学部がゴタゴタしているのは知っているが、その一端が出ているよう気がする。

Nitrogen の謎

使うばかりではアレなので、HorliX/Horos/OsiriX のソースコードを読む。

早速、AppController(現在でいうところの AppDelegate です)の init メソッド内の以下のところでつっかかる。

AppController.m

[[NSFileManager defaultManager] removeItemAtPath:[[NSFileManager defaultManager] tmpDirPath] error:NULL];

なんだよ tmpDirPath って(笑)。

もちろん、ノーマル NSFileManager にこんなメソッドはなく、おそらくどこかで拡張してんだろうなあと物色したら、Nitrogen というフォルダ(のサブフォルダ)に収められていた。

しかし、なんだろ、Nitrogen って?

Objective-C におけるクラスの拡張(というのだろうか?オーバーライドといっていい)は、カテゴリを使うという手法があるようだ。
カテゴリによって新たにつくられたクラスは、慣例的に「元のクラス+特徴」というファイル名を持つ。

だから、上の例では NSFileManager+N2.h と NSFileManager+N2.m で NSFileManager の拡張機能を担っている。

この N が Nitrogen から来ているのでは?と想像はつくが、なぜ Nitrogen というネーミングにしたんだろうねと疑問に思ったという次第です。