Mercurial > hg > Papers > 2020 > itsuki-thesis
annotate final_main/chapter2/chapter2.tex @ 15:c7ab31269230
update some file
author | ichikitakahiro <e165713@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 15 Feb 2020 18:37:06 +0900 |
parents | 7a840fd996a1 |
children | 7293b6481e32 |
rev | line source |
---|---|
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 %\input{/Users/e155753/.tex/setup} |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 %%文書開始**************************** |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 \begin{document} |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 %%************************************** |
9 | 6 \chapter{リモートエディタ} |
13 | 7 リモートエディタとは他のマシン上に存在するファイルのバッファを別デバイスから開いて編集, 保存することができる機能である. |
8 | |
9 本研究ではこのリモートエディタを複数人が同時に同じファイルを編集し, その上変更がリアルタイムに反映されるように設計する. | |
15 | 10 この章では同期式リモートエディタの実装の上で踏んだプロセスや, 開発の上で問題となる点と解決策について説明する。 |
9 | 11 |
12 \section{document listenerによる編集オフセット番号の読み取り} | |
15 | 13 本研究の通信部分を構成する分散フレームワークChrisitie はjavaで開発する. |
14 したがってエディタ同士の基本通信環境の構成のため, Chrisitie と同様にjava 言語で作成したエディタのインスタンスを使い, 異なるマシン同士の同期の実現を目指した. | |
10 | 15 自作エディタは java. swingの機能で構成されており, コードをオフセット番号で取り扱っている. |
16 | |
17 追記または削除されたオフセット位置とその内容の取得はDocumentListenrを使用した. | |
18 DocumentListenerのクラスはswingで実装したエディタ部分の入力と削除を検知し, 動作するメソッドであり, DocumentEvent内に入力されたオフセットとその長さや文字列が入力されるため, それをChrisitie側で検知し処理を行った. | |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
19 |
15 | 20 insertUpdateメソッドではエディタのバッファに入力が行われた際に自動的に実行され, removeUpdateメソッドは同様にバッファ内の文字のいずれかが削除が行われた際に実行される. |
10 | 21 他ノードから送信されてきた命令によるバッファの変更によっても実行され, 意図しないループが発生したため, 受信した命令では実行されないように記述をおこなった. |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
22 |
10 | 23 コード\ref{code:DocumentListener}はinsertUpdate, removeUpdateの記述部分である. |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
24 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
25 \newpage |
9 | 26 |
27 \lstinputlisting[caption=DocumentListenerのコード部分, label=code:DocumentListener]{./src/DocumentListener.java} | |
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 |
9 | 30 \section{Command パターンによる命令オブジェクトの作成} |
10 | 31 リモートエディタを実装する上において, 各エディタは自身に起きたバッファの変更を他ノードに送信する必要がある. |
32 この変更の送り合いをCommand パターンとして実装した. | |
33 Command パターンとは, 命令を一つのオブジェクトとして表現する方法である. | |
34 コマンドパターンの利点として, | |
35 | |
9 | 36 \begin{itemize} |
10 | 37 \item インスタンスを利用して命令を作成するため, 後述のChristieのGearの概念と相性が良い. |
9 | 38 \item 命令に必要な内容をまとめて送信するため, 相違の発生を防ぐことができる. |
10 | 39 \item 命令の管理が行いやすい, 行列に並ばせ命令の順番を管理したり, 命令の際, 実行, 取り消しが容易になる. |
9 | 40 \end{itemize} |
10 | 41 |
42 といった点が挙げられる. | |
43 ソースコード:\ref{code:Command}は書き込み, 送信を行う際の命令をクラスとして作成したものである. | |
44 このクラスのインスタンスを命令オブジェクトとして送信し合う. | |
15 | 45 実際にChristieで命令オブジェクトの送受信を実装した解説は第四章にて行う. |
9 | 46 |
15 | 47 \lstinputlisting[caption=Commandパターンで実装した命令クラス, label=code:Command]{./src/Command.java} |
48 | |
9 | 49 |
50 \section{命令オブジェクトを実装する際に起きた問題} | |
10 | 51 インスタンス化した命令を他ノードに送信する際にエラーが発生し, 送信に失敗してしまうという問題が発生した. |
52 クラスの送信の際のシリアライズはmsgpackクラスを利用している. | |
53 msgpackクラスは,シリアライズしたいクラスにMessage アノテーションをつけることにより, シリアライズ化を行う. | |
54 原因を調査した結果, 以下の原因が見つかった. | |
55 | |
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 \begin{itemize} |
9 | 57 \item Christieのjavaバージョンは11を使用していたが, msgpackバージョン0.6.12はjava11に対して対応していなかった. |
58 \item msgpackの最新版0.8.20はシリアライズ機能が含まれなくなった. | |
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 \end{itemize} |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 |
9 | 61 以上の原因に対処するために以下のことを行った. |
4 | 62 |
9 | 63 \begin{itemize} |
64 \item Christieのjavaバージョンを8まで下げ, msgpackバージョン0.6.12を動作できるようにした. | |
65 \item シリアライズする命令クラスに対し, フィールドをpublic にした. | |
66 \item javassistのバージョンを最新版へ変更した. | |
67 \end{itemize} | |
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 |
10 | 69 javaのバージョンを下げたのは応急的な処置となってしまったが, これらの処置により問題なくCommandパターンでの命令実装を行うことができた. |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
70 javaのバージョンに左右されずリモートエディタを実装するには, シリアライズの機能について他のパッケージを使うか, 自身で作成する必要が生まれた。 |
4 | 71 |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
72 \newpage |
4 | 73 |
9 | 74 \section{編集位置の相違} |
10 | 75 セッション中のエディタ間の通信で生じうる, 編集結果の相違について説明する. |
76 エディタ同士のコマンドの送信はそれぞれが独立して行うため, 編集対象の領域にエディタ間で相違が生じる場合がある. | |
77 | |
78 例としてエディタが一対一の接続となっている時に発生しうる相違を図\ref{fig:difference} を使用して解説する. | |
79 編集対象は各オフセット番号に同じ値の数字が入っているものとする. | |
80 EditorA ではオフセット番号 3 の 3 という 要素を削除 (テキストエディタ上のため削除されたオフセットにはその後ろの要素が繰り上げられる.), EditorB では オフセット番号 2 に A という要素を挿入するという編集をしたとする. | |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
81 |
10 | 82 この編集を共通プロトコルとして互いに送信しあった際, 本来編集する予定だったオフセットの中身が異なってしまい編集結果に違いが生じてしまう. |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
83 これらの問題を解決することのできるエディタ同士の通信手法を作成しなければならない. |
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 \begin{figure}[H] |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 \centering |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 \fbox{ |
9 | 88 \includegraphics[scale=0.6]{./images/difference_offset.pdf} |
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 } |
9 | 90 \caption{通信のすれ違いによる編集位置の相違} |
91 \label{fig:difference} | |
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 \end{figure} |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 |
9 | 94 \section{編集位置の相違解消方法} |
10 | 95 編集するオフセットに相違が発生する条件として, サーバーとノードがお互いにコマンドを送り合った際, その命令コマンドが相手に到着する前に相手が自身のバッファに変更を加えてしまった場合に起きる. |
96 したがって, 相違の解消に必要なことは | |
97 | |
9 | 98 \begin{itemize} |
99 \item サーバーとノード間のコマンド送信のすれ違いが発生したということを検知する方法 | |
100 \item すれ違いが発生した際に編集したオフセットのズレを修正する方法 | |
101 \end{itemize} | |
10 | 102 |
9 | 103 が挙げられる. |
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
105 そこで, すれ違いが発生したか否かを検知するために、ノード同士が送信し合うコマンドにそれぞれ番号を割り振る方法を考案した. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
106 図\ref{fig:Fix}を用いて解説する. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
107 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
108 以下の図はコマンド番号を実装し, すれ違いを検知する際の動作の想定図である. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
109 また, 本説明のコマンドは文字列の書き込み命令であり, バッファの指定されたオフセットにinsertされるため, それ以降のオフセット内の文字列は, 一つずつ後方オフセットへ移動する. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
110 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
111 命令コマンドはクラスのインスタンスを用いて作られており, 中には1オフセット分(文字数分)の文字列, 入力するオフセット, コマンド番号, コマンドを発行したノード名が記録されている. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
112 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
113 二つのノードserver とnode は同じファイルのバッファを開いており, そのバッファには何も記述されていないとする. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
114 また, serverが送信するコマンドは他のノードから送られてきたコマンドであるとする. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
115 加えて各サーバー, ノードは実行したコマンドをスタック領域に保持しておいている. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
116 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
117 コマンドとコマンド番号について以下の特性が存在する. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
118 \begin{itemize} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
119 \item 各ノードは最後に実行した数値を変数(図ではserverがcNum, nodeがnodeCNum) に保持している. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
120 \item いずれかのノードがコマンドを発行したら, そのコマンドのコマンド番号は前に実行したコマンドの番号+1となる. そしてそれは送信されてきたコマンドか自分が発行したコマンドであるかは問わない. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
121 \item 送信されてきたコマンドのコマンド番号が自身が保持しているコマンド番号+1でなければ、自身が先に発進したコマンドとすれ違いが発生していることが判明できる. (保持コマンド番号より同値以下の場合) |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
122 \end{itemize} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
123 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
124 \newpage |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
125 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
126 つまり, 送信されたコマンドNo.102を実行したらそれぞれのノードは実行済みコマンド番号を102へ書き換えなければならない. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
127 そして続いて自らがバッファに変更を加えたとき, その変更をコマンドNo103として作成し, 送信と実行済みコマンド番号を103に書き換える処理が必要となる. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
128 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
129 以上の処理でコマンド送信のすれ違いを検知する. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
130 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
131 \begin{figure}[H] |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
132 \centering |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
133 \fbox{ |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
134 \includegraphics[scale=0.85]{./fig/FixCommand.pdf} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
135 } |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
136 \caption{コマンド番号を利用した相違の解消} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
137 \label{fig:Fix} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
138 \end{figure} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
139 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
140 \newpage |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
141 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
142 コマンドのすれ違いを検知した際の処理は以下のように行う. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
143 \begin{itemize} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
144 \item 前提としてノードよりサーバーの整合性を維持したいため優先度は常にサーバーが高い.例えば同じオフセットにそれぞれのノードが別の文字列に変更した場合, サーバーノード共にサーバー側が発進したコマンドの文字列が書き込まれる. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
145 \item すれ違いが発生したら, 各ノードはコマンドを記録しているスタックを参照し, 受け取ったコマンドのオフセットのズレを集計しそのコマンドを修正する. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
146 \end{itemize} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
147 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
148 図上ではserverからのinsert B for offset:2 とnodeからのinsert Z for offset:2の命令がすれ違いを起こしている. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
149 この場合, serverのバッファ状態が優先されるため, server側がnodeからの命令のoffset位置を調整してやらなければならない. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
150 この処理はserverと全ての接続しているノード間で独立して行われる. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
151 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
152 コマンドのオフセットの修正は |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
153 \begin{itemize} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
154 \item 受け取ったコマンドのオフセット > 受信コマンドとすれ違ったコマンドのオフセット のとき, 受診したコマンドのオフセットに+1する. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
155 \item 受け取ったコマンドのオフセット < 受信コマンドとすれ違ったコマンドのオフセット のとき, 受診したコマンドのオフセットを変えずにそのまま実行できる. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
156 \item 受け取ったコマンドのオフセット = 受信コマンドとすれ違ったコマンドのオフセット のとき, サーバー側の文字列が優先される. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
157 \end{itemize} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
158 と言った方法で行うことができる. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
159 これを削除, 文字列の置き換えにもそれぞれ対応する方法を作ることによりズレの修正を行う. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
160 |
15 | 161 上記の修正方法のテストコードを試みた. |
162 構成としては現時点では問題が見られていないが, 実装した際に初めて判明する通信速度や複数の独立した処理による影響も対処しなければならない可能性がある. | |
163 | |
164 また, これからの実装を考えると | |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
165 \begin{itemize} |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
166 \item 既存のエディタ(emacsやvim)のバッファ処理はオフセット単位で行われていない. |
15 | 167 \item コマンドを保持し続けるとメモリ容量に無駄が発生する. |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
168 \item コマンドのput(送信)失敗についての想定ができていない. |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
169 \end{itemize} |
15 | 170 といった点を修正する必要がある. |
171 | |
172 | |
173 | |
174 | |
175 | |
11
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
176 |
b8149a449b7d
forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
177 |
2
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179 |
97d58fdc8185
add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180 %%文書終了**************************** |
9 | 181 \end{document} |