diff presen/sigOS/sample.html @ 14:99e5104997b7

add compress part
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Sun, 24 May 2015 17:56:24 +0900
parents c0fe42a8808d
children 696a908208c8
line wrap: on
line diff
--- a/presen/sigOS/sample.html	Sat May 23 16:11:04 2015 +0900
+++ b/presen/sigOS/sample.html	Sun May 24 17:56:24 2015 +0900
@@ -35,7 +35,7 @@
 			<!-- === begin markdown block ===
 
       generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]
-                on 2015-05-23 16:10:37 +0900 with Markdown engine kramdown (1.5.0)
+                on 2015-05-24 17:55:49 +0900 with Markdown engine kramdown (1.5.0)
                   using options {}
   -->
 
@@ -174,13 +174,54 @@
 <div class="slide" id="9"><div>
 		<section>
 			<header>
-				<h1 id="alice4---code-segment">Aliceの概要(4) - Code Segment</h1>
+				<h1 id="alice4---data-segment-">Aliceの概要(4) - Data Segment の表現</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<ul>
+  <li>一般的な Java のクラスオブジェクト
+    <ul>
+      <li>LocalDSM に put された場合は一般的な Java のクラスオブジェクトとして enQueue される。</li>
+    </ul>
+  </li>
+  <li>MessagePack を用いて変換した byte[]で表現されたバイナリオブジェクト
+    <ul>
+      <li>RemoteDSM に put された場合は通信時に byteArray に変換されたバイナリオブジェクトが enQueue される。</li>
+    </ul>
+  </li>
+</ul>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="10"><div>
+		<section>
+			<header>
+				<h1 id="alice5---code-segment">Aliceの概要(5) - Code Segment</h1>
 			</header>
 			<!-- _S9SLIDE_ -->
 
 <ul>
   <li>Alice上で実行されるタスクの単位を Code Segment(CS) と呼ぶ。</li>
   <li>複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。</li>
+  <li>CS をユーザーが記述する際には CS を継承して記述することにより CS で使用する API を利用する事ができる。</li>
+</ul>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="11"><div>
+		<section>
+			<header>
+				<h1 id="alice5---code-segment-1">Aliceの概要(5) - Code Segment</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<ul>
   <li>入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。</li>
   <li>keyで指定されたDSが揃うと実行されるという性質を持つ。
 <img src="./images/dsandcs.svg" alt="opt" /></li>
@@ -191,10 +232,10 @@
 		</section>
 </div></div>
 
-<div class="slide" id="10"><div>
+<div class="slide" id="12"><div>
 		<section>
 			<header>
-				<h1 id="alice5---codesegment">Aliceの概要(5) - CodeSegmentの依存関係</h1>
+				<h1 id="alice6---codesegment">Aliceの概要(6) - CodeSegmentの依存関係</h1>
 			</header>
 			<!-- _S9SLIDE_ -->
 
@@ -210,16 +251,17 @@
 		</section>
 </div></div>
 
-<div class="slide" id="11"><div>
+<div class="slide" id="13"><div>
 		<section>
 			<header>
-				<h1 id="alicemeta-computation">AliceのMeta Computation</h1>
+				<h1 id="alicemeta-computation12">AliceのMeta Computation(1/2)</h1>
 			</header>
 			<!-- _S9SLIDE_ -->
 
 <ul>
   <li>並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。</li>
   <li>Aliceではプログラマが記述する部分を <em>Computation</em>、Aliceが提供するComputationを支える部分を <em>Meta Computation</em> として分けて捉えている。</li>
+  <li>分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。</li>
 </ul>
 
 
@@ -227,10 +269,10 @@
 		</section>
 </div></div>
 
-<div class="slide" id="12"><div>
+<div class="slide" id="14"><div>
 		<section>
 			<header>
-				<h1 id="alicemeta-computation-1">AliceのMeta Computation</h1>
+				<h1 id="alicemeta-computation22">AliceのMeta Computation(2/2)</h1>
 			</header>
 			<!-- _S9SLIDE_ -->
 
@@ -245,8 +287,8 @@
       <li>Javaで記述したAliceの実装システム</li>
     </ul>
   </li>
-  <li>Aliceの機能を追加するということはMeta Computationを追加すると言い換えられる</li>
-  <li>Meta ComputationもCSとDSにより表現されており、それぞれMeta CSとMeta DSと呼ぶ。</li>
+  <li>Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる</li>
+  <li>Meta Computation も CS と DS により表現されており、それぞれMeta CSとMeta DSと呼ぶ。</li>
 </ul>
 
 
@@ -254,23 +296,48 @@
 		</section>
 </div></div>
 
-<div class="slide" id="13"><div>
+<div class="slide" id="15"><div>
+		<section>
+			<header>
+				<h1 id="alicevnc">AliceVNC</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<ul>
+  <li>研究室では授業向け画面共有システム TreeVNC の開発を行っている。</li>
+  <li>授業で VNC を使う場合、1つ のコンピュータに多人数が同時につながるため、性能が大幅に落ちる</li>
+  <li>TreeVNCではノード同士を接続させ、木構造を構成することで負荷分散を行う
+<img src="./images/treeVNC.svg" alt="opt" /></li>
+</ul>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="16"><div>
 		<section>
 			<header>
 				<h1 id="alice-">Alice の新機能</h1>
 			</header>
 			<!-- _S9SLIDE_ -->
 
-<p>実用的なアプリケーションであるTreeVNCの実装で必要となった以下の機能をMeta Computation として実装した。<br />
-* flip機能 … Input DS を Output DSとして転送する
-* 圧縮機能 … DS Managerの指定によってDSの表現を切り替える</p>
+<ul>
+  <li>Alice が実用的なアプリケーションを記述する能力をもつことを確認するために、TreeVNC を Alice を用いて実装した AliceVNC の作成を行った。</li>
+  <li>AliceVNCの実装で必要となった以下の機能をMeta Computation として実装した。<br />
+    <ul>
+      <li>flip機能 … Input DS を Output DS として転送する</li>
+      <li>圧縮機能 … DS Manager の指定によってDSの表現を切り替える</li>
+    </ul>
+  </li>
+</ul>
 
 
 
 		</section>
 </div></div>
 
-<div class="slide" id="14"><div>
+<div class="slide" id="17"><div>
 		<section>
 			<header>
 				<h1 id="flip">flip機能</h1>
@@ -283,29 +350,169 @@
 		</section>
 </div></div>
 
-<div class="slide" id="15"><div>
+<div class="slide" id="18"><div>
 		<section>
 			<header>
 				<h1 id="section-3">圧縮機能</h1>
 			</header>
 			<!-- _S9SLIDE_ -->
 
+<ul>
+  <li>AliceVNCは、ノードは受け取った画面データを描画すると同時に、子ノードの Remote DSM に送信する。</li>
+  <li>ノードは DS を受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。</li>
+  <li>圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。</li>
+</ul>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="19"><div>
+		<section>
+			<header>
+				<h1 id="data-segment">圧縮機能 - Data Segmentの表現の変更</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<p>1つの Data Segment に対し以下の3種類の表現を同時に持たせ、必要に応じた形式で DS を扱う。
+	1. 一般的な Java のクラスオブジェクト
+	2. MessagePack for Java でシリアライズ化され たバイナリオブジェクト
+	3. 2 を圧縮したバイナリオブジェクト</p>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="20"><div>
+		<section>
+			<header>
+				<h1 lang="java" id="data-segment-1">圧縮機能 - Data Segmentの表現の変更</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<pre><code>	public class ReceiveData {
+		private Object val = null;
+		private byte[] messagePack = null;
+		private byte[] zMessagePack = null;
+	}
+</code></pre>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="21"><div>
+		<section>
+			<header>
+				<h1 id="dsm">圧縮機能 - DSMの追加</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<ul>
+  <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。</li>
+  <li>Compressed DSM にputする場合
+    <ul>
+      <li>DS が圧縮表現を持っていればそれをputする</li>
+      <li>持っていなければその時点で圧縮表現を作ってputする</li>
+    </ul>
+  </li>
+</ul>
 
 
 
 		</section>
 </div></div>
 
-<div class="slide" id="16"><div>
+<div class="slide" id="22"><div>
+		<section>
+			<header>
+				<h1 id="ds">圧縮機能 - 任意の表現でDSを取得</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<ul lang="java">
+  <li>ReceiveData内にあるDSのcastメソッドであるasClass()を用いる</li>
+</ul>
+<pre><code>	public &lt;T&gt; T asClass(Class&lt;T&gt; clazz) {
+		if (val != null) { return (T) val; }
+
+		if (zMessagePack != null &amp;&amp; messagePack == null) {
+			messagePack = unzip(zMessagePack, dataSize);
+		}
+
+		return packer.read(messagePack, clazz);
+	}
+</code></pre>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="23"><div>
 		<section>
 			<header>
-				<h1 id="api">API設計</h1>
+				<h1 id="api">圧縮機能 - API設計</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<p>通常のデータを扱う場合<br />
+* put(String managerKey, String key, Object val)<br />
+* take(String managerKey, String key)</p>
+
+<p>圧縮表現のデータを扱う場合<br />
+* put(String <strong>“compressed”</strong> + managerKey, String key, Object val)<br />
+* take(String <strong>“compressed”</strong> + managerKey, String key)</p>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="24"><div>
+		<section>
+			<header>
+				<h1 id="section-4">圧縮機能 - 通信プロトコルの変更</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<p>Remote から put されたデータは必ずシリアライズ化されており byteArray で表現される。
+データの 表現に圧縮した byteArray を追加したため、Remote から put された byteArray が圧縮されているのかそ うでないのかを判断する必要がある。</p>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="25"><div>
+		<section>
+			<header>
+				<h1 id="section-5">圧縮機能の評価</h1>
+			</header>
+			<!-- _S9SLIDE_ -->
+
+<p>RingRelayTest</p>
+
+
+
+		</section>
+</div></div>
+
+<div class="slide" id="26"><div>
+		<section>
+			<header>
+				<h1 id="section-6">まとめ</h1>
 			</header>
 			<!-- _S9SLIDE_ -->
 
 <ul>
-  <li>put(String “compressed” + managerKey, String key, Object val)  </li>
-  <li>take(String “compressed” + managerKey, String key)</li>
+  <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表 現を変える機能を実装した。</li>
+  <li>これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。</li>
+  <li>同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。</li>
+  <li>今後の課題としては、圧縮機能を AliceVNC で用 いることで有効性を測る必要がある。</li>
 </ul>
 <!-- === end markdown block === -->