annotate rep.tex @ 2:4742b1e4da3a default tip

modify merge, and remove eclipse, debug
author one
date Thu, 19 Feb 2009 01:26:01 +0900
parents 39af8ab46cbb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
39af8ab46cbb (no commit message)
one
parents:
diff changeset
1 \section{Remote Editing Protocol(REP)}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
2
39af8ab46cbb (no commit message)
one
parents:
diff changeset
3 %概要
39af8ab46cbb (no commit message)
one
parents:
diff changeset
4 \subsection{REPの概要}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
5 Remote Editing Protocol(REP) は異なるマシン上に存在する異なるアプリケーション同
39af8ab46cbb (no commit message)
one
parents:
diff changeset
6 士を接続し、データの直接編集を相互に行うことを目的としたプロトコルである。REP を
39af8ab46cbb (no commit message)
one
parents:
diff changeset
7 実装したテキストエディタをリモートエディタと呼ぶ。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
8 現在、REP は Vim, Emacs, Eclipse
39af8ab46cbb (no commit message)
one
parents:
diff changeset
9 などに実装されている。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
10 REPではREPコマンドを用いて、エディタの接続の処理や、データの相互編集を行う(図\ref{fig:editor_to_editor2})。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
11
39af8ab46cbb (no commit message)
one
parents:
diff changeset
12 \begin{figure}[htpb]
39af8ab46cbb (no commit message)
one
parents:
diff changeset
13 \begin{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
14 \includegraphics[scale=.4]{figure/editor_to_editor2.pdf}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
15 \end{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
16 \caption{REPでの相互編集}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
17 \label{fig:editor_to_editor2}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
18 \end{figure}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
19
39af8ab46cbb (no commit message)
one
parents:
diff changeset
20 %REPコマンド
39af8ab46cbb (no commit message)
one
parents:
diff changeset
21 \subsection{REPコマンド}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
22 REPコマンドはテキスト編集における基本的な操作を表している。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
23 REPは、様々なアプリケーションに実装されているため、それぞれのエディタ間での編集コマンドの差を埋める必要がある。REPでは、それぞれのエディタの複雑な編集コマンドをREPコマンドのinsert、deleteコマンドに変換してデータの相互編集を行っている。\\
39af8ab46cbb (no commit message)
one
parents:
diff changeset
24
39af8ab46cbb (no commit message)
one
parents:
diff changeset
25 \begin{figure}[htpb]
39af8ab46cbb (no commit message)
one
parents:
diff changeset
26 \begin{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
27 \includegraphics[scale=.5]{figure/rep_command.pdf}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
28 \end{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
29 \caption{REPコマンド}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
30 \label{fig:rep_command}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
31 \end{figure}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
32
39af8ab46cbb (no commit message)
one
parents:
diff changeset
33 以下に、REPコマンドのそれぞれのフィールドについての説明を行う。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
34
39af8ab46cbb (no commit message)
one
parents:
diff changeset
35 \begin{itemize}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
36 \item cmd\\ コマンド識別子。REPではこの識別子によって処理の内容を判断する。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
37 \item sid\\ Sessionを識別するための番号。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
38 \item eid\\ エディタを識別するための番号。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
39 \item seq\\ シーケンス番号。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
40 \item lineno\\ 編集を行う行番号。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
41 \item text\\ 編集された/するテキスト。\\
39af8ab46cbb (no commit message)
one
parents:
diff changeset
42 \end{itemize}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
43
39af8ab46cbb (no commit message)
one
parents:
diff changeset
44 次に、テキスト編集に用いられるREPコマンドと、接続時に用いられるREPコマンドの一部を紹介する。\\
39af8ab46cbb (no commit message)
one
parents:
diff changeset
45
39af8ab46cbb (no commit message)
one
parents:
diff changeset
46 編集コマンド
39af8ab46cbb (no commit message)
one
parents:
diff changeset
47 \begin{itemize}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
48 \item insert\\ テキストへの行の挿入を表すコマンド。エディタでテキストへの行の挿入があった場合、このコマンドを発行し、たのエディタへ送信する。linenoに行番号、textに挿入するされたテキストをセットする。受信したエディタは指定された行にテキストを挿入する。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
49 \item delete\\ テキストからの行の削除を表すコマンド。エディタで行が削除された時に発行され、textには削除された行がセットされる。このコマンドを受け取った側のエディタでは、テキストに対し、行の削除を行い、このコマンドのtextの値を、このエディタで削除した行へとセットし直す。\\
39af8ab46cbb (no commit message)
one
parents:
diff changeset
50 \end{itemize}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
51
39af8ab46cbb (no commit message)
one
parents:
diff changeset
52 接続コマンド
39af8ab46cbb (no commit message)
one
parents:
diff changeset
53 \begin{itemize}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
54 \item join\\ エディタがSession Managerに接続するときに発行するコマンド。このコマンドの場合、エディタがどのSessionに接続するかはすぐには決定せず、ユーザのSession ManagerへのGUI操作によって決定する。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
55 \item put\\ エディタがSession Managerに接続し、Sessionを生成するコマンド。この場合。エディタは生成された。Sessionへ自動的に接続する。このとき生成されるSessionはエディタ側が現在開いているテキストとなる。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
56 \item sync\\ あるSessionに参加する全てのエディタに対してテキスト内容の同期を行う。このコマンドはSessionに新たにエディタが接続してきたときにSession Managerからfile ownerのエディタへ送信される。受け取ったエディタは自分が持っているテキストの内容をinsert/deleteコマンドにより他のエディタへ送信して、テキストの内容を反映させる。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
57 \end{itemize}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
58
39af8ab46cbb (no commit message)
one
parents:
diff changeset
59 %Session Manager
39af8ab46cbb (no commit message)
one
parents:
diff changeset
60 \subsection{Session Managerの導入}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
61 最初のREPは、一つのエディタをサーバとして、クライアントからの編集を可能にするものであり、1997年に新垣将史によって、pico エディタに実装された\cite{bib:arakaki3}。その後、Emacs 上にも実装された\cite{bib:arakaki}。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
62 この版のREPでは、変更は一方向であり、サーバはクライアントからの
39af8ab46cbb (no commit message)
one
parents:
diff changeset
63 変更を受け付けるだけであった。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
64
39af8ab46cbb (no commit message)
one
parents:
diff changeset
65 宮里忍、安村恭一は、二つのエディタ間でREPコマンドを巡回させることにより、二つのエディタ間での双方向の編集を可能にするマージアルゴリズムを作成した\cite{bib:yasumura}\cite{bib:miyazato}。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
66 この時に、REPはvimにも移植されている。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
67
39af8ab46cbb (no commit message)
one
parents:
diff changeset
68 2007年にはEclipseへの実装を行なった。これにより、Eclipse同士、あるいは、
39af8ab46cbb (no commit message)
one
parents:
diff changeset
69 Eclipse 上のファイルをEmacs/vimなどで編集することが可能になる。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
70
39af8ab46cbb (no commit message)
one
parents:
diff changeset
71 この時点で、エディタ同士を直接
39af8ab46cbb (no commit message)
one
parents:
diff changeset
72 接続する手順が複雑すぎることが明らかになった。エディタのIPアドレスや
39af8ab46cbb (no commit message)
one
parents:
diff changeset
73 ファイル名をユーザがエディタから直接入力するのは、かなり繁雑である。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
74 そこで、エディタ間の接続を管理するGUIとして、Session Managerを導入することを提案した(図\ref{fig:one_session_manager})。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
75
39af8ab46cbb (no commit message)
one
parents:
diff changeset
76 \begin{figure}[htpb]
39af8ab46cbb (no commit message)
one
parents:
diff changeset
77 \begin{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
78 \includegraphics[scale=.35]{figure/one_session_manager.pdf}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
79 \end{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
80 \caption{Session Managerの導入}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
81 \label{fig:one_session_manager}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
82 \end{figure}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
83
39af8ab46cbb (no commit message)
one
parents:
diff changeset
84 Session Manager にはネットワーク経由でどこからでも接続できるが、
39af8ab46cbb (no commit message)
one
parents:
diff changeset
85 その場合は、やはり、エディタの方でIPアドレスなどを指定する必要がある。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
86 それよりはSession Manager はコンピュータ上に一つあると言う方が
39af8ab46cbb (no commit message)
one
parents:
diff changeset
87 望ましい。そうすれば、エディタは決まったポートでデフォルトの
39af8ab46cbb (no commit message)
one
parents:
diff changeset
88 Session Manager に接続できる。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
89
39af8ab46cbb (no commit message)
one
parents:
diff changeset
90 \begin{figure}[htpb]
39af8ab46cbb (no commit message)
one
parents:
diff changeset
91 \begin{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
92 \includegraphics[scale=.28]{figure/many_session_manager.pdf}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
93 \end{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
94 \caption{Session Managerの同士の接続}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
95 \label{fig:many_session_manager}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
96 \end{figure}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
97
39af8ab46cbb (no commit message)
one
parents:
diff changeset
98 このようにSession Managerを導入することで、エディタ側に複雑な
39af8ab46cbb (no commit message)
one
parents:
diff changeset
99 ユーザインタフェースを実装することなくREPを実装することが
39af8ab46cbb (no commit message)
one
parents:
diff changeset
100 可能となる。このユーザインタフェース部分は、Emacsでは10\%程度、
39af8ab46cbb (no commit message)
one
parents:
diff changeset
101 vim では30\%程度を占めており無視できない大きさである。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
102
2
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
103 %sm_join
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
104 \subsection{Session Manager同士の接続}
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
105 リモートホスト同士のエディタ間で相互にデータの編集作業を行うにはまず、そのホストのSession Manager同士を接続し、エディタ間での通信は接続されたSession Managerを介して行う。
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
106
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
107 Session Manager同士を接続するにはユーザがGUI操作によって接続先のSession Managerを決定し、sm\_joinコマンドを発行する。
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
108 sm\_joinコマンドを発行して接続してきたほうをslave、接続されたほうをmasterとし、全てのSession Managerの接続はTree構造を形成する。
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
109
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
110 sm\_joinコマンドを受け取ったSession Managerが既にmasterだった場合、sm\_join\_ackを全てのslaveに送信する。slaveだった場合はmasterの方向へsm\_joinコマンドを送信する。slaveがackを受け取った場合はTree構造の子の方向へackを送信する。
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
111
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
112 \begin{figure}[htpb]
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
113 \begin{center}
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
114 \includegraphics[scale=.3]{figure/sm_join.pdf}
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
115 \end{center}
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
116 \caption{sm\_joinコマンド}
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
117 \label{fig:sm_join}
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
118 \end{figure}
4742b1e4da3a modify merge,
one
parents: 0
diff changeset
119
0
39af8ab46cbb (no commit message)
one
parents:
diff changeset
120 %エディタの接続
39af8ab46cbb (no commit message)
one
parents:
diff changeset
121 \subsection{エディタの接続}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
122
39af8ab46cbb (no commit message)
one
parents:
diff changeset
123 REPを使用して複数のエディタ同士でテキストの相互編集を行うにはまず、エディタへのユーザの操作によりjoinコマンド、またはputコマンドを発行する。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
124 すると、エディタは自動的にデフォルトのSession Managerに接続する。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
125 putによって接続するとSession Manager側にSessionが生成される、エディタは自動的にそのSessionに接続する。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
126 joinで接続を行うと、このエディタ接続がSession Manager側のGUIに反映される。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
127 そして、ユーザはSession ManagerへのGUI操作により、joinによって接続したエディタがどのSessionに接続するかを決定する。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
128
39af8ab46cbb (no commit message)
one
parents:
diff changeset
129 \begin{figure}[htpb]
39af8ab46cbb (no commit message)
one
parents:
diff changeset
130 \begin{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
131 \includegraphics[scale=.5]{figure/use_case_put_join3.pdf}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
132 \end{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
133 \caption{エディタの接続}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
134 \label{fig:use_case_put_join3}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
135 \end{figure}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
136
39af8ab46cbb (no commit message)
one
parents:
diff changeset
137 リモートホスト間で通信を行う場合にはまず、Session Managerどうしの接続を行う。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
138 この接続はSession Managerへのユーザ操作によって行う。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
139
39af8ab46cbb (no commit message)
one
parents:
diff changeset
140 Session Manager同士の接続が確立したら、Session Manager 同士の接続が確立したら、エディタ側から put/join コマンドによりローカルホストの Session Manager へ接続を行う。
39af8ab46cbb (no commit message)
one
parents:
diff changeset
141 これを受けとったSession Managerは、Sessionの追加やエディタの追加を他のSession Managerにupdateコマンドによって通知する(図\ref{fig:use_case_put_join_over_sm})。\\
39af8ab46cbb (no commit message)
one
parents:
diff changeset
142
39af8ab46cbb (no commit message)
one
parents:
diff changeset
143 \begin{figure}[htpb]
39af8ab46cbb (no commit message)
one
parents:
diff changeset
144 \begin{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
145 \includegraphics[scale=.3]{figure/use_case_put_join_over_sm.pdf}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
146 \end{center}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
147 \caption{Session Managerを介したエディタの接続}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
148 \label{fig:use_case_put_join_over_sm}
39af8ab46cbb (no commit message)
one
parents:
diff changeset
149 \end{figure}