Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
操作変換アルゴリズムとScala
Search
yuichi0301
December 11, 2018
Technology
2
910
操作変換アルゴリズムとScala
共同編集のサーバーサイドをScalaで作成した話です
yuichi0301
December 11, 2018
Tweet
Share
More Decks by yuichi0301
See All by yuichi0301
My Impressions Of Scala
yuichiuchida
0
44
Other Decks in Technology
See All in Technology
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
2
400
Tebiki Engineering Team Deck
tebiki
0
27k
決済サービスを支えるElastic Cloud - Elastic Cloudの導入と推進、決済サービスのObservability
suzukij
2
660
CyberAgentの生成AI戦略 〜変わるものと変わらないもの〜
katayan
0
270
OCI技術資料 : コンピュート・サービス 概要
ocise
4
54k
コンテキスト・ハーネスエンジニアリングの現在
hirosatogamo
PRO
4
480
Go 1.26 Genericsにおける再帰的型制約 / Recursive Type Constraints in Go 1.26 Generics
ryokotmng
0
120
進化するBits AI SREと私と組織
nulabinc
PRO
1
250
システム標準化PMOから ガバメントクラウドCoEへ
techniczna
1
140
OCHaCafe S11 #2 コンテナ時代の次の一手:Wasm 最前線
oracle4engineer
PRO
2
150
20260311 ビジネスSWG活動報告(デジタルアイデンティティ人材育成推進WG Ph2 活動報告会)
oidfj
0
350
Mitigating geopolitical risks with local-first software and atproto
ept
0
110
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
230
Everyday Curiosity
cassininazir
0
170
Bash Introduction
62gerente
615
210k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
52k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Designing for humans not robots
tammielis
254
26k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Mind Mapping
helmedeiros
PRO
1
120
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
52k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
480
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
130
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
990
Transcript
操作変換アルゴリズムとScala Nulab / 内田優一(@yuichi03011)
操作変換アルゴリズムって何? - 共同編集で使用するアルゴリズム - コンフリクトがない
操作変換アルゴリズムの技術的な要素 - 操作 - 変換関数 - 合成関数 - 制御メカニズム -
同期状態 - 確認待ち状態 - バッファリング状態
操作とは - モデル - 3つのアクションがある - insert - delete -
retain
変換って?具体的には 最初の文字「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」
空気を読んでいい感じに変換する 最初の文字「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」
変換関数が使われるタイミング(サーバー)
サーバーサイドには何を作ればいい? - 操作(サーバーサイド・クライアントサイド) - 変換関数(サーバーサイド・クライアントサイド) - 合成関数(クライアントサイド)
Scalaとsocket.io - PlayFramework - play-socket.io
play-socket.ioは Akka Streamsがベースになってる - Source - Sink - Flow
play-socket.io
所感 - 操作変換アルゴリズムはかなり難しい - play-socket.ioライブラリを使うのは難しい - Node.jsより速い(たぶん) - 時系列に処理されず、やってきたメッセージは即処理されるので、シーケ ンシャルな処理が必要な場合自分で実装する必要がある
変換のいくつかの例 (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]
ご静聴ありがとうございました