Mercurial > hg > Papers > 2017 > kazuma-thesis
changeset 20:e7d248c9c30a
fix
author | Kazuma Takeda |
---|---|
date | Thu, 16 Feb 2017 10:49:32 +0900 |
parents | b431e3db35c5 |
children | 458ff581cdc8 |
files | prepaper/finalPre.tex presen/images/Jungle.graffle presen/slide.html presen/slide.md presen/slide.pdf.html |
diffstat | 5 files changed, 1341 insertions(+), 401 deletions(-) [+] |
line wrap: on
line diff
--- a/prepaper/finalPre.tex Wed Feb 15 22:54:45 2017 +0900 +++ b/prepaper/finalPre.tex Thu Feb 16 10:49:32 2017 +0900 @@ -30,14 +30,13 @@ \twocolumn [ \maketitle \begin{onecolabstract} -There is a gap between convensional Database and the program structures, -for example item list structure in a game have to be a relation table of -items and users. It is sometimes called Ipmidance mismatch. -We introduce a tree structured Database Jungle. Jungle keeps old version of the tree structures, which is suitable for multi-threads. -We are going to use Jungle DB in Unity which is a game developing enviroments re -witten in C\#. To adapt C\# programming we implement Jungle in C\#. +There is a gap between conventional Database and the program structures, +For example item list structure in a game have to be a relation table of +Items and users. It is sometimes called Impedance mismatch. +We introduce a tree structured Database Jungle. Jungle keeps the old version of the tree structures, which is suitable for multi-threads. +We are going to use Jungle DB in Unity, which is a game developing environments written in C\#. To adapt C\# programming we implement Jungle in C\#. There are several implementations of C\# in OS X. -We evaliate C\# Jungle in a real game and C\# in implementaions. +We evaluate C\# Jungle in a real game and C\# in implementations. %There are some problems to Relational Database and NoSQL. %One of them as Impedance mismatch. This problem is cased by a difference between the first normal form of database and the programs. @@ -101,7 +100,7 @@ JungleはJavaとHaskellによりそれぞれの言語で開発されている。 本研究で扱うのはJava版をC\#で再実装したものである。 -\section{Jungle-Sharpの再実装} +\section{Jungle-Sharpの実装} JungleはもともとJavaとHaskellで書かれていた。 今回はJava版をベースにC\#で再実装する。
--- a/presen/images/Jungle.graffle Wed Feb 15 22:54:45 2017 +0900 +++ b/presen/images/Jungle.graffle Thu Feb 16 10:49:32 2017 +0900 @@ -56,6 +56,28 @@ <key>space</key> <string>0c23c45ae9b201f35db0195c7ae905477d83da5b</string> </dict> + <dict> + <key>data</key> + <data> + AAACJGFwcGwEAAAAbW50clJHQiBYWVogB98ACgAOAA0ACAA5YWNz + cEFQUEwAAAAAQVBQTAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA + 0y1hcHBs5bsOmGe9Rs1LvkRuvRt1mAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAKZGVzYwAAAPwAAABlY3BydAAAAWQAAAAj + d3RwdAAAAYgAAAAUclhZWgAAAZwAAAAUZ1hZWgAAAbAAAAAUYlhZ + WgAAAcQAAAAUclRSQwAAAdgAAAAgY2hhZAAAAfgAAAAsYlRSQwAA + AdgAAAAgZ1RSQwAAAdgAAAAgZGVzYwAAAAAAAAALRGlzcGxheSBQ + MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBJbmMuLCAyMDE1 + AABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAACD3wAAPb// + //+7WFlaIAAAAAAAAEq/AACxNwAACrlYWVogAAAAAAAAKDgAABEL + AADIuXBhcmEAAAAAAAMAAAACZmYAAPKwAAANUAAAE7YAAAn8c2Yz + MgAAAAAAAQxCAAAF3v//8yYAAAeTAAD9kP//+6L///2jAAAD3AAA + wG4= + </data> + <key>space</key> + <string>0c23c45ae9b201f35db0195c7ae905477d83da5b</string> + </dict> </array> <key>ColumnAlign</key> <integer>1</integer> @@ -73,7 +95,1001 @@ <array> <dict> <key>Bounds</key> - <string>{{21.259842712578809, 1240.1574915670972}, {524.40945357694363, 93}}</string> + <string>{{620.56751858500809, 567.73910629982129}, {84.33245086649525, 84.332450866495321}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>152</integer> + <key>Shape</key> + <string>Circle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Beneath</key> + <string>YES</string> + <key>Color</key> + <dict> + <key>a</key> + <real>0.20000000000000001</real> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>0.0</real> + </dict> + <key>Fuzziness</key> + <real>2.9887564182281494</real> + </dict> + <key>stroke</key> + <dict> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs80 \cf0 D}</string> + <key>VerticalPad</key> + <real>0.0</real> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>Head</key> + <dict> + <key>ID</key> + <integer>152</integer> + </dict> + <key>ID</key> + <integer>151</integer> + <key>Points</key> + <array> + <string>{730.45609875680725, 490.30658323149373}</string> + <string>{662.73374401825572, 609.90533173306892}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>0</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>106</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>Head</key> + <dict> + <key>ID</key> + <integer>106</integer> + </dict> + <key>ID</key> + <integer>148</integer> + <key>Points</key> + <array> + <string>{971.2466933827709, 383.74103168201384}</string> + <string>{730.45609875680725, 490.30658323149373}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>1</real> + </dict> + <key>HeadArrow</key> + <string>0</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>142</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>Head</key> + <dict> + <key>ID</key> + <integer>115</integer> + </dict> + <key>ID</key> + <integer>147</integer> + <key>Points</key> + <array> + <string>{971.2466933827709, 383.74103168201384}</string> + <string>{562.11791734374242, 179.68636951710266}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>1</real> + </dict> + <key>HeadArrow</key> + <string>0</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>FilledArrow</string> + <key>Width</key> + <real>4</real> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>142</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>Head</key> + <dict> + <key>ID</key> + <integer>145</integer> + </dict> + <key>ID</key> + <integer>146</integer> + <key>Points</key> + <array> + <string>{1041.7628846464006, 486.47671084470687}</string> + <string>{1119.502049707459, 594.43280197973138}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>1</real> + </dict> + <key>HeadArrow</key> + <string>0</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>143</integer> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1077.3358242742115, 552.26657654648375}, {84.33245086649525, 84.332450866495321}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>archive</key> + <data> + YnBsaXN0MDDUAQIDBAUGKyxYJHZlcnNpb25Y + JG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGG + oKcHCBMZHSQoVSRudWxs1QkKCwwNDg8QERJc + TlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JT + cGFjZV8QEk5TQ3VzdG9tQ29sb3JTcGFjZVYk + Y2xhc3NPEBMxIDAgMC4wMzk3NjU3MzM4NCAx + RjEgMCAwABABgAKABtMUDRUWFxhVTlNJQ0NZ + TlNTcGFjZUlEgAOABRAM0hoNGxxXTlMuZGF0 + YU8RAiQAAAIkYXBwbAQAAABtbnRyUkdCIFhZ + WiAH3wAKAA4ADQAIADlhY3NwQVBQTAAAAABB + UFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAA + AADTLWFwcGzluw6YZ71GzUu+RG69G3WYAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AApkZXNjAAAA/AAAAGVjcHJ0AAABZAAAACN3 + dHB0AAABiAAAABRyWFlaAAABnAAAABRnWFla + AAABsAAAABRiWFlaAAABxAAAABRyVFJDAAAB + 2AAAACBjaGFkAAAB+AAAACxiVFJDAAAB2AAA + ACBnVFJDAAAB2AAAACBkZXNjAAAAAAAAAAtE + aXNwbGF5IFAzAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0 + IEFwcGxlIEluYy4sIDIwMTUAAFhZWiAAAAAA + AADzUQABAAAAARbMWFlaIAAAAAAAAIPfAAA9 + v////7tYWVogAAAAAAAASr8AALE3AAAKuVhZ + WiAAAAAAAAAoOAAAEQsAAMi5cGFyYQAAAAAA + AwAAAAJmZgAA8rAAAA1QAAATtgAACfxzZjMy + AAAAAAABDEIAAAXe///zJgAAB5MAAP2Q///7 + ov///aMAAAPcAADAboAE0h4fICFaJGNsYXNz + bmFtZVgkY2xhc3Nlc11OU011dGFibGVEYXRh + oyAiI1ZOU0RhdGFYTlNPYmplY3TSHh8lJlxO + U0NvbG9yU3BhY2WiJyNcTlNDb2xvclNwYWNl + 0h4fKSpXTlNDb2xvcqIpI18QD05TS2V5ZWRB + cmNoaXZlctEtLlRyb290gAEACAARABoAIwAt + ADIANwA/AEUAUABdAGMAcACFAIwAogCpAKsA + rQCvALYAvADGAMgAygDMANEA2QMBAwMDCAMT + AxwDKgMuAzUDPgNDA1ADUwNgA2UDbQNwA4ID + hQOKAAAAAAAAAgEAAAAAAAAALwAAAAAAAAAA + AAAAAAAAA4w= + </data> + <key>b</key> + <string>0.0397657</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>1</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>145</integer> + <key>Shape</key> + <string>Circle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Beneath</key> + <string>YES</string> + <key>Color</key> + <dict> + <key>a</key> + <real>0.20000000000000001</real> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>0.0</real> + </dict> + <key>Fuzziness</key> + <real>2.9887564182281494</real> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>1</real> + </dict> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs80 \cf0 G}</string> + <key>VerticalPad</key> + <real>0.0</real> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>Head</key> + <dict> + <key>ID</key> + <integer>143</integer> + </dict> + <key>ID</key> + <integer>144</integer> + <key>Points</key> + <array> + <string>{971.2466933827709, 383.74103168201384}</string> + <string>{1041.7628846464006, 486.47671084470687}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>1</real> + </dict> + <key>HeadArrow</key> + <string>0</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>142</integer> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{999.59665921315298, 444.31048541145924}, {84.33245086649525, 84.332450866495321}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>archive</key> + <data> + YnBsaXN0MDDUAQIDBAUGKyxYJHZlcnNpb25Y + JG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGG + oKcHCBMZHSQoVSRudWxs1QkKCwwNDg8QERJc + TlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JT + cGFjZV8QEk5TQ3VzdG9tQ29sb3JTcGFjZVYk + Y2xhc3NPEBMxIDAgMC4wMzk3NjU3MzM4NCAx + RjEgMCAwABABgAKABtMUDRUWFxhVTlNJQ0NZ + TlNTcGFjZUlEgAOABRAM0hoNGxxXTlMuZGF0 + YU8RAiQAAAIkYXBwbAQAAABtbnRyUkdCIFhZ + WiAH3wAKAA4ADQAIADlhY3NwQVBQTAAAAABB + UFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAA + AADTLWFwcGzluw6YZ71GzUu+RG69G3WYAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AApkZXNjAAAA/AAAAGVjcHJ0AAABZAAAACN3 + dHB0AAABiAAAABRyWFlaAAABnAAAABRnWFla + AAABsAAAABRiWFlaAAABxAAAABRyVFJDAAAB + 2AAAACBjaGFkAAAB+AAAACxiVFJDAAAB2AAA + ACBnVFJDAAAB2AAAACBkZXNjAAAAAAAAAAtE + aXNwbGF5IFAzAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0 + IEFwcGxlIEluYy4sIDIwMTUAAFhZWiAAAAAA + AADzUQABAAAAARbMWFlaIAAAAAAAAIPfAAA9 + v////7tYWVogAAAAAAAASr8AALE3AAAKuVhZ + WiAAAAAAAAAoOAAAEQsAAMi5cGFyYQAAAAAA + AwAAAAJmZgAA8rAAAA1QAAATtgAACfxzZjMy + AAAAAAABDEIAAAXe///zJgAAB5MAAP2Q///7 + ov///aMAAAPcAADAboAE0h4fICFaJGNsYXNz + bmFtZVgkY2xhc3Nlc11OU011dGFibGVEYXRh + oyAiI1ZOU0RhdGFYTlNPYmplY3TSHh8lJlxO + U0NvbG9yU3BhY2WiJyNcTlNDb2xvclNwYWNl + 0h4fKSpXTlNDb2xvcqIpI18QD05TS2V5ZWRB + cmNoaXZlctEtLlRyb290gAEACAARABoAIwAt + ADIANwA/AEUAUABdAGMAcACFAIwAogCpAKsA + rQCvALYAvADGAMgAygDMANEA2QMBAwMDCAMT + AxwDKgMuAzUDPgNDA1ADUwNgA2UDbQNwA4ID + hQOKAAAAAAAAAgEAAAAAAAAALwAAAAAAAAAA + AAAAAAAAA4w= + </data> + <key>b</key> + <string>0.0397657</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>1</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>143</integer> + <key>Shape</key> + <string>Circle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Beneath</key> + <string>YES</string> + <key>Color</key> + <dict> + <key>a</key> + <real>0.20000000000000001</real> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>0.0</real> + </dict> + <key>Fuzziness</key> + <real>2.9887564182281494</real> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>1</real> + </dict> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs80 \cf0 C}</string> + <key>VerticalPad</key> + <real>0.0</real> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{929.08046794952327, 341.57480624876621}, {84.33245086649525, 84.332450866495321}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>archive</key> + <data> + YnBsaXN0MDDUAQIDBAUGKyxYJHZlcnNpb25Y + JG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGG + oKcHCBMZHSQoVSRudWxs1QkKCwwNDg8QERJc + TlNDb21wb25lbnRzVU5TUkdCXE5TQ29sb3JT + cGFjZV8QEk5TQ3VzdG9tQ29sb3JTcGFjZVYk + Y2xhc3NPEBMxIDAgMC4wMzk3NjU3MzM4NCAx + RjEgMCAwABABgAKABtMUDRUWFxhVTlNJQ0NZ + TlNTcGFjZUlEgAOABRAM0hoNGxxXTlMuZGF0 + YU8RAiQAAAIkYXBwbAQAAABtbnRyUkdCIFhZ + WiAH3wAKAA4ADQAIADlhY3NwQVBQTAAAAABB + UFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAA + AADTLWFwcGzluw6YZ71GzUu+RG69G3WYAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AApkZXNjAAAA/AAAAGVjcHJ0AAABZAAAACN3 + dHB0AAABiAAAABRyWFlaAAABnAAAABRnWFla + AAABsAAAABRiWFlaAAABxAAAABRyVFJDAAAB + 2AAAACBjaGFkAAAB+AAAACxiVFJDAAAB2AAA + ACBnVFJDAAAB2AAAACBkZXNjAAAAAAAAAAtE + aXNwbGF5IFAzAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0 + IEFwcGxlIEluYy4sIDIwMTUAAFhZWiAAAAAA + AADzUQABAAAAARbMWFlaIAAAAAAAAIPfAAA9 + v////7tYWVogAAAAAAAASr8AALE3AAAKuVhZ + WiAAAAAAAAAoOAAAEQsAAMi5cGFyYQAAAAAA + AwAAAAJmZgAA8rAAAA1QAAATtgAACfxzZjMy + AAAAAAABDEIAAAXe///zJgAAB5MAAP2Q///7 + ov///aMAAAPcAADAboAE0h4fICFaJGNsYXNz + bmFtZVgkY2xhc3Nlc11OU011dGFibGVEYXRh + oyAiI1ZOU0RhdGFYTlNPYmplY3TSHh8lJlxO + U0NvbG9yU3BhY2WiJyNcTlNDb2xvclNwYWNl + 0h4fKSpXTlNDb2xvcqIpI18QD05TS2V5ZWRB + cmNoaXZlctEtLlRyb290gAEACAARABoAIwAt + ADIANwA/AEUAUABdAGMAcACFAIwAogCpAKsA + rQCvALYAvADGAMgAygDMANEA2QMBAwMDCAMT + AxwDKgMuAzUDPgNDA1ADUwNgA2UDbQNwA4ID + hQOKAAAAAAAAAgEAAAAAAAAALwAAAAAAAAAA + AAAAAAAAA4w= + </data> + <key>b</key> + <string>0.0397657</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>1</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>142</integer> + <key>Shape</key> + <string>Circle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Beneath</key> + <string>YES</string> + <key>Color</key> + <dict> + <key>a</key> + <real>0.20000000000000001</real> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>0.0</real> + </dict> + <key>Fuzziness</key> + <real>2.9887564182281494</real> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>1</real> + </dict> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs80 \cf0 A}</string> + <key>VerticalPad</key> + <real>0.0</real> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>Head</key> + <dict> + <key>ID</key> + <integer>115</integer> + </dict> + <key>ID</key> + <integer>141</integer> + <key>Points</key> + <array> + <string>{822.4551360657108, 383.74103168201384}</string> + <string>{562.11791734374242, 179.68636951710266}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>0</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>FilledArrow</string> + <key>Width</key> + <real>4</real> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>105</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>Head</key> + <dict> + <key>ID</key> + <integer>104</integer> + </dict> + <key>ID</key> + <integer>140</integer> + <key>Points</key> + <array> + <string>{283.52062154380417, 406.31514992819757}</string> + <string>{190.77933129736587, 186.77298375462891}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>0</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>FilledArrow</string> + <key>Width</key> + <real>4</real> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>28</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>Head</key> + <dict> + <key>ID</key> + <integer>129</integer> + </dict> + <key>ID</key> + <integer>130</integer> + <key>Points</key> + <array> + <string>{283.52062154380417, 406.31514992819757}</string> + <string>{468.72651978008309, 512.88070147767939}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>0</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>28</integer> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{426.56029434683546, 470.71447604443176}, {84.33245086649525, 84.332450866495321}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>129</integer> + <key>Shape</key> + <string>Circle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Beneath</key> + <string>YES</string> + <key>Color</key> + <dict> + <key>a</key> + <real>0.20000000000000001</real> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>0.0</real> + </dict> + <key>Fuzziness</key> + <real>2.9887564182281494</real> + </dict> + <key>stroke</key> + <dict> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Text</key> + <dict> + <key>VerticalPad</key> + <real>0.0</real> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>Head</key> + <dict> + <key>ID</key> + <integer>127</integer> + </dict> + <key>ID</key> + <integer>128</integer> + <key>Points</key> + <array> + <string>{874.58792387408698, 490.30658323149373}</string> + <string>{958.92037474058316, 609.90533173306892}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>0</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>107</integer> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{916.75414930733552, 567.73910629982129}, {84.33245086649525, 84.332450866495321}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>127</integer> + <key>Shape</key> + <string>Circle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Beneath</key> + <string>YES</string> + <key>Color</key> + <dict> + <key>a</key> + <real>0.20000000000000001</real> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>0.0</real> + </dict> + <key>Fuzziness</key> + <real>2.9887564182281494</real> + </dict> + <key>stroke</key> + <dict> + <key>Width</key> + <real>10</real> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs80 \cf0 F}</string> + <key>VerticalPad</key> + <real>0.0</real> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{51.023622510189142, 1268.5039485172024}, {488.97638238931256, 263}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -82,8 +1098,10 @@ <string>Resize</string> <key>FontInfo</key> <dict> + <key>Font</key> + <string>HiraginoSans-W6</string> <key>Size</key> - <real>53</real> + <real>43</real> </dict> <key>ID</key> <integer>121</integer> @@ -109,14 +1127,17 @@ <dict> <key>Text</key> <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 -{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\fonttbl\f0\fnil\fcharset128 HiraginoSans-W6;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} \deftab720 \pard\pardeftab720\qc\partightenfactor0 -\f0\fs106 \cf0 commit -\f1 \'82\'f0\'8d\'73\'82\'a4}</string> +\f0\b\fs86 \cf0 \'81\'83\'83\'67\'83\'89\'83\'93\'83\'55\'83\'4e\'83\'56\'83\'87\'83\'93\'81\'84 +\fs106 \ +commit\'82\'f0\'8d\'73\'82\'a4\ + +\fs72 \'82\'b1\'82\'cc\'8e\'9e\'83\'8b\'81\'5b\'83\'67\'82\'f0atomic\'82\'c9\'93\'fc\'82\'ea\'91\'d6\'82\'a6\'82\'e9}</string> </dict> </dict> <dict> @@ -138,7 +1159,7 @@ <integer>120</integer> <key>Points</key> <array> - <string>{500.48150745752838, 442.36373175849667}</string> + <string>{655.51181697118011, 423.62052806721357}</string> <string>{456.11107689363121, 1196.3332813448396}</string> <string>{1170.708672039342, 1201.771892900234}</string> </array> @@ -151,6 +1172,15 @@ </dict> <key>stroke</key> <dict> + <key>Color</key> + <dict> + <key>b</key> + <real>0.0</real> + <key>g</key> + <real>0.0</real> + <key>r</key> + <real>1</real> + </dict> <key>HeadArrow</key> <string>0</string> <key>Legacy</key> @@ -171,7 +1201,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{1099.8425296640771, 386.35288400330046}, {524.40945357694363, 173}}</string> + <string>{{1251.3004170118468, 452.125988354176}, {432.28346848910223, 131}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -180,8 +1210,10 @@ <string>Resize</string> <key>FontInfo</key> <dict> + <key>Font</key> + <string>HiraginoSans-W6</string> <key>Size</key> - <real>53</real> + <real>40</real> </dict> <key>ID</key> <integer>119</integer> @@ -207,14 +1239,13 @@ <dict> <key>Text</key> <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 -{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\fonttbl\f0\fnil\fcharset128 HiraginoSans-W6;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} \deftab720 \pard\pardeftab720\qc\partightenfactor0 -\f0\fs106 \cf0 TreeB -\f1 \'82\'cc\'95\'d2\'8f\'57(Editor)\'82\'f0\'8e\'e6\'82\'c1\'82\'c4\'82\'ad\'82\'e9}</string> +\f0\b\fs80 \cf0 TreeB\'82\'cc\'95\'d2\'8f\'57(Editor)\'82\'f0\'8e\'e6\'82\'c1\'82\'c4\'82\'ad\'82\'e9}</string> </dict> </dict> <dict> @@ -236,8 +1267,8 @@ <integer>118</integer> <key>Points</key> <array> - <string>{500.48150745752838, 442.36373175849667}</string> - <string>{1169.9999374151255, 621.33330419328593}</string> + <string>{655.51181697118011, 423.62052806721357}</string> + <string>{1468.8484848484852, 704.3333333333336}</string> <string>{1170.708672039342, 1201.771892900234}</string> </array> <key>Style</key> @@ -315,7 +1346,7 @@ <key>Font</key> <string>HiraginoSans-W6</string> <key>Size</key> - <real>60</real> + <real>40</real> </dict> <key>ID</key> <integer>116</integer> @@ -357,12 +1388,14 @@ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 \f0\b\fs120 \cf0 \'83\'6d\'81\'5b\'83\'68\'82\'c9\'91\'ce\'82\'b5\'82\'c4\ -\'83\'66\'81\'5b\'83\'5e\'82\'cc\'91\'7d\'93\'fc\'81\'41\'8d\'ed\'8f\'9c\'82\'f0\'8d\'73\'82\'a4}</string> +\'83\'66\'81\'5b\'83\'5e\'82\'cc\'91\'7d\'93\'fc\'81\'41\'8d\'ed\'8f\'9c\'82\'f0\'8d\'73\'82\'a4\ + +\fs80 Node\'82\'cdKey Value\'82\'c5\'83\'66\'81\'5b\'83\'5e\'82\'f0\'8e\'9d\'82\'c2}</string> </dict> </dict> <dict> <key>Bounds</key> - <string>{{696.88284035938432, 437.73344493173369}, {194.47204672403822, 70.238878143133519}}</string> + <string>{{464.88189398172329, 144.56693044553589}, {194.47204672403822, 70.238878143133519}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -411,14 +1444,14 @@ <key>Head</key> <dict> <key>ID</key> - <integer>112</integer> + <integer>149</integer> </dict> <key>ID</key> - <integer>114</integer> + <integer>150</integer> <key>Points</key> <array> - <string>{658.2971168030283, 147.56880378793107}</string> - <string>{859.71459376721009, 254.83711527460272}</string> + <string>{730.45609875680725, 490.30658323149373}</string> + <string>{798.33869977370773, 609.90533173306892}</string> </array> <key>Style</key> <dict> @@ -444,104 +1477,7 @@ <key>Tail</key> <dict> <key>ID</key> - <integer>105</integer> - </dict> - </dict> - <dict> - <key>Bounds</key> - <string>{{817.27029785521768, 212.39281936261031}, {84.888591823984896, 84.888591823984839}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FontInfo</key> - <dict> - <key>Font</key> - <string>Helvetica</string> - <key>Size</key> - <real>12</real> - </dict> - <key>ID</key> - <integer>112</integer> - <key>Shape</key> - <string>Circle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Beneath</key> - <string>YES</string> - <key>Color</key> - <dict> - <key>a</key> - <real>0.20000000000000001</real> - <key>b</key> - <real>0.0</real> - <key>g</key> - <real>0.0</real> - <key>r</key> - <real>0.0</real> - </dict> - <key>Fuzziness</key> - <real>2.9887564182281494</real> - </dict> - <key>stroke</key> - <dict> - <key>Width</key> - <real>10</real> - </dict> - </dict> - <key>Text</key> - <dict> - <key>VerticalPad</key> - <real>0.0</real> - </dict> - </dict> - <dict> - <key>Class</key> - <string>LineGraphic</string> - <key>FontInfo</key> - <dict> - <key>Font</key> - <string>Helvetica</string> - <key>Size</key> - <real>12</real> - </dict> - <key>Head</key> - <dict> - <key>ID</key> - <integer>108</integer> - </dict> - <key>ID</key> - <integer>111</integer> - <key>Points</key> - <array> - <string>{710.77370083967264, 254.83711527460272}</string> - <string>{658.2971168030283, 375.22457277043617}</string> - </array> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>HeadArrow</key> - <string>0</string> - <key>Legacy</key> - <false/> - <key>LineType</key> - <integer>1</integer> - <key>TailArrow</key> - <string>0</string> - <key>Width</key> - <real>10</real> - </dict> - </dict> - <key>Tail</key> - <dict> - <key>ID</key> - <integer>107</integer> + <integer>106</integer> </dict> </dict> <dict> @@ -563,8 +1499,8 @@ <integer>110</integer> <key>Points</key> <array> - <string>{658.2971168030283, 147.56880378793107}</string> - <string>{710.77370083967264, 254.83711527460272}</string> + <string>{822.4551360657108, 383.74103168201384}</string> + <string>{874.58792387408698, 490.30658323149373}</string> </array> <key>Style</key> <dict> @@ -612,8 +1548,8 @@ <integer>109</integer> <key>Points</key> <array> - <string>{658.2971168030283, 147.56880378793107}</string> - <string>{565.69138026777182, 254.83711527460272}</string> + <string>{822.4551360657108, 383.74103168201384}</string> + <string>{730.45609875680725, 490.30658323149373}</string> </array> <key>Style</key> <dict> @@ -644,7 +1580,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{615.85282089103589, 332.78027685844376}, {84.888591823984896, 84.888591823984839}}</string> + <string>{{756.1724743404601, 567.73910629982129}, {84.33245086649525, 84.332450866495321}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -655,7 +1591,7 @@ <real>12</real> </dict> <key>ID</key> - <integer>108</integer> + <integer>149</integer> <key>Shape</key> <string>Circle</string> <key>Style</key> @@ -686,13 +1622,21 @@ </dict> <key>Text</key> <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs80 \cf0 E}</string> <key>VerticalPad</key> <real>0.0</real> </dict> </dict> <dict> <key>Bounds</key> - <string>{{668.32940492768023, 212.39281936261031}, {84.888591823984896, 84.888591823984839}}</string> + <string>{{832.42169844083935, 448.1403577982461}, {84.33245086649525, 84.332450866495321}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -734,13 +1678,21 @@ </dict> <key>Text</key> <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs80 \cf0 C}</string> <key>VerticalPad</key> <real>0.0</real> </dict> </dict> <dict> <key>Bounds</key> - <string>{{523.24708435577941, 212.39281936261031}, {84.888591823984896, 84.888591823984839}}</string> + <string>{{688.28987332355962, 448.1403577982461}, {84.33245086649525, 84.332450866495321}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -782,13 +1734,21 @@ </dict> <key>Text</key> <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs80 \cf0 B}</string> <key>VerticalPad</key> <real>0.0</real> </dict> </dict> <dict> <key>Bounds</key> - <string>{{615.85282089103589, 105.12450787593866}, {84.888591823984896, 84.888591823984839}}</string> + <string>{{780.28891063246317, 341.57480624876621}, {84.33245086649525, 84.332450866495321}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -796,7 +1756,7 @@ <key>Font</key> <string>Helvetica</string> <key>Size</key> - <real>12</real> + <real>40</real> </dict> <key>ID</key> <integer>105</integer> @@ -830,13 +1790,21 @@ </dict> <key>Text</key> <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1504\cocoasubrtf810 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs80 \cf0 A}</string> <key>VerticalPad</key> <real>0.0</real> </dict> </dict> <dict> <key>Bounds</key> - <string>{{112.69498571614265, 558.89261689869409}, {194.47204672403822, 70.238878143133519}}</string> + <string>{{93.54330793534676, 151.65354468306217}, {194.47204672403822, 70.238878143133519}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -923,111 +1891,14 @@ <key>Head</key> <dict> <key>ID</key> - <integer>100</integer> - </dict> - <key>ID</key> - <integer>101</integer> - <key>Points</key> - <array> - <string>{351.15475729442778, 355.93171099225765}</string> - <string>{431.41306229164968, 476.31916848809078}</string> - </array> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>HeadArrow</key> - <string>0</string> - <key>Legacy</key> - <false/> - <key>LineType</key> - <integer>1</integer> - <key>TailArrow</key> - <string>0</string> - <key>Width</key> - <real>10</real> - </dict> - </dict> - <key>Tail</key> - <dict> - <key>ID</key> - <integer>95</integer> - </dict> - </dict> - <dict> - <key>Bounds</key> - <string>{{388.96876637965721, 433.87487257609837}, {84.888591823984896, 84.888591823984839}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FontInfo</key> - <dict> - <key>Font</key> - <string>Helvetica</string> - <key>Size</key> - <real>12</real> - </dict> - <key>ID</key> - <integer>100</integer> - <key>Shape</key> - <string>Circle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Beneath</key> - <string>YES</string> - <key>Color</key> - <dict> - <key>a</key> - <real>0.20000000000000001</real> - <key>b</key> - <real>0.0</real> - <key>g</key> - <real>0.0</real> - <key>r</key> - <real>0.0</real> - </dict> - <key>Fuzziness</key> - <real>2.9887564182281494</real> - </dict> - <key>stroke</key> - <dict> - <key>Width</key> - <real>10</real> - </dict> - </dict> - <key>Text</key> - <dict> - <key>VerticalPad</key> - <real>0.0</real> - </dict> - </dict> - <dict> - <key>Class</key> - <string>LineGraphic</string> - <key>FontInfo</key> - <dict> - <key>Font</key> - <string>Helvetica</string> - <key>Size</key> - <real>12</real> - </dict> - <key>Head</key> - <dict> - <key>ID</key> <integer>96</integer> </dict> <key>ID</key> <integer>99</integer> <key>Points</key> <array> - <string>{351.15475729442778, 355.93171099225765}</string> - <string>{264.72273652818831, 476.31916848809078}</string> + <string>{341.47463498775301, 512.88070147767939}</string> + <string>{283.52062154380417, 632.47944997925299}</string> </array> <key>Style</key> <dict> @@ -1075,8 +1946,8 @@ <integer>98</integer> <key>Points</key> <array> - <string>{264.72273652818831, 248.66339950558566}</string> - <string>{351.15475729442778, 355.93171099225765}</string> + <string>{283.52062154380417, 406.31514992819757}</string> + <string>{341.47463498775301, 512.88070147767939}</string> </array> <key>Style</key> <dict> @@ -1124,8 +1995,8 @@ <integer>97</integer> <key>Points</key> <array> - <string>{264.72273652818831, 248.66339950558566}</string> - <string>{172.11699999293194, 355.93171099225765}</string> + <string>{283.52062154380417, 406.31514992819757}</string> + <string>{191.52158423490113, 512.88070147767939}</string> </array> <key>Style</key> <dict> @@ -1156,7 +2027,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{222.27844061619587, 433.87487257609837}, {84.888591823984896, 84.888591823984839}}</string> + <string>{{241.35439611055654, 590.31322454600536}, {84.33245086649525, 84.332450866495321}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1204,7 +2075,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{308.71046138243531, 313.48741508026524}, {84.888591823984896, 84.888591823984839}}</string> + <string>{{299.30840955450537, 470.71447604443176}, {84.33245086649525, 84.332450866495321}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1252,7 +2123,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{129.6727040809395, 313.48741508026524}, {84.888591823984896, 84.888591823984839}}</string> + <string>{{149.35535880165349, 470.71447604443176}, {84.33245086649525, 84.332450866495321}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1300,7 +2171,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{222.27844061619587, 206.21910359359325}, {84.888591823984896, 84.888591823984839}}</string> + <string>{{241.35439611055654, 364.14892449494994}, {84.33245086649525, 84.332450866495321}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1348,7 +2219,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{86.456693697820299, 62.680211963945965}, {828.04962751941616, 759.36703958910141}}</string> + <string>{{70.866142375262683, 43.937008272662872}, {1169.2913491918348, 759.36703958910141}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1360,6 +2231,8 @@ </dict> <key>ID</key> <integer>4</integer> + <key>IsLocked</key> + <string>YES</string> <key>Style</key> <dict> <key>shadow</key> @@ -1441,7 +2314,7 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2017-02-15 05:46:02 +0000</string> + <string>2017-02-15 15:07:16 +0000</string> <key>Modifier</key> <string>kazuma</string> <key>NotesVisible</key> @@ -1539,15 +2412,15 @@ <key>TopSlabHeight</key> <real>33</real> <key>VisibleRegion</key> - <string>{{-405, -112}, {2488.8887899893343, 1791.6665954722328}}</string> + <string>{{-277.99999999999994, -51.999999999999879}, {2237.4999999999995, 1667.4999999999995}}</string> <key>Zoom</key> - <real>0.36000001430511475</real> + <real>0.40000000000000002</real> <key>ZoomValues</key> <array> <array> <string>キャンバス 1</string> - <real>0.36000001430511475</real> - <real>0.35999999999999999</real> + <real>0.40000000000000002</real> + <real>0.45000000000000001</real> </array> </array> </dict>
--- a/presen/slide.html Wed Feb 15 22:54:45 2017 +0900 +++ b/presen/slide.html Thu Feb 16 10:49:32 2017 +0900 @@ -86,7 +86,7 @@ <!-- === begin markdown block === generated by markdown/1.2.0 on Ruby 2.3.3 (2016-11-21) [x86_64-darwin16] - on 2017-02-15 20:07:39 +0900 with Markdown engine kramdown (1.13.1) + on 2017-02-16 10:44:38 +0900 with Markdown engine kramdown (1.13.1) using options {} --> @@ -109,36 +109,15 @@ <!-- _S9SLIDE_ --> <h1 id="rdbnosql">RDBとNoSQL</h1> -<p>Relational Databseと呼ばれるRDBは行と列からなる2次元のテーブルにより実装されているデータベース。 +<h2 id="relational-database">Relational Database</h2> + +<p>行と列からなる2次元のテーブルにより実装されているデータベース。 データ型として文字列や数値、日付、Bool型がある。</p> -<p>データの一貫性を重視しているRDBでは分散システムには向いていない。</p> - -<p>NoSQL(Not Only SQL) Databaseと呼ばれる非リレーショナル型のデータベース。 -スキームを持たないため、扱うデータの型を気にしなくてもよい。</p> - -<p>一貫性を一部犠牲にしているNoSQLでは分散させることが可能である。 -CassandraやMongoDBなどが例に挙げられる。</p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="jungle-database">Jungle Databaseの提案</h1> +<h2 id="nosqlnot-only-sql-database">NoSQL(Not Only SQL) Database</h2> -<p>Jungleは過去の変更データを保存しつつ新しい木を構築してく木構造(非破壊構造)の手法をとる。 -非破壊にすることにより、データを読み出す側と書き込む側のデータを安全に扱うことができる。</p> - -<p>ノード自身にはKey-Valueのデータを格納することができる。 -これはデータベースのレコードに相当する。</p> - -<p>Jungleのトランザクションはルートから変更を行うノードまでコピーを行い、新しく木構造を構築する。 -最後にルートをアトミックに入れ替えてコミットする。 -コミットが失敗した場合は最初からやり直す。 -これにより、原子性を実現する。</p> - -<p>Jungleはcommit logを持ち、それを他のノードやディスクに転送することにより、 -分散構成と永続性を実現する。</p> +<p>非リレーショナル型のデータベース。 +スキームを持たないため、扱うデータの型を気にしなくてもよい。</p> </div> @@ -146,28 +125,71 @@ <!-- _S9SLIDE_ --> <h1 id="jungledatabase">JungleのDatabase</h1> -<p>Jungleの構造としては以下の図のようになっている。</p> +<ul> + <li>Jungleは過去の変更データを保存しつつ新しい木を構築していく木構造(非破壊構造)の手法をとる。</li> +</ul> <div style="text-align: center;"> - <img src="./images/transaction.pdf" alt="message" width="700" /> + <img src="./images/Jungle.pdf" alt="message" width="700" /> </div> +<!-- +Jungleは過去の変更データを保存しつつ新しい木を構築してく木構造(非破壊構造)の手法をとる。 +非破壊にすることにより、データを読み出す側と書き込む側のデータを安全に扱うことができる。 + +ノード自身にはKey-Valueのデータを格納することができる。 +これはデータベースのレコードに相当する。 + +Jungleのトランザクションはルートから変更を行うノードまでコピーを行い、新しく木構造を構築する。 +最後にルートをアトミックに入れ替えてコミットする。 +コミットが失敗した場合は最初からやり直す。 +これにより、原子性を実現する。 + +Jungleはcommit logを持ち、それを他のノードやディスクに転送することにより、 +分散構成と永続性を実現する。 --> + </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-1">ゲームのデータ構造</h1> +<h1 id="jungleunity">JungleとゲームエンジンUnity</h1> -<p>Jungleはもともと認証管理システムやWeb向けに作られたものである。 -これらはすべて木構造をベースとしている。</p> +<h2 id="jungle">Jungle</h2> +<p>もともと認証管理システムやWeb向けに作られたものである。 +これらはすべて木構造データをベースとしている。</p> <p>ゲームでも同じことが考えられる。 そこでゲームエンジンUnity向けにJungleの再実装を行い、ゲーム向けのデータベースとしての提案を行う。</p> -<p>Unityは3Dゲームエンジンで、ゲームを構成する要素(Object)をC#で制御する。 -Objectは一つのゲームのシーン(一画面の状況)の中で木構造を持つ。 -これをシーングラフと言う。 -シーングラフをそのままJungleに格納するという手法が考えられる。</p> +<h2 id="unity">Unity</h2> + +<p>3Dゲームエンジン +ゲームを構成する要素(Object)をC#で制御する。</p> + +<p>Javaと似た言語である。</p> + +<h2 id="section-1">シーングラフ</h2> + +<p>Objectは一つのゲームのシーン(一画面の状況)の中で木構造を持つ。 +これをシーングラフと言う。</p> + +<p>シーングラフをそのままJungleに格納するという手法が考えられる。</p> + + +</div> +<div class='slide '> +<!-- _S9SLIDE_ --> +<h1 id="jungle-sharp">Jungle Sharpの実装</h1> + +<p>Jungleを構成する上で必要な部分で問題や大幅な変更なく、移行出来た部分を以下にリストアップする。</p> + +<ul> + <li>Jungleのデータを構成するTreeMap</li> + <li>ノードを指定するNodePath</li> + <li>Jungleや木、ノードを構成する部分</li> +</ul> + +<p>しかし、トランザクションを実装する部分では自分で実装する必要があった。</p> </div> @@ -209,10 +231,19 @@ <pre lang="Java"><code> // Java -Either<Error,TreeNode> either = children.at(2); + +Item apple = new Item("Apple"); +Item painapple = new Item ("Painapple"); + +Either<Error,TreeNode> either = edt.putAttribute("Apple", apple); if (either.isA()) return either.a(); -TreeNode child = either.b(); +JungleTreeEditor edt = either.b(); + +either = edt.putAttribute("Painapple", painapple); +if (either.isA()) + return either.a(); +edt = either.b(); </code></pre> @@ -247,11 +278,16 @@ <pre lang="C"><code class="language-\#"> Either<Error, JungleTreeEditor> either = DefaultEither<Error, JungleTreeEditor>.newB(editor); Item apple = new Item("Apple"); +Item painapple = new Item("painapple"); either = either.bind ((JungleTreeEditor arg) => { return arg.putAttribute (rootNode, item.name, item); }); +either = either.bind ((JungleTreeEditor arg) => { + return arg.putAttribute (rootNode, item.name, item); +}); + </code></pre> @@ -298,15 +334,7 @@ <p>ゲーム開発者のみが更新できる。</p> - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-6">データのデータ設計</h1> - -<p>Jungleには複数の木を持つことができる。</p> - -<p>ゲームのシーンを構成するGameTreeとアイテムを管理するItemTreeをJungle内に作る。</p> +<p>次にJungleに格納するTreeを紹介します。</p> </div> @@ -340,7 +368,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="jungle">Jungleの改良</h1> +<h1 id="jungle-1">Jungleの改良</h1> <p>前章では例題となるゲームを作成した。 その上でJungleではデータ型について問題となった。</p> @@ -370,7 +398,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-7">データを取り出す</h1> +<h1 id="section-6">データを取り出す</h1> <p>データを取り出すにはGenericで型を指定する、もしくはas演算子を用いてキャストを行う。 以下に取り出す例を記述する。</p> @@ -388,16 +416,13 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="jungle-sharp">Jungle-Sharpの評価</h1> +<h1 id="jungle-sharp-1">Jungle-Sharpの評価</h1> <div style="text-align: center;"> <img src="./images/benchmark.pdf" alt="message" width="700px" /> </div> -<p>以下の図より、Unityで実行した結果ではO(n)のグラフを示している。 -Unityではレンダリングの機能も兼ねている。 -そのためプログラムを実行している間もレンダリングを行っているため、 -純粋なPutAttributeの計算時間ではないと考えられる。</p> +<p>以下の図より、Unityで実行した結果ではO(n)のグラフを示している。</p> <p>そこで、純粋な速度を測定するためXamarinで動かし測定した。 C#で再実装したJungleはJava版とほぼ同じ計算量を示している。 @@ -407,7 +432,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-8">まとめ</h1> +<h1 id="section-7">まとめ</h1> <p>本研究の流れは</p> @@ -427,9 +452,7 @@ <p>データの格納の際にByteBufferであったものをObject型に変更した。 これにより、シーンを構成するObjectデータを手間なく格納することを可能にした。</p> -<p>Jungleは非破壊であるため、過去の変更を持っている。</p> - -<p>ゲームにおいて過去の木を持ち続けることはパフォーマンスの低下につながる。 +<p>Jungleは非破壊であるため、過去の変更を持っている。パフォーマンスの低下につながる。 そのため、過去の木をどこまで必要かを検討しなければならない。</p> <p>実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。</p>
--- a/presen/slide.md Wed Feb 15 22:54:45 2017 +0900 +++ b/presen/slide.md Thu Feb 16 10:49:32 2017 +0900 @@ -16,19 +16,25 @@ # RDBとNoSQL -Relational Databaseと呼ばれるRDBは行と列からなる2次元のテーブルにより実装されているデータベース。 +## Relational Database + +行と列からなる2次元のテーブルにより実装されているデータベース。 データ型として文字列や数値、日付、Bool型がある。 -データの一貫性を重視しているRDBでは分散システムには向いていない。 +## NoSQL(Not Only SQL) Database -NoSQL(Not Only SQL) Databaseと呼ばれる非リレーショナル型のデータベース。 +非リレーショナル型のデータベース。 スキームを持たないため、扱うデータの型を気にしなくてもよい。 -一貫性を一部犠牲にしているNoSQLでは分散させることが可能である。 -CassandraやMongoDBなどが例に挙げられる。 +# JungleのDatabase + +- Jungleは過去の変更データを保存しつつ新しい木を構築していく木構造(非破壊構造)の手法をとる。 -# Jungle Databaseの提案 +<div style="text-align: center;"> + <img src="./images/Jungle.pdf" alt="message" width="700"> +</div> +<!-- Jungleは過去の変更データを保存しつつ新しい木を構築してく木構造(非破壊構造)の手法をとる。 非破壊にすることにより、データを読み出す側と書き込む側のデータを安全に扱うことができる。 @@ -41,29 +47,41 @@ これにより、原子性を実現する。 Jungleはcommit logを持ち、それを他のノードやディスクに転送することにより、 -分散構成と永続性を実現する。 +分散構成と永続性を実現する。 --> -# JungleのDatabase - -Jungleの構造としては以下の図のようになっている。 +# JungleとゲームエンジンUnity -<div style="text-align: center;"> - <img src="./images/transaction.pdf" alt="message" width="700"> -</div> - -# ゲームのデータ構造 - -Jungleはもともと認証管理システムやWeb向けに作られたものである。 -これらはすべて木構造をベースとしている。 +## Jungle +もともと認証管理システムやWeb向けに作られたものである。 +これらはすべて木構造データをベースとしている。 ゲームでも同じことが考えられる。 そこでゲームエンジンUnity向けにJungleの再実装を行い、ゲーム向けのデータベースとしての提案を行う。 -Unityは3Dゲームエンジンで、ゲームを構成する要素(Object)をC\#で制御する。 +## Unity + +3Dゲームエンジン +ゲームを構成する要素(Object)をC\#で制御する。 + +Javaと似た言語である。 + +## シーングラフ + Objectは一つのゲームのシーン(一画面の状況)の中で木構造を持つ。 これをシーングラフと言う。 + シーングラフをそのままJungleに格納するという手法が考えられる。 +# Jungle Sharpの実装 + +Jungleを構成する上で必要な部分で問題や大幅な変更なく、移行出来た部分を以下にリストアップする。 + +- Jungleのデータを構成するTreeMap +- ノードを指定するNodePath +- Jungleや木、ノードを構成する部分 + +しかし、トランザクションを実装する部分では自分で実装する必要があった。 + # Atomic Refarenceの実装 Jungleの木の変更(commit)はCAS(Check and Set)を用いてatomicに行われる。 @@ -98,10 +116,19 @@ ``` Java // Java -Either<Error,TreeNode> either = children.at(2); + +Item apple = new Item("Apple"); +Item painapple = new Item ("Painapple"); + +Either<Error,TreeNode> either = edt.putAttribute("Apple", apple); if (either.isA()) return either.a(); -TreeNode child = either.b(); +JungleTreeEditor edt = either.b(); + +either = edt.putAttribute("Painapple", painapple); +if (either.isA()) + return either.a(); +edt = either.b(); ``` @@ -130,11 +157,16 @@ Either<Error, JungleTreeEditor> either = DefaultEither<Error, JungleTreeEditor>.newB(editor); Item apple = new Item("Apple"); +Item painapple = new Item("painapple"); either = either.bind ((JungleTreeEditor arg) => { return arg.putAttribute (rootNode, item.name, item); }); +either = either.bind ((JungleTreeEditor arg) => { + return arg.putAttribute (rootNode, item.name, item); +}); + ``` # 例題のゲーム @@ -153,7 +185,6 @@ 破壊や生成のオペレーションに合わせてJungleのノードにも同期する。 - # ゲームデータの種類 ゲームのデータにはいくつかの種類が考えられる。 @@ -174,11 +205,7 @@ ゲーム開発者のみが更新できる。 -# データのデータ設計 - -Jungleには複数の木を持つことができる。 - -ゲームのシーンを構成するGameTreeとアイテムを管理するItemTreeをJungle内に作る。 +次にJungleに格納するTreeを紹介します。 # GameTree @@ -249,9 +276,6 @@ </div> 以下の図より、Unityで実行した結果ではO(n)のグラフを示している。 -Unityではレンダリングの機能も兼ねている。 -そのためプログラムを実行している間もレンダリングを行っているため、 -純粋なPutAttributeの計算時間ではないと考えられる。 そこで、純粋な速度を測定するためXamarinで動かし測定した。 C\#で再実装したJungleはJava版とほぼ同じ計算量を示している。 @@ -276,9 +300,7 @@ データの格納の際にByteBufferであったものをObject型に変更した。 これにより、シーンを構成するObjectデータを手間なく格納することを可能にした。 -Jungleは非破壊であるため、過去の変更を持っている。 - -ゲームにおいて過去の木を持ち続けることはパフォーマンスの低下につながる。 +Jungleは非破壊であるため、過去の変更を持っている。パフォーマンスの低下につながる。 そのため、過去の木をどこまで必要かを検討しなければならない。 実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。
--- a/presen/slide.pdf.html Wed Feb 15 22:54:45 2017 +0900 +++ b/presen/slide.pdf.html Thu Feb 16 10:49:32 2017 +0900 @@ -70,7 +70,7 @@ <!-- === begin markdown block === generated by markdown/1.2.0 on Ruby 2.3.3 (2016-11-21) [x86_64-darwin16] - on 2017-02-15 20:07:39 +0900 with Markdown engine kramdown (1.13.1) + on 2017-02-16 10:44:38 +0900 with Markdown engine kramdown (1.13.1) using options {} --> @@ -93,36 +93,15 @@ <!-- _S9SLIDE_ --> <h1 id="rdbnosql">RDBとNoSQL</h1> -<p>Relational Databseと呼ばれるRDBは行と列からなる2次元のテーブルにより実装されているデータベース。 +<h2 id="relational-database">Relational Database</h2> + +<p>行と列からなる2次元のテーブルにより実装されているデータベース。 データ型として文字列や数値、日付、Bool型がある。</p> -<p>データの一貫性を重視しているRDBでは分散システムには向いていない。</p> - -<p>NoSQL(Not Only SQL) Databaseと呼ばれる非リレーショナル型のデータベース。 -スキームを持たないため、扱うデータの型を気にしなくてもよい。</p> - -<p>一貫性を一部犠牲にしているNoSQLでは分散させることが可能である。 -CassandraやMongoDBなどが例に挙げられる。</p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="jungle-database">Jungle Databaseの提案</h1> +<h2 id="nosqlnot-only-sql-database">NoSQL(Not Only SQL) Database</h2> -<p>Jungleは過去の変更データを保存しつつ新しい木を構築してく木構造(非破壊構造)の手法をとる。 -非破壊にすることにより、データを読み出す側と書き込む側のデータを安全に扱うことができる。</p> - -<p>ノード自身にはKey-Valueのデータを格納することができる。 -これはデータベースのレコードに相当する。</p> - -<p>Jungleのトランザクションはルートから変更を行うノードまでコピーを行い、新しく木構造を構築する。 -最後にルートをアトミックに入れ替えてコミットする。 -コミットが失敗した場合は最初からやり直す。 -これにより、原子性を実現する。</p> - -<p>Jungleはcommit logを持ち、それを他のノードやディスクに転送することにより、 -分散構成と永続性を実現する。</p> +<p>非リレーショナル型のデータベース。 +スキームを持たないため、扱うデータの型を気にしなくてもよい。</p> </div> @@ -130,28 +109,71 @@ <!-- _S9SLIDE_ --> <h1 id="jungledatabase">JungleのDatabase</h1> -<p>Jungleの構造としては以下の図のようになっている。</p> +<ul> + <li>Jungleは過去の変更データを保存しつつ新しい木を構築していく木構造(非破壊構造)の手法をとる。</li> +</ul> <div style="text-align: center;"> - <img src="./images/transaction.pdf" alt="message" width="700" /> + <img src="./images/Jungle.pdf" alt="message" width="700" /> </div> +<!-- +Jungleは過去の変更データを保存しつつ新しい木を構築してく木構造(非破壊構造)の手法をとる。 +非破壊にすることにより、データを読み出す側と書き込む側のデータを安全に扱うことができる。 + +ノード自身にはKey-Valueのデータを格納することができる。 +これはデータベースのレコードに相当する。 + +Jungleのトランザクションはルートから変更を行うノードまでコピーを行い、新しく木構造を構築する。 +最後にルートをアトミックに入れ替えてコミットする。 +コミットが失敗した場合は最初からやり直す。 +これにより、原子性を実現する。 + +Jungleはcommit logを持ち、それを他のノードやディスクに転送することにより、 +分散構成と永続性を実現する。 --> + </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-1">ゲームのデータ構造</h1> +<h1 id="jungleunity">JungleとゲームエンジンUnity</h1> -<p>Jungleはもともと認証管理システムやWeb向けに作られたものである。 -これらはすべて木構造をベースとしている。</p> +<h2 id="jungle">Jungle</h2> +<p>もともと認証管理システムやWeb向けに作られたものである。 +これらはすべて木構造データをベースとしている。</p> <p>ゲームでも同じことが考えられる。 そこでゲームエンジンUnity向けにJungleの再実装を行い、ゲーム向けのデータベースとしての提案を行う。</p> -<p>Unityは3Dゲームエンジンで、ゲームを構成する要素(Object)をC#で制御する。 -Objectは一つのゲームのシーン(一画面の状況)の中で木構造を持つ。 -これをシーングラフと言う。 -シーングラフをそのままJungleに格納するという手法が考えられる。</p> +<h2 id="unity">Unity</h2> + +<p>3Dゲームエンジン +ゲームを構成する要素(Object)をC#で制御する。</p> + +<p>Javaと似た言語である。</p> + +<h2 id="section-1">シーングラフ</h2> + +<p>Objectは一つのゲームのシーン(一画面の状況)の中で木構造を持つ。 +これをシーングラフと言う。</p> + +<p>シーングラフをそのままJungleに格納するという手法が考えられる。</p> + + +</div> +<div class='slide '> +<!-- _S9SLIDE_ --> +<h1 id="jungle-sharp">Jungle Sharpの実装</h1> + +<p>Jungleを構成する上で必要な部分で問題や大幅な変更なく、移行出来た部分を以下にリストアップする。</p> + +<ul> + <li>Jungleのデータを構成するTreeMap</li> + <li>ノードを指定するNodePath</li> + <li>Jungleや木、ノードを構成する部分</li> +</ul> + +<p>しかし、トランザクションを実装する部分では自分で実装する必要があった。</p> </div> @@ -193,10 +215,19 @@ <pre lang="Java"><code> // Java -Either<Error,TreeNode> either = children.at(2); + +Item apple = new Item("Apple"); +Item painapple = new Item ("Painapple"); + +Either<Error,TreeNode> either = edt.putAttribute("Apple", apple); if (either.isA()) return either.a(); -TreeNode child = either.b(); +JungleTreeEditor edt = either.b(); + +either = edt.putAttribute("Painapple", painapple); +if (either.isA()) + return either.a(); +edt = either.b(); </code></pre> @@ -231,11 +262,16 @@ <pre lang="C"><code class="language-\#"> Either<Error, JungleTreeEditor> either = DefaultEither<Error, JungleTreeEditor>.newB(editor); Item apple = new Item("Apple"); +Item painapple = new Item("painapple"); either = either.bind ((JungleTreeEditor arg) => { return arg.putAttribute (rootNode, item.name, item); }); +either = either.bind ((JungleTreeEditor arg) => { + return arg.putAttribute (rootNode, item.name, item); +}); + </code></pre> @@ -282,15 +318,7 @@ <p>ゲーム開発者のみが更新できる。</p> - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-6">データのデータ設計</h1> - -<p>Jungleには複数の木を持つことができる。</p> - -<p>ゲームのシーンを構成するGameTreeとアイテムを管理するItemTreeをJungle内に作る。</p> +<p>次にJungleに格納するTreeを紹介します。</p> </div> @@ -324,7 +352,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="jungle">Jungleの改良</h1> +<h1 id="jungle-1">Jungleの改良</h1> <p>前章では例題となるゲームを作成した。 その上でJungleではデータ型について問題となった。</p> @@ -354,7 +382,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-7">データを取り出す</h1> +<h1 id="section-6">データを取り出す</h1> <p>データを取り出すにはGenericで型を指定する、もしくはas演算子を用いてキャストを行う。 以下に取り出す例を記述する。</p> @@ -372,16 +400,13 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="jungle-sharp">Jungle-Sharpの評価</h1> +<h1 id="jungle-sharp-1">Jungle-Sharpの評価</h1> <div style="text-align: center;"> <img src="./images/benchmark.pdf" alt="message" width="700px" /> </div> -<p>以下の図より、Unityで実行した結果ではO(n)のグラフを示している。 -Unityではレンダリングの機能も兼ねている。 -そのためプログラムを実行している間もレンダリングを行っているため、 -純粋なPutAttributeの計算時間ではないと考えられる。</p> +<p>以下の図より、Unityで実行した結果ではO(n)のグラフを示している。</p> <p>そこで、純粋な速度を測定するためXamarinで動かし測定した。 C#で再実装したJungleはJava版とほぼ同じ計算量を示している。 @@ -391,7 +416,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-8">まとめ</h1> +<h1 id="section-7">まとめ</h1> <p>本研究の流れは</p> @@ -411,9 +436,7 @@ <p>データの格納の際にByteBufferであったものをObject型に変更した。 これにより、シーンを構成するObjectデータを手間なく格納することを可能にした。</p> -<p>Jungleは非破壊であるため、過去の変更を持っている。</p> - -<p>ゲームにおいて過去の木を持ち続けることはパフォーマンスの低下につながる。 +<p>Jungleは非破壊であるため、過去の変更を持っている。パフォーマンスの低下につながる。 そのため、過去の木をどこまで必要かを検討しなければならない。</p> <p>実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。</p>