分123Waveの共同編集さて,ここまでの話であれば,Waveは少し特殊な「分散ストレージ」のようなイメージです。waveletという共有データがプロバイダ間で自動的に同期され,各自が自分のプロバイダからそれを読み書きするという構造です。Waveに特徴的な機能として,「⁠リアルタイムの共同編集」が挙げられます。利用者は単にドキュメントを交換できるというだけでなく,同じドキュメントを「同時に編集」することが可能です。ここがまさにWaveのコア技術の一つともいえるでしょう。競合を解決する単純なリソース管理の方法では,複数の人が同じドキュメントを編集すると競合が発生し,編集内容をうまく統合できないことがあります。競合を解決するにはいくつかの方法があります(表1⁠)⁠。Transformation,操作変換)と呼ばれる理論的な基盤をベースにしています。OTではドキュメントの状態を,連続する一連の操作(operation)として表現します。3)といった具合に表されます。誰でも同時に編集できる。同時に編集することはできない。誰でも同時に編集できる。同じ場所を編集したのでない限りは,各編集内容が適切に組み合わされる操作を変換する複数の人が同時に操作を行った場合,サーバ側でそれらが合成されます。サーバは一連の操作が整合性を持つように各操作を変換(transformation)します。図8では,2番めの位置を削除する操作op2が,別の操作op1の影響で,サーバ上では3番めの位置を削除する操作op2'に変換されています。このように,同時並行で発生する複数の操作を,矛盾のないように一連の操作に変換する手続きがOTです。以上のように,waveletの内容は一連の操作の列によって定まります。各プロバイダは,この操作の列をwaveletの履歴(history)として保持しており,いつでも過去の状態を取り出せるようになっています。この履歴はwaveletを同期するためにも用いられます。クライアントがオフラインになったり,プロバイダ間の通信が一時的に途絶えたとしても,通信が再開してからその間の差分だけを転送することによって最新の状態を取り戻せます。オープンソース化ここまでの話でも十分に複雑ですが,実際の処理はもっと複雑です。多数の操作を効率良く処理するために,複数の操作を合成することが行われます。不具合により間違った操作が行われてしまうことを防ぐためにチェックサムを照合したり,送られてきた内容が本物であるかを検証するために署名を付けることもプロトコルの一部として定義されています。容易に想像できるように,以上のような処理を間違いなく実装することは,いくらプロトコルが公開されたとしても簡単ではないでしょう。そのためGoogleは,こうしたOTのコアとなる部分をオープンソースとして実装し,Google自身もそれを使うことで,互換性の問題を回避しようとしています。第3章を参照)と呼ばれます。これはおもにプロトコルの正しさを確かめるためのリファレンス実装であり,実際の運用を目指したものではありません。現時点ではプロトコルも完全には定まっておらず,大きな変更がしばしば発生する状態ですが,FedOneとの相互運用を目指したプロジェクトもすでにいくつか始まっています(表2⁠)⁠。Waveの開発者向けサイトであるWaveSandbox.comでは,FedOneとの相互運用をスタートしており,Waveを活用したソフトウェアの開発も徐々に可能となってきています。Google公式のWaveプロトタイプ実装。C++/Qtで実装されたWaveクライアント。Rubyで実装されたWaveサーバ。Webベースのインタフェースを持ち,FedOneとの相互接続も可能となっている【URL】http://wiki.github.com/danopia/ruby-on-sailsまとめWaveのプロトコルについて,その全体像を見てきました。まとめると,Waveとは次のような特徴を持った共有ストレージであると考えられます。任意のXML文書を保管できる多人数でリアルタイムに編集ができる編集内容の履歴が保持される文書は複数のサーバに分散される本記事は,第1章のみの掲載になります。第2章からは,より具体的なWaveのしくみを解説し,自分でWaveプロバイダを立ち上げる方法を説明します。Vol.54」をご覧下さい。wavelet著者プロフィール西田圭介(にしだけいすけ)COBOLコンパイラからVPNサーバ,ドライバ開発からWebアプリまで,必要とあらば何でも手掛けるフリーエンジニア。IPAの平成14年度未踏ユースにおけるスーパークリエータ。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。