comparison presen/sigOS/sample.html @ 175:7e7fe5e28ba4

add presen directory
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 05 Feb 2018 17:54:31 +0900
parents
children
comparison
equal deleted inserted replaced
174:f0e9cc7d13f9 175:7e7fe5e28ba4
1 <!DOCTYPE HTML>
2
3 <html lang="en-US">
4 <head>
5 <title>分散フレームワークAliceの圧縮機能</title>
6 <meta charset="UTF-8">
7 <meta name="viewport" content="width=1274, user-scalable=no">
8 <meta name="generator" content="Slide Show (S9)">
9 <meta name="author" content="照屋のぞみ">
10 <link rel="stylesheet" href="themes/ribbon/styles/style.css">
11 </head>
12 <body class="list">
13 <header class="caption">
14 <h1>分散フレームワークAliceの圧縮機能</h1>
15 <p>照屋のぞみ</p>
16 </header>
17 <div class="slide cover" id="Cover"><div>
18 <section>
19 <header>
20 <h2>分散フレームワークAliceの圧縮機能</h2>
21 <h3 id="author">照屋のぞみ</h3>
22 <h3 id="profile">琉球大学 工学部 情報工学科 4年</h3>
23 </header>
24 </section>
25 </div></div>
26
27 <!-- todo: add slide.classes to div -->
28 <!-- todo: create slide id from header? like a slug in blogs? -->
29
30 <div class="slide" id="2"><div>
31 <section>
32 <header>
33 <h1 id="section">研究目的</h1>
34 </header>
35 <!-- === begin markdown block ===
36
37 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]
38 on 2015-05-25 18:01:27 +0900 with Markdown engine kramdown (1.5.0)
39 using options {}
40 -->
41
42 <!-- _S9SLIDE_ -->
43
44 <ul>
45 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li>
46 <li>Aliceのメタ計算として、通信が切断した際の処理やデータを圧縮する処理等を提供することで、プログラマがコードを大きく変更することなくプログラムの振る舞いを変えることを可能にする。</li>
47 </ul>
48
49
50
51 </section>
52 </div></div>
53
54 <div class="slide" id="3"><div>
55 <section>
56 <header>
57 <h1 id="data-segment--code-segment">Data Segment と Code Segment</h1>
58 </header>
59 <!-- _S9SLIDE_ -->
60
61 <ul>
62 <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割してプログラミングを行う。</li>
63 <li>AliceはJavaで実装されており、CS をユーザーが記述する際には CodeSegment.class を継承することで CS で使用する API を利用する事ができる。</li>
64 <li>DSはAliceが内部にもつデータベースにより管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。</li>
65 </ul>
66
67
68
69 </section>
70 </div></div>
71
72 <div class="slide" id="4"><div>
73 <section>
74 <header>
75 <h1 id="data-segment--code-segment-1">Data Segment と Code Segment</h1>
76 </header>
77 <!-- _S9SLIDE_ -->
78
79 <ul>
80 <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li>
81 <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。</li>
82 <img src="./images/dsandcs.svg" alt="opt" align="center"/>
83 </ul>
84
85
86 </section>
87 </div></div>
88
89 <div class="slide" id="5"><div>
90 <section>
91 <header>
92 <h1 id="codesegment">CodeSegmentの依存関係</h1>
93 </header>
94 <!-- _S9SLIDE_ -->
95
96 <ul>
97 <li>データの依存関係のないCSは並列実行される</li>
98 <li>データの依存関係がある場合は Input DS が揃うと順に実行される</li>
99 </ul>
100 <img src="./images/dsandcs2.svg" alt="opt" align="center"/>
101
102
103 </section>
104 </div></div>
105
106 <div class="slide" id="6"><div>
107 <section>
108 <header>
109 <h1 id="data-segment">Data Segment</h1>
110 </header>
111 <!-- _S9SLIDE_ -->
112
113 <ul>
114 <li>整数や文字列などの基本的なデータの集まり</li>
115 <li>Aliceの場合はJavaオブジェクトに対応</li>
116 </ul>
117
118
119
120 </section>
121 </div></div>
122
123 <div class="slide" id="7"><div>
124 <section>
125 <header>
126 <h1 id="data-segment-manager">Data Segment Manager</h1>
127 </header>
128 <!-- _S9SLIDE_ -->
129
130 <ul>
131 <li>DS の集合体であるデータベースを Alice では DS Manager(DSM) と呼ぶ。 </li>
132 <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。</li>
133 <li>DS の保存<br />
134 put(String managerKey, String key, Object val) </li>
135 <li>DS の取得<br />
136 take(String managerKey, String key) </li>
137 </ul>
138
139 <!--![opt](./images/dsm.svg)-->
140
141
142
143 </section>
144 </div></div>
145
146 <div class="slide" id="8"><div>
147 <section>
148 <header>
149 <h1 id="data-segment-manager-1">Data Segment Manager</h1>
150 </header>
151 <!-- _S9SLIDE_ -->
152
153 <img src="./images/remote_datasegment.svg" alt="opt" width="450px" align="right"/>
154 <ul>
155 <li>Local DSM … 各ノード固有のデータベース。</li></br>
156 <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。</li><br />
157 </ul>
158
159
160
161 </section>
162 </div></div>
163
164 <div class="slide" id="9"><div>
165 <section>
166 <header>
167 <h1 id="data-segment-">Data Segment の表現</h1>
168 </header>
169 <!-- _S9SLIDE_ -->
170
171 <ul>
172 <li>DSは複数の表現を同時に持っており、現在は3種類の表現がある。
173 <ol>
174 <li>一般的な Java のクラスオブジェクト</li>
175 <li>MessagePack for Java でシリアライズ化されたバイナリオブジェクト。Remoteとの通信の際に用いる。</li>
176 <li>2 を圧縮したバイナリオブジェクト。圧縮機能の一部として今回追加。 </li>
177 </ol>
178 </li>
179 </ul>
180
181
182
183 </section>
184 </div></div>
185
186 <div class="slide" id="10"><div>
187 <section>
188 <header>
189 <h1 id="messagepack">MessagePackとは</h1>
190 </header>
191 <!-- _S9SLIDE_ -->
192
193 <ul>
194 <li>Sadayuki Furuhashiが開発したシリアライズのための機能をまとめたオープンソースライブラリ。</li>
195 <li>シリアライズ/デシリアライズを高速に行うことができ、整数、浮動小数点数、Boolean、文字列、配列、連想配列、nilをバイト列にシリアライズできる。</li>
196 <li>JSONのようにプログラミング言語に依存しないデータの表現形式として使用できる。</li>
197 </ul>
198
199
200
201 </section>
202 </div></div>
203
204 <div class="slide" id="11"><div>
205 <section>
206 <header>
207 <h1 id="cs--input-ds-">CS と Input DS の対応付け</h1>
208 </header>
209 <!-- _S9SLIDE_ -->
210
211 <ul>
212 <li>setKey()にtakeコマンドを待ち合わせすることで Input DS を指定する</li>
213 <li>実際にtakeしたデータを参照するときには、asClass()を用いて任意のJavaのオブジェクトとして扱えるようにする </li>
214 </ul>
215
216
217
218 </section>
219 </div></div>
220
221
222 <div class="slide" id="12"><div>
223 <section>
224 <header>
225 <h1 id="cs--">Code Segment の 例</h1>
226 </header>
227 <span>2つのノード間で、RemoteDSMからデータをtakeしインクリメントしてLocalDSMにputを10回繰り返す</span>
228 <img src="./images/remoteTest.svg" alt="opt" align="center"/>
229 </div></div>
230
231 <div class="slide" id="13"><div>
232 <section>
233 <header>
234 <h1 id="cs--">Code Segment の 例</h1>
235 </header>
236 <span>2つのノード間で、RemoteDSMからデータをtakeしインクリメントしてLocalDSMにputを10回繰り返す</span>
237 <img src="./pictures/remoteTest2.svg" alt="opt" align="center"/>
238 </div></div>
239
240
241 <div class="slide" id="14"><div>
242 <section>
243 <header>
244 <h1 id="cs--">Code Segment の 例</h1>
245 </header>
246 <span>Start CS で 最初の DS をputする</span>
247 <pre><code style="font-size:13pt" lang="java">
248 public class StartCodeSegment extends CodeSegment {
249 @Override
250 public void run() {
251 <span style="color:red;">ods.put("local", "num", 0);</span>
252
253 Increment nextCS = new Increment();
254 nextCS.receiver.setKey("remote", "num");
255 }
256 }
257 </code></pre>
258 </section>
259 </div></div>
260
261
262 <div class="slide" id="15"><div>
263 <section>
264 <header>
265 <h1 id="cs--">Code Segment の 例</h1>
266 </header>
267 <span>次に実行するインクリメントのCSを作成する</span>
268 <pre><code style="font-size:13pt" lang="java">
269 public class StartCodeSegment extends CodeSegment {
270 @Override
271 public void run() {
272 ods.put("local", "num", 0);
273
274 <span style="color:red;">Increment nextCS = new Increment();</span>
275 nextCS.receiver.setKey("remote", "num");
276 }
277 }
278 </code></pre>
279 </section>
280 </div></div>
281
282
283 <div class="slide" id="17"><div>
284 <section>
285 <header>
286 <h1 id="cs--">Code Segment の 例</h1>
287 </header>
288 <span>作成したnextCSに対してsetKey()でDSM名とkeyを指定し、内部でtakeを行う。</span>
289 <pre><code style="font-size:13pt" lang="java">
290 public class StartCodeSegment extends CodeSegment {
291 @Override
292 public void run() {
293 ods.put("local", "num", 0);
294
295 Increment nextCS = new Increment();
296 <span style="color:red;">nextCS.receiver.setKey("remote", "num");</span>
297 }
298 }
299 </code></pre>
300 </section>
301 </div></div>
302
303
304 <div class="slide" id="18"><div>
305 <section>
306 <header>
307 <h1 id="cs--">Code Segment の 例</h1>
308 </header>
309 <span>takeでCSにInput DSを対応づけ、DSを格納するReceiverを用意がされる。</span>
310 <pre><code style="font-size:13pt" lang="java">
311 public class Increment extends CodeSegment {
312 <span style="color:red;">public Receiver receiver = ids.create(CommandType.TAKE);</span>
313 @Override
314 public void run() {
315 int num = this.r.asClass(Integer.class);
316 num++;
317 if (num == 10) System.exit(0);
318 ods.put("local", "num", num);
319 Increment nextCS = new RemoteIncrement();
320 nextCS.receiver.setKey("remote", "num");
321 }
322 }
323 </code></pre>
324 </section>
325 </div></div>
326
327
328 <div class="slide" id="19"><div>
329 <section>
330 <header>
331 <h1 id="cs--">Code Segment の 例</h1>
332 </header>
333 <span>受け取ったDSをasClass()でInt型として取り出す</span>
334 <pre><code style="font-size:13pt" lang="java">
335 public class Increment extends CodeSegment {
336 public Receiver receiver = ids.create(CommandType.TAKE);
337 @Override
338 public void run() {
339 <span style="color:red;">int num = this.receiver.asClass(Integer.class);</span>
340 num++;
341 if (num == 10) System.exit(0);
342 ods.put("local", "num", num);
343 Increment nextCS = new RemoteIncrement();
344 nextCS.receiver.setKey("remote", "num");
345 }
346 }
347 </code></pre>
348 </section>
349 </div></div>
350
351
352 <div class="slide" id="20"><div>
353 <section>
354 <header>
355 <h1 id="cs--">Code Segment の 例</h1>
356 </header>
357 <span>インクリメントする</span>
358 <pre><code style="font-size:13pt" lang="java">
359 public class Increment extends CodeSegment {
360 public Receiver receiver = ids.create(CommandType.TAKE);
361 @Override
362 public void run() {
363 int num = this.receiver.asClass(Integer.class);
364 <span style="color:red;">num++;</span>
365 if (num == 10) System.exit(0);
366 ods.put("local", "num", num);
367 Increment nextCS = new RemoteIncrement();
368 nextCS.receiver.setKey("remote", "num");
369 }
370 }
371 </code></pre>
372 </section>
373 </div></div>
374
375
376
377 <div class="slide" id="21"><div>
378 <section>
379 <header>
380 <h1 id="cs--">Code Segment の 例</h1>
381 </header>
382 <span>numが10であれば終了する</span>
383 <pre><code style="font-size:13pt" lang="java">
384 public class Increment extends CodeSegment {
385 public Receiver receiver = ids.create(CommandType.TAKE);
386 @Override
387 public void run() {
388 int num = this.receiver.asClass(Integer.class);
389 num++;
390 <span style="color:red;">if (num == 10) System.exit(0);</span>
391 ods.put("local", "num", num);
392 Increment nextCS = new RemoteIncrement();
393 nextCS.receiver.setKey("remote", "num");
394 }
395 }
396 </code></pre>
397 </section>
398 </div></div>
399
400 <div class="slide" id="22"><div>
401 <section>
402 <header>
403 <h1 id="cs--">Code Segment の 例</h1>
404 </header>
405 <span>インクリメントした結果をLocal DSMにputする</span>
406 <pre><code style="font-size:13pt" lang="java">
407 public class Increment extends CodeSegment {
408 public Receiver receiver = ids.create(CommandType.TAKE);
409 @Override
410 public void run() {
411 int num = this.receiver.asClass(Integer.class);
412 num++;
413 if (num == 10) System.exit(0);
414 <span style="color:red;">ods.put("local", "num", num);</span>
415 Increment nextCS = new RemoteIncrement();
416 nextCS.receiver.setKey("remote", "num");
417 }
418 }
419 </code></pre>
420 </section>
421 </div></div>
422
423
424 <div class="slide" id="23"><div>
425 <section>
426 <header>
427 <h1 id="cs--">Code Segment の 例</h1>
428 </header>
429 <span>次に実行するインクリメントCSを作成する</span>
430 <pre><code style="font-size:13pt" lang="java">
431 public class Increment extends CodeSegment {
432 public Receiver receiver = ids.create(CommandType.TAKE);
433 @Override
434 public void run() {
435 int num = this.receiver.asClass(Integer.class);
436 num++;
437 if (num == 10) System.exit(0);
438 ods.put("local", "num", num);
439 <span style="color:red;">Increment nextCS = new RemoteIncrement();</span>
440 nextCS.receiver.setKey("remote", "num");
441 }
442 }
443 </code></pre>
444 </section>
445 </div></div>
446
447 <div class="slide" id="24"><div>
448 <section>
449 <header>
450 <h1 id="cs--">Code Segment の 例</h1>
451 </header>
452 <span>作成したnextCSにkeyを指定してtakeを行わせる。以下繰り返し。</span>
453 <pre><code style="font-size:13pt" lang="java">
454 public class Increment extends CodeSegment {
455 public Receiver receiver = ids.create(CommandType.TAKE);
456 @Override
457 public void run() {
458 int num = this.receiver.asClass(Integer.class);
459 num++;
460 if (num == 10) System.exit(0);
461 ods.put("local", "num", num);
462 Increment nextCS = new RemoteIncrement();
463 <span style="color:red;">nextCS.receiver.setKey("remote", "num");</span>
464 }
465 }
466 </code></pre>
467 </section>
468 </div></div>
469
470 <div class="slide" id="25"><div>
471 <section>
472 <header>
473 <h1 id="treevnc">TreeVNC</h1>
474 </header>
475 <!-- _S9SLIDE_ -->
476 <img src="./images/treeVNC.svg" alt="opt" align="right"/>
477 <ul>
478 <li>Aliceを用いて実装する実用的な分散プログラムの例題</li>
479 <li>当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム</li>
480 <li>TightVNCがもとになっている</li>
481 </ul>
482
483
484
485 </section>
486 </div></div>
487
488 <div class="slide" id="26"><div>
489 <section>
490 <header>
491 <h1 id="computation">Computation</h1>
492 </header>
493 <!-- _S9SLIDE_ -->
494
495 <ul>
496 <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li>
497 <li>Alice の Computationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。</li>
498 <li>TreeVNC の Computationは、VNCサーバからデータを受け取って表示する処理。</li>
499 </ul>
500
501
502
503 </section>
504 </div></div>
505
506 <div class="slide" id="27"><div>
507 <section>
508 <header>
509 <h1 id="meta-computation">Meta Computation</h1>
510 </header>
511 <!-- _S9SLIDE_ -->
512
513 <ul>
514 <li>通信の切断・再接続時の処理や分散トポロジーの構成、データの表現形式の選択など、Computationを支えている処理。</li>
515 <li>TreeVNCの場合、VNCサーバのデータを各VNCノードにコピーする処理。</li>
516 <li>Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる</li>
517 </ul>
518
519
520
521 </section>
522 </div></div>
523
524 <div class="slide" id="28"><div>
525 <section>
526 <header>
527 <h1 id="treevncalicemeta-computation">TreeVNCで用いるAliceのMeta Computation</h1>
528 </header>
529 <!-- _S9SLIDE_ -->
530
531 <ul>
532 <li>TreeTopologyの構成</li>
533 <li>ノード間通信の切断時・再接続時の処理</li>
534 <li>データの圧縮</li>
535 <li>子ノードへのデータの複製</li>
536 </ul>
537
538
539
540 </section>
541 </div></div>
542
543 <div class="slide" id="29"><div>
544 <section>
545 <header>
546 <h1 id="dsmapi">データの転送 - DSMとAPIの追加</h1>
547 </header>
548 <!-- _S9SLIDE_ -->
549
550 <ul>
551 <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加。</li>
552 <li>指定する DSM を Compressed DSM に変えるだけで扱うデータ表現を変更できる<br />
553 put(String <strong>“compressed”</strong> + managerKey, String key, Object val)<br />
554 take(String <strong>“compressed”</strong> + managerKey, String key) </li>
555 </ul>
556
557
558
559 </section>
560 </div></div>
561
562 <div class="slide" id="30"><div>
563 <section>
564 <header>
565 <h1 id="section-1">データの転送 - データ表現の自動生成</h1>
566 </header>
567 <!-- _S9SLIDE_ -->
568
569 <ul>
570 <li>DS が圧縮表現を持っていれはそれをそのまま子ノードにputする</li>
571 <li>持っていなければその時点でCompressed DSM内部で圧縮表現を生成してputする</li>
572 <li>DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを伸長をした後、転送のために再圧縮することはない。</li>
573 </ul>
574
575
576
577 </section>
578 </div></div>
579
580 <div class="slide" id="31"><div>
581 <section>
582 <header>
583 <h1 id="section-2">データの受け取り - 任意の形式での取得</h1>
584 </header>
585 <!-- _S9SLIDE_ -->
586
587 <ul>
588 <li>圧縮表現で画面データ受け取り、Compressed DSM 内に格納。</li>
589 <li>TightVNCが画面表示のためにデータを必要としたときに、 asClass() を用いて任意の形式でデータを取り出す。</li>
590 <li>asClass() は DS のcastメソッドであり、内部で伸長と MessagePack での変換を行う。</li>
591 </ul>
592
593
594
595 </section>
596 </div></div>
597
598 <div class="slide" id="32"><div>
599 <section>
600 <header>
601 <h1 id="alice">データの受け取り - Aliceの通信パケット変更</h1>
602 </header>
603 <!-- _S9SLIDE_ -->
604
605 <ul>
606 <li>通信ヘッダにデータの状態を表すフラグを追加したことで、受け取ったデータを適切な形式でDSM内に格納できる。</li>
607 <li>圧縮前と圧縮後のデータサイズを入れたことにより、受け取ったデータの適切な伸長が可能。</li>
608 <table style="border-collapse: collapse;border:1px solid #000000;">
609 <td style="border:1px solid #000000;padding:5px;"> serialized </td>
610 <td style="border:1px solid #000000;padding:5px;">データ本体のシリアライズ状態を示す</td>
611
612 <tr>
613 <td style="border:1px solid #000000;padding:5px;"> compressed </td>
614 <td style="border:1px solid #000000;padding:5px;">データ本体の圧縮状態を示す</td>
615 </tr>
616 <tr>
617 <td style="border:1px solid #000000;padding:5px;"> objectDataSize </td>
618 <td style="border:1px solid #000000;padding:5px;">圧縮前のオブジェクトのデータサイズを表す</td>
619 </tr>
620 <tr>
621 <td style="border:1px solid #000000;padding:5px;"> dataSize </td>
622 <td style="border:1px solid #000000;padding:5px;">送信するDSのデータサイズを表す</td>
623 </tr>
624 </table>
625 </ul>
626
627
628 </section>
629 </div></div>
630
631 <div class="slide" id="33"><div>
632 <section>
633 <header>
634 <h1 id="alice1---erlang">Aliceと他言語等との比較(1) - Erlang</h1>
635 </header>
636 <!-- _S9SLIDE_ -->
637
638 <ul>
639 <li> タスクをプロセスと呼ばれるメモリを共有しないスレッドに分割 </li>
640 <li> 共有メモリにアクセスするためのメモリロックの仕組みを必要としない </li>
641 <li>ネットワークに依存しない通信が可能</li><!--Erlangはフォールトレランスと呼ばれる障害耐性を備え、システムを稼働させたまま部分停止・修復ができる-->
642
643 </br>
644 <li><p>Topologyの構成等は自分で管理</p></li>
645 </ul>
646
647
648
649 </section>
650 </div></div>
651
652 <div class="slide" id="34"><div>
653 <section>
654 <header>
655 <h1 id="alice1---linda">Aliceと他言語等との比較(2) - Linda</h1>
656 </header>
657 <!-- _S9SLIDE_ -->
658
659 <ul>
660 <li>idでタプルというデータの集合を管理している</li>
661 <li>
662 <p>in/outでAliceのput/takeに対応する操作を行う</p>
663 </li>
664 <li>タスクはinで単一のタプルを待つ</li>
665 <li>MetaComputationがない</li>
666 </ul>
667
668
669
670 </section>
671 </div></div>
672
673 <div class="slide" id="35"><div>
674 <section>
675 <header>
676 <h1 id="alice1---corba">Aliceと他言語等との比較(3) - CORBA</h1>
677 </header>
678 <!-- _S9SLIDE_ -->
679
680 <ul>
681 <li>
682 <p>オブジェクト間のRPC仕様</p>
683 </li>
684 <li>DSがない。keyという概念がない。</li>
685 <li>データの待ち合わせがない</li>
686 </ul>
687
688
689
690 </section>
691 </div></div>
692
693 <div class="slide" id="36"><div>
694 <section>
695 <header>
696 <h1 id="alice1---http">Aliceと他言語等との比較(4) - HTTP</h1>
697 </header>
698 <!-- _S9SLIDE_ -->
699
700 <ul>
701 <li>get/putで通信を行うRESTfulアーキテクチャ</li>
702 <li>
703 <p>URLがデータベースのkeyとなる</p>
704 </li>
705 <li>MIME形式で送信。複数の表現を持つMeta Computationがない。 </li>
706 <li>セッション管理はクライアント自身がやる </li>
707 <li>並列処理できない </li>
708 </ul>
709
710
711
712 </section>
713 </div></div>
714
715 <div class="slide" id="37"><div>
716 <section>
717 <header>
718 <h1 id="treevncalicetreevnc">TreeVNCとAliceを用いたTreeVNCの比較</h1>
719 </header>
720 <!-- _S9SLIDE_ -->
721
722 <ul>
723 <li>
724 <p>TreeVNC<br />
725 通信プロトコルを定義や圧縮を自前で行う<br />
726 通信スレッドを複数作成<br />
727 様々な部分で通信APIを呼び出す </p>
728 </li>
729 <li>
730 <p>Aliceを用いたTreeVNC<br />
731 Aliceと接続する最小限の変更<br />
732 木の構成部分や圧縮形式での通信はMeta Computation </p>
733 </li>
734 </ul>
735
736
737
738 </section>
739 </div></div>
740
741 <div class="slide" id="38"><div>
742 <section>
743 <header>
744 <h1 id="treevncalicetreevnc-1">TreeVNCとAliceを用いたTreeVNCの比較</h1>
745 </header>
746 <!-- _S9SLIDE_ -->
747
748 <ul>
749 <li>TightVNCからのコードの増加量</li>
750 <li>Aliceを用いれば通常の TreeVNC の 20% の行数で記述できる。</li>
751 </ul>
752
753 <table style="border-collapse: collapse;border:1px solid #000000;">
754 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th>
755 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 行数 </th>
756 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">単語数</th>
757 <tr>
758 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td>
759 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">5049</td>
760 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">14191</td>
761 </tr>
762 <tr>
763 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> Aliceを用いたTreeVNC </td>
764 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">989</td>
765 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">2355</td>
766 </tr>
767 </table>
768
769
770
771 </section>
772 </div></div>
773
774 <div class="slide" id="39"><div>
775 <section>
776 <header>
777 <h1 id="section-3">まとめ</h1>
778 </header>
779 <!-- _S9SLIDE_ -->
780
781 <ul>
782 <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表現を変える機能を実装した。</li>
783 <li>これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。</li>
784 <li>同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。</li>
785 <li>今後の課題としては、圧縮機能を TreeVNC で用 いることで有効性を測る必要がある。</li>
786 </ul>
787 <!-- === end markdown block === -->
788
789 </section>
790 </div></div>
791
792
793 <script src="scripts/script.js"></script>
794 <!-- Copyright © 2010–2011 Vadim Makeev, http://pepelsbey.net/ -->
795 </body>
796 </html>