comparison slide/thesis.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/projection.css" media="screen,projection">
17 <link rel="stylesheet" href="s6/themes/screen.css" media="screen">
18 <link rel="stylesheet" href="s6/themes/print.css" media="print">
19 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection">
20
21 <!-- JS -->
22 <script src="s6/js/jquery-1.11.3.min.js"></script>
23 <script src="s6/js/jquery.slideshow.js"></script>
24 <script src="s6/js/jquery.slideshow.counter.js"></script>
25 <script src="s6/js/jquery.slideshow.controls.js"></script>
26 <script src="s6/js/jquery.slideshow.footer.js"></script>
27 <script src="s6/js/jquery.slideshow.autoplay.js"></script>
28
29 <!-- prettify -->
30 <link rel="stylesheet" href="scripts/prettify.css">
31 <script src="scripts/prettify.js"></script>
32
33 <script>
34 $(document).ready( function() {
35 Slideshow.init();
36
37 $('code').each(function(_, el) {
38 if (!el.classList.contains('noprettyprint')) {
39 el.classList.add('prettyprint');
40 }
41 });
42 prettyPrint();
43 } );
44
45 </script>
46
47 <!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
48 <!--[if IE]>
49 <script src="s6/js/jquery.microsoft.js"></script>
50 <![endif]-->
51
52
53
54 </head>
55 <body>
56
57 <div class="layout">
58 <div id="header"></div>
59 <div id="footer">
60 <div align="right">
61 <img src="s6/images/logo.svg" width="200px">
62 </div>
63 </div>
64 </div>
65
66 <div class="presentation">
67
68 <div class='slide cover'>
69 <table width="90%" height="90%" border="0" align="center">
70 <tr>
71 <td>
72 <div align="center">
73 <h1><font color="#808db5">分散フレームワークChristieを用いたリモートエディタの実装</font></h1>
74 </div>
75 </td>
76 </tr>
77 <tr>
78 <td>
79 <div align="left">
80 Takahiro Ikki, Shinji Kono
81 琉球大学
82 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
83 </div>
84 </td>
85 </tr>
86 </table>
87 </div>
88
89
90
91 <div class='slide'>
92
93 <!-- _S9SLIDE_ -->
94 <h2 id="研究目的-背景">研究目的, 背景</h2>
95 <ul>
96 <li>ペアプログラミングなどでは同時に複数人が一つのファイルを編集することができるリモートエディタが有効である。</li>
97 <li>既存のリモートエディタアプリケーションとしてVisual Stdio Codeがあげられる。
98 <ul>
99 <li>しかし、セッションに参加する全員がVSCodeの環境を持っていなければならず、不便である。</li>
100 </ul>
101 </li>
102 <li>編集に参加するユーザーがそれぞれ好きなエディタが使えるアプリケーションを作成する。</li>
103 <li>本研究室で開発している分散フレームワークChristieを使い、簡潔な実装を目指す。</li>
104 </ul>
105
106
107
108 </div>
109
110 <div class='slide'>
111 <!-- _S9SLIDE_ -->
112 <h2 id="発表の流れ">発表の流れ</h2>
113 <ul>
114 <li>リモートエディタの機能と開発手順の解説</li>
115 <li>スター型接続によるネットワーク通信</li>
116 <li>Christieの解説
117 <ul>
118 <li>Gearの概念</li>
119 <li>アノテーション</li>
120 <li>TopologyManager</li>
121 </ul>
122 </li>
123 <li>今後の課題とまとめ</li>
124 </ul>
125
126
127
128 </div>
129
130 <div class='slide'>
131 <!-- _S9SLIDE_ -->
132 <h2 id="christie">Christie</h2>
133 <ul>
134 <li>Christieは当研究室で開発している、信頼性を重視した分散フレームワークである.</li>
135 <li>現在はjava上で開発されているが、別言語(CbC)で構成されたGearsOSに組み込む予定があるため,それに向けて書き換え可能な構成となっている。</li>
136 <li>ChristieではデータをGearという単位で分割して記述を行う。
137 <ul>
138 <li>CodeGear(以下CG)
139 <ul>
140 <li>スレッドやクラスに相当し、javaの継承を用いて記述する。keyに全てのDGが格納された際に動作する。</li>
141 </ul>
142 </li>
143 <li>DataGear(以下DG)
144 <ul>
145 <li>DGは変数に相当し、CG内でアノテーションを用いてデータを取り出せる。</li>
146 </ul>
147 </li>
148 <li>CodeGearManager(以下CGM)
149 <ul>
150 <li>ノードに相当し, DG, CG, DataGearManagerの管理をする.</li>
151 </ul>
152 </li>
153 <li>DataGearManager(以下DGM)
154 <ul>
155 <li>DGを管理するものであり, putという操作にて変数(DG)をkeyに格納する。</li>
156 </ul>
157
158
159
160 </div>
161
162 <div class='slide'>
163 <!-- _S9SLIDE_ -->
164 <h2 id="christieのコード例">Christieのコード例</h2>
165 <pre><code class="language-code">package christie.example.HelloWorld;
166
167 import christie.codegear.CodeGearManager;
168 import christie.codegear.StartCodeGear;
169
170 public class StartHelloWorld extends StartCodeGear {
171
172 public StartHelloWorld(CodeGearManager cgm) {
173 super(cgm);
174 }
175
176 public static void main(String[] args){
177 CodeGearManager cgm = createCGM(10000); #ポート番号を指定してCGMを立ち上げ。
178 cgm.setup(new HelloWorldCodeGear()); #立ち上げたCGMへCGを待ちあわせる。
179 cgm.getLocalDGM().put("helloWorld","hello"); #keyname "helloWorld"に文字列helloをput
180 cgm.getLocalDGM().put("helloWorld","world");
181 }
182 }
183
184 </code></pre>
185 <pre><code>ChristieDaemon.listen: bind to /0:0:0:0:0:0:0:0:10000
186 hello world
187 </code></pre>
188 <!--
189 - 立ち上げ後はManager名を指定してDataSegmentAPI用いてDSのやり取りを行うため、プログラマはManager名を意識することでLocalへの操作もRemoteへの操作も同様に扱える。
190 -->
191 </li>
192 </ul>
193 </li>
194 </ul>
195
196 <!--
197
198 ## Christieの言語概念
199 - CGはスレッド, クラスに相当し, javaの継承を用いて記述する.
200 - DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる.
201 - CGMはノードであり, DG, CG, DGMを管理する.
202 - DGMはDGを管理するものであり, putという操作により, 変数データ(DG)を格納できる.
203 - DGMにはLocalDGMとRemoteDGMが存在する。LocalDGMは各ノード固有のデータベースである。RemoteDSMは他ノードのLocalDGMに対応するproxyであり、接続しているノードの数だけ存在する。
204 - DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMに対しDGを格納し, Remoteの場合は接続したRemoteさきのCGMのDGMにDGを格納する.
205
206 -->
207
208
209
210 </div>
211
212 <div class='slide'>
213 <!-- _S9SLIDE_ -->
214 <h2 id="dgm">DGM</h2>
215 <ul>
216 <li>DGMは分散システムの肝となる他のノード間とのデータのやり取りの際に重要となる。</li>
217 <li>DGMにはLocalDGMとRemoteDGMが存在する。
218 <ul>
219 <li>LocalDGM
220 <ul>
221 <li>LocalなDGMのプールのkeyにデータの書き込みを行う。</li>
222 </ul>
223 </li>
224 <li>RemoteDGM
225 <ul>
226 <li>Localに存在する、他のノードのLocalDGMに対応するプールのkeyにデータを書き込みする。接続しているノードの数だけ存在する。</li>
227 </ul>
228 </li>
229 </ul>
230 </li>
231 <li>DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMへ、 Remoteの場合は接続したRemote先のCGMのDGMにDGを格納する.</li>
232 </ul>
233
234 <div style="text-align: center;">
235 <img src="../paper/images/remote_datasegment.svg" alt="MetaGear" width="800" />
236 </div>
237
238 <!--
239 - RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。
240 -->
241
242
243
244 </div>
245
246 <div class='slide'>
247 <!-- _S9SLIDE_ -->
248 <h2 id="annottation">Annottation</h2>
249 <ul>
250 <li>ChristieではInputDGの指定にはアノテーションを使う。</li>
251 <li>アノテーションとはクラスやメソッド、パッケージに対して、付加情報を記述できるJavaのMeta Computationである。</li>
252 <li>先頭に@をつけることで記述する。オリジナルのアノテーションを定義することもでき、Input
253 される型の変数を直接宣言し、変数名としてkeyを記述する。その上にアノテーションでTakeもしくはPeekを指定する。</li>
254 </ul>
255
256 <pre><code class="language-cc">package christie.example.HelloWorld;
257
258 import christie.annotation.Take;
259 import christie.codegear.CodeGear;
260 import christie.codegear.CodeGearManager;
261
262 public class HelloWorldCodeGear extends CodeGear {
263 @Take
264 String helloWorld;
265
266 @Override
267 protected void run(CodeGearManager cgm) {
268 System.out.print(helloWorld + " ");
269 cgm.setup(new HelloWorldCodeGear());
270 }
271 }
272
273 </code></pre>
274
275
276
277 </div>
278
279 <div class='slide'>
280 <!-- _S9SLIDE_ -->
281 <h2 id="dgのアノテーション">DGのアノテーション</h2>
282 <ul>
283 <li>DGを取り出す際にはCG内で宣言した変数にアノテーションをつける。DGアノテーションには
284 Take、Peek、TakeFrom、PeekFrom、の4つがある。
285 <ul>
286 <li>Take
287 <ul>
288 <li>先頭のDGを読み込み、そのDGを削除する。</li>
289 </ul>
290 </li>
291 <li>Peek
292 <ul>
293 <li>先頭のDGを読み込むが、DGが消去されない。そのため特に操作をしない場合、同じデータを参照し続ける。</li>
294 </ul>
295 </li>
296 <li>TakeFrom
297 <ul>
298 <li>Remote DGM nameを指定することで、その接続先のDGM からTake操作をおこえる。</li>
299 </ul>
300 </li>
301 <li>PeekFrom
302 <ul>
303 <li>Remote DGM nameを指定することで、その接続先のDGM からPeek操作をおこえる。</li>
304 </ul>
305 </li>
306 </ul>
307 </li>
308 </ul>
309
310
311
312 </div>
313
314 <div class='slide'>
315 <!-- _S9SLIDE_ -->
316 <h2 id="topologymanager">TopologyManager</h2>
317 <ul>
318 <li>TopologyManagerとはTopologyを形成のために、参加を表明したノード、TopologyNodeに名前を与え、必要があればノード同士の配線を行うノードである。</li>
319 <li>TopologyManagerのTopology形成方法として、静的Topologyと動的Topologyがある。
320 <ul>
321 <li>動的Topologyは参加を表明したノードに対し、動的にノード同士の関係を作る。例えばTreeを構成する場合、参加したノードから順にrootに近い役割を与え、またCodeGearはノードが参加し、parentに接続された後に実行される。</li>
322 <li>静的Toopologyはdotファイルを与えることノード関係の構築を行う。</li>
323 </ul>
324 </li>
325 </ul>
326
327 <pre><code class="language-Code">digraph test {
328 node0 -&gt; node1 [label="right"]
329 node1 -&gt; node2 [label="right"]
330 node2 -&gt; node0 [label="right"]
331 }
332 </code></pre>
333
334 <div style="text-align: center;">
335  <img src="../paper/images/ring.svg" alt="MetaGear" width="500" />
336 </div>
337
338
339
340 </div>
341
342 <div class='slide'>
343 <!-- _S9SLIDE_ -->
344 <h2 id="まとめとこれから">まとめとこれから</h2>
345
346 </div>
347
348
349 </div><!-- presentation -->
350 </body>
351 </html>