diff paper/chapter4.tex @ 115:eac8620cf9cd

Fixed spell miss
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Wed, 05 Mar 2014 19:54:34 +0900
parents d116e59fc8a2
children d45899154815
line wrap: on
line diff
--- a/paper/chapter4.tex	Tue Mar 04 00:25:04 2014 +0900
+++ b/paper/chapter4.tex	Wed Mar 05 19:54:34 2014 +0900
@@ -54,7 +54,7 @@
 に記述している通りにサーバノード同士が接続を行うよう指示をだす.
 
 トポロジーマネージャーは接続要求先を聞いてくるサーバノードに対して名前を割り振り, 接続相手を伝える.
-dot ファイル\ref{src:alice_dot}により形成されるトポロジーを図\ref{fig:tree_topology}に示す.
+ソースコード\ref{src:alice_dot}のdotファイルにより形成されるトポロジーを図\ref{fig:tree_topology}に示す.
 
 
 \begin{figure}[htpb]
@@ -96,12 +96,12 @@
 \section{Alice を用いての分散実装}
 Aliceのポロジー形成と他のサーバのデータへのアクセスする機構を用いるためには, Aliceが
 提供するプログラミングスタイルに沿わなければならない.
-それはDataSegment(データ)とCodeSegment(タスク)によるプログラムである.
+それはDataSegmentとCodeSegmentによるプログラムである.
 ここではまず, DataSegmentとCodeSegmentによるプログラムの方法について説明し, 他サーバとの
 通信部分の実装について述べる.
 
 \subsection{Alice によるプログラミング}
-AliceはDataSegment(データ)とCodeSegment(タスク)単位でプログラミングを行うことを述べた.
+AliceはDataSegment(データ)とCodeSegment(タスク)単位でプログラミングを行う.
 CodeSegmentには計算に必要なDataSegmentが登録される.
 そしてDataSegmentが準備され次第CodeSegmentによる計算が実行される.
 DataSegmentの取得は文字列のキーを使うことで行える.
@@ -110,11 +110,11 @@
 \begin{lstlisting}[frame=lrbt,label=src:cs_sample,caption=CodeSegmentの実行,numbers=left]
 public class TestCodeSegment extends CodeSegment {
   public Receiver arg1 = ids.create(CommandType.TAKE);
-  
+ 
   public TestCodeSegment() { }
 
   public void run() {
-    int count = ds.asInteger();
+    int count = arg1.asInteger();
     count++;
     System.out.println("count = "+count);
     if(c > 10) { exit(0); }
@@ -130,7 +130,7 @@
   }
 }
 \end{lstlisting}
-コードの説明を行う.
+ ソースコード\ref{src:cs_sample}の説明を行う.
 このプログラムは, 数字を1から10まで出力を行い終了するプログラムである.
 17行目から19行目の処理が最初に行われる.
 まずTestCodeSegmentというCodeSegmentのインスタンスcsを生成する.
@@ -145,8 +145,8 @@
 上記のコード19行目ではputにより"count"をキーとして数値の0を登録している.
 putがされるとcsの計算が始まり別スレッドにより8行目からの処理が行われる.
 
-putによりキー"count"に登録された数値0はReceiverであるdsを使って取ることができる.
-7行目から13行目では\verb|ds.asInteger()|により, "count"に登録したデータの中身を受け取りインクリメントし出力する.
+putによりキー"count"に登録された数値0はReceiverであるarg1を使って取ることができる.
+7行目から13行目では\verb|arg1.asInteger()|により, "count"に登録したデータの中身を受け取りインクリメントし出力する.
 そして, 最後には\verb|ods.put|を行っている.
 新たなTestCodeSegmentも生成しており, これはインクリメントされた"count"がputされることで実行される.
 この一連の処理を"count"の数値が10以上になるまで行う.
@@ -215,7 +215,7 @@
 }
 \end{lstlisting}
  上記のStudentクラスはプリミティブ型しか保持していない.
-そのためシリアライズが可能である
+そのためシリアライズが可能である.
 また, 次のようなクラスもシリアライズ可能な型となる(ソースコード\ref{src:msgpack2}).
 \begin{lstlisting}[frame=lrbt,label=src:msgpack2,caption=MessagePackによりシリアライズ可能なクラス2,numbers=left]
 import org.msgpack.annotation.Message
@@ -227,11 +227,11 @@
 \end{lstlisting}
  この場合, フィールドはプリミティブな型でないStudentクラスのフィールドを保持している.
 しかし, Studentクラスはシリアライズ可能な形で作成しているため, クラスのフィールドとして
-保持しても問題はない.
+保持しても問題ない.
 
 これらの制約にそった形で作成しDataSegmentにネットワークを介してクラスのインスタンス
 をputすることができる.
-DataSegmentから受け取ったデータはそのままではシリアライズされたものため, 一度手元で
+DataSegmentから受け取ったデータはそのままではシリアライズされたものなため, 一度手元で
 元のクラスにコンバートすることで扱う.
 例として, AliceにおけるStudenクラスのコンバートを次に示す(ソースコード\ref{src:msgpack1}).
 \begin{lstlisting}[frame=lrbt,label=src:msgpack3,caption=DataSegment,numbers=left]
@@ -271,7 +271,7 @@
 % 木がなければそのばでつくるようにした
 
 \subsection{NetworkTreeOperationLogの実装}
-NetworkTreeOperationLogの実装の一部を以下(図\ref{src:netlog})に示す.
+NetworkTreeOperationLogの実装の一部を以下(ソースコード\ref{src:netlog})に示す.
 \begin{lstlisting}[frame=lrbt,label=src:netlog,caption=NetworkTreeOperationが持つフィールド,numbers=left]
 @Message
 public class NetworkTreeOperationLog implements TreeOperationLog
@@ -304,7 +304,7 @@
 \end{lstlisting}
 
 LogPutCodeSegmentの実装は次のようになっている(ソースコード\ref{src:logputcs}).
-\begin{lstlisting}[frame=lrbt,label=src:logputcs,caption=putを行うためだけのCodeSegmentの用意,numbers=left]
+\begin{lstlisting}[frame=lrbt,label=src:logputcs,caption=putを行うためのCodeSegmentの用意,numbers=left]
 public class LogPutCodeSegment extends CodeSegment{
   NetworkTreeOperationLog log;
   public LogPutCodeSegment(NetworkTreeOperationLog _log) {
@@ -316,7 +316,7 @@
   }
 }
 \end{lstlisting}
- 上で述べた問題は, ベンチマークテストなど, 大量の負荷をかけたさいに発生する.
+ 上で述べた問題は, ベンチマークテストなど, 大量の負荷をかけた際に発生する.
 負荷とはJungleのデータに変更が加わることである.
 多数のデータの変更により大量のログが生成される.
 そのため, \verb|ods.put|によりDataSegmentの"log"にアクセスが集中してしまい, レスポンスが
@@ -349,7 +349,7 @@
   }
   :
 \end{lstlisting}
- 12行目の\verb|ods.put(node, log.key, log.getVal())|が他サーバノードへデータを送る部分になる.
+ 12行目の\verb|ods.put(node, log.key, log.getVal())|が他サーバノードへデータを送る部分になる.
 変数logにはNetworTreeOperationLogが入っている.
 変数listには"\_CLIST"により得られたデータが入っている.
 それは文字列のListとなっている.
@@ -362,12 +362,13 @@
 
 \subsection{ログの受信とデータ反映}
 次は受け取ったログからデータの編集を行う部分の実装を行う.
-Jungleはのデータを変更する手段として木構造データ毎にTreeEditorクラスが提供される.
+Jungleはデータを変更する手段として木構造データ毎にTreeEditorクラスを提供している.
 このTreeEditorを使用し, ログに入っているTreeOperationを1つ1つ取り出し同じ編集を行わせる.
 例えば次のようになる(ソースコード\ref{src:data_edit}).
 \begin{lstlisting}[frame=lrbt,label=src:data_edit,caption=ログを受け取ってのデータの反映,numbers=left]
 // Receiver log <- "log"キーから取得できるデータが入っている
 // Jungle jugnle
+// Either<Error,JungleTreeEditor> either
 NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class);
 String treeName = netLog.getTreeName();
 JungleTree tree = jungle.getTreeByName(treeName);
@@ -382,7 +383,7 @@
   editor = either.b();
 }
 \end{lstlisting}
- 7行目で取り出されたTreeOperationからさらにNodePathとNodeOperationを取り出しているのが8行目と9行目になる.
+ 8行目で取り出されたTreeOperationからさらにNodePathとNodeOperationを取り出しているのが9行目と10行目になる.
 最後にedit関数にTreeEditorとNodePath, それとNodeOpeartionを引き渡している.
 edit関数は次のようになる(ソースコード\ref{src:data_edit2}).
 \begin{lstlisting}[frame=lrbt,label=src:data_edit2,caption=edit関数の実装,numbers=left]
@@ -454,8 +455,8 @@
 
 ログの書き出しを行いたいときはこのPersistentChangeListWriterを設定することで行えるようになった.
 これにより木の編集が行われるたびにNetworkTreeOperationLogが書き込まれていく.
-読み込みたいときはMessagePackを使ってディスクから読み込み, データ分散実装と同じの方法で木の編集を行っていく
-ことができる(ソースコード\ref{src:data_edit}, \ref{src:data_edit2}).
+読み込みたいときはMessagePackを使ってディスクから読み込み, データ分散実装と同じ方法で木の編集を行っていく
+ことができる.
 
 
 \newpage
@@ -506,7 +507,7 @@
 \subsection{掲示板プログラムにおけるMerge}
 
 図\ref{fig:merge_imp2}の server node0 の木の状態にするのが理想である.
-掲示板のへの書き込みの表示は, 書き込みされた時間が早い順に表示されるようにしたい.
+掲示板への書き込みの表示は, 書き込みされた時間が早い順に表示されるようにしたい.
 これを timestamp を利用することで行う.
 他サーバノードから来たデータに関しては, timestamp を参照し, 次に自分の保持している
 木の子ノードの timestamp と比べていくことでデータの追加する場所を決める.