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

ご静聴ありがとうございました