# HG changeset patch # User sugi # Date 1361123288 -32400 # Node ID 52dff3fd4f40617b19ad3e4d42dbbc1338afe307 # Parent b817e83013a75e762e727185765dff16a8c19a52 add Draft diff -r b817e83013a7 -r 52dff3fd4f40 .DS_Store Binary file .DS_Store has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/.DS_Store Binary file Draft/.DS_Store has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/Draft.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Draft/Draft.tex Mon Feb 18 02:48:08 2013 +0900 @@ -0,0 +1,145 @@ +\documentclass[twocolumn,twoside,9.5pt]{jarticle} +\usepackage[papersize={210truemm,297truemm}, +top=3truecm,bottom=3truecm,left=2truecm,right=2truecm]{geometry} +\usepackage{setspace} +\usepackage[dvipdfm]{graphicx} +\usepackage{listings,jlisting} +\usepackage{picins} +\usepackage{fancyhdr} +\pagestyle{fancy} +\lhead{\parpic{\includegraphics[height=1zw,clip,keepaspectratio]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 卒業研究発表予稿} +\rhead{} +\cfoot{} + +\lstset{% + frame=single, + stringstyle={\ttfamily}, + commentstyle={\ttfamily}, + identifierstyle={\ttfamily}, + keywordstyle={\ttfamily}, + basicstyle={\ttfamily}, + breaklines=true, + xleftmargin=0zw, + xrightmargin=0zw, + framerule=.2pt, + columns=[l]{fullflexible}, + numbers=left, + stepnumber=1, + numberstyle={\scriptsize}, + numbersep=1em, + language={Java}, + tabsize=4, + lineskip=-0.5zw, + morecomment={[s][]{/**}{*/}}, +} + + +\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}} +\setlength{\headheight}{0mm} +\setlength{\headsep}{5mm} +\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}} +\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{11mm}} +\setlength{\textwidth}{181mm} +\setlength{\textheight}{261mm} +\setlength{\footskip}{0mm} +\pagestyle{empty} + +\begin{document} +\title{分散ネットフレームワーク Aliceにおける例題の作成} +\author{学籍番号 095732B 氏名 杉本優{}{} 指導教員 : 河野真治} +\date{} +\maketitle +\thispagestyle{fancy} + + +\section{研究背景と目的} +本研究室ではデータをData Segment 、タスクをCode Segmentという単位に分割して記述する分散ネットフレームワークAlice\cite{1}の開発を行なっている。 + + +AliceはJavaで実装されており、ユーザーがAliceを利用するためにはCode Segmentというclassを継承するだけでよい。記述が大変であるノード間のData Segmentの送受信はAPIが提供されているのでユーザーが記述をする必要はない。また、TopologyManagerというトポロジーの作成をサポートする機能が含まれているためユーザーはトポロジー完成後の記述を行うだけで良い。 + + +しかし、提供されているAPIが適当なものであるか、必要な機能が備わっているかどうかは、ソースコード上では確認できず、実際にプログラミングを行うことでしか見えてこない部分である。 + + +本研究はAliceを用いてプログラムを作成することで、Aliceが抱える問題点、APIの見直しを行った。そして、Aliceの改良を行い、誰でも簡単に分散プログラムを書けるようなフレームワークを作成するのが目的である。 +\section{Alice} +Aliceを使う際に必要なData SegmentとCode Segmentについて説明を行う。 +\subsection{DataSegment} +AliceではData Segmentをデータベースとして利用しており、以下のDataSegment API を用いることでData Segmentにデータを追加、削除を適宜行うことができる。 + +\begin{itemize} +\item void put(String key, Value val) +\item void update(String key, Value val) +\item void peek(Receiver receiver, String key, int id) +\item void take(Receiver receiver, String key, int id) +\end{itemize} + + +"put" はデータを追加するための API である。 + + +"update" はデータを置き換えるための API である。 キューの先頭を置き換える特急メッセージのように動作する。 + + +"peek" はデータを調べるためのAPIである。目的のData Segment がなければ、Code Segment の待ち合わせ (Blocking) が起きる。 + + + +"take" もデータを読み込むための API である。読み込まれたデータは Key Value Store のキューから取り除かれる +\subsection{CodeSegment} +CodeSegmentはタスクを分割したものであり、Code SegmentはInput Data SegmentとOutput Data Segmentを持つ。CodeSegmentに依存するData Segmentを記述することにより、(図 \ref{fig:dsandcs})のように実行される順番が一意に決まる。Code SegmentはInput Data Segmentが揃い次第Code Segment Managerに送られ順次実行されていく。またCode SegmentにInput Data Segmentがない場合はexecuteにより実行させる。 + +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=70mm]{pic/dsandcs2.pdf} +\caption{DataSegment と CodeSegment の依存関係で一意に決まる実行順序} +\label{fig:dsandcs} +\end{center} +\end{figure} + +\section{水族館ゲーム} +Aliceを用いて水族館ゲームの作成を行った。水族館ゲームとは複数のclientのディスプレイを並べて使用する。アプリケーションを実行するとウインドウが表示され、複数の魚がウインドウの中を泳ぎ始める。魚は画面の端まで移動すると自分の画面上からは消え、隣のプレイヤーの画面の端から出てくるものである。 + + +以前水族館ゲームをJava3Dで作成したが、JavaのVersion が1.7になったのに伴いJava3Dが使用不可になった。しかしJavaFXというGUIプラグインが追加されたため、JavaFXで水族館ゲームを書きなおした。(図 \ref{fig:JavaFX})また、描画部分がJava3DからJavaFXに変わっただけであるので、それぞれで魚の情報を共有することが可能である。 + + +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=80mm]{pic/for_Fx.pdf} +\caption{JavaFX版 水族館ゲーム} +\label{fig:JavaFX} +\end{center} +\end{figure} + +\section{注意すべき記述} +Aliceを記述する際に、注意すべき記述がある。(ソースコード \ref{fig:NullPointerException}) +Code Segmentを作成する際に、コンストラクト内でidsに対してsetKeyを行った後に、処理を記述しても実行されない可能性がある。 +Code Segmentは内部で必要なData Segmentの数を数えている。Data Segmentが取得されるたびにこの値がデクリメントされていき、0になった時にCode Segmentがactiveになる。値が0であるかを確認するのは別スレッドであるため、setKey以降に処理を記述してもThread Poolに送られてしまい、NullPointerException等のエラーが起こる可能性がある。 + +\begin{table}[htbp] +\lstinputlisting[label=fig:NullPointerException, caption=実行するとNullPointerExceptionを起こす]{source/NullPointerException.java} +\end{table} + +\section{今後の課題} +今回の実装は、Java により Code Segment と Data Segment に必要な API を洗い出すためのものであった。この実装でもいくつかの問題が明らかになっている。 +\subsection{API} +Classを継承したり、Input Data SegmentやOutput Data Segmentの作成にfactory objectを使うのはJavaを使う際の技術できなものであり、AliceのAPI自体はJavaに固有である必要はない。むしろ、JavaのObject指向な記述が全体を煩雑にしている部分もある。updateはData Segmentの競合的な更新に使われるべきではないかと思われる。 +\subsection{Message Pack} +単純なMessageの転送の場合にもMessage Packのdecode / encodeが必要になるが、overheadにしかならないので、encode / decode 抜きに処理できる方が望ましい。また、Data Segmentの一部修正にData Segmentを再構成を行うのは望ましくない。CeriumではInput DSとOutput DSをswapするAPIがあり、良好な結果が得られているのでAliceにも導入したい。ユーザーが特に記述しなくてもKeyを見て内部で自動的に判断したほうが望ましいと思われるが、何かしらの制御方法も必要だと思われる。 +\subsection{Java} +Aliceの全てのData SegmentはKVSに格納され、実行時のData SegmentはCode Segmentが activeな時のみメモリ上にある。この最大値は同時にActive Taskの量を見積もれば良い。従って、AliceにGCは必要ない。一方で、KVS上のデータは決してGCの対象にならない。しかし、それではGCに付加をかけてしまう。Alice自体はJavaで実装するのには向いていない。 +\subsection{Key} +本実装ではData Segment相互の参照はKey経由となる。分散実装では妥当であるが、並列実装ではすべてのData SegmentをKVSに格納するのは性能的な問題を引き起こす。一方で、分散記述と並列記述がかけ離れてしまうのも好ましくない。また、本来はKVSは持続性を持つべきだと思われる。持続性をもつことで、トラブルで処理が途中で中断された場合であっても途中から処理を再開可能となる。 +\thispagestyle{fancy} +\begin{thebibliography}{9} + +\bibitem{1} +赤嶺一樹, 河野真治. 分散ネットワークフレームワーク Alice の 提案と実装 Design and Implementation Distributed network framework Alice 平成23年度 学位論文(修士) +\bibitem{2} +赤嶺一樹, 河野真治. Meta engine を用いた federated linda の実験. 日本ソフトウェア科学会第 27 会大会, Sep 2010. +\bibitem{3} +古橋 貞之,新城靖. 分散システムのためのメッセージ表現手法 に関する研究 システム情報工学研究科修士論文 +\end{thebibliography} +\end{document} diff -r b817e83013a7 -r 52dff3fd4f40 Draft/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Draft/Makefile Mon Feb 18 02:48:08 2013 +0900 @@ -0,0 +1,82 @@ +TARGET = Draft + +SRC = $(wildcard *.tex) + +LATEX = platex +BIBTEX = pbibtex +DVIPS = dvips +DVIPDFM = dvipdfmx -p a4 +RM = rm -f +EBB = ebb + +# Option definitions +DVIPDFMOPT = +DVIPSOPT = -D 720 -mode esphi -O 0mm,0mm -N0 +SOUCE = pic/*.pdf +# Suffixes definitions +.SUFFIXES: .tex .dvi + +# Recipes +all: pdf# $(TARGET).ps + open $(TARGET).pdf +bb: + $(EBB) $(SOUCE) +dvi:bb + + @echo "----------- make dvi file ($(TARGET).dvi) ----------" + $(LATEX) $(TARGET) +# $(BIBTEX) $(TARGET) + $(LATEX) $(TARGET) + $(LATEX) $(TARGET) +pdf: dvi + $(DVIPDFM) $(DVIPDFMOPT) $(TARGET) + +clean: + $(RM) *~ \#* + $(RM) pic/*.bb + @if [ -f $(TARGET).aux ];\ + then $(RM) $(TARGET).aux;\ + fi + @if [ -f $(TARGET).log ];\ + then $(RM) $(TARGET).log;\ + fi + @if [ -f $(TARGET).toc ];\ + then $(RM) $(TARGET).toc;\ + fi + @if [ -f $(TARGET).lof ];\ + then $(RM) $(TARGET).lof;\ + fi + @if [ -f $(TARGET).lot ];\ + then $(RM) $(TARGET).lot;\ + fi + @if [ -f $(TARGET).big ];\ + then $(RM) $(TARGET).big;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).ilg ];\ + then $(RM) $(TARGET).ilg;\ + fi + @if [ -f $(TARGET).idx ];\ + then $(RM) $(TARGET).idx;\ + fi + @if [ -f $(TARGET).ind ];\ + then $(RM) $(TARGET).ind;\ + fi + @if [ -f $(TARGET).dvi ];\ + then $(RM) $(TARGET).dvi;\ + fi + @if [ -f $(TARGET).pdf ];\ + then $(RM) $(TARGET).pdf;\ + fi + @if [ -f $(TARGET).out ];\ + then $(RM) $(TARGET).out;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).blg ];\ + then $(RM) $(TARGET).blg;\ + fi + diff -r b817e83013a7 -r 52dff3fd4f40 Draft/jlisting.sty --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Draft/jlisting.sty Mon Feb 18 02:48:08 2013 +0900 @@ -0,0 +1,216 @@ +\NeedsTeXFormat{LaTeX2e} +\def\filedate{2006/02/20} +\def\fileversion{0.2} +\ProvidesPackage{jlisting}[\filedate\space\fileversion\space(Thor)] +% +\newcount\lst@nextchar +\let\lst@@ProcessSpace\lst@ProcessSpace +\def\lst@ProcessSpace#1{% + \lst@check@chartype{#1}% + \lst@@ProcessSpace + \lst@whitespacetrue} +\let\lst@@ProcessLetter\lst@ProcessLetter +\def\lst@ProcessLetter#1#2{% + \lst@check@chartype{#2}% + {\lst@@ProcessLetter{#1}}% + \relax} +\let\lst@@ProcessDigit\lst@ProcessDigit +\def\lst@ProcessDigit#1#2{% + \lst@check@chartype{#2}% + {\lst@@ProcessDigit{#1}}% + \relax} +\let\lst@@ProcessOther\lst@ProcessOther +\def\lst@ProcessOther#1#2{% + \lst@check@chartype{#2}% + {\lst@@ProcessOther{#1}}% + \relax} +\let\lst@@ProcessTabulator\lst@ProcessTabulator +\def\lst@ProcessTabulator#1{% + \lst@check@chartype{#1}% + \lst@@ProcessTabulator + \relax} +\def\lst@check@chartype#1#2#3{% + \edef\@tempa{\lst@nextchar=`\string#1\relax}% + \afterassignment\remove@to@nnil + \@tempa\@nnil + #2% + \ifnum\lst@nextchar<\@cclvi + #3% + \else + \lst@ifletter \else \lst@OutputOther \fi + \lst@whitespacefalse + \expandafter\lst@AppendJchar + \fi + #1} +\def\lst@AppendJchar#1#2{% + \lst@check@chartype{#2}% + {\advance\lst@length\@ne\lst@Append{#1}}% + \relax} +\def\lst@check@chartype@BOL#1{% + \edef\@tempa{\lst@nextchar=`\string#1\relax}% + \afterassignment\remove@to@nnil + \@tempa\@nnil + \ifnum\lst@nextchar<\@cclvi\else + \lst@whitespacefalse + \expandafter\lst@AppendJchar + \fi + #1} +\def\lst@InputListing#1{% + \begingroup + \lsthk@PreSet \gdef\lst@intname{#1}% + \expandafter\lstset\expandafter{\lst@set}% + \lsthk@DisplayStyle + \catcode\active=\active + \lst@Init\relax \let\lst@gobble\z@ + \lst@SkipToFirst + \lst@ifprint \def\lst@next{\lst@get@filecontents{#1}}% + \else \let\lst@next\@empty + \fi + \lst@next + \lst@DeInit + \endgroup} +\newread\lst@inputfile +\def\lst@get@filecontents#1{% + \let\lst@filecontents\@empty + \openin\lst@inputfile=#1\relax + \let\@lst@get@filecontents@prevline\relax + \lst@get@filecontents@loop + \closein\lst@inputfile + \lst@filecontents\empty} +\def\lst@get@filecontents@loop{% + \read\lst@inputfile to\@lst@get@filecontents@currline + \ifx\@lst@get@filecontents@prevline\relax\else + \expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter\lst@filecontents + \expandafter\expandafter\expandafter{% + \expandafter\lst@filecontents\@lst@get@filecontents@prevline}% + \fi + \let\@lst@get@filecontents@prevline\@lst@get@filecontents@currline + \ifeof\lst@inputfile\else + \expandafter\lst@get@filecontents@loop + \fi} +%%% [$B$3$N=hM}$b!$AjEv6/0z$G$9!%(B] +\def\lst@BOLGobble{% + \ifnum\lst@gobble>\z@ + \@tempcnta\lst@gobble\relax + \expandafter\lst@BOLGobble@ + \else + \expandafter\lst@check@chartype@BOL + \fi} +\def\lst@BOLGobble@#1{% + \let\lst@next#1% + \ifx \lst@next\relax\else + \ifx \lst@next\lst@MProcessListing\else + \ifx \lst@next\lst@ProcessFormFeed\else + \ifx \lst@next\lstenv@backslash + \let\lst@next\lstenv@BOLGobble@@ + \else + \let\lst@next\lst@BOLGobble@@ + \ifx #1\lst@ProcessTabulator + \advance\@tempcnta-\lst@tabsize\relax + \ifnum\@tempcnta<\z@ + \lst@length-\@tempcnta \lst@PreGotoTabStop + \fi + \else + \edef\@tempa{\lst@nextchar=`\string#1\relax}% + \@tempa + \ifnum\lst@nextchar<\@cclvi\else + \advance\@tempcnta\m@ne + \fi + \advance\@tempcnta\m@ne + \fi + \fi \fi \fi \fi + \lst@next} +\def\lst@BOLGobble@@{% + \ifnum\@tempcnta>\z@ + \expandafter\lst@BOLGobble@ + \else + \expandafter\lst@check@chartype@BOL + \fi +} +% +% \begin{$B=$@5;v9`(B}{1.3} +% $B$A$g$C$H$7$?=$@5(B +\gdef\lst@breakProcessOther#1{\lst@ProcessOther#1} +% $B%=!<%9%3!<%IL\:\$7$^$7$?!#(B + +\begin{quote} + \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21172.html}\\ + \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21184.html}\\ + \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21189.html}\\ + \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21197.html} +\end{quote} + + Copyright $B$O5H1JE/H~;a$K$"$k$N$@$H;W$$$^$9!%(B + +\section{$B99?7MzNr(B}% ChageLogs + +\begin{description} + \item[ver.~0.1 (2004/03/24)] + $B$H$j$"$($:8x3+!%(B + \item[ver.~0.2 (2006/02/20)] + \verb|\lst@breakProcessOther| $BL?Na$NDj5A$NDI2C!%(B +\end{description} + +\section{$B%=!<%9%3!<%I(B} +\par\narrowbaselines +\verbatiminput{jlisting.sty} +\end{document} diff -r b817e83013a7 -r 52dff3fd4f40 Draft/pic/.DS_Store Binary file Draft/pic/.DS_Store has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/pic/NodeToClient.pdf Binary file Draft/pic/NodeToClient.pdf has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/pic/dsandcs.pdf Binary file Draft/pic/dsandcs.pdf has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/pic/dsandcs2.pdf Binary file Draft/pic/dsandcs2.pdf has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/pic/emblem-bitmap.pdf Binary file Draft/pic/emblem-bitmap.pdf has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/pic/for_Fx.pdf Binary file Draft/pic/for_Fx.pdf has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/pic/result.pdf Binary file Draft/pic/result.pdf has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/picins.sty --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Draft/picins.sty Mon Feb 18 02:48:08 2013 +0900 @@ -0,0 +1,578 @@ +% PICINS.STY --- Style File zum Einbinden von Bildern +% Autor: J. Bleser, E. Lang +% Hochschulrechenzentrum +% Technische Hochschule Darmstadt +% !!! Dieses Style-File ist urheberrechtlich geschuetzt !!! +% !!! Aenderungen nur mit Zustimmung der Autoren !!! +\message{Option `picins' Version 3.0 Sep. 1992, TH Darmstadt/HRZ} +\newbox\@BILD% +\newbox\@TEXT% +\newdimen\d@breite% +\newdimen\d@hoehe% +\newdimen\d@xoff% +\newdimen\d@yoff% +\newdimen\d@shad% +\newdimen\d@dash% +\newdimen\d@boxl% +\newdimen\d@pichskip% +\newdimen\d@tmp +\newdimen\d@tmpa +\newdimen\d@bskip +\newdimen\hsiz@% +\newdimen\p@getot@l% +\newcount\c@breite +\newcount\c@hoehe +\newcount\c@xoff +\newcount\c@yoff +\newcount\c@pos +\newcount\c@shad +\newcount\c@dash +\newcount\c@boxl +\newcount\c@zeilen% +\newcount\@changemode% +\newcount\c@piccaption% +\newcount\c@piccaptionpos% +\newcount\c@picpos +\newcount\c@whole% +\newcount\c@half% +\newcount\c@tmp +\newcount\c@tmpa +\newcount\c@tmpb +\newcount\c@tmpc +\newcount\c@tmpd +\newskip\d@leftskip +\newif\if@list \@listfalse% +\newif\if@offset% + + +\c@piccaptionpos=1% +\c@picpos=0 +\d@shad=4pt% +\d@dash=4pt% +\d@boxl=10pt% +\d@pichskip=1em% +\@changemode=0% +\def\@captype{figure}% +\let\old@par=\par% + +\def\pichskip#1{\d@pichskip #1\relax} + + +\def\shadowthickness#1{\d@shad #1\relax} + + +\def\dashlength#1{\d@dash #1\relax} + + +\def\boxlength#1{\d@boxl #1\relax} + + +\def\picchangemode{\@changemode=1}% +\def\nopicchangemode{\@changemode=0}% + + +\def\piccaptionoutside{\c@piccaptionpos=1}% +\def\piccaptioninside{\c@piccaptionpos=2}% +\def\piccaptionside{\c@piccaptionpos=3}% +\def\piccaptiontopside{\c@piccaptionpos=4}% + +\def\piccaption{\@ifnextchar [{\@piccaption}{\@piccaption[]}} +\def\@piccaption[#1]#2{\c@piccaption=1\def\sh@rtf@rm{#1}\def\capti@nt@xt{#2}} +\def\make@piccaption{% + \hsiz@\d@breite% + \ifnum\c@piccaptionpos=2% + \advance\hsiz@ -2\fboxsep% + \fi% + \ifnum\c@piccaptionpos>2% + \hsiz@\hsize\advance\hsiz@-\d@breite\advance\hsiz@-\d@pichskip% + \fi% + \setbox\@TEXT=\vbox{\hsize\hsiz@\caption[\sh@rtf@rm]{\capti@nt@xt}}% +} + + + +\def\newcaption{\refstepcounter\@captype\@dblarg{\@newcaption\@captype}} +\long\def\@newcaption#1[#2]#3{% + \old@par% + \addcontentsline{\csname ext@#1\endcsname }{#1}% + {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}} + \begingroup\@parboxrestore\normalsize% + \@newmakecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\old@par% + \endgroup% +} +\long\def\@newmakecaption#1#2{% + \vskip 10pt% + \setbox\@tempboxa \hbox {#1: #2}% + \ifdim \wd\@tempboxa >\hsize% + \setbox0=\hbox{#1: }\dimen0=\hsize\advance\dimen0 by-\wd0 + \setbox1=\vtop{\hsize=\dimen0 #2} + \hbox{\box0 \box1} + \par + \else \hbox to\hsize {\hfil \box \@tempboxa \hfil} + \fi +} + + + + + +\def\parpic{% + \@ifnextchar ({\iparpic}{\iparpic(0pt,0pt)} +} +\def\iparpic(#1,#2){% + \@ifnextchar ({\@offsettrue\iiparpic(#1,#2)}% + {\@offsetfalse\iiparpic(#1,#2)(0pt,0pt)} +} +\def\iiparpic(#1,#2)(#3,#4){% + \@ifnextchar [{\iiiparpic(#1,#2)(#3,#4)}{\iiiparpic(#1,#2)(#3,#4)[l]} +} +\def\iiiparpic(#1,#2)(#3,#4)[#5]{% + \@ifnextchar [{\ivparpic(#1,#2)(#3,#4)[#5]}{\ivparpic(#1,#2)(#3,#4)[#5][]} +} +\def\ivparpic(#1,#2)(#3,#4)[#5][#6]#7{% + \let\par=\old@par\par% + \hangindent0pt\hangafter1% + \setbox\@BILD=\hbox{#7}% + \d@breite=#1\d@breite=\the\d@breite% + \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi% + \c@breite=\d@breite\divide\c@breite by65536% + \multiply\c@piccaption\c@piccaptionpos% + \d@hoehe=#2\d@hoehe=\the\d@hoehe% + \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi% + \c@hoehe=\d@hoehe\divide\c@hoehe by65536% + \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536% + \d@yoff=\d@hoehe% + \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536% + \c@pos=1\unitlength1pt% + \if@offset% + \setbox\@BILD=\hbox{% + \begin{picture}(\c@breite,\c@hoehe)% + \put(0,0){\makebox(\c@breite,\c@hoehe){}}% + \put(\c@xoff,\c@yoff){\box\@BILD}% + \end{picture}% + }% + \else% + \setbox\@BILD=\hbox{% + \begin{picture}(\c@breite,\c@hoehe)% + \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}% + \end{picture}% + }% + \fi% + \ifnum\c@piccaption=2% + \make@piccaption% + \advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT% + \c@hoehe=\d@hoehe\divide\c@hoehe by65536% + \setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}% + \hbox{\hspace{\fboxsep}\box\@TEXT}% + \vspace{4pt}}% + \fi% + \@tfor\@tempa := #5\do{% + \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa l\c@pos=1\fi% + \if\@tempa r\c@pos=2\fi% + }% + \ifnum\c@piccaption=1% + \make@piccaption% + \advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT% + \c@hoehe=\d@hoehe\divide\c@hoehe by65536% + \setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}\hbox{\box\@TEXT}\vspace{4pt}}% + \fi% + \ifodd\count0\c@picpos=0\else\c@picpos=\@changemode\fi% + \pagetotal=\the\pagetotal% + \d@tmp=\pagegoal\advance\d@tmp by-\pagetotal\advance\d@tmp by-\baselineskip% + \ifdim\d@hoehe>\d@tmp% + \vskip 0pt plus\d@hoehe\relax\pagebreak[3]\vskip 0pt plus-\d@hoehe\relax% + \ifnum\c@picpos=1\c@picpos=0\else\c@picpos=\@changemode\fi% + \fi% + \ifnum\c@picpos=1\ifnum\c@pos=1\c@pos=2\else\c@pos=1\fi\fi% + \ifnum\@listdepth>0 + \@listtrue\parshape 0% + \advance\hsize -\rightmargin% + \d@leftskip \leftskip% + \leftskip \@totalleftmargin% + \if@inlabel\rule{\linewidth}{0pt}\vskip-\baselineskip\relax\fi% + \else\@listfalse\medskip% + \fi% + \if@list\d@tmpa=\linewidth\else\d@tmpa=\hsize\fi% + \ifnum\c@piccaption=3% + \make@piccaption% + \d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT% + \ifdim\d@hoehe>\d@tmp% + \setbox\@TEXT=\vbox to\d@hoehe{\vfill\box\@TEXT\vspace{.2\baselineskip}\vfill}% + \else% + \setbox\@BILD=\vbox to\d@tmp{\vfill\box\@BILD\vfill}% + \d@hoehe\d@tmp% + \fi% + \fi% + \ifnum\c@piccaption=4% + \make@piccaption% + \d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT% + \setbox\@TEXT=\vbox to\d@hoehe{\vspace{-10pt}\box\@TEXT\vfil}% + \advance\d@hoehe-\d@tmp% + \fi% + \ifnum\c@pos=1\d@tmpa=0pt% + \ifnum\c@piccaption>2% + \setbox\@BILD=\hbox{\box\@BILD\hspace{\d@pichskip}\hbox{\box\@TEXT}}% + \fi% + \else\advance\d@tmpa by-\wd\@BILD\d@breite=-\d@breite% + \ifnum\c@piccaption>2% + \d@tmpa=0pt% + \setbox\@BILD=\hbox{\hbox{\box\@TEXT}\hspace{\d@pichskip}\box\@BILD}% + \fi% + \fi% + \p@getot@l\the\pagetotal% + \d@bskip\d@hoehe\advance\d@bskip by\parskip\advance\d@bskip by.3\baselineskip% + {\noindent\hspace*{\d@tmpa}\relax% + \box\@BILD\nopagebreak\vskip-\d@bskip\relax\nopagebreak}% + \d@tmp=-\d@hoehe\divide\d@tmp by\baselineskip% + \c@zeilen=\d@tmp\advance\c@zeilen by-1% + \ifdim\d@breite<0pt\advance\d@breite by-\d@pichskip% + \else\advance\d@breite by\d@pichskip% + \fi% + \hangindent=\d@breite% + \hangafter=\c@zeilen% + \let\par=\x@par% + \ifnum\c@piccaption=3% + \hangindent0pt\hangafter1\let\par=\old@par% + \vskip\d@hoehe\vskip.2\baselineskip% + \fi% + \c@piccaption=0% +} + + + + +\newdimen\ptoti +\newdimen\ptotii +\def\x@par{% + \ptoti\pagetotal% + \old@par% + \ptotii\pagetotal% + \ifdim\ptoti=\ptotii% + \d@tmp\d@hoehe% + \else% + \d@tmp\baselineskip% + \multiply\d@tmp by\prevgraf% + \advance\d@tmp by\parskip% + \global\advance\d@hoehe by-\d@tmp\d@tmp=\d@hoehe% + \fi% + \ifdim\d@hoehe>0pt% + \divide\d@tmp by\baselineskip\c@zeilen=-\d@tmp\advance\c@zeilen by-1% + \c@zeilen=\the\c@zeilen% + \else\c@zeilen=0 + \fi + \ifnum\c@zeilen<0\hangafter=\c@zeilen\hangindent=\d@breite% + \else\let\par=\old@par% + \hangindent 0pt% + \leftskip \d@leftskip% + \if@list\parshape \@ne \@totalleftmargin \linewidth% + \advance\hsize \rightmargin% + \fi% + \fi% +} + + +\def\picskip#1{% + \let\par=\old@par% + \par% + \pagetotal\the\pagetotal% + \c@tmp=#1\relax% + \ifnum\c@tmp=0% + \d@tmp\baselineskip\multiply\d@tmp by\prevgraf\advance\d@tmp\parskip% + \ifdim\p@getot@l<\pagetotal + \advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex% + \ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi% + \fi% + \ifdim\p@getot@l=\pagetotal% + \advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex% + \ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi% + \fi% + \else\hangafter=-\c@tmp\hangindent=\d@breite% + \fi% + \leftskip \d@leftskip% + \if@list\parshape \@ne \@totalleftmargin \linewidth% + \advance\hsize \rightmargin% + \fi% +} + + + + + + +\def\hpic{% + \@ifnextchar ({\ihpic}{\ihpic(0pt,0pt)} +} +\def\ihpic(#1,#2){% + \@ifnextchar ({\@offsettrue\iihpic(#1,#2)}% + {\@offsetfalse\iihpic(#1,#2)(0pt,0pt)} +} +\def\iihpic(#1,#2)(#3,#4){% + \@ifnextchar [{\iiihpic(#1,#2)(#3,#4)}{\iiihpic(#1,#2)(#3,#4)[l]} +} +\def\iiihpic(#1,#2)(#3,#4)[#5]{% + \@ifnextchar [{\ivhpic(#1,#2)(#3,#4)[#5]}{\ivhpic(#1,#2)(#3,#4)[#5][]} +} +\def\ivhpic(#1,#2)(#3,#4)[#5][#6]#7{% + \setbox\@BILD=\hbox{#7}% + \d@breite=#1\d@breite=\the\d@breite% + \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi% + \c@breite=\d@breite\divide\c@breite by65536% + \d@hoehe=#2\d@hoehe=\the\d@hoehe% + \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi% + \c@hoehe=\d@hoehe\divide\c@hoehe by65536% + \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536% + \d@yoff=\d@hoehe% + \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536% + \c@pos=0\d@tmpa=\parindent\parindent=0pt\unitlength1pt% + \if@offset + \setbox\@BILD=\hbox{% + \begin{picture}(\c@breite,\c@hoehe)% + \put(0,0){\makebox(\c@breite,\c@hoehe){}}% + \put(\c@xoff,\c@yoff){\box\@BILD}% + \end{picture}% + }% + \else% + \setbox\@BILD=\hbox{% + \begin{picture}(\c@breite,\c@hoehe)% + \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}% + \end{picture}% + }% + \fi% + \@tfor\@tempa := #5\do{% + \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi% + \if\@tempa t\c@pos=1\fi% + \if\@tempa b\c@pos=2\fi% + }% + \ifnum\c@pos=0\parbox{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi% + \ifnum\c@pos=1\parbox[t]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi% + \ifnum\c@pos=2\parbox[b]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi% + \parindent=\d@tmpa% +} + + + + + + +\def\Rahmen(#1,#2)#3{% + \c@whole=\@wholewidth\divide\c@whole by65536% + \c@half=\@halfwidth\divide\c@half by65536% + \c@tmpa=#1\advance\c@tmpa by\c@whole\advance\c@tmpa by\c@whole% + \c@tmpb=#2\advance\c@tmpb by\c@whole\advance\c@tmpb by\c@whole% + \begin{picture}(\c@tmpa,\c@tmpb)% + \put(\c@whole,\c@half){\framebox(#1,#2){#3}}% + \end{picture}% + \global\advance\d@breite by2\@wholewidth% + \global\advance\d@hoehe by2\@wholewidth% +} + + +\def\Schatten(#1,#2)#3{% + \c@whole=\@wholewidth\divide\c@whole by65536% + \c@half=\@halfwidth\divide\c@half by65536% + \c@shad=\d@shad\divide\c@shad by65536% + \c@tmp=\c@whole\advance\c@tmp by\c@whole\c@tmpd=\c@tmp% + \advance\c@tmp by\c@shad% + \advance\c@tmpd by#1% + \advance\c@half by\c@shad% + \c@tmpa=#1\advance\c@tmpa by\c@tmp% + \c@tmpb=#2\advance\c@tmpb by\c@tmp% + \begin{picture}(\c@tmpa,\c@tmpb)% + \put(\c@whole,\c@half){\framebox(#1,#2){#3}}% + \put(\c@shad,0){\rule{\c@tmpd pt}{\c@shad pt}}% + \put(\c@tmpd,0){\rule{\c@shad pt}{#2 pt}}% + \end{picture}% + \global\advance\d@breite by2\@wholewidth\global\advance\d@breite by\d@shad% + \global\advance\d@hoehe by2\@wholewidth\global\advance\d@hoehe by\d@shad% +} + + +\def\Oval(#1,#2)#3{% + \@wholewidth=0.4pt% + \c@tmpa=\the#1\divide\c@tmpa by2% + \c@tmpb=\the#2\divide\c@tmpb by2% + \begin{picture}(#1,#2)% + \put(\c@tmpa,\c@tmpb){\oval(#1,#2)}% + \put(0.4,0.4){#3}% + \end{picture}% + \global\advance\d@breite by1pt\global\advance\d@hoehe by1pt% +} + + +\def\Strich(#1,#2)#3{% + \c@whole=\@wholewidth\divide\c@whole by65536% + \c@half=\@halfwidth\divide\c@half by65536% + \c@dash=\d@dash\divide\c@dash by65536% + \c@tmp=\c@whole\advance\c@tmp by\c@whole% + \c@tmpa=#1\advance\c@tmpa by\c@tmp% + \c@tmpb=#2\advance\c@tmpb by\c@tmp% + \c@tmpc=#1\advance\c@tmpc by\c@whole% + \c@tmpd=#2\advance\c@tmpd by\c@whole% + \begin{picture}(\c@tmpa,\c@tmpb)% + \put(\c@half,\c@half){\dashbox{\c@dash}(\c@tmpc,\c@tmpd){#3}}% + \end{picture}% + \global\advance\d@breite by2\@wholewidth% + \global\advance\d@hoehe by2\@wholewidth% +} + + +\def\Kasten(#1,#2)#3{% + \@wholewidth=0.4pt% + \c@boxl=\d@boxl\divide\c@boxl by65536\c@boxl=\the\c@boxl% + \c@tmpa=#1\advance\c@tmpa by\c@boxl% + \c@tmpb=#2\advance\c@tmpb by\c@boxl% + \c@tmp=#2% + \begin{picture}(\c@tmpa,\c@tmpb)% + \put(0,\c@boxl){\framebox(#1,#2){#3}}% + \put(\c@boxl,0){\line(-1,1){\c@boxl}}% + \put(\c@boxl,0){\line(1,0){#1}\line(-1,1){\c@boxl}}% + \put(\c@boxl,0){\put(#1,0){\line(0,1){\c@tmp}% + \put(0,\c@tmp){\line(-1,1){\c@boxl}}}}% + \end{picture}% + \global\advance\d@breite by\d@boxl% + \global\advance\d@hoehe by\d@boxl% +} + + + + + +\newbox\env@box% +\newdimen\d@envdp +\newcount\c@hsize +\newcount\c@envdp +\newdimen\d@envb + +\long\def\frameenv{\@ifnextchar [{\@frameenv}{\@frameenv[\textwidth]}} +\long\def\@frameenv[#1]{% + \hsiz@=\textwidth \textwidth=#1 \d@envb=#1 + \advance\textwidth by-2\@wholewidth + \advance\textwidth by-2\fboxsep + \hsize=\textwidth \linewidth=\textwidth + \setbox\env@box=\vbox\bgroup}% +\def\endframeenv{% + \egroup% + \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@ + \c@breite=\d@envb \divide\c@breite by65536 + \advance\d@envb by-2\@wholewidth + \c@hsize=\d@envb \divide\c@hsize by65536% + \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box% + \advance\d@envdp by2\fboxsep% + \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth + \c@hoehe=\d@hoehe \divide\c@hoehe by65536 + \c@envdp=\d@envdp \divide\c@envdp by65536% + \c@tmp=\@wholewidth \divide\c@tmp by65536 + \vskip\@wholewidth% + \unitlength 1pt\noindent% + \begin{picture}(\c@breite,\c@hoehe)(0,0) + \put(\c@tmp,\c@tmp){\framebox(\c@hsize,\c@envdp){\box\env@box}} + \end{picture}% +} + + + +\long\def\shadowenv{\@ifnextchar [{\@shadowenv}{\@shadowenv[\textwidth]}} +\long\def\@shadowenv[#1]{% + \hsiz@=\textwidth \textwidth=#1 \d@envb=#1 + \advance\textwidth by-2\@wholewidth + \advance\textwidth by-2\fboxsep + \advance\textwidth by-\d@shad% + \hsize=\textwidth \linewidth=\textwidth + \setbox\env@box=\vbox\bgroup}% +\def\endshadowenv{% + \egroup + \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@ + \d@tmpa=\d@envb + \c@breite=\d@envb \divide\c@breite by65536 + \advance\d@envb by-2\@wholewidth \advance\d@envb by-\d@shad + \c@hsize=\d@envb \divide\c@hsize by65536% + \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box% + \advance\d@envdp by2\fboxsep% + \c@envdp=\d@envdp \divide\c@envdp by65536% + \d@hoehe=\d@envdp + \advance\d@hoehe by2\@wholewidth \advance\d@hoehe by\d@shad + \c@hoehe=\d@hoehe \divide\c@hoehe by65536 + \c@shad =\d@shad \divide\c@shad by65536 + \c@tmp=\@wholewidth \divide\c@tmp by65536 + \advance\d@tmpa by-2\d@shad + \c@xoff =\d@tmpa \divide\c@xoff by65536 + \advance\c@xoff by\c@shad \advance\c@xoff by-1 + \advance\d@envdp by\@wholewidth + \vskip\@halfwidth + \unitlength 1pt\noindent% + \begin{picture}(\c@breite,\c@hoehe)(0,0) + \put(\c@tmp,\c@shad){\framebox(\c@hsize,\c@envdp){\box\env@box}} + \put(\c@shad,0){\rule{\d@tmpa}{\d@shad}}% + \put(\c@xoff,0){\rule{\d@shad}{\d@envdp}}% + \end{picture}% + \vskip\@halfwidth +} + + +\long\def\dashenv{\@ifnextchar [{\@dashenv}{\@dashenv[\textwidth]}} +\long\def\@dashenv[#1]{% + \hsiz@=\textwidth \textwidth=#1 \d@envb=#1 + \advance\textwidth by-2\@wholewidth \advance\textwidth by-2\fboxsep + \hsize=\textwidth \linewidth=\textwidth + \setbox\env@box=\vbox\bgroup}% +\long\def\enddashenv{% + \egroup + \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@ + \c@breite=\d@envb \divide\c@breite by65536 + \advance\d@envb by-\@wholewidth + \c@hsize=\d@envb \divide\c@hsize by65536% + \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box% + \advance\d@envdp by2\fboxsep% + \advance\d@envdp by\@wholewidth + \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth + \c@hoehe=\d@hoehe \divide\c@hoehe by65536 + \c@envdp=\d@envdp \divide\c@envdp by65536% + \c@dash=\d@dash \divide\c@dash by65536% + \c@whole=\@wholewidth \divide\c@whole by65536 + \c@half=\@halfwidth \divide\c@half by 65536 + \noindent\unitlength 1pt + \begin{picture}(\c@breite,\c@hoehe)(0,0) + \put(\c@half,\c@whole){\dashbox{\c@dash}(\c@hsize,\c@envdp){\box\env@box}} + \end{picture}% +} + + +\long\def\ovalenv{\@ifnextchar [{\@ovalenv}{\@ovalenv[\textwidth]}}% +\long\def\@ovalenv[#1]{% + \hsiz@=\textwidth \textwidth=#1 \d@envb=#1 + \advance\textwidth by-4\fboxsep + \hsize=\textwidth \linewidth=\textwidth + \setbox\env@box=\vbox\bgroup}% +\long\def\endovalenv{% + \egroup + \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@ + \@wholewidth=0.4pt + \c@breite=\d@envb \divide\c@breite by65536 + \advance\d@envb by-2\@wholewidth + \c@hsize=\d@envb \divide\c@hsize by65536% + \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box% + \advance\d@envdp by4\fboxsep% + \c@envdp=\d@envdp \divide\c@envdp by65536% + \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth + \c@hoehe=\d@hoehe \divide\c@hoehe by65536 + \c@tmpa=\c@hsize \divide\c@tmpa by2% + \c@tmpb=\c@envdp \divide\c@tmpb by2% + \d@tmpa=2\fboxsep \advance\d@tmpa by\@wholewidth + \c@xoff=\d@tmpa \divide\c@xoff by65536% + \advance\d@tmpa by\dp\env@box + \c@yoff=\d@tmpa \divide\c@yoff by65536% + \unitlength 1pt\noindent + \begin{picture}(\c@breite,\c@hoehe)(0,0) + \put(\c@tmpa,\c@tmpb){\oval(\c@hsize,\c@envdp)} + \put(\c@xoff,\c@yoff){\box\env@box}% + \end{picture}% +} diff -r b817e83013a7 -r 52dff3fd4f40 Draft/source/.DS_Store Binary file Draft/source/.DS_Store has changed diff -r b817e83013a7 -r 52dff3fd4f40 Draft/source/NullPointerException.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Draft/source/NullPointerException.java Mon Feb 18 02:48:08 2013 +0900 @@ -0,0 +1,15 @@ +public class NullPointer extends CodeSegment { + private Receiver data1 = ids.create(CommandType.PEEK); + private Object obj; + + public NullPointer(Object _obj){ + data1.setKey("FISH0"); + obj = _obj; + } + + @Override + public void run() { + FishData fd1 = data1.asClass(FishData.class); + obj.setXYZ( fd1.getXYZ() ); + } +} diff -r b817e83013a7 -r 52dff3fd4f40 paper/.DS_Store Binary file paper/.DS_Store has changed diff -r b817e83013a7 -r 52dff3fd4f40 paper/Makefile --- a/paper/Makefile Wed Feb 13 18:24:42 2013 +0900 +++ b/paper/Makefile Mon Feb 18 02:48:08 2013 +0900 @@ -12,7 +12,7 @@ # Option definitions DVIPDFMOPT = DVIPSOPT = -D 720 -mode esphi -O 0mm,0mm -N0 -SOUCE = fig/*.pdf +SOURCE = fig/*.pdf # Suffixes definitions .SUFFIXES: .tex .dvi @@ -21,7 +21,7 @@ open $(TARGET).pdf dvi: - $(EBB) $(SOUCE) + $(EBB) $(SOURCE) @echo "----------- make dvi file ($(TARGET).dvi) ----------" $(LATEX) $(TARGET) $(BIBTEX) $(TARGET) @@ -32,6 +32,7 @@ clean: $(RM) *~ \#* + $(RM) fig/*.bb @if [ -f $(TARGET).aux ];\ then $(RM) $(TARGET).aux;\ fi diff -r b817e83013a7 -r 52dff3fd4f40 paper/chapter1.tex --- a/paper/chapter1.tex Wed Feb 13 18:24:42 2013 +0900 +++ b/paper/chapter1.tex Mon Feb 18 02:48:08 2013 +0900 @@ -5,17 +5,24 @@ %序論の目安としては1枚半ぐらい. %英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも. -\section{背景と目的} +\section{研究背景と目的} +本研究室では分散ネットフレームワークAliceの開発を行なっている。このフレームワークは本研究室で提唱しているタスクを細かく分割したCode Segmentとデータを細かく分割したData Segmentで記述していくというプログラム手法でプログラムを作成していくものである。Aliceは先行研究であるFederated Lindaと本研究室で開発を行なっている並列タスク管理フレームワークCeriumから得られた知見が生かされている。 + +AliceはJavaで実装されており、ユーザーがAliceを利用するためにはCode Segmentというclassを継承するだけでよい。記述が大変であるノード間のData Segmentの送受信はAPIが提供されているのでユーザーが記述をする必要はない。また、TopologyManagerというトポロジーの作成をサポートする機能が含まれているためユーザーはトポロジー完成後の記述を行うだけで良い。 +しかし、提供されているAPIが適当なものであるか、必要な機能が備わっているかどうかは、ソースコード上では確認できず、実際にプログラミングを行うことでしか見えてこない部分である。 + + +本研究はAliceを用いてプログラムを作成することで、Aliceが抱える問題点、APIの見直しを行った。そして、Aliceの改良を行い、誰でも簡単に分散プログラムを書けるようなフレームワークを作成するのが目的である。 + \section{論文の構成} -第2章では、Aliceについて説明する。また、先行研究であるFederated Linda、並列タスク管理用フレームワークCeriumについて説明し、その開発を通して得られた知見がAliceでどのように生かされているのかを示す。 +第2章では、Aliceを使うにあたって必要な知識である、Code SegmentとData Segmentの説明を行い、実際にどのようにCode SegmentとData Segmentを使ってプログラムを作成するかをソースコードを示しながら説明する。また、トポロジーマネージャーを使用してトポロジーを作成する方法の説明を行う。 -第3章では、実際にAliceを用いて作成された例題を示す。 +第3章では、実際にAliceを用いて作成された例題である水族館ゲーム、バイトニックソートを示し、その説明を行う。 -第4章では、例題による実験を行い、Aliceの現状を省みることでAliceのAPIの見直しを行う。また、第3章で示した例題の作成を行った際にAliceに備わっていて欲しいAPIなどについて述べる。 +第4章では、例題による実験を行い、その結果を示すと共に考察を行う。 -第5章では、まとめと今後の課題を示す。 - +第5章では、まとめを示す。その中で現状のAliceの問題点などを述べる。また、例題の作成を行った際にAliceに備わっていて欲しい機能、API等述べる。 %\section{Introduction} diff -r b817e83013a7 -r 52dff3fd4f40 paper/chapter3.tex --- a/paper/chapter3.tex Wed Feb 13 18:24:42 2013 +0900 +++ b/paper/chapter3.tex Mon Feb 18 02:48:08 2013 +0900 @@ -1,5 +1,5 @@ \chapter{Aliceを用いた例題} -\label{chap:poordirection} +\label{chap:example} AliceのAPIを見直すためには実際にAliceを用いて例題を作成するのが、適切である。この章では実際にAliceを用いて作成された例題を示す。 \section{水族館ゲーム} Aliceは分散ネットフレームワークである。従って例題を作成するにあたってネットワークを介した例題が適切であると思われる。そこで過去にFedarated Lindaでも作成された水族館ゲームをAliceで実装した。また、Java3D版(図\ref{fig:Java3D})とは別に、新しくJava7に組み込まれたJavaFx(図\ref{fig:JavaFx})を使い水族館ゲームのJavaFx版を作成した。 @@ -45,8 +45,15 @@ \section{バイトニックソート} -Aliceはマルチコアが現在に主流になっているという背景を踏まえて設計されている。従って並列処理に対するテストを行った。並列処理に対する例題としてバイトニックソートを実装した。 +Aliceはマルチコアが現在に主流になっているという背景を踏まえて設計されている。従って並列処理に対するテストを行った。並列処理に対する例題としてバイトニックソート(図\ref{fig:sortflow})を実装した。 +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=150mm]{fig/sortflow.pdf} +\end{center} +\caption{Sortflow} +\label{fig:sortflow} +\end{figure} \subsection{処理の流れ} 指定された数の乱数を生成し、Sortを行う例題である。 @@ -67,12 +74,13 @@ \begin{figure}[htbp] \begin{center} -\includegraphics[width=150mm]{fig/bitonicSort.pdf} +\includegraphics[width=140mm]{fig/bitonicSort.pdf} \end{center} \caption{Sortの様子} \label{fig:bitonicSort} \end{figure} + \section{Aliceのバグ} データを静的な型に変換する際にMessagePackの使い方が誤っていたため、PermGen Errorを引き起こしていた。 @@ -88,10 +96,6 @@ しかし、型変換を行うたびにMessagePackのオブジェクトをnewしていた。そのため型変換を行うたびにClassを定義を行なっていたため Parmanent領域が減っていき、枯渇した際にエラーを引き起こしていた。現在はMessagePackのオブジェクトをSingletonパターンで記述しているためこのエラーは起きない。 -\begin{table}[htbp] -\lstinputlisting[label=fig:use_asClass, caption=asClassの使用例]{source/AsClass.java} -\lstinputlisting[label=fig:PermGenError, caption=PermGen Errorを引き起こす]{source/PermGenError.java} -\end{table} \subsection{注意すべき記述} Aliceを記述する際に注意すべき記述がある。(ソースコード \ref{fig:NullPointerException}) @@ -103,5 +107,7 @@ Data Segmentが取得されるたびにこの値がデクリメントされていき、0になった時にThread Poolへ送られる仕組みとなっている。 値が0であるかを確認するのは別スレッドであるため、setKey以降に処理を記述すると、その処理が途中であってもThread Poolへ送られてしまい、nullpointerexception等のエラーが起こる可能性がある。記述自体は一般的なjavaの記述であるため一見してわかるものではない。また、データの取得にかかる時間次第で、エラーが出たり、出なかったりするので非常に厄介である。 \begin{table}[htbp] +\lstinputlisting[label=fig:use_asClass, caption=asClassの使用例]{source/AsClass.java} +\lstinputlisting[label=fig:PermGenError, caption=PermGen Errorを引き起こす]{source/PermGenError.java} \lstinputlisting[label=fig:NullPointerException, caption=実行するとNullPointerExceptionを起こす]{source/NullPointerException.java} \end{table} \ No newline at end of file diff -r b817e83013a7 -r 52dff3fd4f40 paper/chapter4.tex --- a/paper/chapter4.tex Wed Feb 13 18:24:42 2013 +0900 +++ b/paper/chapter4.tex Mon Feb 18 02:48:08 2013 +0900 @@ -1,9 +1,7 @@ \chapter{実験} -\label{chap:poordirection} +\label{chap:experiment} \section{実験説明} \section{検証結果} - - \section{考察} diff -r b817e83013a7 -r 52dff3fd4f40 paper/chapter5.tex --- a/paper/chapter5.tex Wed Feb 13 18:24:42 2013 +0900 +++ b/paper/chapter5.tex Mon Feb 18 02:48:08 2013 +0900 @@ -1,5 +1,37 @@ -\chapter{まとめと今後の課題} -\label{chap:poordirection} +\chapter{まとめ} +\label{chap:conclusion} + +\section{問題点} +今回の実装は、JavaによりCode Segment とData Segmentに必要なAPIを洗い出すためのものであった。 +この実装でもいくつかの問題が明らかになっている。 +\subsection{API} +Classを継承したり、Input Data SegmentやOutput Data Segmentの作成にfactory objectを使うのはJavaを使う際の技術できなものであり、AliceのAPI自体はJavaに固有である必要はない。むしろ、JavaのObject指向な記述が全体を煩雑にしている部分もある。updateはData Segmentの競合的な更新に使われるべきではないかと思われる。 +\subsection{SEDA} +Federated Lindaに比べて、通信のレスポンスが遅い原因の一つはSEDA architectureのせいだと思われる。SEDAはスループット重視の実装であり、多段のパイプラインのせいでレスポンスが遅れてしまう。実際スループットを使用しないほうがRingの結果は良くなる。 + +レスポンスが要求される部分のスケジューラを別にするなどの工夫が必要だと思われる。それを記述そのものに入れるのが良いかどうかには議論の余地がある。 + +\subsection{Message Pack} +今回は単純なMessageの転送の場合にもMessage Packのdecode / encodeが必要になる。これは単純にoverheadになる。encode / decode 抜きに直接処理できる方が望ましい。また、Data Segmentの一部修正にData Segmentを再構成を行うのは望ましくない。CeriumではInput Data SegmentとOutput Data SegmentをswapするAPIがあり、若干状況は複雑になるが良好な結果が得られている。この辺りは、ユーザーが特に記述しなくてもKeyを見て自動的に判断したほうが望ましいと思われるが、何かしらの制御方法も必要だと思われる。 + +\subsection{Key} +本実装ではData Segment相互の参照はKey経由となる。Lindaや分散実装では、それは妥当であるが、並列実装では、すべてのData SegmentをKVSに格納するのは性能的な問題を引き起こす。一方で、分散記述と並列記述がかけ離れてしまうのも好ましくない。現状はKVSはJavaのConcurrnet Hash mapを用いているが、今のベンチマークではそこが、ネックになっているわけではないと思われる。また、本来はKVSは持続性を持つべきだと思われる。そうすることで、トラブルで処理が途中で中断されてしまっても途中から処理を再開可能となる。 +\subsection{Java} +Ringの実験での異常なデータは、Javaの分散プログラミングではよく現れる。一つはJavaのGarbage Collectionの影響だと思われる。Aliceは全てのData SegmentはKVSに格納され、実行時のData SegmentはCode Segmentが activeな時のみメモリ上にある。この最大値は同時にActive Taskの量を見積もれば良い。従って、AliceにGCは必要ない。一方で、KVS上のデータは決してGCの対象にならない。しかし、それはGCに付加をかけてしまう。Alice自体はJavaで実装するのには向いていない。 +\subsection{拡張性} +分散アプリケーションでのプロトコルは常に変更されるものであり、Aliceもそれに対応する必要がある。Alice上で走るプロトコルは、Data Segment と Code Segment +によって決まる。Keyとトポロジーマネージャーをプロトコル別に用意すれば、複数のプロトコルを同時に走らせることが可能である。プロトコル間の互換性はいろいろあり得る。Data SegmentとCode Segmentの結びつきは弱いので、Data Segmentに値がない場合、あるいは、値が足りない場合に適切な値を設定することにより、古いCode Segmentを変更せずにプロトコルを拡張できると考えている。 +\section{今後の課題} + +今回、例題を作成することで、様々な問題点が浮き彫りになってきた。 +特に、Aliceがノード内における並列実行に対して、性能的な問題がある事がわかった。 +原因はLocal DSMからData Segmentを取得する際にもコピーが行われているからである。 +分散プログラムにおいてRemote DSMを通してData Segmentを取得または書き込みはコピーするしかないが、並列プログラムの場合はコピーをするのは望ましくない。 +Input Data Segment と Output Data Segmentが同じ場合にswap を行うように変更する必要がある + +object に対して操作をするには、インスタンスが必要になってくる。その場合Code Segmentを作成する際に直接渡す必要がある。 +しかし、それではCode SegmentとData Segmentでプログラミングをしているとは言い難い。 +インスタンスを保持するホルダーを用意し、APIを提供しそこから取得するようにするのが良いと思われる。 diff -r b817e83013a7 -r 52dff3fd4f40 paper/fig/sortflow.pdf Binary file paper/fig/sortflow.pdf has changed diff -r b817e83013a7 -r 52dff3fd4f40 paper/thesis.bib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/thesis.bib Mon Feb 18 02:48:08 2013 +0900 @@ -0,0 +1,198 @@ +@book{total, + author = "伊藤 和人", + yomi = "Kazuto Itoh", + title = "{\LaTeX} トータルガイド", + publisher = "秀和システムトレーディング", + year = 1991} +@book{latex, + author = "Leslie Lamport", + title = "A Document Preparation System {\LaTeX} User's Guide + \& Reference Manual", + publisher = "Addison Wesley", + address = "Reading, Massachusetts", + year = 1986, + note = "(Cooke, E., et al.訳:文書処理システム {\LaTeX}," # + "アスキー出版局 (1990))"} +@book{nodera, + author = "野寺 隆志", + yomi = "Takashi Nodera", + title = "楽々 {\LaTeX}", + publisher = "共立出版", + year = 1990} +@book{okumura, + author = "奥村 晴彦", + yomi = "Haruhiko Okudera", + title = "{\LaTeX} 美文書作成入門", + publisher = "技術評論社", + year = 1991} +@article{article1, + author = "桜井 貴文", + yomi = "Sakurai, Takafumi", + title = "直観主義論理と型理論", + journal = "情報処理", + volume = 30, + number = 6, + pages = "626--634", + year = 1989} +@article{article2, + author = "野口 健一郎 and 大谷 真", + yomi = "Noguchi, K and Ohtani, M", + title = "OSIの実現とその課題", + journal = "情報処理", + volume = 31, + number = 9, + pages = "1235-1244", + year = 1990} +@article{article3, + author = "Ssss Itoh and Nnnn Goto", + title = "An Adaptive Noiseless Coding for Sources with Big + Alphabet Size", + journal = "Trans. IEICE", + volume = "E74", + number = 9, + pages = "2495--2503", + year = 1991, + month = sep} +@article{article4, + author = "田中 {正次} and 村松 茂 and 山下 茂", + yomi = "Tanaka, S and Muramatsu, S and Yamashita, S", + title = "9段数7次陽的Runge-Kutta法の最適化について", + journal = "情報処理学会論文誌", + volume = 33, + number = 12, + pages = "1512--1526", + year = 1992} +@article{article5, + author = "K. Abrahamson and N. Dadoun and " # + "D. G. Kirkpatrick and T. Przytycka", + title = "A Simple Parallel Tree Contraction Algorithm", + journal = "J. Algorithms", + volume = 10, + number = 2, + pages = "287--302", + year = 1989} +@article{article6, + author = "田中 {正次} and others", + title = "9段数7次陽的Runge-Kutta法の次数条件式の解について", + journal = "情報処理学会論文誌", + volume = 33, + number = 12, + pages = "1506--1511", + year = 1992} + +@book{book1, + author = "J. D. Foley and others", + title = "Computer Graphics --- Principles and Practice", + series = "System Programming Series", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + edition = "2nd", + year = 1990} +@book{book2, + author = "千葉 則茂 and 村岡 一信", + yomi = "Chiba, N. and Muraoka, K.", + title = "レイトレーシングCG入門", + series = "Information {\&} Computing", + volume = 46, + publisher = "サイエンス社", + year = 1990} +@book{book3, + author = "Chang, C. L. and Lee, R. C. T.", + title = "Symbolic Logic and Mechanical Theorem Proving", + publisher = "Academic Press", + address = "New York", + year = 1973, + note = "(長尾真,辻井潤一訳: " # + "計算機による定理の自動証明, " # + "日本コンピュータ協会 (1983))"} +@booklet{booklet1, + author = "新世代コンピュータ技術開発機構", + title = "第五世代コンピュータプロジェクトの概要", + howpublished = "{FGCS'92}にて配布", + year = 1992} + +@inbook{inbook1, + author = "Knuth, D. E.", + title = "Fundamental Algorithms", + series = "Art of Computer Programming", + volume = 1, + chapter = 2, + pages = "371--381", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + edition = "2nd", + year = 1973} + +@incollection{incollection1, + author = "Schwartz, Aaaa Jjjj", + title = "Subdividing B{\'e}zier Curves and Surfaces", + booktitle = "Geometric Modeling: Algorithms and New Trends", + editor = "Farin, G. E.", + publisher = "SIAM", + address = "Philadelphia", + pages = "55--66", + year = 1987} + +@inproceedings{inproceedings1, + author = "Baraff, D", + title = "Curved Surfaces and Coherence for Non-penetrating + Rigid Body Simulation", + booktitle = "SIGGRAPH '90 Proceedings", + pages = "19--28", + editor = "Beach, R. J.", + address = "Dallas, Texas", + organization = "ACM", + publisher = "Addison-Wesley", + year = 1990} + +@manual{manual1, + organization = "Adobe Systems Inc.", + title = "PostScript Language Reference Manual", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + year = 1985} + +@mastersthesis{mastersthesis1, + author = "山下 義行", + yomi = "Yamashita, Y", + title = "文脈自由文法への否定の導入", + school = "筑波大学大学院工学研究科", + year = 1989} + + +@misc{misc1, + author = "斉藤 康己 and 中島 浩", + title = "{{\tt ipsjpapers.sty}}", + note = "(情報処理学会論文誌用スタイルファイル," # + "論文著者に配布)", + year = 1995} + +@phdthesis{phdthesis1, + author = "Weihl, W.", + title = "Specification and Implementation of + Atomic Data Types", + school = "MIT", + address = "Boston", + year = 1984} + +@proceedings{proceedings1, + title = "Proc. Intl. Conf. on Fifth Generation Computer + Systems", + organization = "Institute for New Generation Computer Technology", + volume = 1, + year = 1992} + +@techreport{techreport1, + author = "Ihsakat Aredon", + title = "{\TeX} 独稽古", + type = "Seminar on Mathematical Sciences", + number = 13, + institution = "Department of Mathematics, Keio University", + address = "Yokohama", + year = 1989} + +@unpublished{unpublished, + author = "情報処理学会論文誌編集委員会", + title = "{\LaTeX}による論文作成のガイド(第1版)", + note = "(論文著者に配布)", + year = 1995} diff -r b817e83013a7 -r 52dff3fd4f40 paper/thesis.tex --- a/paper/thesis.tex Wed Feb 13 18:24:42 2013 +0900 +++ b/paper/thesis.tex Mon Feb 18 02:48:08 2013 +0900 @@ -1,4 +1,5 @@ -\documentclass[a4j,12pt]{jreport} +\documentclass[a4j,11pt]{jreport} +\usepackage{setspace} \usepackage[dvipdfm]{graphicx} %\usepackage[dvips]{graphicx} \usepackage{listings,jlisting} @@ -77,7 +78,9 @@ \input{chapter5.tex} % 参考文献 -%\input{bibliography.tex} +\nocite{*} +\bibliographystyle{jplain} +\bibliography{thesis} % 謝辞 %\input{thanks.tex}