ブログを検索

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

2024/09/16

MySQL で SELECT into outfile 出来なくてハマった件

 Windows上の MySQL で SELECT into outfile で CSVファイルをエクスポートしようとしてハマったので残しておく

環境
Windows10 Pro バージョン 1809
MySQL 8.4.0

という環境で

SELECT * FROM table1
into outfile 'C:/Users/User/Downloads/file.csv' CHARACTER SET SJIS fields terminated by ',' enclosed by '"' escaped by '"' lines terminated by '\r\n';

としてダウンロードフォルダに file.csv を作りたかったが下記エラーになる

General error: 1 Can't create/write to file 'C:\Users\User\Downloads\file.csv' (OS errno 13- Permission denied)

my.ini に

secure-file-priv="C:/Users/User/Downloads"

を記述してあり
SELECT @@global.secure_file_priv;
で確認すると C:\Users\User\Downloads\ になっているので MySQL の設定はOK

C:/Users/User/Downloads フォルダのプロパティで セキュリティタブ選択 → 編集 → 追加 → 
「選択するオブジェクト名を入力してください」というテキストボックスに
NETWORK SERVICE と入力 → OKボタン押下
セキュリティタブ選択直後のウインドウに戻ったら NETWORK SERVISE 行を選択し、書き込みの許可にチェックを入れ OKボタン押下
これで解決した。つまり MySQL はネットワークを介してファイルを生成するぽく!? Windowsのセキュリティ設定不足がエラー原因だった
日本語の対処情報は見つけられなかったのでレアケースなのかな???
それともワタクシは検索が下手なのかな???
ともあれ解決したのでOK

2024/09/13

地理院地図上にピン立てしてみた

 仕事で地図上に複数のピンを立てる必要が出てやってみたことのメモ

不特定多数の人に見てもらうサイトを作っていて、「市区町村」を選ぶとそこを中心にした地図を表示し、あらかじめ登録していた5000件ほどの場所をピン表示することになった。この地図は別タブで開く

有料のAPIは使わず無料でやれることが条件

サーバサイドから見ると、フロントから市区町村がPOSTされてくるので該当する役所の緯度経度を求めてそれを中心にした地図を表示、地図にはあらかじめピンを登録しておく。みたいなイメージ

まず思いつくのが Googleマップでピンを立てることだが、手動で複数のピンを立ててみて公開することは出来たものの、5000件の場所を手動では登録したくないのでアップロードで登録しようとしてみたらレイヤー毎に2000件という制限があるようで面倒になって断念

次に Googleマップでピンを立てる別サービスを探して2つほど見つかったが既に廃止されているサービスもあって、継続して使っていけるか不安になって断念

地理院地図に複数ピンを立てるのは簡単のようなのでやってみたら本当に簡単だった。表示時に中心緯度経度も指定できたのでこの手順をメモとして残しておく

まずはピン立てする元データのCSVファイルを用意する

中身はこんな感じのワタクシオリジナルのフォーマットだがある程度自動認識してくれるようで 緯度,経度 が含まれているCSVファイルならフォーマットや項目は自由で良いようだ

ちなみにファイル名は何でもよいが文字コードはs-jis

コード,市区町村,緯度,経度,URL
1000,北海道,43.064325,141.346878,https://www.pref.hokkaido.lg.jp/
1100,札幌市,43.062061,141.354432,https://www.city.sapporo.jp/
1101,札幌市 中央区,43.061434,141.353649,http://www.city.sapporo.jp/chuo/
1102,札幌市 北区,43.090693,141.340882,http://www.city.sapporo.jp/kitaku/

地理院地図上にCSVファイルをドロップする

自動でCSV内の「緯度」「経度」列を認識するので「上記の内容で読込開始」ボタン押下

地図にピンが表示されるので、地図中心位置をいい感じに手動調整する

地図のズームレベルをいい感じに手動調整する 横手市湯沢市レベルだとズーム12くらい!?秋田市盛岡市レベルだとズーム10くらい!?

↑ このズームレベルや中心位置が後で表示する際の初期値として再現されるので調整するのだ

地理院地図で画面上部「共有」→ 「</>」 クリック → 「上記のHTMLを保存」ボタン押下で、テキストボックスに表示されたHTMLをファイル出力すればピン立てした状態で地図を保存できる

「※HTML は一時的なものとしてご利用ください。作図情報は、作図機能を使ってファイルに保存することをおすすめします。」とあるがJavaAcriptの処理が重くてブラウザが応答しなくなった。ピンの数が多すぎなのかな!?

あとはこのHTMLファイルをブラウザにドロップすればいつでもピン立て済みの地理院地図を表示できる

なお、HTMLファイルの中をテキストエディタで見てみると

var vURL_Site = "/index_pm.html?postmessage=1#

で始まる行がある

実際には

var vURL_Site = "/index_pm.html?postmessage=1#10/39.166271/140.62088/&base=std&ls=std&disp=1&vs=c1g1j0h0k0l0u0t0z0r0s0m0f1";

のようになっていて

var vURL_Site = "/index_pm.html?postmessage=1#

に続いている部分を書き換えて変更することで表示を微調整することが可能

水色部分の数字は地図のズームレベルで数字が大きいほど拡大表示する(最大値18)

黄色部分は地図の中心を指定する緯度(世界測地系)

緑色部分は  〃                        経度

実際にサイトで使用する場合、これらの値をサーバサイドで指定された市区町村によって書き換えて表示するようにした


2024/06/13

【復旧済】 アメダスデータ取得が止まっていたので復旧させた

 自動で横手市のアメダスデータをチラ見してsqlite3のデータベースファイルに蓄積しているんですが

$ ls -l measure.db
-rw-r--r-- 1 pi pi 44851200  4月  6 08:00 measure.db
4月6日 08:00 を最後にデータを取得出来ていないことに気付いた
取得するスクリプトを手動で実行してみると
database disk image is malformed
と出る

sqlite3のデータベースファイルが論理的に壊れているぽい

再度確認してみると
$ sqlite3 measure.db  "PRAGMA integrity_check"
Error: database disk image is malformed
やっぱり壊れている

$ ls -l measure.*
-rw-r--r-- 1 pi pi 44851200  4月  6 08:00 measure.db
44MBytesか、ずいぶん大きくなったな 汗

下記で修復
$ sqlite3 measure.db ".recover" | sqlite3  temp.db
このくらいのサイズのデータベースファイルだと60秒かかった


修復して出来た temp.db ファイルを正規のファイル名に変更して復旧した
$ mv temp.db measure.db

$ ls -l measure.*
-rw-r--r-- 1 pi pi 31346688  6月 13 08:46 measure.db

作り直しでサイズが小さくなった

以上

2023/03/03

突然 イカ(烏賊)について語る

自分の中で最近(なぜか)イカについて盛り上がってきているので忘れないようメモしておく

30年くらい経つだろうか。

かなり前から「イカ」が好きで今でも好きです。

好きというのは鑑賞したり釣ったりではなく食べると美味しいので好きなのです。

毎日のように食す訳ではありませんが、何かのイベントをトリガにして食べます。

例えば、新幹線で出張に行くとき東京駅で乗り換えるタイミングで駅構内の回転ずし店でイカとイカとイカとイカを食した後、締めにイカを食します。
この時、一切迷いがないので入店から会計完了まで5分以内です

あとは今も月イチくらいで行くココイチでは必ず「イカサラダ」を注文します。
ココイチのイカサラダはイカリングとエンペラが入っているイカのから揚げ乗せサラダです。

実はサラダは不要なんですが、イカを食すために「イカサラダ」を注文します。

ついでなのでサラダも食べますが「今度からトッピングのイカにしよう」と思いつつ「イカサラダ」を注文して30年以上経ちます。

はじめてココイチに行ったのは30年以上前で社会人1年目のときでした。会社の先輩に車で連れていってもらったのがココイチとの出会いでした。たしか青葉台店だったような!?

その後も年に数回の頻度でココイチに行きました。その当時は「ココイチに行きたい」とか「ココイチのカレー食べたい」という感じではなく、ファミレスのひとつとしての位置付けで他のファミレスと同じ程度の利用でした。

そんなある日、ワタクシのココイチ熱が高まる出来事がありました。

半年くらいの長期出張で名古屋のホテルに滞在していた時、東海地方の方には申し訳ないんですが、食事が口に合わず食べ物に苦労していました。いやワタクシの舌が東北仕様なもので口に合わないと感じただけで多くの方にとって美味しいハズなんですけどね 汗

休日やることもなく「大須」の電気街をブラブラ歩いてて、あるココイチの前を通ったときにハッと気付きました

「あれ?ついさっきもココイチあったな」

と思って振り返ると通り過ぎたばかりのココイチがあった。

へ~こんなこともあるんだな~珍しいな~と思いながら10メートル先の交差点で信号待ちしていると別のココイチが視界に入った 汗

「名古屋ではコンビニよりココイチのほうが多いのか???」と思いつつ視界の先にある店に入ってみるとワタクシの知っているココイチとは明らかに違う、まるで喫茶店のような間取りにオドオド戸惑ったワタクシ 笑

ですが、間取りに激しい違和感を感じながらも食したカレーはまさにココイチのカレーであり食べ物に苦労していたワタクシにはこれまで食したココイチカレーより数倍おいしく※感じられました。※当社比

ここでワタクシの脳の不揮発性の部分に「ココイチ サイコー」と刻まれたのでした

あ、ココイチで話が逸れました。イカの話でした。

「イカが好き」というと「イカソーメン」とか「イカ刺」も好きだと思われがちですが寿司を除いてイカの「刺身系」はあまり好きではありません。

好きだの嫌いだの勝手に書き散らしましたがワタクシが作れるものといえば第3世代言語のコンピュータプログラムくらいで料理は作れません。でもイカリングとイカの姿焼きは一度は作ってみたい憧れの料理なのです。これが言いたかった。長い 笑

以上

2023/02/05

自宅物置で古い電動インパクトドライバを発見

 自宅の物置を整理していて電動インパクトドライバ(Nationalブランド 松下電工 EZT108)を発見しました。専用ケースに入っていて中には充電器もありました。

なぜインパクトドライバがあるのか謎ですが、長年放置されていたせいか付属の純正バッテリー(EZT901)がダメになっているようだったのでアマゾンで互換品を注文しました。

この互換バッテリーは2個セットで 3,799円と格安でした。

互換バッテリーはインパクトドライバ附属の純正充電器(EZT002)で充電出来たので試運転。
12V仕様のインパクトドライバなのでパワーが無いだろうと期待していませんでしたが思っていたよりはパワーがあり家のまわりの雪囲いやワタクシのホビー用途なら充分そうです。

ほかにも便利なツールが出てくるかもしれないので物置の整理を継続していこうと思います

2022/12/31

1967製のカラダが壊れたので修理中

 12/28の夜、自宅2階階段から落ちて近くの病院に緊急搬送され、壊れた体(1967製)を修理してもらっています。

落ちる瞬間と落ちて止まった時の記憶が鮮明にありました。
落ちて止まった時、アタマから流れる血に視界が奪われていき「これは死ぬかも」と思いました。
その後救命処置してもらい今は何とか生きておりました
救命処置の間の記憶が飛び飛びで意識が戻ったあとでこれを書いているので過去形です

しかし、今もあたまや腕、首が痛くて寝たきりです

両手の指が痺れていますがこれはどうやらケーツイ損傷の疑いがあるらしく首を固定されたまま心電図モニター!?を付けて個室で寝正月が進行中です

そんな高SWRな状況なのでここまで書くの3時間以上かかりました

片手でケータイを持つことができないばかりか電源を入れるのも至難の業でアクロバティックな方法でなんとか入力しました。
で、看護師さんに撮影を手伝ってもらいながらつらつら状況を記します
頚椎と右手
頚椎と右手ヤラれています

左手
左手ヤラれています


顔面と首
顔面と首ヤラれています

顔面縫合跡
顔面縫合跡


左開放骨折
左開放骨折(治療後)


右手首複雑骨折(手術前)
右手首複雑骨折(手術前)

右手首複雑骨折(手術後)
右手首複雑骨折(手術後)

一度に両手を骨折するのは初めてですが、左右あわせて20回くらい骨折してきた経験が活きていてなんとか最低限の行動をとることが出来ています。
例えば、ワタクシは右利きなんですが左手で字を書けますし箸も操れます。
また、骨折した状態で歯磨きや洗髪するのも可能です なんという無駄なスキルと思いつつも何度も役立っているワタクシの骨折人生 笑

FT857病室入院中
857に入院

FT817とFT818病室は空きだった
817と818は空き部屋だった

ワタクシは FT-818ユーザーなんですが 857 に入院したのも何かの縁。
FT-857(つい先日絶版)が欲しくなってきました
入院してFT-857ほしくなったのはアタマにも障害が出てる影響だろうか?とても心配です 汗


自殺未遂ではありません。治療のための手術跡です。

2022/12/27

JB64 走行中クルマのバッテリー電圧が低くなる(正常)

 車(ジムニーJB64)の電圧が低くなるときがあることに気付きました。

画像はシガーソケットの電圧ですがバッテリーから直接電源をとっているFTM-300Dでも同じ数字になります。通常は14.8Vなので2.3Vも低くなります。


一旦低くなるとエンジンの回転数を上げてみても低いままです。数十分後に見ると14.8Vに戻っています。
12.5Vの状態で無線機が aprsのビーコンを送信すると10V台まで下がります。計測していませんがこれだけ電圧が低いと送信出力が低くなっていることが想像できます。

調べてみるとどうやらイマドキのクルマには「充電制御システム」というのがつけられていて燃費向上のために発電をコントロールしているぽいです。

対策として以前購入してあった 12V→13.8V 18A コンバータ

を使うことにします。
アマゾンのレビューでは無線機にノイズが入るとの記述がありましたがV/U帯では大丈夫かもしれないので入れてみようと思います

メモ:
入力線色:(+)赤、(-)黒
出力線色:(+)黄、(-)黒

2022/12/01

X68000 Z いよいよ予約受付開始 (2022/12/3からのようです)

気になっていた方も多いと思いますが X68000 Z がついに 12/3 から購入型クラウドファンディング を受付開始するようです。

秋月電子の 2160円 のスーパーキャパシタ購入をためらっているワタクシですが、X68000 Z ほしいです。そして I-Gate にしたいです。

CPU ARMベースSoC
メモリDDR3 512MByte
動作温度10〜35度
電源5V 3A

みたいなのでスペックがキビシイかな


12/3 受付を済ませました!

来年3月に出荷予定のようです

2022/11/11

[ルータ]NVR510導入

NVR510 というヤマハのルータを導入しました。

結線して設定を進めていくうちに SIPサーバの機能設定が見つからないことに気付きました。
SIPサーバ機能くらいはついているとばかり思ってたんですが機能が無いんですね。SIPクライアント機能だけしか無い。
着信したら相手の電話番号や登録済みの名前を PCに表示したかったのですが残念なことになりました。

マニュアルをめくりながら代替案を考えていると使えそうな機能がありました。
一部を抜粋すると「3.11.1 Lua スクリプト
本製品で Lua スクリプトを実行できます。Lua スクリプトにヤマハルーター専用 API を埋め込むことで、本製品の状態に応じ、本製品の設定変更やアクションをプログラミングできるようになります。」

とのこと
着信があったら指定URLの phpスクリプトを(GETで)起動して電話番号を検索させるというLuaスクリプトなんですが Lua という言語は初めてで書くのに苦戦しました。
苦戦しすぎて説明するのも面倒なので書いたものをそのまま載せます
以上

ptn = string.regexp("SIP Call from (.*)")
req_tbl = {
  url = "",
  method = "GET",
  auth_type = "none",
}
-- SYSLOG (info, debug, notice)
log_level = "info"
------------------------------------------------------------
local rtn, str
local res_tbl
while (true) do
  rtn = ""
  str = ""
  req_tbl.url = "https://PATH_TO_URL/tel_search.php"
  rtn, str = rt.syslogwatch(ptn)
  req_tbl.post_text = ""
  if rtn > 0 then
    aaaa, bbbb = string.find(str[1] , "disconnected" , 1 , true)
    if aaaa == nil then
      log_text = string.format("1=%s" , str[1])
      rt.syslog(log_level, log_text)
      str[1] = string.gsub(str[1] , " " , "_")
      str[1] = string.gsub(str[1] , "/" , "_")
      str[1] = string.gsub(str[1] , ":" , "_")
      req_tbl.url = req_tbl.url .. "?text=" .. str[1]
      -- 
      res_tbl = rt.httprequest(req_tbl)
      if (res_tbl.rtn1) and (res_tbl.code) and (res_tbl.code == 200) then
        --
        rt.syslog(log_level, "[Lua] success to send message.")
        rt.syslog(log_level, req_tbl.url)
      else
        --
        rt.syslog(log_level, "[Lua] failed to send message.")
      end
      req_tbl.post_text = ""
    end
  end
end


2022/11/09

[驚き]すごいな php

php のコードを書いていたらハマった

環境は PHP 7.3.5 (cli) だけどたぶん他のバージョンでも一緒かもしれない ← 無責任


<?php
func_1( 1,2,3,4,5 ); // function func_1 が期待している以上の引数でコール

function func_1( $a, $b, $c ) {
    echo "$a,$b,$c" . PHP_EOL;
}


実行結果
1,2,3

このコードがエラーにならずというかワーニングさえ無く実行できる php の深すぎる懐に啞然とした 笑

2022/07/16

[お別れ] 急遽 自動車を変更することに

本日午後、愛車ジムニーのエンジンオイルを交換してもらうために車屋さんに行ってリフトに載せたところ、前輪というか前輪の足回り全体にガタがあるとの指摘が・・・

点検するところを一緒に見ていましたが、どうやら キングピン、ステアリングギアボックス、スタビライザーの両付け根にガタがあり、特にキングピンとステアリングギアボックスは確実に交換が必要な状態でした。

キングピンは前回の車検で交換しているのにもうダメになったというのは早すぎると思いましたが、思い当たることがあります

3年前から 195/80/16インチのタイヤを履くために約2インチ車高を上げていました。
上げるのに使った部品はショックアブソーバーとスプリングだけで、それによって狂うステアリングのキャスター角やホーシングの左右のズレなどなどの補正部品は使っていませんでした。

まあ、2インチ上げるくらいなら補正なしでも乗れることは乗れるんですが、常に足回りに無理が掛かっているので結果、今回の故障になったんだと思います

で、今年末は車検だし修理費用を合わせると高額になり、更に同じ故障を数年毎に繰り返すことになります。

購入してから 9年目で 168,000Km 乗っていたので、その場で別の車に乗り換えることに決めました

結局、オイル交換は中止して新しい車に付けるオプションなど話し合って代車で帰宅しました

来週には見積りが出るようです。新しい車もジムニーです。

今回の教訓から半端な車高アップは行わず、純正サイズのタイヤにしようと思っています

代車の期間はSMAコネクターの仮設アンテナのため APRS のビーコンが I-Gate から 2Kmくらいしか飛ばないです

2022/06/12

PICO (ピコ)SF600 の整備

庭の雪が無くなってしばらく経ったので耕うん機を整備しました

整備といってもエンジンオイル交換だけですけど

対象は株式会社オーレックのミニ耕うん機 PICO (ピコ)SF600 という幅50センチほどのかわいいサイズのやつです

農機具屋さんから聞いたオイル交換時の手順を注意点を含めて忘れないようメモっておきます

用意するもの
1.新品のエンジンオイル 10W-30 を600cc以上(ガソリンエンジン用またはディーゼルエンジン用)
2.ウエス(雑巾)
3.廃油の受け皿
4.メガネレンチ

燃料コックを開く(前年最後の作業後、燃料コックを閉じていたため)
エンジン始動(エンジンオイルを温めるため)
5分くらいでエンジン停止
黄色いオイルフィラーキャップ(エンジンオイル注入口)を指で半回転ほど緩める(オイルが抜けやすくなるため)
メガネレンチでエンジンオイルドレンボルトを緩めて完全に外す
この時、停車状態でエンジンは少し前傾しているがもっと前傾させてなるべく全てのオイルを出し切る
ドレンボルトにパッキンが付いていることを確認してドレンボルトを完全に締める
エンジンオイルを抜く時とは逆にエンジンを後傾させる(斜面や段差を利用する)
オイルフィラーキャップを指で完全に外す
このエンジンの場合、注入口からあふれ出てくるまで入れるとちょうど規定量の約600cc
オイルフィラーキャップを指で完全に締める
漏れたりしたオイルがあればこの時点ですべて拭き取っておく
エンジン始動
2~3分後、エンジンを観察してオイルのモレや滲みがないことを確認する
エンジン停止
以上

一般的なエンジンだとエンジンオイルは規定量より少しだけ少なく入れてからフィラーキャップのゲージを使って規定量になるよう注ぎ足していくと思いますが、このエンジンの場合、注入口から溢れ出るまで入れるというのがポイントとのこと

また、このエンジンにはオイルエレメント(フィルターの類)は存在しないとのこと

シーズン終了時には燃料コックを締めた上でキャブレターのドレンボルトを緩めてキャブレター内のガソリンを抜くと良いとのこと。抜いたら忘れずにドレンボルトは締めておく
以上


2022/04/14

php7.2 で count の挙動が変わっていた・・・

xserver というレンタルサーバーで cron 設定しようとしたら php のバージョンが選べるようになっていたのでテキトーに php7.4 を選びました。

しかし、php のプログラムを動かすと今までは出なかった Warningが出まくりです。

Warning: count(): Parameter must be an array or an object that implements Countable in test.php on line 10


今更なんですが昨年頑張って php5.6 から php7.1 に対応するよう修正してきたのにまた修正箇所が出てきました・・・

SELECT * FROM table_name;
などどやって DBから取得した $data というデータを
for( $i=0 ; $i < count( $data ) ; $i++ ){
}
とやるのはよくあるんですが、php7.2以降、count はカウンタブルで無い場合 Warning になるようで動くことは動くけどうざったいし実行速度にも影響がでそうです

で、下記のようにすると Warning は出なくなるけど修正箇所が全部で100ヶ所近く有ってもうダメだ思案中・・・

( is_array ($lretc) ) ? $count_data = count( $data ): $count_data = 0;

for( $i=0 ; $i < $count_data ; $i++ ){


2021/12/25

seleniumのブラウザを chrome から chromium へ変更

 Windows10 64bit php7.3 + chromedriver + phpwebdriver2.53.1 + chromeブラウザで24時間あっちこっちのページを自動で渡り歩いているプログラムがあるのですが、今朝 chromeが自動でバージョンアップし 96.0.4664.110 になって動かなくなりました。

これは時々あることでいつものように chromedriver のバージョンを合わせたら動くだろうとやったら大変なことになって chromium に切り替えて復旧したという誰にも参考にならないだろう情報をメモしておきます。

(php + chromedriver + phpwebdriver + chromeブラウザ という構成のシステムを使っている人はいるのだろうか?)

まず chromedriver ダウンロードしてみた

(結果的にこれは失敗に終わった)

・If you are using Chrome version 96, please download ChromeDriver 96.0.4664.45

とあるので chromedriver 96.0.4664.45 をダウンロードして入替えたところ、ヘッドレスだと chromeのプロファイルが参照できないのか各種ページにログインしていた状態を復元できなくなった。

ヘッドレスをやめてブラウザ画面を起動するようにするとログインした状態が復元するが、ただでさえ不安定な seleniumによるウエブブラウザ自動運転が一層不安定になるし動作も遅くなってしまう。

ひとしきりあれこれ試して解決出来ず自動でバージョンアップしない chromium(のバージョン95) に切り替えるべくダウンロードしました。

ダウンロードページで 920069 を選択して chrome-win.zip と chromedriver_win32.zip をダウンロードしました。

沢山あるけど 920069 がバージョン 95.0.4638.0 と大体良さそう

どちらのファイルもインストーラは無いので zipを解凍して良さそうな場所にフォルダ毎配置してから手動で chromiumブラウザを起動して(実行ファイル名は chrome.exe) googleやら Yahooにログインした状態にしてプロファイルをいい感じに仕上げました。

seleniumをドライブする phpプログラムのブラウザ起動部分を下記に抜粋。
当然、各種パスは各自の環境に合わせて指定する必要があります。
chromiumに切り替えるために変更したのは 「これを追加 1/2」 と 「これを追加 2/2」が指す 2行だけ


<?php
    require_once './vendor/autoload.php';
    use Facebook\WebDriver;
    use Facebook\WebDriver\WebDriverExpectedCondition;
    use Facebook\WebDriver\WebDriverBy;
    use Facebook\WebDriver\Chrome\ChromeOptions;
    use Facebook\WebDriver\Chrome\ChromeDriver;
    use Facebook\WebDriver\Remote;
    use Facebook\WebDriver\Remote\RemoteWebDriver;
    use Facebook\WebDriver\Remote\DesiredCapabilities;
    use Facebook\WebDriver\WebDriverKeys;
    use Facebook\WebDriver\WebDriverSelect;
    putenv('webdriver.chrome.driver=./chromedriver.exe');
    $options = new ChromeOptions();
    $options->addArguments(['--headless']);        // ヘッドレス指定
    $options->addArguments(['--start-maximized']); // ウインドウ最大化
    $options->addArguments(['--ignore-certificate-errors']);
    $options->addArguments(['--ignore-ssl-errors']);
    // chromium実行ファイルのパス指定を追加 
    $options->setBinary("D:/xampp/chrome-win/chrome.exe");    // ←これを追加 1/2
    // chromiumプロファイルのパス指定を追加 
    //$profile = "--user-data-dir=D:/xampp/selenium/Default";
    $profile = "--user-data-dir=D:/xampp/Chromium/User_Data/Default"; // ←これを追加 2/2
    $options->addArguments([$profile]);
    $caps = DesiredCapabilities::chrome();
    $caps->setCapability(ChromeOptions::CAPABILITY, $options);
    $webdriver = RemoteWebDriver::create('localhost:4445/wd/hub'); // selenium webserver経由のブラウザ起動
    $webdriver->get('https://www.google.com/'); // googleへ画面遷移
    sleep(3);
    $webdriver->quit(); // webserver切断、ブラウザ終了


インストールせずに解凍しただけのデフォルトブラウザでもない chromium を起動する方法が分からず検索しまくりましたがここで $options->setBinary と指定できることが分かって無事動かすことが出来ました。

chromeが更にバージョンアップすれば問題は解決するのかもしれませんが待てないのでこんな後ろ向きな対応をした次第です。

2021/10/10

だいぶ土地勘が働くようになってきました

本日も無駄な電波を出しつつ2箇所ほど鉱山跡を見て回りました。

秋田県横手市に帰って来て2年ちょっと、だんだん横手を中心に秋田県南と岩手県南あたりの土地勘が働くようになってきたように思います。

無駄電波を出しながらウロウロするのを楽しめる習性のおかげかなと思っております。

そもそも2年前まで私が知っていた横手(よごで)は以下の地図の水色内だけでしたので、APRSのあかげでだいぶ広い範囲で土地勘が出来てきて、着々と土着化が進行しております。これ大事だと思っております

なぜなら、社会人になってから30数年、基本的に所属はひとつだったものの、国内の半導体製造ライン新設計画が出るたびに転勤や長期出張を繰り返していたため同じ場所に続けて2年以上住んだことがなく、どこの土地にも愛着などわかなかったからです。極端な場合、ビジネスホテルの同じ部屋に1年半泊まっていたときもありました(これはもうね、住んでいたなんて言いたくない)こういうの根無し草っていうんでしょうかね・・・

いま、同じ場所に初めて2年以上住んでこれからも住み続けるだろう横手に、土地勘と同時に愛着がわいてきており嬉しいというか安堵しております。年齢も年齢なのでね

50歳過ぎて初めて定住するってこれだけ聞くとどんな社会人だよって思われるだろうから誰にも言えないな 大汗

JL7TUSの知っていた横手の範囲
JL7TUSの知っていた横手(よごで)の範囲 狭い!

地図に線入れをしていて思いました。この範囲ってとても古い横手(よごで)なんじゃないか?

JL7TUS は今でいう中央町(昔は馬喰町だった部分)で生まれ育ちました。

今は実家が引っ越して別の場所(ジョーリっていう聞いたこと無い住所でよごでの外れのほう)にいます。

で、昔のよごでを調べてみました。

昔の横手 出展はここ

平鹿郡横手町 明治22年の町村制開始時の範囲
平鹿郡横手町 明治22年の町村制開始時
大体合ってる へえー

JL7TUS が思っている「よごで」の範囲は平鹿郡横手町のコア部分だったのか・・・

さらに、別の昔の地図で「平鹿郡庁舎」ってのが今でいう横手区検察庁の場所にあったのを発見。この手書きの地図は上が南、下が北になっていて中心が蛇の崎橋です

その場所は別の表現だと、横手中央公民館の道路を挟んで向かいというか横手幼児園の横です。


ん?


横手「中央」公民館に「横手」幼児園、そして「平鹿郡庁舎」が有った、というか平鹿郡庁舎以外は現存しているけど、名称からして当時はそこらへんが横手の中心部だったのかな?

昭和40年~50年代、横手市役所が大町に有って市民の生活の中心部が四日町と大町だった時代、横手幼児園を卒園して横手北小学校の帰り道に横手中央公民館で遊んでいた JL7TUS はその当時(明治から昭和にかけて)の横手が気になってきました・・・

なんだか長くなりそうなので以上です。続きそうな予感 笑

2021/08/14

アメダスAPI取得サンプル

 リクエストを頂いたのでアメダスのデータを取得するサンプルを載せておきます。

$ php -v
PHP 7.3.29-1~deb10u1 (cli)
という環境ですがPHP5以上であれば気にする必要は無いと思います。
get_amedas_sample.php というファイル名でサンプルプログラムを作りました。
その内容を cat したのが下記です

$ cat get_amedas_sample.php
<?php
// 横手市のアメダスデータを取得して表示する
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_regex_encoding('UTF-8');
date_default_timezone_set('Asia/Tokyo');

// 現在日時から20分前を求める(あまり直近だとデータが取れないぽい)
$day = new DateTime('-20 minutes');
$target_time = substr( $day->format('YmdHi00') , 0 , 11) . '000';
if(!($lxml =    @file_get_contents("https://www.jma.go.jp/bosai/amedas/data/map/$target_time.json"))){
    // アクセス失敗
    echo 'file_get_contents error exit.'.PHP_EOL;
    exit;
}

$lxml = mb_convert_encoding($lxml, 'UTF8', 'JIS,UTF-8,EUC-JP,SJIS-WIN,ASCII');
$json_arr = json_decode($lxml,true);
/*
URL には10分毎の観測時刻指定が可能 */10
32596は横手市の観測所番号です
各地の観測所番号は下記です (公的機関がhttpか・・・) http://www.jma.go.jp/jma/kishou/know/amedas/ame_master_20210707.pdf
*/
$station_number = '32596';
$measurement_date = substr($target_time,0,4) .'-'.
                                     substr($target_time,4,2) .'-'.substr($target_time,6,2) .' '.
                                     substr($target_time,8,2) .':'.substr($target_time,10,2).
                                  ':'.substr($target_time,12,2);

echo "観測所番号:$station_number 観測時刻:$measurement_date" . PHP_EOL;
foreach($json_arr[$station_number] as $key => $value){
    echo $key . ' ' . $value[0] . ' ' . $value[1] . PHP_EOL;
}
?>
↑ ここまでがサンプルプログラム

下記が実行結果です
$ php get_amedas_sample.php
観測所番号:32596 観測時刻:2021-08-14 16:50:00
temp 19.8 0
sun10m 0 0
sun1h 0 0
precipitation10m 0 0
precipitation1h 0 0
precipitation3h 0 0
precipitation24h 2 0
windDirection 6 0
wind 1.1 0
$

おそらく他のバージョンの PHP(PHP5以上)や、Windows,UnixライクなOS,MacOSなどでもイケるかと思います
php.ini で file_get_contents で URL指定できるように、というのと mbなんとか達を使えるようにしておく必要がありますのでご注意ください
当たり前ですが過剰なアクセスは控えなければなりません

2021/08/09

データ型もあいまいな PHP ・・・でも厳しい面もあったという話

今、先月の末日を取得するというのを PHP(バージョン7.3.5)で書いてて

$last_month_last_day = $day->modify('last  day of last month')->format('Y-m-d 23:59:59');

この行 ↑ が LINTチェックでは問題ないけど実行すると下記のエラーになる・・・

Fatal error: Uncaught Error: Call to a member function format() on bool in XXX.php

何度見ても間違っていないので5分くらい経ったころ、PHPの不具合を疑い始めた・・・
長年の経験から変な話ではありますが、言語の不具合を疑うようになったらそれはプログラムのほうのミスが確定したのとイコールなので安心してバグ探しに専念します。
30歳から筋金入りの老眼なので文字サイズを3センチくらいに拡大してじっくり見てみると・・・

え?まさか・・・これ?これなの?うそー!
PHP ってお気楽お手軽言語だと思ってたのに変なところがシビア!
そもそも LINTチェックの意味分かってないだろ PHP 笑
ま、それが PHP らしさかも 笑

×  $last_month_last_day = $day->modify('last  day of last month')->format('Y-m-d 23:59:59');

$last_month_last_day = $day->modify('last day of last month')->format('Y-m-d 23:59:59');

前後の行との体裁を整えるため last と day の間に半角空白 2文字を入れてたのが許されなかったのでした
last と day の間の空白は半角1文字でなければならないぽい 笑
ここでは書いていないけど first day の記述でも同様だった

インタプリタ系の言語で実行速度を得るにはこうしたアプローチはあるんだろうけど PHP って記述のゆるさが特徴みたいなもので突然のこれの遭遇にビビった次第です。

これだけは譲れないみたいなすごいな PHP 笑

別の環境の PHP 5.5.14 で試したところやはり同様の結果になりましたので仕様なんでしょうね。
へえー

MySQL で SELECT into outfile 出来なくてハマった件

 Windows上の MySQL で SELECT into outfile で CSVファイルをエクスポートしようとしてハマったので残しておく 環境 Windows10 Pro バージョン 1809 MySQL 8.4.0 という環境で SELECT * FROM table1...