Mercurial > hg > Papers > 2020 > itsuki-thesis
annotate slide/thesis.pdf.html @ 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 |
rev | line source |
---|---|
16 | 1 |
2 | |
3 | |
4 | |
5 | |
6 <!DOCTYPE html> | |
7 <html> | |
8 <head> | |
9 <meta http-equiv="content-type" content="text/html;charset=utf-8"> | |
10 <title>分散フレームワークChristieを用いたリモートエディタの実装</title> | |
11 | |
12 <meta name="generator" content="Slide Show (S9) v4.1.0 on Ruby 2.6.3 (2019-04-16) [universal.x86_64-darwin19]"> | |
13 <meta name="author" content="Takahiro Ikki, Shinji Kono" > | |
14 | |
15 <!-- style sheet links --> | |
16 <link rel="stylesheet" href="s6/themes/screen.css" media="screen"> | |
17 <link rel="stylesheet" href="s6/themes/print.css" media="print"> | |
18 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection"> | |
19 | |
20 <!-- JS --> | |
21 <script src="s6/js/jquery-1.11.3.min.js"></script> | |
22 <script src="s6/js/jquery.slideshow.js"></script> | |
23 <script src="s6/js/jquery.slideshow.counter.js"></script> | |
24 <script src="s6/js/jquery.slideshow.controls.js"></script> | |
25 <script src="s6/js/jquery.slideshow.footer.js"></script> | |
26 <script src="s6/js/jquery.slideshow.autoplay.js"></script> | |
27 | |
28 <!-- prettify --> | |
29 <link rel="stylesheet" href="scripts/prettify.css"> | |
30 <script src="scripts/prettify.js"></script> | |
31 | |
32 <style> | |
33 .slide {page-break-after: always;} | |
34 </style> | |
35 | |
36 | |
37 | |
38 | |
39 </head> | |
40 <body> | |
41 | |
42 <div class="layout"> | |
43 <div id="header"></div> | |
44 <div id="footer"> | |
45 <div align="right"> | |
46 <img src="s6/images/logo.svg" width="200px"> | |
47 </div> | |
48 </div> | |
49 </div> | |
50 | |
51 <div class="presentation"> | |
52 | |
53 <div class='slide cover'> | |
54 <table width="90%" height="90%" border="0" align="center"> | |
55 <tr> | |
56 <td> | |
57 <div align="center"> | |
58 <h1><font color="#808db5">分散フレームワークChristieを用いたリモートエディタの実装</font></h1> | |
59 </div> | |
60 </td> | |
61 </tr> | |
62 <tr> | |
63 <td> | |
64 <div align="left"> | |
65 Takahiro Ikki, Shinji Kono | |
66 琉球大学 | |
67 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> | |
68 </div> | |
69 </td> | |
70 </tr> | |
71 </table> | |
72 </div> | |
73 | |
74 | |
75 <div class='slide'> | |
76 | |
77 <!-- _S9SLIDE_ --> | |
78 <h2 id="研究目的-背景">研究目的, 背景</h2> | |
79 <ul> | |
80 <li>ペアプログラミングなどでは同時に複数人が一つのファイルを編集することができるリモートエディタが有効である。</li> | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
81 <li>既存のリモートエディタアプリケーションとしてVisual Stdio Codeのlive share機能があげられる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
82 <li>編集に参加するユーザーがそれぞれ好きなエディタが使えるアプリケーションを作成する。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
83 <li>本研究室で開発している分散フレームワークChristieはGearという概念の性質上リモートエディタと相性が良い。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
84 </ul> |
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 <!-- |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
87 ## 発表の流れ |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
88 - リモートエディタの機能と開発手順の解説 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
89 - javaで制作したテスト用エディタ |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
90 - コマンドパターンによる命令オブジェクトの作成 |
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 - スター型接続によるネットワーク通信 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
93 - Christieの解説 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
94 - Gearの概念 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
95 - アノテーション |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
96 - TopologyManager |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
97 - 今後の課題とまとめ |
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 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
101 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
102 </div> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
103 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
104 <div class='slide'> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
105 <!-- _S9SLIDE_ --> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
106 <h2 id="リモートエディタの概要説明">リモートエディタの概要説明</h2> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
107 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
108 <li>本研究で作成するリモートエディタはChristieの機能を用いて通信環境を構成する。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
109 <li>同期編集セッションに接続したユーザーは自身のマシン上でエディタを使って編集対象ファイルを開く。 |
16 | 110 <ul> |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
111 <li>ユーザーが起こしたファイルへの変更を、命令コマンドとして接続しているサーバー(ハブ)へ送信&実行させる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
112 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
113 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
114 <li>命令コマンドはサーバーへ集められ、サーバーは受け取ったコマンドを他の接続ノードへ送信し、実行させる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
115 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
116 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
117 <div style="text-align: center;"> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
118 <img src="images/RemoteEditor.pdf" alt="MetaGear" width="800" /> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
119 </div> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
120 |
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 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
123 </div> |
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 <div class='slide'> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
126 <!-- _S9SLIDE_ --> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
127 <h2 id="テスト用テキストエディタ">テスト用テキストエディタ</h2> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
128 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
129 <li>通信の構成を行うChristieはjava言語で作成されているため、javaのswingを用いてテキストエディタを制作した。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
130 <li>エディタ部分の入力、削除の取得はDocument Listenerクラスを使った。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
131 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
132 <li>insertUpdate、removeUpdateメソッドがそれぞれ挿入、削除を検知した時に動作する。</li> |
16 | 133 </ul> |
134 </li> | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
135 <li>このエディタはファイルの内容をオフセット番号で取り扱っている。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
136 </ul> |
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 <div style="text-align: center;"> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
139 <img src="images/Editor.png" alt="MetaGear" width="800" /> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
140 </div> |
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 |
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 </div> |
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 class='slide'> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
147 <!-- _S9SLIDE_ --> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
148 <h2 id="documentlistenerの記述部分">DocumentListenerの記述部分</h2> |
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 <pre><code>public class MyDocumentListener implements DocumentListener { |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
151 @Override |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
152 public void insertUpdate(DocumentEvent e) { |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
153 Document doc = e.getDocument(); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
154 loc = e.getOffset(); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
155 System.out.println(loc); |
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 @Override |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
160 public void removeUpdate(DocumentEvent e) { |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
161 Document doc = e.getDocument(); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
162 sendLoc = e.getOffset(); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
163 System.out.println("delete " + sendLoc); |
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 @Override |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
166 public void changedUpdate(DocumentEvent e) { |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
167 } |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
168 } |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
169 </code></pre> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
170 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
171 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
172 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
173 </div> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
174 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
175 <div class='slide'> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
176 <!-- _S9SLIDE_ --> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
177 <h2 id="コマンドパターンの解説">コマンドパターンの解説</h2> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
178 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
179 <li>リモートエディタの通信では、各ノード(参加ユーザのエディタ)がそれぞれ自身のファイルの変更内容を他のノードに送信する。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
180 <li>コマンドパターンとは命令を一つのオブジェクトとして表現するプログラム手法である。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
181 <li>命令を表すクラスを作成し、インスタンスを作成と同時に命令の中身を入力することで命令を作成する。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
182 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
183 <li>リモートエディタにおいては「オフセットn番目に に 文字列 “A”を入力した」という変更を命令にして送信する。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
184 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
185 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
186 <li>コマンドパターンの利点として、 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
187 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
188 <li>ChristieのGearの概念と相性がいい。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
189 <li>命令に必要な内容をまとめて送信するため、時間差による相違の発生が防げる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
190 <li>オブジェクトとして取り扱えるため管理が行いやすい。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
191 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
192 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
193 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
194 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
195 <pre><code> package christie.example.RemoteTake; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
196 import org.msgpack.annotation.Message; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
197 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
198 @Message |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
199 class RTCommand { |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
200 public String line; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
201 public String cmd; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
202 public int offset; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
203 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
204 public RTCommand () {} |
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 public RTCommand(String cmd, String line, int i) { |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
207 this.cmd = cmd; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
208 this.line = line; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
209 this.offset = i; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
210 } |
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 @Override |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
213 public String toString() { |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
214 return "RTCommand{" + |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
215 "line='" + line + '\'' + |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
216 ", cmd='" + cmd + '\'' + |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
217 ", offset=" + offset + |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
218 '}'; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
219 } |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
220 } |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
221 </code></pre> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
222 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
223 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
224 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
225 </div> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
226 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
227 <div class='slide'> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
228 <!-- _S9SLIDE_ --> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
229 <h2 id="コマンドパターン実装の際に起こった問題">コマンドパターン実装の際に起こった問題</h2> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
230 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
231 <li>クラスを他ノードに送信するためには、クラスをシリアライズして送信する必要がある。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
232 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
233 <li>コマンドの送信にはmsgpackクラスとjavassistを利用している。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
234 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
235 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
236 <li>しかし、送信がうまく行えなかったため、原因を調査した。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
237 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
238 <li>javaのバージョン進行のため、msgpackバージョン0.6.12が非対称となっていた。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
239 <li>msgpackの最新バージョン0.8.20はシリアライズ機能が含まれなくなった。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
240 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
241 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
242 <li>以上の原因に対処するため |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
243 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
244 <li>javassistのバージョンを最新版へ変更した。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
245 <li>シリアライズする命令クラスに対し、クラスをpublicに変更した。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
246 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
247 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
248 <li>以上の対処によりコマンドパターンでの命令実装を行うことができた。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
249 <li>自身でシリアライズ機能をChristieに内蔵してしまえば、これらのパッケージは不要になる。</li> |
16 | 250 </ul> |
251 | |
252 | |
253 | |
254 </div> | |
255 | |
256 <div class='slide'> | |
257 <!-- _S9SLIDE_ --> | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
258 <h2 id="編集位置の相違">編集位置の相違</h2> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
259 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
260 <li>同期編集のセッションでは命令コマンドの送信のすれ違いにより、ノードごとのファイル状態が異なってしまうことがある。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
261 <li>EditorAとEditorBはそれぞれの命令を自身のエディタバッファに施してから命令を送信するため、お互いバッファ状態が異なる状態で受け取った命令を実行してしまう。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
262 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
263 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
264 <div style="text-align: center;"> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
265 <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
|
266 </div> |
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 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
269 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
270 </div> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
271 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
272 <div class='slide'> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
273 <!-- _S9SLIDE_ --> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
274 <h2 id="編集の相違の解消">編集の相違の解消</h2> |
16 | 275 <ul> |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
276 <li>同期編集のセッションはスター型の通信接続で行うため、サーバー対複数ノードの通信間で相違が発生する。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
277 <li>編集の相違を防ぐためには二つの処理を行う必要がある。 |
16 | 278 <ul> |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
279 <li>サーバーとノード間の命令のすれ違いが発生したことを検知する。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
280 <li>すれ違いが発生した際に、オフセットのズレを修正する。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
281 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
282 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
283 <li>サーバーが正しいファイルの状態を保持するためサーバーの状態にノードが合わせる必要がある。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
284 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
285 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
286 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
287 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
288 </div> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
289 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
290 <div class='slide'> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
291 <!-- _S9SLIDE_ --> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
292 <h2 id="命令コマンドに番号をつけ相違を解消する">命令コマンドに番号をつけ相違を解消する</h2> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
293 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
294 <li>命令コマンド番号には以下の特性がある。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
295 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
296 <li>全てのノード(サーバーを含める)は事前に処理した命令コマンドの番号を記憶している。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
297 <li>新しく作られた命令コマンドは作られたノードの命令実行済み番号+1 を自身の命令コマンド番号とする。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
298 <li>ノードは自身が作成したか、他のノードに送られてきたかに関わらず命令コマンドを実行したら命令実行済み番号をその命令コマンドの番号と同じにする。</li> |
16 | 299 </ul> |
300 </li> | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
301 <li>もしノードが送られてきた命令コマンドを見て、そのコマンドが自身の実行済み番号と同値以下の場合、送信元のノードとの命令のすれ違いが発生していることが分かる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
302 </ul> |
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 <div style="text-align: center;"> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
305 <img src="images/FixCommand.pdf" alt="MetaGear" width="800" /> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
306 </div> |
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 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
310 </div> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
311 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
312 <div class='slide'> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
313 <!-- _S9SLIDE_ --> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
314 <h2 id="すれ違いが発生した際の処理">すれ違いが発生した際の処理</h2> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
315 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
316 <li>全てのノードは自分が実行した命令コマンドを記録しており、後からオフセットや文字列を取り出すことができる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
317 <li>すれ違いが発生した時点からの命令の中身を集計、参照しすれ違いで送られてきたコマンドを修正する。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
318 <li>insertを例とすると |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
319 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
320 <li>受け取ったコマンドのオフセット > 受信コマンドとすれ違ったコマンドのオフセット のとき、受診したコマンドのオフセットに+1 する。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
321 <li>受け取ったコマンドのオフセット <= 受信コマンドとすれ違ったコマンドのオフセット のとき、受診したコマンドのオフセットを変えずにそのまま実行できる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
322 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
323 </li> |
16 | 324 </ul> |
325 | |
326 | |
327 | |
328 </div> | |
329 | |
330 <div class='slide'> | |
331 <!-- _S9SLIDE_ --> | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
332 <h2 id="スター型通信">スター型通信</h2> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
333 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
334 <li>Christieにはノードの通信接続を行うTopologyManagerという機能がある。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
335 <li>同期通信はスター型での接続を行う。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
336 <li>スター型通信の利点は |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
337 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
338 <li>サーバーが正しいファイル状態を保持するため、整合性を保つことができる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
339 <li>どこかのノードが切断されても、要害の範囲をそのノードのみに抑えることができる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
340 <li>新しいノードが参加した、もしくは復帰の際にはサーバーのファイル状況を参照するのみで参加、復帰ができる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
341 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
342 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
343 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
344 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
345 <div style="text-align: center;"> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
346 <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
|
347 </div> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
348 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
349 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
350 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
351 </div> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
352 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
353 <div class='slide'> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
354 <!-- _S9SLIDE_ --> |
16 | 355 <h2 id="christie">Christie</h2> |
356 <ul> | |
357 <li>Christieは当研究室で開発している、信頼性を重視した分散フレームワークである.</li> | |
358 <li>現在はjava上で開発されているが、別言語(CbC)で構成されたGearsOSに組み込む予定があるため,それに向けて書き換え可能な構成となっている。</li> | |
359 <li>ChristieではデータをGearという単位で分割して記述を行う。 | |
360 <ul> | |
361 <li>CodeGear(以下CG) | |
362 <ul> | |
363 <li>スレッドやクラスに相当し、javaの継承を用いて記述する。keyに全てのDGが格納された際に動作する。</li> | |
364 </ul> | |
365 </li> | |
366 <li>DataGear(以下DG) | |
367 <ul> | |
368 <li>DGは変数に相当し、CG内でアノテーションを用いてデータを取り出せる。</li> | |
369 </ul> | |
370 </li> | |
371 <li>CodeGearManager(以下CGM) | |
372 <ul> | |
373 <li>ノードに相当し, DG, CG, DataGearManagerの管理をする.</li> | |
374 </ul> | |
375 </li> | |
376 <li>DataGearManager(以下DGM) | |
377 <ul> | |
378 <li>DGを管理するものであり, putという操作にて変数(DG)をkeyに格納する。</li> | |
379 </ul> | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
380 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
381 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
382 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
383 </ul> |
16 | 384 |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
385 |
16 | 386 |
387 </div> | |
388 | |
389 <div class='slide'> | |
390 <!-- _S9SLIDE_ --> | |
391 <h2 id="christieのコード例">Christieのコード例</h2> | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
392 <pre><code>package christie.example.HelloWorld; |
16 | 393 |
394 import christie.codegear.CodeGearManager; | |
395 import christie.codegear.StartCodeGear; | |
396 | |
397 public class StartHelloWorld extends StartCodeGear { | |
398 | |
399 public StartHelloWorld(CodeGearManager cgm) { | |
400 super(cgm); | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
401 } |
16 | 402 |
403 public static void main(String[] args){ | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
404 CodeGearManager cgm = createCGM(10000); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
405 cgm.setup(new HelloWorldCodeGear()); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
406 cgm.setup(new FinishHelloWorld()); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
407 cgm.getLocalDGM().put("helloWorld","hello"); |
16 | 408 cgm.getLocalDGM().put("helloWorld","world"); |
409 } | |
410 } | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
411 </code></pre> |
16 | 412 |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
413 <pre><code>ChristieDaemon.listen: bind to /0:0:0:0:0:0:0:0:10000 |
16 | 414 hello world |
415 </code></pre> | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
416 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
417 <!-- |
16 | 418 - 立ち上げ後はManager名を指定してDataSegmentAPI用いてDSのやり取りを行うため、プログラマはManager名を意識することでLocalへの操作もRemoteへの操作も同様に扱える。 |
419 --> | |
420 | |
421 <!-- | |
422 | |
423 ## Christieの言語概念 | |
424 - CGはスレッド, クラスに相当し, javaの継承を用いて記述する. | |
425 - DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる. | |
426 - CGMはノードであり, DG, CG, DGMを管理する. | |
427 - DGMはDGを管理するものであり, putという操作により, 変数データ(DG)を格納できる. | |
428 - DGMにはLocalDGMとRemoteDGMが存在する。LocalDGMは各ノード固有のデータベースである。RemoteDSMは他ノードのLocalDGMに対応するproxyであり、接続しているノードの数だけ存在する。 | |
429 - DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMに対しDGを格納し, Remoteの場合は接続したRemoteさきのCGMのDGMにDGを格納する. | |
430 | |
431 --> | |
432 | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
433 <!-- |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
434 ## DGM |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
435 - CGMはDGをputという操作を使って、自身や他ノードのDGMに書き込ませる。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
436 - LocalDGMが自身、RemoteDGMが他ノードのDGMである。 |
16 | 437 |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
438 <div style="text-align: center;"> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
439 <img src="images/remote_datasegment.pdf" alt="MetaGear" width="800"> |
16 | 440 </div> |
441 | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
442 !--> |
16 | 443 |
444 <!-- | |
445 - RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。 | |
446 --> | |
447 | |
448 | |
449 | |
450 </div> | |
451 | |
452 <div class='slide'> | |
453 <!-- _S9SLIDE_ --> | |
454 <h2 id="dgのアノテーション">DGのアノテーション</h2> | |
455 <ul> | |
456 <li>DGを取り出す際にはCG内で宣言した変数にアノテーションをつける。DGアノテーションには | |
457 Take、Peek、TakeFrom、PeekFrom、の4つがある。 | |
458 <ul> | |
459 <li>Take | |
460 <ul> | |
461 <li>先頭のDGを読み込み、そのDGを削除する。</li> | |
462 </ul> | |
463 </li> | |
464 <li>Peek | |
465 <ul> | |
466 <li>先頭のDGを読み込むが、DGが消去されない。そのため特に操作をしない場合、同じデータを参照し続ける。</li> | |
467 </ul> | |
468 </li> | |
469 <li>TakeFrom | |
470 <ul> | |
471 <li>Remote DGM nameを指定することで、その接続先のDGM からTake操作をおこえる。</li> | |
472 </ul> | |
473 </li> | |
474 <li>PeekFrom | |
475 <ul> | |
476 <li>Remote DGM nameを指定することで、その接続先のDGM からPeek操作をおこえる。</li> | |
477 </ul> | |
478 </li> | |
479 </ul> | |
480 </li> | |
481 </ul> | |
482 | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
483 <pre><code>package christie.example.HelloWorld; |
16 | 484 |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
485 import christie.annotation.Peek; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
486 import christie.annotation.Take; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
487 import christie.codegear.CodeGear; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
488 import christie.codegear.CodeGearManager; |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
489 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
490 public class HelloWorldCodeGear extends CodeGear { |
16 | 491 |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
492 @Take |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
493 String helloWorld; |
16 | 494 |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
495 @Override |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
496 protected void run(CodeGearManager cgm) { |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
497 System.out.print(helloWorld + " "); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
498 cgm.setup(new HelloWorldCodeGear()); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
499 cgm.getLocalDGM().put(helloWorld,helloWorld); |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
500 } |
16 | 501 } |
502 </code></pre> | |
503 | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
504 <!-- |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
505 ## TopologyManager |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
506 - TopologyManagerとはTopologyを形成のために、参加を表明したノード、TopologyNodeに名前を与え、必要があればノード同士の配線を行うノードである。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
507 - TopologyManagerのTopology形成方法として、静的Topologyと動的Topologyがある。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
508 - 動的Topologyは参加を表明したノードに対し、動的にノード同士の関係を作る。例えばTreeを構成する場合、参加したノードから順にrootに近い役割を与え、またCodeGearはノードが参加し、parentに接続された後に実行される。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
509 - 静的Toopologyはdotファイルを与えることノード関係の構築を行う。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
510 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
511 ```Code |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
512 digraph test { |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
513 node0 -> node1 [label="right"] |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
514 node1 -> node2 [label="right"] |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
515 node2 -> node0 [label="right"] |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
516 } |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
517 ``` |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
518 |
16 | 519 <div style="text-align: center;"> |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
520 <img src="images/ring.pdf" alt="MetaGear" width="500"> |
16 | 521 </div> |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
522 !--> |
16 | 523 |
524 | |
525 | |
526 </div> | |
527 | |
528 <div class='slide'> | |
529 <!-- _S9SLIDE_ --> | |
530 <h2 id="まとめとこれから">まとめとこれから</h2> | |
17
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
531 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
532 <li>本研究発表ではリモートエディタの開発とそれに伴う技術について述べた。現時点で実装できた構成は以下である。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
533 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
534 <li>リモートエディタの基本となる命令のやり取り部分のコマンドパターン実装。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
535 <li>編集相違を防ぐためのアルゴリズムの発案と検証。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
536 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
537 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
538 <li>現時点では最低限のセッションを動かすまでの最低限の実装は終わっていない。これから取り組まなければならない課題として以下が挙げられる。 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
539 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
540 <li>スター型Topologyの接続を動的に行わせる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
541 <li>編集するファイルの共有方法 |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
542 <ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
543 <li>ファイルをそのまま送信すると、負担が大きいと予想される。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
544 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
545 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
546 <li>既存のエディタを同期通信に対応させる。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
547 </ul> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
548 </li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
549 <li>以上の課題の課題に取り組み、これからも実装を続けていきたい。</li> |
55e745a21506
add abstruct & slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
550 </ul> |
16 | 551 |
552 </div> | |
553 | |
554 | |
555 </div><!-- presentation --> | |
556 </body> | |
557 </html> |