annotate slide/thesis.md @ 17:55e745a21506 default tip

add abstruct & slide
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Sun, 16 Feb 2020 17:54:28 +0900
parents 7293b6481e32
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: 分散フレームワークChristieを用いたリモートエディタの実装
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: Takahiro Ikki, Shinji Kono
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 profile: 琉球大学
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 lang: Japanese
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 code-engine: coderay
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 ## 研究目的, 背景
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 - ペアプログラミングなどでは同時に複数人が一つのファイルを編集することができるリモートエディタが有効である。
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
9 - 既存のリモートエディタアプリケーションとしてVisual Stdio Codeのlive share機能があげられる。
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 - 編集に参加するユーザーがそれぞれ好きなエディタが使えるアプリケーションを作成する。
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
11 - 本研究室で開発している分散フレームワークChristieはGearという概念の性質上リモートエディタと相性が良い。
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
13 <!--
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 ## 発表の流れ
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 - リモートエディタの機能と開発手順の解説
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
16 - javaで制作したテスト用エディタ
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
17 - コマンドパターンによる命令オブジェクトの作成
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
18 - 編集位置の相違とその解消方法
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 - スター型接続によるネットワーク通信
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 - Christieの解説
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 - Gearの概念
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 - アノテーション
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 - TopologyManager
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 - 今後の課題とまとめ
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
25 !-->
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
27 ## リモートエディタの概要説明
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
28 - 本研究で作成するリモートエディタはChristieの機能を用いて通信環境を構成する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
29 - 同期編集セッションに接続したユーザーは自身のマシン上でエディタを使って編集対象ファイルを開く。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
30 - ユーザーが起こしたファイルへの変更を、命令コマンドとして接続しているサーバー(ハブ)へ送信&実行させる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
31 - 命令コマンドはサーバーへ集められ、サーバーは受け取ったコマンドを他の接続ノードへ送信し、実行させる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
32
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
33 <div style="text-align: center;">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
34  <img src="images/RemoteEditor.pdf" alt="MetaGear" width="800">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
35 </div>
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
36
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
37
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
38 ## テスト用テキストエディタ
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
39 - 通信の構成を行うChristieはjava言語で作成されているため、javaのswingを用いてテキストエディタを制作した。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
40 - エディタ部分の入力、削除の取得はDocument Listenerクラスを使った。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
41 - insertUpdate、removeUpdateメソッドがそれぞれ挿入、削除を検知した時に動作する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
42 - このエディタはファイルの内容をオフセット番号で取り扱っている。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
43
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
44 <div style="text-align: center;">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
45  <img src="images/Editor.png" alt="MetaGear" width="800">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
46 </div>
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
47
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
48 ## DocumentListenerの記述部分
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
49
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
50 ```
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
51 public class MyDocumentListener implements DocumentListener {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
52 @Override
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
53 public void insertUpdate(DocumentEvent e) {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
54 Document doc = e.getDocument();
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
55 loc = e.getOffset();
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
56 System.out.println(loc);
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
57
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
58 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
59
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
60 @Override
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
61 public void removeUpdate(DocumentEvent e) {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
62 Document doc = e.getDocument();
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
63 sendLoc = e.getOffset();
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
64 System.out.println("delete " + sendLoc);
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
65 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
66 @Override
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
67 public void changedUpdate(DocumentEvent e) {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
68 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
69 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
70 ```
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
71
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
72 ## コマンドパターンの解説
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
73 - リモートエディタの通信では、各ノード(参加ユーザのエディタ)がそれぞれ自身のファイルの変更内容を他のノードに送信する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
74 - コマンドパターンとは命令を一つのオブジェクトとして表現するプログラム手法である。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
75 - 命令を表すクラスを作成し、インスタンスを作成と同時に命令の中身を入力することで命令を作成する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
76 - リモートエディタにおいては「オフセットn番目に に 文字列 "A"を入力した」という変更を命令にして送信する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
77 - コマンドパターンの利点として、
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
78 - ChristieのGearの概念と相性がいい。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
79 - 命令に必要な内容をまとめて送信するため、時間差による相違の発生が防げる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
80 - オブジェクトとして取り扱えるため管理が行いやすい。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
81
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
82 ```
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
83 package christie.example.RemoteTake;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
84 import org.msgpack.annotation.Message;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
85
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
86 @Message
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
87 class RTCommand {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
88 public String line;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
89 public String cmd;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
90 public int offset;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
91
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
92 public RTCommand () {}
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
93
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
94 public RTCommand(String cmd, String line, int i) {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
95 this.cmd = cmd;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
96 this.line = line;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
97 this.offset = i;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
98 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
99
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
100 @Override
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
101 public String toString() {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
102 return "RTCommand{" +
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
103 "line='" + line + '\'' +
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
104 ", cmd='" + cmd + '\'' +
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
105 ", offset=" + offset +
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
106 '}';
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
107 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
108 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
109 ```
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
110
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
111
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
112 ## コマンドパターン実装の際に起こった問題
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
113 - クラスを他ノードに送信するためには、クラスをシリアライズして送信する必要がある。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
114 - コマンドの送信にはmsgpackクラスとjavassistを利用している。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
115 - しかし、送信がうまく行えなかったため、原因を調査した。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
116 - javaのバージョン進行のため、msgpackバージョン0.6.12が非対称となっていた。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
117 - msgpackの最新バージョン0.8.20はシリアライズ機能が含まれなくなった。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
118 - 以上の原因に対処するため
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
119 - javassistのバージョンを最新版へ変更した。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
120 - シリアライズする命令クラスに対し、クラスをpublicに変更した。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
121 - 以上の対処によりコマンドパターンでの命令実装を行うことができた。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
122 - 自身でシリアライズ機能をChristieに内蔵してしまえば、これらのパッケージは不要になる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
123
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
124 ## 編集位置の相違
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
125 - 同期編集のセッションでは命令コマンドの送信のすれ違いにより、ノードごとのファイル状態が異なってしまうことがある。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
126 - EditorAとEditorBはそれぞれの命令を自身のエディタバッファに施してから命令を送信するため、お互いバッファ状態が異なる状態で受け取った命令を実行してしまう。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
127
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
128 <div style="text-align: center;">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
129  <img src="images/difference_offset.pdf" alt="MetaGear" width="800">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
130 </div>
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
131
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
132 ## 編集の相違の解消
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
133 - 同期編集のセッションはスター型の通信接続で行うため、サーバー対複数ノードの通信間で相違が発生する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
134 - 編集の相違を防ぐためには二つの処理を行う必要がある。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
135 - サーバーとノード間の命令のすれ違いが発生したことを検知する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
136 - すれ違いが発生した際に、オフセットのズレを修正する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
137 - サーバーが正しいファイルの状態を保持するためサーバーの状態にノードが合わせる必要がある。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
138
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
139 ## 命令コマンドに番号をつけ相違を解消する
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
140 - 命令コマンド番号には以下の特性がある。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
141 - 全てのノード(サーバーを含める)は事前に処理した命令コマンドの番号を記憶している。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
142 - 新しく作られた命令コマンドは作られたノードの命令実行済み番号+1 を自身の命令コマンド番号とする。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
143 - ノードは自身が作成したか、他のノードに送られてきたかに関わらず命令コマンドを実行したら命令実行済み番号をその命令コマンドの番号と同じにする。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
144 - もしノードが送られてきた命令コマンドを見て、そのコマンドが自身の実行済み番号と同値以下の場合、送信元のノードとの命令のすれ違いが発生していることが分かる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
145
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
146 <div style="text-align: center;">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
147  <img src="images/FixCommand.pdf" alt="MetaGear" width="800">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
148 </div>
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
149
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
150 ## すれ違いが発生した際の処理
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
151 - 全てのノードは自分が実行した命令コマンドを記録しており、後からオフセットや文字列を取り出すことができる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
152 - すれ違いが発生した時点からの命令の中身を集計、参照しすれ違いで送られてきたコマンドを修正する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
153 - insertを例とすると
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
154 - 受け取ったコマンドのオフセット > 受信コマンドとすれ違ったコマンドのオフセット のとき、受診したコマンドのオフセットに+1 する。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
155 - 受け取ったコマンドのオフセット <= 受信コマンドとすれ違ったコマンドのオフセット のとき、受診したコマンドのオフセットを変えずにそのまま実行できる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
156
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
157
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
158
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
159 ## スター型通信
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
160 - Christieにはノードの通信接続を行うTopologyManagerという機能がある。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
161 - 同期通信はスター型での接続を行う。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
162 - スター型通信の利点は
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
163 - サーバーが正しいファイル状態を保持するため、整合性を保つことができる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
164 - どこかのノードが切断されても、要害の範囲をそのノードのみに抑えることができる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
165 - 新しいノードが参加した、もしくは復帰の際にはサーバーのファイル状況を参照するのみで参加、復帰ができる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
166
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
167 <div style="text-align: center;">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
168  <img src="images/Star-Topology.pdf" alt="MetaGear" width="800">
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
169 </div>
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 ## Christie
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 - Christieは当研究室で開発している、信頼性を重視した分散フレームワークである.
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 - 現在はjava上で開発されているが、別言語(CbC)で構成されたGearsOSに組み込む予定があるため,それに向けて書き換え可能な構成となっている。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 - ChristieではデータをGearという単位で分割して記述を行う。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 - CodeGear(以下CG)
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 - スレッドやクラスに相当し、javaの継承を用いて記述する。keyに全てのDGが格納された際に動作する。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 - DataGear(以下DG)
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 - DGは変数に相当し、CG内でアノテーションを用いてデータを取り出せる。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 - CodeGearManager(以下CGM)
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 - ノードに相当し, DG, CG, DataGearManagerの管理をする.
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 - DataGearManager(以下DGM)
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 - DGを管理するものであり, putという操作にて変数(DG)をkeyに格納する。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
185 ## Christieのコード例
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
186 ```
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
187 package christie.example.HelloWorld;
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
189 import christie.codegear.CodeGearManager;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
190 import christie.codegear.StartCodeGear;
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
192 public class StartHelloWorld extends StartCodeGear {
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
194 public StartHelloWorld(CodeGearManager cgm) {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
195 super(cgm);
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 }
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
198 public static void main(String[] args){
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
199 CodeGearManager cgm = createCGM(10000);
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
200 cgm.setup(new HelloWorldCodeGear());
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
201 cgm.setup(new FinishHelloWorld());
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
202 cgm.getLocalDGM().put("helloWorld","hello");
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
203 cgm.getLocalDGM().put("helloWorld","world");
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 }
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
205 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
206 ```
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
208 ```
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
209 ChristieDaemon.listen: bind to /0:0:0:0:0:0:0:0:10000
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
210 hello world
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
211 ```
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
212
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
213 <!--
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
214 - 立ち上げ後はManager名を指定してDataSegmentAPI用いてDSのやり取りを行うため、プログラマはManager名を意識することでLocalへの操作もRemoteへの操作も同様に扱える。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
215 -->
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 <!--
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 ## Christieの言語概念
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 - CGはスレッド, クラスに相当し, javaの継承を用いて記述する.
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 - DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる.
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 - CGMはノードであり, DG, CG, DGMを管理する.
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 - DGMはDGを管理するものであり, putという操作により, 変数データ(DG)を格納できる.
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 - DGMにはLocalDGMとRemoteDGMが存在する。LocalDGMは各ノード固有のデータベースである。RemoteDSMは他ノードのLocalDGMに対応するproxyであり、接続しているノードの数だけ存在する。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 - DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMに対しDGを格納し, Remoteの場合は接続したRemoteさきのCGMのDGMにDGを格納する.
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 -->
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
229
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
230 <!--
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 ## DGM
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
232 - CGMはDGをputという操作を使って、自身や他ノードのDGMに書き込ませる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
233 - LocalDGMが自身、RemoteDGMが他ノードのDGMである。
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 <div style="text-align: center;">
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
236 <img src="images/remote_datasegment.pdf" alt="MetaGear" width="800">
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 </div>
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
239 !-->
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
240
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 <!--
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 - RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 -->
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 ## DGのアノテーション
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 - DGを取り出す際にはCG内で宣言した変数にアノテーションをつける。DGアノテーションには
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 Take、Peek、TakeFrom、PeekFrom、の4つがある。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 - Take
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 - 先頭のDGを読み込み、そのDGを削除する。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 - Peek
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 - 先頭のDGを読み込むが、DGが消去されない。そのため特に操作をしない場合、同じデータを参照し続ける。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 - TakeFrom
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 - Remote DGM nameを指定することで、その接続先のDGM からTake操作をおこえる。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 - PeekFrom
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 - Remote DGM nameを指定することで、その接続先のDGM からPeek操作をおこえる。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
258 ```
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
259 package christie.example.HelloWorld;
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
261 import christie.annotation.Peek;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
262 import christie.annotation.Take;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
263 import christie.codegear.CodeGear;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
264 import christie.codegear.CodeGearManager;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
265
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
266 public class HelloWorldCodeGear extends CodeGear {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
267
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
268 @Take
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
269 String helloWorld;
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
270
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
271 @Override
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
272 protected void run(CodeGearManager cgm) {
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
273 System.out.print(helloWorld + " ");
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
274 cgm.setup(new HelloWorldCodeGear());
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
275 cgm.getLocalDGM().put(helloWorld,helloWorld);
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
276 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
277 }
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
278 ```
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
279
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
280 <!--
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 ## TopologyManager
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 - TopologyManagerとはTopologyを形成のために、参加を表明したノード、TopologyNodeに名前を与え、必要があればノード同士の配線を行うノードである。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 - TopologyManagerのTopology形成方法として、静的Topologyと動的Topologyがある。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 - 動的Topologyは参加を表明したノードに対し、動的にノード同士の関係を作る。例えばTreeを構成する場合、参加したノードから順にrootに近い役割を与え、またCodeGearはノードが参加し、parentに接続された後に実行される。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 - 静的Toopologyはdotファイルを与えることノード関係の構築を行う。
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
286
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 ```Code
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 digraph test {
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 node0 -> node1 [label="right"]
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 node1 -> node2 [label="right"]
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 node2 -> node0 [label="right"]
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 }
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 ```
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 <div style="text-align: center;">
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
296  <img src="images/ring.pdf" alt="MetaGear" width="500">
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 </div>
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
298 !-->
16
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
299
7293b6481e32 add slide & tweak
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 ## まとめとこれから
17
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
301 - 本研究発表ではリモートエディタの開発とそれに伴う技術について述べた。現時点で実装できた構成は以下である。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
302 - リモートエディタの基本となる命令のやり取り部分のコマンドパターン実装。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
303 - 編集相違を防ぐためのアルゴリズムの発案と検証。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
304 - 現時点では最低限のセッションを動かすまでの最低限の実装は終わっていない。これから取り組まなければならない課題として以下が挙げられる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
305 - スター型Topologyの接続を動的に行わせる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
306 - 編集するファイルの共有方法
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
307 - ファイルをそのまま送信すると、負担が大きいと予想される。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
308 - 既存のエディタを同期通信に対応させる。
55e745a21506 add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
309 - 以上の課題の課題に取り組み、これからも実装を続けていきたい。