annotate presen/sample.markdown @ 179:a3ee75a897f3

cut slide
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Tue, 06 Feb 2018 13:46:47 +0900
parents 074eb76a9184
children 5a0a11b54ab4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
1 title: 分散フレームワークChristieの設計
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
2 author: 照屋のぞみ
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
177
b5ab0f9c07aa change paper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
4 # 研究目的(1/2)
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
5 * 当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
6 * ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す
177
b5ab0f9c07aa change paper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
7 * 仕様の記述のしやすさ、可読性、拡張時に仕様変更を抑えられるかも含む
b5ab0f9c07aa change paper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
8 * スケーラビリティとはサービス利用者が増加したとき単純にノードを追加するだけで線形に性能を向上させる能力
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
9
177
b5ab0f9c07aa change paper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
10 # 研究目的(2/2)
b5ab0f9c07aa change paper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
11 * 本研究では、Aliceの通信の信頼性を高めるためにNAT越えの機能設計を提案する
b5ab0f9c07aa change paper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
12 * そしてその実現にはAliceの再設計が必要であることを示す
b5ab0f9c07aa change paper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
13 * Aliceの問題点を整理し、得られた知見をもとに分散フレームワークChristieの設計を行う
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
14
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 # 目次
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 * Aliceの概要
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
18 * AliceのNAT越え
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
19 * Aliceの問題点
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
20 * Christieの設計
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
21 * 他フレームワークとの比較
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 * まとめ
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
23 * 今後の課題
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
24
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
25
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
26
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 # Data Segment と Code Segment
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 * Aliceではデータを **Data Segment(DS)** 、タスクを **Code Segment(CS)** という単位に分割して依存関係を記述することでプログラミングを行う。
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 * CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 * CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 ![opt](./images/dsandcs.svg){:width="50%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 # CodeSegmentの依存関係
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 * データの依存関係にないCSは並列実行される
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 * データの依存関係がある場合は Input DS が揃うと順に実行される
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 * DSはCSに専有されるためロックの記述を必要としない
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 ![opt](./images/dsandcs2.svg){:width="60%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 # Data Segment と CodeSegment
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 * AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 * ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 # Data Segment Manager
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 * DS の集合体であるデータベースを Alice では **DS Manager(DSM)** と呼ぶ。
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 * DSM 内の DS には対応する一意の String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 ![opt](./pictures/key.svg){:width="50%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 # Data Segment Manager
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 * Local DSM … 各ノード固有のデータベース
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 * Remote DSM … 他のノードのLocal DSMのproxy。接続しているノードの数だけ存在する。
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 * Remote DSMに書き込むと対応するノードのLocalDSMに書き込まれる
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
53 * Remote DSMにはString型のDSM keyを指定してアクセスする
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 ![opt](./pictures/newDSM.svg){:width="50%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
56 # Data Segment API
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
57 * DSの取得
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
58 * take/peek
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
59 * DSの追加
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
60 * put/update
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
61 * DSの転送
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
62 * flip
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
63
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
64 # Code Segmentの記述例
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
65 * take/peekをするにはcreate/setKeyメソッドを使わなければならない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
66 * *create* でインプットDGのRecieverを作り、*setKey* でReceiverにインプットとなるkeyを指定
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
67 * データをReceiverから取り出す際は *asClass()* で型を指定
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
68 * 処理をループさせたい場合はCSをnewする
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
69 ```java
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
70 public class TestCodeSegment extends CodeSegment {
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
71 private Receiver input = ids.create(CommandType.TAKE);
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
72
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
73 public TestCodeSegment() {
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
74 input.setKey("count");
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
75 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
76
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
77 @Override
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
78 public void run() {
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
79 int count = input.asClass(Integer.class);
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
80 System.out.println("data = " + count);
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
81
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
82 new TestCodeSegment();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
83
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
84 ods.put("count", count);
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
85 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
86 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
87 ```
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
88
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 # Computation と Meta Computation
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 * Aliceでは、計算の本質的な処理をComputatin、Computationとは別のレベルでそれを支える処理をMeta Computationとして分けて考える。
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 * Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 * Meta Computationはそれを実現している処理
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 * DSの待ち合わせ
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 * 分散トポロジーの構成
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 * 通信の切断・再接続時の処理
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 * データの表現形式の選択
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 # Computation と Meta Computation
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 * 分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 * プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 * シンプルで見通しの良いコードを保つ
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
103 # AliceのMeta Computation - Topology Manager/Topology Node
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 * Topology Manager
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 * ノード間の接続管理やトポロジーの構成管理行うMeta Computation
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 * Static Topology ManagerとDynamic Topology Managerがある
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 * Topology Node
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 * 各ノード側でTopology Managerとの通信を行うMeta Computation
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 * ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信やノード間の接続を行う
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
111 # AliceのMeta Computation - Topology Manager/Topology Node
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
112 * Topology Managerを立ち上げる
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 * 各Topology NodeはTopology Managerに参加表明をし接続すべきノードの情報を要求する
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 ![opt](./pictures/tree1.svg){:width="60%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
116 # AliceのMeta Computation - Topology Manager/Topology Node
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 * 参加表明があった順に各ノードにnodeNameを割り当て、接続するべきノードのIPアドレス/ポート番号を送る
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 ![opt](./pictures/tree2.svg){:width="60%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
120 # AliceのMeta Computation - Topology Manager/Topology Node
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 * Topology Nodeが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでオーバーレイネットワークが作られる
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 * Topology Managerは接続情報を管理し、実際の接続はTopology Nodeが行う
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 ![opt](./pictures/tree3.svg){:width="60%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
125 # AliceのMeta Computation - 圧縮
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
126 * DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
127 * 圧縮したデータの伸長と圧縮したままの転送が同時に可能
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
128 ![opt](./pictures/compress.svg){:width="80%"}
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
130 # AliceのMeta Computation - 圧縮
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
131 * 圧縮の指定には宛先DGM keyに"compressed"とつけるだけでよい
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
132 `put("compressedRemoteDGM", "key", data)`
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
133 * 伸長も *asClass()* した際に自動でされる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
134 * コードの変更が抑えて圧縮・非圧縮が切り替えられる
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
136 # AliceのNATを越え
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
137 * NATを越えたノード間通信は分散処理の課題である
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
138 * Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくともTopology Managerを増やすことでNAT越えが可能
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
140 # AliceのNATを越え接続
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
141 * 各プライベートネットワーク内を管理するPrivate Topology Manager
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
142 * グローバルIPアドレスを持ったGlobal Topology Managerを1つ立てる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
143 * TopologyNodeが複数対応できるためPrivate/Global Topology Managerに接続
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
144 ![opt](./pictures/overNAT.svg){:width="70%"}
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 # 複数のTopology Managerへの対応
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
148 * 別トポロジーのアプリケーションの連携やNAT越えはノードが複数のTopologyManagerに接続することで可能になる
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 * この機能を実現するにはTopology Nodeが各Topology Managerに対応する複数のnodeNameを持つようにする必要がある
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 * Topology Nodeは割り当てられたnodeNameをDSとして保持してTopology Managerと通信を行うため、nodeNameの衝突を避けなければならない
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 ![opt](./pictures/somehostname.svg){:width="50%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 # Local DSMの切り替えによる対応
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 * 通常のLocal DSMとは別にTopology ManagerごとのLocal DSMを作成しnodeNameを管理
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 * Tpology Manager/Nodeの働きはそのままに、指定するLocal DSMを変えるだけでTopology Managerの複数対応が可能
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 ![opt](./pictures/somehostname2.svg){:width="50%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
159
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
160 # Aliceの問題点 - LocalDSMを複数立ち上げられない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
161 * AliceではDSMを管理するクラスがstaticで書かれていたためLocal DSMを複数立ち上げることができない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
162 * このstaticを抜くにはAliceのコード全体を大きく変更しなければならない
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
163 * 現状ではNAT越えのMeta Computationの追加が困難
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
164 * 複数インスタンスを立ち上げての分散プログラムのテストが書けない
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
165 * 再設計の必要がある
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
166
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
167 # Aliceの問題点 - APIシンタックスの分離
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
168 * setKeyは記述場所が決まっておらず、待ち合わせを行っているCSの外からも呼べる
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
169 * どのkeyを待っているのか不明なCSが生まれてしまう
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
170 * setKeyではkeyを動的に指定することができる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
171 * どんな処理を行っているかわかりづらい
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
172 * 対応するput箇所も修正しなければならない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
173 * モデル検査しづらくなる
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
175 # Aliceの問題点 - APIシンタックスの分離
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
176 * setKeyは全てのcreateが終わった最後に呼ばなければならない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
177 * Input DGの待ち合わせを行うカウンタはcreateの総数を持っている
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
178 * カウントが0になると入力が揃ったと判断しrunに入る
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
179 * countとsetKeyを交互に書くと入力が揃わないまま実行されNullPointExceptionになる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
180 ```java
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
181 class ShowData extends CodeSegment{
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
182 private Receiver[] info;
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
183
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
184 public ShowData(int cnt) {
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
185 info = new Receiver[cnt];
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
186 for (int i= 0;i < cnt; i++) {
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
187 info[i] = ids.create(CommandType.TAKE);
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
188 info[i].setKey(SetInfo.array[i]);
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
189 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
190 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
191
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
192 @Override
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
193 public void run() {
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
194 int size = 0;
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
195 for (Receiver anInfo : info) {
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
196 DataList dlist = anInfo.asClass(DataList.class);
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
197 dlist.showData();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
198 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
199 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
200 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
201 ```
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
203 # Aliceの問題点 - 型が推測できない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
204 * Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
205 * しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
206 * 型をDSをputした箇所までコードをたどる必要がある
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
207
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
208 # Aliceの問題点 - まとめ
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
209 * 以下の問題がAliceの信頼性・拡張性を下げている
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
210 * Local DSMを複数立ち上げられないため、Topology Managerの拡張やテストが困難
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
211 * インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
212 * setKeyの記述順序や型を気にしてプログラミングをしなくてはならない
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
213
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
214 # 分散フレームワークChristieへの必要要件
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
215 * Aliceの問題点を踏まえ、フレームワークをChristieを設計する
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
216 * staticなLocalDSMをなくし複数インスタンスを立ち上げられるようにすることでスケーラビリティを高める
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
217 * 煩雑なAPIをシンプルにし、記述性を高める
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
218 * 型の整合性をとれるようにし、信頼性を向上させる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
219
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
220 # Christie - 基本設計(1)
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
221 * Javaで実装される
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
222 * CS/DSの依存関係や、DSMの構造、リモートノードへの接続方法はAliceと同様である
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
223 * 将来的に当研究室で開発しているGearsOSに統合したい
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
224 * GearsOSに倣い、Code Gear(CG)/ Data Gear(DG) という名称を用いる
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
226 # Christie - 基本設計(2)
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
227 * Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
228 * 1つのCGMは1つのLocalDGMを持つ
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
229 * CGM同士はThreadPoolとCGMのリストを共有している
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
230 * メタ計算で全てのCGMにアクセス可能
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
231 ![opt](./pictures/ChristieClass.svg){:width="60%"}
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
232
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
233 # Christie - 基本設計(2) DGMの複数立ち上げ
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
234 * ChristieではCGMを2つ生成すればLocalDGMも2つ作られる
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
235 * NAT越えなどの機能拡張に対応可能
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
236 * 複数のLocalDGM同士のやりとりは、Remoteへの接続と同じようにRemoteDGMを介してアクセスする
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
237 * 分散プログラムのローカルでのテストが可能になる
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
238 ![opt](./pictures/DGM.svg){:width="50%"}
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
239
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
240 # Christie - 基本設計(3)
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
241 * CG を記述する際は Alice同様CodeGear.classを継承
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
242 * CGは *void run(CodeGearManager cgm)* を持ち、run メソッド内に処理を記述
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
243 * run内で新たなCGを作るためのAPIにはCGM経由で呼び出す
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
244 * このようにCGMを持ち運ぶ書き方はGearsOSに合わせてた書き方
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
245
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
246 # Christie - アノテーションを用いたインプット記述
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
247 * keyの指定にはJavaのアノテーションを用いる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
248 * 先頭を@で始める注釈
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
249 * 独自アノテーションを定義できる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
250 * アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
252 # Christie - アノテーションを用いたインプット記述
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
253 * InputのためのDGを宣言し、その上にアノテーションでkeyを指定
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
254 * Takeの例
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
255 ```java
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
256 @Take(”count”)
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
257 public DataGear<Integer> count = new DataGear<>();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
258 ```
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
259 * RemoteTakeの例
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
260 ```java
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
261 @RemoteTake(dgmName="remote", key=”count”)
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
262 public DataGear<Integer> count = new DataGear<>();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
263 ```
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
265 # Christie - アノテーションを用いたインプット記述
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
266 * アノテーションは必ずフィールドに付けなければならない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
267 * InputDGの生成とkeyの指定を一箇所に書ける
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
268 * アノテーションの内容はコンパイル時に決定される
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
269 * 動的なkey指定を防ぐ
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
271 # Christie - 型を指定しないデータ取り出し
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
272 * InputDGを宣言する際には必ず型の指定が必要となるため、CG内で型を把握できる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
273 * DataGearはJavaの総称型を用いて<>内に指定した型を受け取る
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
274 ```java
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
275 @Take(”count”)
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
276 public DataGear<Integer> count = new DataGear<>();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
277 ```
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
278
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
279 # Christie - 型を指定しないデータ取り出し
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
280 * 宣言された型は内部で保存され、ノード間通信でも保たれる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
281 * AliceのasClass()と違い、getData()で型を指定せずにデータを取り出すことができる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
282 ```java
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
283 public class GetData extends CodeGear{ @Take(”name”)
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
284 public DataGear<String> name = new DataGear<>();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
285
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
286 @Override
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
287 protected void run(CodeGearManager cgm) {
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
288 System.out.println(”this name is : ” + name.getData());
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
289 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
290 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
291 ```
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
292 * 取得したDGが待ち合わせに指定した型と違う場合はエラーになる
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
294 # Christie - まとめ
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
295 * CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
296 * アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
297 * 型の整合性を保証することで信頼性が向上した
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
298
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
299 # Christieと他フレームワークの比較
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
300 * Akka、Hazelcastと比較してChristieの特徴を述べる
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
301 * Akka ...Scala/Java向け分散フレームワーク
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
302 * Hazelcast ...Java向け分散フレームワーク
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
303
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
304 # Christieと他フレームワークの比較 - Akka
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
305 * アクターモデル
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
306 * アクターと呼ばれるオブジェクト同士が並列で非同期メッセージを送受信するモデル
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
307 * アクターは固有のアドレス持つ
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
308 * ローカルアクターにもリモートアクターにもアドレス指定でメッセージを送受信
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
309 * アクターはメールボックスというキューを持つ
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
310 * 受け取ったメッセージをパターンマッチで順次処理
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
311 * パターンマッチにはScalaのcase classを用いられる
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
312 ![opt](./pictures/Akka.svg){:width="70%"}
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
314 # Christieと他フレームワークの比較 - Hazelcast
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
315 * キーと値の1対1でデータを管理するインメモリ・データグリッド
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
316 * 複数のノードに分散させたデータを、仮想的な1つのメモリ空間に見せるモデル
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
317 * プログラマがサーバを意識せずに共有のタプルスペースに対してデータをget/put
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
318 * 共有のタプルスペースに書き込むとマルチキャストで全サーバにデータが送られる
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
319 ![opt](./pictures/Hazelcast.svg){:width="50%"}
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
321 # Christieと他フレームワークの比較 - 設計思想
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
322 * AkkaやHazelcastはロケーション透過性が高く、分散プログラムの煩雑な処理を抽象度を高めることで隠している
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
323 * Christieでは分散性を明示的に意識しながら記述できるためチューニングしやすい
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
324 * 通常計算とメタ計算に分けているため複雑さを下げている
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
325
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
326 # Christieと他フレームワークの比較 - 記述性
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
327 * アノテーションを使ったインプットの指定はAkkaやHazelcastにはない
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
328 * 複数のインプットを待ち合わせして処理を行いたい場合
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
329 * Akkaは待ち合わせ処理をプログラマが書かなければならない
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
330 * Christieでは複数のインプットを記述でき待ち合わせ処理が必要ない
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
331 * データの圧縮通信を指定したい場合
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
332 * Akka、Hazelcastでは圧縮メソッドが用意されているため、それを用いて記述する
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
333 * ChristieではDGMkeyの名前を変えるだけでメソッド呼び出しの記述が要らないため少ない変更で拡張が可能
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
334
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 # まとめ
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
336 * AliceのプロトコルやMeta Computationを説明し、TopologyManagerを用いたNAT越えの手法を示した
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
337 * Aliceの問題点を整理し、再設計の必要性を述べた
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
338 * LocalDGMの複数立ち上げを可能にし、テストや機能拡張がしやすい環境を整えた
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
339 * Christieではアノテーションを用いたAPIで信頼性の高い記述を実現した
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
340 * Christieを他のフレームワークと比較し、分散性を意識して記述できる特徴があることを示した
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
341
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
342 # 今後の課題
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
343 * DataGearのメタレイヤーへの移行
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
344 * TopologyManagerの実装
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
345 * 実用性の検証
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
346 * Jungleとの統合
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
347 * GearsOSへの移行
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
348
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
349 # Christie - CGの生成方法
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
350 1. StartCodeGear.classを継承しCGMを生成する
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
351 2. CGをnewしたあと*setup*を用いる
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
352 * newが終わらないとアノテーションから待ち合わせを行う処理ができないため
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
353 * このときCGMがCGに渡されるため、プログラマが引数にCGMを渡す必要はない
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
354
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
355 ```java
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
356 public class StartTest extends StartCodeGear{//StartCG
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
357
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
358 public StartTest(CodeGearManager cgm) {
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
359 super(cgm);
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
360 }
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
361
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
362 public static void main(String args[]){
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
363 StartTest start = new StartTest(createCGM(10000));//CGMを生成
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
364 }
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
365
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
366 @Override
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
367 protected void run(CodeGearManager cgm) {
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
368 cgm.setup(new TestCodeGear());//CGの待ち合わせを開始
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
369 getLocalDGM().put("count", 1);
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
370 }
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
371 }
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
372 ```
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
373
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
374
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 <style type="text/css">
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 <!--
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 *{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 font:nomal 100% 'PT Sans';
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
380
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 ul > li{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 list-style-type:disc;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
384
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 .slide h1{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 text-align:left;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 color:#777777;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 font:bold 40px/1.13 'PT Sans', sans-serif;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
389 margin-bottom: 50px;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
391
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 div#slide1 h1{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 text-align:left;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 color:#777777;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 font:bold 60px 'PT Sans', sans-serif;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 margin-bottom: 50px;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
398
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 pre > code{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 font-family:'Droid Sans Mono', 'Courier New', monospace;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
402
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 img[alt="opt"]{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 display: block;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 margin-left: auto;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 margin-right: auto;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
408
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 img[alt="right"]{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 margin-right: 0;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
412
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 table {
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 margin-left: auto;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 margin-right: auto;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
417
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 th {
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 font-size: 120%;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
421 -->
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 </style>