annotate presen/sample.markdown @ 182:a4c6184d3e22

minor change
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Wed, 07 Feb 2018 09:18:50 +0900
parents 38d95e434fbc
children b62fc3a499f9
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)** と呼ぶ。
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
46 * DSM 内の DS には対応する String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。
175
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の記述例
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
65 * take/peekをするにはcreate/setKeyメソッドを使う
176
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()* で型を指定
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
68 * CSを生成し待ち合わせを指定するにはCSをnewする
176
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
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
90 * 分散計算にはアルゴリズムの他に、以下のような処理が必要である。
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 * 分散トポロジーの構成
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 * 通信の切断・再接続時の処理
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
93 * データの圧縮を含む表現形式の選択
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
94 * NATなどのネットワークの詳細
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
96 * Aliceでは、これらをMeta Computationと呼ぶ。
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
97 * Meta ComputationもCS/DSによって記述される。
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
98 ![opt](./pictures/metaCSDS.svg){:width="50%"}
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
99
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
100 # AliceのMeta Computation - Topology Manager
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 * Topology Manager
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 * ノード間の接続管理やトポロジーの構成管理行うMeta Computation
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
103 * Static Topology Manager...参加ノード数の決まったトポロジーをファイルに記述
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
104 * Dynamic Topology Manager...可変長のノードに対応し、修復も行う
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
105 ![opt](./pictures/connect.svg){:width="50%"}
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
107 # AliceのMeta Computation - 圧縮
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
108 * 圧縮したデータの伸長と圧縮したままの転送を同時に行いたい
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
109 * DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
110 ![opt](./pictures/compress.svg){:width="80%"}
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
112 # AliceのMeta Computation - 圧縮
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
113 * 圧縮の指定には宛先DGM keyに"compressed"とつけるだけでよい
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
114 `put("compressedRemoteDGM", "key", data)`
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
115 * 伸長も *asClass()* した際に自動でされる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
116 * コードの変更が抑えて圧縮・非圧縮が切り替えられる
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
118 # AliceのNAT越え
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
119 * NATを越えたノード間通信は分散処理の課題である
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
120 * Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくとも複数のTopology Managerを立ち上げることでNAT越えが可能
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
121 ![opt](./pictures/overNAT.svg){:width="70%"}
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 # 複数のTopology Managerへの対応
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
124 * この機能を実現するにはノードに割り当てられたnodeNameの衝突を避けなければならない
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 * 通常のLocal DSMとは別にTopology ManagerごとのLocal DSMを作成しnodeNameを管理
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 * Tpology Manager/Nodeの働きはそのままに、指定するLocal DSMを変えるだけでTopology Managerの複数対応が可能
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 ![opt](./pictures/somehostname2.svg){:width="50%"}
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
129
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
130 # Aliceの問題点 - LocalDSMを複数立ち上げられない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
131 * AliceではDSMを管理するクラスがstaticで書かれていたためLocal DSMを複数立ち上げることができない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
132 * このstaticを抜くにはAliceのコード全体を大きく変更しなければならない
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
133 * 現状ではNAT越えのMeta Computationの追加が困難
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
134 * 複数インスタンスを立ち上げての分散プログラムのテストが書けない
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
135 * 再設計の必要がある
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
136
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
137 # Aliceの問題点 - APIシンタックスの分離
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
138 * setKeyは記述場所が決まっておらず、待ち合わせを行っているCSの外からも呼べる
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
139 * どのkeyを待っているのか不明なCSが生まれてしまう
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
140 * setKeyではkeyを動的に指定することができる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
141 * どんな処理を行っているかわかりづらい
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
142 * 対応するput箇所も修正しなければならない
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
144 # Aliceの問題点 - APIシンタックスの分離
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
145 * setKeyは全てのcreateが終わった最後に呼ばなければならない
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
146 * このように交互に書くと実行時データを取り出すときにNullPointerExeptionになる
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
147 ```java
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
148 class TestCG extends CodeSegment{
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
149 private Receiver input1;
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
150 private Receiver input2;
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
151
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
152 public TestCG() {
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
153 input1 = ids.create(CommandType.TAKE);
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
154 input1.setKey("hoge");
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
155 input2 = ids.create(CommandType.TAKE);
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
156 input2.setKey("huga");
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
157 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
158 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
159 ```
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
161 # Aliceの問題点 - APIシンタックスの分離
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
162 ![opt](./pictures/nullpo.svg){:width="60%"}
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
163
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
164
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
165 # Aliceの問題点 - 型が推測できない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
166 * Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
167 * しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
168 * 型をDSをputした箇所までコードをたどる必要がある
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
169
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
170 # Aliceの問題点 - まとめ
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
171 * 以下の問題がAliceの信頼性・拡張性を下げている
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
172 * Local DSMを複数立ち上げられないため、Topology Managerの拡張やテストが困難
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
173 * インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
174 * setKeyの記述順序や型を気にしてプログラミングをしなくてはならない
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
175 * これらを踏まえフレームワークChristieを設計する
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
176
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
177 # Christie - 基本設計(1)
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
178 * Javaで実装される
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
179 * 処理の単位にCode Gear(CG)/ Data Gear(DG) という名称を用いる
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
180 * Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
182 # Christie - 基本設計(2)
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
183 * CGM同士はThreadPoolを共有
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
184 * ThreadPool...CPUに合わせた並列度でキューに入ったスレッドを順次実行していく実行機構
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
185 * ThreadPoolが増えるとCPUのコア数に合わない量のスレッドを管理することになり、並列性が下がる
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
186 * CGM同士はCGMのリストを共有
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
187 * メタ計算で全てのCGMにアクセス可能
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
188 ![opt](./pictures/ChristieClass.svg){:width="60%"}
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
189
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
190 # Christie - 基本設計(2) DGMの複数立ち上げ
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
191 * ChristieではCGMを2つ生成すればLocalDGMも2つ作られる
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
192 * NAT越えなどの機能拡張に対応可能
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
193 * 複数のLocalDGM同士のやりとりは、Remoteへの接続と同じようにRemoteDGMを介してアクセスする
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
194 * 分散プログラムのローカルでのテストが可能になる
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
195 ![opt](./pictures/DGM.svg){:width="50%"}
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
196
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
197 # Christie - 基本設計(3)
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
198 * CG を記述する際は Alice同様CodeGear.classを継承
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
199 * CGは *void run(CodeGearManager cgm)* を持ち、run メソッド内に処理を記述
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
200 * run内で新たなCGを作るためのAPIにはCGM経由で呼び出す
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
201
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
202 # Christie - アノテーションを用いたインプット記述
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
203 * keyの指定にはJavaのアノテーションを用いる
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
204 * フィールドやメソッドに対して@から始まる属性を付与できる
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
205 * @Override、@SuppressWarningsなど
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
206 * コンパイル時にエラーを出せる
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
207 ```java
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
208 @Take(”count”)
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
209 public DataGear<Integer> count = new DataGear<>();
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
210 ```
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
211
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
212 # Christie - アノテーションを用いたインプット記述
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
213 * 独自アノテーションを定義できる
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
214 * フィールドやメソッドなどターゲットを指定できる
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
215 * アノテーションを保持できる範囲をRUNTIME、CLASS、SOURCEから指定できる
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
216 * 引数をうけとることもできる
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
217
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
218 ```java
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
219 @Target(ElementType.FIELD)
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
220 @Retention(RetentionPolicy.RUNTIME)
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
221 public @interface Take {
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
222 String value();
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
223 }
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
224 ```
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
226 # Christie - アノテーションを用いたインプット記述
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
227 * InputのためのDGをフィールドで宣言し、それに対してアノテーションでkeyを指定
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
228 * アノテーションからRUNTIMEで待ち合わせの処理を行う
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
229 * Takeの例
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
230 ```java
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
231 @Take(”count”)
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
232 public DataGear<Integer> count = new DataGear<>();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
233 ```
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
234 * RemoteTakeの例
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
235 ```java
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
236 @RemoteTake(dgmName="remote", key=”count”)
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
237 public DataGear<Integer> count = new DataGear<>();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
238 ```
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
240 # Christie - アノテーションを用いたインプット記述
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
241 * アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
242 * 待ち合わせを開始するには、newしたあとCGMが持つsetupを行う
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
243 `cgm.setup(new TestCodeGear());`
182
a4c6184d3e22 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 181
diff changeset
244 * フィールドがnewされたあとでないとrefrectionAPIで取れない
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
245
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
246 # Christie - アノテーションを用いたインプット記述
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
247 ![opt](./pictures/setup.svg){:width="70%"}
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
248
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
249 # Christie - アノテーションによるシンタックスの分離阻止
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
250 * アノテーションは必ずフィールドに付けなければならない
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
251 * InputDGの生成とkeyの指定を一箇所に書ける
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
252 * アノテーションの内容はコンパイル時に決定される
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
253 * 動的なkey指定を防ぐ
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
255 # Christie - 型を指定しないデータ取り出し
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
256 * InputDGを宣言する際には必ず型の指定が必要となるため、CG内で型を把握できる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
257 * DataGearはJavaの総称型を用いて<>内に指定した型を受け取る
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
258 ```java
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
259 @Take(”count”)
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
260 public DataGear<Integer> count = new DataGear<>();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
261 ```
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
263 # Christie - 型を指定しないデータ取り出し
180
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
264 * reflectionAPIを使えばアノテーションのついているフィールドの情報もとれる
5a0a11b54ab4 add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
265 * 型を判断できる
176
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 * AliceのasClass()と違い、getData()で型を指定せずにデータを取り出すことができる
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
268 ```java
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
269 public class GetData extends CodeGear{
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
270 @Take(”name”)
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
271 public DataGear<String> name = new DataGear<>();
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
272
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
273 @Override
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
274 protected void run(CodeGearManager cgm) {
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
275 System.out.println(”this name is : ” + name.getData());
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
276 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
277 }
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
278 ```
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
280 # Christie - まとめ
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
281 * CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
282 * アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
283 * 型の整合性を保証することで信頼性が向上した
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
285 # Christieと他フレームワークの比較
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
286 * Akka、Hazelcastと比較してChristieの特徴を述べる
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
287 * Akka ...Scala/Java向け分散フレームワーク
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
288 * Hazelcast ...Java向け分散フレームワーク
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
290 # Christieと他フレームワークの比較 - Akka
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 * アクターと呼ばれるオブジェクト同士が並列で非同期メッセージを送受信するモデル
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
293 * アクターは固有のアドレス持つ
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
294 * ローカルアクターにもリモートアクターにもアドレス指定でメッセージを送受信
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
295 * `akka://mySystem/user/supervisorActor/childActor`
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
296 * アクターはメールボックスというキューを持つ
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
297 * 受け取ったメッセージをパターンマッチで順次処理
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
298 * パターンマッチにはScalaのcase classを用いられる
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
299 ![opt](./pictures/Akka.svg){:width="70%"}
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
300
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
301 # Christieと他フレームワークの比較 - Hazelcast
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
302 * キーと値の1対1でデータを管理するインメモリ・データグリッド
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
303 * 複数のノードに分散させたデータを、仮想的な1つのメモリ空間に見せるモデル
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
304 * プログラマがサーバを意識せずに共有のタプルスペースに対してデータをget/put
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
305 * 共有のタプルスペースに書き込むとマルチキャストで全サーバにデータが送られる
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
306 ![opt](./pictures/Hazelcast.svg){:width="50%"}
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
307
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
308 # Christieと他フレームワークの比較 - 設計思想
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
309 * AkkaやHazelcastはロケーション透過性が高く、分散プログラムの煩雑な処理を抽象度を高めることで隠している
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
310 * Christieでは分散性を明示的に意識しながら記述できるためチューニングしやすい
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
311 * 通常計算とメタ計算に分けているため複雑さを下げている
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
313 # Christieと他フレームワークの比較 - 記述性
178
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
314 * アノテーションを使ったインプットの指定はAkkaやHazelcastにはない
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
315 * 複数のインプットを待ち合わせして処理を行いたい場合
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
316 * Akkaは待ち合わせ処理をプログラマが書かなければならない
074eb76a9184 add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
317 * Christieでは複数のインプットを記述でき待ち合わせ処理が必要ない
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 * Akka、Hazelcastでは圧縮メソッドが用意されているため、それを用いて記述する
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
320 * ChristieではDGMkeyの名前を変えるだけでメソッド呼び出しの記述が要らないため少ない変更で拡張が可能
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
321
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 # まとめ
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
323 * AliceのプロトコルやMeta Computationを説明し、TopologyManagerを用いたNAT越えの手法を示した
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
324 * Aliceの問題点を整理し、再設計の必要性を述べた
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
325 * LocalDGMの複数立ち上げを可能にし、テストや機能拡張がしやすい環境を整えた
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
326 * Christieではアノテーションを用いたAPIで信頼性の高い記述を実現した
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
327 * Christieを他のフレームワークと比較し、分散性を意識して記述できる特徴があることを示した
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
328
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
329 # 今後の課題
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
330 * DataGearのメタレイヤーへの移行
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
331 * ユーザーがDataGear型ではなく任意の型でインプットを宣言できるようにする
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
332 * getData()をせず直接宣言した変数を使う
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
333 * TopologyManagerの実装
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
334 * Christie上にTopologyManagerを実装し、NAT越えが可能か確認する
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
335 * 実用性の検証
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
336 * Aliceと同等の分散プログラムの記述性能があるか確認する
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
337 * アノテーションの処理がオーバーヘッドになっていないか測定する
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
338
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
339 # 今後の課題
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
340 * Jungleとの統合
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
341 * DGMはトランザクションを持たない
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
342 * 当研究室で開発しているJungleデータベースはトランザクションや差分管理機能を持つ
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
343 * Jungleと統合できればより信頼性の高いデータ操作ができる
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
344 * GearsOSへの移行
181
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
345 * 当研究室で開発しているCG/DGモデルのOS
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
346 * モデル検査機構akasyaの搭載など、より信頼性の高い記述環境
38d95e434fbc add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 180
diff changeset
347 * 将来GearsOSの分散部分にChristieを移植できると良い
179
a3ee75a897f3 cut slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
348
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 <style type="text/css">
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 <!--
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 *{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
352 font:nomal 100% 'PT Sans';
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
353 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
354
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
355 ul > li{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
356 list-style-type:disc;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
358
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
359 .slide h1{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 text-align:left;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 color:#777777;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 font:bold 40px/1.13 'PT Sans', sans-serif;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 margin-bottom: 50px;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
364 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
365
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
366 div#slide1 h1{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 text-align:left;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 color:#777777;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
369 font:bold 60px 'PT Sans', sans-serif;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
370 margin-bottom: 50px;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
372
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
373 pre > code{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 font-family:'Droid Sans Mono', 'Courier New', monospace;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 }
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 img[alt="opt"]{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 display: block;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 margin-left: auto;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 margin-right: auto;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
382
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383 img[alt="right"]{
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 margin-right: 0;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
386
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 table {
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 margin-left: auto;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
389 margin-right: auto;
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 th {
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 font-size: 120%;
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 }
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 -->
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 </style>