comparison jssst.html @ 59:72872a363e42 default tip

update html
author Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
date Mon, 26 Sep 2011 22:46:10 +0900
parents ca7ae1dc95cc
children
comparison
equal deleted inserted replaced
58:ca7ae1dc95cc 59:72872a363e42
14 text-align: center; 14 text-align: center;
15 } 15 }
16 .taninaritop { 16 .taninaritop {
17 margin: auto; 17 margin: auto;
18 width: 95%; 18 width: 95%;
19 font-weight: bold; 19 // font-weight: bold;
20 } 20 }
21 </style> 21 </style>
22 <title>2011/9/27</title> 22 <title>2011/9/27</title>
23 <!-- metadata --> 23 <!-- metadata -->
24 <meta name="generator" content="S5" /> 24 <meta name="generator" content="S5" />
82 <div class="handout"></div> 82 <div class="handout"></div>
83 </div> 83 </div>
84 <!-- PAGE --> 84 <!-- PAGE -->
85 <div class="slide"> 85 <div class="slide">
86 <h1>目的と背景</h1> 86 <h1>目的と背景</h1>
87 <li>大学の講義中、スクリーンに映されている画面は後ろの席程見えずらい。 </li> 87 <li>大学の講義中、スクリーンに映されている画面は後ろの席ほど見えづらい。 </li>
88 <li>その問題を手元のPCにも写せるようにすることで解決しようと考えた。</li> 88 <li>その問題を手元のPCにも写せるようにすることで解決しようと考えた。</li>
89 <li class="incremental">60人以上での画面共有を行うシステムを目標とする。</li> 89 <li>60人以上で画面共有を行うシステムを目標とする。</li>
90 </div> 90 </div>
91 <!-- PAGE --> 91 <!-- PAGE -->
92 <div class="slide"> 92 <div class="slide">
93 <h1>VNCによる画面共有</h1> 93 <h1>VNCによる画面共有</h1>
94 <li>今回、VNCを用いて画面共有システムを作成する。</li>
95 <li>VNC: Virtual Network Computing </br>ネットワークを介してコンピュータを遠隔操作するプログラム </li> 94 <li>VNC: Virtual Network Computing </br>ネットワークを介してコンピュータを遠隔操作するプログラム </li>
96 <li class="incremental">VNC用いた授業用画面共有システムTreeVNCの設計と実装を行った。</li> 95 <li>VNC用いた授業用画面共有システムTreeVNCの設計と実装を行った。</li>
97 </div> 96 </div>
98 <!-- PAGE --> 97 <!-- PAGE -->
99 <div class="slide"> 98 <div class="slide">
100 <h1>通常のVNCの問題点</h1> 99 <h1>通常のVNCの問題点</h1>
101 <table class="center"> 100 <table class="center">
137 <td>48台</td> 136 <td>48台</td>
138 <td>4M(1台あたり)</td> 137 <td>4M(1台あたり)</td>
139 <td>100%</td> 138 <td>100%</td>
140 </tr> 139 </tr>
141 </table> 140 </table>
142 <li>VNCに使われるCPUの使用率が100%になり、スループットが5分の1まで下がっている。</li> 141 <li>48台繋げる事によって、VNCに使われるCPUの使用率が100%になり、スループットが5分の1まで下がっている。</li>
143 142
144 </div> 143 </div>
144
145
146 <!-- PAGE -->
147 <div class="slide">
148 <h1>TreeVNCの設計</h1>
149 <table class="center" width=100% style="text-align: center;">
150 <tr>
151 <td><small>通常のVNC</small></td>
152 <td><small>TreeVNC</small></td>
153 </tr>
154 <tr>
155 <td>
156 <img class="scale" src="./pix/NormalVNC3.png" width="300">
157 </td>
158 <td>
159 <img src="./pix/TreeVNC3.png" width="300">
160 </td>
161 </tr>
162 </p>
163 </table>
164 <li>クライアントが増えてもかかる負荷一定。</li>
165 <li>通信網1本に対する負荷が減り、安定した通信ができる(有線)。</li>
166 </div>
167 </div>
168
169 <!-- PAGE -->
170 <div class="slide">
171 <h1>TreeVNCの設計</h1>
172 <table class="center" width=100% style="text-align: center;">
173 <tr>
174 <td><small>通常のVNC</small></td>
175 <td><small>TreeVNC</small></td>
176 </tr>
177 <tr>
178 <td>
179 <img class="scale" src="./pix/NormalVNC3.png" width="300">
180 </td>
181 <td>
182 <img src="./pix/TreeVNC3.png" width="300">
183 </td>
184 </tr>
185 </p>
186 </table>
187 <table class="center" border=1 cellspacing="0" width=100%>
188 <tr>
189 <td></td>
190 <td>通常のVNC</td>
191 <td>TreeVNC</td>
192 </tr>
193 <tr>
194 <td>通信量</td>
195 <td> N*データ量 (クライアントの数に比例) </td>
196 <td> (M+1) * データ量</td>
197 </tr>
198 </table>
199 <p style="text-align: center;"><small>クライアントの数をN、木構造の子供の数をMとする</small> </p>
200 </div>
201 </div>
202
145 <!-- PAGE --> 203 <!-- PAGE -->
146 <div class="slide"> 204 <div class="slide">
147 <h1>通常のVNCの問題点</h1> 205 <h1>通常のVNCの問題点</h1>
148 <li>サーバへのCPU負荷が高い</li> 206 <li>サーバへのCPU負荷が高い</li>
149 <li>1本の通信網への負荷が高い</li> 207 <li>1本の通信網への負荷が高い</li>
156 <small>クライアントを木構造で接続させるTreeVNC</samll><br> 214 <small>クライアントを木構造で接続させるTreeVNC</samll><br>
157 <img class="scale" src="./pix/TreeVNC0.png" width="500" heigth="500"><br> 215 <img class="scale" src="./pix/TreeVNC0.png" width="500" heigth="500"><br>
158 </p> 216 </p>
159 </div> 217 </div>
160 --> 218 -->
219
220 <!-- PAGE -->
221 <div class="slide">
222 <h1>今回の主な内容</h1>
223 <ul>
224 <li>木の構成</li>
225 <li>木の再構築</li>
226 <li>MulticastQueue</li>
227 <li>ZRLE Encodingの問題</li>
228 </ul>
229 </div>
230
161 <!-- PAGE --> 231 <!-- PAGE -->
162 <div class="slide"> 232 <div class="slide">
163 <h1>TreeVNCの設計</h1> 233 <h1>TreeVNCの設計</h1>
164 <table> 234 <table>
165 <tr> 235 <tr>
166 <td> 236 <td>
167 <li>木構造での接続</li> 237 <li>木構造での接続</li>
168 <li>クライアントの管理を行うTop Proxyを置く。</li> 238 <li>クライアントの管理を行うTop Proxyを置く。</li>
169 <li>データは木の下へと流していくようにする。</li> 239 <li>データは木の上から下へと流していくようにする。</li>
170 </td> 240 </td>
171 <td> 241 <td>
172 <!-- <li>tightVNC ViewerのJava版を元にTreeVNCの実装を行う。</li> --> 242 <!-- <li>tightVNC ViewerのJava版を元にTreeVNCの実装を行う。</li> -->
173 <p style="text-align: center;"> 243 <p style="text-align: center;">
174 <img class="scale" src="./pix/TreeVNC0.png" width="500" heigth="500"> 244 <img class="scale" src="./pix/TreeVNC0.png" width="500" heigth="500">
176 </td> 246 </td>
177 </tr> 247 </tr>
178 </table> 248 </table>
179 </div> 249 </div>
180 250
181 <!-- PAGE --> 251 <!-- PAGE -->
182 <div class="slide"> 252 <div class="slide">
183 <div class="taninaritop"> 253 <div class="taninaritop">
184 <h1>木の構成手順</h1> 254 <h1>木の構成手順</h1>
185 <table class="tanitable"> 255 <table class="tanitable">
186 <tr> 256 <tr>
187 <td width=50%> 257 <td>
188 <center><img class="scale" style="display: block; width: 70%; margin: auto;" src="pix/tree1.png" alt=""></center> 258 <center><img class="scale" src="pix/uml1.png" alt=""></center>
189 </td> 259 </td>
190 <td valign="top"> 260 <td valign="top">
191 <Font size="6"> 261 <Font size="6">
192  2分木の場合の木の構成について説明する。<br> 262 <Font color="red">
193 クライアントは一旦Top Proxyに接続して、自分の接続先をProxyから取得する。<br> 263 requestHostName();
194 </td> 264 </Font>
195 </tr> 265 <br>
196 </table> 266 プロキシに対してホストのアドレスを要求する関数。
197 </div> 267 </Font>
198 </div> 268 </td>
199 269 </tr>
200 <!-- PAGE --> 270 </table>
201 <div class="slide"> 271 </div>
202 <div class="taninaritop"> 272 </div>
203 <h1>木の構成手順</h1> 273
204 <table class="tanitable"> 274 <!-- PAGE -->
205 <tr> 275 <div class="slide">
206 <td width=50%> 276 <div class="taninaritop">
207 <center><img class="scale" style="display: block; width: 70%; margin: auto;" src="pix/tree2.png" alt=""></center> 277 <h1>木の構成手順</h1>
208 </td> 278 <table class="tanitable">
209 <td valign="top" style="display: block; width: 100%; margin: auto;"> 279 <tr>
210 <Font size="6"> 280 <td>
211 親を決定する方法はTop Proxyで<br> 281 <center><img class="scale" src="pix/uml2.png" alt=""></center>
212 <Font color="red"> 282 </td>
213 parentNumber = (myNumber - 1) / treeBranch<br> 283 <td valign="top">
214 </Font> 284 <Font size="6">
215 を計算してクライアントにどの親に接続すればよいかを知らせる。 285 <Font color="red">
216 </td> 286 transferParentAddress();
217 </tr> 287 </Font>
218 </table> 288 <br>
219 </div> 289 クライアントに接続先を教える関数。
220 </div> 290 <br>
221 291 <br>
222 <!-- PAGE --> 292 実際にクライアントにおくっているデータは
223 <div class="slide"> 293 <br>
224 <div class="taninaritop"> 294 parentAddress
225 <h1>木の構成手順</h1> 295 <br>
226 <table class="tanitable"> 296 parentNum
227 <tr> 297 <br>
228 <td width=50%> 298 treeNum
229 <center><img class="scale" style="display: block; width: 70%; margin: auto;" src="pix/tree3.png" alt=""></center> 299    <br>
230 </td> 300 leaderFlag
231 <td valign="top" style="display: block; width: 100%; margin: auto;"> 301 <br>
232 <Font size="6"> 302 の4つである。
233 親を決定する方法はTop Proxyで<br> 303 <br>
234 <Font color="red"> 304 リーダーは子供の中で一番若い番号の人がなる。
235 parentNumber = (myNumber - 1) / treeBranch<br> 305 <br>
236 </Font> 306 リーダーフラグは木の再構成の際に使用する。
237 を計算してクライアントにどの親に接続すればよいかを知らせる。 307 </Font>
238 </td> 308 </td>
239 </tr> 309 </tr>
240 </table> 310 </table>
241 </div> 311 </div>
242 </div> 312 </div>
243 313
244 <!-- PAGE --> 314
245 <div class="slide"> 315 <div class="slide">
246 <div class="taninaritop"> 316 <div class="taninaritop">
247 <h1>木の構成手順</h1> 317 <h1>木の構成手順</h1>
248 <table class="tanitable"> 318 <table class="tanitable">
249 <tr> 319 <tr>
250 <td width=50%> 320 <td>
251 <center><img class="scale" style="display: block; width: 70%; margin: auto;" src="pix/tree4.png" alt=""></center> 321 <center><img class="scale" src="pix/uml3.png" alt=""></center>
252 </td> 322 </td>
253 <td valign="top" style="display: block; width: 100%; margin: auto;"> 323 <td valign="top">
254 <Font size="6"> 324 <Font size="6">
255 親を決定する方法はTop Proxyで<br> 325 <Font color="red">
256 <Font color="red"> 326 connectAndAuthenticate();
257 parentNumber = (myNumber - 1) / treeBranch<br> 327 </Font>
258 </Font> 328 <br>
259 を計算してクライアントにどの親に接続すればよいかを知らせる。 329 プロキシから受け取ったデータをもとに接続を開始する関数。
260 </td> 330 </Font>
261 </tr> 331 </td>
262 </table> 332 </tr>
263 </div> 333 </table>
264 </div> 334 </div>
265 335 </div>
266 <!--PAGE--> 336
337
338 <div class="slide">
339 <div class="taninaritop">
340 <h1>木の構成手順</h1>
341 <table class="tanitable">
342 <tr>
343 <td>
344 <center><img class="scale" src="pix/uml4.png" alt=""></center>
345 </td>
346 <td valign="top">
347 <Font size="6">
348 新しいクライアントが来るたびに今まで説明した3つの関数を呼び出す。
349 </Font>
350 </td>
351 </tr>
352 </table>
353 </div>
354 </div>
355
356
357 <div class="slide">
358 <div class="taninaritop">
359 <h1>木の構成手順</h1>
360 <table class="tanitable">
361 <tr>
362 <td>
363 <center><img class="scale" src="pix/uml5.png" alt=""></center>
364 </td>
365 <td valign="top">
366 <Font size="6">
367
368 </Font>
369 </td>
370 </tr>
371 </table>
372 </div>
373 </div>
374
375
376 <div class="slide">
377 <div class="taninaritop">
378 <h1>木の構成手順</h1>
379 <table class="tanitable">
380 <tr>
381 <td>
382 <center><img class="scale" src="pix/uml6.png" alt=""></center>
383 </td>
384 <td valign="top">
385 <Font size="6">
386
387 </Font>
388 </td>
389 </tr>
390 </table>
391 </div>
392 </div>
393
394
395 <div class="slide">
396 <div class="taninaritop">
397 <h1>木の構成手順</h1>
398 <table class="tanitable">
399 <tr>
400 <td>
401 <center><img class="scale" src="pix/uml7.png" alt=""></center>
402 </td>
403 <td valign="top">
404 <Font size="6">
405
406 </Font>
407 </td>
408 </tr>
409 </table>
410 </div>
411 </div>
412
413
414 <div class="slide">
415 <div class="taninaritop">
416 <h1>木の構成手順</h1>
417 <table class="tanitable">
418 <tr>
419 <td>
420 <center><img class="scale" src="pix/uml8.png" alt=""></center>
421 </td>
422 <td valign="top">
423 <Font size="6">
424
425 </Font>
426 </td>
427 </tr>
428 </table>
429 </div>
430 </div>
431
432
433 <div class="slide">
434 <div class="taninaritop">
435 <h1>木の構成手順</h1>
436 <table class="tanitable">
437 <tr>
438 <td>
439 <center><img class="scale" src="pix/uml9.png" alt=""></center>
440 </td>
441 <td valign="top">
442 <Font size="6">
443 ここで接続先がクライアント1になっているがこれはプロキシ側で
444 <br>
445 <Font color="red">
446 親の番号 = (自分の番号 - 1) / 親に対する子どもの数
447 </Font>
448 <br>
449 を計算してどの親に接続させれば良いかを決めてクライアントに報告している。
450 <br>
451 このように番号で木を管理している。
452 </Font>
453 </td>
454 </tr>
455 </table>
456 </div>
457 </div>
458
459
267 <div class="slide"> 460 <div class="slide">
268 <div class="taninaritop"> 461 <div class="taninaritop">
269 <h1>木の再構成手順</h1> 462 <h1>木の再構成手順</h1>
270 <table class="tanitable"> 463 <table class="tanitable">
271 <tr> 464 <tr>
272 <td> 465 <td>
273 <center><img class="scale" src="pix/reconnection1.png" alt=""></center> 466 <center><img class="scale" src="pix/reuml1.png" alt=""></center>
274 </td> 467 </td>
275 <td valign="top"> 468 <td valign="top">
276 <Font size="6"> 469 <Font size="6">
277 クライアント1が落ちたときの説明<br> 470 クライアント1が落ちた時の再接続の処理についての説明。
278 クライアント1が落ちたとき子供のリーダー(クライアント3)がTop Proxyに親が落ちたことを報告する。<br> 471 </Font>
279 Top Proxyからラストノードに対して、落ちたノードの代わりをするように命令が行く。<br> 472 </td>
280 </Font> 473 </tr>
281 </Font> 474 </table>
282 </td> 475 </div>
283 </tr> 476 </div>
284 </table> 477
285 </div> 478
286 </div>
287
288 <!--PAGE-->
289 <div class="slide"> 479 <div class="slide">
290 <div class="taninaritop"> 480 <div class="taninaritop">
291 <h1>木の再構成手順</h1> 481 <h1>木の再構成手順</h1>
292 <table class="tanitable"> 482 <table class="tanitable">
293 <tr> 483 <tr>
294 <td> 484 <td>
295 <center><img class="scale" src="pix/reconnection2.png" alt=""></center> 485 <center><img class="scale" src="pix/reuml2.png" alt=""></center>
296 </td> 486 </td>
297 <td valign="top"> 487 <td valign="top">
298 <Font size="6"> 488 <Font size="6">
299 命令を受けたラストノードが落ちたノードの代わりとなる。<br> 489 <Font color="red">
300 子供たちが新しい親に対して接続を行う。 490 lostHost();
301 </Font> 491 </Font>
302 </td> 492 <br>
303 </tr> 493 木を構成する際にリーダを決めたが、そのリーダだけが呼び出す関数。
304 </table> 494 <br>
305 </div> 495 プロキシに対し落ちた親(クライアント1)の情報を報告する。
306 </div> 496 </Font>
307 497 </td>
308 <!-- PAGE --> 498 </tr>
309 <div class="slide"> 499 </table>
310 <h1>TreeVNCの設計</h1> 500 </div>
311 <table class="center" width=100% style="text-align: center;"> 501 </div>
312 <tr> 502
313 <td><small>通常のVNC</small></td> 503
314 <td><small>TreeVNC</small></td> 504 <div class="slide">
315 </tr> 505 <div class="taninaritop">
316 <tr> 506 <h1>木の再構成手順</h1>
317 <td> 507 <table class="tanitable">
318 <img class="scale" src="./pix/NormalVNC3.png" width="300"> 508 <tr>
319 </td> 509 <td>
320 <td> 510 <center><img class="scale" src="pix/reuml3.png" alt=""></center>
321 <img src="./pix/TreeVNC3.png" width="300"> 511 </td>
322 </td> 512 <td valign="top">
323 </tr> 513 <Font size="6">
324 </p> 514 <Font color="red">
325 </table> 515 reportLastNode();
326 <li>クライアントが増えてもかかる負荷一定。</li> 516 </Font>
327 <li>通信網1本に対する負荷が減り、安定した通信ができる(有線)。</li> 517 <br>
328 </div> 518 ラストノードに対し落ちたクライアントの代わりをするように命令を出す。
329 </div> 519 </Font>
330 <!-- PAGE --> 520 </td>
331 <div class="slide"> 521 </tr>
332 <h1>TreeVNCの設計</h1> 522 </table>
333 <table class="center" width=100% style="text-align: center;"> 523 </div>
334 <tr> 524 </div>
335 <td><small>通常のVNC</small></td> 525
336 <td><small>TreeVNC</small></td> 526
337 </tr> 527 <div class="slide">
338 <tr> 528 <div class="taninaritop">
339 <td> 529 <h1>木の再構成手順</h1>
340 <img class="scale" src="./pix/NormalVNC3.png" width="300"> 530 <table class="tanitable">
341 </td> 531 <tr>
342 <td> 532 <td>
343 <img src="./pix/TreeVNC3.png" width="300"> 533 <center><img class="scale" src="pix/reuml4.png" alt=""></center>
344 </td> 534 </td>
345 </tr> 535 <td valign="top">
346 </p> 536 <Font size="6">
347 </table> 537 <Font color="red">
348 <table class="center" border=1 cellspacing="0" width=100%> 538 connectAndAuthenticate();
349 <tr> 539 </Font>
350 <td></td> 540 <br>
351 <td>通常のVNC</td> 541 プロキシから受け取ったデータをもとに接続を開始する関数。
352 <td>TreeVNC</td> 542 <br>
353 </tr> 543 この時クライアント6がクライアント1に変わる。
354 <tr> 544
355 <td>通信量</td> 545 </Font>
356 <td> N*データ量 (クライアントの数に比例) </td> 546 </td>
357 <td> (M+1) * データ量</td> 547 </tr>
358 </tr> 548 </table>
359 </table> 549 </div>
360 <p style="text-align: center;"><small>クライアントの数をN、木構造の子供の数をMとする</small> </p> 550 </div>
361 </div> 551
362 </div> 552
363 553 <div class="slide">
554 <div class="taninaritop">
555 <h1>木の再構成手順</h1>
556 <table class="tanitable">
557 <tr>
558 <td>
559 <center><img class="scale" src="pix/reuml5.png" alt=""></center>
560 </td>
561 <td valign="top">
562 <Font size="6">
563 <Font color="red">
564 transferParentAddress();
565 </Font>
566 <br>
567 落ちた親の子供たちに対し新しい親のアドレスを報告する関数。
568 </Font>
569 </td>
570 </tr>
571 </table>
572 </div>
573 </div>
574
575
576 <div class="slide">
577 <div class="taninaritop">
578 <h1>木の再構成手順</h1>
579 <table class="tanitable">
580 <tr>
581 <td>
582 <center><img class="scale" src="pix/reuml6.png" alt=""></center>
583 </td>
584 <td valign="top">
585 <Font size="6">
586 <Font color="red">
587 connectAndAuthenticate();
588 </Font>
589 <br>
590 プロキシから受け取ったデータをもとに接続を開始する関数。
591
592 </Font>
593 </td>
594 </tr>
595 </table>
596 </div>
597 </div>
364 598
365 <!--RFBPROTOCOL説明--> 599 <!--RFBPROTOCOL説明-->
366 600 <!-- PAGE -->
601 <div class="slide">
602 <h1>RFB protocol</h1>
603 <li>Remote Frame Buffer Protocol : <br>GUI操作によるリモートアクセス用の通信プロトコル。VNCで用いられている。</li>
604 <li><font color=blue>1~5</font>まではinitial seaquenceとなる。</li>
605 <li><font color=orange>6</font>以降は繰り返し行われる処理。画面のデータが転送されてくる。</li>
606 </div>
367 607
368 <!-- PAGE --> 608 <!-- PAGE -->
369 <div class="slide"> 609 <div class="slide">
370 <h1>画像の更新(FramebufferUpdate)</h1> 610 <h1>画像の更新(FramebufferUpdate)</h1>
371 <li>転送される画面(フレームバッファ)のデータは変更があった部分(差分)だけが矩形単位で送られる。</li> 611 <li>転送される画面(フレームバッファ)のデータは変更があった部分(差分)だけが矩形単位で送られる。</li>
392 <li>クライアントから接続されるとsenderスレッドが作られる。</li> 632 <li>クライアントから接続されるとsenderスレッドが作られる。</li>
393 <li>senderスレッドによりデータの転送は並列に行われる。</li> 633 <li>senderスレッドによりデータの転送は並列に行われる。</li>
394   <p class="textcenter"> 634   <p class="textcenter">
395 <img src="./pix/MulticastQueue3.png"> 635 <img src="./pix/MulticastQueue3.png">
396 </p> 636 </p>
397 <li class="incremental">MulticastQueueクラスを用いた並列な転送を行った。</li> 637 <li>MulticastQueueクラスを用いた並列な転送を行った。</li>
398 </div> 638 </div>
399 639
400    <!--MulticastQueueが必要になった経緯--> 640    <!--MulticastQueueが必要になった経緯-->
641 <!--
401 <div class="slide"> 642 <div class="slide">
402 <h1>MulticastQueue</h1> 643 <h1>MulticastQueue</h1>
403 <li>クライアントは、自分のペースでデータを読み込みたい。</li> 644 <li>クライアントは、自分のペースでデータを読み込みたい。</li>
404 <li></li> 645 <li></li>
405 <li class="incremental">TreeVNCではVNCサーバとの接続はこのZRLEを扱う。</li> 646 <li class="incremental">TreeVNCではVNCサーバとの接続はこのZRLEを扱う。</li>
406 </div> 647 </div>
648 -->
649
650 <!--PAGE-->
651 <div class="slide">
652 <h1>MulticastQueue</h1>
653 <li>MulticastQueue:データを順序よく読み込ませるクラス</li>
654 <table class="textcenter" border=1 cellspacing="0" width=100%>
655 <tr>
656 <td width=50%>
657 <img src="./pix/MulticastQueue2.png">
658 </td>
659 <td>
660 <img src="./pix/MulticastQueue.png">
661 </td>
662 </tr>
663
664 <tr>
665 <td>
666 次のデータがなければwaitする
667 </td>
668 <td>
669 データがputされ次第読み込みを再開する
670 </td>
671 </tr>
672 </table>
673 <p><small>
674 MulticastQueueは、java.util.CountDownnLatchにより実装されている。
675 </small></p>
676 </div>
677
407 678
408 <!-- PAGE --> 679 <!-- PAGE -->
409 <div class="slide"> 680 <div class="slide">
410 <h1>MulticastQueue</h1> 681 <h1>MulticastQueue</h1>
411 <table class="textcenter" style="margin-top: 50px" width=100% border=1 cellspacing="0"> 682 <table class="textcenter" style="margin-top: 50px" width=100% border=1 cellspacing="0">
462 <li>どこからも参照されないデータはProxyのメモリから削除される。</li> 733 <li>どこからも参照されないデータはProxyのメモリから削除される。</li>
463 </div> 734 </div>
464 <!-- PAGE --> 735 <!-- PAGE -->
465 <div class="slide"> 736 <div class="slide">
466 <h1>エンコード</h1> 737 <h1>エンコード</h1>
467 <li>MAC OS XではZRLEを使ってVNCを行うことができる</li> 738 <li>Mac OS XではZRLEを使ってVNCを行うことができる</li>
468 <li>ZRLEはデータ量がRAWデータの約4分の1ですむ。</li> 739 <li>ZRLEはデータ量がRAWデータの約4分の1ですむ。</li>
469 <li class="incremental">TreeVNCではVNCサーバとの接続はこのZRLEを扱う。</li> 740 <li>TreeVNCではVNCサーバとの接続はこのZRLEを扱う。</li>
470 </div> 741 </div>
471 <!-- PAGE --> 742 <!-- PAGE -->
472 <div class="slide"> 743 <div class="slide">
473 <h1>ZRLE</h1> 744 <h1>ZRLE</h1>
474 <li>ZRLE : Zlib Run-Length Encoding </li> 745 <li>ZRLE : Zlib Run-Length Encoding </li>
493 <td>U8 array</td> 764 <td>U8 array</td>
494 <td>ZlibData</td> 765 <td>ZlibData</td>
495 </tr> 766 </tr>
496 </table> 767 </table>
497 </small> 768 </small>
498 <li class="incremental">Zlibデータは辞書を元にデータの解凍を行う</li> 769 <li>Zlibデータは辞書を元にデータの解凍を行う</li>
499 <li class="incremental">辞書がなければデータを正しく解凍できない</li> 770 <li>辞書がなければデータを正しく解凍できない</li>
500 </div> 771 </div>
772 <!--PAGE-->
773 <div class="slide">
774 <h1>ZRLEの問題</h1>
775 <li>辞書はZlibデータの最初に送られてくる。</li>
776 <li>もしも、ZRLEのデータを最初から送っているのなら、辞書も送ることができる。</li>
777 <li>データの途中から送ると辞書は送られず、正しく解凍を行うことができない。</li>
778 <table class="textcenter" width=100%>
779 <tr>
780 <td>
781 <img src="./pix/ZRLE.png" width="600" >
782 </td>
783 <td>
784 <img src="./pix/ZRLE2.png" width="600" >
785 </td>
786 </tr>
787 </table>
788 </div>
789
501 <!-- PAGE --> 790 <!-- PAGE -->
502 <div class="slide"> 791 <div class="slide">
503 <h1>ZRLEE</h1> 792 <h1>ZRLEE</h1>
504 <li>そこで、ProxyがZRLEを使ってデータを受け取り圧縮し直して木の下へ流していくことにした。</li> 793 <li>そこで、ProxyがZRLEを使ってデータを受け取り圧縮し直して木の下へ流していくことにした。</li>
505 <li><small>この圧縮し直したデータはZRLEEと名付けた。</small></li> 794 <li><small>この圧縮し直したデータはZRLEEと名付けた。</small></li>
613 <div class="slide"> 902 <div class="slide">
614 <h1>既存のプログラムとの比較</h1> 903 <h1>既存のプログラムとの比較</h1>
615 <li>VNC Reflector</li> 904 <li>VNC Reflector</li>
616 <ul> 905 <ul>
617 <li>tightVNCの作者が作成したプログラム</li> 906 <li>tightVNCの作者が作成したプログラム</li>
618 <li>VNC Reflecotrにクライアントが接続することでVNCを行うことができる</li> 907 <li>VNC Reflector(Proxy)にクライアントが接続することでVNCを行うことができる</li>
619 </ul> 908 </ul>
620 </div> 909 </div>
621 <!-- PAGE --> 910 <!-- PAGE -->
622 <!-- PAGE --> 911 <!-- PAGE -->
623 <div class="slide"> 912 <div class="slide">
624 <h1>質問タイム</h1> 913 <h1>質問</h1>
625 </div> 914 </div>
626 </body> 915 </body>
627 </html> 916 </html>