操作変換アルゴリズムとScala
by
yuichi0301
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
ご静聴ありがとうございました