changeset 7:63b061716258

modify
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Sat, 10 Sep 2011 05:46:47 +0900
parents 4573aaf1bf0b (current diff) d3785522a5bc (diff)
children 9ecd6c8cfb68
files presen/index.html presen/index.html~ presen/pix/MulticastQueue3.png
diffstat 8 files changed, 86 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
Binary file .DS_Store has changed
--- a/presen/index.html	Sat Sep 10 05:27:00 2011 +0900
+++ b/presen/index.html	Sat Sep 10 05:46:47 2011 +0900
@@ -749,14 +749,15 @@
 	<ul>
 	  <li>ZRLEよりも少なくですむ可能性がある。</li>
 	  <li>圧縮率が高い為プロキシのメモリを食わないですむ。</li>
+	</ul>
 	<li>一度ZRLEEに圧縮してしまえば、データはそのまま流すことができる。</li>
 	<li>TreeVNCの設計にある「データを木の下へ流す」の条件を満たす。</li>
-	</ul>
       </div>
       <!-- PAGE -->
       <div class="slide">
-	<h1>圧縮したデータの転送</h1>
-	<li>データの転送は複数いる子へ並列に行う。</li>
+	<h1>データの転送</h1>
+	<li>クライアントから接続されるとsenderスレッドが作られる。</li>
+	<li>senderスレッドによりデータの転送は並列に行われる。</li>
  	<p class="textcenter">
 	  <img  src="./pix/MulticastQueue3.png">
 	  </p>
@@ -885,6 +886,18 @@
 	  <li>どこからも参照されないデータはProxyのメモリから削除される。</li>
 	</div>
       <!-- PAGE -->
+      <div class="slide">
+	<h1>並列なデータ転送に関して...</h1>
+	<li>次のソースを見てください。</li>
+	<pre>
+executor.execute(new SendThread(out, buffer));
+	</pre>
+	<li class="incremental">実はこのソース、僕が最初に書いた並列にデータを転送させる部分です。</li>
+	<li class="incremental">一回のデータ転送に1スレッドを立てているというとても酷いソース</li>
+	<li class="incremental">3台つなげただけでプログラムが落ちた。</li>
+	<li class="incremental">こんなプログラムだけは書かないようにしましょう...</li>
+	</div>
+      <!-- PAGE -->
 
 <div class="slide">
  <div class="taninaritop">
@@ -1202,6 +1215,8 @@
      </Font>
      <br>
       プロキシから受け取ったデータをもとに接続を開始する関数。
+     <br>
+       この時クライアント6がクライアント1に変わる。
 
    </Font>
      </td>
@@ -1262,6 +1277,15 @@
 </div>
 
 <!-- PAGE -->
+<div class="slide">
+ <div class="taninaritop" >
+   <h1>木の再構成手順</h1>
+   <center><h2>再構成後の木</h2></center>
+   <center><img class="scale" src="pix/reuml7.png" alt=""></center>
+ </div>
+</div>
+
+<!-- PAGE -->
 
       <div class="slide">
 	<h1>最後に</h1>
--- a/presen/index.html~	Sat Sep 10 05:27:00 2011 +0900
+++ b/presen/index.html~	Sat Sep 10 05:46:47 2011 +0900
@@ -87,7 +87,7 @@
       <div class="slide">
 	<h1>本日の内容</h1>
 	<li>友人と作ったJavaによる画面共有システム「TreeVNC」について</li>
-	<li>TreeVNCを作るにあたって学んだJavaでの並列プログラミングの仕方やVNCの話</li>
+	<li>TreeVNCを作るにあたって学んだJavaでの並列プログラミングの仕方やVNCのプロトコル話</li>
       </div>
       <!-- PAGE -->
       <div class="slide">
@@ -109,6 +109,7 @@
 	<li>まず、iMacで複数のPCからVNCをかけてみた。</li>
 	<li class="incremental">-> 10台と繋ぐ前にVNCでの画面がカクカクに... </li>
 	<li class="incremental">さらにCPU使用率も跳ね上がった。</li>
+	<li class="incremental">原因について考えたみる。</li>
 	</div>
       <!-- PAGE -->
       <div class="slide">
@@ -246,7 +247,7 @@
 	  <li>データ転送量</li>
 	  <li>ZRLE Encodingの問題</li>
 	  <li>データ転送に用いたMulticastQueueについての説明</li>
-	  <li>木構造の再構築</li>
+	  <li>木構造の再構築(谷成さん)</li>
 	</ul>
 	</div>
       <!-- PAGE -->
@@ -294,7 +295,7 @@
 	<li>FramebufferUpdateRequest:</li>
 	<li><small>画面に差分が発生したらサーバから教えて貰うためのリクエスト</small></li>
 <small>
-<table>
+<table width=100% style="text-align: center;">
 <td width=50%>
 <table border=1 cellspacing="0">
   <tr>
@@ -341,15 +342,19 @@
 
 </table>
 </td>
+<td>
+<img src="./pix/TreeVNC1.png" width=90%>
+</td>
 </table>
-<li>このリクエストはTop Proxyだけが行う。 </li>
 </small>
+<li><small>このリクエストはTop Proxyだけが行う。</small> </li>
 	</div>
       <!-- PAGE -->
       <div class="slide">
 	<h1>RFB Protocol</h1>
-	<li>FramebufferUpdate: <small>画面の更新データ</small></li>
-	
+	<li>FramebufferUpdate:<small>画面の更新データ</small></li>
+<table width="100%">
+<td width=50%>
 <small>
 <table border=1 cellspacing="0" >
     <tr>
@@ -377,11 +382,11 @@
   </tr>
 
 </table>
-   <li>以下number-of-rectanglesの数だけ矩形のデータが続く</li>
+   <li><small>以下number-of-rectanglesの数だけ矩形のデータが続く</small></li>
 
 <table width=100%>
 <td>
-<table border=1 cellspacing="0" width=50%>
+<table border=1 cellspacing="0" width=100%>
     <tr>
     <td>バイト数</td>
    <td><pre>型   </pre></td>
@@ -431,9 +436,13 @@
 </td>
 
 </table>
-
+</small>
+</td>
+<td width>
+  <img src="./pix/TreeVNC2.png" width=90%>
+</td>
+</table>
 
-</small>
 	</div>
       <!-- PAGE -->
       <div class="slide">
@@ -553,7 +562,7 @@
 	  </tr>
 	</table>
 	<p style="text-align: center;"><small>クライアントの数をN、木構造の子供の数をMとする</small> </p>
-	<li>N = 60、 M = 1 、使用するエンコードはZRLEとする。</li>
+	<li>N = 60、 M = 2 、使用するエンコードはZRLEとする。</li>
 	<li>724 * 449 の画面分のデータ(0.8M)を送信するとする。 </li>
 	
 	</div>
@@ -595,7 +604,7 @@
       <!-- PAGE -->
       <div class="slide">
 	<h1>エンコード</h1>
-	<li>MacintoshでVNCを行うとZRLEを使うことができる。</li>
+	<li>MacintoshでZRLEを使ってVNCを行うことができる</li>
 	<li>データ量がRAWデータの約4分の1ですむ。</li>
 	<li class="incremental">TreeVNCではこのZRLEを扱っている。</li>
       </div>
@@ -622,23 +631,25 @@
 	    <tr>
 	      <td>length</td>
 	      <td>U8 array</td>
-	      <td>zlibData</td>
+	      <td>ZlibData</td>
 	    </tr>
 	  </table>
 	  </small>
-
-	  <li>Zlibデータ</li>
-	  <ul>
-	    <li>Zlibデータは辞書を元にデータの解凍を行う</li>
-	</ul>
-	<li class="incremental">辞書がなければデータを正しく解凍できない</li>
-	</div>
+	  <li>VNCでZRLEを使う場合は単一のzrleストリームを使ってデータの解凍を行う。</li>
+	  <li class="incremental">問題が発生</li>
+      </div>
       <!-- PAGE -->
       <div class="slide">
 	<h1>ZRLEの問題</h1>
+	<li>Zlibデータは辞書を元にデータの解凍を行う</li>
+	<li class="incremental">辞書がなければデータを正しく解凍できない</li>
+      </div>
+      <div class="slide">
+	<h1>ZRLEの問題</h1>
 	<li>辞書はZlibデータの最初に送られてくる。</li>
-	<li>ZRLEのデータを最初から送ることができれば、辞書も送ることができる。</li>
+	<li>もしも、ZRLEのデータを最初から送っているのなら、辞書も送ることができる。</li>
 	<li>データの途中から送ると辞書は送られず、正しく解凍を行うことができない。</li>
+	<li class="incremental">Zlibデータを扱うZlibInStreamがエラーを吐く</li>
 	<table class="textcenter" width=100%>
 	  <tr>
 	    <td>
@@ -653,7 +664,7 @@
       <!-- PAGE -->
       <div class="slide">
 	<h1>ZRLEE</h1>
-	<li>そこで、Top ProxyにZRLEのデータを再度圧縮し直すことで辞書を付けてもらうことにした。以下はその部分のソースである。</li>
+	<li>そこで、ProxyがZRLEを使ってデータを受け取り圧縮し直して木の下へ流していくことにした。</li>
 <small>	
 	<pre>
 Deflater nDeflater = deflater; // new Deflater();
@@ -663,7 +674,7 @@
 int len2 = zip(nDeflater, out, 0, bufs);
 </pre>
 </small>
-<li>この圧縮し直したデータはZRLEEと名付けた。</li>
+<li><small>この圧縮し直したデータはZRLEEと名付けた。</small></li>
 	<table class="textcenter" width=100%>
 	  <tr>
 	    <td>
@@ -685,19 +696,20 @@
 	    if (zrleInStream == null)
 	       zrleInStream = new ZlibInStream();
 	  </pre>
-	  <li>JavaではZlibの辞書の取り出しが実装されていなかった為、このような方法をとることになった。</li>
-	<li class="incremental">ZRLEに比べるとデータ量は増えないのか...?</li>
+	  <li>Zlibの規約には辞書の取り出し(flush)については書かれている。</li>
+	  <li>Javaでは実装されていなかった為、このような方法をとることになった。</li>
 	</div>
       <!-- PAGE -->
       <div class="slide">
-	<h1>ZRLEEのデータ量</h1>
+	<h1>ZRLEEの疑問点</h1>
+	<li>ZRLEEには毎回辞書が付与されている。</li>
 	<p class="textcenter">
 	  <img src="./pix/ZRLEE2.png" width="600">
 	</p>
-	  <li>毎回辞書の付与がされるため、ZRLEに比べるとデータ量が増える...?</li>
-	  <li class="incremental">ZRLEと比較してみるとデータ量は変わらないことが判明</li>
-	</div>
-	<!--PAGE-->
+	  <li class="incremental">ZRLEに比べるとデータ量は増えないのか...?</li>
+	  <li class="incremental">-> ZRLEと比較してみるとデータ量は変わらないことが判明</li>
+      </div>
+      <!-- PAGE -->
 	<div class="slide">
 	  <h1>ZRLEEのデータ量</h1>
 	  <p style="text-align: center;">
@@ -724,6 +736,7 @@
 	    </td>
 	  </tr>
 	  </table>
+	  <li>ZRLEよりデータ量が多くなるどころか少ない。</li>
 	  <li>原因</li>
 	  <ul>
 	    <li>ZRLEEは送られるデータ毎で最適な辞書が使われる。</li>
@@ -732,26 +745,22 @@
       <!-- PAGE -->
       <div class="slide">
 	<h1>ZRLEEを使う利点</h1>
-	<li>データ量が少なくすむ</li>
+	<li>データ量が少なくですむ</li>
 	<ul>
 	  <li>ZRLEよりも少なくですむ可能性がある。</li>
 	  <li>圧縮率が高い為プロキシのメモリを食わないですむ。</li>
-	</ul>
-	<li>そのままデータを流すことができる</li>
-	<ul>
-	  <li>圧縮作業は一回ですむ。</li>
+	<li>一度ZRLEEに圧縮してしまえば、データはそのまま流すことができる。</li>
+	<li>TreeVNCの設計にある「データを木の下へ流す」の条件を満たす。</li>
 	</ul>
       </div>
       <!-- PAGE -->
       <div class="slide">
 	<h1>圧縮したデータの転送</h1>
-	<li>一度ZRLEEに圧縮してしまえば、データはそのまま流すことができる。</li>
-	<li class="incremental"> -> 気にするのはスループットだけでいい。</li>
-	<li>また、データの転送は複数いる子へ並列に行われる。</li>
+	<li>データの転送は複数いる子へ並列に行う。</li>
  	<p class="textcenter">
 	  <img  src="./pix/MulticastQueue3.png">
 	  </p>
-	<li class="incremental">MulticastQueueクラスを用いてデータの転送を行った。</li>
+	<li class="incremental">MulticastQueueクラスを用いた並列な転送を行った。</li>
       </div>
       <!-- PAGE -->
       <div class="slide">
@@ -1193,6 +1202,8 @@
      </Font>
      <br>
       プロキシから受け取ったデータをもとに接続を開始する関数。
+     <br>
+       この時クライアント6がクライアント1に変わる。
 
    </Font>
      </td>
@@ -1253,6 +1264,15 @@
 </div>
 
 <!-- PAGE -->
+<div class="slide">
+ <div class="taninaritop" >
+   <h1>木の再構成手順</h1>
+   <center><h2>再構成後の木</h2></center>
+   <center><img class="scale" src="pix/reuml7.png" alt=""></center>
+ </div>
+</div>
+
+<!-- PAGE -->
 
       <div class="slide">
 	<h1>最後に</h1>
Binary file presen/pix/MulticastQueue3.png has changed
Binary file presen/pix/reuml4.png has changed
Binary file presen/pix/reuml5.png has changed
Binary file presen/pix/reuml6.png has changed
Binary file presen/pix/reuml7.png has changed