Mercurial > hg > Papers > 2016 > tatsuki-prosym
changeset 24:24a324c76245
Modify
author | tatsuki |
---|---|
date | Tue, 29 Nov 2016 17:31:07 +0900 |
parents | b43817a9297d |
children | f9db6eba726a |
files | bbs.tex images/TreeEdit.graffle images/TreeEdit.pdf images/TreePersonJungle.graffle images/TreePersonJungle.pdf images/layoutTree.graffle images/layoutTree.pdf images/multiComponent.graffle images/multiComponent.pdf images/printNodeValue.graffle images/printNodeValue.pdf introduction.tex jungle.tex maTrix.tex renderingEngine.tex summary.tex |
diffstat | 16 files changed, 879 insertions(+), 705 deletions(-) [+] |
line wrap: on
line diff
--- a/bbs.tex Mon Nov 28 19:57:14 2016 +0900 +++ b/bbs.tex Tue Nov 29 17:31:07 2016 +0900 @@ -1,58 +1,60 @@ \section{Jungle Tree ブラウザ} -Jungleの木に対する変更において、JungleTreeEditorを用いる方法はプログラム上では便利だが、手動で変更するのには向いていない。 +Jungleの木に対する変更において、JungleTreeEditorクラスを用いる方法はプログラム上では便利だが、手動で変更するのには向いていない。 よって、組み込みWEBサーバーであるJettyを使用し、Servletとして木の表示と編集を実現した。 \subsection{木構造の表示} Jungle DBはWEBサーバー内に存在し、それから表示に必要なHTMLを生成してブラウザに転送する。 -図\ref{printNode}は、サーバからデータを送りブラウザ上でNodeを可視化するまでの流れである。 +図\ref{printNode}は、サーバからデータを送りブラウザ上でノードを可視化するまでの流れである。 この流れはJungleのNodePathの処理を除けば通常のデータベースのレコードの表示と同等である。 \begin{figure}[h] \begin{center} -\includegraphics[height = 6cm , bb=0 0 516 416]{images/printNodeValue.pdf} +\includegraphics[height = 6cm , bb=0 0 622 497]{images/printNodeValue.pdf} \caption{ブラウザを使用したNodeの可視化} \label{printNode} \end{center} \end{figure} \begin{enumerate} -\item Userは表示したいNodeのPathをJungleTreeブラウザに送る -\item JungleTreeブラウザはJungleから木を取得する -\item 木からPathの位置にあるNodeを取得する -\item Nodeの中身をJungleTreeブラウザが表示する +\item ユーザーは表示したいノードのパスをJungleTreeブラウザに送る。 +\item JungleTreeブラウザは、WEBサーバ内にあるJungleから、対応した木を取得する。 +\item JungleTreブラウザは、パスで指定した位置のノードを返す関数tree.getNodeOfPath()を用いて、木から表示するノードを取得する。 +\item (3)で取得したノードの中身を、JungleTreeブラウザが表示する。 \end{enumerate} \subsection{ブラウザを使った木の編集} 図\ref{JungleEdit}はブラウザを用いたJungleの木の更新の流れである。 -編集するノードのPathはURLで記述されている。例えば、 +編集するノードのパスはURLで記述されている。例えば、 + {\small -\verb! http://localhost/showBoardMessage?bname=Layout&path=-1,0,2! +\verb! http://localhost/showBoardMessage?! +\verb! bname=Layout&path=-1,0,2! } + などとなる。 \begin{figure}[h] \begin{center} -\includegraphics[height = 10cm , bb=0 0 516 795]{images/TreeEdit.pdf} +\includegraphics[height = 10cm , bb=0 0 622 971]{images/TreeEdit.pdf} \caption{ブラウザを介した木の編集} \label{JungleEdit} \end{center} \end{figure} -図\ref{JungleEdit} \begin{enumerate} -\item UserはJungleTreeブラウザで編集したいNodeを表示するページに移動する -\item JungleTreeブラウザに木の変更要求を送る -\item JungleTreeブラウザはJungleから対応した木を取得する -\item 木からEditorを取得する -\item Editorを使用して木の変更を行う +\item ユーザーはJungleTreeブラウザで編集したいノードを表示するページに移動する +\item ユーザーはJungleTreeブラウザに木の変更要求を送る +\item JungleTreeブラウザはWebサーバー内にあるJungleから、対応した木を取得する +\item 木からJungleTreeEditorクラスを取得する +\item JungleTreeEditorクラスを使用して木の変更を行う \item 木の変更をJungleにコミットする \item 木の変更の結果を表示する \end{enumerate} -Pathを使用することにより木の変更をRestfulに行うことができるように見えるが、木のPathは特定の木の版に固有のものである。 -ブラウザとWEBサーバはセッションで結合されており、そのセッションが同じ版の木を編集していれば問題はない。 +パスを使用することにより木の変更をRestfulに行うことができるように見えるが、木のパスは特定の木の版に固有のものである。 +ブラウザとWEBサーバはセッションで結合されており、そのセッションが同じ版の木を編集していれば問題なく成功する。 ただし、編集し終わった時に、他の編集が割り込んでいたら、その編集は無効となる。この点が既存のRDBとは異なる。 -また巨大な木を操作する時には、Pathを直接URLに含むことはできないので、他の工夫が必要になると思われる。 +また巨大な木を操作する時には、Pathを直接URLに含むことはできないので、他の工夫が必要になると考えられる。 このアプリケーションでは任意の木を取り扱うので、木の大きさの現実的な制限を除けば木の設計の問題はない。
--- a/images/TreeEdit.graffle Mon Nov 28 19:57:14 2016 +0900 +++ b/images/TreeEdit.graffle Tue Nov 29 17:31:07 2016 +0900 @@ -6,21 +6,26 @@ <integer>0</integer> <key>ApplicationVersion</key> <array> - <string>com.omnigroup.OmniGraffle6</string> - <string>156.11.0.206384</string> + <string>com.omnigroup.OmniGraffle</string> + <string>139.16.0.171715</string> </array> <key>AutoAdjust</key> <true/> <key>BackgroundGraphic</key> <dict> <key>Bounds</key> - <string>{{0, 0}, {559.00000476837158, 1566}}</string> + <string>{{0, 0}, {559, 1566}}</string> <key>Class</key> <string>SolidGraphic</string> <key>ID</key> <integer>2</integer> <key>Style</key> <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> <key>stroke</key> <dict> <key>Draws</key> @@ -41,9 +46,9 @@ <key>Creator</key> <string>sister_clown</string> <key>DisplayScale</key> - <string>1.0000 cm = 1.0000 cm</string> + <string>1.000 cm = 1.000 cm</string> <key>GraphDocumentVersion</key> - <integer>11</integer> + <integer>8</integer> <key>GraphicsList</key> <array> <dict> @@ -107,13 +112,13 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc \f0\fs28 \cf0 show\ -BBS}</string> +(7)}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -247,8 +252,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -403,8 +408,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -455,7 +460,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{174.87704849243164, 527}, {76, 31}}</string> + <string>{{174.9527530670166, 511}, {76, 52}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -514,12 +519,13 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs28 \cf0 success()}</string> +\f0\fs28 \cf0 success()\ +(6)}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -587,8 +593,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -717,7 +723,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{293.96173095703125, 342.53736877441406}, {47, 31}}</string> + <string>{{293.93243598937988, 319.63435745239258}, {47, 52}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -776,12 +782,13 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs28 \cf0 edit()}</string> +\f0\fs28 \cf0 edit()\ +(5)}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -849,8 +856,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1014,8 +1021,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1088,8 +1095,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1285,8 +1292,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1367,8 +1374,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1551,8 +1558,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1661,8 +1668,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1822,8 +1829,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -2142,8 +2149,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -2186,8 +2193,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -2230,8 +2237,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -2242,7 +2249,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{126.50163841247559, 67}, {62, 30}}</string> + <string>{{99.000818252563477, 67}, {122.49836826324463, 30}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -2274,12 +2281,12 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs24 \cf0 BBS}</string> +\f0\fs24 \cf0 JungleTree\'83\'75\'83\'89\'83\'45\'83\'55}</string> <key>VerticalPad</key> <integer>0</integer> </dict> @@ -2318,8 +2325,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -2378,9 +2385,9 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2016-11-28 08:34:15 +0000</string> + <string>2016-11-29 00:24:05 +0000</string> <key>Modifier</key> - <string>Kazuma</string> + <string>sister_clown</string> <key>NotesVisible</key> <string>NO</string> <key>Orientation</key> @@ -2409,7 +2416,7 @@ <key>NSPaperSize</key> <array> <string>size</string> - <string>{595.00000476837158, 842}</string> + <string>{595, 842}</string> </array> <key>NSPrintReverseOrientation</key> <array> @@ -2449,16 +2456,18 @@ <integer>2</integer> <key>WindowInfo</key> <dict> - <key>BottomSlabHeight</key> - <real>414</real> <key>CurrentSheet</key> <integer>0</integer> - <key>Expanded_Canvases</key> + <key>ExpandedCanvases</key> <array/> <key>Frame</key> - <string>{{352, 4}, {928, 773}}</string> - <key>ShowInfo</key> - <true/> + <string>{{958, 72}, {928, 773}}</string> + <key>ListView</key> + <false/> + <key>OutlineWidth</key> + <integer>142</integer> + <key>RightSidebar</key> + <false/> <key>ShowRuler</key> <true/> <key>Sidebar</key> @@ -2466,7 +2475,7 @@ <key>SidebarWidth</key> <integer>0</integer> <key>VisibleRegion</key> - <string>{{-26, 60}, {612, 616}}</string> + <string>{{-178, 3}, {914, 631}}</string> <key>Zoom</key> <real>1</real> <key>ZoomValues</key>
--- a/images/TreePersonJungle.graffle Mon Nov 28 19:57:14 2016 +0900 +++ b/images/TreePersonJungle.graffle Tue Nov 29 17:31:07 2016 +0900 @@ -6,21 +6,26 @@ <integer>0</integer> <key>ApplicationVersion</key> <array> - <string>com.omnigroup.OmniGraffle6</string> - <string>156.11.0.206384</string> + <string>com.omnigroup.OmniGraffle</string> + <string>139.16.0.171715</string> </array> <key>AutoAdjust</key> <true/> <key>BackgroundGraphic</key> <dict> <key>Bounds</key> - <string>{{0, 0}, {1118.0000095367432, 783}}</string> + <string>{{0, 0}, {1118, 783}}</string> <key>Class</key> <string>SolidGraphic</string> <key>ID</key> <integer>2</integer> <key>Style</key> <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> <key>stroke</key> <dict> <key>Draws</key> @@ -41,14 +46,14 @@ <key>Creator</key> <string>sister_clown</string> <key>DisplayScale</key> - <string>1.0000 cm = 1.0000 cm</string> + <string>1.000 cm = 1.000 cm</string> <key>GraphDocumentVersion</key> - <integer>11</integer> + <integer>8</integer> <key>GraphicsList</key> <array> <dict> <key>Bounds</key> - <string>{{367.75863085028385, 539.91339066197565}, {306.00000000000045, 46}}</string> + <string>{{367.75863085028385, 513.8267817752569}, {306.00000000000045, 46}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -107,19 +112,19 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs48 \cf0 Node}</string> +\f0\fs48 \cf0 Node5}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> </dict> <dict> <key>Bounds</key> - <string>{{368.75863085028385, 643.91339066197565}, {306.53947368421086, 40}}</string> + <string>{{368.75863085028385, 617.8267817752569}, {306.53947368421086, 40}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -178,8 +183,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -214,8 +219,8 @@ <integer>63</integer> <key>Points</key> <array> - <string>{522.29810453449466, 482.95669533098771}</string> - <string>{521.00863085028402, 532.91339066197577}</string> + <string>{522.29810453449466, 437.38976815178637}</string> + <string>{521.00863085028402, 506.82678177525685}</string> </array> <key>Style</key> <dict> @@ -241,7 +246,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{367.75863085028391, 585.91339066197565}, {305.37732241285681, 138}}</string> + <string>{{367.75863085028391, 559.8267817752569}, {305.37732241285681, 138}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -283,7 +288,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{367.75863085028385, 532.91339066197565}, {306.5000000000004, 53}}</string> + <string>{{367.75863085028385, 506.8267817752569}, {306.5000000000004, 53}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -349,7 +354,7 @@ <integer>60</integer> <key>Points</key> <array> - <string>{350.47670091920423, 215.58392451495493}</string> + <string>{350.47670093823405, 215.58392452097689}</string> <string>{522.29810453449466, 269.95669533098771}</string> </array> <key>Style</key> @@ -374,7 +379,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{369.79810453449414, 349.79921192972677}, {306.00000000000045, 100}}</string> + <string>{{369.79810453449414, 349.79921192972677}, {306.00000000000045, 70}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -433,14 +438,13 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc \f0\fs40 \cf0 element : Person \ -Persons-id : p:2\ -Person-type : Person}</string> +Persons-id : p:2}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -506,19 +510,19 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs48 \cf0 Node}</string> +\f0\fs48 \cf0 Node3}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> </dict> <dict> <key>Bounds</key> - <string>{{369.2981045344946, 322.95669533098771}, {306.00000000000006, 160}}</string> + <string>{{369.29810453449466, 322.95669533098771}, {306.00000000000006, 114.43307282079864}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -602,7 +606,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{24.800069810675467, 346.29921192972677}, {306.00000000000045, 100}}</string> + <string>{{24.800069810675467, 346.29921192972677}, {306.00000000000045, 70}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -661,14 +665,13 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc \f0\fs40 \cf0 element : Person \ -Persons-id : p:1\ -Person-type : Person}</string> +Persons-id : p:1}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -785,8 +788,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -856,12 +859,12 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs48 \cf0 Node}</string> +\f0\fs48 \cf0 Node1}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -947,7 +950,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{24.201895465505316, 539.91339066197565}, {315.71052631578982, 46}}</string> + <string>{{25.462221851003363, 506.82678132395131}, {315.71052631578982, 46}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -1006,12 +1009,12 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs48 \cf0 Node}</string> +\f0\fs48 \cf0 Node4}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -1077,19 +1080,19 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs48 \cf0 Node}</string> +\f0\fs48 \cf0 Node2}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> </dict> <dict> <key>Bounds</key> - <string>{{30.557943980738628, 643.91339066197565}, {291.96850658608236, 40}}</string> + <string>{{31.818270366236675, 610.82678132395131}, {291.96850658608236, 40}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -1148,8 +1151,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1184,8 +1187,8 @@ <integer>13</integer> <key>Points</key> <array> - <string>{177.30006981067586, 479.45669533098771}</string> - <string>{176.89055667193372, 532.91339066197565}</string> + <string>{177.30006981067586, 442.99999977434709}</string> + <string>{178.15088305743177, 499.82678132395131}</string> </array> <key>Style</key> <dict> @@ -1211,7 +1214,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{23.03974419415124, 585.91339066197565}, {306.53947368421086, 138}}</string> + <string>{{24.300070579649287, 552.82678132395131}, {306.53947368421086, 138}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1253,7 +1256,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{24.201895465505316, 532.91339066197565}, {305.37732241285681, 53}}</string> + <string>{{25.462221851003363, 499.82678132395131}, {305.37732241285681, 53}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1295,7 +1298,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{24.300069810675843, 319.45669533098771}, {306.00000000000006, 160}}</string> + <string>{{24.300069810675836, 319.45669533098771}, {306.00000000000006, 123.54330444335938}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1427,9 +1430,9 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2016-11-28 10:03:53 +0000</string> + <string>2016-11-29 00:40:10 +0000</string> <key>Modifier</key> - <string>Kazuma</string> + <string>sister_clown</string> <key>NotesVisible</key> <string>NO</string> <key>Orientation</key> @@ -1458,7 +1461,7 @@ <key>NSPaperSize</key> <array> <string>size</string> - <string>{595.00000476837158, 842}</string> + <string>{595, 842}</string> </array> <key>NSPrintReverseOrientation</key> <array> @@ -1498,15 +1501,17 @@ <integer>1</integer> <key>WindowInfo</key> <dict> - <key>BottomSlabHeight</key> - <real>414</real> <key>CurrentSheet</key> <integer>0</integer> - <key>Expanded_Canvases</key> + <key>ExpandedCanvases</key> <array/> <key>Frame</key> - <string>{{-0, 4}, {970, 773}}</string> - <key>ShowInfo</key> + <string>{{696, 404}, {970, 773}}</string> + <key>ListView</key> + <false/> + <key>OutlineWidth</key> + <integer>142</integer> + <key>RightSidebar</key> <false/> <key>ShowRuler</key> <true/> @@ -1515,7 +1520,7 @@ <key>SidebarWidth</key> <integer>0</integer> <key>VisibleRegion</key> - <string>{{-395, -224}, {1910, 1232}}</string> + <string>{{-398, -239}, {1912, 1262}}</string> <key>Zoom</key> <real>0.5</real> <key>ZoomValues</key>
--- a/images/layoutTree.graffle Mon Nov 28 19:57:14 2016 +0900 +++ b/images/layoutTree.graffle Tue Nov 29 17:31:07 2016 +0900 @@ -6,21 +6,26 @@ <integer>0</integer> <key>ApplicationVersion</key> <array> - <string>com.omnigroup.OmniGraffle6</string> - <string>156.11.0.206384</string> + <string>com.omnigroup.OmniGraffle</string> + <string>139.16.0.171715</string> </array> <key>AutoAdjust</key> <true/> <key>BackgroundGraphic</key> <dict> <key>Bounds</key> - <string>{{0, 0}, {1118.0000095367432, 1566}}</string> + <string>{{0, 0}, {1118, 783}}</string> <key>Class</key> <string>SolidGraphic</string> <key>ID</key> <integer>2</integer> <key>Style</key> <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> <key>stroke</key> <dict> <key>Draws</key> @@ -41,269 +46,14 @@ <key>Creator</key> <string>sister_clown</string> <key>DisplayScale</key> - <string>1.0000 cm = 1.0000 cm</string> + <string>1.000 cm = 1.000 cm</string> <key>GraphDocumentVersion</key> - <integer>11</integer> + <integer>8</integer> <key>GraphicsList</key> <array> <dict> - <key>Class</key> - <string>LineGraphic</string> - <key>Head</key> - <dict> - <key>ID</key> - <integer>3</integer> - <key>Info</key> - <integer>2</integer> - </dict> - <key>ID</key> - <integer>45</integer> - <key>Points</key> - <array> - <string>{350, 261}</string> - <string>{350.00000000000006, 354}</string> - </array> - <key>Style</key> - <dict> - <key>stroke</key> - <dict> - <key>HeadArrow</key> - <string>0</string> - <key>Join</key> - <integer>0</integer> - <key>Legacy</key> - <true/> - <key>TailArrow</key> - <string>0</string> - </dict> - </dict> - <key>Tail</key> - <dict> - <key>ID</key> - <integer>42</integer> - <key>Info</key> - <integer>1</integer> - </dict> - </dict> - <dict> <key>Bounds</key> - <string>{{197, 158}, {306.00000000000045, 40}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>Vertical</string> - <key>Flow</key> - <string>Resize</string> - <key>FontInfo</key> - <dict> - <key>Font</key> - <string>HiraKakuPro-W3</string> - <key>Size</key> - <real>20</real> - </dict> - <key>ID</key> - <integer>44</integer> - <key>Shape</key> - <string>Circle</string> - <key>Style</key> - <dict> - <key>fill</key> - <dict> - <key>Color</key> - <dict> - <key>b</key> - <string>0.974573</string> - <key>g</key> - <string>0.998064</string> - <key>r</key> - <string>1</string> - </dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>shadow</key> - <dict> - <key>Color</key> - <dict> - <key>a</key> - <string>0.75</string> - <key>b</key> - <string>0.94523</string> - <key>g</key> - <string>0.987116</string> - <key>r</key> - <string>1</string> - </dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs40 \cf0 NodeName : root}</string> - </dict> - <key>TextRelativeArea</key> - <string>{{0, 0}, {1, 1}}</string> - </dict> - <dict> - <key>Bounds</key> - <string>{{197, 55}, {306.00000000000011, 46}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>Vertical</string> - <key>Flow</key> - <string>Resize</string> - <key>FontInfo</key> - <dict> - <key>Font</key> - <string>HiraKakuPro-W3</string> - <key>Size</key> - <real>24</real> - </dict> - <key>ID</key> - <integer>43</integer> - <key>Shape</key> - <string>Circle</string> - <key>Style</key> - <dict> - <key>fill</key> - <dict> - <key>Color</key> - <dict> - <key>b</key> - <string>0.974573</string> - <key>g</key> - <string>0.998064</string> - <key>r</key> - <string>1</string> - </dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>shadow</key> - <dict> - <key>Color</key> - <dict> - <key>a</key> - <string>0.75</string> - <key>b</key> - <string>0.94523</string> - <key>g</key> - <string>0.987116</string> - <key>r</key> - <string>1</string> - </dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs48 \cf0 RootNode}</string> - </dict> - <key>TextRelativeArea</key> - <string>{{0, 0}, {1, 1}}</string> - </dict> - <dict> - <key>Bounds</key> - <string>{{197, 101}, {306.00000000000006, 160}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FontInfo</key> - <dict> - <key>Font</key> - <string>HiraKakuProN-W3</string> - <key>Size</key> - <real>12</real> - </dict> - <key>ID</key> - <integer>42</integer> - <key>Magnets</key> - <array> - <string>{0, 1}</string> - <string>{0, -1}</string> - <string>{1, 0}</string> - <string>{-1, 0}</string> - </array> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>VerticalPad</key> - <integer>0</integer> - </dict> - </dict> - <dict> - <key>Bounds</key> - <string>{{197, 48}, {306.00000000000006, 53}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FontInfo</key> - <dict> - <key>Font</key> - <string>HiraKakuProN-W3</string> - <key>Size</key> - <real>12</real> - </dict> - <key>ID</key> - <integer>41</integer> - <key>Magnets</key> - <array> - <string>{0, 1}</string> - <string>{0, -1}</string> - <string>{1, 0}</string> - <string>{-1, 0}</string> - </array> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>VerticalPad</key> - <integer>0</integer> - </dict> - </dict> - <dict> - <key>Bounds</key> - <string>{{196.99999999999966, 452}, {306.00000000000045, 70}}</string> + <string>{{175.46052631578917, 158}, {306.00000000000045, 70}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -362,8 +112,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -375,7 +125,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{371.53389830508473, 752.5}, {355.93220338983059, 168}}</string> + <string>{{349.99442462087421, 458.5}, {355.93220338983059, 168}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -434,8 +184,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -458,7 +208,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{371.53389830508473, 667}, {355.93220338983053, 46}}</string> + <string>{{349.99442462087421, 373}, {355.93220338983053, 46}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -517,8 +267,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -529,7 +279,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{0.53947368421052033, 667}, {326.42105263157919, 46}}</string> + <string>{{-20.999999999999972, 373}, {326.42105263157919, 46}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -588,8 +338,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -600,7 +350,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{196.9999999999998, 361}, {306.00000000000006, 46}}</string> + <string>{{175.46052631578931, 67}, {306.00000000000006, 46}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -659,8 +409,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -671,7 +421,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{1.5394736842104919, 771}, {325.42105263157919, 138}}</string> + <string>{{-21, 458.5}, {325.42105263157919, 228}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -730,19 +480,22 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs40 \cf0 NodeName : sample@Component\ +\f0\fs40 \cf0 NodeName : diaryImage@Component\ +use : image\ + width : imageWidth\ + height : imageHeight\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc \fs10 \cf0 \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\fs40 \cf0 displayComponentName : \ -diaryText@Component}</string> +\fs40 \cf0 \ +}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -761,8 +514,8 @@ <integer>15</integer> <key>Points</key> <array> - <string>{350.00000000000006, 566.99999999999989}</string> - <string>{549.5, 660}</string> + <string>{328.46052631578959, 273}</string> + <string>{527.96052631578948, 366}</string> </array> <key>Style</key> <dict> @@ -800,8 +553,8 @@ <integer>13</integer> <key>Points</key> <array> - <string>{350.00000000000006, 566.99999999999989}</string> - <string>{164.25000000000009, 659.99999999999989}</string> + <string>{328.46052631578959, 273}</string> + <string>{142.71052631578959, 366}</string> </array> <key>Style</key> <dict> @@ -827,7 +580,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{371.53389830508473, 713}, {355.93220338983053, 247}}</string> + <string>{{349.99442462087421, 419}, {355.93220338983053, 247}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -869,7 +622,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{371.53389830508473, 660}, {355.93220338983053, 53}}</string> + <string>{{349.99442462087421, 366}, {355.93220338983053, 53}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -911,7 +664,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{0.53947368421049191, 713}, {325.42105263157919, 254}}</string> + <string>{{-21, 419}, {325.42105263157919, 254}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -953,7 +706,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{1.5394736842104919, 660}, {325.42105263157919, 53}}</string> + <string>{{-20, 366}, {325.42105263157919, 53}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -995,7 +748,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{197.00000000000003, 407}, {306.00000000000006, 160}}</string> + <string>{{175.46052631578954, 113}, {306.00000000000006, 160}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1037,7 +790,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{197.00000000000003, 354}, {306.00000000000006, 53}}</string> + <string>{{175.46052631578954, 60}, {306.00000000000006, 53}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1122,9 +875,9 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2016-11-10 09:39:15 +0000</string> + <string>2016-11-29 07:02:26 +0000</string> <key>Modifier</key> - <string>Kazuma</string> + <string>sister_clown</string> <key>NotesVisible</key> <string>NO</string> <key>Orientation</key> @@ -1153,7 +906,7 @@ <key>NSPaperSize</key> <array> <string>size</string> - <string>{595.00000476837158, 842}</string> + <string>{595, 842}</string> </array> <key>NSPrintReverseOrientation</key> <array> @@ -1190,19 +943,21 @@ <key>UseEntirePage</key> <false/> <key>VPages</key> - <integer>2</integer> + <integer>1</integer> <key>WindowInfo</key> <dict> - <key>BottomSlabHeight</key> - <real>414</real> <key>CurrentSheet</key> <integer>0</integer> - <key>Expanded_Canvases</key> + <key>ExpandedCanvases</key> <array/> <key>Frame</key> - <string>{{0, 4}, {1280, 773}}</string> - <key>ShowInfo</key> - <true/> + <string>{{281, 404}, {1280, 773}}</string> + <key>ListView</key> + <false/> + <key>OutlineWidth</key> + <integer>142</integer> + <key>RightSidebar</key> + <false/> <key>ShowRuler</key> <true/> <key>Sidebar</key> @@ -1210,7 +965,7 @@ <key>SidebarWidth</key> <integer>230</integer> <key>VisibleRegion</key> - <string>{{5, 0}, {733, 616}}</string> + <string>{{-21, 88}, {1035, 631}}</string> <key>Zoom</key> <real>1</real> <key>ZoomValues</key>
--- a/images/multiComponent.graffle Mon Nov 28 19:57:14 2016 +0900 +++ b/images/multiComponent.graffle Tue Nov 29 17:31:07 2016 +0900 @@ -6,21 +6,26 @@ <integer>0</integer> <key>ApplicationVersion</key> <array> - <string>com.omnigroup.OmniGraffle6</string> - <string>156.11.0.206384</string> + <string>com.omnigroup.OmniGraffle</string> + <string>139.16.0.171715</string> </array> <key>AutoAdjust</key> <true/> <key>BackgroundGraphic</key> <dict> <key>Bounds</key> - <string>{{0, 0}, {1118.0000095367432, 1566}}</string> + <string>{{0, 0}, {1118, 1566}}</string> <key>Class</key> <string>SolidGraphic</string> <key>ID</key> <integer>2</integer> <key>Style</key> <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> <key>stroke</key> <dict> <key>Draws</key> @@ -41,12 +46,268 @@ <key>Creator</key> <string>sister_clown</string> <key>DisplayScale</key> - <string>1.0000 cm = 1.0000 cm</string> + <string>1.000 cm = 1.000 cm</string> <key>GraphDocumentVersion</key> - <integer>11</integer> + <integer>8</integer> <key>GraphicsList</key> <array> <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>3</integer> + </dict> + <key>ID</key> + <integer>41</integer> + <key>Points</key> + <array> + <string>{358.5, 224}</string> + <string>{358.5, 354}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>0</string> + <key>Join</key> + <integer>0</integer> + <key>Legacy</key> + <true/> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>38</integer> + <key>Info</key> + <integer>1</integer> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{205.5, 109}, {306.00000000000006, 70}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>Vertical</string> + <key>Flow</key> + <string>Resize</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>HiraKakuPro-W3</string> + <key>Size</key> + <real>20</real> + </dict> + <key>ID</key> + <integer>40</integer> + <key>Shape</key> + <string>Circle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0.974573</string> + <key>g</key> + <string>0.998064</string> + <key>r</key> + <string>1</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Color</key> + <dict> + <key>a</key> + <string>0.75</string> + <key>b</key> + <string>0.94523</string> + <key>g</key> + <string>0.987116</string> + <key>r</key> + <string>1</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs40 \cf0 NodeName : \ +displayinfomation}</string> + </dict> + <key>TextRelativeArea</key> + <string>{{0, 0}, {1, 1}}</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{314, 18}, {89, 46}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>HiraKakuPro-W3</string> + <key>Size</key> + <real>24</real> + </dict> + <key>ID</key> + <integer>39</integer> + <key>Shape</key> + <string>Circle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0.974573</string> + <key>g</key> + <string>0.998064</string> + <key>r</key> + <string>1</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Color</key> + <dict> + <key>a</key> + <string>0.75</string> + <key>b</key> + <string>0.94523</string> + <key>g</key> + <string>0.987116</string> + <key>r</key> + <string>1</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs48 \cf0 Node1}</string> + </dict> + <key>TextRelativeArea</key> + <string>{{0, 0}, {1, 1}}</string> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{205.5, 64}, {306.00000000000006, 160}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>HiraKakuProN-W3</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>38</integer> + <key>Magnets</key> + <array> + <string>{0, 1}</string> + <string>{0, -1}</string> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>VerticalPad</key> + <integer>0</integer> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{205.5, 11}, {306.00000000000006, 53}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>HiraKakuProN-W3</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>37</integer> + <key>Magnets</key> + <array> + <string>{0, 1}</string> + <string>{0, -1}</string> + <string>{1, 0}</string> + <string>{-1, 0}</string> + </array> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>VerticalPad</key> + <integer>0</integer> + </dict> + </dict> + <dict> <key>Bounds</key> <string>{{205.5, 452}, {306.00000000000006, 70}}</string> <key>Class</key> @@ -107,8 +368,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -179,8 +440,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -251,12 +512,12 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs48 \cf0 Node3}</string> +\f0\fs48 \cf0 Node4}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -322,12 +583,12 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs48 \cf0 Node2}</string> +\f0\fs48 \cf0 Node3}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -393,12 +654,12 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs48 \cf0 Node1}</string> +\f0\fs48 \cf0 Node2}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -466,8 +727,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -847,9 +1108,9 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2016-11-10 08:52:05 +0000</string> + <string>2016-11-29 06:54:47 +0000</string> <key>Modifier</key> - <string>Kazuma</string> + <string>sister_clown</string> <key>NotesVisible</key> <string>NO</string> <key>Orientation</key> @@ -878,7 +1139,7 @@ <key>NSPaperSize</key> <array> <string>size</string> - <string>{595.00000476837158, 842}</string> + <string>{595, 842}</string> </array> <key>NSPrintReverseOrientation</key> <array> @@ -918,16 +1179,18 @@ <integer>2</integer> <key>WindowInfo</key> <dict> - <key>BottomSlabHeight</key> - <real>414</real> <key>CurrentSheet</key> <integer>0</integer> - <key>Expanded_Canvases</key> + <key>ExpandedCanvases</key> <array/> <key>Frame</key> - <string>{{0, 4}, {1280, 773}}</string> - <key>ShowInfo</key> - <true/> + <string>{{301, 0}, {1280, 773}}</string> + <key>ListView</key> + <false/> + <key>OutlineWidth</key> + <integer>142</integer> + <key>RightSidebar</key> + <false/> <key>ShowRuler</key> <true/> <key>Sidebar</key> @@ -935,7 +1198,7 @@ <key>SidebarWidth</key> <integer>230</integer> <key>VisibleRegion</key> - <string>{{7, 404}, {733, 616}}</string> + <string>{{0, 269.5}, {1035, 631}}</string> <key>Zoom</key> <real>1</real> <key>ZoomValues</key>
--- a/images/printNodeValue.graffle Mon Nov 28 19:57:14 2016 +0900 +++ b/images/printNodeValue.graffle Tue Nov 29 17:31:07 2016 +0900 @@ -6,21 +6,26 @@ <integer>0</integer> <key>ApplicationVersion</key> <array> - <string>com.omnigroup.OmniGraffle6</string> - <string>156.11.0.206384</string> + <string>com.omnigroup.OmniGraffle</string> + <string>139.16.0.171715</string> </array> <key>AutoAdjust</key> <true/> <key>BackgroundGraphic</key> <dict> <key>Bounds</key> - <string>{{0, 0}, {559.00000476837158, 783}}</string> + <string>{{0, 0}, {559, 783}}</string> <key>Class</key> <string>SolidGraphic</string> <key>ID</key> <integer>2</integer> <key>Style</key> <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> <key>stroke</key> <dict> <key>Draws</key> @@ -41,9 +46,9 @@ <key>Creator</key> <string>sister_clown</string> <key>DisplayScale</key> - <string>1.0000 cm = 1.0000 cm</string> + <string>1.000 cm = 1.000 cm</string> <key>GraphDocumentVersion</key> - <integer>11</integer> + <integer>8</integer> <key>GraphicsList</key> <array> <dict> @@ -107,8 +112,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -166,7 +171,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{256.13599323978883, 300.92645362881638}, {107.85853238807879, 52}}</string> + <string>{{256.13599323978883, 300.92645362881638}, {107.85853238807879, 31}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -225,13 +230,12 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs28 \cf0 return Node\ -(4)}</string> +\f0\fs28 \cf0 return Node}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -297,8 +301,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -503,8 +507,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -573,7 +577,7 @@ <integer>31</integer> <key>Points</key> <array> - <string>{258.33451713153255, 187}</string> + <string>{253.30403336227076, 188}</string> <string>{470.09625244140625, 187}</string> </array> <key>Style</key> @@ -648,13 +652,13 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc \f0\fs28 \cf0 print Node\ -(5)}</string> +(4)}</string> </dict> <key>TextRelativeArea</key> <string>{{0, 0}, {1, 1}}</string> @@ -761,8 +765,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -815,7 +819,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{222.81577414960989, 128.74524831919928}, {28, 286.06197648296416}}</string> + <string>{{225.30403336227076, 132.95679750020474}, {28, 286.06197648296416}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -945,7 +949,7 @@ <integer>17</integer> <key>Points</key> <array> - <string>{237.62460136413574, 98}</string> + <string>{242.57993030548096, 98.5}</string> <string>{236, 455}</string> </array> <key>Style</key> @@ -1097,8 +1101,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1141,8 +1145,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1153,7 +1157,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{206.62460136413574, 68}, {62, 30}}</string> + <string>{{176, 68.5}, {133.15986061096189, 30}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FontInfo</key> @@ -1185,12 +1189,12 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs24 \cf0 BBS}</string> +\f0\fs24 \cf0 JungleTree\'83\'75\'83\'89\'83\'45\'83\'55}</string> <key>VerticalPad</key> <integer>0</integer> </dict> @@ -1229,8 +1233,8 @@ <key>Text</key> <dict> <key>Text</key> - <string>{\rtf1\ansi\ansicpg932\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} + <string>{\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc @@ -1289,9 +1293,9 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2016-11-28 08:23:17 +0000</string> + <string>2016-11-29 00:21:19 +0000</string> <key>Modifier</key> - <string>Kazuma</string> + <string>sister_clown</string> <key>NotesVisible</key> <string>NO</string> <key>Orientation</key> @@ -1320,7 +1324,7 @@ <key>NSPaperSize</key> <array> <string>size</string> - <string>{595.00000476837158, 842}</string> + <string>{595, 842}</string> </array> <key>NSPrintReverseOrientation</key> <array> @@ -1360,16 +1364,18 @@ <integer>1</integer> <key>WindowInfo</key> <dict> - <key>BottomSlabHeight</key> - <real>414</real> <key>CurrentSheet</key> <integer>0</integer> - <key>Expanded_Canvases</key> + <key>ExpandedCanvases</key> <array/> <key>Frame</key> - <string>{{1, 4}, {1279, 773}}</string> - <key>ShowInfo</key> - <true/> + <string>{{600, 212}, {1279, 773}}</string> + <key>ListView</key> + <false/> + <key>OutlineWidth</key> + <integer>142</integer> + <key>RightSidebar</key> + <false/> <key>ShowRuler</key> <true/> <key>Sidebar</key> @@ -1377,7 +1383,7 @@ <key>SidebarWidth</key> <integer>230</integer> <key>VisibleRegion</key> - <string>{{-86, 0}, {732, 616}}</string> + <string>{{-238, 0}, {1034, 631}}</string> <key>Zoom</key> <real>1</real> <key>ZoomValues</key>
--- a/introduction.tex Mon Nov 28 19:57:14 2016 +0900 +++ b/introduction.tex Tue Nov 29 17:31:07 2016 +0900 @@ -1,41 +1,16 @@ -\section{はじめに} -\subsection{Jungle DBによるインピーダンスミスマッチの解決} +\section{Jungle DBによるインピーダンスミスマッチの解決} プログラム中のデータ構造とRDBの表構造には大きなギャップがある。これはインピーダンスミスマッチと呼ばれている。 -例えばRPGゲーム中のユーザが持つアイテムという単純なものでもRDBではユーザとアイテムの組をキーとする巨大な表として管理することになる。 -プログラム中ではユーザが持つアイテムリストという簡単な構造を持つが、データのネスト構造を許さない第一正規形を要求するRDBとは相容れない。 +例えばRPGゲーム中のユーザが持つアイテムという単純なものでも、RDBではユーザとアイテムの組をキーとする巨大な表として管理することになる。 +プログラム中では、ユーザが持つアイテムリストという簡単な構造を持つが、データのネスト構造を許さない第一正規形を要求するRDBとは相容れない。 レコードをプログラム中のオブジェクトに対応させるOR Mapという技術では、これを本質的には解決することはできない。 -そこで、 MySQLやPosgreSQLなどはJsonなどの不定形のデータ構造を格納するように機能拡張されるようになってきた。 +そこで、 MySQLやPosgreSQLなどは、Jsonなどの不定形のデータ構造を格納するように機能拡張されるようになってきた。 しかし、不定形の構造の変更をトランザクションとして、どのように処理するかはJsonの一括変更という形で処理されてしまっており、 並列処理が中心となってきている今のアプリケーションには向いているとは言えない。つまり、この拡張はRDBよりの拡張であり、 並列処理を含むプログラミングからの要請とのミスマッチが残っている。 -\subsection{非破壊的木構造データベースJungle} - 当研究室では、これらの問題を解決した煩雑なデータ設計が必要のない Jungleデータベースを提案している。 - -Jungleは複数の木の集合からなり、木は複数のノードの集合で出来ている。 -ノードは自身の子のListと属性名と属性値の組を持ち、データベースのレコードに相当する。 -通常のレコードと異なるのは、ノードに子供となる複数のノードが付くところである。 -また、ノード同士はListを用いた参照で木構造を構築しているため、親から子への片方向の参照しか持たない。 - - -Jungleは データの編集は一度生成した木を上書きせず、ルートから編集を行うノードまでコピーを行い新しく木構造を構築し、そのルートをアトミックに入れ替えることで行う。 -これを非破壊的木構造と呼ぶ。非破壊木構造は新しい木を構築している時にも、現在の木を安定して読み出せるという特徴がある。 -しかし、書き込み時の手間は大きくなる。 - -通常のRDBと異なり、Jungleは木構造をそのまま読み込むことができる。例えば、XMLやJasonで記述された構造をデータベースを設計することなく読み込むことが可能であり、実際、そういう機能が実装されている。この木をそのままデータベースとして使用することも可能である。しかし、木の変更の手間は木の構造に依存する。 -%特に非破壊木構造を採用しているJungleでは木構造の変更にo(1)からo(n)の様々な選択肢がある。つまり、アプリケーションに合わせて木を設計しない限り、 -特に非破壊木構造を採用しているJungleでは木構造の変更の手間はO(1)からO(n)となる。つまり、アプリケーションに合わせて木を設計しない限り、 -十分な性能を出すことはできない。逆に言えば、正しい木の設計を行えば高速な処理が可能である。 - -Jungleは基本的にon memoryで使用することを考えており、一度、木のルートを握れば、その上で木構造として自由にアクセスして良い。 -Jungleは分散データベースを構成するように設計されており、分散ノード間の通信は木の変更のログを交換することによって行われる。 -持続性のある分散ノードを用いることでJungleの持続性を保証することができる。本論文では分散実装部分ではなく on memory DBの -部分について考察する。 - -本論文では、 -実際に、Jungleを用いたアプリケーションをいくつか構築し、どのような木構造がアプリケーションに向いているかを調べる。 +本論文では、実際にJungleを用いたアプリケーションをいくつか構築することで、Jungleに実用データベースとしての表現力、性能があるかを確かめるとともに、どのような木構造がアプリケーションに向いているかを調べる。 その際の設計指針はRDBとは異なり複雑である。これはプログラムのデータ構造そのものの設計に相当する。 Jungleは、その意味でプログラミングの視点から見たデータベースになっている。
--- a/jungle.tex Mon Nov 28 19:57:14 2016 +0900 +++ b/jungle.tex Tue Nov 29 17:31:07 2016 +0900 @@ -1,15 +1,42 @@ -\section{JungleのAPI} +\section{非破壊的木構造データベースJungle} +Jungleは等研究室が開発を行っているデータベースで、Javaを用いて実装されている。 Jungleは複数の木の集合からなり、木は複数のノードの集合で出来ている。 -それぞれの木には名前が付いている。 -木の中のノードの位置はNodePathで表される。 -指定されたノードに対する編集を行うJungleTreeEditorを呼び出す。 -編集し終わった後に名前に対する木のルートをアトミックに変更するcommit APIを呼び出す。 -本節ではJungle DBのAPIについて解説する。 +ノードは自身の子のListと属性名と属性値の組でデータを持ち、データベースのレコードに相当する。 +通常のレコードと異なるのは、ノードに子供となる複数のノードが付くところである。 +また、ノード同士はListを用いた参照で木構造を構築しているため、親から子への片方向の参照しか持たない。 +Jungleは、データの編集を一度生成した木を上書きせず、ルートから編集を行うノードまでコピーを行い新しく木構造を構築し、そのルートをアトミックに入れ替えることで行う(図\ref{nonDestractTreeEdit})。 +その際、編集に関係ないノードは参照を行い、複製元の木と共有する。 +これを非破壊的木構造と呼ぶ。非破壊木構造は新しい木を構築している時にも、現在の木を安定して読み出せるという特徴がある。 +しかし、書き込み時の手間は大きくなる。 + +\begin{figure}[h] +\begin{center} +\includegraphics[height = 2.5cm , bb=0 0 511 188]{images/nonDestractTreeEdit.pdf} +\caption{非破壊的木構造の木の編集} +\label{nonDestractTreeEdit} +\end{center} +\end{figure} +図\ref{nonDestractTreeEdit}の例ではノードB D Eは編集に関係ないためノードAから参照を行い、過去の木と共有を行っている。 + + +通常のRDBと異なり、Jungleは木構造をそのまま読み込むことができる。例えば、XMLやJsonで記述された構造をデータベースを設計することなく読み込むことが可能であり、実際、そのような機能が実装されている。この木をそのままデ +ータベースとして使用することも可能である。しかし、木の変更の手間は木の構造に依存する。 +%特に非破壊木構造を採用しているJungleでは木構造の変更にo(1)からo(n)の様々な選択肢がある。つまり、アプリケーションに合わせて木を設計しない限り、 +特に非破壊木構造を採用しているJungleでは木構造の変更の手間はO(1)からO(n)となる。つまり、アプリケーションに合わせて木を設計しない限り、 +十分な性能を出すことはできない。逆に言えば、正しい木の設計を行えば高速な処理が可能である。 + +Jungleは基本的にon memoryで使用することを考えており、一度、木のルートを取得すれば、その上で木構造として自由にアクセスして良い。 +Jungleは分散データベースを構成するように設計されており、分散ノード間の通信は木の変更のログを交換することによって行われる。 +持続性のある分散ノードを用いることでJungleの持続性を保証することができる。本論文では分散実装部分ではなく on memory DBの +部分について考察する。 + \subsection{木の生成} -Jungleには木の生成・管理を行うAPI(表\ref{jungleAPI})が実装されている。 +初めにJungleにおける木の生成について述べる。 +Jungleは複数の木を一意な名前を利用して管理しており、名前を利用することで作成、編集、削除を行う。 +以下にJungleが提供している木の生成・管理を行うAPI(表\ref{jungleAPI})を記す。 \begin{table}[htb] \begin{center} \caption{Jungleに実装されているAPI} @@ -26,11 +53,90 @@ \end{center} \end{table} -\newpage + +\subsection{TreeNode} +Jungleが保持している木は複数のノードの集合で出来ている。 +ノードは自身の子のListと属性名と属性値の組でデータを持つ。 +ノードに対するアクセスは表\ref{TreeNodeAPI}に記述されているAPIを用いて行われる。 + +\begin{table}[htb] +\begin{center} +\caption{TreeNodeに実装されているAPI} +\begin{tabular}{|l|l|} \hline +Children &ノードの子供を扱う \\ +getChildren() &Childrenクラスを返す。 \\ \hline +Attribute &ノードが保持しているデータを \\ +getAttribute() &扱うAttribteクラスを返す。 \\ \hline +\end{tabular} +\label{TreeNodeAPI} +\end{center} +\end{table} + +Childrenクラスは表\ref{Children}に記述されたAPIを、Attributeクラスは表\ref{Attribute}に記述されたAPIを提供する。 +これらを利用しノードの子供や、保持する値にアクセスする。 +\begin{table}[htbH] +\begin{center} +\caption{Childrenに実装されているAPI} +\begin{tabular}{|l|l|} \hline +int size() &子供の数を返す。 \\ \hline +Either &ノードが持つ子供の中から、 \\ +\textless Error,TreeNode\textgreater &変数numで指定された \\ +at(int num) &位置にある子どもを返す。 \\ \hline +\end{tabular} +\label{Children} +\end{center} +\end{table} + + +関数children.at(int num)が返すEither\textless Error,TreeNode\textgreater クラスは、変数numで指定した場所に子ノードがあればTreeNodeクラスを、無かった場合はErrorクラスを持つ型である。 + + + +\begin{table}[htbH] +\begin{center} +\caption{Attributeに実装されているAPI} +\begin{tabular}{|l|l|} \hline +ByteBuffer &ノードが持つ値から、 \\ +get(String key) &属性名 keyとペアの属性値 \\ + &をByteBuffer型で返す。 \\ \hline +String &ノードが持つ値から、\\ +getString(String key) &属性名 key とペアの属性値 \\ + &をString型で返す。 \\ \hline +\end{tabular} +\label{Attribute} +\end{center} +\end{table} + +以下にルートノードの2番目の子供から、属性名 nameとペアになっている属性値を取得するサンプルコードを記述する。 +\begin{lstlisting}[frame=lrbt,numbers=left,label=getAttributeCode] +JungleTree tree = jungle.getTreeByName("TreeName"); +TreeNode root = tree.getRootNode(); +Children children = root.getChildren(); +Either<Error,TreeNode> either = children.at(2); +if (either.isA()) + throw new IllegalStateException(); +TreeNode child = either.b(); +Attribute attribute = child.getAttribute(); +String value = attribute.getString("name"); +\end{lstlisting} + +\begin{enumerate} +\item Jungleから名前を指定して木を取得する。 +\item (1)で取得した木のルートノードを取得する。 +\item (2)で取得したルートノードからChildren型の子ノードを取得する。 +\item (3)で取得した変数childrenから2番目の子供を取得する。 +\item 2番目の子供が取得できたかを調べる。 +\item 取得できていなかった場合Exceptionを投げる。 +\item 取得に成功していた場合、eitherから子ノードを受け取る。 +\item (7)で取得した子ノードからAttributeを取得する。 +\item (8)で取得したAttributeから属性名 nameがペアの値を取得する。 +\end{enumerate} + + \subsection{NodePath} -JungleのNodeの位置はNodePathを使って表す。 -NodePathはrootNodeからスタートし、対象のNodeまでの経路を、数字を用いて指し示すことで対象のNodeの場所を表す。また、rootNodeは例外として-1と表記される。 -NodePathが\textless -1,1,2,3\textgreater を表している際の例を図\ref{NodePath}に記す。 +Jungleでは、木のノードの位置はNodePathクラスを使って表す。 +NodePathクラスはルートノードからスタートし、対象のノードまでの経路を、数字を用いて指し示すことで対象のノードの場所を表す。また、ルートノードは例外として-1と表記される。 +NodePathクラスが\textless -1,1,2,3\textgreater を表している際の例を図\ref{NodePath}に記す。 \begin{figure}[h] \begin{center} \includegraphics[height = 4cm , bb=0 0 313 301]{images/nodePath.pdf} @@ -39,51 +145,61 @@ \end{center} \end{figure} -\subsection{木の編集} -Jungleの木の編集はJungleTreeEditorを用いて行われる。 -JungleTreeEditorには表\ref{editor}で定義されているAPIが実装されている。 + + +\newpage + +\subsection{木の編集API} +Jungleの木の編集はJungleTreeEditorクラスを用いて行われる。 +JungleTreeEditorクラスには編集を行うために、表\ref{editor}で定義されているAPIが実装されている。 \begin{table}[htb] \begin{center} \caption{Editorに実装されているAPI} \begin{tabular}{|l|l|} \hline -addNewChildAt( &pathで指定した場所にある \\ -NodePath path, &Nodeの子供のpos番目にNodeを \\ -int pos) &追加する。 \\ \hline -deleteChildAt( &pathで指定した場所にある \\ -NodePath path, &Nodeのpos番目の子ノードを \\ -int pos) &削除する。 \\ \hline -putAttribute( &pathで指定した場所にある \\ -NodePath path, &Nodeに属性名 key \\ -String key, &属性値 valueのペアで \\ -ByteBuffer value) &値を挿入する。 \\ \hline -deleteAttribute( &pathで指定した場所にある \\ -NodePath path, &Nodeが持つ属性名keyとペアで \\ -String key) &保存されているデータを削除する。 \\ \hline -moveChild( &pathで指定された位置にある \\ -NodePath path &NodeのchildNum番目の \\ -,int childNum, &childをmoveの方向に移動させる。 \\ -String move) & \\ \hline -pushPop() & rootNodeの上に新しいrootNodeを追加する。 \\ - & 線形のTree等を作る際に使用することで \\ - & 計算量をO(n)からO(1)にできる。 \\ \hline +Either &変数pathで指定した場所 \\ +\textless Error,JungleTreeEditor\textgreater &にある、ノードの子供の \\ +addNewChildAt( &変数posで指定した位置に\\ +NodePath path, &子ノードを追加する。 \\ +int pos) & \\ \hline +Either &変数pathで指定した場所 \\ +\textless Error,JungleTreeEditor\textgreater &にある、ノードの子供の \\ +deleteChildAt( &変数posで指定した位置の\\ +NodePath path, &子ノードを削除する。 \\ +int pos) & \\ \hline +Either &変数pathで指定した場所 \\ +\textless Error,JungleTreeEditor\textgreater &にあるノードに、 \\ +putAttribute( &属性名 変数key \\ +NodePath path, &属性値 変数valu \\ +String key, &のペアで値を挿入する。 \\ +ByteBuffer value) & \\ \hline +Either &変数pathで指定した場所 \\ +\textless Error,JungleTreeEditor\textgreater &にあるノードが持つ、 \\ +deleteAttribute( &属性名 変数keyとペアで \\ +NodePath path, &保存されているデータを \\ +String key) &削除する。 \\ \hline +Either &変数pathで指定した場所 \\ +\textless Error,JungleTreeEditor\textgreater &にある、ノードの変数num\\ +moveChild( &で指定された位置の子供を\\ +NodePath path &変数moveの方向に\\ +,int num, &移動させる。 \\ +String move) & \\ \hline +Either &ルートノードの上に新しい\\ +\textless Error,JungleTreeEditor\textgreater &ルートノードを追加する\\ +pushPop() &線形のTree等を作る際に\\ + &使用することで計算量を\\ + &O(n)からO(1)にできる。\\ \hline \end{tabular} \label{editor} \end{center} \end{table} -これらのAPIは -\begin{lstlisting}[frame=lrbt,numbers=left,label=editorCode] -Either<Error, JungleTreeNode> -\end{lstlisting} -型を返す。 -これはエラーの場合はErrorが格納されており、編集が成功した場合JungleTreeEditorを保持する。 -編集後に返されるJungleTreeEditorは、編集された木構造を保持しているため、編集前の木構造を保持しているJungleTreeEditorとは別のオブジェクトである。 -編集を行った後は、editor.success()で今までの編集をコミットすることができる。その際他のJungleTreeEditorによって木が更新されていた場合はコミットに失敗する。 +編集後に返されるJungleTreeEditorクラスは、編集された木構造を保持しているため、編集前の木構造を保持しているJungleTreeEditorクラスとは別のオブジェクトである。 +編集を行った後は、関数editor.success()で今までの編集をコミットすることができる。その際他のJungleTreeEditorクラスによって木が更新されていた場合はコミットに失敗する。 その場合は最初からやり直す必要がある。 -以下にJungleTreeEditorを使ったサンプルコードを記述する。 +以下にJungleTreeEditorクラスを使ったサンプルコードを記述する。 \begin{lstlisting}[frame=lrbt,numbers=left,label=editorCode] JungleTreeEditor editor = tree.getTreeEditor(); @@ -96,13 +212,13 @@ \end{lstlisting} \begin{enumerate} -\item tree.getEditor()でtreeからJungleTreeEditorを取得する。 -\item 次に変更するノードの場所を指すNodePathを作成する。 -\item editor.addNewChildAtでpathで指定したノードの子供の0番目に子ノードを追加する。 -\item 返り値のEitherがErrorを保持していないか(編集に失敗していないか)を確認する。 -\item Errorを保持していた場合Exceptionを投げる。 -\item 編集に成功していた場合、編集後のEditorを取得する。 -\item (6)で取得したEditorを用いて木の変更をコミットする。 +\item 関数tree.getEditor()で変数treeからJungleTreeEditorクラスを取得する。 +\item 次に変更するノードの場所を指すNodePathクラスを作成する。 +\item 関数editor.addNewChildAtを用いて、変数pathで指定したノードの子供の0番目に子ノードを追加する。 +\item 返り値の変数EitherがErrorクラスを保持していないか(編集に失敗していないか)を確認する。 +\item Errorクラスを保持していた場合Exceptionを投げる。 +\item 編集に成功していた場合、編集後のJungleTreeEditorクラスを取得する。 +\item (6)で取得したJungleTreeEditorクラスを用いて木の変更をコミットする。 \end{enumerate} これらのAPIによりJungleは木構造を格納、編集する機能を持っている。
--- a/maTrix.tex Mon Nov 28 19:57:14 2016 +0900 +++ b/maTrix.tex Tue Nov 29 17:31:07 2016 +0900 @@ -1,7 +1,8 @@ \section{許認可管理アプリケーション\\maTrix} -Jungle Treeブラウザを実装した後、Jungle上に実際に企業で運用されている許認可管理アプリケーションmaTrixを実装し、データベースとしての表現力、機能の十分性、実用的な性能があるか、実証実験を行なった。 +本章では、Jungle上に実際に企業で運用されている許認可管理アプリケーションmaTrixを実装し、Jungleにデータベースとしての表現力、機能の十分性、実用的な性能があるかについて実証実験を行なう。 -maTrixは、人物、役職、役割、権限、組織等の木構造のデータとポリシーファイルを持つ。maTrixの組織構造はデータ同士がidを用いた参照を行うことで表現される。また、maTrixは過去のアクセス要求を全て保存する。アクセス要求は当時の組織構造を参照しているため、組織構造は版管理されている。 +maTrixは、人物、役職、役割、権限、組織等の木構造のデータとポリシーファイルを持つ。maTrixの組織構造は、それぞれの木構造がidを用いた参照を行うことで表現される。また、maTrixは過去のアクセス要求を全て保存する。アクセス要求は当時の組織構造を参照しているため、過去の組織構造にアクセス可能にするため、組織構造は版管理されている。 + ポリシーファイルは、データに対するアクセス要求が許可されるか否認されるかを判断するためのルールを誰が(Target)、何を(Resource)、どうできるか(Action)の3つの要素で記述されている。maTrixはアクセス要求に応じたポリシーファイルを参照することで許認可の判断を行う。 ポリシーファイルは組織構造中の人や役職をidを用いて参照している。つまり、ポリシーファイルを用いて許認可を下すためには、その人がどこの組織に所属して、その役割がどの権限を持っているかを返す検索が必要になる。 本章ではmaTrixをJungle上に実装する際の問題点、解法について記述する。 @@ -12,30 +13,32 @@ \begin{figure}[h] \begin{center} -\includegraphics[height = 7cm , bb=0 0 398 367]{images/TreePersonJungle.pdf} +\includegraphics[height = 7cm , bb=0 0 820 817]{images/TreePersonJungle.pdf} \caption{Jungle上での人物Treeの表現例} \label{fig:PersonTree} \end{center} \end{figure} -図\ref{fig:PersonTree}の人物TreeにはmaTrixで使用される人のデータが記述されている。 -属性名 element 属性値 Personsのデータを持つNode1の子ノードである、Node2、Node3に人物のデータが格納されている。 -Node2は属性名 element、属性値 Personを持っている。これはこのNodeが人物のデータを持っていることを表す。 -属性名 Person-id、属性値 p:1 はこのノードに記述された人物のmaTrix上でのIDを表す。 -他の役職、役割、権限といった木構造はこのIDを用いて参照を行うことで組織構造を構築する。 -Node2、Node3は子ノードに人物の名前、参照する役割等、Idのデータを持つが、今回は省略している。 +図\ref{fig:PersonTree}の人物Treeには、maTrixで使用される人物のデータが記述されている。 +属性名 element 属性値 Personsのデータを持つNode1は、人物Treeのルートノードである。このノードの下に各人物のデータが格納されている(図\ref{fig:PersonTree}ではNode2、Node3が該当する)。 +Node2、Node3が持つ、属性名 element、属性値 Personの値は、Node2、Node3が人物のデータを持っていることを表す。 +またNode2が持つ、属性名 Person-id、属性値 p:1 はこのノードに記述された人物のmaTrix上でのIDを表す。 +他の役職、役割、権限といった木構造は、このIDを用いて参照を行うことで組織構造を構築する。 +Node2、Node3は子ノードに人物の名前、参照する他の木構造のId等のデータを持つが、今回は省略している。 また、maTrixは自身のデータをXML形式で書き出すことが可能である。書き出したデータをJungleに格納するために汎用XMLReaderの実装も行った。 \subsection{Indexの実装} % Jungleに含まれる複数の木のノードを相互参照したい % 木のノードにIDを割ふってIndexを用いて参照する -Jungle上でのmaTrixの組織構造の表現は、木のNodeにIdを割り振ってIndexを用いた参照で表現する。 -しかし、JungleにはIndexが無かったため実装を行った。 -Jungleは過去の版の木構造を全て保持しているため、全ての版に独立したIndexが必要となる。 -そのため、Indexを破壊すること無く更新する必要があった。 +Jungle上でのmaTrixの組織構造の表現は、木のノードにIdを割り振ってIndexを用いた参照で表現する。 +しかし、JungleにはIndexが無かったため、実装を行った。 +Jungleは、非破壊的木構造とういデータ構造上、過去の版の木構造を全て保持しているため、全ての版に独立したIndexが必要となる。 +そのため、前の版のIndexを破壊すること無く、Indexを更新する必要があった。 +既存のTreeMapでは、一度Indexの複製を行った後更新する必要があったため、Indexの更新オーダーがO(n)となっていた。 よって、非破壊TreeMapを自作し、それを用いてIndexの実装を行った。 -このTreeMapは、データの更新を行った際、前の版と最大限データを共有した新しいTreeMapを作成する。 +このTreeMapは、Jungleと同じようにルートから変更を加えたノードまでの経路の複製を行い、データの更新を行った際、前の版と最大限データを共有した新しいTreeMapを作成する。 +Jungleとの違いは、木の回転処理が入ることである。 これにより複数の版全てに対応したIndexをサポートすることが可能になった。 以下にJungleにおけるIndexの型を記述する @@ -51,14 +54,14 @@ \subsection{検索APIの実装} Indexを実装したことにより、Idを用いた組織構造の表現は可能になった。 -しかし、組織構造に対する問い合わせを行うための検索APIが実装されていなかったため、属性名:属性値で検索を行うAPIの実装をlambda式を用いて行った。 +しかし、組織構造に対する問い合わせを行うための検索APIが実装されていなかったため、属性名 key 属性値 valueの組で検索を行うAPIの実装を、木の走査を行うTraverserクラス内に、lambda式を用いて行った。 以下に検索を行う関数findの定義を記述する。 \begin{lstlisting}[frame=lrbt,label=query,numbers=left] public Iterator<TreeNode> find(Query query, String key, String searchValue); \end{lstlisting} -find関数は引数にQuery、String key、String valueの3つの引数を取り、条件に一致したNodeのIteratorを返す。 +find関数は引数に、Query query、String key、String valueの3つの引数を取り、条件に一致したノードのIteratorインタフェースを返す。 第1引数には、探索の条件を記述する関数boolean comdition(TreeNode)を定義したInterface Queryを。 第2、第3引数の、String key、String valueはIndexを用いた絞込みに使用する。find関数の使用例を以下に記す @@ -71,48 +74,48 @@ node.getAttributes().getString("Personid"); if (personId == null) return false; - if (personId.equals("p:4")) + if (personId.equals("p:2")) return true; return false; - }, "element", "person"); + }, "element", "Person"); \end{lstlisting} 上記コードについて解説する。 \begin{enumerate} -\item Treeの走査を行うTraverserを取得する。 +\item 木の走査を行うTraverserクラスを取得する。 -\item Indexからfindの第2、第3引数である、element、personの組のデータを持つNodeを取得する。 +\item Indexからfindの第2、第3引数である、属性名 element、属性値 Personの組のデータを持つNodeを取得する。 -\item 2で取得したNodeを第1引数のQueryに渡す。 +\item (2)で取得したノードを第1引数のQueryに渡す。 -\item 引数のノードからgetAttributes().getString("Personid")で属性名がPersonidの属性値を取得する。 +\item 引数のノードから関数getAttributes().getString("Personid")で属性名 Personidとペアになっている属性値を取得する。 -\item 属性値がnullだった場合、このNodeには属性名がPersonidの組のデータは存在しないのでfalseを返し次のNodeの評価を行う。 +\item 属性値がnullだった場合、このNodeには属性名がPersonidの組のデータは存在しないので、falseを返し次のNodeの評価を行う。 -\item 属性値がnullでなかった場合、p:4と一致するかどうかを調べ結果を返す。 +\item 属性値がnullでなかった場合、p:2と一致するかどうかを調べ結果を返す。 \end{enumerate} -findはQueryと条件が一致したNodeのIteratorを返す。 +図\ref{fig:PersonTree}の人物Treeに対して、上記の検索を行うとNode3が取得できる。 \subsection{Nodeの親をたどるIndex} -maTrixがJungleに検索を行う際に親をたどる処理が必要になったが、Jungleは親から子への単一リンクしか持っていなかった。 -しかし、Jungleは非破壊という性質上、子に親への参照をもたせることが難しいため、Nodeを渡すと親Nodeを返すParentIndexを実装した。 - +maTrixがJungleに検索を行う際、親をたどる処理が必要になったが、Jungleは親から子への単一リンクしか持っていなかった。 +しかし、Jungleは非破壊という性質上、子に親への参照をもたせることが難しいため、ノードを渡すと親ノードを返すParentIndexを実装した。 +ParentIndexを実装したことで、非破壊という性質を保持しつつ親への参照を可能にした。 -% \subsection{性能測定} -% maTrixの実装後、Jungleに実用的な性能があるか確かめるために測定を行った。 -% 比較対象にはMongoDBを選択した。 -% 図\ref{fig:compare}はmongoDBとJungleの速度比較のグラフである。 -% 比較は10000人分のデータに対するアクセスの処理時間で行い、mongoDBへのアクセスはjsを用いて行った。 -% \begin{figure}[h] -% \begin{center} -% \includegraphics[height = 5cm , bb=0 0 360 252]{images/mongoJungleperfomance.pdf} -% \caption{mongoDBとの比較} -% \label{fig:compare} -% \end{center} -% \end{figure} +\subsection{性能測定} +maTrixの実装後、Jungleに実用的な性能があるか確かめるために測定を行った。 +比較対象にはMongoDBを選択した。 +図\ref{fig:compare}はmongoDBとJungleの速度比較のグラフである。 +比較は10000人分のデータに対するアクセスの処理時間で行い、mongoDBへのアクセスはjsを用いて行った。 +\begin{figure}[h] +\begin{center} +\includegraphics[height = 5cm , bb=0 0 360 252]{images/mongoJungleperfomance.pdf} +\caption{mongoDBとの比較} +\label{fig:compare} +\end{center} +\end{figure} -% Jungleは、mongodbの約500倍の性能が出ている。 -% その理由として、mongoDBがmmapを用いてディスクのデータにアクセスしているのに対し、Jungleは全てのデータがメモリ上にあること。 -% また、mongoDBは通信を介してアクセスされるが、Jungleは通信を介さないためだと考えられる。 +Jungleは、mongodbの約500倍の性能が出ている。 +その理由として、mongoDBがmmapを用いてディスクのデータにアクセスしているのに対し、Jungleは全てのデータがメモリ上にあること。 +また、mongoDBは通信を介してアクセスされるが、Jungleは通信を介さないためだと考えられる。
--- a/renderingEngine.tex Mon Nov 28 19:57:14 2016 +0900 +++ b/renderingEngine.tex Tue Nov 29 17:31:07 2016 +0900 @@ -1,18 +1,15 @@ \section{HtmlRenderingEngine} - -% 前章でJungleに実用データベースたる性能があることが分かったので、実際に - -次にJungle上に例題アプリケーションとしてHtmlRenderingEngineの開発を行った。 -HtmlRenderingEngineは、出力するデータが記述されたContens tTree、出力する形式が記述されたLayout Treeの2つの木構造を持ち、これらを参照しながらhtmlのRenderingを行う。 -本章ではRenderingEngineの実装と発生した問題、解法について解説する。 -またRenderingする例題はDiaryを選択した。 +前章でJungle上にmaTrixを実装し、性能評価を行うことで、Jungleに実用データベースたる表現力、性能があることが確認できた。 +本章ではにJungle上に例題アプリケーションとしてHtmlRenderingEngineの開発を行い、その際に発生した問題、解法について解説する。 +HtmlRenderingEngineは、出力するデータが記述されたContents Tree、出力する形式が記述されたLayout Treeの2つの木構造を持ち、これらを参照しながらhtmlのレンダリングを行う。 +またレンダリングする例題は日記を選択した。 \subsection{Contents TreeのJungle上での表現} RenderingEngineではContents Treeに図\ref{contentTree}のように出力するデータを格納した。 \begin{figure}[h] \begin{center} -\includegraphics[height = 6cm , bb=0 0 682 533]{images/contentTree.pdf} +\includegraphics[height = 6cm , bb=0 0 830 643]{images/contentTree.pdf} \caption{ContentTree} \label{contentTree} \end{center} @@ -20,15 +17,16 @@ RootNodeはContentのtitle、日時、Renderingする時に参照するLayout名を持つ。 -そして子ノードがContentの本文等のデータを持つ。 -表\ref{NodeAttribute}にNodeが保持しているデータの一覧を記述する。 +そして子ノードがContentsの本文等のデータを持つ。 +表\ref{NodeAttribute}にNodeが保持しているContentsの一覧を記述する。 \begin{table}[htb] \begin{center} - \caption{Nodeが保持しているデータ一覧} + \caption{ノードが保持しているContents一覧} \begin{tabular}{|c|c|} \hline - title & diaryのタイトル \\ \hline - date(rootNode) & diaryの日時 \\ \hline + 属性名 & 属性値 \\ \hline + title & 日記のタイトル \\ \hline + date(rootNode) & 日記の日時 \\ \hline type & そのノードが保持しているContextType \\ & text(日記本文) or image(画像データ) \\ \hline date(image) & 画像の保存日時 \\ \hline @@ -38,62 +36,74 @@ \end{center} \end{table} -\newpage \subsection{Layout} -htmlの出力形式を定義するLayoutは複数のComponentからなる。 +htmlの出力形式を定義するLayoutは、複数のComponentからなる。 +表\ref{LayoutTreeTable}に、LayoutTreeの主要要素を記す。 Layout Treeには図\ref{layoutTree}のようにデータを格納した。 +また、LayoutTreeはノード同士がNodeNameを用いて参照を行う。 -\begin{figure}[h] +\begin{figure}[hH] \begin{center} -\includegraphics[height = 9cm , bb=0 0 750 941]{images/LayoutTree.pdf} +\includegraphics[height = 6cm , bb=0 0 913 768]{images/LayoutTree.pdf} \caption{LayoutTree} \label{layoutTree} \end{center} \end{figure} -図\ref{layoutTree}より、Layout Treeは、属性名 NodeName 属性値 displayinformationの組で値を持つNode1の子に、Node2、Node3といった複数のComponentを保持する。 -Node2は、属性名 displayComponentName、属性値 dialy@Componentの組を持つため、それの値を持つNode、つまりNode3へ単一的な参照を行っている。 -Node3は、"use" = "text"のペアでタグを保持しているため、Contents Treeの日記の本文に対応する記述が行ってあることがわかる。 + +\begin{table}[htbH] +\begin{center} +\caption{LayoutTreeの主要な要素} +\begin{tabular}{|l|l|} \hline +属性名 & 属性値 \\ \hline +NodeName &ノードの名前。 \\ + &ノード同士の参照時に用いられる。\\ \hline +displayComponent &参照するノードの名前。 \\ +Name &この属性名で取得できる値を持つ \\ + &NodeNameを持つノードを参照する。\\ \hline +use &このノードが、どのContentsに \\ + &対してのLayoutを持つかを。 \\ + &記述するタグ。表\ref{tag}に\\ + &タグとContentsの対応を記述する。\\ \hline +その他 &css等と同じ様な記述を行う。 \\ + &例 属性名 font \\ + & 属性値 fontSize \\ + &など \\ \hline +\end{tabular} +\label{LayoutTreeTable} +\end{center} +\end{table} + + +Layout Treeは、ルートノードに属性名 NodeName 属性値 displayinformation の値を持つ(図\ref{layoutTree}ではNode1が該当する)。 +ルートノードは、子ノードに複数のComponentを保持する(図\ref{layoutTree}ではNode2、Node3がそれに該当する)。 +Node2は、"use" = "image"のペアでタグを保持しているため、Contents Treeの日記の画像表示に対応する記述が行われている。 +Node3は、"use" = "text"のペアでタグを保持しているため、Contents Treeの日記の本文に対応する記述が行われている。 表\ref{tag}にタグとContentsの対応を記述する。 \begin{table}[htb] - \begin{center} - \caption{tagとcontentsの対応} - \begin{tabular}{|c|c|} \hline - tag & content \\ \hline - image & 画像の表示 \\ \hline - cals & table \\ \hline - date & 日付の表示 \\ \hline - text & 日記の本文 \\ \hline - title & 日記のタイトル \\ \hline - \end{tabular} - \label{tag} - \end{center} +\begin{center} +\caption{tagとcontentsの対応} +\begin{tabular}{|c|c|} \hline +tag & content \\ \hline +image & 画像の表示 \\ \hline +cals & table \\ \hline +date & 日付の表示 \\ \hline +text & 日記の本文 \\ \hline +title & 日記のタイトル \\ \hline +\end{tabular} +\label{tag} +\end{center} \end{table} -以下に図\ref{contentTree}のContentsTree、図\ref{layoutTree}のLayoutTreeの2つを使用した、レンダリングの流れを記述する。 -\begin{enumerate} -\item ContentTreeのRootNodeに属性名 component 属性値 sample@Componentの組を持つため、今回はsample@Componentのルールに則ってレンダリングすることがわかる。 -\item ContentTreeは、属性名 component 属性値 sample@Componentの組を持つNode、つまりNode2を参照する。 - -\item Node2は属性名 displayComponentName 属性名 dialyText@Componentを持つため、Node3を参照する。 - -\item Node3は属性名 use 属性値 textを持つため、Node3にはtextをレンダリングする際のルールが書かれていることがわかる。 - -\item レンダリングエンジンはNode3に記述されているルールに則ってhtmlを生成する。 - -\end{enumerate} - -今回の例では、Component同士の参照を記述するためにNode2を追加しているが、本来は意味のないNodeであるため省略される。 \newpage -layoutが複数のComponentを参照する際は図\ref{multiComponent}のような木構造を構築する。 - +layoutが複数のComponentを参照する際は図\ref{multiComponent}のような木構造を構築する(この木はLayoutTreeの一部であり、本来は参照先のノード等が存在している)。 \begin{figure}[h] \begin{center} -\includegraphics[height = 6cm , bb=0 0 749 559]{images/multiComponent.pdf} +\includegraphics[height = 8cm , bb=0 0 913 1105]{images/multiComponent.pdf} \caption{複数のComponentを参照するLayout} \label{multiComponent} \end{center} @@ -101,6 +111,28 @@ 図\ref{multiComponent}の例では、diaryMulti@componentはdiaryText@componentとdiaryImage@componentを参照している。 +以下に図\ref{contentTree}のContentsTree、図\ref{multiComponent}のLayoutTreeの2つを使用した、レンダリングの流れを記述する。 +\begin{enumerate} +\item ContentsTreeのルートノードは、属性名 component 属性値 Multi@Componentの組を持つ。よって今回はLayoutTreeの、NodeNameがMulti@Componentのノードに記述されたルールに則ってレンダリングを行う。 + +\item ContentTreeは、属性名 NodeName 属性値 Multi@Componentの組を持つノード、つまりNode2を参照する。 + +\item Node2はこれ以上データを持たないので、子ノードであるNode3、Node4に記述されているデータの参照を行う。 + +\item Node3は属性名 displayComponentName 属性名 dialyImage@Componentの組を持つため、NodeNameがdialyImage@Componentのノードを参照する。 + +\item レンダリングエンジンは、参照先のノードに記述されたルールに則ってHtmlを生成する。 + +\item Node3は、これ以上データを持たないため、次はNode4を参照する。 + +\item Node4は属性名 displayComponentName 属性名 dialyText@Componentの組を持つため、NodeNameがdialyText@Componentのノードを参照する。 + +\item レンダリングエンジンは、参照先のノードに記述されているルールに則ってhtmlを生成する。 + +\end{enumerate} + +(4)、(7)で参照しているノードに関しては、図\ref{layoutTree}のNode2、Node3の様な記述が行われている。 + \subsection{Layout Treeのデータ設計} Jungleは汎用の木構造を持つので、データベースを特に設計しなくても、あるがままの形で格納することが可能である。 しかし、設計を行うことでより効率的に木構造を扱うことが可能になる。 @@ -124,13 +156,13 @@ \end{figure} -図\ref{goodLayoutTree}のTreeは、1つのNodeにRenderingに必要な値が全て格納されている。 -そのため、Renderingを行う際、複数のNodeをまたぐ必要が無く、簡潔にコードを書くことができる。 +図\ref{goodLayoutTree}は、1つのノードにレンダリングに必要な値が全て格納されている。 +そのため、レンダリングを行う際、複数のノードをまたぐ必要が無く、簡潔にコードを書くことができる。 -一方、図\ref{badLayoutTree}のTreeはRenderingする際に必要な値が複数Nodeに分散されて保存されている。 -そのため、全てのNodeを参照し、値を集める処理を行う必要があり、コードの可読性が下がり余計な処理も増えてしまった。 +一方、図\ref{badLayoutTree}はレンダリングする際に、必要な値が複数のノードに分散されて保存されている。 +そのため、全てのノードを参照し、値を集める処理を行う必要があり、コードの可読性が下がり余計な処理も増えてしまった。 \subsection{性能評価} @@ -141,15 +173,15 @@ これより、設計を行った木の方が高速にRenderingを行えている。 \begin{table}[htb] - \begin{center} - \caption{性能評価} - \begin{tabular}{|c|c|} \hline - 使用した木 & 処理時間 \\ \hline - 設計を行った木 & 249s \\ \hline - 設計を行わなかった木 & 277s \\ \hline - \end{tabular} - \label{BenchMark} - \end{center} +\begin{center} +\caption{性能評価} +\begin{tabular}{|c|c|} \hline +使用した木 & 処理時間 \\ \hline +設計を行った木 & 249s \\ \hline +設計を行わなかった木 & 277s \\ \hline +\end{tabular} +\label{BenchMark} +\end{center} \end{table} %\begin{figure}[h] @@ -160,4 +192,5 @@ %\end{flushleft} %\end{figure} -測定結果より、Jungleデータベースはデータの設計を行うこと無く格納可能だが、設計を行ったほうがプログラム内のデータ構造とギャップがなく、高速に動作するプログラムを簡潔に記述できるようになる事がわかる。 +測定結果より、Jungleデータベースはデータの設計を行うこと無く格納可能だが、設計を行ったほうがプログラム内のデータ構造とギャップがなく、高速に動作するプログラムを簡潔に記述できるようになる。 +しかし、\ref{mulitLayoutTree}のように複数のノードを用いることで簡潔にコードを記述できる例もあるので、コードの簡潔さと速度を両立した設計を行う必要がある。
--- a/summary.tex Mon Nov 28 19:57:14 2016 +0900 +++ b/summary.tex Tue Nov 29 17:31:07 2016 +0900 @@ -1,13 +1,20 @@ \section{まとめ} 本研究では非破壊データベースJungleにJungleTreeブラウザ、許認可管理アプリケーションmaTrix、HtmlRenderingEngineの3つを実装した。 + JungleTreeブラウザを実装したことにより、ブラウザから木構造の確認、編集が行えるようになった。 -次に、Jungle上に許認可管理アプリケーションmaTrixの実装を行い、Jungleに実用データベースとしての表現力、機能の十分性、実用的な性能があるか実証実験を行った。 + +許認可管理アプリケーションmaTrixの実装を通して、Jungleに実用データベースとしての表現力、機能の十分性、実用的な性能があるか実証実験を行った。 maTrixは複数の木がお互いにIdを用いた参照を行い組織構造を表現していたが、JungleではIndexを用いた参照で表現した。 また、測定の結果mongoDBの約500倍高速に動作した。 これはJungleがon memoryなのに対し、MongoDBはmmapを用いてデータにアクセスしているからである。 maTrixの実装により、Jungleは、実用アプリケーションを実装できるほどの表現力、機能、性能があることを証明できた。 -最後にJungleを使った例題アプリケーションとしてRenderingEngineの実装を行った。 + +最後に、Jungleを使った例題アプリケーションとしてRenderingEngineの実装を行った。 その際Jungleのデータ構造でプログラムの処理量、コードの可読性が異なることがわかった。 性能測定では、データ設計を行った木構造を利用したほうが高速に動作した。 -今後の課題として、Jungleは汎用の木構造を持ち、設計を行わずに木構造を格納することが可能だが、最適なデータ構造にすることでさらなる性能の向上が見込むことができる。 -よってJungleの木の設計手法を確立させる必要がある。 +これはノードをたどる必要が無いからである。 +しかし、単純に1つのノードにデータを記述するとコードの可読性が落ちてしまうこともあるため、可読性と速度を両立できる設計手法を確立する必要があることがわかった。 + +JungleはRDBと異なり格納するデータの自由度は大きい。 +なので、どのようなデータ構造も設計なしに格納できるが、パフォーマンスを出すためには、データを最適化する必要がある。 +よってJungleの設計手法を確立させる必要がある。