Mercurial > hg > Papers > 2015 > nozomi-prosym
changeset 7:7cb463761b4e
fora parusu check
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 30 Nov 2015 16:43:47 +0900 |
parents | a04f0d8b19a1 |
children | c3c01167cff9 |
files | paper-last/.prosym.tex.swp paper-last/prosym.aux paper-last/prosym.bbl paper-last/prosym.blg paper-last/prosym.dvi paper-last/prosym.log paper-last/prosym.pdf paper-last/prosym.tex |
diffstat | 8 files changed, 82 insertions(+), 90 deletions(-) [+] |
line wrap: on
line diff
--- a/paper-last/prosym.aux Mon Nov 30 05:40:06 2015 +0900 +++ b/paper-last/prosym.aux Mon Nov 30 16:43:47 2015 +0900 @@ -9,17 +9,15 @@ \@writefile{toc}{\contentsline {subsection}{\numberline {2.2}{DataSegmentManager}}{2}} \newlabel{fig:RemoteDSM}{{2}{2}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.3}{Data Segment API}}{2}} -\citation{MessagePack} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}{Data Segmentの表現}}{3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}{Code Segmentの記述方法}}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}{Code Segmentの記述方法}}{3}} \newlabel{src:StartCodeSegment}{{1}{3}} \@writefile{lol}{\contentsline {lstlisting}{\numberline {1}StartCodeSegmentの例}{3}} \newlabel{src:CodeSegment}{{2}{3}} \@writefile{lol}{\contentsline {lstlisting}{\numberline {2}CodeSegmentの例}{3}} \citation{dot} \@writefile{toc}{\contentsline {section}{\numberline {3}\hskip 1zw{Meta Computation}}{4}} -\newlabel{src:topologyfile}{{3}{5}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3}トポロジーファイルの例}{5}} +\newlabel{src:topologyfile}{{3}{4}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {3}トポロジーファイルの例}{4}} \newlabel{fig:topologymanager}{{3}{5}} \citation{tightVNC} \newlabel{fig:topfix1}{{4}{6}} @@ -28,6 +26,7 @@ \newlabel{src:closedEvent}{{4}{6}} \@writefile{lol}{\contentsline {lstlisting}{\numberline {4}切断時に実行されるCSの登録方法}{6}} \@writefile{toc}{\contentsline {section}{\numberline {4}\hskip 1zw{AliceVNC}}{6}} +\citation{MessagePack} \newlabel{fig:TreeVNC}{{7}{7}} \@writefile{toc}{\contentsline {section}{\numberline {5}\hskip 1zw{Aliceの新機能}}{7}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1}{転送機能}}{7}} @@ -40,34 +39,34 @@ \@writefile{lol}{\contentsline {lstlisting}{\numberline {7}圧縮したDSを扱うCSの例}{8}} \newlabel{src:asClass}{{8}{8}} \@writefile{lol}{\contentsline {lstlisting}{\numberline {8}asClassの処理}{8}} -\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}{Aliceの通信プロトコルの変更}}{8}} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}{Aliceの通信プロトコルの変更}}{9}} \@writefile{toc}{\contentsline {section}{\numberline {6}\hskip 1zw{評価と考察}}{9}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1}{メッセージ伝達速度の比較}}{9}} \newlabel{fig:mesure}{{8}{9}} \newlabel{tb:mesure}{{1}{9}} \newlabel{src:Mesurement}{{9}{10}} \@writefile{lol}{\contentsline {lstlisting}{\numberline {9}到達時間・木の段数の計測方法}{10}} -\newlabel{fig:TreeVNC_delay}{{9}{10}} -\newlabel{fig:AliceVNC_notcompress_delay}{{10}{10}} -\newlabel{fig:AliceVNC_compress_delay}{{11}{10}} \citation{complaxy} -\citation{Erlang} +\newlabel{fig:TreeVNC_delay}{{9}{11}} +\newlabel{fig:AliceVNC_notcompress_delay}{{10}{11}} +\newlabel{fig:AliceVNC_compress_delay}{{11}{11}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2}{コードの比較}}{11}} \newlabel{tb:code}{{2}{11}} -\newlabel{tb:complex}{{3}{11}} -\@writefile{toc}{\contentsline {subsection}{\numberline {6.3}{他言語・フレームワークとの比較}}{11}} +\citation{Erlang} \citation{Akka} -\@writefile{toc}{\contentsline {section}{\numberline {7}\hskip 1zw{まとめ}}{12}} +\newlabel{tb:complex}{{3}{12}} +\@writefile{toc}{\contentsline {subsection}{\numberline {6.3}{他言語・フレームワークとの比較}}{12}} \citation{*} \bibstyle{ipsjunsrt} \bibdata{prosym} \bibcite{senkokenkyu}{1} \bibcite{treeVNC}{2} -\bibcite{MessagePack}{3} -\bibcite{dot}{4} -\bibcite{tightVNC}{5} +\bibcite{dot}{3} +\bibcite{tightVNC}{4} +\@writefile{toc}{\contentsline {section}{\numberline {7}\hskip 1zw{まとめ}}{13}} +\newlabel{fig:overNAT}{{12}{13}} +\bibcite{MessagePack}{5} \bibcite{complaxy}{6} \bibcite{Erlang}{7} \bibcite{Akka}{8} -\newlabel{fig:overNAT}{{12}{13}} -\newlabel{ipsj@lastpage}{{}{13}} +\newlabel{ipsj@lastpage}{{}{14}}
--- a/paper-last/prosym.bbl Mon Nov 30 05:40:06 2015 +0900 +++ b/paper-last/prosym.bbl Mon Nov 30 16:43:47 2015 +0900 @@ -9,15 +9,15 @@ 授業やゼミ向けの画面配信システムTreeVNCの拡張機能,琉球大学工学部情報工学科平成26年度学位論文(学士) (2014). -\bibitem{MessagePack} -: MessagePack, \url{http://msgpack.org/}. - \bibitem{dot} : . \bibitem{tightVNC} : {TightVNC Software}, \url{http://www.tightvnc.com}. +\bibitem{MessagePack} +: MessagePack, \url{http://msgpack.org/}. + \bibitem{complaxy} : .
--- a/paper-last/prosym.blg Mon Nov 30 05:40:06 2015 +0900 +++ b/paper-last/prosym.blg Mon Nov 30 16:43:47 2015 +0900 @@ -7,7 +7,6 @@ Warning--Missing required argument pages in senkokenkyu Warning--there's no number and/or volumetreeVNC Warning--Missing required argument pages in treeVNC -Warning--Missing required argument author in MessagePack Warning--Missing required argument author in dot Warning--Missing required argument title in dot Warning--Missing required argument journal in dot @@ -15,6 +14,7 @@ Warning--there's no number and/or volumedot Warning--Missing required argument pages in dot Warning--Missing required argument author in tightVNC +Warning--Missing required argument author in MessagePack Warning--Missing required argument author in complaxy Warning--Missing required argument title in complaxy Warning--Missing required argument journal in complaxy
--- a/paper-last/prosym.log Mon Nov 30 05:40:06 2015 +0900 +++ b/paper-last/prosym.log Mon Nov 30 16:43:47 2015 +0900 @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.1415926-p3.4-110825-2.6 (utf8.euc) (TeX Live 2013) (format=platex 2014.4.14) 30 NOV 2015 05:39 +This is e-pTeX, Version 3.1415926-p3.4-110825-2.6 (utf8.euc) (TeX Live 2013) (format=platex 2014.4.14) 30 NOV 2015 16:42 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -190,9 +190,9 @@ LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <11.82813> not available (Font) Font shape `JY1/gt/m/n' tried instead on input line 53. LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <9.61035> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 69. +(Font) Font shape `JT1/gt/m/n' tried instead on input line 70. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <9.61035> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 69. +(Font) Font shape `JY1/gt/m/n' tried instead on input line 70. [1 @@ -200,27 +200,27 @@ File: images/dsandcs2.pdf Graphic file (type pdf) <images/dsandcs2.pdf> LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <8.13184> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 79. +(Font) Font shape `JT1/gt/m/n' tried instead on input line 80. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <8.13184> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 79. +(Font) Font shape `JY1/gt/m/n' tried instead on input line 80. File: images/remote_datasegment.pdf Graphic file (type pdf) <images/remote_datasegment.pdf> -Underfull \hbox (badness 10000) in paragraph at lines 111--112 +Underfull \hbox (badness 10000) in paragraph at lines 113--114 []\OT1/cmtt/m/n/9.61035 void put(String managerKey, String [] -Underfull \hbox (badness 10000) in paragraph at lines 115--116 +Underfull \hbox (badness 10000) in paragraph at lines 117--118 []\OT1/cmtt/m/n/9.61035 void update(String managerKey, String [] -Underfull \hbox (badness 10000) in paragraph at lines 120--121 +Underfull \hbox (badness 10000) in paragraph at lines 122--123 []\OT1/cmtt/m/n/9.61035 void take(String managerKey, String [] [2] -Underfull \hbox (badness 10000) in paragraph at lines 125--126 +Underfull \hbox (badness 10000) in paragraph at lines 127--128 []\OT1/cmtt/m/n/9.61035 void peek(String managerKey, String [] @@ -234,7 +234,7 @@ (Font) Font shape `OMS/cmsy/m/n' tried instead on input line 1. ) (./source/TestCodeSegment.java) [3] -Overfull \hbox (24.42479pt too wide) in paragraph at lines 179--180 +Overfull \hbox (24.42479pt too wide) in paragraph at lines 171--172 []\OT1/cmtt/m/n/9.61035 void setKey(String managerKey, String key) [] @@ -261,29 +261,23 @@ (./source/RegisterEvent.java) [6] File: images/TreeVNC.pdf Graphic file (type pdf) <images/TreeVNC.pdf> -Overfull \hbox (21.64644pt too wide) in paragraph at lines 298--299 +Overfull \hbox (21.64644pt too wide) in paragraph at lines 290--291 [] [] [7] (./source/ReceiveData.java) (./source/beforeCompress.java) -(./source/afterCompress.java) -Underfull \hbox (badness 6658) in paragraph at lines 363--369 -[]\JY1/mc/m/n/9.61035 画面表示の際は \OT1/cmr/m/n/9.61035 Re-ceive-Data.class \ -JY1/mc/m/n/9.61035 内の - [] - -(./source/asClass.java) [8] +(./source/afterCompress.java) (./source/asClass.java) [8] File: images/delay.pdf Graphic file (type pdf) <images/delay.pdf> -Overfull \hbox (14.02144pt too wide) in paragraph at lines 417--428 +Overfull \hbox (14.02144pt too wide) in paragraph at lines 414--425 [] [] -LaTeX Warning: Reference `src:mesurement' on page 9 undefined on input line 434 +LaTeX Warning: Reference `src:mesurement' on page 9 undefined on input line 431 . -[9] (./source/mesurement.java) +[9] (./source/mesurement.java) [10] File: images/TreeVNC_depth3.pdf Graphic file (type pdf) <images/TreeVNC_depth3.pdf> File: images/AliceVNC_notcompress_depth3.pdf Graphic file (type pdf) @@ -291,34 +285,36 @@ <images/AliceVNC_notcompress_depth3.pdf> File: images/AliceVNC_compress_depth3.pdf Graphic file (type pdf) <images/AliceVNC_compress_depth3.pdf> -[10] -Underfull \hbox (badness 10000) in paragraph at lines 528--530 +[11] +Underfull \hbox (badness 10000) in paragraph at lines 525--527 []\OT1/cmr/m/n/9.61035 TreeVNC \JY1/mc/m/n/9.61035 で最高値を出した \OT1/cmr/m/ n/9.61035 TreeRF- [] -Underfull \hbox (badness 4899) in paragraph at lines 531--532 +Underfull \hbox (badness 4899) in paragraph at lines 528--529 []\OT1/cmr/m/n/9.61035 AliceVNC \JY1/mc/m/n/9.61035 で複雑度の最高値を出した [] -Underfull \hbox (badness 10000) in paragraph at lines 531--532 +Underfull \hbox (badness 10000) in paragraph at lines 528--529 \OT1/cmr/m/n/9.61035 SwingView-er-Win-dow.class \JY1/mc/m/n/9.61035 は \OT1/cmr /m/n/9.61035 TightVNC \JY1/mc/m/n/9.61035 で [] -[11] +[12] File: images/overNAT.pdf Graphic file (type pdf) <images/overNAT.pdf> -Overfull \hbox (7.42006pt too wide) in paragraph at lines 600--601 +Overfull \hbox (7.42006pt too wide) in paragraph at lines 597--598 [] [] LaTeX Warning: `h' float specifier changed to `ht'. -[12] (./prosym.bbl) [13] (./prosym.aux) +(./prosym.bbl [13]) [14 + +] (./prosym.aux) LaTeX Warning: There were undefined references. @@ -326,10 +322,10 @@ Here is how much of TeX's memory you used: 3001 strings out of 494008 42312 string characters out of 6154472 - 198596 words of memory out of 5000000 + 197596 words of memory out of 5000000 6417 multiletter control sequences out of 15000+600000 27514 words of font info for 115 fonts, out of 8000000 for 9000 745 hyphenation exceptions out of 8191 30i,9n,40p,280b,1426s stack positions out of 5000i,500n,10000p,200000b,80000s -Output written on prosym.dvi (13 pages, 83276 bytes). +Output written on prosym.dvi (14 pages, 83000 bytes).
--- a/paper-last/prosym.tex Mon Nov 30 05:40:06 2015 +0900 +++ b/paper-last/prosym.tex Mon Nov 30 16:43:47 2015 +0900 @@ -60,7 +60,8 @@ プログラマはコアな仕様の変更を抑えつつプログラムの挙動変更ができるため、信頼性の高い分散アプリケーションの記述が可能となる。 先行研究 \cite{senkokenkyu} の水族館の例題等において、Aliceが分散プログラムを記述する能力を有することは確認された。 -しかし、実用的な分散アプリケーションを作成するためには、動的トポロジーを管理・構成する機能や通信時にData Segmentを圧縮形式で扱う機能が必要な場合がある。 +しかし、実用的な分散アプリケーションを作成するためには、Data Segmentをそのまま転送する機能や通信時にData Segmentを圧縮形式で扱う機能が必要な場合がある。 + 本研究では、Alice上に実用的な分散アプリケーションの例題である画面共有システムTreeVNC \cite{treeVNC} を構築する。 構築するにあたり必要となった圧縮などの機能を、AliceのMeta Computationとして実装する。 そして Alice を使用していないTreeVNCとの比較を行うことでMeta Computationの役割と有効性を示す。 @@ -80,7 +81,7 @@ \label{fig:CS} \end{figure} -実際にはAliceはJavaで実装されており、DSはJavaObjectでCSはRunnableThreadである。プログラマーがCSを記述する際は、CodeSegmentクラスを継承し、DSを操作するAPIを使用する。 +実際にはAliceはJavaで実装されており、DSはJavaObjectでCSはRunnableThreadである。プログラマがCSを記述する際は、CodeSegmentクラスを継承し、DSを操作するAPIを使用する。 \subsection{DataSegmentManager} DSは数値や文字列などの基本的なデータの集まりを指し、Aliceが内部にもつデータベースによって管理されている。このデータベースをAliceではDS Manager(以下DSM)と呼ぶ。 @@ -91,8 +92,9 @@ DSMにはLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のデータベースである。 Remote DSMは他ノードのLocal DSMに対応するproxyであり、接続しているノードの数だけ存在する(図 \ref{fig:RemoteDSM} )。 他ノードのLocal DSMに書き込みたい場合はRemote DSMに対して書き込めば良い。 -Remote DSMを立ち上げるには、DataSegment.classが提供するconnectメソッドを用いる。 -接続したいノードのipアドレスとport番号、そして任意のManager名を指定することで立ちあげられる。その後はManager名を指定してData Segment APIを用いてDSのやり取りを行う。 +Remote DSMを立ち上げるには、DataSegmentクラスが提供するconnectメソッドを用いる。 +接続したいノードのipアドレスとport番号、そして任意のManager名を指定することで立ちあげられる。その後はManager名を指定してData Segment APIを用いてDSのやり取りを行うため、プログラマはManager名さえ意識すればLocalへの操作もRemoteへの操作も同じ様に扱える。 + \begin{figure}[h] \begin{center} \includegraphics[width=70mm]{images/remote_datasegment.pdf} @@ -126,19 +128,9 @@ \end{itemize} peekもDSを読み込むAPIである。takeとの違いは読み込まれたDSが削除されないことである。 -\subsection{Data Segmentの表現} - -DSの表現にはMessagePack for Java \cite{MessagePack} を利用している。 -\begin{itemize} -\item {\ttfamily DSは一般的なJavaのクラスオブジェクト} -\item {\ttfamily MessagePackを用いて変換したbyte[]で表現されたバイナリオブジェクト} -\end{itemize} -の2種類があり、LocalDSMにputされた場合は一般的なJavaのクラスオブジェクトとして追加される。 -RemoteDSMにputされた場合は通信時にbyteArrayに変換されたバイナリオブジェクトが追加される。 - \subsection{Code Segmentの記述方法} -CSをユーザーが記述する際にはCodeSegment.classを継承して記述する(ソースコード \ref{src:StartCodeSegment} , \ref{src:CodeSegment})。 +CSをユーザーが記述する際にはCodeSegmentクラスを継承して記述する(ソースコード \ref{src:StartCodeSegment} , \ref{src:CodeSegment})。 継承することによりCode Segmentで使用するData Segment APIを利用する事ができる。 \begin{table}[html] @@ -196,9 +188,9 @@ それに対して、AliceのMeta Computation は、Remoteノードとの通信時のトポロジーの構成や切断・再接続の処理と言える。 つまりトポロジーの構成はAliceのComputationを支えているComputationとみなすことができる。 -Aliceの機能を追加するということはプログラマー側が使うMeta Computationを追加すると言い換えられる。 -AliceではMeta Computationとして分散環境の構築等の機能を提供するため、プログラマーはCSを記述する際にトポロジー構成や切断、再接続という状況を予め想定した処理にする必要はない。 -プログラマーは目的の処理だけ記述し、切断や再接続が起こった場合の処理をMeta Computationとして指定する。 +Aliceの機能を追加するということはプログラマ側が使うMeta Computationを追加すると言い換えられる。 +AliceではMeta Computationとして分散環境の構築等の機能を提供するため、プログラマはCSを記述する際にトポロジー構成や切断、再接続という状況を予め想定した処理にする必要はない。 +プログラマは目的の処理だけ記述し、切断や再接続が起こった場合の処理をMeta Computationとして指定する。 このようにプログラムすることで、通常処理と例外処理を分離することができるため、仕様の変更を抑えたシンプルなプログラムを記述できる。 現在Aliceには、動的・静的トポロジーの管理構成機能、ノードとの接続状態確認機能、切断・再接続時の処理を指定できる機能など、分散環境の実現に必要なさまざまなMeta Computationが用意されている。 @@ -206,7 +198,7 @@ \textbf{Topology Manager} Aliceでは、ノード間の接続管理やトポロジーの構成管理を、Topology ManagerというMetaComputationが提供している。このTopology ManagerもCS/DSを用いて実装されている。 -プログラマーはトポロジーファイルを用意し、Topology Managerに読み込ませるだけでトポロジーを構成することができる。 +プログラマはトポロジーファイルを用意し、Topology Managerに読み込ませるだけでトポロジーを構成することができる。 トポロジーファイルはDOT Language\cite{dot}という言語で記述される。 DOT Languageとは、プレーンテキストを用いてデータ構造としてのグラフを表現するためのデータ記述言語の一つである。 ソースコード\ref{src:topologyfile}は3台のノードでリングトポロジーを組むときのトポロジーファイルの例である。 @@ -275,7 +267,7 @@ MMORPGでは、試合の最中にサーバーからユーザーが切断された場合、自動的にユーザーが操作するキャラクターをゲームの開始時の位置に戻すという処理が実行される。 同様に、Aliceを用いたアプリケーションでもノードの切断時に対する処理を用意したい場合がある。 -そこで、Aliceが切断を検知した際に任意のCSを実行できる機能(ClosedEventManager)を追加した。プログラマーは切断の際に実行したいCSを書き、ClosedEventManagerに登録しておけば良い(ソースコード\ref{src:closedEvent})。 +そこで、Aliceが切断を検知した際に任意のCSを実行できる機能(ClosedEventManager)を追加した。プログラマは切断の際に実行したいCSを書き、ClosedEventManagerに登録しておけば良い(ソースコード\ref{src:closedEvent})。 \begin{table}[html] \lstinputlisting[label=src:closedEvent, caption=切断時に実行されるCSの登録方法]{source/RegisterEvent.java} \end{table} @@ -308,7 +300,7 @@ \section{Aliceの新機能} 実用的なアプリケーションであるTreeVNCをAlice上で実装することで、Aliceに必要なMeta Computationを洗い出した。 \subsection{転送機能} -Input DSをRecieverに取得したあと、プログラマーはRecieverから値を任意の型で取り出し、値を操作した後putメソッドで再度別クラスに変換されOutput DSとして出力する。 +Input DSをRecieverに取得したあと、プログラマはRecieverから値を任意の型で取り出し、値を操作した後putメソッドで再度別クラスに変換されOutput DSとして出力する。 しかし、Input DSとして取得したデータ形式のまま子ノードにOutput DSとして出力する場合、一度Recieverから取り出し再変換する操作は無駄である。 そこで、Input DSとして受け取ったDSをそのままOutput DSとして転送する機能をput/updateとは別にflipメソッドをData Segment APIに実装した。 @@ -325,17 +317,23 @@ しかし、受け取ったデータを自分の子ノードに対して送信する際には、解凍する必要はない。 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。 -そこで、1つのData Segmentに対し複数の表現を持たせることで、必要に応じた形式でDSを扱うことを可能にした。 -DSを扱うReceiveData.classに、次の3種類の表現を同時に持つことができるようにしたことで、データの多態性を実現した。 +そこで、1つのData Segmentに対し複数の表現を持たせ、必要に応じた形式でDSを扱うことを可能にした。 +DSのMeta Computationに相当するReceiveDataクラスに、次の3種類の表現を同時に持つことができるようにしたことで、データの多態性を実現した。 \begin{enumerate} \item 一般的なJavaのクラスオブジェクト - \item MessagePack for Javaでシリアライズ化されたバイナリオブジェクト + \item MessagePack for Java\cite{MessagePack}でシリアライズ化されたバイナリオブジェクト \item 2を圧縮したバイナリオブジェクト \end{enumerate} -ソースコード \ref{src:ReceiveData} はReceiveData.classが持つ表現であり、{\tt val}に(1) 一般的なJavaのクラスオブジェクト の表現でデータ本体が保存される。 -{\tt messagePack}には(2) シリアライズ化されたバイナリオブジェクトが保存され、通常のRemoteDSMへの通信にこの表現が扱われる。 +LocalDSMにputされた場合は、(1)の一般的なJavaクラスオブジェクトとして追加される。 +RemoteDSMにputされた場合は、通信時に(2)のbyteArrayに変換されたバイナリオブジェクトに変換されたDSが追加される。 +この2つの形式は従来のAliceが持っていた表現である。 +今回、RemoteDSMに圧縮形式での通信を行いたいため、(3)の圧縮表現を追加した。 + +ソースコード \ref{src:ReceiveData} はReceiveData.classが持つ表現である。 +{\tt val}に(1) 一般的なJavaのクラスオブジェクト の表現でデータ本体が保存される。 +{\tt messagePack}には(2) シリアライズ化されたバイナリオブジェクトが保存される。 そして、{\tt zMessagePack}には(3) 圧縮されたバイナリオブジェクトが保存される。 \begin{table}[html] @@ -360,11 +358,11 @@ ノードは圧縮されたDSを受け取った後、そのまま子ノードにflipメソッドで転送すれば圧縮状態のまま送信されるので、送信の際の再圧縮がなくなる。 -画面表示の際はReceiveData.class内の{\tt asClass()}(ソースコード\ref {src:asClass} )を使うことで適切な形式でデータを取得できる。 -{\tt asClass()}はDSを目的の型にcastするメソッドである。 +画面表示の際はReceiveData.class内のasClassメソッド(ソースコード\ref {src:asClass} )を使うことで適切な形式でデータを取得できる。 +asClassメソッドはDSを目的の型にcastするためのメソッドである。 AliceVNCで圧縮形式を指定してDSを送信すると、それを受け取るDSMは圧縮形式のみを持ったDSとして保存する。 -そして{\tt asClass()}が呼ばれて初めて、メソッド内で解凍してcastが行われDSが複数の表現を同時に持つようになる。 -これによりDSの表現を必要になったときに作成できるため、プログラマーはどんな形式でDSを受け取ってもこのメソッドを使うことによりDSを編集可能な形式として扱うことができる。 +そしてasClassメソッドが呼ばれて初めて、メソッド内で解凍してcastが行われDSが複数の表現を同時に持つようになる。 +これによりDSの表現を必要になったときに作成できるため、プログラマはどんな形式でDSを受け取ってもDSを編集可能な形式として扱うことができる。 また、複数表現は必要なときにしか作成されないため、メモリ使用量も必要最低限に抑えることができる。 @@ -373,11 +371,10 @@ \end{table} \subsection{Aliceの通信プロトコルの変更} -2.4 Data Segmentの表現で述べたように、Remoteからputされたデータは必ずシリアライズ化されておりbyteArrayで表現される。 -しかし、TreeVNCのようにもとからbyteArrayの画像データをputする場合、MessagePackでシリアライズされたものかの判別が付かない。 -また、データの表現に圧縮したbyteArrayを追加したため、RemoteからputされたbyteArrayが圧縮されているのかそうでないのかを判断する必要がある。 +5.2で述べたように、Remoteからputされたデータは必ずシリアライズ化されておりbyteArrayで表現される。 +しかし、データの表現に圧縮したbyteArrayを追加したため、RemoteからputされたbyteArrayが圧縮されているのかそうでないのかを判別がつかなくなった。 -そこで、Aliceの通信におけるヘッダにあたるCommandMessage.classにシリアライズ状態表すフラグと、圧縮状態を表すフラグを追加した。 +そこで、Aliceの通信におけるヘッダにあたるCommandMessage.classに圧縮状態を表すフラグを追加した。 これによってputされたDSMはフラグに応じた適切な形式でReceiveData.class内にDSを格納できる。 また、CommandMessage.classに圧縮前のデータサイズも追加したことで、適切な解凍が可能になった。 @@ -525,8 +522,8 @@ プロジェクト全体でのクラスの複雑度の平均値と最高値をとった。 平均値・最高値ともにAliceVNCのほうが複雑度が低いことから、Aliceではシンプルな記述が可能だということがわかる。 -TreeVNCで最高値を出したTreeRFBProto.classは全てプログラマーが記述したコードであり、データの待ち合わせのためのタイマー処理や通信処理、画面データの圧縮処理などの複数のスレッド処理が集中した複雑なコードになっている。 -これをAliceで記述した場合、データの待ち合わせはCSが行うためプログラマーがデータの不整合を気にする必要はなく、また通信処理や圧縮処理もMeta Computationが提供するためコードが複雑になることはない。 +TreeVNCで最高値を出したTreeRFBProto.classは全てプログラマが記述したコードであり、データの待ち合わせのためのタイマー処理や通信処理、画面データの圧縮処理などの複数のスレッド処理が集中した複雑なコードになっている。 +これをAliceで記述した場合、データの待ち合わせはCSが行うためプログラマがデータの不整合を気にする必要はなく、また通信処理や圧縮処理もMeta Computationが提供するためコードが複雑になることはない。 AliceVNCで複雑度の最高値を出したSwingViewerWindow.classはTightVNCで最高値を出したクラスと同じであり、コード量の比較でも示したようにAliceVNCで変更を加えた点がほとんどない。つまりこの複雑度は元来TightVNCが持っている複雑度と言える。 @@ -560,7 +557,7 @@ タスクをプロセスという細かい単位に分割して並列に動かす点や、メモリロックの仕組みを必要としない点はAliceと同様である。 しかしErlangでは分散環境の構築等はすべてプログラマ自身が記述しなければならない。 -Aliceでは分散環境の構築はTopology ManagerなどのMeta Computationが行うためプログラマーはトポロジーを指定するだけで良い。 +Aliceでは分散環境の構築はTopology ManagerなどのMeta Computationが行うためプログラマはトポロジーを指定するだけで良い。 また、Erlangでは複数のデータの待ち合わせのための再帰処理も自分で書かないといけない。 一方、Aliceのプログラミング手法はCSが必要なデータが全て揃うまで待ち合わせを行うためその必要はない。 @@ -611,7 +608,7 @@ この機能も実現できれば、AliceのMeta Computationが拡張性の高い環境を提供できると言える。 また、現在のAliceはネットワーク通信においてセキュリティをサポートしていない。 -しかし、圧縮機能と同様に、暗号化形式を扱うMeta Computationを追加すれば、プログラマーが記述するComputation部分を大きく変えずに自由度の高い通信を行うことができる。 +しかし、圧縮機能と同様に、暗号化形式を扱うMeta Computationを追加すれば、プログラマが記述するComputation部分を大きく変えずに自由度の高い通信を行うことができる。