SFITSIO誕生秘話
以下は特に秘密の話というほどのものではありませんが,
どうして SFITSIO を開発する事になったかを紹介します.
実は,SFITSIO は「山内個人が個人のニーズにおいて勝手に作ったもの」
ではありません.
まず,SFITSIO が生まれた理由は,簡単に言えば
宇宙科学研究所の「あかり」プロジェクトで必要だったからです.
宇宙研のX線グループが開発しているものに,
atFunctions
という有名なCライブラリがあります.
SFITSIOの位置付けとしては,
atFunctionsと同じようなものです.
今の SFITSIO は,山内が 2005 年ころから宇宙科学研究所の
「あかり」プロジェクトで開発してきた,
2.5世代目の FITS I/O ライブラリで,以下のような歴史があります.
-
1世代目:
開発言語は C で,CFITSIO を wrap した
オンメモリ型の FITS I/O ライブラリでした.
2005 年後半から作り始め,2007年で開発を終了しました.
これは,「あかり」の生の衛生データを FITS に変換するためのシステム
「TSD工場」で使われたほか,
LDS(ローカルデータサーバ)と呼ばれる,
TSD をクライアントの要求に従って任意の時刻・スパンで
切り出したものを返すサーバ,でも使われました.
LDS に関しては2012年でも現役で,東北大学では,
複数の LDS が設置され,「あかり」の
「FIS全天マップ作成プロジェクト」で
かなりヘビーな使われ方をされています.
また,「ひので
」のデータ処理でも利用されています.
トラブル報告は今まで一度も記憶に無いほど安定しています.
-
2世代目:
C に限界を感じたので,
C++ でゼロから書き直しました(2008年頃).
C++ といっても,printf() などの作法は C のままで,
必要なC++の技術だけ取り入れて,
オンメモリ型の FITS I/O という前提で,
ストリーム・文字列・多次元配列の処理のような下層部分まで含めて,
すべてを新規に設計しました.
現在では,この下層部分は,FITS I/O とは完全に独立しており,
SLLIB
という名前のライブラリとして,配布しています.
この部分だけインストールして利用する事も可能で,
SLLIB を使えば,http サーバ上の圧縮ファイルでも,
f_in.open("r", "http://my.server.com/settings.dat.gz");
というようにアクセスできたり,
文字列処理(正規表現等)も簡単になります.
やはり一番大事なのは,メモリバッファの管理が自動化され,
SEGV やメモリリークとはほぼサヨナラできるという事です.
この世代の FITS I/O は,「あかり」の
「全天マップ作成プロジェクト」の TSD FITS の読み出しで
使われています
(つまり,このプロジェクトでは,1世代目 と 2世代目
の両方の拙作 FITSIO が使われてるわけです).
トラブル報告は今の 2011 年まで一度もありません.
- 2.5世代目:
今の SFITSIO です.
2世代目 では,
FITS I/O のところに,少しだけまだ malloc() 〜 free() が
残っていました.これを全部クラスで管理するようにしました.
また,namespace を取り入れ,
他ライブラリとの干渉を避けられるよう,配慮しました.
JAXAのデータセンターにおいて全面的な理解を得る事ができ,
試験やマニュアル作成,
マニュアルの英訳も行ないました.
CSODA のスタッフや,赤外の一部の人達は喜んで使ってくれているほか,
惑星方面でも使ってくれている人がいると聞きます.
SFITSIO では,BTE におけるヘッダを拡張していますが,
これも「あかり」プロジェクトの長期にわたる開発の中で生まれたものです.
Last Modified: 4 Jan. 2012