アルゴリズムデータベースには、 アルゴリズムを実装したプログラムを登録し、 自由にダウンロードしてもらえることを目指しています。 (アルゴリズムの可視化についてでは と表記しているもののことです。) 登録するプログラムの製作方法は自由ですが、 パッケージとしてのまとめ方や 付属するドキュメントに書くべき必要事項をまとめてみました。
また、"README"
やパッケージそのものの 各種雛型 も用意しました。ぜひご活用下さい。記述言語/配布形態
記述言語に関しては、特に制限はありません。 開発したままの状態で公開する、ということで問題ないと思います。 製作者の都合で、バイナリ配布でも、ソース配布でもよいと思います。 なお、Unix/MS-Windows どちらでも使える言語は、かなり多数あります。
汎用性の高いプログラムを書くために(文字入出力編)
C(gcc/egcs), C++(g++/egcs), Fortran77(g77/f2c), Pascal(p2c/gpc), Java(JDK), Tcl/Tk, perl などの言語で、 文字入力・文字出力のプログラムを作るなら、 特に気にせずとも汎用のものが書けるはずです。
特に、C/C++ でコンパイラ依存しないためのコードを書くためには、 ANSI-C/C++ の範囲で書いてもらえばよいのですが、 それ以外で注意が必要なのは、例えば以下のような点があります。
- 計算時間を測る関数の実装が、多くの場合不完全。 これを解消する cpu_time 関数もあります。
- 乱数
rand()
を用いると、コンパイラによって乱数系列が異なる。qsort()
関数は stable でないので、結果はコンパイラ依存となる。- 浮動小数点演算の誤差の扱いが微妙に異なるため、 誤差を見込んだ大小比較を行わないと、結果はコンパイラ依存となる。 fcmp もご覧下さい。
汎用性の高いプログラムを書くために(GUI編)
グラフィカルなインターフェイスも含めて汎用のものは、 Java, Tcl/Tk, Perl/Tk などがあります。 なお、デモの中には Tcl/Tk を利用したものがいくつか公開されています。 リンク集のページを御覧下さい。
また、 X Window System を MS-Windows で動かすことも (条件付きながら)可能ですので、 X Window System に依存したプログラムを作るのも1つの方法ですが、 将来有望というわけではありません。
個人的には、文字入出力のプログラムに、 Tcl/Tk か Java でグラフィック表示するだけで十分だと思うのですが...
パッケージ名
他の研究者と重ならないように配慮下さい。 バージョン番号をパッケージ名に含めて下さい。 Unix の場合は、パッケージ名のディレクトリに全てのファイルを入れ、 ディレクトリごと tar ファイル1つにまとめるのがよいでしょう。 コマンドは
'tar czvf hogehoge-3.1.0.tar.gz hogehoge-3.1.0/'
などとします。 MS-Windows の場合は、パッケージ名のディレクトリを作らないのが習慣のようです。 ZIP や LHA で圧縮すればよいでしょう。なお、パッケージをいちいち手作業で作るのは繁雑です。 自動的に作るために Makefile の簡単な書き方 をご覧下さい。
配布プログラム
独立して配布(販売)されているライブラリ等と組み合わせて開発されている場合は、 御自身で開発された部分だけをパッケージに含め、 ライブラリ等については「必要環境」に含めて下さい。 商用・非商用を問わず、御自身で開発された以外のものについては、 このような扱いにしてください。 また、そのようなものの配布場所(リンク)を示すのは、ユーザーに有益です。
ドキュメント
パッケージ内には、プログラム(ソースまたは実行バイナリ)以外に、 次のような内容を記述したドキュメントを
"README"
というファイル名で入れておくのが一般的です。 雛型 も参照下さい。
- プログラムの名称・バージョン番号・製作者・製作日
- プログラムの動作内容
- 開発環境・動作確認済環境・必要環境
(OS・使用言語・必要ライブラリなど)- プログラムの実行のさせ方に関する説明
- (ソース配布なら)コンパイル方法
(バイナリ配布なら)インストール方法- コマンドラインオプション
- 環境設定ファイル
- 入出力データの書式
- サンプルデータ
- アルゴリズムに関する説明
- 製作者連絡先・最新版配布場所
また、目立たせたい、あるいは分量が多くなった等の理由で、 ドキュメントの一部を独立したファイルにする場合、 Unix 系でよくつけられるファイル名に以下のようなものがあります。
"INSTALL"
- 必要環境とコンパイル/インストール方法
"COPYING"
,"COPYRIGHT"
- 著作権表示
"ChangeLog"
,"CHANGES"
- 過去の更新記録
"TODO"
- 今後の予定/課題
なお、Unix 系では、ファイル名を表示させる時に、 大文字小文字を区別してアルファベット順にソートするのが一般的で、 「大文字ファイル→先頭大文字ファイル→小文字ファイル」 の順に表示されるので、重要なファイルを大文字あるいは先頭大文字に しておくことが習慣となっています。 (
"Makefile"
が先頭大文字なのも、同様の理由でしょう。) これら以外のファイル名でドキュメントを作る場合でも、 重要度に合わせて、例えば"Algorithm"
というファイル名を つけていただいたらよいと思います。ドキュメントのファイル形式
ドキュメントは、特殊な環境を前提とせずとも読める ファイル形式にしておくのが望ましいです。 この点からはテキスト (plain text) が良いわけですが、 テキストでは数式や図は含めにくいのも事実です。 テキストで問題なく書ける部分はテキストで書き、 数式や図の必要となる部分は LaTeX/dvi/PS/PDF などで別のファイルに記述するなど、 工夫をしていただくのがよいと思います。
なお、研究者の世界では LaTeX のドキュメントソースを 配布しないのが習慣となっているようですが、 フリーソフトと呼ばれるものの世界では、 (LaTeX に限らず)ドキュメントソースを公開することも多くあります。
現在配布されているフリーソフトは、 GPL に従って配布されているものが多数を占めています。 GPL では、製作者以外の人がソフトを変更して再び配布する権利を確保するため、 ソースコードの公開を配布者に義務付けています。 このことが、ドキュメントソースまで公開する習慣に影響を与えているように思います。 参考までに申し添えておきます。
環境
ユーザが、自分の環境で動くプログラムかどうかを調べるための 目安となる情報として、次のような環境があります。
- 開発環境
- 細部までの動作実績がある。
(OSとコンパイラの名称とバージョン番号 − gcc では'gcc -v'
でバージョンが表示される)- 動作確認環境(省略可)
- 一通り動作するが、開発環境よりは信頼性が劣る。
★動作確認テストはこちらでも協力いたしますので、お申し出下さい。 Win95/98, SUN Solaris(2.5, 2.5.1), FreeBSD, Linux のテストができます。- 必要環境
- 製作者が動くと思っている環境。動作実績はない。
(OSと言語の名称)具体的には 「開発環境 SUN Solaris 2.5, gcc 2.7.2.3、必要環境 Cコンパイラ汎用」とか 「開発環境 Win98、必要環境 Win95/98/NT」 などと書いていただくことになります。
最新版配布場所
最新版のプログラムの配布場所は、 製作者自身の web/anonymous ftp にしたいと思います。
コンピュータ環境の都合等で、 データベースで最新版を配布される場合は、
http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/package/
にて公開することにします。著作権と使用条件
国内法では著作権は放棄できないそうなので、 著作権の主張はしていただくことになります。
使用条件は、個別に検討していただくことですが、 一般には「無料で無保証、改造と商用利用は要相談」 ぐらいのことを書くのが無難でしょうか。
<追記>文部省からは、特に著作権についての条件はないそうなので、 だいたい上記のような条件で配布していただけると、 統一されてよいと思います。
なお、他人のソースを改造したり、使用しているライブラリ等の利用条件によっては、 配布条件が制約される場合があります。 特に、GPL のソース組み込んだものは GPL に従って配布する必要があるので、注意が必要です。
投稿
基本的には、開発者自身の web/ftp でプログラムパッケージを公開していただくことにして、 データベースからは、そこへのリンクだけにとどめておきます。
プロジェクト終了時点には、 データベースに一括してパッケージをコピーしたいと思います。 これは、コピーしたパッケージ自体は旧版である可能性もありながらも、 リンク切れが起こったときの保険にするのが目的です。 パッケージのさらなる改良は、 コピーとは無関係に続けていただければよいと思います。
バージョンアップ
データベースからは、最新版パッケージ置場のリンクを張らせていただきますので、 いつパッケージのバージョンアップをされても構いません。
古いパッケージを保存するか、あるいは消去してしまうか、 すべて開発者におまかせいたします。