# HG changeset patch # User ichikitakahiro # Date 1581323902 -32400 # Node ID 59f9d24880053c38293f95d8eb031beea721e73d # Parent a7e83c3ed0cf94eb2885f7a1fb3a3a9109d20f84 add final main diff -r a7e83c3ed0cf -r 59f9d2488005 final_main/.DS_Store Binary file final_main/.DS_Store has changed diff -r a7e83c3ed0cf -r 59f9d2488005 final_main/chapter1/chapter1.log --- a/final_main/chapter1/chapter1.log Fri Feb 07 22:31:51 2020 +0900 +++ b/final_main/chapter1/chapter1.log Mon Feb 10 17:38:22 2020 +0900 @@ -0,0 +1,58 @@ +This is e-pTeX, Version 3.14159265-p3.8.2-190131-2.6 (utf8.euc) (TeX Live 2019) (preloaded format=platex 2019.10.15) 5 FEB 2020 23:16 +entering extended mode + restricted \write18 enabled. + file:line:error style messages enabled. + %&-line parsing enabled. +**chapter1.tex +(./chapter1.tex +pLaTeX2e <2019-10-01> (based on LaTeX2e <2019-10-01> patch level 1) +No file chapter1.aux. +\openout1 = `chapter1.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. + +./chapter1.tex:4: LaTeX Error: The font size command \normalsize is not defined +: + there is probably something wrong with the class file. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.4 \begin{document} + +? +./chapter1.tex:4: Emergency stop. + ... + +l.4 \begin{document} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + + +Here is how much of TeX's memory you used: + 7 strings out of 492763 + 295 string characters out of 6140193 + 63896 words of memory out of 5000000 + 4549 multiletter control sequences out of 15000+600000 + 7511 words of font info for 31 fonts, out of 8000000 for 9000 + 929 hyphenation exceptions out of 8191 + 9i,0n,6p,60b,30s stack positions out of 5000i,500n,10000p,200000b,80000s +No pages of output. diff -r a7e83c3ed0cf -r 59f9d2488005 final_main/chapter2/chapter2.log --- a/final_main/chapter2/chapter2.log Fri Feb 07 22:31:51 2020 +0900 +++ b/final_main/chapter2/chapter2.log Mon Feb 10 17:38:22 2020 +0900 @@ -0,0 +1,59 @@ +This is e-pTeX, Version 3.14159265-p3.8.2-190131-2.6 (utf8.euc) (TeX Live 2019) (preloaded format=platex 2019.10.15) 6 FEB 2020 00:25 +entering extended mode + restricted \write18 enabled. + file:line:error style messages enabled. + %&-line parsing enabled. +**chapter2.tex +(./chapter2.tex +pLaTeX2e <2019-10-01> (based on LaTeX2e <2019-10-01> patch level 1) +(./chapter2.aux) +\openout1 = `chapter2.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. +LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 4. +LaTeX Font Info: ... okay on input line 4. + + +./chapter2.tex:4: LaTeX Error: The font size command \normalsize is not defined +: + there is probably something wrong with the class file. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.4 \begin{document} + +? +./chapter2.tex:4: Emergency stop. + ... + +l.4 \begin{document} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + + +Here is how much of TeX's memory you used: + 9 strings out of 492763 + 321 string characters out of 6140193 + 63896 words of memory out of 5000000 + 4549 multiletter control sequences out of 15000+600000 + 7511 words of font info for 31 fonts, out of 8000000 for 9000 + 929 hyphenation exceptions out of 8191 + 9i,0n,6p,60b,28s stack positions out of 5000i,500n,10000p,200000b,80000s +No pages of output. diff -r a7e83c3ed0cf -r 59f9d2488005 final_main/chapter2/chapter2.tex --- a/final_main/chapter2/chapter2.tex Fri Feb 07 22:31:51 2020 +0900 +++ b/final_main/chapter2/chapter2.tex Mon Feb 10 17:38:22 2020 +0900 @@ -17,13 +17,14 @@ \item DataGearManager(以下 DGM) \end{itemize} -CodeGearはクラスやスレッドに相当しする. DataGear は変数データに相当し, javaのアノテーション機能を用いて記述する. CG内に記述したKeyに全てのDGが揃った際に初めてそのCGが動作するという仕組みになっている. CodeGearManager はいわゆるノードに相当し、CG, DG ,DGM を管理する. DataGearManager は DG を管理するもので, put という操作により DG , 要するに変数データを格納することができる。DGM の put 操作を行う際には Local と Remote と 2 つのどちらかを選び, 変数の key とデータを引数に書く. Local であれば, Local の CGM が管理している DGM に対し, DG を格納していく. Remote であれば接続した Remote 先の CGM の DGM に DG を格納できる. put 操作を行ったあとは, 対象の DGM の中に queue として保管される. DG を取り出す際には, CG 内で宣言した変数データにアノテーションをつける. DG のアノテーションには Take, Peek, TakeFrom, PeekFrom の 4 つがある. +CodeGearはクラスやスレッドに相当しする. DataGear は変数データに相当し, javaのアノテーション機能を用いて記述する. CG内に記述したKeyに全てのDGが揃った際に初めてそのCGが動作するという仕組みになっている. CodeGearManager はいわゆるノードに相当し、CG, DG ,DGM を管理する. DataGearManager は DG を管理するもので, put という操作により DG , 要するに変数データを格納することができる。DGM の put 操作を行う際には Local と Remote と 2 つのどちらかを選び, 変数の key とデータを引数に書く. Local であれば, Local の CGM が管理している DGM に対し, DG を格納していく. Remote であれば接続した Remote 先の CGM の DGM に DG を格納できる. put 操作を行ったあとは, 対象の DGM の中に queue として保管される. \\ +DG を取り出す際には, CG 内で宣言した変数データにアノテーションをつける. DG のアノテーションには Take, Peek, TakeFrom, PeekFrom の 4 つがある. \begin{description} \item[Take] 先頭のDGを読み込み, そのDGを削除する. DGが複数ある場合, この動作を用いる. \item[Peek] 先頭のDGを読み込むが, DGが削除されない. そのため, 特に操作をしない場合は同じデータを参照し続ける. -\item[TakeFrom(Remote DGM name)] Takeと似ているが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからTake操作を行える. -\item[PeekFrom(Remote DGM name)] Peekと似ているが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからPeek操作を行える. +\item[TakeFrom(Remote DGM name)] Takeと同様に読み込んだ後, DGを削除する. Remote DGM nameを指定することで, その接続先(Remote)のDGMからTake操作を行える. +\item[PeekFrom(Remote DGM name)] Peekと同様に読み込み後もDGが削除されないが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからPeek操作を行える. \end{description} \section{プログラムの例} @@ -40,7 +41,8 @@ \section{TopologyManager について} ここではChrstie上でノード同士の接続をより簡潔にするために使われるTopologyManagerという機能について説明する. TopologyManagerとはTopologyを形成するために, 参加を表明したノード, TopologyNodeにlabel を与え, 必要があればノード同士の配線も自動で行う機能である. -TopologyManagerのTopologyの形成方法として静的Topologyと動的Topologyの二つの方法がある. 静的Topologyはソースコード: \ref{code:dotFile} のようなdotファイルを与えることでノードの接続を図 \ref{fig:dot} のように接続することができる. 例えばnode0 からはnode1 はright という名前で参照することができ, それぞれのノードが同じCG を実行してもlabel の与え方で想定したDG の差し合いを行うことができる.静的Topologyはdotファイルのノード数と同等のTopologyNodeがあって初めて, CodeGear が実行され, ノード数が合わないとエラーが表示される. +TopologyManagerのTopologyの形成方法として静的Topologyと動的Topologyの二つの方法がある. 静的Topologyはソースコード: \ref{code:dotFile} のようなdotファイルを与えることでノードの接続を図 \ref{fig:dot} のように接続することができる. 例えばnode0 からはnode1 はright という名前で参照することができ, それぞれのノードが同じCG を実行してもlabel の与え方次第で想定したDG の差し合いを実現することができる. 静的Topologyはdotファイルのノード数と同等のTopologyNodeがあって初めて, CodeGear が実行され, ノード数が合わないとエラーが表示 +される. \lstinputlisting[caption=ringを構成するdotファイル, label=code:dotFile]{./src/ring.dot} @@ -53,9 +55,19 @@ \label{fig:dot} \end{figure} -動的Topologyは動的 Topology は参加を表明したノードに対し, 動的にノード同士の関係を作る. 例えば Tree を構成する場合, 参加を表明したノードから順に, root に近い位置の役割を与える. また, CodeGear はノードが参加し, parent に接続したあとに実行される. +動的Topologyは参加を表明したノードを順番にTopologyの構成要素として接続していく物である. 現在時点で実装済みのTreeの構成を例とすると +\begin{enumerate} +\item 参加したノードを順にroot(根)に近い要素として接続する. +\item Topologyの要素に構成されたノードはそれぞれ親, 子のノードを特定の名前(parent, child[n])で参照できる. +\item 途中参加したノードは, 木の末端要素として接続する. +\end{enumerate} +以上の形でTopologyが形成される. \\ +コード:\ref{code:SRTE} はTopologyManagerを使用してTopologyを構成するコードである. String型のリスト(今回はmanagerArg)に構成したいTopologyの形状をdotファイル, もしくは実装済みの動的Topologyの構成型を設定し, TopologyManagerCondfigを起動することでTopologyManagerが起動できる. ソースコードではTreeを構成しており, for文でnodeNum 個分のノードを生成し, それぞれmanagerPortを記憶させている. これによりノードすべてがTopologyManagerによりTreeの構成要素として接続される. +\lstinputlisting[caption=TopologyManagerによるTree型Topologyを構成するコード, label=code:SRTE]{./src/StartPrefixTree.java} + +現状では通信アルゴリズムの構成のため, dotファイルにより接続を行なっているが, 最終的にはStar型の動的Topology機能を作成し, 途中で参加してきたノードを接続が行えるようにする必要がある. diff -r a7e83c3ed0cf -r 59f9d2488005 final_main/chapter3/chapter3.tex --- a/final_main/chapter3/chapter3.tex Fri Feb 07 22:31:51 2020 +0900 +++ b/final_main/chapter3/chapter3.tex Mon Feb 10 17:38:22 2020 +0900 @@ -4,15 +4,28 @@ \begin{document} %%************************************** \chapter{リモートエディタ} -リモートエディタは共通プロトコルが対応するエディタが保持するバッファを開いて編集することができる. ネット ワーク上の一つのバッファが編集されると他のバッファにも 変更が反映され, お互いのバッファを編集し合うことができる. +リモートエディタとは他のマシン上に存在するファイルのバッファを別デバイスから開いて編集, 保存することができる機能である. 加えてこのリモートエディタを複数人が同時に同じファイルを編集し, その上変更がリアルタイムに反映されるように設計する. この章ではリモートエディタの実装の上で踏んだプロセスや, 開発の上で問題となる点と解決策について説明する。 \section{編集位置の相違} +セッション中のエディタ間の通信で生じうる, 編集結果の相違について説明する. エディタ同士のコマンドの送信はそれぞれが独立して行うため, 編集対象の領域にエディタ間で相違が生じる場合がある. 例としてエディタが一対一の接続となっている時に発生しうる相違を図\ref{fig:difference} を使用して解説する. + 編集対象は各オフセット番号に同じ値の数字が入っているものとする. EditorA ではオフセット番号 3 の 3 という 要素を削除 (テキストエディタ上のため削除されたオフセットにはその後ろの要素が繰り上げられる.), EditorB では オフセット番号 2 に A という要素を挿入するという編集をしたとする. この編集を共通プロトコルとして互いに送信しあった際, 本来編集する予定だったオフセットの中身が食い違ってしまい最終的に異なった内容となってしまう. これらの問題を解決することのできるエディタ同士の通信アルゴリズムを作成しなければならない。 + +\begin{figure}[H] +\centering + \fbox{ + \includegraphics[scale=0.6]{./images/difference_offset.pdf} + } +\caption{通信のすれ違いによる編集位置の相違} +\label{fig:difference} +\end{figure} \section{編集位置の相違解消方法} + \section{document listenerによる編集オフセット番号の読み取り} - エディタ同士の基本通信環境の構成のため, Chrisitie と同様のjava 言語で作成したエディタのインスタンスを使い, 異なるマシン同士の同期の実現を目指した. 自作エディタは java. swingの機能で構成されており, 追記または削除されたオフセット位置とその内容の取得はDocumentListenrを使用した. DocumentListenerのクラスはswingで実装したエディタ部分の入力と削除を検知し, 動作するメソッドであり, DocumentEvent内に入力されたオフセットとその長さや文字列が入力されるため, それをChrisitie側で検知し処理を行った. + エディタ同士の基本通信環境の構成のため, Chrisitie と同様のjava 言語で作成したエディタのインスタンスを使い, 異なるマシン同士の同期の実現を目指した. 自作エディタは java. swingの機能で構成されており, 追記または削除されたオフセット位置とその内容の取得はDocumentListenrを使用した. DocumentListenerのクラスはswingで実装したエディタ部分の入力と削除を検知し, 動作するメソッドであり, DocumentEvent内に入力されたオフセットとその長さや文字列が入力されるため, それをChrisitie側で検知し処理を行った. +insertUpdateメソッドではバッファに入力が行われた際に自動的に実行され, removeUpdateメソッドは同様に削除が行われた際に実行される. 他ノードから送信されてきた命令によるバッファの変更によっても実行され, 意図しないループが発生したため, 受信した命令では実行されないように記述をおこなった. \lstinputlisting[caption=DocumentListenerのコード部分, label=code:DocumentListener]{./src/DocumentListener.java} @@ -29,7 +42,8 @@ \lstinputlisting[caption=Commandパターンとして実装した命令, label=code:Command]{./src/Command.java} \section{命令オブジェクトを実装する際に起きた問題} -インスタンス化した命令を他ノードに送信する際にエラーが発生し, 送信に失敗してしまうという問題が発生した. クラスの送信の際のシリアライズはmsgpackクラスを利用していた. 原因を調査した結果, 以下の原因が見つかった. +インスタンス化した命令を他ノードに送信する際にエラーが発生し, 送信に失敗してしまうという問題が発生した. クラスの送信の際のシリアライズはmsgpackクラスを利用していた. +msgpackクラスは,シリアライズしたいクラスにMessage アノテーションをつけることにより, シリアライズ化を行う. 原因を調査した結果, 以下の原因が見つかった. \begin{itemize} \item Christieのjavaバージョンは11を使用していたが, msgpackバージョン0.6.12はjava11に対して対応していなかった. diff -r a7e83c3ed0cf -r 59f9d2488005 final_main/chapter4/chapter4.tex --- a/final_main/chapter4/chapter4.tex Fri Feb 07 22:31:51 2020 +0900 +++ b/final_main/chapter4/chapter4.tex Mon Feb 10 17:38:22 2020 +0900 @@ -4,7 +4,7 @@ \begin{document} %%************************************** \chapter{スター型接続によるネットワーク通信} -リモートエディタのセッションに参加するノード(ユーザ)はスター型で接続を行う. スター型とは中心となるノードから放射状に他のノードにそれぞれ一対一の接続を行う接続である. +リモートエディタのセッションに参加するノード(ユーザ)はスター型で接続を行い, リモートエディタの通信部分の障害に対する耐性を保障する. スター型とは中心となるノードから放射状に他のノードにそれぞれ一対一の接続を行う接続であり, 図:\ref{fig:star} はスター型接続をグラフ化した物である. 図で説明すると, node0がハブノード(サーバーの役割)として他のnode1, 2, 3, 4 と接続する。ここに新しくnode5が接続に加わると仮定すると, 他のノードと同様にnode0と接続する. 先行研究においてはノードの通信をリング型, つまりノード同士を円となる形で接続することで実装を試みたが, \begin{itemize} \item ノードごとのもつファイルの整合性の維持が難しい. @@ -19,6 +19,16 @@ \end{itemize} と言ったことが挙げられる. + +\begin{figure}[H] +\centering + \fbox{ + \includegraphics[scale=0.7]{./images/Star-Topology.pdf} + } + \caption{スター型の接続をグラフ化した物} +\label{fig:star} +\end{figure} + \newpage %%文書終了**************************** diff -r a7e83c3ed0cf -r 59f9d2488005 final_main/chapter5/chapter5.tex --- a/final_main/chapter5/chapter5.tex Fri Feb 07 22:31:51 2020 +0900 +++ b/final_main/chapter5/chapter5.tex Mon Feb 10 17:38:22 2020 +0900 @@ -2,7 +2,7 @@ %\input{/Users/e155753/.tex/setup} %%文書開始**************************** -\begin{document} +\begin{document} %%************************************** \chapter{今後の課題} ここではリモートエディタの実装において今後開発, 修正しなければならないことについて解説する. @@ -12,12 +12,15 @@ \section{編集するファイルの共有方法} -現段階では編集位置とその文字列, もしくは削除されたかどうかという情報の送り合いしか実装しておらず, 編集対象のファイルの共有が行えていない. ファイルの共有方法としてファイルの中身をそのまま送信すると言った方法が考えられるが, ファイル要領や通信への負担といった要因を考えると最適な手段とは言えない. そのためユーザが編集するファイルの一部部分のみ送信するといった方法を考案する必要がある. +現段階では編集位置とその文字列, もしくは削除されたかどうかという情報の送り合いしか実装しておらず, 編集対象のファイルの共有が行えていない. ファイルの共有方法としてファイルの中身をそのまま送信すると言った方法が考えられるが, ファイル要領や通信への負担といった要因を考えると最適な手段とは言えない. +そのためユーザが編集するファイルの一部部分のみ送信するといった方法を考案する必要がある. \section{動的なStar型Topologyの構成機能} -現開発段階では, 編集位置の相違の解消方法の設計のため, Star型の接続をdotファイルを用いて静的に行っている. 先述したが静的Topologyの構成では参加ノードの数が想定と一致しなければ動作しないという問題点がある. 作成するリモートエディタは不特定数のユーザの参加を前提としているため, 動的にStar型のTopologyを構成する機能を作成する. また, リモートエディタのセッションでは,セッション開始者とは別にサーバーを立て, そのサーバーに開始者を含めた他のユーザを接続する予定である. +現開発段階では, 編集位置の相違の解消方法の設計のため, Star型の接続をdotファイルを用いて静的に行っている. + 先述したが静的Topologyの構成では参加ノードの数が想定と一致しなければ動作しないという問題点がある. + 作成するリモートエディタは不特定数のユーザの参加を前提としているため, 動的にStar型のTopologyを構成する機能を作成する. また, リモートエディタのセッションでは,セッション開始者とは別にサーバーを立て, そのサーバーに開始者を含めた他のユーザを接続する予定である. %%文書終了**************************** -\end{document} \ No newline at end of file +\end{document} diff -r a7e83c3ed0cf -r 59f9d2488005 final_main/main.pdf Binary file final_main/main.pdf has changed