操作変換アルゴリズムとScala
by
yuichi0301
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
操作変換アルゴリズムとScala Nulab / 内田優一(@yuichi03011)
Slide 2
Slide 2 text
操作変換アルゴリズムって何? - 共同編集で使用するアルゴリズム - コンフリクトがない
Slide 3
Slide 3 text
操作変換アルゴリズムの技術的な要素 - 操作 - 変換関数 - 合成関数 - 制御メカニズム - 同期状態 - 確認待ち状態 - バッファリング状態
Slide 4
Slide 4 text
操作とは - モデル - 3つのアクションがある - insert - delete - retain
Slide 5
Slide 5 text
変換って?具体的には 最初の文字「ABCDE」 Alice 「D」を削除する「ABCE」 -> Alice(DEL 4) Bob 「B」を削除する「ACDE」 -> Bob(DEL 2) 結果 Alice 「ABCE」-> Bob(DEL 2) -> 「ACE」 Bob 「ACDE」 -> Alice(DEL 4) -> 「ACD」
Slide 6
Slide 6 text
空気を読んでいい感じに変換する 最初の文字「ABCDE」 Alice 「D」を削除する「ABCE」 -> Alice(DEL 4) -> 変換 -> Alice(DEL 3) Bob 「B」を削除する「ACDE」 -> Bob(DEL 2) 結果 Alice 「ABCE」-> Bob(DEL 2) -> 「ACE」 Bob 「ACDE」 -> Alice(DEL 3) -> 「ACE」
Slide 7
Slide 7 text
変換関数が使われるタイミング(サーバー)
Slide 8
Slide 8 text
サーバーサイドには何を作ればいい? - 操作(サーバーサイド・クライアントサイド) - 変換関数(サーバーサイド・クライアントサイド) - 合成関数(クライアントサイド)
Slide 9
Slide 9 text
Scalaとsocket.io - PlayFramework - play-socket.io
Slide 10
Slide 10 text
play-socket.ioは Akka Streamsがベースになってる - Source - Sink - Flow
Slide 11
Slide 11 text
play-socket.io
Slide 12
Slide 12 text
所感 - 操作変換アルゴリズムはかなり難しい - play-socket.ioライブラリを使うのは難しい - Node.jsより速い(たぶん) - 時系列に処理されず、やってきたメッセージは即処理されるので、シーケ ンシャルな処理が必要な場合自分で実装する必要がある
Slide 13
Slide 13 text
変換のいくつかの例 (Ins [3、 “a”]、Ins [1、 “b”])= Ins [4、 “a”] (Ins [3、 “a”]、Del [1])= Ins [2、 “a”] ( Del[3]、Ins [1、 “b”])=Del[4] ( Del[3]、 Del[1])= Del[2]
Slide 14
Slide 14 text
ご静聴ありがとうございました