view FinalThesis/chapter4.tex @ 35:a95ea8f61214

update Slide and mid
author riono <e165729@ie.u-ryukyu.ac.jp>
date Sun, 16 Feb 2020 22:52:07 +0900
parents f9c3bb497e9c
children
line wrap: on
line source

\chapter{TreeVNC開発環境やソースコードの修正改善}
\label{chap:otherInplementation}

\section{Gradle 6.1対応}
TreeVNCはソースのbuildにGradleを使用している。しかし使用しているGradleのバージョンは4.8であった。これを現行の最新バージョンであるGradle 6.1でbuildを実行すると、build faildとなってしまう。

build faildの原因となっていたのは、MacOS用のapplicationに書き出すためのプラグインedu.sc.seis.macAppBundleのバージョンが古かったことが原因だった。これまで使用していたedu.sc.seis.macAppBundleのバージョンは2.1.7であったが、これを最新の2.3.0に変更することで、Gradle 6.1でソースコードのbuildが可能となった。

\section{java9以降のRetinaAPI対応}
現在のMacにはRetinaディスプレイが搭載されている。Retinaディスプレイとはこれまでに使用されていた液晶ディスプレイよりも画素が細かく、画面がより鮮明に描画されるディスプレイである。画素数が異なるため、画面配信のためには接続されているディスプレイが、液晶ディスプレイか、Retinaディスプレイかの判別が必要となる。

javaにはRetinaディスプレイ判別のためのAPIが提供されている。しかしjava9より大きな仕様変更があり、TreeVNCで使用しているRetinaのAPIは非推奨となってしまったため、書き換えを行なった。非推奨となったコードを以下のソースコード\ref{code:oldRetina}、書き換え後のコードを以下のソースコード\ref{code:IsRetina}、\ref{code:RetinaScale}に示す。

\newpage

\lstinputlisting[caption=java8以前のRetinaディスプレイAPI, label=code:oldRetina]{./src/RetinaScale_old.java}

\lstinputlisting[caption=Retinaディスプレイの判別関数, label=code:IsRetina]{./src/IsRetina.java}

\lstinputlisting[caption=Retinaディスプレイの表示倍率を取得する関数, label=code:RetinaScale]{./src/RetinaScale.java}

java8以前では表示倍率を取得し、その値よりRetinaディスプレイかを判断していた(ソースコード\ref{code:oldRetina} 中14行目)。java9以降ではRetinaディスプレイの判断を行えるAPIが提供された(ソースコード\ref{code:IsRetina} 中5行目)。
またソースコード\ref{code:RetinaScale}の6行目にて、接続しているディスプレイの表示倍率を取得するAPIも提供されため、例外を考える必要がなくなり、コード量が減少した。

\newpage

\section{デバッグオプションの修正}
TreeVNCのオプションの1つに-pオプションがある。通常、TreeVNCのデバッグを行うにはサーバ側とクライアント側の2つを同じPC上で実行する必要があった。また、ソースコードを変更後にはbulidを行わないとデバッグできないという煩わしさがあった。

-pオプションはその煩わしさを解消するために、自らとソケット通信を行うことでデバッグが可能となるオプションとして設計されている。しかし、TreeVNCの仕様変更等の理由により画面データとしてのRectnagleがうまく構成されず使用できないという状態だった。

Blockingの実装中は何度もデバッグを行う必要があったため、前述の煩わしさの解消のために-pオプションの修正を行った。

-pオプションが正常作動しなかった原因として、ディスプレイの選択を行なっていなかったことが挙げられる。設計当初の-pオプションはCUIでの動作を想定しており、ディスプレイがない場合もあるという想定だった。
そのため、画面配信用の画面が選択されておらず、画面データがうまく生成されない状況が発生していた。

これを、確実にGUIでビューワーを表示するという前提でディスプレイ選択を行うことで、正確に画面データの生成を行わせ-pオプションでのデバッグが可能となった。また、自身で画像データの圧縮しMulticast Queueにデータを送っているため、Blockingのルーチンがデバッグ可能となっている。