真の未来開拓倶楽部 WikiWikipedia Is Dead ↗ ← トップ
セルオートマトンとライフゲーム

【実装】P2P ライフゲーム:自己増殖する、民主的な網

中枢も、全体の時計も持たない。隣とだけ話して、ライフゲームは進む。ブラウザのタブ同士が、サーバー無しで、直接つながる。実際に動きます。

スローガン:「テクノロジーで真のデモクラシーを取り戻せ。」
中枢が無くても、局所のルールと、対等な隣人だけで、全体は動く。これを、小さな実装で、確かめます。

実装A:非同期のセル・エージェント

盤面の各セルが、独立した小さなエージェントです。全体の時計も、全体の盤面も、ありません。各セルは、隣の8つが追いつくのを待って、自分の世代を進めます。順番は、毎回、ランダム。それでも、結果は、普通の同期型ライフゲームと、一致します(下の「照合」)。

起動中…

水色=全体の最小世代の盤面。橙=その場所が、先行している(他より先の世代にいる)セル。先行差が出ること自体が、「全体の時計が無い」ことの証拠です。

実装B:タイル・ピア(タブ間のP2P)

無限の盤面を、32×32のタイルに分け、ブラウザの一つのタブが、一枚のタイルを担当します。隣り合うタブは、端のセルだけを、直接やり取りします。サーバーは、ありません(ブラウザの BroadcastChannel を使用)。

  1. 下の「別のタブを開く」を押す。
  2. 新しいタブは、既存のタブの隣の席を、自動で取る。
  3. 片方で、グライダーを置く。タブの境界を、越えて、隣のタブへ渡っていく。

接続中…

プロトコル(要点)

メッセージ内容
who「誰かいますか」。既存のピアが、自分の端を返す
edge自分のタイル座標、世代g、端の行と列(4辺と4隅)

検証

実装検証結果
Aランダム初期盤面で、約3000回の更新中、毎回、同期型の参照実装と照合不一致 0
B2枚のタイルで、境界をまたぐグライダーとランダムセルを、60世代、参照実装(一枚の盤面)と照合不一致 0

検証は、Node.js上で、この実装のコードそのものに対して行いました。

「自己増殖」の、正しい意味

この網は、勝手に他人のコンピュータへ広がりません。広がるのは、同意した人が、自分で、タブを開き、ノードを立てるときだけです。ウイルスやワームの手法は、使いません。これは、#task001:北大 未来開拓倶楽部を創造的破壊せよの境界条項(合法・人を傷つけない)に、従う設計の一部です。

次の段階(未実装)

段階内容課題
1別々の端末のブラウザ同士を、WebRTCで直結最初の接続の取り次ぎ(シグナリング)が要る。手動の貼り付け方式なら、サーバー不要
2盤面の一部を、IPFSに記録し、誰でも再現できるようにIPFSと、内容アドレスの意味
3規則を、投票で変える、ライフゲーム的な、民主的実験P2Pでデモクラシーを:三つの層、テクノロジーでデモクラシーを実現する
いまのBは、同じ端末・同じブラウザの、タブ間で動きます。端末をまたぐ段階1は、次の実装です。ここで「できる」と言えるのは、局所同期のアルゴリズムと、その正しさ(上の検証)までです。

関連項目

Wikipedia ミラーで読む(wikipedia-is-dead.com)

実装側:マニフェスト ↗ / ネットワーク ↗ / 削除記事の救出 ↗ / 参加する ↗ 思想とURLの対応表

このページを参照しているページ