changeset 180:5a0a11b54ab4

add slide comment
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Tue, 06 Feb 2018 18:19:10 +0900
parents a3ee75a897f3
children 38d95e434fbc
files presen/sample.html presen/sample.markdown
diffstat 2 files changed, 154 insertions(+), 299 deletions(-) [+]
line wrap: on
line diff
--- a/presen/sample.html	Tue Feb 06 13:46:47 2018 +0900
+++ b/presen/sample.html	Tue Feb 06 18:19:10 2018 +0900
@@ -87,7 +87,7 @@
 <!-- === begin markdown block ===
 
       generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]
-                on 2018-02-06 13:46:35 +0900 with Markdown engine kramdown (1.5.0)
+                on 2018-02-06 18:09:16 +0900 with Markdown engine kramdown (1.5.0)
                   using options {}
   -->
 
@@ -170,7 +170,7 @@
 <h1 id="data-segment-manager">Data Segment Manager</h1>
 <ul>
   <li>DS の集合体であるデータベースを Alice では <strong>DS Manager(DSM)</strong> と呼ぶ。  </li>
-  <li>DSM 内の DS には対応する一意の String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。
+  <li>DSM 内の DS には対応する String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。
 <img src="./pictures/key.svg" alt="opt" width="50%" /></li>
 </ul>
 
@@ -184,7 +184,8 @@
   <li>Remote DSM … 他のノードのLocal DSMのproxy。接続しているノードの数だけ存在する。</li>
   <li>Remote DSMに書き込むと対応するノードのLocalDSMに書き込まれる</li>
   <li>Remote DSMにはString型のDSM keyを指定してアクセスする
-<img src="./pictures/newDSM.svg" alt="opt" width="50%" /></li>
+<img src="./pictures/newDSM.svg" alt="opt" width="50%" />
+//図を訂正</li>
 </ul>
 
 
@@ -216,10 +217,10 @@
 <!-- _S9SLIDE_ -->
 <h1 id="code-segment">Code Segmentの記述例</h1>
 <ul lang="java">
-  <li>take/peekをするにはcreate/setKeyメソッドを使わなければならない</li>
+  <li>take/peekをするにはcreate/setKeyメソッドを使う</li>
   <li><em>create</em> でインプットDGのRecieverを作り、<em>setKey</em> でReceiverにインプットとなるkeyを指定</li>
   <li>データをReceiverから取り出す際は <em>asClass()</em> で型を指定</li>
-  <li>処理をループさせたい場合はCSをnewする</li>
+  <li>CSを生成し待ち合わせを指定するにはCSをnewする</li>
 </ul>
 <pre><code>public class TestCodeSegment extends CodeSegment { 
     private Receiver input = ids.create(CommandType.TAKE);
@@ -246,14 +247,31 @@
 <!-- _S9SLIDE_ -->
 <h1 id="computation--meta-computation">Computation と Meta Computation</h1>
 <ul>
-  <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li>
-  <li>Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理</li>
-  <li>Meta Computationはそれを実現している処理
+  <li>分散計算にはアルゴリズムの他に、以下のような処理が必要である。
     <ul>
-      <li>DSの待ち合わせ</li>
       <li>分散トポロジーの構成</li>
       <li>通信の切断・再接続時の処理</li>
-      <li>データの表現形式の選択</li>
+      <li>データの圧縮を含む表現形式の選択</li>
+      <li>NATなどのネットワークの詳細</li>
+    </ul>
+  </li>
+  <li>Aliceでは、これらをMeta Computationと呼ぶ。</li>
+  <li>Meta ComputationもCS/DSによって記述される。</li>
+</ul>
+
+
+</div>
+<div class='slide '>
+<!-- _S9SLIDE_ -->
+<h1 id="alicemeta-computation---topology-manager">AliceのMeta Computation - Topology Manager</h1>
+<ul>
+  <li>Topology Manager
+    <ul>
+      <li>ノード間の接続管理やトポロジーの構成管理行うMeta Computation</li>
+      <li>Static Topology Manager…参加ノード数の決まったトポロジーをファイルに記述</li>
+      <li>Dynamic Topology Manager…可変長のノードに対応し、修復も行う 
+<img src="./pictures/tree1.svg" alt="opt" width="60%" /> 
+//図を訂正</li>
     </ul>
   </li>
 </ul>
@@ -262,74 +280,12 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="computation--meta-computation-1">Computation と Meta Computation</h1>
-<ul>
-  <li>分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する</li>
-  <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する</li>
-  <li>シンプルで見通しの良いコードを保つ</li>
-</ul>
-
-
-</div>
-<div class='slide '>
-<!-- _S9SLIDE_ -->
-<h1 id="alicemeta-computation---topology-managertopology-node">AliceのMeta Computation - Topology Manager/Topology Node</h1>
-<ul>
-  <li>Topology Manager
-    <ul>
-      <li>ノード間の接続管理やトポロジーの構成管理行うMeta Computation</li>
-      <li>Static Topology ManagerとDynamic Topology Managerがある  </li>
-    </ul>
-  </li>
-  <li>Topology Node
-    <ul>
-      <li>各ノード側でTopology Managerとの通信を行うMeta Computation</li>
-      <li>ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信やノード間の接続を行う  </li>
-    </ul>
-  </li>
-</ul>
-
-
-</div>
-<div class='slide '>
-<!-- _S9SLIDE_ -->
-<h1 id="alicemeta-computation---topology-managertopology-node-1">AliceのMeta Computation - Topology Manager/Topology Node</h1>
-<ul>
-  <li>Topology Managerを立ち上げる</li>
-  <li>各Topology NodeはTopology Managerに参加表明をし接続すべきノードの情報を要求する<br />
-<img src="./pictures/tree1.svg" alt="opt" width="60%" /></li>
-</ul>
-
-
-</div>
-<div class='slide '>
-<!-- _S9SLIDE_ -->
-<h1 id="alicemeta-computation---topology-managertopology-node-2">AliceのMeta Computation - Topology Manager/Topology Node</h1>
-<ul>
-  <li>参加表明があった順に各ノードにnodeNameを割り当て、接続するべきノードのIPアドレス/ポート番号を送る
-<img src="./pictures/tree2.svg" alt="opt" width="60%" /></li>
-</ul>
-
-
-</div>
-<div class='slide '>
-<!-- _S9SLIDE_ -->
-<h1 id="alicemeta-computation---topology-managertopology-node-3">AliceのMeta Computation - Topology Manager/Topology Node</h1>
-<ul>
-  <li>Topology Nodeが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでオーバーレイネットワークが作られる  </li>
-  <li>Topology Managerは接続情報を管理し、実際の接続はTopology Nodeが行う
-<img src="./pictures/tree3.svg" alt="opt" width="60%" /></li>
-</ul>
-
-
-</div>
-<div class='slide '>
-<!-- _S9SLIDE_ -->
 <h1 id="alicemeta-computation---">AliceのMeta Computation - 圧縮</h1>
 <ul>
-  <li>DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる</li>
-  <li>圧縮したデータの伸長と圧縮したままの転送が同時に可能
-<img src="./pictures/compress.svg" alt="opt" width="80%" /> </li>
+  <li>圧縮したデータの伸長と圧縮したままの転送を同時に行いたい</li>
+  <li>DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる
+<img src="./pictures/compress.svg" alt="opt" width="80%" /> 
+//図を訂正</li>
 </ul>
 
 
@@ -348,22 +304,12 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="alicenat">AliceのNATを越え</h1>
+<h1 id="alicenat">AliceのNAT越え</h1>
 <ul>
   <li>NATを越えたノード間通信は分散処理の課題である</li>
-  <li>Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくともTopology Managerを増やすことでNAT越えが可能</li>
-</ul>
-
-
-</div>
-<div class='slide '>
-<!-- _S9SLIDE_ -->
-<h1 id="alicenat-1">AliceのNATを越え接続</h1>
-<ul>
-  <li>各プライベートネットワーク内を管理するPrivate Topology Manager</li>
-  <li>グローバルIPアドレスを持ったGlobal Topology Managerを1つ立てる</li>
-  <li>TopologyNodeが複数対応できるためPrivate/Global Topology Managerに接続<br />
-<img src="./pictures/overNAT.svg" alt="opt" width="70%" /></li>
+  <li>Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくとも複数のTopology Managerを立ち上げることでNAT越えが可能
+<img src="./pictures/overNAT.svg" alt="opt" width="70%" />
+//図を訂正</li>
 </ul>
 
 
@@ -372,19 +318,7 @@
 <!-- _S9SLIDE_ -->
 <h1 id="topology-manager">複数のTopology Managerへの対応</h1>
 <ul>
-  <li>別トポロジーのアプリケーションの連携やNAT越えはノードが複数のTopologyManagerに接続することで可能になる</li>
-  <li>この機能を実現するにはTopology Nodeが各Topology Managerに対応する複数のnodeNameを持つようにする必要がある</li>
-  <li>Topology Nodeは割り当てられたnodeNameをDSとして保持してTopology Managerと通信を行うため、nodeNameの衝突を避けなければならない</li>
-</ul>
-
-<p><img src="./pictures/somehostname.svg" alt="opt" width="50%" /></p>
-
-
-</div>
-<div class='slide '>
-<!-- _S9SLIDE_ -->
-<h1 id="local-dsm">Local DSMの切り替えによる対応</h1>
-<ul>
+  <li>この機能を実現するにはノードに割り当てられたnodeNameの衝突を避けなければならない</li>
   <li>通常のLocal DSMとは別にTopology ManagerごとのLocal DSMを作成しnodeNameを管理</li>
   <li>Tpology Manager/Nodeの働きはそのままに、指定するLocal DSMを変えるだけでTopology Managerの複数対応が可能<br />
 <img src="./pictures/somehostname2.svg" alt="opt" width="50%" /></li>
@@ -418,7 +352,6 @@
     <ul>
       <li>どんな処理を行っているかわかりづらい</li>
       <li>対応するput箇所も修正しなければならない</li>
-      <li>モデル検査しづらくなる</li>
     </ul>
   </li>
 </ul>
@@ -429,32 +362,18 @@
 <!-- _S9SLIDE_ -->
 <h1 id="alice---api-1">Aliceの問題点 - APIシンタックスの分離</h1>
 <ul lang="java">
-  <li>setKeyは全てのcreateが終わった最後に呼ばなければならない
-    <ul>
-      <li>Input DGの待ち合わせを行うカウンタはcreateの総数を持っている</li>
-      <li>カウントが0になると入力が揃ったと判断しrunに入る</li>
-      <li>countとsetKeyを交互に書くと入力が揃わないまま実行されNullPointExceptionになる</li>
-    </ul>
-  </li>
+  <li>setKeyは全てのcreateが終わった最後に呼ばなければならない</li>
+  <li>以下のような書き方では実行時データを取り出すときにNullPointerExeptionになる</li>
 </ul>
 <pre><code>class ShowData extends CodeSegment{
-    private Receiver[] info;
+    private Receiver input1;
+    private Receiver input2;
 
     public ShowData(int cnt) {
-        info = new Receiver[cnt];
-        for (int i= 0;i &lt; cnt; i++) {
-            info[i] = ids.create(CommandType.TAKE);
-            info[i].setKey(SetInfo.array[i]);
-        }
-    }
-
-    @Override
-    public void run() {
-        int size = 0;
-        for (Receiver anInfo : info) {
-            DataList dlist = anInfo.asClass(DataList.class);
-            dlist.showData();
-        }
+        input1 = ids.create(CommandType.TAKE);
+        input1.setKey("hoge");
+        input2 = ids.create(CommandType.TAKE);
+        input2.setKey("huga");
     }
 }
 </code></pre>
@@ -463,6 +382,13 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
+<h1 id="alice---api-2">Aliceの問題点 - APIシンタックスの分離</h1>
+<p>//なぜそうなるのか</p>
+
+
+</div>
+<div class='slide '>
+<!-- _S9SLIDE_ -->
 <h1 id="alice---">Aliceの問題点 - 型が推測できない</h1>
 <ul>
   <li>Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない</li>
@@ -489,30 +415,12 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="christie">分散フレームワークChristieへの必要要件</h1>
-<ul>
-  <li>Aliceの問題点を踏まえ、フレームワークをChristieを設計する
-    <ul>
-      <li>staticなLocalDSMをなくし複数インスタンスを立ち上げられるようにすることでスケーラビリティを高める</li>
-      <li>煩雑なAPIをシンプルにし、記述性を高める</li>
-      <li>型の整合性をとれるようにし、信頼性を向上させる</li>
-    </ul>
-  </li>
-</ul>
-
-
-</div>
-<div class='slide '>
-<!-- _S9SLIDE_ -->
 <h1 id="christie---1">Christie - 基本設計(1)</h1>
 <ul>
   <li>Javaで実装される</li>
-  <li>CS/DSの依存関係や、DSMの構造、リモートノードへの接続方法はAliceと同様である</li>
-  <li>将来的に当研究室で開発しているGearsOSに統合したい
-    <ul>
-      <li>GearsOSに倣い、Code Gear(CG)/ Data Gear(DG) という名称を用いる</li>
-    </ul>
-  </li>
+  <li>処理の単位にCode Gear(CG)/ Data Gear(DG) という名称を用いる</li>
+  <li>Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理
+<img src="./pictures/ChristieClass.svg" alt="opt" width="60%" /></li>
 </ul>
 
 
@@ -521,9 +429,13 @@
 <!-- _S9SLIDE_ -->
 <h1 id="christie---2">Christie - 基本設計(2)</h1>
 <ul>
-  <li>Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理</li>
-  <li>1つのCGMは1つのLocalDGMを持つ</li>
-  <li>CGM同士はThreadPoolとCGMのリストを共有している
+  <li>CGM同士はThreadPoolを共有
+    <ul>
+      <li>ThreadPool…CPUに合わせた並列度でキューに入ったスレッドを順次実行していく実行機構</li>
+      <li>ThreadPoolが増えると性能はあがらないため共有    </li>
+    </ul>
+  </li>
+  <li>CGM同士はCGMのリストを共有
     <ul>
       <li>メタ計算で全てのCGMにアクセス可能
 <img src="./pictures/ChristieClass.svg" alt="opt" width="60%" /></li>
@@ -573,11 +485,17 @@
 <ul>
   <li>keyの指定にはJavaのアノテーションを用いる
     <ul>
-      <li>先頭を@で始める注釈</li>
+      <li>フィールドやメソッドに対して属性を付与できる
+        <ul>
+          <li>Override、@SuppressWarningsなど</li>
+          <li>コンパイル時にエラーを出せる</li>
+        </ul>
+      </li>
       <li>独自アノテーションを定義できる</li>
+      <li>RUNTIMEとかの指定
+//例を入れる</li>
     </ul>
   </li>
-  <li>アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用</li>
 </ul>
 
 
@@ -586,7 +504,8 @@
 <!-- _S9SLIDE_ -->
 <h1 id="christie----1">Christie - アノテーションを用いたインプット記述</h1>
 <ul lang="java">
-  <li>InputのためのDGを宣言し、その上にアノテーションでkeyを指定</li>
+  <li>InputのためのDGをフィールドで宣言し、それに対してアノテーションでkeyを指定</li>
+  <li>RUNTIME</li>
   <li>Takeの例</li>
 </ul>
 <pre><code>@Take(”count”)
@@ -605,6 +524,22 @@
 <!-- _S9SLIDE_ -->
 <h1 id="christie----2">Christie - アノテーションを用いたインプット記述</h1>
 <ul>
+  <li>アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用
+//javassistの話入れる?→Classを1つもnewしてない状況じゃなきゃ使えない?</li>
+  <li>内部でどうなっているのか
+    <ul>
+      <li>newしたあとsetupを行う</li>
+      <li>RUNTIMEにしたためフィールドがnewされたあとでないとrefrectionAPIで取れない</li>
+    </ul>
+  </li>
+</ul>
+
+
+</div>
+<div class='slide '>
+<!-- _S9SLIDE_ -->
+<h1 id="christie----3">Christie - アノテーションによるシンタックスの分離阻止</h1>
+<ul>
   <li>アノテーションは必ずフィールドに付けなければならない
     <ul>
       <li>InputDGの生成とkeyの指定を一箇所に書ける</li>
@@ -621,7 +556,7 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="christie----3">Christie - 型を指定しないデータ取り出し</h1>
+<h1 id="christie----4">Christie - 型を指定しないデータ取り出し</h1>
 <ul lang="java">
   <li>InputDGを宣言する際には必ず型の指定が必要となるため、CG内で型を把握できる</li>
   <li>DataGearはJavaの総称型を用いて&lt;&gt;内に指定した型を受け取る</li>
@@ -634,8 +569,10 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="christie----4">Christie - 型を指定しないデータ取り出し</h1>
+<h1 id="christie----5">Christie - 型を指定しないデータ取り出し</h1>
 <ul lang="java">
+  <li>reflectionAPIを使えばアノテーションのついているフィールドの情報もとれる</li>
+  <li>型を判断できる</li>
   <li>宣言された型は内部で保存され、ノード間通信でも保たれる</li>
   <li>AliceのasClass()と違い、getData()で型を指定せずにデータを取り出すことができる</li>
 </ul>
@@ -649,14 +586,15 @@
 }
 </code></pre>
 <ul>
-  <li>取得したDGが待ち合わせに指定した型と違う場合はエラーになる</li>
+  <li>取得したDGが待ち合わせに指定した型と違う場合はエラーになる
+//実行時?コンパイル時?</li>
 </ul>
 
 
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="christie----5">Christie - まとめ</h1>
+<h1 id="christie----6">Christie - まとめ</h1>
 <ul>
   <li>CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった</li>
   <li>アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした</li>
@@ -667,7 +605,7 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="christie-1">Christieと他フレームワークの比較</h1>
+<h1 id="christie">Christieと他フレームワークの比較</h1>
 <ul>
   <li>Akka、Hazelcastと比較してChristieの特徴を述べる
     <ul>
@@ -722,7 +660,7 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="christie----6">Christieと他フレームワークの比較 - 設計思想</h1>
+<h1 id="christie----7">Christieと他フレームワークの比較 - 設計思想</h1>
 <ul>
   <li>AkkaやHazelcastはロケーション透過性が高く、分散プログラムの煩雑な処理を抽象度を高めることで隠している</li>
   <li>Christieでは分散性を明示的に意識しながら記述できるためチューニングしやすい</li>
@@ -733,7 +671,7 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="christie----7">Christieと他フレームワークの比較 - 記述性</h1>
+<h1 id="christie----8">Christieと他フレームワークの比較 - 記述性</h1>
 <ul>
   <li>アノテーションを使ったインプットの指定はAkkaやHazelcastにはない</li>
   <li>複数のインプットを待ち合わせして処理を行いたい場合
@@ -776,39 +714,6 @@
   <li>GearsOSへの移行</li>
 </ul>
 
-
-</div>
-<div class='slide '>
-<!-- _S9SLIDE_ -->
-<h1 id="christie---cg">Christie - CGの生成方法</h1>
-<ol>
-  <li>StartCodeGear.classを継承しCGMを生成する</li>
-  <li>CGをnewしたあと<em>setup</em>を用いる
-    <ul>
-      <li>newが終わらないとアノテーションから待ち合わせを行う処理ができないため</li>
-      <li>このときCGMがCGに渡されるため、プログラマが引数にCGMを渡す必要はない</li>
-    </ul>
-  </li>
-</ol>
-
-<pre lang="java"><code>public class StartTest extends StartCodeGear{//StartCG
-
-    public StartTest(CodeGearManager cgm) {
-        super(cgm);
-    }
-
-    public static void main(String args[]){
-        StartTest start = new StartTest(createCGM(10000));//CGMを生成
-    }
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-        cgm.setup(new TestCodeGear());//CGの待ち合わせを開始
-        getLocalDGM().put("count", 1);
-    }
-}
-</code></pre>
-
 <style type="text/css">
 <!--
 *{
--- a/presen/sample.markdown	Tue Feb 06 13:46:47 2018 +0900
+++ b/presen/sample.markdown	Tue Feb 06 18:19:10 2018 +0900
@@ -43,7 +43,7 @@
 
 # Data Segment Manager
 * DS の集合体であるデータベースを Alice では **DS Manager(DSM)** と呼ぶ。  
-* DSM 内の DS には対応する一意の String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。
+* DSM 内の DS には対応する String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。
 ![opt](./pictures/key.svg){:width="50%"}
 
 # Data Segment Manager
@@ -52,6 +52,7 @@
 * Remote DSMに書き込むと対応するノードのLocalDSMに書き込まれる
 * Remote DSMにはString型のDSM keyを指定してアクセスする
 ![opt](./pictures/newDSM.svg){:width="50%"}
+//図を訂正
 
 # Data Segment API 
 * DSの取得
@@ -62,10 +63,10 @@
     * flip
 
 # Code Segmentの記述例
-* take/peekをするにはcreate/setKeyメソッドを使わなければならない
+* take/peekをするにはcreate/setKeyメソッドを使う
 * *create* でインプットDGのRecieverを作り、*setKey* でReceiverにインプットとなるkeyを指定
 * データをReceiverから取り出す際は *asClass()* で型を指定
-* 処理をループさせたい場合はCSをnewする
+* CSを生成し待ち合わせを指定するにはCSをnewする
 ```java
 public class TestCodeSegment extends CodeSegment { 
     private Receiver input = ids.create(CommandType.TAKE);
@@ -87,45 +88,29 @@
 ```
 
 # Computation と Meta Computation
-* Aliceでは、計算の本質的な処理をComputatin、Computationとは別のレベルでそれを支える処理をMeta Computationとして分けて考える。
-* Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理
-* Meta Computationはそれを実現している処理
-	* DSの待ち合わせ
+* 分散計算にはアルゴリズムの他に、以下のような処理が必要である。
 	* 分散トポロジーの構成
 	* 通信の切断・再接続時の処理
-	* データの表現形式の選択
+	* データの圧縮を含む表現形式の選択
+    * NATなどのネットワークの詳細
 
-# Computation と Meta Computation
-* 分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する
-* プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する
-* シンプルで見通しの良いコードを保つ
+* Aliceでは、これらをMeta Computationと呼ぶ。
+* Meta ComputationもCS/DSによって記述される。
 
-# AliceのMeta Computation - Topology Manager/Topology Node
+
+# AliceのMeta Computation - Topology Manager
 * Topology Manager
 	* ノード間の接続管理やトポロジーの構成管理行うMeta Computation
-	* Static Topology ManagerとDynamic Topology Managerがある  
-* Topology Node
-	* 各ノード側でTopology Managerとの通信を行うMeta Computation
-	* ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信やノード間の接続を行う  
-
-# AliceのMeta Computation - Topology Manager/Topology Node
-* Topology Managerを立ち上げる
-* 各Topology NodeはTopology Managerに参加表明をし接続すべきノードの情報を要求する  
-![opt](./pictures/tree1.svg){:width="60%"}
-
-# AliceのMeta Computation - Topology Manager/Topology Node
-* 参加表明があった順に各ノードにnodeNameを割り当て、接続するべきノードのIPアドレス/ポート番号を送る
-![opt](./pictures/tree2.svg){:width="60%"}
-
-# AliceのMeta Computation - Topology Manager/Topology Node
-* Topology Nodeが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでオーバーレイネットワークが作られる  
-* Topology Managerは接続情報を管理し、実際の接続はTopology Nodeが行う
-![opt](./pictures/tree3.svg){:width="60%"}
+	* Static Topology Manager...参加ノード数の決まったトポロジーをファイルに記述
+    * Dynamic Topology Manager...可変長のノードに対応し、修復も行う 
+![opt](./pictures/tree1.svg){:width="60%"} 
+//図を訂正
 
 # AliceのMeta Computation - 圧縮
+* 圧縮したデータの伸長と圧縮したままの転送を同時に行いたい
 * DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる
-* 圧縮したデータの伸長と圧縮したままの転送が同時に可能
 ![opt](./pictures/compress.svg){:width="80%"} 
+//図を訂正
 
 # AliceのMeta Computation - 圧縮
 * 圧縮の指定には宛先DGM keyに"compressed"とつけるだけでよい
@@ -133,25 +118,14 @@
 * 伸長も *asClass()* した際に自動でされる
 * コードの変更が抑えて圧縮・非圧縮が切り替えられる
 
-# AliceのNATを越え
+# AliceのNAT越え
 * NATを越えたノード間通信は分散処理の課題である
-* Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくともTopology Managerを増やすことでNAT越えが可能
-
-# AliceのNATを越え接続
-* 各プライベートネットワーク内を管理するPrivate Topology Manager
-* グローバルIPアドレスを持ったGlobal Topology Managerを1つ立てる
-* TopologyNodeが複数対応できるためPrivate/Global Topology Managerに接続  
+* Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくとも複数のTopology Managerを立ち上げることでNAT越えが可能
 ![opt](./pictures/overNAT.svg){:width="70%"}
-
+//図を訂正
 
 # 複数のTopology Managerへの対応
-* 別トポロジーのアプリケーションの連携やNAT越えはノードが複数のTopologyManagerに接続することで可能になる
-* この機能を実現するにはTopology Nodeが各Topology Managerに対応する複数のnodeNameを持つようにする必要がある
-* Topology Nodeは割り当てられたnodeNameをDSとして保持してTopology Managerと通信を行うため、nodeNameの衝突を避けなければならない
-
-![opt](./pictures/somehostname.svg){:width="50%"}
-
-# Local DSMの切り替えによる対応
+* この機能を実現するにはノードに割り当てられたnodeNameの衝突を避けなければならない
 * 通常のLocal DSMとは別にTopology ManagerごとのLocal DSMを作成しnodeNameを管理
 * Tpology Manager/Nodeの働きはそのままに、指定するLocal DSMを変えるだけでTopology Managerの複数対応が可能  
 ![opt](./pictures/somehostname2.svg){:width="50%"}
@@ -170,36 +144,28 @@
 * setKeyではkeyを動的に指定することができる
     * どんな処理を行っているかわかりづらい
     * 対応するput箇所も修正しなければならない
-    * モデル検査しづらくなる
 
 # Aliceの問題点 - APIシンタックスの分離
 * setKeyは全てのcreateが終わった最後に呼ばなければならない
-    * Input DGの待ち合わせを行うカウンタはcreateの総数を持っている
-    * カウントが0になると入力が揃ったと判断しrunに入る
-    * countとsetKeyを交互に書くと入力が揃わないまま実行されNullPointExceptionになる
+* 以下のような書き方では実行時データを取り出すときにNullPointerExeptionになる
 ```java
 class ShowData extends CodeSegment{
-    private Receiver[] info;
+    private Receiver input1;
+    private Receiver input2;
 
     public ShowData(int cnt) {
-        info = new Receiver[cnt];
-        for (int i= 0;i < cnt; i++) {
-            info[i] = ids.create(CommandType.TAKE);
-            info[i].setKey(SetInfo.array[i]);
-        }
-    }
-
-    @Override
-    public void run() {
-        int size = 0;
-        for (Receiver anInfo : info) {
-            DataList dlist = anInfo.asClass(DataList.class);
-            dlist.showData();
-        }
+        input1 = ids.create(CommandType.TAKE);
+        input1.setKey("hoge");
+        input2 = ids.create(CommandType.TAKE);
+        input2.setKey("huga");
     }
 }
 ```
 
+# Aliceの問題点 - APIシンタックスの分離
+//なぜそうなるのか
+
+
 # Aliceの問題点 - 型が推測できない
 * Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない
 * しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある
@@ -211,22 +177,17 @@
     * インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい
     * setKeyの記述順序や型を気にしてプログラミングをしなくてはならない
 
-# 分散フレームワークChristieへの必要要件
-* Aliceの問題点を踏まえ、フレームワークをChristieを設計する
-    * staticなLocalDSMをなくし複数インスタンスを立ち上げられるようにすることでスケーラビリティを高める
-    * 煩雑なAPIをシンプルにし、記述性を高める
-    * 型の整合性をとれるようにし、信頼性を向上させる
-
 # Christie - 基本設計(1)
 * Javaで実装される
-* CS/DSの依存関係や、DSMの構造、リモートノードへの接続方法はAliceと同様である
-* 将来的に当研究室で開発しているGearsOSに統合したい
-    * GearsOSに倣い、Code Gear(CG)/ Data Gear(DG) という名称を用いる
+* 処理の単位にCode Gear(CG)/ Data Gear(DG) という名称を用いる
+* Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理
+![opt](./pictures/ChristieClass.svg){:width="60%"}
 
 # Christie - 基本設計(2)
-* Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理
-* 1つのCGMは1つのLocalDGMを持つ
-* CGM同士はThreadPoolとCGMのリストを共有している
+* CGM同士はThreadPoolを共有
+    * ThreadPool...CPUに合わせた並列度でキューに入ったスレッドを順次実行していく実行機構
+    * ThreadPoolが増えると性能はあがらないため共有    
+* CGM同士はCGMのリストを共有
     * メタ計算で全てのCGMにアクセス可能
 ![opt](./pictures/ChristieClass.svg){:width="60%"}
 
@@ -245,12 +206,16 @@
 
 # Christie - アノテーションを用いたインプット記述
 * keyの指定にはJavaのアノテーションを用いる
-    * 先頭を@で始める注釈
+    * フィールドやメソッドに対して属性を付与できる
+        * Override、@SuppressWarningsなど
+        * コンパイル時にエラーを出せる
     * 独自アノテーションを定義できる
-* アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用
+    * RUNTIMEとかの指定
+//例を入れる
 
 # Christie - アノテーションを用いたインプット記述
-* InputのためのDGを宣言し、その上にアノテーションでkeyを指定
+* InputのためのDGをフィールドで宣言し、それに対してアノテーションでkeyを指定
+* RUNTIME
 * Takeの例
 ```java
 @Take(”count”)
@@ -263,6 +228,13 @@
 ```
 
 # Christie - アノテーションを用いたインプット記述
+* アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用
+//javassistの話入れる?→Classを1つもnewしてない状況じゃなきゃ使えない?
+* 内部でどうなっているのか
+    * newしたあとsetupを行う
+    * RUNTIMEにしたためフィールドがnewされたあとでないとrefrectionAPIで取れない
+
+# Christie - アノテーションによるシンタックスの分離阻止
 * アノテーションは必ずフィールドに付けなければならない
     * InputDGの生成とkeyの指定を一箇所に書ける
 * アノテーションの内容はコンパイル時に決定される
@@ -277,6 +249,8 @@
 ```
 
 # Christie - 型を指定しないデータ取り出し
+* reflectionAPIを使えばアノテーションのついているフィールドの情報もとれる
+* 型を判断できる
 * 宣言された型は内部で保存され、ノード間通信でも保たれる
 * AliceのasClass()と違い、getData()で型を指定せずにデータを取り出すことができる
 ```java
@@ -290,6 +264,7 @@
 }
 ```
 * 取得したDGが待ち合わせに指定した型と違う場合はエラーになる
+//実行時?コンパイル時?
 
 # Christie - まとめ
 * CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった
@@ -346,31 +321,6 @@
 * Jungleとの統合
 * GearsOSへの移行
 
-# Christie - CGの生成方法
-1. StartCodeGear.classを継承しCGMを生成する
-2. CGをnewしたあと*setup*を用いる
-    * newが終わらないとアノテーションから待ち合わせを行う処理ができないため
-    * このときCGMがCGに渡されるため、プログラマが引数にCGMを渡す必要はない
-    
-```java
-public class StartTest extends StartCodeGear{//StartCG
-
-    public StartTest(CodeGearManager cgm) {
-        super(cgm);
-    }
-
-    public static void main(String args[]){
-        StartTest start = new StartTest(createCGM(10000));//CGMを生成
-    }
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-        cgm.setup(new TestCodeGear());//CGの待ち合わせを開始
-        getLocalDGM().put("count", 1);
-    }
-}
-```
-
 
 <style type="text/css">
 <!--