Mercurial > hg > Papers > 2009 > pin-gn
changeset 2:4742b1e4da3a default tip
modify merge,
and remove eclipse, debug
author | one |
---|---|
date | Thu, 19 Feb 2009 01:26:01 +0900 |
parents | 78a12584e841 |
children | |
files | bibliography.tex comparison.tex conclusion.tex figure/sort_command.bb figure/sort_command.graffle figure/sort_command.pdf figure/undo_command.bb figure/undo_command.graffle figure/undo_command.pdf introduction.tex merger.tex pin_gn.tex rep.tex |
diffstat | 13 files changed, 1450 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/bibliography.tex Wed Feb 18 23:02:19 2009 +0900 +++ b/bibliography.tex Thu Feb 19 01:26:01 2009 +0900 @@ -34,9 +34,9 @@ May, 1999. \bibitem{bib:soba} ``SOBA Project'', http://www.soba-project.com/. - \bibitem{bib:xp} - 日本XPユーザグループ関西支部, 長瀬嘉秀. ``eXtreme Programming'' - September, 2002. +% \bibitem{bib:xp} +% 日本XPユーザグループ関西支部, 長瀬嘉秀. ``eXtreme Programming'' +% September, 2002. \bibitem{bib:group_kit} Mark Roseman and Saul Greenberg. ``Building Real Time Groupware with GroupKit, A Groupware Toolkit''. 1996.
--- a/comparison.tex Wed Feb 18 23:02:19 2009 +0900 +++ b/comparison.tex Thu Feb 19 01:26:01 2009 +0900 @@ -10,7 +10,7 @@ SOBA プロジェクトは京都大学を中心とする産学官共同によるグループウェアの研究プ ロジェクトである。SOBA とは、Session Oriented Broadband Applications の略で、複数 のユーザが多様なメディア (映像、音声、アプリ画面やテキストなどのデータ) 情報を共 -有、享受することができる P2P 型ネットワークアプリケーションである\ref{bib:soba}。 +有、享受することができる P2P 型ネットワークアプリケーションである\cite{bib:soba}。 SOBAプロジェクトがフレームワークを提供しているのに対し、REPはプロトコルを提案している。 REP がプロトコルであることの利点として、様々な既存のアプリケーションに対して REP 実装することにより、そのアプリケーションのリモートエディタ化が可能であり、リモートエディタを使用するユーザの慣れ親しんだ環境でテキストの編集作業を行うことができる。
--- a/conclusion.tex Wed Feb 18 23:02:19 2009 +0900 +++ b/conclusion.tex Thu Feb 19 01:26:01 2009 +0900 @@ -3,11 +3,12 @@ また、以前のマージアルゴリズムは1対1の通信に対応したアルゴリズムだったため、新たに多対多の通信に対応したマージアルゴリズムを提案した。 -以前のプロトコルではマージの処理をエディタ側で行っていた。しかし、マージの処理はREPのプロトコルにおいて共通の機能であるため、Session Manager側へ実装することが望ましい。 +%以前のプロトコルではマージの処理をエディタ側で行っていた。 +この、マージの処理はREPのプロトコルにおいて共通の機能であるため、Session Manager側へ実装することが望ましい。 しかし、マージの処理をSession Manager上で行なうと、マージコマンドとエディタコマンドとの間に衝突が起こる可能性がある。 マージの処理をしている最中にユーザが入力する可能性があるためである。 この問題を解決するために、リマージコマンドの生成のアルゴリズムを提案し、実装した。 -Eclipseへの実装の変更も行い、ソースコードの可搬性を高め、また、Eclipseを使用することの利点である、メソッド補完機能やリファクタリング機能の使用を可能にした。 - -また、デバッグツールとして、Network SimulatorやJava版簡易エディタなどの導入を行い、接続シーケンスやマージプログラムのデバッグに利用した。 \ No newline at end of file +%Eclipseへの実装の変更も行い、ソースコードの可搬性を高め、また、Eclipseを使用することの利点である、メソッド補完機能やリファクタリング機能の使用を可能にした。 +% +%また、デバッグツールとして、Network SimulatorやJava版簡易エディタなどの導入を行い、接続シーケンスやマージプログラムのデバッグに利用した。 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/sort_command.bb Thu Feb 19 01:26:01 2009 +0900 @@ -0,0 +1,5 @@ +%%Title: ./sort_command.pdf +%%Creator: ebb Version 0.5.2 +%%BoundingBox: 0 0 475 294 +%%CreationDate: Wed Feb 18 23:59:10 2009 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/sort_command.graffle Thu Feb 19 01:26:01 2009 +0900 @@ -0,0 +1,721 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CanvasColor</key> + <dict> + <key>w</key> + <string>1</string> + </dict> + <key>ColumnAlign</key> + <integer>1</integer> + <key>ColumnSpacing</key> + <real>36</real> + <key>CreationDate</key> + <string>2009-02-18 23:41:30 +0900</string> + <key>Creator</key> + <string>宮城 健太</string> + <key>GraphDocumentVersion</key> + <integer>4</integer> + <key>GraphicsList</key> + <array> + <dict> + <key>Bounds</key> + <string>{{239.346, 282.152}, {95, 18}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>ID</key> + <integer>33</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 \'8c\'8b\'89\'ca\'82\'cd\'88\'ea\'92\'76\'82\'b7\'82\'e9}</string> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{391.299, 187.677}, {38, 87.8612}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>32</integer> + <key>Rotation</key> + <real>32</real> + <key>Shape</key> + <string>VerticalArrow</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{308.28, 204.215}, {108, 18}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>ID</key> + <integer>31</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 line +\f1 \'82\'c6eid\'82\'c5\'83\'5c\'81\'5b\'83\'67}</string> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{168, 204.215}, {108, 18}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>ID</key> + <integer>30</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs24 \cf0 line +\f1 \'82\'c6eid\'82\'c5\'83\'5c\'81\'5b\'83\'67}</string> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{227.846, 310.305}, {118, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>29</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 insert(),eid=3,line=2\ +insert(),eid=1,line=1\ +insert(),eid=2,line=1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{267.846, 191.215}, {38, 80.785}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>28</integer> + <key>Shape</key> + <string>VerticalArrow</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{143.924, 187.392}, {38, 87.8612}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>27</integer> + <key>Rotation</key> + <real>327</real> + <key>Shape</key> + <string>VerticalArrow</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{419.213, 102.125}, {53, 14}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>ID</key> + <integer>26</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 Editor:3}</string> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{260.346, 102.125}, {53, 14}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>ID</key> + <integer>25</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 Editor:2}</string> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{101.48, 102.125}, {53, 14}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>ID</key> + <integer>24</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 Editor:1}</string> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{227.846, 124.128}, {118, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>23</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 insert(),eid=2,line=1\ +insert(),eid=1,line=1\ +insert(),eid=3,line=2}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{386.713, 124.128}, {118, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>22</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 insert(),eid=3,line=2\ +insert(),eid=2,line=1\ +insert(),eid=1,line=1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{68.98, 124.128}, {118, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>21</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 insert(),eid=1,line=1\ +insert(),eid=3,line=2\ +insert(),eid=2,line=1}</string> + </dict> + </dict> + </array> + <key>GridInfo</key> + <dict> + <key>GridSpacing</key> + <real>14.17322826385498</real> + <key>MajorGridSpacing</key> + <integer>10</integer> + </dict> + <key>GuidesLocked</key> + <string>NO</string> + <key>GuidesVisible</key> + <string>YES</string> + <key>HPages</key> + <integer>1</integer> + <key>ImageCounter</key> + <integer>1</integer> + <key>IsPalette</key> + <string>NO</string> + <key>Layers</key> + <array> + <dict> + <key>Lock</key> + <string>NO</string> + <key>Name</key> + <string>Layer 1</string> + <key>Print</key> + <string>YES</string> + <key>View</key> + <string>YES</string> + </dict> + </array> + <key>LayoutInfo</key> + <dict> + <key>ChildOrdering</key> + <integer>0</integer> + </dict> + <key>LinksVisible</key> + <string>NO</string> + <key>MagnetsVisible</key> + <string>NO</string> + <key>ModificationDate</key> + <string>2009-02-18 23:46:05 +0900</string> + <key>Modifier</key> + <string>宮城 健太</string> + <key>Orientation</key> + <integer>2</integer> + <key>PageBreaks</key> + <string>YES</string> + <key>PageSetup</key> + <data> + BAt0eXBlZHN0cmVhbYED6IQBQISEhAtOU1ByaW50SW5mbwGEhAhOU09iamVjdACFkoSE + hBNOU011dGFibGVEaWN0aW9uYXJ5AISEDE5TRGljdGlvbmFyeQCUhAFpFpKEhIQITlNT + dHJpbmcBlIQBKxROU1ZlcnRpY2FsUGFnaW5hdGlvboaShISECE5TTnVtYmVyAISEB05T + VmFsdWUAlIQBKoSXlwCGkoSZmRlOU1ByaW50UmV2ZXJzZU9yaWVudGF0aW9uhpKakoSZ + mRZOU0hvcml6b250YWxseUNlbnRlcmVkhpKEm5ydlwGGkoSZmQhOU0NvcGllc4aSoJKE + mZkUTlNWZXJ0aWNhbGx5Q2VudGVyZWSGkqCShJmZC05TRmlyc3RQYWdlhpKgkoSZmQ9O + U1NjYWxpbmdGYWN0b3KGkoSbnISEAWSdAYaShJmZDU5TSm9iRmVhdHVyZXOGkoSWlwCG + koSZmQtOU1RvcE1hcmdpboaShJucpp0AhpKEmZkQTlNKb2JEaXNwb3NpdGlvboaShJmZ + D05TUHJpbnRTcG9vbEpvYoaShJmZD05TUGFnZXNQZXJTaGVldIaSoJKEmZkPTlNQcmlu + dEFsbFBhZ2VzhpKakoSZmQ5OU0JvdHRvbU1hcmdpboaShJucpp0AhpKEmZkKTlNMYXN0 + UGFnZYaShJucnZeCf////4aShJmZDU5TT3JpZW50YXRpb26GkpqShJmZFU5TSG9yaXpv + bmFsUGFnaW5hdGlvboaSmpKEmZkNTlNSaWdodE1hcmdpboaShJucpp0AhpKEmZkMTlNM + ZWZ0TWFyZ2luhpKEm5ymnQCGkoSZmQtOU1BhcGVyTmFtZYaShJmZBmlzby1hNIaShJmZ + Dk5TUE1QYWdlRm9ybWF0hpKEhIQNTlNNdXRhYmxlRGF0YQCEhAZOU0RhdGEAlJeBFSeE + B1s1NDE1Y108P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURP + Q1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJo + dHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBs + aXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFn + ZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFw + cGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUu + am9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0 + ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBs + ZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+ + NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFn + PC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJh + eT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Pcmll + bnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0 + LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmlu + Zz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJ + PGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3Jt + YXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJ + CTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxp + bnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJ + PGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCTxk + aWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJ + PHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBw + bGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+ + CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5 + PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGlj + dD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZv + cm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5w + cmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRp + Y2tldDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJy + YXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJp + bnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVh + bD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4K + CQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9k + aWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2Nh + bGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNy + ZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4K + CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFy + cmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQu + UE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5 + PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdl + cj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+ + Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZvX3RpY2tldDwva2V5PgoJ + PGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVk + UGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlj + a2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9z + dHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tl + eT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQu + UGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJ + CQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8 + cmVhbD43ODM8L3JlYWw+CgkJCQkJCTxyZWFsPjU1OTwvcmVhbD4KCQkJCQk8L2FycmF5 + PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4K + CQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJ + CTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0 + ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQu + dGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0 + PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8 + L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJp + bnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJCQkJPGFycmF5 + PgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJ + CQkJPHJlYWw+ODI0PC9yZWFsPgoJCQkJCQk8cmVhbD41Nzc8L3JlYWw+CgkJCQkJPC9h + cnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9r + ZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJh + eT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFw + ZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3Ry + aW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+ + CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBh + cGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc+aXNvLWE0PC9zdHJp + bmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5 + PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+ + CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRq + dXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmlu + dC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNr + ZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJh + eTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5w + cmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJy + YXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJ + CQkJCQk8cmVhbD43ODM8L3JlYWw+CgkJCQkJCTxyZWFsPjU1OTwvcmVhbD4KCQkJCQk8 + L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8 + L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2Fy + cmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1V + bmFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxl + LnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpv + YnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRl + bUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFw + cGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJ + CQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9y + ZWFsPgoJCQkJCQk8cmVhbD44MjQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NzwvcmVhbD4K + CQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0 + ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJ + CQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlcklu + Zm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxl + LnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpv + YnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRl + bUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFw + cGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3Ry + aW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0 + YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+ + CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5BUElWZXJzaW9uPC9rZXk+CgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk+ + Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+CgkJPHN0cmluZz5jb20uYXBw + bGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc+Cgk8L2RpY3Q+Cgk8a2V5PmNv + bS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4y + MDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4K + CTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4K + PC9kaWN0Pgo8L3BsaXN0PgqGkoSZmQtOU1BhcGVyU2l6ZYaShJychIQMe19OU1NpemU9 + ZmZ9oYECU4EDSoaShJmZEk5TUmV2ZXJzZVBhZ2VPcmRlcoaSmoaG + </data> + <key>ReadOnly</key> + <string>NO</string> + <key>RowAlign</key> + <integer>1</integer> + <key>RowSpacing</key> + <real>36</real> + <key>SheetTitle</key> + <string>Canvas 1</string> + <key>SmartAlignmentGuidesActive</key> + <string>YES</string> + <key>SmartDistanceGuidesActive</key> + <string>YES</string> + <key>UseEntirePage</key> + <true/> + <key>VPages</key> + <integer>1</integer> + <key>WindowInfo</key> + <dict> + <key>CurrentSheet</key> + <string>0</string> + <key>Frame</key> + <string>{{60, 57}, {574, 881}}</string> + <key>ShowRuler</key> + <false/> + <key>ShowStatusBar</key> + <true/> + <key>VisibleRegion</key> + <string>{{0, 0}, {559, 783}}</string> + <key>Zoom</key> + <string>1</string> + </dict> +</dict> +</plist>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/undo_command.bb Thu Feb 19 01:26:01 2009 +0900 @@ -0,0 +1,5 @@ +%%Title: ./undo_command.pdf +%%Creator: ebb Version 0.5.2 +%%BoundingBox: 0 0 479 234 +%%CreationDate: Wed Feb 18 23:39:30 2009 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/undo_command.graffle Thu Feb 19 01:26:01 2009 +0900 @@ -0,0 +1,601 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CanvasColor</key> + <dict> + <key>w</key> + <string>1</string> + </dict> + <key>ColumnAlign</key> + <integer>1</integer> + <key>ColumnSpacing</key> + <real>36</real> + <key>CreationDate</key> + <string>2009-02-18 23:24:16 +0900</string> + <key>Creator</key> + <string>宮城 健太</string> + <key>GraphDocumentVersion</key> + <integer>4</integer> + <key>GraphicsList</key> + <array> + <dict> + <key>Bounds</key> + <string>{{426.713, 191.215}, {38, 44}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>60</integer> + <key>Shape</key> + <string>VerticalArrow</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{267.846, 191.215}, {38, 44}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>59</integer> + <key>Shape</key> + <string>VerticalArrow</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{108.98, 191.215}, {38, 44}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>58</integer> + <key>Shape</key> + <string>VerticalArrow</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{227.846, 250.301}, {119.982, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>57</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 delete(),eid=3,line=2\ +delete(),eid=1,line=1\ +delete(),eid=2,line=1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{386.713, 250.301}, {119.982, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>56</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 delete(),eid=1,line=1delete(),eid=2,line=1\ +delete(),eid=3,line=2}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{66.998, 250.301}, {119.982, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>55</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 delete(),eid=2,line=1\ +delete(),eid=3,line=2\ +delete(),eid=1,line=1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{419.213, 102.125}, {53, 14}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>ID</key> + <integer>54</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 Editor:3}</string> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{260.346, 102.125}, {53, 14}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>ID</key> + <integer>53</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 Editor:2}</string> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{101.48, 102.125}, {53, 14}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>ID</key> + <integer>52</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs24 \cf0 Editor:1}</string> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{227.846, 124.128}, {118, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>51</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 insert(),eid=2,line=1\ +insert(),eid=1,line=1\ +insert(),eid=3,line=2}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{386.713, 124.128}, {118, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>50</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 insert(),eid=3,line=2\ +insert(),eid=2,line=1\ +insert(),eid=1,line=1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{68.98, 124.128}, {118, 52}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>49</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>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf430 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 insert(),eid=1,line=1\ +insert(),eid=3,line=2\ +insert(),eid=2,line=1}</string> + </dict> + </dict> + </array> + <key>GridInfo</key> + <dict> + <key>GridSpacing</key> + <real>14.17322826385498</real> + <key>MajorGridSpacing</key> + <integer>10</integer> + </dict> + <key>GuidesLocked</key> + <string>NO</string> + <key>GuidesVisible</key> + <string>YES</string> + <key>HPages</key> + <integer>1</integer> + <key>ImageCounter</key> + <integer>1</integer> + <key>IsPalette</key> + <string>NO</string> + <key>Layers</key> + <array> + <dict> + <key>Lock</key> + <string>NO</string> + <key>Name</key> + <string>Layer 1</string> + <key>Print</key> + <string>YES</string> + <key>View</key> + <string>YES</string> + </dict> + </array> + <key>LayoutInfo</key> + <dict> + <key>ChildOrdering</key> + <integer>0</integer> + </dict> + <key>LinksVisible</key> + <string>NO</string> + <key>MagnetsVisible</key> + <string>NO</string> + <key>ModificationDate</key> + <string>2009-02-18 23:37:51 +0900</string> + <key>Modifier</key> + <string>宮城 健太</string> + <key>Orientation</key> + <integer>2</integer> + <key>PageBreaks</key> + <string>YES</string> + <key>PageSetup</key> + <data> + BAt0eXBlZHN0cmVhbYED6IQBQISEhAtOU1ByaW50SW5mbwGEhAhOU09iamVjdACFkoSE + hBNOU011dGFibGVEaWN0aW9uYXJ5AISEDE5TRGljdGlvbmFyeQCUhAFpFpKEhIQITlNT + dHJpbmcBlIQBKxROU1ZlcnRpY2FsUGFnaW5hdGlvboaShISECE5TTnVtYmVyAISEB05T + VmFsdWUAlIQBKoSXlwCGkoSZmRlOU1ByaW50UmV2ZXJzZU9yaWVudGF0aW9uhpKakoSZ + mRZOU0hvcml6b250YWxseUNlbnRlcmVkhpKEm5ydlwGGkoSZmQhOU0NvcGllc4aSoJKE + mZkUTlNWZXJ0aWNhbGx5Q2VudGVyZWSGkqCShJmZC05TRmlyc3RQYWdlhpKgkoSZmQ9O + U1NjYWxpbmdGYWN0b3KGkoSbnISEAWSdAYaShJmZDU5TSm9iRmVhdHVyZXOGkoSWlwCG + koSZmQtOU1RvcE1hcmdpboaShJucpp0AhpKEmZkQTlNKb2JEaXNwb3NpdGlvboaShJmZ + D05TUHJpbnRTcG9vbEpvYoaShJmZD05TUGFnZXNQZXJTaGVldIaSoJKEmZkPTlNQcmlu + dEFsbFBhZ2VzhpKakoSZmQ5OU0JvdHRvbU1hcmdpboaShJucpp0AhpKEmZkKTlNMYXN0 + UGFnZYaShJucnZeCf////4aShJmZDU5TT3JpZW50YXRpb26GkpqShJmZFU5TSG9yaXpv + bmFsUGFnaW5hdGlvboaSmpKEmZkNTlNSaWdodE1hcmdpboaShJucpp0AhpKEmZkMTlNM + ZWZ0TWFyZ2luhpKEm5ymnQCGkoSZmQtOU1BhcGVyTmFtZYaShJmZBmlzby1hNIaShJmZ + Dk5TUE1QYWdlRm9ybWF0hpKEhIQNTlNNdXRhYmxlRGF0YQCEhAZOU0RhdGEAlJeBFSeE + B1s1NDE1Y108P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURP + Q1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJo + dHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBs + aXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFn + ZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFw + cGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUu + am9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0 + ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBs + ZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+ + NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFn + PC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJh + eT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Pcmll + bnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0 + LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmlu + Zz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJ + PGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3Jt + YXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJ + CTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxp + bnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJ + PGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCTxk + aWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJ + PHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBw + bGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+ + CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5 + PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGlj + dD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZv + cm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5w + cmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRp + Y2tldDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJy + YXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJp + bnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVh + bD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4K + CQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9k + aWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2Nh + bGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNy + ZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4K + CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFy + cmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQu + UE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5 + PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdl + cj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+ + Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZvX3RpY2tldDwva2V5PgoJ + PGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVk + UGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlj + a2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9z + dHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tl + eT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQu + UGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJ + CQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8 + cmVhbD43ODM8L3JlYWw+CgkJCQkJCTxyZWFsPjU1OTwvcmVhbD4KCQkJCQk8L2FycmF5 + PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4K + CQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJ + CTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0 + ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQu + dGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0 + PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8 + L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJp + bnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJCQkJPGFycmF5 + PgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJ + CQkJPHJlYWw+ODI0PC9yZWFsPgoJCQkJCQk8cmVhbD41Nzc8L3JlYWw+CgkJCQkJPC9h + cnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9r + ZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJh + eT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFw + ZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3Ry + aW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+ + CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBh + cGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc+aXNvLWE0PC9zdHJp + bmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5 + PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+ + CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRq + dXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmlu + dC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNr + ZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJh + eTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5w + cmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJy + YXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJ + CQkJCQk8cmVhbD43ODM8L3JlYWw+CgkJCQkJCTxyZWFsPjU1OTwvcmVhbD4KCQkJCQk8 + L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8 + L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2Fy + cmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1V + bmFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxl + LnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpv + YnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRl + bUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFw + cGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJ + CQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9y + ZWFsPgoJCQkJCQk8cmVhbD44MjQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NzwvcmVhbD4K + CQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0 + ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJ + CQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlcklu + Zm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxl + LnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpv + YnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRl + bUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFw + cGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3Ry + aW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0 + YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+ + CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5BUElWZXJzaW9uPC9rZXk+CgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk+ + Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+CgkJPHN0cmluZz5jb20uYXBw + bGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc+Cgk8L2RpY3Q+Cgk8a2V5PmNv + bS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4y + MDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4K + CTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4K + PC9kaWN0Pgo8L3BsaXN0PgqGkoSZmQtOU1BhcGVyU2l6ZYaShJychIQMe19OU1NpemU9 + ZmZ9oYECU4EDSoaShJmZEk5TUmV2ZXJzZVBhZ2VPcmRlcoaSmoaG + </data> + <key>ReadOnly</key> + <string>NO</string> + <key>RowAlign</key> + <integer>1</integer> + <key>RowSpacing</key> + <real>36</real> + <key>SheetTitle</key> + <string>Canvas 1</string> + <key>SmartAlignmentGuidesActive</key> + <string>YES</string> + <key>SmartDistanceGuidesActive</key> + <string>YES</string> + <key>UseEntirePage</key> + <true/> + <key>VPages</key> + <integer>1</integer> + <key>WindowInfo</key> + <dict> + <key>CurrentSheet</key> + <string>0</string> + <key>Frame</key> + <string>{{69, 57}, {574, 881}}</string> + <key>ShowRuler</key> + <false/> + <key>ShowStatusBar</key> + <true/> + <key>VisibleRegion</key> + <string>{{0, 0}, {559, 783}}</string> + <key>Zoom</key> + <string>1</string> + </dict> +</dict> +</plist>
--- a/introduction.tex Wed Feb 18 23:02:19 2009 +0900 +++ b/introduction.tex Thu Feb 19 01:26:01 2009 +0900 @@ -96,8 +96,8 @@ 以前までのマージアルゴリズムは、1対1の通信に対応したアルゴリズムであったため、これを複数人で同時に編集を行うアルゴリズムに変更した。 また、以前のプロトコルではマージの処理をエディタ側で行っていたが、マージの処理はREPのプロトコルにおいて共通の機能であるため、Session Manager側へ実装することが望ましいと考え、Session Managerへ移行した。 -これらのプロトコル改善により、ユーザの入力処理の煩雑さを軽減させた。 -また、REPを実装する際の負荷を軽減し、実装手法の確立を行い、様々なアプリケーションへの実装を促進させることを狙う。 +%これらのプロトコル改善により、ユーザの入力処理の煩雑さを軽減させた。 +%また、REPを実装する際の負荷を軽減し、実装手法の確立を行い、様々なアプリケーションへの実装を促進させることを狙う。 %マージに関しては、初期の巡回トークンを用いた手法、さらにNOPを挿入する手法、ACKを巡回させる手法の三つの手法を実装した。
--- a/merger.tex Wed Feb 18 23:02:19 2009 +0900 +++ b/merger.tex Thu Feb 19 01:26:01 2009 +0900 @@ -35,16 +35,39 @@ しかしエディタには既に、それぞれのエディタ間で異なった順番でREPコマンドが反映されてしまっているので、エディタ側のテキストに対してUndoの処理を行う。 これにより、それぞれのエディタは、編集前の状態に戻り、テキストは一致している状態である。 その後、ソートされたREPコマンド列をテキストへ反映させ全てのテキストを一致させる。 -このUndoの処理のために蓄積されたREPコマンド列からUndoコマンドを生成する。 + +Undoコマンドはエディタに蓄積されたREPコマンド列から生成する。 +まず、このコマンド列を逆順にし、次に、insertコマンドはdeleteコマンドに、deleteコマンドはinsertコマンドに変換する(図\ref{fig:undo_command})。 +この生成されたUndoコマンド列をテキストに反映させることでテキストの状態を編集前の状態に戻す。 + +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=.3]{figure/undo_command.pdf} + \end{center} + \caption{Undoコマンドの生成} + \label{fig:undo_command} +\end{figure} + + +次に、行番号とエディタ番号によってREPコマンド列をソートする。これによってそれぞれのエディタ間でのコマンド列の順序が一致する(図\ref{fig:sort_command})。 +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=.3]{figure/sort_command.pdf} + \end{center} + \caption{コマンド列のソート} + \label{fig:sort_command} +\end{figure} + +この、Undoコマンド列とソートコマンド列をそれぞれのエディタに反映することにより、テキストを一致させる。 + +マージを開始するタイミングは、エディタ自身が発行したREPコマンドがSession Ringを巡回して戻ってきたときである。 +テキストへと編集が起こらずにコマンドを発行しなかった場合は、他のエディタから発行されるinsert\_ack、delete\_ackッコマンドを受け取った時にマージを開始する。 \subsection{マージ処理のSession Managerへの移行} マージの処理はこれまで、エディタ側で実装されていたが、マージはREP共通の処理であるため、それぞれのテキストエディタへ個別に実装するよりは、Session Managerへ実装する方が望ましいと考えた。 -しかし、エディタとSession Managerとの間では非同期に通信を行っているため、マージコマンドとエディタコマンドとの間で衝突が起こってしまうことがある。マージ中にエディタからの割り込みがあった場合である。 -これを解決するため、マージコマンドとエディタコマンドとの間マージを行うリマージコマンドの生成を提案した(図\ref{fig:remerge})。 - -リマージコマンドもマージコマンドと同様にUndoを行うが、コマンドのソートは行わずに、エディタからの割り込みのみを排除して、もう一度同様のマージコマンド列をテキストへ反映させる。 -その後、排除したエディタ割り込みコマンドをテキストへ反映させる。 +しかし、エディタとSession Managerとの間では非同期に通信を行っているため、マージコマンドとエディタコマンドとの間で衝突が起こってしまうことがある(図\ref{fig:remerge})。マージ中にエディタからの割り込みがあった場合である。 +これを解決するため、マージコマンドとエディタコマンドとの間マージを行うリマージコマンドの生成を提案した。%(図\ref{fig:remerge})。 \begin{figure}[htpb] \begin{center} @@ -53,3 +76,53 @@ \caption{リマージ} \label{fig:remerge} \end{figure} + +%リマージコマンドもマージコマンドと同様にUndoを行うが、コマンドのソートは行わずに、エディタからの割り込みのみを排除して、もう一度同様のマージコマンド列をテキストへ反映させる。 +%その後、排除したエディタ割り込みコマンドをテキストへ反映させる。 + +まず、コマンドの割り込みがあったかどうかをチェックするために、マージャが受け取ったこまんどを確認する(表\ref{tab:received_command})。 +この表では、マージコマンドをcomman1からcommand4とし、エディタからの割り込みコマンドをuser\_commandとしている。 + +\begin{table}[htdp] +\caption{received command} +\begin{center} +\begin{tabular}{|c|c|} +\hline +1 & command1 \\ +\hline +2 & command2 \\ +\hline +3 & user\_command \\ +\hline +4 & command3 \\ +\hline +5 & command4 \\ +\hline +\end{tabular} +\end{center} +\label{tab:received_command} +\end{table} + +これにより、3番目に割り込みがあったことがわかるので、5、4、3番目をUndoする。そして、command3、command4、をもう一度redoして最後にuser\_commandを反映する。 + +\begin{table}[htdp] +\caption{remerge command} +\begin{center} +\begin{tabular}{|c|c|} +\hline +1 & undo(command4) \\ +\hline +2 & undo(command3) \\ +\hline +3 & undo(user\_command) \\ +\hline +4 & command3 \\ +\hline +5 & command4 \\ +\hline +6 & user\_command \\ +\hline +\end{tabular} +\end{center} +\label{tab:remerge_command} +\end{table}
--- a/pin_gn.tex Wed Feb 18 23:02:19 2009 +0900 +++ b/pin_gn.tex Thu Feb 19 01:26:01 2009 +0900 @@ -67,15 +67,20 @@ % 和文概要 \begin{abstract} 我々が提案しているRemote Editing Protocol(REP)は、テキスト編集に特化したアプリケーション間通信プロトコルである。 -ここでは、ユーザの操作方法の改善や、マージアルゴリズムの改善、様々なアプリケーションへの実装方法について考察する。 -また、REPの接続シーケンスやマージアルゴリズムのデバッグ方法について考察する。 +ここでは、エディタへのユーザ操作の煩雑さを改善するため、REPの接続プロトコルの変更を行った。 +また、マージアルゴリズムについても変更を行い、その変更に伴う問題点の解決法についても論じる。 + +%ここでは、ユーザの操作方法の改善や、マージアルゴリズムの改善、様々なアプリケーションへの実装方法について考察する。 +%また、REPの接続シーケンスやマージアルゴリズムのデバッグ方法について考察する。 \end{abstract} % 英文概要 \begin{eabstract} Remote Editing Protocol which we introduced is inter-application communication protocol for text editing. -In this paper we explain improvement of user interface, Merge Argorithm and implementation on various applications. -In addition, we consider the method of debuging for connecting protocol and merge algorithm. +In this paper we improve the connecting protocol to remove cumbersome operation of user interface of Remote Editor. +In addition, we discuss about solution of the problem that caused by changing the Merge Argorithm. +%In this paper we explain improvement of user interface, Merge Argorithm and implementation on various applications. +%In addition, we consider the method of debuging for connecting protocol and merge algorithm. \end{eabstract} % 表題などの出力 @@ -88,8 +93,8 @@ \input{introduction.tex} \input{rep.tex} \input{merger.tex} -\input{eclipse.tex} -\input{debug.tex} +%\input{eclipse.tex} +%\input{debug.tex} \input{comparison.tex} \input{conclusion.tex} \input{bibliography.tex}
--- a/rep.tex Wed Feb 18 23:02:19 2009 +0900 +++ b/rep.tex Thu Feb 19 01:26:01 2009 +0900 @@ -100,6 +100,23 @@ 可能となる。このユーザインタフェース部分は、Emacsでは10\%程度、 vim では30\%程度を占めており無視できない大きさである。 +%sm_join +\subsection{Session Manager同士の接続} +リモートホスト同士のエディタ間で相互にデータの編集作業を行うにはまず、そのホストのSession Manager同士を接続し、エディタ間での通信は接続されたSession Managerを介して行う。 + +Session Manager同士を接続するにはユーザがGUI操作によって接続先のSession Managerを決定し、sm\_joinコマンドを発行する。 +sm\_joinコマンドを発行して接続してきたほうをslave、接続されたほうをmasterとし、全てのSession Managerの接続はTree構造を形成する。 + +sm\_joinコマンドを受け取ったSession Managerが既にmasterだった場合、sm\_join\_ackを全てのslaveに送信する。slaveだった場合はmasterの方向へsm\_joinコマンドを送信する。slaveがackを受け取った場合はTree構造の子の方向へackを送信する。 + +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=.3]{figure/sm_join.pdf} + \end{center} + \caption{sm\_joinコマンド} + \label{fig:sm_join} +\end{figure} + %エディタの接続 \subsection{エディタの接続}