=================================================================== RCS file: /home/cvs/OpenXM/doc/Attic/genkou19991125.tex,v retrieving revision 1.29 retrieving revision 1.30 diff -u -p -r1.29 -r1.30 --- OpenXM/doc/Attic/genkou19991125.tex 1999/12/20 19:02:02 1.29 +++ OpenXM/doc/Attic/genkou19991125.tex 1999/12/21 06:59:42 1.30 @@ -1,226 +1,244 @@ \documentclass{jarticle} -\title{\bf Open XM($B%?%$%H%kL$Dj(B)} +\title{タイトル未定} \author{ -%Maekawa, Masahide (Oct., 1999 -- : CVS server) \\ -$BA0@n(B $B$^$5$R$G(B, -%$B",4A;zD4$YCf!#(B commit $B8+$?$i65$($F$M!#$I$&$;L@F|J9$1$k$1$I!#(B -%Noro, Masayuki (Jan., 1996 -- : OpenXM Protocol, asir99) \\ -$BLnO$(B $B@59T(B, -%Ohara, Katsuyoshi (Jan., 1998 -- : ox\_math) \\ -$B>.86(B $B8yG$(B, \\ -%Okutani, Yukio (Oct., 1999 -- : asir contrib) \\ -$B1|C+(B $B9,IW(B, -%Takayama, Nobuki (Jan., 1996 -- : OpenXM Protocol, kan) \\ -$B9b;3(B $B?.5#(B, -%Tamura, Yasushi (Nov., 1998 -- : OpenMath proxy) \\ -$BEDB<(B $B63;N(B +前川 まさひで, +野呂 正行, +小原 功任, \\ +奥谷 幸夫, +高山 信毅, +田村 恭士 } -\date{1999$BG/(B11$B7n(B25$BF|(B} - +\date{1999年11月25日} %\pagestyle{empty} \begin{document} \maketitle -\section{OpenXM $B$N7W;;%b%G%k(B} +\section{OpenXMとは} -OpenXM $B$O?t3X%=%U%H4V$G%a%C%;!<%8$r8r49$9$k$?$a$N5,Ls$G$"$k!#(B -$B?t3XE*$J%G!<%?$r4^$s$@%a%C%;!<%8$J$I$rMQ$$$F(B -$B?t3X%=%U%H4V$G%a%C%;!<%8$r$d$j$H$j$5$;$k$3$H$K$h$j!"(B -$B$"$k?t3X%=%U%H$+$iB>$N?t3X%=%U%H$r8F$S=P$7$F7W;;$r9T$J$C$?$j!"(B -$BB>$N%^%7%s$G7W;;$r9T$J$o$;$?$j$9$k$3$H$,L\E*$G$"$k!#(B -$BH/C<$OLnO$@59T$H9b;3?.5#$K$h$j!"(B asir $B$H(B kan/sm1 $B$r(B -$BAj8_$K8F$S=P$95!G=$r$N?t3X%=%U%H$r;H$($k$h$&$K$9$k$3$H$G$"$k!#(B -$B$J$*!"(B OpenXM $B$H$O(B Open message eXchange protocol for Mathematics $B$N(B -$BN,$G$"$k!#(B +OpenXM は数学プロセス間でメッセージを交換するための規約である。数学プロ +セス間でメッセージをやりとりさせることにより、ある数学プロセスから他の数 +学プロセスを呼び出して計算を行なったり、他のマシンで計算を行なわせたりす +ることが目的である。なお、 OpenXM とは Open message eXchange protocol +for Mathematics の略である。 -$BH/C<$H$J$C$?(B asir $B$H(B kan/sm1 $B$G$N$N7A<0$r$b(B -$B07$($k$h$&$K$7$F$"$k!#(B -$B$J$*!"8=:_$N(B OpenXM $B5,Ls$G$O!"(B -$BA0=R$N%3%^%s%IJ8;zNs$b(B CMO $B7A<0$J$I$N2?$i$+$N%G!<%?7A<0$NCf$N(B -$BJ8;zNs$H$7$FI=8=$7$FAw$kI,MW$,$"$k!#(B +OpenXM の開発の発端は野呂正行と高山信毅により、 asir と kan/sm1 を +相互に呼び出す機能を実装したことである。 +\footnote{この段落必要?} +発端となった asir と kan/sm1 での実装時には、 +お互いに相手側のコマンド文字列を送っていた。 +この方法は現在の OpenXM 規約でも形を変えて可能ではあるが、 +使いやすい反面、効率的であるとはいい難い。 +さらに、この方法では相手側のソフトが asir なのか kan/sm1 なのかを +判別して、相手側に合わせてコマンド文字列を作成する必要がある。 -OpenXM $B5,Ls$G$N%a%C%;!<%8$N8r49$O%5!<%P$H%/%i%$%"%s%H$N4V$G9T$J$o$l$k!#(B -$B%5!<%P$O%9%?%C%/%^%7%s$G$"$k$H2>Dj$5$l$F$*$j!"(B -$B%5!<%P$,%/%i%$%"%s%H$+$i$lFHN)$K7h$a$i$l$k$h$&$K$J$C$F$$$k!#(B -$B$b$7!"(B OpenXM $B5,Ls$G%a%C%;!<%8$N$d$j$H$j$r9T$J$$$?$$$,!"(B -$B$^$@5,Ls$GDj5A$5$l$F$$$J$$%G!<%?7A<0$r;H$$$?$$>l9g$O!"(B -tag $B$r$^$@;H$o$l$F$J$5$=$&$JCM(B -($B%7%9%F%`8GM-$NI=8=$N$?$a$K?d>)$5$l$F$$$kCM$,$"$k(B) -$B$K@_Dj$7!"(B body $B$NItJ,$K%G!<%?$rKd$a9~$a$P$h$$!#(B -$B$J$*!"$9$Y$F$N%a%C%;!<%8$K(B body $B$,I,MW$H$$$&$o$1$G$O$J$/!"(B -body $B$N$J$$%a%C%;!<%8$b(B OpenXM $B5,Ls$K$OB8:_$9$k$3$H$K(B -$BCm0U$7$J$1$l$P$J$i$J$$!#(B -$B%5!<%P$KBP$9$kF0:n$KBP1~$7$?%G!<%?$O(B SM $B7A<0$H$7$FDj5A$5$l$F$$$k!#(B -SM $B7A<00J30$N%G!<%?$G$O!"%5!<%P$Ol9g!"(B -$B%/%i%$%"%s%H$+$i%5!<%P$X7W;;$5$;$?$$%G!<%?$r%a%C%;!<%8$H$7$FAw$j!"(B -$B$=$7$F$=$N7k2L$r%5!<%P$+$i%a%C%;!<%8$Ge$2$F$$$/$@$1$G!"%5!<%P$O7W;;$r9T$J$*$&$H$O$7$J$$!#(B -$Bl9g!"(B -$B%5!<%P$OF0:n$N7k2L$r%9%?%C%/$K@Q$s$G$$$k!#(B -$B%5!<%P$K9T$J$o$;$?F0:n$N7k2L$r%/%i%$%"%s%H$,CN$j$?$$>l9g!"(B -$B%9%?%C%/$+$i%G!<%?$rl9g!"(B -CMO $B7A<0$GDj5A$5$l$F$$$kB?G\D9@0?t$rM}2r$7$F$*$/$H!"(B -CMO $B7A<0$NB>$N%G!<%?9=B$$@$1$G$J$/!"(B OX $B7A<0!"(B SM $B7A<0$N%G!<%?$r(B -$BM}2r$9$k=u$1$K$J$k$H;W$($k$N$G!"(B CMO $B7A<0$NB?G\D9@0?t$N(B -$B%G!<%?9=B$$K$D$$$F@bL@$9$k!#(B +OpenXM 間でやりとりされるメッセージを実際に作成する場合、 +CMO 形式で定義されている多倍長整数を理解しておくと、 +CMO 形式の他のデータ構造だけでなく、 OX 形式、 SM 形式のデータを +理解する助けになると思えるので、 CMO 形式の多倍長整数の +データ構造について説明する。 -CMO $B7A<0$GDj5A$5$l$F$$$k%G!<%?$OB?G\D9@0?t0J30$K$b(B -$BJ8;zNs$d%j%9%H9=B$$J$I$,$"$k!#$I$N$h$&$J%G!<%?$G$"$k$+$O(B -$B%G!<%?$N@hF,$K$"$k(B tag $B$r8+$l$PH=JL$G$-$k$h$&$K$J$C$F$$$k!#(B -$B$3$l$O%a%C%;!<%8$N%G!<%?$NH=JL$N;EJ}$H$*$J$8$G$"$k!#(B -$B$J$*!"(B tag $B$O3F%G!<%?Kh$K(B 32 bit $B$N@0?t$GI=$5$l$F$*$j!"(B -$BB?G\D9@0?t$O(B 20 $B$H$J$C$F$$$k!#(B -$B$3$3$G(B 32 bit $B$N@0?t$NI=8=J}K!$K$D$$$F@bL@$9$kI,MW$,$"$k!#(B -OpenXM $B$G$O%P%$%HNs$G(B 32 bit $B$N@0?t(B 20 $B$r(B -{\tt 00 00 00 14} $B$HI=$9J}K!$H(B {\tt 14 00 00 00} $B$HI=$9J}K!$,$"$k!#(B -$B$3$NI=8=J}K!$N0c$$$O%/%i%$%"%s%H$H%5!<%P$N:G=i$N@\B3;~$K(B -$BAPJ}$N9g0U$G7hDj$9$k$3$H$K$J$C$F$$$k!#(B -$B$J$*!"9g0U$,$J$$>l9g$K$O(B -$BA0l9g$N7e?t$r(B $n$ $B$H(B -$B$7$?$H$-!"l9g$N7e?t$H$H$C$F$b$h$$!#(B -$B$?$@$7!"I=8=$7$?$$?t$,Ii$N>l9g$O(B $[(n+31)/32]$ $B$r(B 32 bit $B$N@0?t$GI=$7$?CM$r(B - 2 $B$NJd?tI=8=$GIi$K$7$F!"@5$N>l9g$H6hJL$9$k!#(B +表現したい多倍長整数の絶対値を 2 進数で表した場合の桁数を $n$ と +したとき、次にくるデータは $[(n+31)/32]$ を 32 bit の整数となる。 +これは多倍長整数の絶対値を $2^{32}$ 進数で表した場合の桁数ととってもよい。 +ただし、表現したい数が負の場合は $[(n+31)/32]$ を 32 bit の整数で表した値を + 2 の補数表現で負にして、正の場合と区別する。 -$BI=8=$7$?$$B?G\D9@0?t$N@dBPCM$,(B $2^{32}$ $B?J?t$G(B $(b_0 b_1 ... b_k)_{2^{32}}$ -$B$HI=$;$k$H$-!"$l(B 32 bit $B$N@0?t$GI=8=$7$?CM$H$J$k!#(B -%$B0J2<$O=q$-D>$7$NI,MW$,$"$k$+$b(B... -$B$J$*!"(B GNU MP LIBRARY $B$rMQ$$$k$H!"(B -C $B8@8l$+$iB?G\D9@0?t$dG$0U@:EYIbF0>.?t$r07$&$3$H$,$G$-$k!#(B -$b_0$, $b_1$, $\cdots$, $b_k$ $B$r$=$l$>$l(B 32 bit $B@0?t$GI=8=$7$?CM$O(B -$B$3$N(B GNU MP LIBRARY $B$GMQ$$$i$l$F$$$kB?G\D9@0?t$G;H$o$l$F$$$k7A<0$r(B -$B;29M$K$7$F9g$o$;$F$"$k!#(B +表現したい多倍長整数の絶対値が $2^{32}$ 進数で $(b_0 b_1 ... b_k)_{2^{32}}$ +と表せるとき、次にくるデータは $b_0$, $b_1$, $\cdots$, $b_k$ を +それぞれ 32 bit の整数で表現した値となる。 +%以下は書き直しの必要があるかも... +なお、 GNU MP LIBRARY を用いると、 +C 言語から多倍長整数や任意精度浮動小数を扱うことができる。 +$b_0$, $b_1$, $\cdots$, $b_k$ をそれぞれ 32 bit 整数で表現した値は +この GNU MP LIBRARY で用いられている多倍長整数で使われている形式を +参考にして合わせてある。 -$B$3$3$G6qBNNc$r$@$=$&!#(B -$4294967298 = 1 \times 2^{32} + 2$ $B$r(B network byte order $B$NB?G\D9@0?t$G(B -$BI=8=$9$k$H!"(B +ここで具体例をだそう。 +$4294967298 = 1 \times 2^{32} + 2$ を network byte order の多倍長整数で +表現すると、 \begin{center} {\tt 00 00 00 14 00 00 00 02 00 00 00 02 00 00 00 01} \end{center} -$B$H$J$k!#$^$?!"F1$8I=8=J}K!$G(B $-1$ $B$rI=8=$9$k$H!"(B +となる。また、同じ表現方法で $-1$ を表現すると、 \begin{center} {\tt 00 00 00 14 ff ff ff ff 00 00 00 01} \end{center} -$B$H$J$k!#(B +となる。 -\section{MathCap $B$K$D$$$F(B} +\section{MathCap について} -$B%5!<%P$*$h$S%/%i%$%"%s%HAPJ}$H$b$K(B OpenXM $B$G5,Dj$5$l$F$$$k(B -$B%a%C%;!<%8$NCf$N%G!<%?7A<0$r$9$Y$FpJs$,F~$C$F$$$k!#(B -%$B$3$N:G=i$NMWAG$,$^$?%j%9%H9=B$$H$J$C$F$*$j!"(B -$B:G=i$NMWAG$O%P!<%8%g%s%J%s%P!<$r!"A0$rI=$7$F$$$k!#(B +この MathCap データのリスト構造は大きく分けて 3 つの部分に分かれる。 +最初の {\tt [199901160,"ox\_asir"]} の部分にはサーバの情報が入っている。 +%この最初の要素がまたリスト構造となっており、 +最初の要素はバージョンナンバーを、次の要素はサーバの名前を表している。 -$B$l$,0l$D$N%G!<%?7A<0$K$D$$$F$N>pJs$H$J$C$F$$$k!#(B -$B$I$N%G!<%?7A<0$K$D$$$F$N>pJs$+$O:G=i$NMWAG$K$"$k@0?tCM$r$_$l$P(B -$BJ,$+$k$h$&$K$J$C$F$$$k!#(B -$B$3$N@0?tCM$O(B CMO $B7A<0$G$O(B 514 $B$H$J$C$F$$$k!#(B -$B:G=i$N%G!<%?7A<0$r6hJL$9$k@0?tCM0J8e$NMWAG$O(B -$B3F%G!<%?7A<0$K$h$C$F$I$N$h$&$K;H$o$l$k$+Dj$^$C$F$$$k!#(B -CMO $B7A<0$G$OM}2r2DG=$J%G!<%?$N(B tag $B$,%j%9%H$NCf$K<}$^$C$F$$$k!#(B -$BA0@a$G(B CMO $B7A<0$G$OB?G\D9@0?t$rI=$9(B tag $B$,(B 20 $B$G$"$k$3$H$r=R$Y$?$,!"(B -$B$3$N%j%9%H$K(B 20 $B$,4^$^$l$F$$$k$N$G!"(B -ox\_asir $B$O(B CMO $B7A<0$NB?G\D9@0?t$re$NOC$G$"$C$F!"(B -$BM=4|$;$Ll9g$K$I$N$h$&$J;vBV$r(B -$B>7$/$+$OA[A|$7Fq$$!#(B +そこで、 OpenXM では侵入者に攻撃の機会を +できるだけ与えないようにしている。 +具体的には、接続が必要になった時のみ接続を待つようにし、 +常に接続に関与するといったことは避けている。 -$B$=$3$G!"(B OpenXM $B$G$O?/F~o$K@\B3$K4XM?$9$k$H$$$C$?$3$H$OHr$1$F$$$k!#(B +しかし、これだけでは侵入者が接続を行なう一瞬のすきを +狙ってくる可能性もある。 +そこで接続を行なう時に、 +接続を待つ port 番号をランダムに決めている。 +こうすることで、特定の port 番号を狙って接続を行なう +瞬間を待つ手口を幾らか防ぐことができる。 -$B$7$+$7!"$3$l$@$1$G$O?/F~Z$r9T$J$&!#(B -$B$3$N%Q%9%o!<%I$O0lC6;HMQ$5$l$l$PL58z$K$9$k$N$G!"(B -$B$b$72>$K$J$s$i$+$Ne5-$N(B port $BHV9f$H%Q%9%o!<%I$O0BA4$JDj$7$F$$$k!#(B -$B$^$?!"F10l$N%3%s%T%e!<%?>e$K0-0U$N$"$k%f!<%6$O$$$J$$$H2>Dj$7$F$$$k(B -$B$3$H$KCm0U$7$J$1$l$P$J$i$J$$!#(B -$B$J$<$J$i!"8=:_$Ne$G$O$3$N(B port $BHV9f$H%Q%9%o!<%I$,$o$+$C$F$7$^$&$?$a$G$"$k!#(B +なお、接続が確立した後のメッセージの送受信に関しては、 +特に暗号化などの処置が行なわれているわけではない。 +もし必要があれば、通信路の暗号化を行なう機能がある +ソフトウェアを使うことを考えている。 -$B$J$*!"@\B3$,3NN)$7$?8e$N%a%C%;!<%8$NAw$N%W%m%8%'%/%H(B} +他のプロジェクトについて幾つか紹介する。 -$BB>$N%W%m%8%'%/%H$K$D$$$F4v$D$+>R2p$9$k!#(B +OpenMath プロジェクトは数学的なオブジェクトを +コンピュータ上で表現する方法を決定している。 +各ソフトウェア間でオブジェクトを交換する際の +オブジェクトの変換手順についても述べられている。 +表現方法は一つだけでなく、 XML 表現や binary 表現などが +用意されている。 -OpenMath $B%W%m%8%'%/%H$O?t3XE*$J%*%V%8%'%/%H$r(B -$B%3%s%T%e!<%?>e$GI=8=$9$kJ}K!$r7hDj$7$F$$$k!#(B -$B3F%=%U%H%&%'%"4V$G%*%V%8%'%/%H$r8r49$9$k:]$N(B -$B%*%V%8%'%/%H$NJQ49$l(B ox\_asir, ox\_sm1, ox\_math $B$H$$$&L>A0$GDs6!$5$l$F$$$k!#(B -$B$^$?!"(B OpenMath $B5,3J$N(B XML $BI=8=$GI=8=$5$l$?%G!<%?$H(B CMO $B7A<0$N(B -$B%G!<%?$rJQ49$9$k%=%U%H%&%'%"$,(B JAVA $B$K$h$C$FA0$GDs6!$5$l$F$$$k!#(B +現在 OpenXM 規格に対応しているクライアントソフトウェアには +asir, sm1, Mathematica がある。 +これらのクライアントソフトウェアから +OpenXM 規格に対応したサーバを呼び出すことができる。 +現在 OpenXM 規約に対応しているサーバソフトウェアには、 + asir, sm1, gnuplot, Mathematica などがあり、 +それぞれ ox\_asir, ox\_sm1, ox\_math という名前で提供されている。 +また、 OpenMath 規格の XML 表現で表現されたデータと CMO 形式の +データを変換するソフトウェアが JAVA によって実装されており、 +OMproxy という名前で提供されている。 \end{document}