comparison slide/thesis.pdf.html @ 16:7293b6481e32

add slide & tweak
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Sat, 15 Feb 2020 21:22:43 +0900
parents
children 55e745a21506
comparison
equal deleted inserted replaced
15:c7ab31269230 16:7293b6481e32
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>
81 <li>既存のリモートエディタアプリケーションとしてVisual Stdio Codeがあげられる。
82 <ul>
83 <li>しかし、セッションに参加する全員がVSCodeの環境を持っていなければならず、不便である。</li>
84 </ul>
85 </li>
86 <li>編集に参加するユーザーがそれぞれ好きなエディタが使えるアプリケーションを作成する。</li>
87 <li>本研究室で開発している分散フレームワークChristieを使い、簡潔な実装を目指す。</li>
88 </ul>
89
90
91
92 </div>
93
94 <div class='slide'>
95 <!-- _S9SLIDE_ -->
96 <h2 id="発表の流れ">発表の流れ</h2>
97 <ul>
98 <li>リモートエディタの機能と開発手順の解説</li>
99 <li>スター型接続によるネットワーク通信</li>
100 <li>Christieの解説
101 <ul>
102 <li>Gearの概念</li>
103 <li>アノテーション</li>
104 <li>TopologyManager</li>
105 </ul>
106 </li>
107 <li>今後の課題とまとめ</li>
108 </ul>
109
110
111
112 </div>
113
114 <div class='slide'>
115 <!-- _S9SLIDE_ -->
116 <h2 id="christie">Christie</h2>
117 <ul>
118 <li>Christieは当研究室で開発している、信頼性を重視した分散フレームワークである.</li>
119 <li>現在はjava上で開発されているが、別言語(CbC)で構成されたGearsOSに組み込む予定があるため,それに向けて書き換え可能な構成となっている。</li>
120 <li>ChristieではデータをGearという単位で分割して記述を行う。
121 <ul>
122 <li>CodeGear(以下CG)
123 <ul>
124 <li>スレッドやクラスに相当し、javaの継承を用いて記述する。keyに全てのDGが格納された際に動作する。</li>
125 </ul>
126 </li>
127 <li>DataGear(以下DG)
128 <ul>
129 <li>DGは変数に相当し、CG内でアノテーションを用いてデータを取り出せる。</li>
130 </ul>
131 </li>
132 <li>CodeGearManager(以下CGM)
133 <ul>
134 <li>ノードに相当し, DG, CG, DataGearManagerの管理をする.</li>
135 </ul>
136 </li>
137 <li>DataGearManager(以下DGM)
138 <ul>
139 <li>DGを管理するものであり, putという操作にて変数(DG)をkeyに格納する。</li>
140 </ul>
141
142
143
144 </div>
145
146 <div class='slide'>
147 <!-- _S9SLIDE_ -->
148 <h2 id="christieのコード例">Christieのコード例</h2>
149 <pre><code class="language-code">package christie.example.HelloWorld;
150
151 import christie.codegear.CodeGearManager;
152 import christie.codegear.StartCodeGear;
153
154 public class StartHelloWorld extends StartCodeGear {
155
156 public StartHelloWorld(CodeGearManager cgm) {
157 super(cgm);
158 }
159
160 public static void main(String[] args){
161 CodeGearManager cgm = createCGM(10000); #ポート番号を指定してCGMを立ち上げ。
162 cgm.setup(new HelloWorldCodeGear()); #立ち上げたCGMへCGを待ちあわせる。
163 cgm.getLocalDGM().put("helloWorld","hello"); #keyname "helloWorld"に文字列helloをput
164 cgm.getLocalDGM().put("helloWorld","world");
165 }
166 }
167
168 </code></pre>
169 <pre><code>ChristieDaemon.listen: bind to /0:0:0:0:0:0:0:0:10000
170 hello world
171 </code></pre>
172 <!--
173 - 立ち上げ後はManager名を指定してDataSegmentAPI用いてDSのやり取りを行うため、プログラマはManager名を意識することでLocalへの操作もRemoteへの操作も同様に扱える。
174 -->
175 </li>
176 </ul>
177 </li>
178 </ul>
179
180 <!--
181
182 ## Christieの言語概念
183 - CGはスレッド, クラスに相当し, javaの継承を用いて記述する.
184 - DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる.
185 - CGMはノードであり, DG, CG, DGMを管理する.
186 - DGMはDGを管理するものであり, putという操作により, 変数データ(DG)を格納できる.
187 - DGMにはLocalDGMとRemoteDGMが存在する。LocalDGMは各ノード固有のデータベースである。RemoteDSMは他ノードのLocalDGMに対応するproxyであり、接続しているノードの数だけ存在する。
188 - DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMに対しDGを格納し, Remoteの場合は接続したRemoteさきのCGMのDGMにDGを格納する.
189
190 -->
191
192
193
194 </div>
195
196 <div class='slide'>
197 <!-- _S9SLIDE_ -->
198 <h2 id="dgm">DGM</h2>
199 <ul>
200 <li>DGMは分散システムの肝となる他のノード間とのデータのやり取りの際に重要となる。</li>
201 <li>DGMにはLocalDGMとRemoteDGMが存在する。
202 <ul>
203 <li>LocalDGM
204 <ul>
205 <li>LocalなDGMのプールのkeyにデータの書き込みを行う。</li>
206 </ul>
207 </li>
208 <li>RemoteDGM
209 <ul>
210 <li>Localに存在する、他のノードのLocalDGMに対応するプールのkeyにデータを書き込みする。接続しているノードの数だけ存在する。</li>
211 </ul>
212 </li>
213 </ul>
214 </li>
215 <li>DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMへ、 Remoteの場合は接続したRemote先のCGMのDGMにDGを格納する.</li>
216 </ul>
217
218 <div style="text-align: center;">
219 <img src="../paper/images/remote_datasegment.svg" alt="MetaGear" width="800" />
220 </div>
221
222 <!--
223 - RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。
224 -->
225
226
227
228 </div>
229
230 <div class='slide'>
231 <!-- _S9SLIDE_ -->
232 <h2 id="annottation">Annottation</h2>
233 <ul>
234 <li>ChristieではInputDGの指定にはアノテーションを使う。</li>
235 <li>アノテーションとはクラスやメソッド、パッケージに対して、付加情報を記述できるJavaのMeta Computationである。</li>
236 <li>先頭に@をつけることで記述する。オリジナルのアノテーションを定義することもでき、Input
237 される型の変数を直接宣言し、変数名としてkeyを記述する。その上にアノテーションでTakeもしくはPeekを指定する。</li>
238 </ul>
239
240 <pre><code class="language-cc">package christie.example.HelloWorld;
241
242 import christie.annotation.Take;
243 import christie.codegear.CodeGear;
244 import christie.codegear.CodeGearManager;
245
246 public class HelloWorldCodeGear extends CodeGear {
247 @Take
248 String helloWorld;
249
250 @Override
251 protected void run(CodeGearManager cgm) {
252 System.out.print(helloWorld + " ");
253 cgm.setup(new HelloWorldCodeGear());
254 }
255 }
256
257 </code></pre>
258
259
260
261 </div>
262
263 <div class='slide'>
264 <!-- _S9SLIDE_ -->
265 <h2 id="dgのアノテーション">DGのアノテーション</h2>
266 <ul>
267 <li>DGを取り出す際にはCG内で宣言した変数にアノテーションをつける。DGアノテーションには
268 Take、Peek、TakeFrom、PeekFrom、の4つがある。
269 <ul>
270 <li>Take
271 <ul>
272 <li>先頭のDGを読み込み、そのDGを削除する。</li>
273 </ul>
274 </li>
275 <li>Peek
276 <ul>
277 <li>先頭のDGを読み込むが、DGが消去されない。そのため特に操作をしない場合、同じデータを参照し続ける。</li>
278 </ul>
279 </li>
280 <li>TakeFrom
281 <ul>
282 <li>Remote DGM nameを指定することで、その接続先のDGM からTake操作をおこえる。</li>
283 </ul>
284 </li>
285 <li>PeekFrom
286 <ul>
287 <li>Remote DGM nameを指定することで、その接続先のDGM からPeek操作をおこえる。</li>
288 </ul>
289 </li>
290 </ul>
291 </li>
292 </ul>
293
294
295
296 </div>
297
298 <div class='slide'>
299 <!-- _S9SLIDE_ -->
300 <h2 id="topologymanager">TopologyManager</h2>
301 <ul>
302 <li>TopologyManagerとはTopologyを形成のために、参加を表明したノード、TopologyNodeに名前を与え、必要があればノード同士の配線を行うノードである。</li>
303 <li>TopologyManagerのTopology形成方法として、静的Topologyと動的Topologyがある。
304 <ul>
305 <li>動的Topologyは参加を表明したノードに対し、動的にノード同士の関係を作る。例えばTreeを構成する場合、参加したノードから順にrootに近い役割を与え、またCodeGearはノードが参加し、parentに接続された後に実行される。</li>
306 <li>静的Toopologyはdotファイルを与えることノード関係の構築を行う。</li>
307 </ul>
308 </li>
309 </ul>
310
311 <pre><code class="language-Code">digraph test {
312 node0 -&gt; node1 [label="right"]
313 node1 -&gt; node2 [label="right"]
314 node2 -&gt; node0 [label="right"]
315 }
316 </code></pre>
317
318 <div style="text-align: center;">
319  <img src="../paper/images/ring.svg" alt="MetaGear" width="500" />
320 </div>
321
322
323
324 </div>
325
326 <div class='slide'>
327 <!-- _S9SLIDE_ -->
328 <h2 id="まとめとこれから">まとめとこれから</h2>
329
330 </div>
331
332
333 </div><!-- presentation -->
334 </body>
335 </html>