ラベル PostgreSQL の投稿を表示しています。 すべての投稿を表示
ラベル PostgreSQL の投稿を表示しています。 すべての投稿を表示

2024年4月12日金曜日

FreeBSD のアップグレード

庭の温湿度測定器が電池切れかデータを送って来なくなったので、取り外して充電。でも、Li電池はちゃんと3.7Vあるんだけどな~。 どっか別の所に問題があるのかな?と思いながら、久し振りにFreeBSDにアクセスしようとしたら xterm -display xxx.xxx.xx.xx:0.0が動かない!(ここが -display でなくて勘違いして -dispにしたのが、そもそものエラーの原因だったーオー馬鹿さん)

で、FreeBSDのアップグレード、アップデートしようと、作業開始(例によってココ参照)。 面倒なのでpkg でアップデートをしてゆくと、何故かphp関連がうまく動かない! 「うーん、この際OSのアップデートも、やっちまえ!」と作業の拡張、、、。 毎度の事ですが、これが命取りなんですよね。

ソースコードから、システム関係をアップデート(13.1-RELEASE-p7 -> 13.3-RELEASE-p1) を git pull /usr/src で行いましたが、元のソースが git で持ってきた物でなかったので、あったものを引っ越して、新規に git clone --branch releng/13.3 https://git.FreeBSD.org/src.git /usr/src で取ってきてから git pull /usr/src アプリのアップデートは面倒なので pkg を使って行ったところ、php のpostgreSQLからデータ取ってくるところが動いていない! 

php81のサポートが2024/11までとあったので、やむを得ず、ソースから最新のphp8.3.4をインストール。  やっぱりダメ! 何故か、postgresにアクセスできない!! そもそも、info.php で表示させても、PDO, pgsql, PDO_pgsql等のモジュールが出てこない! 丸1日四苦八苦して(phpのHello worldから、一つづつ確認作業)、結局はphp8.2.27をインストールしてinfo.phpを確認すると、右下の様にちゃんと必要なモジュールがイントールされており、問題解決。 php8.3.7の移植がまだ完全でないために、php83-extensionsでインストールされるモジュールのバージョンに齟齬がある為の問題の様でした。 これメタファイルなので、実体は/usr/ports/databases/php83-pgsql等にありますが同期が取れているのか??

また、php83-extensions でインストールされたモジュール群はmake deinstallでは削除できないので pkg info|grep php83 等として、インストールされているモジュールを確認して、pkg delete xxx と手動で削除する必要がありました。 モジュールの数が多いので、メンドウ! (パイプで流し込むことを考えた方がいいかも)

この2日、久し振りにFreeBSD弄って四苦八苦したら、随分とお腹が空くことを確認。 体重も少し減っていたので、外で運動するだけでなく、頭を使うのも、シェープアップに役立つのではないか?と思ってます。

何故かremoteの窓からgnome-terminalとしても、エラーが出て動かないので、ググってdbus-launch gnome-terminalが見つかったので、これで解決。 でも、何故?


 


2020年3月27日金曜日

JpGraphを久しぶりに弄って 一部問題解決。

室内と庭の温度、湿度のpostgreSQL DBが動くようになったので、今まで使っていた、HPをちょっと弄って化粧をしてみました。

JpGraphを使ってグラフを描かせていましたが、何故かグラフの各点の値表示が出来な
かったり、TrueTypeのフォントが使えていなかったりしたのを、一日がかりで修正。
  • 値の表示が出来なかった原因 ;  $graph->clearTheme()を設定していないと、表示をしてくれなかった。下のphpのソースコード参照
  • TrueTypeフォントのインストール ;  FreeBSDで動いているので、packageからwebfont(MSのTTF同等?)をインストール。 /usr/local/lib/php/jpgraph/jpg-config.inc.phpのTTF, MBTTFを実際にインストールされているディレクトリに指定する。
//
// UNIX:
//   CACHE_DIR /tmp/jpgraph_cache/
//   TTF_DIR   /usr/share/fonts/truetype/
//   MBTTF_DIR /usr/share/fonts/truetype/
//
// WINDOWS:
//   CACHE_DIR $SERVER_TEMP/jpgraph_cache/
//   TTF_DIR   $SERVER_SYSTEMROOT/fonts/
//   MBTTF_DIR $SERVER_SYSTEMROOT/fonts/
//
//------------------------------------------------------------------------
// define('CACHE_DIR','/tmp/jpgraph_cache/');
define('TTF_DIR','/usr/local/share/fonts/webfonts/');
define('MBTTF_DIR','/usr/local/share/fonts/webfonts/');
ついでにDBの欠落データを正しくグラフに反映させる為に、pg_fetch_rows()から、pg_fetch_result()に変更して、array()の該当する日時にデータが挿入されるように変更

require_once ('jpgraph/jpgraph.php');
require_once ('jpgraph/jpgraph_bar.php');
require_once ('jpgraph/jpgraph_stock.php');
require_once ('jpgraph/jpgraph_line.php');

  $ydata = array();
  $y1data = array();
  $ymax = array();
  $ymin = array();
  $yhumid = array();
  $ymaxhumid = array();
  $yminhumid = array();
  $ypressure = array();
  $ymaxpressure = array();
  $yminpressure = array();
  $sdata = array();

$conn = "hostaddr=192.168.?.?? dbname=XXXXX user=Who password=Are_you?";  //fake user/password
$link = pg_connect($conn);
if (!$link) {
   die ('Connection failed '.pg_last_error());
   }

  $result = pg_query("SELECT day, avg_temperature, max_temperature, min_temperature,avg_humidity, max_humidity, min_humidity, avg_pressure,max_pressure,min_pressure from dailydatacurrentmonth where location='MyRoom'" );
if (!$result){
   die('Query failed'.pg_last_error());
  }
$tempE=pg_fetch_result($result, pg_num_rows($result)-1, 0);  // chech when day ends
for ($i = 0, $j = 0, $k = 0; $i < $tempE; $i++){
   $temp =pg_fetch_result($result, $k, 0);  //  day
   if ($i == $temp-1) {
     $x_axis[$i] = $temp;
     $ydata[$i] = pg_fetch_result($result, $k, 'avg_temperature');
     $yhumid[$i] = pg_fetch_result($result, $k, 'avg_humidity');
     $ymaxhumid[$i] = pg_fetch_result($result, $k, 'max_humidity');
     $yminhumid[$i] = pg_fetch_result($result, $k, 'min_humidity');
     $ypressure[$i] = pg_fetch_result($result, $k, 'avg_pressure');
     $ymaxpressure[$i] = pg_fetch_result($result, $k, 'max_pressure');
     $yminpressure[$i] = pg_fetch_result($result, $k, 'min_pressure');
     $sdata[$j++] = pg_fetch_result($result, $k, 'min_temperature');
     $sdata[$j++] = pg_fetch_result($result, $k, 'min_temperature');
     $sdata[$j++] = pg_fetch_result($result, $k, 'max_temperature');
     $sdata[$j++] = pg_fetch_result($result, $k, 'max_temperature');
     $k++;
   } else {
     $x_axis[$i] = $i+1;
     $ydata[$i] = '';
     $yhumid[$i] = '';
     $ymaxhumid[$i] = '';
     $yminhumid[$i] = '';
     $ypressure[$i] = '';
     $ymaxpressure[$i] = '';
     $yminpressure[$i] = '';
     $sdata[$j++] = '';
     $sdata[$j++] = '';
     $sdata[$j++] = '';
     $sdata[$j++] = '';
   } 
}

  $result = '';
  $result = pg_query("SELECT day, avg_temperature from dailydatacurrentmonth_prevyear where location='MyRoom'" );
  if (!$result){
     die('Query failed'.pg_last_error());
  }
for ($i = 0; $i < pg_num_rows($result); $i++){
    $rows = pg_fetch_array($result, NULL, PGSQL_ASSOC);
    $y1data[$i] = $rows['avg_temperature'];
}

$close_flag = pg_close($link);

$graph = new Graph(750, 450);
$graph->clearTheme();
$graph->SetFrame(true);
$graph->SetScale("textlin",10, 40);
$graph->SetY2Scale("lin",10, 90);
$graph->img->SetMargin(50,30,20,90);
$graph->SetShadow();

$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
$graph->title->Set("Daily Max/Min/Avg Temperature & Avg Humidity of the Month");

//$graph->yaxis->title->SetFont(FF_ARIAL.FS_ITALIC, 10);
$graph->yaxis->title->Set("Temperature");
$graph->ygrid->Show(true,false);
$graph->y2axis->title->Set("Humidity");

$graph->xaxis->title->Set("Month-Day");
//$graph->xaxis->title->SetFont(FF_ARIAL.FSBOLD, 10);
$graph->xgrid->Show(true,true);

// Specify the tick lables
$graph->xaxis->SetTickLabels($x_axis);
$graph->xaxis->SetTextLabelInterval(1);

// Create the linear plot
$lineplot = new LinePlot($ydata);
$lineplot->SetColor("blue");
$lineplot->mark->SetType(MARK_UTRIANGLE);
$lineplot->value->show();
$lineplot->value->SetFont( FF_ARIAL, FS_ITALIC, 7 );
$lineplot->value->SetColor('darkred');
$lineplot->value->SetFormat('%0.1f');

$p1 = new StockPlot($sdata);
$p1->SetWidth(9);

$line2plot = new LinePlot($y1data);
$line2plot->SetColor("red");
$line2plot->mark->SetType(MARK_UTRIANGLE);
//$line2plot->value->show();
$line2plot->value->SetColor('darkred');
$line2plot->value->SetFont( FF_ARIAL, FS_BOLD, 10 );
$line2plot->value->SetFormat('%0.1f');


$barplot = new BarPlot($yhumid);
$barplot->SetColor("black");
$barplot->value->Show();
$barplot->value->SetFont( FF_ARIAL, FS_BOLD, 10 );
$barplot->value->SetFormat('%0.1f');

// Add the plot to the graph
$graph->Add($lineplot);
$graph->Add($line2plot);
$graph->AddY2($barplot);
$graph->Add($p1);

$graph->Stroke();

?>



2018年1月10日水曜日

RDBは便利だなー

RDBをRDBとして使うのはそれなりに大変ですし、何よりもデータのメンテナンスが大変ですが、この機能をちょっとした小道具として使うと便利なことがあります。
FlexRadioから中古のFlex6500の売りの広告が出ていたので、ちょっと計算。

Flex6500買ってから今日で何日経っていて、中古で売り出されている値段が$3000だから、買った時の値段から、一日当たりの償却価値は??で、この間にChallengeは幾つ増えたので、Challenge一つ当たりXX円という計算、、、 等というちまちました計算をするとき、買ってから何日?は、PostgreSQLの場合;
data_logger=# select 'today'::timestamp - '2013-11-01'::timestamp
;
 ?column? 
-----------
 1531 days

購入時の価格は567,825円(何故かPaypalで払っている)でしたので、現在の為替レート123円として、
(567825-3000X123) = 198825
(567825-3000X123)/1531= 130円/day
 ClublogのSlot chartによれば、2014から今までに633増加しているようなので、
198825/633 = 314円/Challenge

うーん、だからどうした。 アンテナとかタワーとか、OQRSとかSASEとかARRL/JARLの会費とか他にも色々コストエレメントはあるので、どうって話ではありませんが、Flex6500の60万円の買い物は安かったか?高かったか?自分の現時点での計算。(まだ、5-6年は納得して使えそうなので、もっと安くつくのかもしれませんが、、)
まー、納得の投資だったのかな、、、、。

要するに、コンディションが良くないので、時間潰しが必要なのですね、最近。
6O6Oはコンディションが悪いのか、時間帯が悪いのか、全くお呼びじゃないですねー、ここでは、、、。



2017年4月4日火曜日

Postgres/PHP/JpGraphで小物作り

以前ESP8266を使って一定時間ごとに室内の気温、湿度、気圧を送信する小物を作りましたが、そのデータを四六時中動いているFreeBSDのサーバに送信するようにしてありました。 そして、サーバではデータを受け取るとPostgreSQLのDBにため込むようにしていました。 
実際にはESPのSleepの仕様(?)の関係から一時間おきくらい(不正確)のデータアップロードになっていますで、計測時間はサーバがデータを受け取った時にしています。
このデータをWEBブラウザでグラフで見れるようにと、久しぶりにPHPでプログラムを組んでみました。 昔一度使ったことがあって、デバッグが面倒で好きになれませんでしたが、今回も自分のケアレスミスでまる一日悩まされることになりました。 グラフの描画プログラムの中にデバッグ用のprint文を埋め込むと”データが壊れているよ”ってエラーが出るんですよね、当たり前の話ですが、、。 このデバッグ用のスタブが見つけられずに苦しんでいましたが、今朝やっと見つけて何とか動くようになりました。 

取り敢えず、未完成ですが、備忘録のつもり。 デバッグスタブと$マークで苦しみました。
まだ、スッピンのブスなので、色々メイクして綺麗にしてあげないと、、、、。 慣れちゃえばそんなにムズイ事は無いのですが、使わないと直ぐに忘れちゃいますからね~。

取り敢えず、シャックのモニターで色々な所の温度とか、土壌水分とか見ながら必要な仕事をモニター画面からボタン一つで指示する、というズボラ・システムの基礎実験の初めの始め。

require_once ('jpgraph/jpgraph.php');
require_once ('jpgraph/jpgraph_line.php');

  $ydata = array();
  $ymax = array();
  $ymin = array();
  $yhumid = array();
  $ymaxhumid = array();
  $yminhumid = array();
  $ypressure = array();
  $ymaxpressure = array();
  $yminpressure = array();
 
$conn = "hostaddr=192.168.1.3 dbname=data_logger user=ken password=love4u";
$link = pg_connect($conn);
if (!$link) {
   die ('Connection failed '.pg_last_error());
   }

  $result = pg_query('SELECT yyyymmdd, avg_temp, max_temp, min_temp,avg_humid, max_humid, min_humid, avg_pressure,max_pressure,min_pressure from dailydata1month' );
if (!$result){
   die('Query failed'.pg_last_error());
  }

for ($i = 0; $i < pg_num_rows($result); $i++){
    $rows = pg_fetch_array($result, NULL, PGSQL_ASSOC);
    $x_axis[$i] = $rows['yyyymmdd'];
    $ydata[$i] = $rows['avg_temp'];
    $ymax[$i] = $rows['max_temp'];
    $ymin[$i] = $rows['min_temp'];
    $yhumid[$i] = $rows['avg_humid'];
    $ymaxhumid[$i] = $rows['max_humid'];
    $yminhumid[$i] = $rows['min_humid'];
    $ypressure[$i] = $rows['avg_pressure'];
    $ymaxpressure[$i] = $rows['max_pressure'];
    $yminpressure[$i] = $rows['min_pressure'];
}

$close_flag = pg_close($link);


$graph = new Graph(750, 350,"auto");
$graph->SetFrame(true);
$graph->SetScale("textlin",0, 40);
$graph->SetY2Scale("lin",0, 1500);

$lineplot = new LinePlot($ydata);
$lineplot->SetColor("blue");
$lineplot1 = new LinePlot($ymax);
$lineplot1->SetColor("red");
$lineplot2 = new LinePlot($ymin);
$lineplot2->SetColor("orange");

$graph->Add($lineplot);
$graph->Add($lineplot1);
$graph->Add($lineplot2);

$graph1 = new Graph(750, 350,"auto");
$graph1->SetFrame(true);
$graph1->SetScale("textlin",0, 100);

$lineploth = new LinePlot($yhumid);
$lineploth->SetColor("blue");
$lineploth1 = new LinePlot($ymaxhumid);
$lineploth1->SetColor("red");
$lineploth2 = new LinePlot($yminhumid);
$lineploth2->SetColor("orange");

$graph1->Add($lineploth);
$graph1->Add($lineploth1);
$graph1->Add($lineploth2);

$lineplotp = new LinePlot($ypressure);
$lineplotp->SetColor("blue");
$lineplotp1 = new LinePlot($ymaxpressure);
$lineplotp1->SetColor("red");
$lineplotp2 = new LinePlot($yminpressure);
$lineplotp2->SetColor("orange");

$graph->Add($lineplotp);
$graph->Add($lineplotp1);
$graph->Add($lineplotp2);

//$graph->Stroke();
$graph1->Stroke();

?>
 

WSJT-x Super F/H

 WSJT-x使い始めてから随分経ちます(JT65しかなかった頃から)が、FT8のF/Hの使いがっ手の悪さ、MSHVの方が利用されている実態、F/HでFoxがマルチで返答すると信号が弱くなる、などからSuperF/Hが実装されましたね。  そこまでは、問題なく理解していたのですが...