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
910
2
Share
操作変換アルゴリズムとScala
共同編集のサーバーサイドをScalaで作成した話です
yuichi0301
December 11, 2018
More Decks by yuichi0301
See All by yuichi0301
My Impressions Of Scala
yuichiuchida
0
44
Other Decks in Technology
See All in Technology
BIツール「Omni」の紹介 @Snowflake中部UG
sagara
0
270
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
2
17k
Digitization部 紹介資料
sansan33
PRO
1
7.2k
AgentCore RuntimeからS3 Filesをマウントしてみる
har1101
3
400
Azure Lifecycle with Copilot CLI
torumakabe
0
150
Master Dataグループ紹介資料
sansan33
PRO
1
4.6k
Introduction to Bill One Development Engineer
sansan33
PRO
0
400
デシリアライゼーションを理解する / Inside Deserialization
tomzoh
0
240
ADOTで始めるサーバレスアーキテクチャのオブザーバビリティ
alchemy1115
2
270
システムは「動く」だけでは足りない 実装編 - 非機能要件・分散システム・トレードオフをコードで見る
nwiizo
2
320
DevOpsDays Tokyo 2026 見えない開発現場を、見える投資に変える
rojoudotcom
2
160
インフラを Excel 管理していた組織が 3 ヶ月で IaC 化されるまで
geekplus_tech
3
180
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
330
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
250
From π to Pie charts
rasagy
0
160
30 Presentation Tips
portentint
PRO
1
270
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Rails Girls Zürich Keynote
gr2m
96
14k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Code Reviewing Like a Champion
maltzj
528
40k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Agile that works and the tools we love
rasmusluckow
331
21k
Between Models and Reality
mayunak
3
260
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]
ご静聴ありがとうございました