\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvips]{graphicx}
\usepackage{picins}
\usepackage{fancyhdr}
%\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}} 琉球大学主催 工学部情報工学科 中間発表予稿}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\begin{document}
\title{授業やゼミ向けの画面共有システムTreeVNCの機能拡張}
\author{115747H 大城美和 {}{} 指導教員 : 河野真治}
\date{}
\maketitle
\thispagestyle{fancy} 

\section{はじめに}

% 目的を先に書く
本研究では、
ゼミや講義の質を高め、快適にプレゼンテーションを聴講でき、
参加者同士が充分なコミュニケーションを取れることを目的としている。
%TreeVNCに新たな機能の実装を行う。
本研究室では、TreeVNCという画面共有システムを開発している。
TreeVNCに新たな機能の実装を行っていく。

% TreeVNCの負荷分散の話
TreeVNCは、接続しに来たクライアントをバイナリツリー状に接続する。
多人数で使用する場合でも、各nodeに最大2台分のクライアントしか接続されない。
従来のVNCの場合、rootに多人数分のクライアントが接続される。
TreeVNCとVNCとでは、配信する画像データをコピーする回数が違う。
TreeVNCは、rootへの負担を各nodeに分散するため、
処理性能の低下を防いでいる。

% 画面共有ボタンの話
ゼミで画面共有を行う場合、発表者が頻繁に入れ替わる。
プロジェクタを使用している場合、
入れ替えの度にケーブルを挿し直す必要がある。
TreeVNCには、画面共有ボタンが付いており、
発表者はそれを押すことによって、画面を切り替えをスムーズに行える。
\begin{figure}[htpb]
  \begin{center}
    \includegraphics[width=90mm]{pic/TreeVNC.eps}
  \end{center}
  \label{fig:figure1}
  \caption{TreeVNCの図}
\end{figure}

\newpage

\section{VNC}
VNC(Virtual Network Computing)は、
RFBプロトコルを使用し遠隔操作を行うリモートデスクトップソフトである。
VNCはサーバ側とクライアント(ビューア)側に分かれていて、
サーバを起動し、クライアントがサーバに接続を行い遠隔操作を可能にする。


\section{TreeVNC}
TreeVNCは、TightVNCのjava版のビューアを元に
作成された画面共有システムである。


\section{TreeVNCのリファクタリング}
TreeVNCをリファクタリングを行い、大幅な変更を加えた。


  \subsection{port番号の変更}
  TreeVNCは複雑の分散アルゴリズムを用いたシステムであり、
  デバッグを行う環境を整える必要がある。

  従来のTreeVNCでは、固定長ポートを複数利用していた。
  そのせいで通信プロトコルが複雑になり、
  1台で複数のTreeVNCを立ち上げることができなかった。

  ダイナミックにportを変更することによって、
  1つのnodeに対して複数のTreeVNCを起動することを可能にした。
  最低限のソケットポートを開けることによって、
  メモリの使用を抑えた。

  rootと子node間の通信を行うmessageは以下である。

  子nodeが最初にrootへと通信を行うmessage
  (FIND\_ROOT、FIND\_ROOT\_REPLY)、
  node間の接続を行うmessage
  (CONNECT\_TO\_AS\_LEADER、CONNECT\_TO)、
  どのnodeと接続するかを知らせるmessage
  (WHERE\_TO\_CONNECT)、
  親nodeとの接続が切れてしまった場合のmessage
  (LOST\_PARENT)、
  新しいnodeが接続した場合のmessage
  (NEW\_NODE)、
  クライアントが画面共有ボタンを押した際のmessage
  (SERVER\_CHANGE\_REQUEST)、
  rootとnode間の通信における遅延を計測するためのmessage
  (CHECK\_DELAY\_REPLY)


  \subsection{Treeの構成の変更}

  TreeVNCを、複数のネットワークインターフェイスで
  使用できるようにリファクタリングを行った。

  従来のTreeVNCは、単一のネットワークでしか使用出来なかった。
  複数のネットワークインターフェースで、
  別の木構造を形成するように設計し直した。

  TreeVNCは、rootがnodeListというリストを持って木構造を管理している。
  複数のネットワークインターフェースで木構造を形成する場合、
  このnodeListをネットワークインターフェース毎に作成しておく。
  新しいnodeを接続する際、nodeのネットワークインターフェースを取得し、
  どのnodeListに登録されるかが決まる。
  こうすることによって、TreeVNCを複数のネットワークインターフェイスで
  使用することができる。

\begin{figure}[htpd]
  \begin{center}
    \includegraphics[width=90mm]{pic/MultiNetworkTree.eps}
  \end{center}
  \caption{マルチネットワークに対応したTreeVNCの図}
  \label{fig:figure2}
\end{figure}



  \subsection{ホスト切り替え時の挙動の修正}
  画面の切り替えを行う際、ホスト側の画面の
  ビデオフィードバックが生じてしまい、
  その結果が他のユーザに共有されてしまう問題を解決した。

  ホストを切り替える際にviewerを閉じる様、設計した。
  また、元のホストでは、viewerが立ち上がる様にした。

  ビデオフィードバックが共有されないよう、
  手動でviewerを最小化する必要がなくなった。


\section{まとめ}
TreeVNCに上記の様なリファクタリングを行うことによって、
今後の開発環境を整い、
通信できるネットワークインターフェースの幅が広がり、
TreeVNCの利便性が向上した。




\section{今後の課題}
  \subsection{画像データの遅延}
  現在のTreeVNCでは、
  全画像データの書き換えが立て続けに起こってしまった場合、
  データの受け渡し処理で遅延が発生する。

  VNCServerから立て続けに大きい画像データが送信されたことを検知し、
  送られてきた全てのデータを画面に出力するのではなく、
  最新のデータのみを取得し出力するといった実装を行う。


  \subsection{エラーハンドリング}
%  SeverChange時の子nodeのエラーメッセージがrootに出力される。
  クライアントが画面の切替を行った際に生じた
  クライアントのエラーが、rootに出力されるという問題がある。

  クライアントのエラーを検出した際にそのクライアントのIDを取得する。
  木構造を下に辿って、
  エラーメッセージを含むデータを
  クライアントに送信する。
  下へと降る際、各nodeでIDの確認をし、
  一致した箇所でエラーメッセージを出力するような実装を行う。


%\section{新機能の実装}
%%参加者同士の充分なコミュニケーションを提供するために、以下の機能が考えられる。
%TreeVNCを使用し、参加者が充分なコミュニケーションを行うために、以下の機能が考えられる。


  \subsection{音声データの共有}
  現在TreeVNCが共有しているのは画面のデータのみである。
  遠隔からプレゼンテーションや授業を聴講したい場合、
  画面のデータに加えて音声データが欲しい。

  TreeVNCに、画像データと共に音声データを追加する。



  \subsection{画面の大きさをホスト側で変更できる}
  現在のTreeVNCは、ホスト側の画面全体を送信している。
  マルチディスプレイを持っているホストだと、
  2つの画面が共有されてしまう。
  これでは発表者が切り替わる毎に、
  クライアント側で画面の大きさを手動で変更しなければならない。
  そこで、画面の大きさをホスト側で変更したい。

  ホスト側にviewerの代わりに枠を用意し、
  その枠内のデータのみを共有するといった機能を追加する。
  この機能を追加することによって、
  本来共有する必要のないデータを共有することがなくなる。



\begin{thebibliography}{9}

\bibitem{1}
  TightVNC: VNC-Compatible Free Remote Control / Remote Desktop Software\\
  \verb|http://www.tightvnc.com/|
\bibitem{2}
  谷成雄, 河野真治, 授業やゼミ向けの画面共有システムTreeVNCの設計と実装 A Screen Sharing System using Tree Structure for Seminar and Classwork 平成25年度 学位論文(修士)


\end{thebibliography}
\end{document}
