Mercurial > hg > Papers > 2020 > riono-thesis
changeset 24:fce3f9c18d8d
add src and update chapter4
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 14 Feb 2020 23:11:38 +0900 |
parents | e18aecd16936 |
children | f98010ed4fa9 |
files | FinalThesis/chapter4.tex FinalThesis/main.pdf FinalThesis/main.tex FinalThesis/src/IsRetina.java FinalThesis/src/RetinaScale.java FinalThesis/src/RetinaScale_old.java riono-thesis.mm |
diffstat | 7 files changed, 109 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/FinalThesis/chapter4.tex Fri Feb 14 18:21:24 2020 +0900 +++ b/FinalThesis/chapter4.tex Fri Feb 14 23:11:38 2020 +0900 @@ -2,9 +2,38 @@ \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オプションでのデバッグが可能となった。 -\section{デバッグ環境の構築}
--- a/FinalThesis/main.tex Fri Feb 14 18:21:24 2020 +0900 +++ b/FinalThesis/main.tex Fri Feb 14 23:11:38 2020 +0900 @@ -7,7 +7,7 @@ \usepackage{cite} \usepackage{url} \usepackage{scalefnt} - +\usepackage{listings} \usepackage{pxjahyper} @@ -39,6 +39,29 @@ \setlength\abovecaptionskip{0pt} \begin{document} +\lstset{ + language=java, + tabsize=2, + numbers=left, + frame=single, + basicstyle={\ttfamily\footnotesize}, % + identifierstyle={\footnotesize}, % + commentstyle={\footnotesize\itshape}, % + keywordstyle={\footnotesize\bfseries}, % + ndkeywordstyle={\footnotesize}, % + stringstyle={\footnotesize\ttfamily}, + breaklines=true, + captionpos=t, + columns=[l]{fullflexible}, % + xrightmargin=0zw, % + xleftmargin=1zw, % + aboveskip=1zw, + numberstyle={\scriptsize}, % + stepnumber=1, + numbersep=0.5zw, % + lineskip=-0.5ex, +} +\def\lstlistingname{ソースコード} % タイトル \maketitle
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FinalThesis/src/IsRetina.java Fri Feb 14 23:11:38 2020 +0900 @@ -0,0 +1,6 @@ + public boolean getIsRetinaDisplay(int shareScreenNumber) { + GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); + final GraphicsDevice[] devices = env.getScreenDevices(); + GraphicsConfiguration conf = devices[shareScreenNumber].getDefaultConfiguration(); + return ! conf.getDefaultTransform().isIdentity(); + }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FinalThesis/src/RetinaScale.java Fri Feb 14 23:11:38 2020 +0900 @@ -0,0 +1,8 @@ +public static int getRetinaScale(int shareScreenNumber) { + int scale = 1; + GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); + final GraphicsDevice[] devices = env.getScreenDevices(); + GraphicsConfiguration conf = devices[shareScreenNumber].getDefaultConfiguration(); + scale = (int)conf.getDefaultTransform().getScaleX(); + return scale; + }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FinalThesis/src/RetinaScale_old.java Fri Feb 14 23:11:38 2020 +0900 @@ -0,0 +1,20 @@ +public static int getRetinaScale(int shareScreenNumber) { + int scale = 1; + GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); + final GraphicsDevice[] devices = env.getScreenDevices(); + + try { + Field field = devices[shareScreenNumber].getClass().getDeclaredField("scale"); + + if (field != null) { + field.setAccessible(true); + Object retinaScale = field.get(devices[shareScreenNumber]); + + if (retinaScale instanceof Integer) { + scale = (Integer) retinaScale; + return scale; + } + } + } catch (Exception ignore) {} + return scale; +}
--- a/riono-thesis.mm Fri Feb 14 18:21:24 2020 +0900 +++ b/riono-thesis.mm Fri Feb 14 23:11:38 2020 +0900 @@ -39,7 +39,7 @@ <node CREATED="1581591179689" ID="ID_1334851042" MODIFIED="1581591185747" TEXT="先行研究"> <node CREATED="1581591189182" ID="ID_194833918" MODIFIED="1581591201877" TEXT="1ラインで半分、半分"/> </node> -<node CREATED="1581581091049" ID="ID_108796196" MODIFIED="1581581112405" TEXT="Rectangleの個数が1~N個から1~3個になる"> +<node CREATED="1581581091049" ID="ID_108796196" MODIFIED="1581674778859" TEXT="Rectangleの個数が1個から1~3個になる"> <node CREATED="1581581176641" ID="ID_1331144395" MODIFIED="1581581193708" TEXT="各Phaseの説明"/> </node> </node> @@ -52,6 +52,10 @@ <node CREATED="1581578986016" ID="ID_953146837" MODIFIED="1581582025419" POSITION="right" TEXT="TreeVNCの修正"> <node CREATED="1581579001483" ID="ID_460490271" MODIFIED="1581579012139" TEXT="Gradleの最新版対応"/> <node CREATED="1581579013064" ID="ID_972768773" MODIFIED="1581579025263" TEXT="RetinaAPIをjava11に対応"> +<node CREATED="1581674752142" ID="ID_806190282" MODIFIED="1581674758241" TEXT="Retinaディスプレイとは"/> +<node CREATED="1581674784897" ID="ID_289765074" MODIFIED="1581674793525" TEXT="javaのAPI"> +<node CREATED="1581674794092" ID="ID_636793795" MODIFIED="1581674815909" TEXT="java8以前とjava9以降でAPIが変更された"/> +</node> <node CREATED="1581579888471" ID="ID_1588121025" MODIFIED="1581581880187" TEXT="ex: 変更したコードを貼る"/> </node> <node CREATED="1581579027357" ID="ID_1166848043" MODIFIED="1581579046272" TEXT="-p オプションでデバッグ可能になった"/> @@ -134,11 +138,25 @@ </node> </node> <node CREATED="1580926577657" ID="ID_1208584088" MODIFIED="1580926589549" POSITION="left" TEXT="やったこと"> -<node CREATED="1580926590109" ID="ID_432214879" MODIFIED="1580926603899" TEXT="Gradleの最新版に対応"/> -<node CREATED="1580926604757" ID="ID_440901689" MODIFIED="1580926618662" TEXT="RetinaAPIをjava11に対応"/> <node CREATED="1580926636276" ID="ID_712918922" MODIFIED="1580926648759" TEXT="ブロッキング"/> +<node CREATED="1580926590109" ID="ID_432214879" MODIFIED="1581670942062" TEXT="Gradleの最新版(6.1)に対応"> +<node CREATED="1581670942607" ID="ID_1787037031" MODIFIED="1581670954736" TEXT="これまでは4.8だった"/> +</node> +<node CREATED="1580926604757" ID="ID_440901689" MODIFIED="1580926618662" TEXT="RetinaAPIをjava11に対応"> +<node CREATED="1581674936569" ID="ID_639861613" MODIFIED="1581674956846" TEXT="液晶ディスプレイよりも細かく描画される"/> +<node CREATED="1581674957829" ID="ID_275455912" MODIFIED="1581674983188" TEXT="TreeVNCでも判断が必要"> +<node CREATED="1581674994973" ID="ID_1749871398" MODIFIED="1581675005766" TEXT="通常のディスプレイとは異なるため"/> +</node> +<node CREATED="1581675056324" ID="ID_408533724" MODIFIED="1581675068551" TEXT="java9以上より非推奨のAPIを使っていた"/> +</node> <node CREATED="1581426652807" ID="ID_390140448" MODIFIED="1581426663644" TEXT="デバッグ環境を整えた"> <node CREATED="1581426664019" ID="ID_1878703111" MODIFIED="1581426668359" TEXT="-p オプション"/> +<node CREATED="1581675109254" ID="ID_420471956" MODIFIED="1581675125988" TEXT="ディスプレイ選択ルーチンを含んでいなかった"> +<node CREATED="1581675146140" ID="ID_1626771715" MODIFIED="1581675161088" TEXT="デバッグ時にディスプレイを持っているかわからなかった"> +<node CREATED="1581675127344" ID="ID_770215795" MODIFIED="1581675144894" TEXT="デバッグしている時点で確実にディスプレイはある"/> +</node> +</node> +<node CREATED="1581675181104" ID="ID_1798436804" MODIFIED="1581675206834" TEXT="サーバとクライアントを二つ立ち上げて接続を行う必要がなくなった"/> </node> </node> <node CREATED="1580926503596" ID="ID_897446703" MODIFIED="1580926564774" POSITION="left" TEXT="今後の課題">