# HG changeset patch # User Kazuma Takeda # Date 1487146812 -32400 # Node ID 7b39f43e4088cfce24ecea14340389ce44b25c21 # Parent 10a1f30eb748b80044d03fbdd6e2d00331448af4 fix english description. diff -r 10a1f30eb748 -r 7b39f43e4088 prepaper/finalPre.tex --- a/prepaper/finalPre.tex Wed Feb 15 09:28:06 2017 +0900 +++ b/prepaper/finalPre.tex Wed Feb 15 17:20:12 2017 +0900 @@ -30,22 +30,19 @@ \twocolumn [ \maketitle \begin{onecolabstract} -There are some problems to Relational Databases and NoSQLs. +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. There is a problem that NoSQL is unfit for parallel processing. Laboratory proposes the database Jungle that solves those problems. -Jungle Jungle does not destroy the tree structure. Jungle develops as a scalable database. The structure of the game like the structure of the web. -in this thesis. - +This paper suggests a method to use as a database of game engine Unity. % way to use? how to use? -This paper suggests a method to use as a database of game engine Unity. -Jungle rewrite C\# programming language by written Java. +Jungle rewrite C\# programming language by written Java. % まだかけてない... \end{onecolabstract}] diff -r 10a1f30eb748 -r 7b39f43e4088 presen/slide.html --- a/presen/slide.html Wed Feb 15 09:28:06 2017 +0900 +++ b/presen/slide.html Wed Feb 15 17:20:12 2017 +0900 @@ -86,7 +86,7 @@ @@ -175,180 +175,19 @@
-

JungleのAPI

- -

前章ではJungleの概要を記述した。 -本章ではJungleの主なAPIについて紹介する。

- - -
-
- -

Jungleの木

- -

Jungleは複数の木を名前を利用して管理しており、名前により作成・編集を行う。

- -
// Jungleに新しく木を生成する。木の名前が重複した場合、生成に失敗しnullを返す
-JungleTree  createNewTree(string treeName)
-
-// JungleからtreeNameと名前が一致するtreeを取得する。名前が一致するTreeがない場合取得は失敗しnullを返す
-JungleTree  getTreeByName(string treeName)
-
-
- -

以下のコードは、Jungleの木を”TreeName”で生成し取得する。

- -
JungleTree tree = jungle.createNewTree("GameTree");
-
- - -
-
- -

TreeNode

- -

Jungleが保持している木は、複数のノードの集合で出来ている。 -ノードは、自身の子のListと属性名と属性値の組でデータを持つ。 -ノードに対するアクセスは、TreeNodeクラスに記述されているAPIを用いて行われる。

- -
// ノードの子供を扱うChildrenオブジェクトを返す
-Children getChildren()
-
-// ノードが保持しているデータを扱うAttribteオブジェクトを返す
-Attribute getAttribute()
-
- - -
-
- -

ChildrenとAttribute

- -

Childrenクラスを利用し、ノードの子どもにアクセスする。

- -
// ノードが持っている子どもの個数を返す
-int size()
-
-// ノードが持つ子どもの中から、 変数numで指定された位置にある子ノードを返す
-Either<Error, TreeNode> at(int num)
-
- -

Attributeクラスを利用し、ノードの保持する値にアクセスする。

- -
// ノードからKeyで管理されるValueをobject型で返す
-object get(string key)
-
-// ノードからKeyで管理されるValueをstring型で返す
-string getString(string key)
-
- +

JungleのDatabase

-
-
- -

Eitherクラス

- -

Jungleでは例外がある場合、Eitherクラスを用いて行う。

- - - -

を包んで返す。 -失敗した場合ははじめからやり直す。 -以下に例を記述する。

- -
Either<Error,TreeNode> either = children.at(2);
-if (either.isA()) 
-    return either.a();
-TreeNode child = either.b();
-
-
- - -
-
- -

Jungleのサンプルコード

- -

Jungleの例を記載する。

- -

以下のコードは、ルートノードの2番目の子どもから、属性名”name”とペアになっている属性値を取得する。

- -
JungleTree tree = jungle.getTreeByName("GameTree");
-TreeNode root = tree.getRootNode();
-Children children = root.getChildren();
-Either<Error,TreeNode> either = children.at(2);
-if (either.isA()) 
-    return either.a();
-TreeNode child = either.b();
-Attribute attribute = child.getAttribute();
-string value = attribute.getstring("name");
-
-
- - -
-
- -

Jungleの木の編集

- -

Jungleの木の編集はJungleTreeEditorクラスを用いて行われる。

- -

JungleTreeEditorクラスには編集を行うために、定義されているAPIを記述する。

- -

また、ノードを指定して編集を行う際にNodePathクラスを用いる。

- - -
-
- -

NodePath

- -

Jungleでは、木のノードの位置をNodePathクラスを使って表す。

- -

NodePathクラスはルートノードからスタートし、対象のノードまでの経路を、数字を用いて指し示すことで対象のノードの場所を表す。

- -

また、ルートノードは例外として-1と表記される。

+

Jungleの構造としては以下の図のようになっている。

- message + message
-

ノードの追加

- -
// 変数pathで指定した場所にある、ノードの子供の変数posで指定した位置子ノードを追加
-Either<Error, JungleTreeEditor> addNewChildAt( NodePath path, int pos)
-// 変数pathで指定した場所にあるノードに、属性名 変数key 属性値 変数valueのペアで値を挿入
-Either<Error, JungleTreeEditor> putAttribute( NodePath path, string key, object value)
-
-// 変数pathで指定した場所にあるノードが持つ、属性名 変数keyとペアで保存されているデータを削除
-Either< Error, JungleTreeEditor> deleteAttribute( NodePath path, string key)
-
-
- - -
-
- -

コミット

- -

編集の最後にTreeに対してコミットを行う。

- -
// 木へ行った変更をコミット。自分が編集を行っていた間に、他のJungleTreeEditorクラスによって木が更新されていた場合、コミットは失敗
-Either<Error, JungleTreeEditor> commit()
-
- - -
-
- -

ゲームのデータ構造

+

ゲームのデータ構造

Jungleはもともと認証管理システムやWeb向けに作られたものである。 これらはすべて木構造をベースとしている。

@@ -456,7 +295,7 @@
-

Eitherのチェック

+

Eitherのチェック

Haskellでは例外処理はモナド内部で行う設計になっている。 Eitherもその一つである。

@@ -517,7 +356,7 @@
-

例題のゲーム

+

例題のゲーム

前章ではJungle-Sharpのどのように実装したかを述べた。

@@ -537,17 +376,17 @@
-

ゲームデータの種類

+

ゲームデータの種類

ゲームのデータにはいくつかの種類が考えられる。

-

オブジェクトが単体で持つデータ

+

オブジェクトが単体で持つデータ

シーン内に存在するオブジェクトが持つパラメータ。

例えば、プレイヤーのHPや経験値、位置座標などを示す。

-

オブジェクト1つで複数持つデータ

+

オブジェクト1つで複数持つデータ

プレイヤーが持つアイテムデータなどを示す。

@@ -561,7 +400,7 @@
-

データのデータ設計

+

データのデータ設計

Jungleには複数の木を持つことができる。

@@ -599,7 +438,7 @@
-

Jungleの改良

+

Jungleの改良

前章では例題となるゲームを作成した。 その上でJungleではデータ型について問題となった。

@@ -629,7 +468,7 @@
-

データを取り出す

+

データを取り出す

データを取り出すにはGenericで型を指定する、もしくはas演算子を用いてキャストを行う。 以下に取り出す例を記述する。

@@ -647,7 +486,7 @@
-

まとめ

+

まとめ

本研究の流れは

@@ -657,9 +496,9 @@
  • 問題点の改良
  • -

    となった。

    +

    である。

    -

    Jungle-Sharpの実装ではそれほど難しくはなかった。 +

    Jungle-Sharpの実装ではJavaと比較的似ている言語であるため、移行する方法を確立した。 C#版のJungleではJavaに劣らない、もしくはそれ以上のパフォーマンスを出すことが出来た。

    実際のゲームに合わせたJungleの拡張を行った。

    diff -r 10a1f30eb748 -r 7b39f43e4088 presen/slide.md --- a/presen/slide.md Wed Feb 15 09:28:06 2017 +0900 +++ b/presen/slide.md Wed Feb 15 17:20:12 2017 +0900 @@ -67,147 +67,14 @@ Jungleはcommit logを持ち、それを他のノードやディスクに転送することにより、 分散構成と永続性を実現する。 -# JungleのAPI - -前章ではJungleの概要を記述した。 -本章ではJungleの主なAPIについて紹介する。 - - -# Jungleの木 - -Jungleは複数の木を名前を利用して管理しており、名前により作成・編集を行う。 - -``` Java -// Jungleに新しく木を生成する。木の名前が重複した場合、生成に失敗しnullを返す -JungleTree createNewTree(string treeName) - -// JungleからtreeNameと名前が一致するtreeを取得する。名前が一致するTreeがない場合取得は失敗しnullを返す -JungleTree getTreeByName(string treeName) - -``` - -以下のコードは、Jungleの木を"TreeName"で生成し取得する。 - -``` Java -JungleTree tree = jungle.createNewTree("GameTree"); -``` - -# TreeNode - -Jungleが保持している木は、複数のノードの集合で出来ている。 -ノードは、自身の子のListと属性名と属性値の組でデータを持つ。 -ノードに対するアクセスは、TreeNodeクラスに記述されているAPIを用いて行われる。 - -``` Java -// ノードの子供を扱うChildrenオブジェクトを返す -Children getChildren() - -// ノードが保持しているデータを扱うAttribteオブジェクトを返す -Attribute getAttribute() -``` - -# ChildrenとAttribute - -Childrenクラスを利用し、ノードの子どもにアクセスする。 - -``` Java -// ノードが持っている子どもの個数を返す -int size() - -// ノードが持つ子どもの中から、 変数numで指定された位置にある子ノードを返す -Either at(int num) -``` - -Attributeクラスを利用し、ノードの保持する値にアクセスする。 - -``` Java -// ノードからKeyで管理されるValueをobject型で返す -object get(string key) +# JungleのDatabase -// ノードからKeyで管理されるValueをstring型で返す -string getString(string key) -``` - -# Eitherクラス - -Jungleでは例外がある場合、Eitherクラスを用いて行う。 - -- 失敗時はA -- 成功時はB - -を包んで返す。 -失敗した場合ははじめからやり直す。 -以下に例を記述する。 - -``` C\# -Either either = children.at(2); -if (either.isA()) - return either.a(); -TreeNode child = either.b(); - -``` - -# Jungleのサンプルコード - -Jungleの例を記載する。 - -以下のコードは、ルートノードの2番目の子どもから、属性名"name"とペアになっている属性値を取得する。 - -``` C\# -JungleTree tree = jungle.getTreeByName("GameTree"); -TreeNode root = tree.getRootNode(); -Children children = root.getChildren(); -Either either = children.at(2); -if (either.isA()) - return either.a(); -TreeNode child = either.b(); -Attribute attribute = child.getAttribute(); -string value = attribute.getstring("name"); - -``` - -# Jungleの木の編集 - -Jungleの木の編集はJungleTreeEditorクラスを用いて行われる。 - -JungleTreeEditorクラスには編集を行うために、定義されているAPIを記述する。 - -また、ノードを指定して編集を行う際にNodePathクラスを用いる。 - -# NodePath - -Jungleでは、木のノードの位置をNodePathクラスを使って表す。 - -NodePathクラスはルートノードからスタートし、対象のノードまでの経路を、数字を用いて指し示すことで対象のノードの場所を表す。 - -また、ルートノードは例外として-1と表記される。 +Jungleの構造としては以下の図のようになっている。
    - message + message
    -# ノードの追加 - -``` C\# -// 変数pathで指定した場所にある、ノードの子供の変数posで指定した位置子ノードを追加 -Either addNewChildAt( NodePath path, int pos) -// 変数pathで指定した場所にあるノードに、属性名 変数key 属性値 変数valueのペアで値を挿入 -Either putAttribute( NodePath path, string key, object value) - -// 変数pathで指定した場所にあるノードが持つ、属性名 変数keyとペアで保存されているデータを削除 -Either< Error, JungleTreeEditor> deleteAttribute( NodePath path, string key) - -``` - -# コミット - -編集の最後にTreeに対してコミットを行う。 - -``` C\# -// 木へ行った変更をコミット。自分が編集を行っていた間に、他のJungleTreeEditorクラスによって木が更新されていた場合、コミットは失敗 -Either commit() -``` - # ゲームのデータ構造 Jungleはもともと認証管理システムやWeb向けに作られたものである。 diff -r 10a1f30eb748 -r 7b39f43e4088 presen/slide.pdf.html --- a/presen/slide.pdf.html Wed Feb 15 09:28:06 2017 +0900 +++ b/presen/slide.pdf.html Wed Feb 15 17:20:12 2017 +0900 @@ -70,7 +70,7 @@ @@ -159,180 +159,19 @@
    -

    JungleのAPI

    - -

    前章ではJungleの概要を記述した。 -本章ではJungleの主なAPIについて紹介する。

    - - -
    -
    - -

    Jungleの木

    - -

    Jungleは複数の木を名前を利用して管理しており、名前により作成・編集を行う。

    - -
    // Jungleに新しく木を生成する。木の名前が重複した場合、生成に失敗しnullを返す
    -JungleTree  createNewTree(string treeName)
    -
    -// JungleからtreeNameと名前が一致するtreeを取得する。名前が一致するTreeがない場合取得は失敗しnullを返す
    -JungleTree  getTreeByName(string treeName)
    -
    -
    - -

    以下のコードは、Jungleの木を”TreeName”で生成し取得する。

    - -
    JungleTree tree = jungle.createNewTree("GameTree");
    -
    - - -
    -
    - -

    TreeNode

    - -

    Jungleが保持している木は、複数のノードの集合で出来ている。 -ノードは、自身の子のListと属性名と属性値の組でデータを持つ。 -ノードに対するアクセスは、TreeNodeクラスに記述されているAPIを用いて行われる。

    - -
    // ノードの子供を扱うChildrenオブジェクトを返す
    -Children getChildren()
    -
    -// ノードが保持しているデータを扱うAttribteオブジェクトを返す
    -Attribute getAttribute()
    -
    - - -
    -
    - -

    ChildrenとAttribute

    - -

    Childrenクラスを利用し、ノードの子どもにアクセスする。

    - -
    // ノードが持っている子どもの個数を返す
    -int size()
    -
    -// ノードが持つ子どもの中から、 変数numで指定された位置にある子ノードを返す
    -Either<Error, TreeNode> at(int num)
    -
    - -

    Attributeクラスを利用し、ノードの保持する値にアクセスする。

    - -
    // ノードからKeyで管理されるValueをobject型で返す
    -object get(string key)
    -
    -// ノードからKeyで管理されるValueをstring型で返す
    -string getString(string key)
    -
    - +

    JungleのDatabase

    -
    -
    - -

    Eitherクラス

    - -

    Jungleでは例外がある場合、Eitherクラスを用いて行う。

    - - - -

    を包んで返す。 -失敗した場合ははじめからやり直す。 -以下に例を記述する。

    - -
    Either<Error,TreeNode> either = children.at(2);
    -if (either.isA()) 
    -    return either.a();
    -TreeNode child = either.b();
    -
    -
    - - -
    -
    - -

    Jungleのサンプルコード

    - -

    Jungleの例を記載する。

    - -

    以下のコードは、ルートノードの2番目の子どもから、属性名”name”とペアになっている属性値を取得する。

    - -
    JungleTree tree = jungle.getTreeByName("GameTree");
    -TreeNode root = tree.getRootNode();
    -Children children = root.getChildren();
    -Either<Error,TreeNode> either = children.at(2);
    -if (either.isA()) 
    -    return either.a();
    -TreeNode child = either.b();
    -Attribute attribute = child.getAttribute();
    -string value = attribute.getstring("name");
    -
    -
    - - -
    -
    - -

    Jungleの木の編集

    - -

    Jungleの木の編集はJungleTreeEditorクラスを用いて行われる。

    - -

    JungleTreeEditorクラスには編集を行うために、定義されているAPIを記述する。

    - -

    また、ノードを指定して編集を行う際にNodePathクラスを用いる。

    - - -
    -
    - -

    NodePath

    - -

    Jungleでは、木のノードの位置をNodePathクラスを使って表す。

    - -

    NodePathクラスはルートノードからスタートし、対象のノードまでの経路を、数字を用いて指し示すことで対象のノードの場所を表す。

    - -

    また、ルートノードは例外として-1と表記される。

    +

    Jungleの構造としては以下の図のようになっている。

    - message + message
    -

    ノードの追加

    - -
    // 変数pathで指定した場所にある、ノードの子供の変数posで指定した位置子ノードを追加
    -Either<Error, JungleTreeEditor> addNewChildAt( NodePath path, int pos)
    -// 変数pathで指定した場所にあるノードに、属性名 変数key 属性値 変数valueのペアで値を挿入
    -Either<Error, JungleTreeEditor> putAttribute( NodePath path, string key, object value)
    -
    -// 変数pathで指定した場所にあるノードが持つ、属性名 変数keyとペアで保存されているデータを削除
    -Either< Error, JungleTreeEditor> deleteAttribute( NodePath path, string key)
    -
    -
    - - -
    -
    - -

    コミット

    - -

    編集の最後にTreeに対してコミットを行う。

    - -
    // 木へ行った変更をコミット。自分が編集を行っていた間に、他のJungleTreeEditorクラスによって木が更新されていた場合、コミットは失敗
    -Either<Error, JungleTreeEditor> commit()
    -
    - - -
    -
    - -

    ゲームのデータ構造

    +

    ゲームのデータ構造

    Jungleはもともと認証管理システムやWeb向けに作られたものである。 これらはすべて木構造をベースとしている。

    @@ -440,7 +279,7 @@
    -

    Eitherのチェック

    +

    Eitherのチェック

    Haskellでは例外処理はモナド内部で行う設計になっている。 Eitherもその一つである。

    @@ -501,7 +340,7 @@
    -

    例題のゲーム

    +

    例題のゲーム

    前章ではJungle-Sharpのどのように実装したかを述べた。

    @@ -521,17 +360,17 @@
    -

    ゲームデータの種類

    +

    ゲームデータの種類

    ゲームのデータにはいくつかの種類が考えられる。

    -

    オブジェクトが単体で持つデータ

    +

    オブジェクトが単体で持つデータ

    シーン内に存在するオブジェクトが持つパラメータ。

    例えば、プレイヤーのHPや経験値、位置座標などを示す。

    -

    オブジェクト1つで複数持つデータ

    +

    オブジェクト1つで複数持つデータ

    プレイヤーが持つアイテムデータなどを示す。

    @@ -545,7 +384,7 @@
    -

    データのデータ設計

    +

    データのデータ設計

    Jungleには複数の木を持つことができる。

    @@ -583,7 +422,7 @@
    -

    Jungleの改良

    +

    Jungleの改良

    前章では例題となるゲームを作成した。 その上でJungleではデータ型について問題となった。

    @@ -613,7 +452,7 @@
    -

    データを取り出す

    +

    データを取り出す

    データを取り出すにはGenericで型を指定する、もしくはas演算子を用いてキャストを行う。 以下に取り出す例を記述する。

    @@ -631,7 +470,7 @@
    -

    まとめ

    +

    まとめ

    本研究の流れは

    @@ -641,9 +480,9 @@
  • 問題点の改良
  • -

    となった。

    +

    である。

    -

    Jungle-Sharpの実装ではそれほど難しくはなかった。 +

    Jungle-Sharpの実装ではJavaと比較的似ている言語であるため、移行する方法を確立した。 C#版のJungleではJavaに劣らない、もしくはそれ以上のパフォーマンスを出すことが出来た。

    実際のゲームに合わせたJungleの拡張を行った。