OpenJDK 9 の導入と probe3.2.0 の動作確認

JDK が Ver11 が最新になったようで、サーバーで OpenJDK 8 を使っているので、いずれ近いか遠いかわかりませんが、将来的にオラクルのサポート対象外になると思い、

OpenJDK9 のインストールと Tomcat9 + probe での動作をテストしてみました。

OpenJDK は、9.0.4
Tomcat は最新の 9.0.14
probe は最新の Version 3.2.0 (built at 2018-12-20T22:06:41Z)

を、VirtualBox の CentOS7 に導入したところ、
無事、ちゃんと動きました。


[root@localhost local]# java -version
openjdk version "9.0.4"
OpenJDK Runtime Environment (build 9.0.4+11)
OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode)
[root@localhost local]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) 

OpenJDK8 で ImageIO が原因未解決なエラーが多く、ImageMagick で代替したところ、脆弱性問題でよろしくないようで、PHP GD でのシェル利用による代替してましたが、

やはり、他に依存せず、JAVA で完結させるのがパフォーマンス上、管理上、ベストと思いますので、WEBアプリケーションでの動作チェックをしていくことにします。

OpenJDK9 は、まだ yum のパッケージがないので、下で教えて頂きました

https://weblabo.oscasierra.net/installing-openjdk9-on-centos7/

Windows で less +F


Linux でログファイルのリアルタイムのチェックで、 less +F 使ってますが、Windows でも出来ないか調べたところ、ありました。

PowerShell で出来ます。

 

PS C:\PathName> Get-Content -Path filename -wait -tail 0

ここで教えて頂きました : https://blogs.technet.microsoft.com/junichia/2013/11/11/managementget-content-tail/

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Windows PowerShellクックブック [ リー・ホームズ ]
価格:4400円(税込、送料無料) (2022/12/19時点)

PHP 3カ月カレンダーコマンドライン

Windows で Linuxシェルコマンドが使える busybox を入れたので、cal コマンドを試していて、3カ月カレンダーにしてみたくなり、作ってみました。

Windowsでは、busybox をインストールする必要あります。
Linux は calコマンドを素直に使ってます。

[ コード例 ]


<?php

/**
 * 横並び3カ月カレンダーテキスト取得
 * argv : なし
 * Update : 2019-01-22
 * Author : H.Tanaka
 */

$nowy = (int)date("Y");
$nowm = (int)date("m");

$m0 = $nowm - 1;
$m1 = $nowm;
$m2 = $nowm + 1;

$y0 = $m0 == 0 ? $nowy - 1 : $ynowy;
$y1 = $nowy;
$y2 = $m2 == 13 ? $nowy + 1 : $nowy;

$m0 = $m0 == 0 ? 12 : $m0;
$m2 = $m2 == 13 ? 1 : $m2;

$yary = [$y0, $y1, $y2];
$mary = [$m0, $m1, $m2];


$cmd = "";
if (DIRECTORY_SEPARATOR == "/") {   // Linux
  $cmd = "cal";
}
else {                              // Windows
  $cmd = "busybox64 cal";
}

$pos = 0;
$restxtary = [];
foreach ($mary as $m) {
  
  $y = $yary[$pos];
  $ccmd = $cmd." ".$m." ".$y;
  //echo $ccmd."\n";
  
  $resrows = [];    // ここで初期化しないと前月に追加される
  exec($ccmd, $resrows);
  $restxtary[] = $resrows;
  
  $pos++;
  
}
//var_dump($restxtary);

// 横並び3カ月カレンダー //
$calentxt = "";
for ($i = 0; $i<8; $i++ ) {
  for ($j = 0; $j<3; $j++ ) {
    $tmp = str_pad($restxtary[$j][$i], 20). "   ";
    $calentxt .= $tmp;
  }
  $calentxt .= "\n";
}

echo $calentxt;

?>


[ 実行結果 ]

c:\phppathname>php CalText3MH.php
   December 2018           January 2019          February 2019
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5                   1  2
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    3  4  5  6  7  8  9
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   10 11 12 13 14 15 16
16 17 18 19 20 21 22   20 21 22 23 24 25 26   17 18 19 20 21 22 23
23 24 25 26 27 28 29   27 28 29 30 31         24 25 26 27 28
30 31

busybox はこちら : https://busybox.net/about.html

[ 応用例 ]

GD を使って画像に書き込んでみる。

PHP GD 画像に文字列描画 (背景 枠線付)

PHP GD リファレンス

[ コード例 ]


<?php

/**
 * GD 画像 枠矩形描画付テキスト書き込み
 * argv : 1 : ソースファイル名, 2 : デストファイル名, 3 : 書込み文字列
 *        4 : フォント色, 5 : 背景色, 6 : フレーム色 (4-6 はオプショナル)
 */

// 引数取得 //
$srcfnm = $argv[1];
$dstfnm = $argv[2];
$text = $argv[3];

// 色指定 //
$rgb_font = $argv[4];
$rgb_fill = $argv[5];
$rgb_frame = $argv[6];

$rgb_font = !$rgb_font ? "00:00:ff" :  $rgb_font;     // フォント色 (既定は青)
$rgb_fill = !$rgb_fill ? "ff:ff:ff" :  $rgb_fill;     // 背景色 (既定は白)
$rgb_frame = !$rgb_frame ? "ff:00:00" :  $rgb_frame;  // 枠色 (既定は赤)

// 引数を16進文字列に分解して配列に入れる //
$fontcols = explode(":", $rgb_font);
$fillcols = explode(":", $rgb_fill);
$framecols = explode(":", $rgb_frame);


// +++ 色文字列を数値に変換 +++ //
// ImageColorAllocate用に10進配列にする //
$fontdecs = [];
foreach ($fontcols as $col) {
  $fontdecs[] = hexdec($col);
}
$filldecs = [];
foreach ($fillcols as $col) {
  $filldecs[] = hexdec($col);
}
$framedecs = [];
foreach ($framecols as $col) {
  $framedecs[] = hexdec($col);
}

//var_dump($filldecs);

// 画像サイズ取得 //
list($width, $height, $type) = getimagesize($srcfnm);
$rectx2 = (int) $width - 16;     // パネルの横幅

switch ($type) {
  case IMAGETYPE_JPEG:    // 2
    $img = imagecreatefromjpeg($srcfnm);
    break;
  case IMAGETYPE_PNG:     // 3
    $img = imagecreatefrompng($srcfnm);
    break;
  case IMAGETYPE_GIF:     // 1
    $img = imagecreatefromgif($srcfnm);
    break;
}

# 色を作る #
$imcol_font = ImageColorAllocate($img,  $fontdecs[0], $fontdecs[1], $fontdecs[2]);
$imcol_fill = ImageColorAllocate($img, $filldecs[0], $filldecs[1], $filldecs[2]);
$imcol_frame = ImageColorAllocate($img, $framedecs[0], $framedecs[1], $framedecs[2]);       


# UTF8へ変換 #
$text = mb_convert_encoding($text, 'UTF-8', 'auto');

// フォント //
if (DIRECTORY_SEPARATOR == "/") {
  $font = "/usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf";
}
else {
  $font = "C:\Windows\Fonts\msgothic.ttc";
}
///usr/share/fonts/VL-Gothic-Regular.ttf


// 背景を描画する //
/* img, x1, y1, x2, y2, color */
imagefilledrectangle($img, 8, 8, $rectx2, 30, $imcol_fill);

// 枠線幅 //
imagesetthickness($img, 2);

// 枠を引く //
/* img, x1, y1, x2, y2, color */
imagerectangle($img, 8, 8, $rectx2, 30, $imcol_frame);


// 文字を書き込む //
$fsz = $width <= 500 ? 10 : 12;    // 横幅が少ない場合、フォントを小さくする
/* img, テキストサイズ, アングル, X, Y, color, font, text */
ImageTTFText($img, $fsz, 0, 12, 26, $imcol_font, $font, $text);
//ImageTTFText($img, 11, 0, 12, 26, $imcol_font, $font, $text);


//ImageJPEG($img, "133458_05Text4.jpg");
//ImageJPEG($img, $dstfnm);
// ファイルに出力 //
$res = 1;
try {
  if ($type == IMAGETYPE_JPEG) {
    imagejpeg($img, $dstfnm, 100);
  }
  else if ($type == IMAGETYPE_PNG) {
    imagepng($img, $dstfnm, 9);
  }
  else {
    imagegif($img, $dstfnm, 100);
  }
}
catch (Exception $ex) {
  $res = 0;
}

// 解放 //
imagedestroy($img);

// 結果返却 連想配列に格納 //
$responce = [];
$responce["SrcW"] = $width;
$responce["SrcH"] = $height;
$responce["FSize"] = $fsz;
$responce["Result"] = $res;

// JSONに変換して出力 //
echo json_encode($responce, JSON_PRETTY_PRINT);

?>

PHP strpos() と strstr()

PHP で文字列が含まれるかどうかの判定で、Windows と Linux で挙動が違っていましたので、備忘録しておきます。
文字列が含まれるかどうかの判定は、strstr で行い、含まれる位置まで必要な場合は、strpos で行い、位置判定は型も判定する === と !== を使うべきで、 == は使わないことです。


<?php
	
function getColorConfig($spectxt) {

	$COLOR_CONFIG_D = "ff:ff:ff 00:86:00 cc:00:00";
	$COLOR_CONFIG_S = "ff:ff:ff e4:00:7f cc:00:00";


	if (strpos($spectxt, 'DEN ') !== false) {
  	  return $COLOR_CONFIG_D;
        }

	if (strpos($spectxt, 'SAN ') != false) {
          return $COLOR_CONFIG_S;
	}


	// 'SAN'で始まる文字列かどうかのチェック //
	/* Windows (Ver5.6) では意図したとおり動く 
         Linux (Ver7.1) では含まれてないと判定される 
         PHP の 0 は FALSE も意味するので
	*/
	if (strpos($spectxt, 'SAN ') == 0) {
          return $COLOR_CONFIG_S;
	}

	/* 試してないが、これは思った通りの動作をすると思う */
	if (strpos($spectxt, 'SAN ') === 0) {
          return $COLOR_CONFIG_S;
	}

	/* strpos() を strstr() に変更すれば、どちらでも意図した動作する */
	if (strstr($spectxt, 'DEN ')) {
          return $COLOR_CONFIG_D;
        }


	if (strstr($spectxt, 'SAN ')) {
          return $COLOR_CONFIG_S;
	}

} 

PHP 比較演算子 : http://php.net/manual/ja/language.operators.comparison.php

Qiita : https://qiita.com/kazu56/items/2c72d187438de07c2503

石ノ森 章太郎 : 新文明

現代もまた、新たな文明体系をつくり出さなければならない時期にきているのだとすれば、まさにトータルな感性が重要視される時代だ、といえるでしょう。
つまりレオナルド的な多才でしかもバランスのとれた人間が、どうしても必要になっているということです。

赤塚不二夫 : 話

頭のいいヤツは、
わかりやすく話す。

頭の悪いヤツほど、
難しく話すんだよ。