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
900
操作変換アルゴリズムとScala
共同編集のサーバーサイドをScalaで作成した話です
yuichi0301
December 11, 2018
Tweet
Share
More Decks by yuichi0301
See All by yuichi0301
My Impressions Of Scala
yuichiuchida
0
43
Other Decks in Technology
See All in Technology
HonoとJSXを使って管理画面をサクッと型安全に作ろう
diggymo
0
110
能登半島災害現場エンジニアクロストーク 【JAWS FESTA 2025 in 金沢】
ditccsugii
0
900
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
140
WEBサービスを成り立たせるAWSサービス
takano0131
1
180
AI Agent Dojo #2 watsonx Orchestrateフローの作成
oniak3ibm
PRO
0
130
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
12
81k
カンファレンスに託児サポートがあるということ / Having Childcare Support at Conferences
nobu09
1
620
ビズリーチ求職者検索におけるPLMとLLMの活用 / Search Engineering MEET UP_2-1
visional_engineering_and_design
1
160
ソースを読むプロセスの例
sat
PRO
15
9.3k
事業開発におけるDify活用事例
kentarofujii
1
290
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
310
生成AI時代のセキュアコーディングとDevSecOps
yuriemori
0
130
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
600
Music & Morning Musume
bryan
46
6.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
Gamification - CAS2011
davidbonilla
81
5.5k
What's in a price? How to price your products and services
michaelherold
246
12k
Why Our Code Smells
bkeepers
PRO
340
57k
4 Signs Your Business is Dying
shpigford
185
22k
The Language of Interfaces
destraynor
162
25k
A better future with KSS
kneath
239
18k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
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]
ご静聴ありがとうございました